前向差分、后向差分、中心差分精度分析及Matlab仿真
创作时间:
作者:
@小白创作中心
前向差分、后向差分、中心差分精度分析及Matlab仿真
引用
CSDN
1.
https://blog.csdn.net/qq_44588244/article/details/128675455
一、前向差分
前向差分公式:(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 on
a = 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 on
f1x = 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)]/dx
f1x_f = (fx_0dx - fx)/dx;
plot(x,f1x_f,'--');
% 后向差分:f'(x)=[f(x)-f(x-dx)]/dx
f1x_b = (fx - fx_1dx)/dx;
plot(x,f1x_b,'-.');
% 中心差分:f'(x)=[f(x+dx)-f(x-dx)]/2dx
f1x_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/100
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/100','FontSize',20)
legend("前向误差","后向误差","中心误差",'FontSize',12)
hold off
%% 差分误差分析,dx=5*pi/200
a = 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,误差缩小!
热门推荐
西洋参、人参都是参...却差别大,你究竟适合吃哪种?
西洋参、人参都是参...却差别大,你究竟适合吃哪种?
浙江去年常住人口增加50万,宁波、温州人口临近“千万级”
浙江去年常住人口增加50万,宁波、温州人口临近“千万级”
春节档续集剧大战:《无所畏惧2》VS《三叉戟2》谁更值得期待?
大棚种植绿宝田瓜技术
春耕正当时,关于可持续农业的6个概念不可不知
色彩搭配指南:如何运用颜色创造和谐视觉效果
个性化桌面与手机图标设置,提升使用效率与生活美感的方法探讨
打嗝的中医治疗方法
快速止打嗝的方法有哪些
还阳散:从传统名方到现代临床应用
大唐不夜城&陕历博,西安六日游必打卡
跟着西安霞霞,深度打卡古都历史建筑
古埃及人的"阿赫":揭秘死后灵魂的秘密
雷蒙德·穆迪:揭秘死后灵魂世界的先驱
佛教vs基督教:死后灵魂去哪儿?
濒死体验揭秘:灵魂真的能出窍?
蛇年头像设计指南:从文化象征到创意实践
从入门到精通:钓鱼摄影技巧全攻略
双11过后,钓鱼才是治愈良药?
《沐阳上学记》:家庭教育的智慧之书
从《沐阳上学记》到《轻松家教72招》:萧萍的科学育儿之道
西洋参有什么药用价值
胃药哪种效果最好?一文告诉你答案
运动缓解头疼:慢跑和HIIT哪个更适合你?
吃高麗菜顧胃?認識胃潰瘍的成因、症狀、飲食,3大營養素保護胃壁!
科学饮食,告别头疼烦恼
告别头疼:从生活方式调整开始
妙佑医疗国际推荐:科学缓解头疼指南