# diff


差分

# 语法

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

# 说明

Y = diff(X) 计算向量 X 相邻元素之间的差分: 示例

如果 X 是长度为 m 的向量,则 Y = diff(X) 返回长度为 m-1 的向量。Y 的元素是 X 相邻元素之间的差分。即:

如果 X 为空,则 Y = diff(X) 返回 0×0 的空矩阵。


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

# 示例

向量元素之间的差分

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

X = [1 ,1, 2, 3, 5, 8, 13, 21]
Y = diff(X)
Y = 7-element Vector{Int64}:
0
1
1
2
3
5
8

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

矩阵行之间的差分

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

X = [1 1 1; 5 5 5; 25 25 25]
Y = diff(X, dims=1)
Y = 2×3 Matrix{Int64}:
4   4   4
20  20  20

Y 是 2×3 矩阵。

矩阵列之间的差分

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

X = [1 3 5;7 11 13;17 19 23]
Y = diff(X, dims=2)
Y = 3×2 Matrix{Int64}:
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 求这些导数的近似值。

using TyPlot
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")
hold("on")
plot(X,f,"b")
plot(X[1:length(Z),:],Z,"k")

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

# 输入参数

X - 输入数组
向量 | 矩阵 | 多维数组

输入数组,指定为向量、矩阵或多维数组。X 可以是数值数组、逻辑数组、日期时间数组或持续时间数组。

数据类型: Int | Float

复数支持:

dims - 沿其运算的维度
正整数标量

沿其运算的维度,指定为正整数标量。当输入为矩阵或多维数组(n>2)时必须指定维度 dims。

以一个二维 p x m 输入数组 A 为例:

  • diff(A, dims=1) 会对 A 的列中的连续元素进行处理,然后返回 (p-1)xm 的差分矩阵;
  • diff(A, dims=2) 会对 A 的行中的连续元素进行处理,然后返回 px(m-1) 的差分矩阵。

数据类型: Int | Float | Bool

# 输出参数

Y - 差分数组
标量 | 向量 | 矩阵 | 多维数组

差分数组,以标量、向量、矩阵或多维数组形式返回。如果 X 是一个非空数组,则由 diff 所处理的 X 的维度在输出中的大小将减小 n。

数据类型: Int | Float

复数支持:

# 另请参与

prod | cumsum | sum | -