小工具知识网

当前位置: 首页 > 行业知识 > 前向差分、后向差分、中心差分精度,matlab仿真

行业知识

前向差分、后向差分、中心差分精度,matlab仿真

2026-11-02 06:45:14 来源:互联网转载

一、前向差分

前向差分公式:(1)���勒展开为:(2)

由泰勒展开可以推出 f '(x) : (3)

由(3)可以知道右边第一项是前向差分,而其他项的和是函数f '(x)与前向差分的误差,用o(x)表示,得出:(4)

因为误差项为o(x),o(x)主要项为Δx/2。而Δx为一阶,所以前向差分为一阶精度。

同理可以推出后向差分

二、后向差分

后向差分公式:(1)

泰勒展开为:(2)

由泰勒展开可以推出 f '(x) : (3)

由(3)可以知道右边第一项是后向差分,而其他项的和是函数f '(x)与后向差分的误差,用o(x)表示,得出:(4)

因为误差项为o(x),o(x)主要项为Δx/2。而Δx为一阶,所以后向差分为一阶精度。

三、中心差分

中心差分公式:(1)

泰勒展开为:(2)

由泰勒展开可以推出 f '(x) : (3)

由(3)可以知道右边第一项是中心差分,而其他项的和是函数f '(x)与中心差分的误差,其中主要项就是 (Δx^2)/6,由于 Δx^2是二姐的,因此中心差分的精度是二阶精度。

总结:

1、对于一阶差分如果Δx缩小到原来的1/2,那么误差项也会缩小到原来的1/2.

2、对于二阶差分如果Δx缩小到原来的1/2,那么误差项会缩小到原来的1/4.

3、因此二阶精度比一阶精度高。

四、Matlab仿真

%% 探究前向差分、后向差分、中心差分的精确度% 函数f(x)=sin(x)*exp(-0.3x)% 原函数图像hold ona = 100;x = linspace(0,5*pi,100);fx = sin(x).*exp(-0.3*x);plot(x,fx);% fx的一阶倒数画图% f'(x)=cos(x)*exp(-0.3x)-0.3sin(x)*exp(-0.3x)% f1x = cos(x).*exp(-0.3*x)-0.3*sin(x).*exp(-0.3*x);% plot(x,f1x);hold off%% 差分hold onf1x = cos(x).*exp(-0.3*x)-0.3*sin(x).*exp(-0.3*x);plot(x,f1x);dx = 5*pi/100;fx_0dx = sin(x+dx).*exp(-0.3*(x+dx));fx_1dx = sin(x-dx).*exp(-0.3*(x-dx));% 前向差分:f'(x)=[f(x+dx)-f(x)]/dxf1x_f = (fx_0dx - fx)/dx;plot(x,f1x_f,'--');% 后向差分:f'(x)=[f(x)-f(x-dx)]/dxf1x_b = (fx - fx_1dx)/dx;plot(x,f1x_b,'-.');% 中心差分:f'(x)=[f(x+dx)-f(x-dx)]/2dxf1x_c = (fx_0dx - fx_1dx)/(2*dx);plot(x,f1x_c,'o:','MarkerSize',3);title('f(x)的导数与有限差分近似,dx=5*\pi/100','FontSize',20)legend("f'(x)原始","前向差分","后向差分","中心差分",'FontSize',12)hold off%% 差分误差分析,dx=5*pi/100hold on% 前向误差error_f = f1x - f1x_f;plot(x,error_f,'--');% 后向误差error_b = f1x - f1x_b;plot(x,error_b,'-.');% 中心误差error_c = f1x - f1x_c;plot(x,error_c,'o:','MarkerSize',3);title('差分误差分析,dx=5*\pi/100','FontSize',20)legend("前向误差","后向误差","中心误差",'FontSize',12)hold off%% 差分误差分析,dx=5*pi/200a = 200;x = linspace(0,5*pi,a);fx = sin(x).*exp(-0.3*x);f1x = cos(x).*exp(-0.3*x)-0.3*sin(x).*exp(-0.3*x);dx = 5*pi/a;fx_0dx = sin(x+dx).*exp(-0.3*(x+dx));fx_1dx = sin(x-dx).*exp(-0.3*(x-dx));f1x_f = (fx_0dx - fx)/dx;f1x_b = (fx - fx_1dx)/dx;f1x_c = (fx_0dx - fx_1dx)/(2*dx);hold on% 前向误差error_f = f1x - f1x_f;plot(x,error_f,'--');% 后向误差error_b = f1x - f1x_b;plot(x,error_b,'-.');% 中心误差error_c = f1x - f1x_c;plot(x,error_c,'o:','MarkerSize',3);title('差分误差分析dx=5*\pi/200','FontSize',20)legend("前向误差","后向误差","中心误差",'FontSize',12)hold off

运行结果:

第一部分:原函数

第二部分:

细节图:

观察细节图:

由细节图可以观察出中心差分比前向后向差分都准确

第三部分:误差分析图

由这个误差分析图可以看出:中心差分(橙色的圆圈)的误差最小。

第四部分:修改采样频率,理论分析得知,采样频率越高,精度越高。

第三部分和第四部分对比,dx缩小1/2,误差缩小!

上一篇:携程英语怎么发音?

下一篇:yy怎么用配的服务器?