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

news/2024/10/22 10:58:41/

一、前向差分

请添加图片描述

前向差分公式:(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,误差缩小!


http://www.ppmy.cn/news/152342.html

相关文章

Matlab多重积分的两种实现【从六重积分到一百重积分】

问题 今天被问了一个问题: μ ∫ ∫ ∫ ∫ ∫ ∫ f ( x 1 , x 2 , x 3 , x 4 , x 5 , x 6 ) d x 1 d x 2 d x 3 d x 4 d x 5 d x 6 σ 2 ∫ ∫ ∫ ∫ ∫ ∫ [ f ( x 1 , x 2 , x 3 , x 4 , x 5 , x 6 ) − μ ] 2 d x 1 d x 2 d x 3 d x 4 d x 5 d x 6 \begin{ar…

目前市场上的全画幅的数码相机

在短短一年的时间里,我们共迎来了8款全画幅产品,这其中包括了: 1、两款高端全幅单反:(佳能1DX和尼康D4); 2、两款专业全副单反: (佳能5D3和尼康D800)&#xf…

位深度8位什么水平_佳能1DX3视频12位RAW拍摄和8位mp4拍摄的色彩有多大差别

佳能1DXMarkIII 是佳能数码单反相机的旗舰机型。 该产品具有双像素 CMOS 的高速对焦和每秒多达 16 帧的高速连拍等功能,适用于在体育和新闻报道等领域发挥积极作用的专业人士。 虽然这台机器基本上是一个相机,但是除了在摄影方面表现出强大的优势以外,但实际上,视频拍摄功能…

Java中关于ConditionObject的signal()方法的分析

代码块的展示 isHeldExclusively()这个仅持有锁资源的方法,在ReentrantLock中重写进行判断,要是没有持有锁资源那么会返回false,就会出现直接抛异常IllegalMonitorStateException(非法监视器状态异常)获取排在Conditi…

GNS3 2.1.21 IOU全套

链接:https://pan.baidu.com/s/1hYywFby0bh3_zmSsgzT2kg 提取码:k1va 复制这段内容后打开百度网盘手机App,操作更方便哦

\\入手N1

终于拿到梦寐以求的Google nexus one了,哈哈 截图纪念下: 我的主页 目录 500W像素的拍摄(自动对焦效果很酷哦) QQ登陆(我用的是Wifi登陆)

原道N70双擎EZ系列刷机包

n70十多个版本,垃圾平板,刷机可费事了,这个是网上没有的EZ系列的刷机包,找到很辛苦的分享大家。注意是EZ 链接: https://pan.baidu.com/s/15-VZJCPKFddQGORDLKReew 提取码: yvb7 复制这段内容后打开百度网盘手机App,操…

L2-002 链表去重(测试点1的坑)

思路: 通过map映射先将原链表处理出来,再通过判重将其分成两部分存储输出。注意测试点1有个坑点(原链表不是一条完成的链表,数据如下:) (测试点1)输入: 00001 3 00001 1 00002 00002 2 -1 0000…