# 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 的各列之间的连续元素是进行差分运算。