变步长梯形法求积分matlab程序,变步长复化辛普森公式计算积分

变步长复化辛普森公式计算积分 matlab编程

2. 编写用变步长复化辛普森公式计算积分 b

af(x)dx 的程序。

1用上面编写的程序计算下列积分并分析计算结果 (1

1-22-jpg_6_0_______-24-0-0-24.jpg

)

0cosxdx (2

1-14-jpg_6_0_______-17-0-22-17.jpg

)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