2026a

# diff


差分

# 语法

D = diff(A::AbstractVector)
D = diff(A::AbstractArray, dims::Integer)

# 说明

D = diff(A::AbstractVector) 计算向量上相邻元素之间的差分。如果 A 是长度为 m 的向量,则 D = diff(A) 返回长度为 m-1 的向量。 示例


D = diff(A::AbstractArray, dims::Integer) 是沿 dims 指定的维度计算相邻元素之间的差分。 示例

# 示例

向量元素之间的差分

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

A = [2, 5, 3, 10];
D = diff(A)
3-element Vector{Int64}:
 3
-2
 7

请注意,D 的元素比 A 少一个。

矩阵行之间的差分

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

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

D 是 2×3 矩阵。

矩阵列之间的差分

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

A = [1 3 5; 7 11 13; 17 19 23];
D = diff(A, dims=2)
3×2 Matrix{Int64}:
2  2
4  2
2  4

D 是 3×2 矩阵。

多阶差分

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

X = [0,5,15,30,50,75,105];
Y = diff(diff(X))
5-element Vector{Int64}:
5
5
5
5
5
使用差分求导数近似值

使用 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 = collect(-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")

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

# 输入参数

A - 输入数组
向量 | 矩阵

输入数组,指定为向量或多维数组。

数据类型: Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128 | Float16 | Float32 | Float64 | Bool | DateTime

复数支持: 是

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

沿其运算的维度,指定为正整数标量。当输入 A 为向量时,不指定 dims 参数;当当输入 A 为矩阵时,指定 dims 为差分的方向。

以一个二维矩阵 A 为例:

  • diff(A,dims = 1) 对 A 的各行之间的连续元素是进行差分运算。
  • diff(A,dims = 2) 对 A 的各列之间的连续元素是进行差分运算。

# 另请参阅

-