MATLAB数值微分

定义:在微分学中,函数的导数是通过极限来定义的,如果一个函数是用数值给出的离散形式,那么他的导数就无法用极限运算求得,当然也就无法用求导的方式去计算函数在某点的导数,这就需要采用数值微分的方法,用离散方法近似计算函数在某点的导数值

%两种方式计算f(x)在给定点x的数值倒数,
% 第一种是利用多项式f(x)进行逼近,用逼近函数的倒数求解x处的倒数
%第二种是利用f(x)在x处的差商作为其倒数,

% matlab中不能直接计算其数值倒数,但是可以计算前向差分,函数为diff
%DX=diff(X) 计算向量x的前向差分
%DX=diff(X,n)  计算X的n阶前向差分

%example:设x由[0,2*pi]间均匀分布的80个点组成,求sinx的1~3阶差分
X=linspace(0,2*pi,80);
Y=sin(X);
DY=diff(Y);
DY%一阶差分
D2Y=diff(Y,2);
D2Y

DYval=DY/(2*pi/80);%求一阶差商

plot(X,cos(X),'--k');
grid on;
hold on;

plot(X,[DYval,1],'b');
grid on;
legend('导数','数值导数')

例题:


%三种方法
%1 用高次多项式拟合函数f,再对拟合函数求导,得到函数值
%2 直接求取假设点的数值导数(差商)
%3 先求出f'(x),再代入点求解导数值
f=@(x) sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2;
g=@(x) (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;
p0=polyfit(x,f(x),8);
dp=polyder(p0);
dpx=polyval(dp,x);%第一种方法

dx=diff(f([x,3.01]))/0.01;%第二种方法

g=g(x);%第三种方法
plot(x,dpx,'--k',x,dx,'b',x,g,'r');
grid on;
leggend('多项式拟合求导','数值导数','解析导数');

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值