我们可以在Matlab中实现Euler方法如下:
function [t,y]=myeuler(a,b,y0,N)
h=(b-a)/N;
t=zeros(1,N+1);
y=zeros(1,N+1);
t(1)=a;
y(1)=y0;
for n=1:N+1
y(n+1)=y(n)+h*fun(t(n),y(n));
t(n+1)=t(n)+h;
end
准确性的顺序由公式给出:
其中E_i是步骤h_i的错误。
使用上述关系,我们可以使用以下脚本计算准确度的顺序:
T=2;
t0=0.0;
y0=exact(t0);
N=[8 16 32 64 128 256 512 1024];
m=length(N);
error_euler=zeros(1,m);
for i=1:m
[t,y]=myeuler(t0,T,y0,N(i));
error_euler(i)=abs(y(N(i)+1)-exact(t(N(i)+1)));
if (i>1)
p1(i)=(log(error_euler(i-1)/error_euler(i))/(log((T./N(i-1))/(T./N(i)))));
end
end
我无法理解为什么我们使用公式error_euler(i)=abs(y(N(i)+1)-exact(t(N(i)+1)));
来计算欧拉方法的误差。
不是公式给出的总截断误差:
?那么,我们不应该使用命令error_euler(i)=abs(y(N(i))-exact(t(N(i))));
吗?或者我错了吗?