文章目录

  • 一、问题提出
  • 二、一阶导数和二阶导数的二阶中心差分格式
  • 三、一阶导数和二阶导数的四阶中心差分格式
  • 四、MATLAB代码

一、问题提出

  已知一系列的数据点(xi,yi),i=0,1,2,...,n(x_i,y_i),i=0,1,2,...,n(xi​,yi​),i=0,1,2,...,n,且横坐标等间距(即i≥1i\ge1i≥1且i≤ni\le ni≤n时,恒有xi−xi−1=hx_i-x_{i-1}=hxi​−xi−1​=h),如何计算/估计一阶导数f′(xi)f'(x_i)f′(xi​)及二阶导数f′′(xi)f''(x_i)f′′(xi​)?

二、一阶导数和二阶导数的二阶中心差分格式


  如上图,如何利用点B及其左右一个点的坐标(共三个点的坐标),来估计点B处一阶导数和二阶导数呢?想法非常简单:既然三个点的坐标已知,那么三个点可以插值得到一个一元二次多项式,求得一元二次多项式的系数后,就可以求多项式在B点处的一阶和二阶导数,从而得到一阶导数和二阶导数的二阶中心差分格式。利用matlab的符号计算可以很容易推导得到。
  一阶导数的二阶中心差分格式:
f′(x0+h)=f(x0+2h)−f(x0)2h(1)f'(x_0+h)=\frac{f(x_0+2h)-f(x_0)}{2h} \tag 1 f′(x0​+h)=2hf(x0​+2h)−f(x0​)​(1)
  二阶导数的二阶中心差分格式:
f′′(x0+h)=f(x0)−2f(x0+h)+f(x0+2h)h2(2)f''(x_0+h)=\frac{f(x_0)-2f(x_0+h)+f(x_0+2h)}{h^2} \tag 2 f′′(x0​+h)=h2f(x0​)−2f(x0​+h)+f(x0​+2h)​(2)

三、一阶导数和二阶导数的四阶中心差分格式


  与一阶导数和二阶导数的二阶中心差分推导过程一样,一阶导数和二阶导数的四阶中心差分推导,只需将一元二次多项式插值改为一元四次多项式插值即可。
  一阶导数的四阶中心差分格式:
f′(x0+2h)=f(x0)−8f(x0+h)+8f(x0+3h)−f(x0+4h)12h(3)f'(x_0+2h)=\frac{f(x_0)-8f(x_0+h)+8f(x_0+3h)-f(x_0+4h)}{12h} \tag 3 f′(x0​+2h)=12hf(x0​)−8f(x0​+h)+8f(x0​+3h)−f(x0​+4h)​(3)
  二阶导数的四阶中心差分格式:
f′′(x0+2h)=−f(x0)−16f(x0+h)+30f(x0+2h)−16f(x0+3h)+f(x0+4h)12h2(4)f''(x_0+2h)=-\frac{f(x_0)-16f(x_0+h)+30f(x_0+2h)-16f(x_0+3h)+f(x_0+4h)}{12h^2} \tag 4 f′′(x0​+2h)=−12h2f(x0​)−16f(x0​+h)+30f(x0​+2h)−16f(x0​+3h)+f(x0​+4h)​(4)

四、MATLAB代码

clc
clear
close allsyms x x0 y0 y1 y2 y3 y4 h real%% 一阶导数和二阶导数的二阶中心差分格式
a = [1, x0, x0^2; 1, (x0 + h), (x0 + h)^2; 1, (x0 + 2 * h), (x0 + 2 * h)^2] \ [y0; y1; y2];  %一元二次多项式y(x) = a1 + a2 * x + a3 * x^2的系数
y(x) = a(1) + a(2) * x + a(3) * x^2;
dy(x) = diff(y, 1);
ddy(x) = diff(y, 2);
dy_two_order_central_difference = simplify(dy(x0 + h))
ddy_two_order_central_difference = simplify(ddy(x0 + h))%% 一阶导数和二阶导数的四阶中心差分格式
a = [1, x0, x0^2, x0^3, x0^4; 1, (x0 + h), (x0 + h)^2, (x0 + h)^3, (x0 + h)^4; 1, (x0 + 2 * h), (x0 + 2 * h)^2, (x0 + 2 * h)^3, (x0 + 2 * h)^4; ...1, (x0 + 3 * h), (x0 + 3 * h)^2, (x0 + 3 * h)^3, (x0 + 3 * h)^4; 1, (x0 + 4 * h), (x0 + 4 * h)^2, (x0 + 4 * h)^3, (x0 + 4 * h)^4] \ [y0; y1; y2; y3; y4];  %一元四次多项式y(x) = a1 + a2 * x + a3 * x^2 + a4 * x^3 + a5 * x^4的系数
y(x) = a(1) + a(2) * x + a(3) * x^2 + a(4) * x^3 + a(5) * x^4;
dy(x) = diff(y, 1);
ddy(x) = diff(y, 2);
dy_four_order_central_difference = simplify(dy(x0 + 2 * h))
ddy_four_order_central_difference = simplify(ddy(x0 + 2 * h))%% 验证
n = 50;
x = linspace(0, 2*pi, n);
h = x(2) - x(1);
y = sin(x);
dy = cos(x);
ddy = -sin(x);%一阶导数和二阶导数的二阶中心差分(第一个点和最后一个点无法估算一阶导数和二阶导数)
dy1 = nan * zeros(size(x));
ddy1 = nan * zeros(size(x));
for i = 2 : n - 1dy1(i) = (y(i + 1) - y(i - 1)) / (2.0 * h);ddy1(i) = (y(i - 1) - 2.0 * y(i) + y(i + 1)) / h^2;
end%一阶导数和二阶导数的四阶中心差分(第一二个点和最后两个点无法估算一阶导数和二阶导数)
dy2 = nan * zeros(size(x));
ddy2 = nan * zeros(size(x));
for i = 3 : n - 2dy2(i) = (y(i - 2) - 8.0 * y(i - 1) + 8.0 * y(i + 1) - y(i + 2)) / (12.0 * h);ddy2(i) = -(y(i - 2) - 16.0 * y(i - 1) + 30.0 * y(i) - 16.0 * y(i + 1) + y(i + 2)) / (12.0 * h^2);
endmax_dy1_err = max(abs(dy1(2 : n - 1) - dy(2 : n - 1)));
max_ddy1_err = max(abs(ddy1(2 : n - 1) - ddy(2 : n - 1)));
max_dy2_err = max(abs(dy2(3 : n - 2) - dy(3 : n - 2)));
max_ddy2_err = max(abs(ddy2(3 : n - 2) - ddy(3 : n - 2)));
disp(['一阶导数的二阶和四阶中心差分近似,最大误差分别为:', num2str(max_dy1_err), ',' , num2str(max_dy2_err)])
disp(['二阶导数的二阶和四阶中心差分近似,最大误差分别为:', num2str(max_ddy1_err), ',' , num2str(max_ddy2_err)])

一阶导数和二阶导数的二阶/四阶中心差分格式相关推荐

  1. 针对图像的一阶导数和二阶导数

    针对图像的一阶导数和二阶导数 解释关于图像x,y方向一阶导数和二阶导数的问题.总结如下: 基础知识 数字图像中,f(x,y)可表示成一个M*N的二维数字阵列,如下图: 数字阵列: 一阶差分 对于图像f ...

  2. 关于图形学中图像的一阶导数和二阶导数求法

    对于图像求一阶导数和二阶导数可以增强图片或者求图像的边缘. 一阶导数: 我们知道在数学中一阶导数的求法为: 在图形学中由于图片是按像素来离散组成的,所以最小的h取值为1,所以计算后: 所以图像的一阶导 ...

  3. 一阶导数和二阶导数的意义

    一阶求导是求函数各点的斜率 整体就是函数的单调性,而二阶是求函数整体的凹凸性,也就相当于求各点斜率的增减规律,也就是凹凸性 拐点不一定是极值点 但极值点一定是拐点 凹凸性可以纵观函数走势 凹凸性的作用 ...

  4. Gamma函数(伽玛函数)的一阶导数、二阶导数公式推导及java程序

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人,允许禁止转载. 本文的另外一个地址为:http://www.datal ...

  5. java 伽玛函数_Gamma函数(伽玛函数)的一阶导数、二阶导数公式推导及java程序

    Gamma函数(伽玛函数)的一阶导数.二阶导数公式推导及java程序 Gamma函数(伽玛函数)的一阶导数.二阶导数公式推导及java程序 本文作者:合肥工业大学 管理学院 钱洋 email:[ema ...

  6. matlab离散数据差分法,MATLAB中用差分法求解函数 or 离散数据的一阶导数和二阶导数...

    再进行编程.以下是我的求解程序: clc;clear all h=0.01; %x属于[a,b] a=-5;b=5; x=a:h:b; n=length(x); %定义y y=sin(0.3*x).* ...

  7. 图像的一阶导数和二阶导数MATLAB实现

    基于二阶导数的laplace算子 I=imread('11.jpg'); [H,W]=size(I); M=double(I); J=M; for i=2:H-1 for j=2:W-1 J(i,j) ...

  8. 一维稳态对流扩散问题,无源项,中心差分格式的python程序

    一维稳态对流扩散中心差分格式 参考书籍:陶文铨的数值传热学+李人宪的有限体积法基础 具体的理论可以参考此文章:有限体积法(5)--对流-扩散方程的离散 例题 一个长度L为1的规则物体,左边界温度恒为1 ...

  9. 由参数方程确定的函数的一阶导数与二阶导数

    高阶反函数的导数 {x=u(t)y=v(t)\begin{cases} x=u(t)& \text{}\\ y=v(t)& \text{} \end{cases} {x=u(t)y=v ...

  10. 二阶混合差分的几种差分格式

    二阶混合差分的几种差分格式 对上面两式子对y求偏导,得到: 两式子相减,得到: 将二阶混合项写在左边: ( ∂ u / ∂ y ) i + 1 , j (\partial u/\partial y)_ ...

最新文章

  1. python3入门书籍-零基础自学python3 好用的入门书籍推荐
  2. Dynamips和Vmware完成CCVP试验(2)
  3. python知识汇总,python一期
  4. android常见的面试题,Android常见笔试面试题
  5. 【转】VC++计算当前时间点间隔N天的时间(不使用CTimeSpan类)
  6. 解决IDEA中Maven加载依赖包慢的问题
  7. Java如何比较两个数组是否相等
  8. 联想教育应用使用说明(7.6版本号)——第4章 网络控制工具的使用
  9. android httpclient版本,Android studio使用http 没有 HttpClient
  10. forrtl: error (200): program aborting due to control-C event
  11. 网站服务器怎么查ipv4,服务器的ipv4地址怎么查
  12. javaEE自驾游旅游景点管理系统ssm
  13. 下一代无服务器的发展形态: Serverless2.0
  14. 基于WIFI信号的呼吸和心率检测(论文总结)
  15. bzoj-1233 [Usaco2009Open]干草堆tower
  16. 使用Python进行并发编程
  17. 红到发紫的人工智能,2019运势如何?
  18. 东方信息苑c语言,上海市东方社区信息苑一览表.PDF
  19. Python向左,数学向右:梅森素数
  20. 基于嵌入式技术的网络视频监控系统

热门文章

  1. IBDP1 经济好学吗?学习建议分享
  2. 论文常用图表一:柱状图【MATLAB】
  3. 【解题报告】2021CCPC东北四省赛
  4. iOS10 本地通知
  5. 「镁客·请讲」中科云创周北川:从数据到云端,我们要上下打通工业物联网产业链...
  6. 《东周列国志》第四十四回 叔詹据鼎抗晋侯 弦高假命犒秦军
  7. frame和bounds的区别
  8. windows多网卡叠加网速
  9. pandas精华总结
  10. 学习笔记(30):Google开发专家带你学 AI:入门到实战(Keras/Tensorflow)(附源码)-模型微调(青出于蓝胜于蓝)