Matlab数据处理之差分和近似导数diff函数

4.7
(3)

Matlab中,可以使用差分和近似导数diff函数求解相邻元素的差分或者近似导数。本文主要介绍diff函数的常见用法、语法说明、以及diff函数的相关实例。

Matlab数据处理之差分和近似导数diff函数

下面,先给出diff函数的帮助文档:

>> help diff
 diff Difference and approximate derivative.
    diff(X), for a vector X, is [X(2)-X(1)  X(3)-X(2) ... X(n)-X(n-1)].
    diff(X), for a matrix X, is the matrix of row differences,
       [X(2:n,:) - X(1:n-1,:)].
    diff(X), for an N-D array X, is the difference along the first
       non-singleton dimension of X.
    diff(X,N) is the N-th order difference along the first non-singleton 
       dimension (denote it by DIM). If N >= size(X,DIM), diff takes 
       successive differences along the next non-singleton dimension.
    diff(X,N,DIM) is the Nth difference function along dimension DIM. 
       If N >= size(X,DIM), diff returns an empty array.
 
    Examples:
       h = .001; x = 0:h:pi;
       diff(sin(x.^2))/h is an approximation to 2*cos(x.^2).*x
       diff((1:10).^2) is 3:2:19
 
       If X = [3 7 5
               0 9 2]
       then diff(X,1,1) is [-3 2 -3], diff(X,1,2) is [4 -2
                                                      9 -7],
       diff(X,2,2) is the 2nd order difference along the dimension 2, and
       diff(X,3,2) is the empty matrix.

diff函数常见用法

Y = diff(X)
Y = diff(X,n)
Y = diff(X,n,dim)

diff函数语法说明

Y = diff(X) 计算沿大小不等于 1 的第一个数组维度的 X 相邻元素之间的差分:

  • 如果 X 是长度为 m 的向量,则 Y = diff(X) 返回长度为 m-1 的向量。Y 的元素是 X 相邻元素之间的差分。
    Y = [X(2)-X(1) X(3)-X(2) … X(m)-X(m-1)]
  • 如果 X 是不为空的非向量 p×m 矩阵,则 Y = diff(X) 返回大小为 (p-1)×m 的矩阵,其元素是 X 的行之间的差分。
    Y = [X(2,:)-X(1,:); X(3,:)-X(2,:); … X(p,:)-X(p-1,:)]
  • 如果 X 是 0×0 的空矩阵,则 Y = diff(X) 返回 0×0 的空矩阵。

Y = diff(X,n) 通过递归应用 diff(X) 运算符 n 次来计算第 n 个差分。在实际操作中,这表示 diff(X,2) 与 diff(diff(X)) 相同。

Y = diff(X,n,dim) 是沿 dim 指定的维计算的第 n 个差分。dim 输入是一个正整数标量。

向量元素之间的差分

创建一个向量,然后计算元素之间的差分。

>> X = [1 1 2 3 5 8 13 21];
>> Y = diff(X)

Y =

     0     1     1     2     3     5     8

请注意,Y 的元素比 X 少一个。

矩阵行之间的差分

创建一个 3×3 矩阵,然后计算各行之间的一阶差分。

>> X = [1 1 1; 5 5 5; 25 25 25];
>> Y = diff(X)

Y =

     4     4     4
    20    20    20

Y 是 2×3 矩阵。

多阶差分

创建一个向量,然后计算元素之间的二阶差分。

>> X = [0 5 15 30 50 75 105];
>> Y = diff(X,2)

Y =

     5     5     5     5     5

矩阵列之间的差分

创建一个 3×3 矩阵,然后计算各列之间的一阶差分。

>> X = [1 3 5;7 11 13;17 19 23];
>> Y = diff(X,1,2)

Y =

     2     2
     4     2
     2     4

Y 是一个 3×2 矩阵。

使用差分求导数近似值

使用 diff 函数和语法 Y = diff(f)/h 求偏导数近似值,其中 f 是函数值在某些域 X 上计算的向量,h 是一个相应的步长。

例如,sin(x) 相对于 x 的一阶导数为 cos(x),相对于 x 的二阶导数为 -sin(x)。可以使用 diff 求这些导数的近似值。

h = 0.001;       % step size
X = -pi:h:pi;    % domain
f = sin(X);      % range
Y = diff(f)/h;   % first derivative
Z = diff(Y)/h;   % second derivative
plot(X(:,1:length(Y)),Y,'r',X,f,'b', X(:,1:length(Z)),Z,'k')
Matlab数据处理之差分和近似导数diff函数

在此绘图中,蓝色线条对应原始函数 sin。红色线条对应计算出的一阶导数 cos,黑色线条对应计算出的二阶导数 -sin

日期时间值之间的差

创建一个等间距日期时间值序列,并计算这些值之间的时间差。

>> t1 = datetime('now');
>> t2 = t1 + minutes(5);
>> t = t1:minutes(1.5):t2

t = 

   2023-04-24 19:48:55   2023-04-24 19:50:25   2023-04-24 19:51:55   2023-04-24 19:53:25

>> dt = diff(t)

dt = 

   00:01:30   00:01:30   00:01:30

diff 返回 duration 数组。

共计3人评分,平均4.7

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/6930.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2023年04月22日 22:49
下一篇 2023年04月25日 19:43

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号