您的位置:首页 > 其它

diff和gradient求数值近似导数的异同

2016-06-07 11:38 701 查看
diff

diff是导数的符号运算命令,使用时要加上syms的定义变量命令;

diff(f) 求表达式f对默认自变量的一次微分值;

diff(f, t) 求表达式f对自变量t的一次微分值;

diff(f,n) 求表达式f对默认自变量的n次微分值;

diff(f,t,n) 求表达式f对自变量t的n次微分值。

若对于数组,就变成数值差分运算;

gradient

gradient()是求数值梯度函数的命令。[Fx,Fy]=gradient(x),

其中Fx为其水平方向上的梯度,Fy为其垂直方向上的梯度,Fx的第一列元素为原矩阵第二列与第一列元素之差,Fx的第二列元素为原矩阵第三列与第一列元素之差除以2,以此类推:

Fx(i,j)=(F(i,j+1)-F(i,j-1))/2。

最后一列则为最后两列之差。同理,可以得到Fy。

clf
d=pi/100; t=0:d:2*pi; x=sin(t);
dxdt_diff=diff(x)/d;
dxdt_grad=gradient(x)/d;
subplot(1,2,1)
plot(t,x,'b')
hold on
plot(t,dxdt_grad,'m','LineWidth',8)
plot(t(1:end-1),dxdt_diff,'.k','MarkerSize',8)
axis([0,2*pi,-1.1,1.1])
title('[0, 2\pi]')
legend('x(t)','dxdt_{grad}','dxdt_{diff}','Location','North')
xlabel('t')
box off
hold off
subplot(1,2,2)
kk=(length(t)-10):length(t);
hold on
plot(t(kk),dxdt_grad(kk),'om','MarkerSize',8)
plot(t(kk-1),dxdt_diff(kk-1),'.k','MarkerSize',8)
title('[end-10, end]')
xlabel('t'),box off
legend('dxdt_{grad}','dxdt_{diff}','Location','SouthEast')
hold off


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: