变步长复化辛普森公式计算积分 matlab编程
2. 编写用变步长复化辛普森公式计算积分 b
af(x)dx 的程序。
1用上面编写的程序计算下列积分并分析计算结果 (1
)
0cosxdx (2
)0xcosxdx (3) 220xdx
程序:
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(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.9f\n',n,S2,abs(S2-S1)); if abs(S2-S1)
break;
else
T1=T2;
S1=S2;
n=2*n;
end
end