我有一个函数f(x) = sin(x)/x^3,我试图使用一阶、二阶和四阶有限差分方案来估计其一阶导数。我试图在 MATLAB 中绘制截断误差,但我发现自己的误差随着步长的减小而增加。我不确定我错在哪里。附上我的代码片段。
syms y
dx = linspace(10^(-5), 10^(-0));
f = @(x) sin(x)/x^3;
x = 4;
df1 = (f(x+1)-f(x))./dx;
df2 = (f(x+1)-f(x-1))./(2.*dx);
df4 = (f(x-2)-8*f(x-1)+8*f(x+1)-f(x+2))./(12.*dx);
exact = cos(x)/x^3 - (3*sin(x))/x^4;
for i=1:length(dx)
error1(i) = abs(df1(i)-exact)
error2(i) = abs(df2(i)-exact)
error4(i) = abs(df4(i)-exact)
end
figure
loglog(dx,error1,'r','linewidth',2)
hold on
loglog(dx,error2,'b','linewidth',2)
loglog(dx,error4,'k','linewidth',2)
