复化Simpson求积公式计算数值积分
一·复化Simpson求积公式的数学理论
如果用分段二次插值函数近似被积函数,即在小区间上用Simpson公式计算积分近似值,就可导出复化Simpson公式。
二·复化Simpson求积公式的算法和流程图
将积分区间[a,b]分成n=2m等分,分点为 ,
积分,则有
在每个小区间[
](k=0,1,…,n-1)上。用Simpson公式求
求和得
整理后得到
xx
(5-21)
式(5-21)称为复化Simpson公式。
如果差为
,则由Simpson插值余项公式可得复化公式的截断误
因为为连续,故存在,使得
代入上式得
式(5-22)表明,步长h越小,截断误差越小。与复化梯度公式的分析相类
似,可以证明,当n=2m→∞时,用复化Simpson公式所得的近似值收敛于积分值,而且算法具有数值稳定性。
1程序中需要选择的积分函数F1,F2,F3
F1表示函数
f(x)??0sinxdx。 x
bf(
(5-22)
F2表示函数f(x)??24?5x?ex?2x2?1?lnx12x?11dx。
F3表示函数f(x)??0cosxsinxdx。 41?cosx
操作流程图:
三·复化Simpson求积公式的Matlab实现 function I=squad(x,y)
%复化Simpson求积公式,其中, %x为向量,被积函数自变量的等距结点; %y为向量,被积函数在结点出的函数值; n=length(x); m=length(y);
%积分自变量的结点数应与它的函数值的个数相同 If rem(n-1,2)~=0 I=tquad(x,y); return; end N=(n-1)/2; H=(x(n)-x(1))/N; a=zeros(1,n); for k=1 :N;
a(2*k-1)=a(2k-1)+1; a(2*k)=a(2*k)+4; a(2*k+1)=a(2*k+1)+1; end
I=h/6*sum(a.*y);
四·复化Simpson求积公式的算例实现
利用程序计算积分
解:先用M文件定义一个名为myfun的函数:
function y=f(x); y=1/(1+x^2);
在MATLAB命令窗口中输入 .>>Q = quad(@myfun,-1,1) Q =
1.5708 故