Matlab adaptive quadrature

44 篇文章 0 订阅
% script to perform adaptive quadrature
clear all, close all

global pts

% function to be integrated defined in routine f
f = 'integrand';
a = 1; b = 3;
pts = [a;b];

tol = input('Enter error tolerance: ');

% this is just to plot the graph
% it's usually a good idea to look at the integrand
% if possible before you try to integrate it
ezplot(f,[1,3])
disp('Hit any key to continue')
pause
hold on

fa = feval(f,a);
fb = feval(f,b);

Sf_old = simp(a,b,f,fa,fb);

Sf = adaptiveSimpson(a,b,f,fa,fb,tol,Sf_old)

qpts = sort(pts);
plot(qpts,zeros(length(pts),1),'rx')

disp('number of function evaluations')
disp(length(pts))
disp('Hit any key to continue')
pause

% now compare result with straight Simpson's rule
% using the same number of points
sum = 0; 
h = (b-a)/(length(pts)-1);
for i=0:length(pts)-1,
   fxi = feval(f,a+i*h);
   if i == 0 | i == length(pts)-1,
      sum = sum + fxi;
   elseif mod(i,2) == 1,
         sum = sum + 4*fxi;
   else
         sum = sum + 2*fxi;
   end
end
disp('Simpson''s rule with the same number of points')
sum = h/3*sum
   
% compute exact solution
% anti-derivative of integrand is 10*cos(10/x)
% so ...
exactSolution = 10*(cos(10/b)-cos(10/a));

errorAdaptiveSimpson = exactSolution - Sf
errorUniformSimpson  = exactSolution - sum
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值