Matlab编程资源库(16)数值微分

一、数值差分与差商

       在Matlab中,数值差分与差商是数值分析中常用的概念,尤其在求解微分方程、插值、逼近等领域有广泛应用。下面简要介绍这两个概念及其在Matlab中的实现。

数值差分

       数值差分是微分运算的离散化形式,用于近似求解导数。给定一个函数f(x),其在点x0​处的导数定义为:

f′(x0​)=limh→0​hf(x0​+h)−f(x0​)​

       在数值计算中,我们无法计算极限,因此使用差分来近似导数

f′(x0​)≈hf(x0​+h)−f(x0​)​

其中h是一个小的步长。

差商

       差商是数值微分的一种形式,特别用于插值多项式。给定一组数据点(x0​,y0​),(x1​,y1​),…,(xn​,yn​),其中yi​=f(xi​),差商用于构建这些点的插值多项式。一阶差商定义为:

f[x0​,x1​]=x1​−x0​f(x1​)−f(x0​)​

高阶差商可以递归定义

Matlab实现

   Matlab提供了多种函数来实现数值差分和差商的计算。

  • diff函数用于计算向量或矩阵的差分
  • del2函数用于计算二维离散Laplacian

1.计算差分: 

x = 0:0.1:1; % 定义x向量
y = sin(x); % 定义y向量
dy = diff(y)./diff(x); % 计算差分,近似导数
plot(x(1:end-1), dy); % 绘制导数近似

运行结果 :

 

2.计算差商 :

x = [1 2 3 4 5];
y = [1 4 9 16 25];
d = diff(y)./diff(x); % 一阶差商
dd = diff(d)./diff(x(1:end-1)); % 二阶差商

二、数值微分的实现

        在 MATLAB 中,没有直接提供求数值导数的函数,只有计算向前差分的函数diff ,其调用格式为:
DX=diff(X) :计算向量 X 的向前差分, DX(i)=X(i+1)-X(i) ,i=1,2,…,n-1。
                  DX=diff(X,n) :计算 X n 阶向前差分。例如,diff(X,2)=diff(diff(X))。
DX=diff(A,n,dim) :计算矩阵 A n 阶差分, dim=1 ( 缺省状态 ) 按列计算差分 dim=2 按行计算差分
8-6 生成以向量 V=[1,2,3,4,5,6] 为基础的范得蒙矩 阵,按列进行差分运算。
命令如下:
V=vander(1:6)
DV=diff(V) %计算V的一阶差分

运行结果 :

8-7 用不同的方法求函数 f(x) 的数值导数,并在同一个坐标 系中做出 f'(x) 的图像。
程序如下:
f=inline('sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2');
g=inline('(3*x.^2+4*x-1)./sqrt(x.^3+2*x.^2-x+12)/2+1/6./(x+5).^(5/6)+5');
x=-3:0.01:3;
p=polyfit(x,f(x),5); %用5次多项式p拟合f(x)
dp=polyder(p); %对拟合多项式p求导数dp
dpx=polyval(dp,x); %求dp在假设点的函数值
dx=diff(f([x,3.01]))/0.01; %直接对f(x)求数值导数
gx=g(x); %求函数f的导函数g在假设点的导数
plot(x,dpx,x,dx,'.',x,gx,'-'); %作图

运行结果 :

 结语 

成功并非永远属于那些最聪明的人

而是属于那些最有恒心的人

!!!

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT 青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值