显然这个函数是单词differential(微分)的简写,用于计算微分。实际上准确来说计算的是差商。
如果输入一个长度为n的一维向量,则该函数将会返回长度为n-1的向量,向量的值是原向量相邻元素的差,于是可以计算一阶导数的有限差分近似。
例如:
>> x=1:10
x =
1 2 3 4 5 6 7 8 9 10
>> diff(x)
ans =
1 1 1 1 1 1 1 1 1
如果是m*n的矩阵,则按行实施,结果就是(m-1)*n的矩阵,就是用下一行减去上一行。
例如:
>> a=magic(4)
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> diff(a)
ans =
-11 9 7 -5
4 -4 -4 4
-5 7 9 -11
利用diff计算微分,例如:
f=@(x) 1+2*x-3*x.^2+4*x.^3-5*x.^4+6*x.^5;
x=0:0.1:1;
y=f(x);
d=diff(y)/0.1;
n=length(x);
plot(x(1:n-1),d,'o');
hold on;
%绘制真实导数图形
x=0:0.05:1;
plot(x, 2-6*x+12*x.^2-20*x.^3+30*x.^4,'r');
MATLAB中的diff函数 - Castor - 趁年轻,多折腾~~
有一些偏差。这个时候可以使用缩小间距提高精度。
另外diff函数还有一些其他的妙用,例如:
检测向量是否等距:
等距的测试是if any(diff(diff(x)~=0),只有等距的时候结果才为零。
检测向量是否按升序或者降序排列也可以,如if any(diff(x)<=0)
本质上是采用了导数的性质。
转自:Lemniscate网易博客