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

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 

diff和gradient求数值近似导数的异同_第1张图片

你可能感兴趣的:(diff和gradient求数值近似导数的异同)