Euler方法的总截断误差 - matlab

时间:2015-05-13 19:10:13

标签: matlab

我们可以在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

准确性的顺序由公式给出:

enter image description here

其中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)));来计算欧拉方法的误差。

不是公式给出的总截断误差:

enter image description here

?那么,我们不应该使用命令error_euler(i)=abs(y(N(i))-exact(t(N(i))));吗?或者我错了吗?

0 个答案:

没有答案