《变步长复化辛普森公式计算积分》由会员分享,可在线阅读,更多相关《变步长复化辛普森公式计算积分(3页珍藏版)》请在金锄头文库上搜索。
1、2. 编写用变步长复化辛普森公式计算积分( )baf x dx 的程序。 用上面编写的程序计算下列积分并分析计算结果 (1)0cosxxdx (2)2202cosxx dx (3)10dxx 程序: function S=bianfuhuasimpson(fx,a,b,eps,M) % 变步长复合 simpson 求积公式 % 调用方式: S=fuhuasimpson(fx,a,b,epsilon) % fx - 求积函数(函数文件) % a, b - 求积区间 % eps - 计算精度 % M-最大允许输出划分数 n=1; h=(b-a)/n; T1=h*(feval(fx,a)-feval
2、(fx,b)/2; Hn=h*feval(fx,(a+b)/2); S1=(T1+2*Hn)/3; n=2*n; % 最好与倒数第三行保持一致(变步长) while n=M T2=(T1+Hn)/2; Hn=0; h=(b-a)/n; for j=1:n x(j)=a+(j-1/2)*h; y(j)=feval(fx,x(j); Hn=Hn+y(j); end Hn=h*Hn; S2=(T2+2*Hn)/3; fprintf( n=%2d S2=%-12.9f S2-S1=%-12.9fn,n,S2,abs(S2-S1); if abs(S2-S1)eps break; else T1=T2;
3、 S1=S2; n=2*n; end end S=S2; % 达到下列条件之一,则运算终止: % (1).abs(S2-S1)M % 输入 1:S=bianfuhuasimpson(inline(sqrt(x)*cos(x),0,pi,10e-6,2000) % 输入 2:S=bianfuhuasimpson(inline(2*x2*cos(x2),0,sqrt(pi),10e-6,2000) % 输入 3:S=bianfuhuasimpson(inline(sqrt(x),0,1,10e-6,2000) 输出结果: (1) S=bianfuhuasimpson(inline(sqrt(x)*
4、cos(x),0,pi,10e-6,2000) n= 2 S2= S2-S1= n= 4 S2= S2-S1= n= 8 S2= S2-S1= n=16 S2= S2-S1= n=32 S2= S2-S1= n=64 S2= S2-S1= n=128 S2= S2-S1= n=256 S2= S2-S1= n=512 S2= S2-S1= n=1024 S2= S2-S1= S = (2) S=bianfuhuasimpson(inline(2*x2*cos(x2),0,sqrt(pi),10e-6,2000) n= 2 S2= S2-S1= n= 4 S2= S2-S1= n= 8 S2=
5、S2-S1= n=16 S2= S2-S1= n=32 S2= S2-S1= n=64 S2= S2-S1= n=128 S2= S2-S1= n=256 S2= S2-S1= n=512 S2= S2-S1= n=1024 S2= S2-S1= S = (3) S=bianfuhuasimpson(inline(sqrt(x),0,1,10e-6,2000) n= 2 S2= S2-S1= n= 4 S2= S2-S1= n= 8 S2= S2-S1= n=16 S2= S2-S1= n=32 S2= S2-S1= n=64 S2= S2-S1= n=128 S2= S2-S1= n=256 S2= S2-S1= n=512 S2= S2-S1= n=1024 S2= S2-S1= S =