几种常见的数值积分的比较
不知道要选什么的被积函数比较合适,format long
fun=@(x)cos(x);
x0=2;
x1=3;
tol=10.^[-3:-2:-7,-8];
n=length(tol);
info=num2str(tol');
info=mat2cell(info,ones(n,1),size(info,2));
y=sin(x1)-sin(x0); %精确的解
for i=1:n
subplot(2,2,i);
=RectangInt(fun,x0,x1,tol);
=TrapzInt(fun,x0,x1,tol);
=SimpsonInt(fun,x0,x1,tol);
=RombergInt(fun,x0,x1,tol);
plot(1:log2(n1)+1,yiter1,1:log2(n2)+1,yiter2,1:log2(n3),yiter3,...
1:log2(n4)+1,yiter4([(1:log2(n4)+1).*(2:log2(n4)+2)/2]));
legend('矩形法','梯形法','Simpson','Romberg')
xlabel('对半次数')
ylabel('int');
title(info{i})
end
%%%%指定容限比较
abs(-y) %残差
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%矩形法是比较差的一种方法
fun=@(x)exp(-x.^2);
x0=0.5;
x1=2;
tol=1e-12;
y=erf(x1)-erf(x0);
tic; =TrapzInt(fun,x0,x1,tol); t2=toc;
tic; =SimpsonInt(fun,x0,x1,tol); t3=toc;
tic; =RombergInt(fun,x0,x1,tol); t4=toc;
figure
plot(1:log2(n2)+1,yiter2,1:log2(n3),yiter3,...
1:log2(n4)+1,yiter4([(1:log2(n4)+1).*(2:log2(n4)+2)/2]));
abs(-y) %残差
legend('梯形法','Simpson','Romberg')
format
复制代码
在本例中。
对于1e-9容限,矩形法就比较吃力。
对于1e-15容限,梯形法也比较吃力。
页:
[1]