MATLAB中的diff函数

显然这个函数是单词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');
得到图形如下:
 有一些偏差。这个时候可以使用缩小间距提高精度。
另外diff函数还有一些其他的妙用,例如:
检测向量是否等距:
等距的测试是if any(diff(diff(x)~=0),只有等距的时候结果才为零。
检测向量是否按升序或者降序排列也可以,如if any(diff(x)<=0)
本质上是采用了导数的性质。

你可能感兴趣的:(MATLAB)