Julia 中的特征分解和 "composition"
Eigendecomposition and "composition" in Julia
我在 Julia 经历了一些 tutorial on factorization。为了练习,我尝试从矩阵中提取特征分解并使用公式重新创建原始矩阵:
A = VλV⁻¹
其中V是特征向量矩阵,λ是特征值对角矩阵,V⁻¹是倒矩阵V。
令我困惑的是,特征值作为向量返回,而 guides 我发现它应该作为对角矩阵返回。
代码示例:
using LinearAlgebra
# Create matrix
A = rand(3, 3)
# Eigendecomposition
AEig = eigen(A)
λ = AEig.values
3-element Vector{Float64}:
V = AEig.vectors
3×3 Matrix{Float64}:
Acomp = V*λ*inv(V)
A ≈ Acomp
尝试将向量与矩阵相乘 returns 出错:
DimensionMismatch("A has dimensions (3,1) but B has dimensions (3,3)")
这是因为将 V 与 λ returns 相乘是一个 3 元素向量,然后尝试将其与 V⁻¹ 相乘,这是一个 3×3 矩阵。我的问题是,是否有一种直接的方法可以从向量创建对角矩阵?或者,是否可以通过其他方式实现原始矩阵的“重组”?
您可以使用 LinearAlgebra
中的单位矩阵表示为 I
,如下所示:
julia> λ
3-element Vector{Float64}:
-0.4445656542213612
0.5573883013610712
1.310095519651262
julia> λ .* I(3)
3×3 Matrix{Float64}:
-0.444566 -0.0 -0.0
0.0 0.557388 0.0
0.0 0.0 1.3101
那里的.*
表示向量的每个元素都乘以矩阵的相应行。
[编辑:] 在使用 Diagonal()
函数发布问题后,我发现了另一种创建对角矩阵的方法。虽然上述解决方案有效,但这会创建更简单的语法:
julia> Diagonal(λ)
3×3 Diagonal{Float64, Vector{Float64}}:
-0.444566 ⋅ ⋅
⋅ 0.557388 ⋅
⋅ ⋅ 1.3101
我在 Julia 经历了一些 tutorial on factorization。为了练习,我尝试从矩阵中提取特征分解并使用公式重新创建原始矩阵:
A = VλV⁻¹
其中V是特征向量矩阵,λ是特征值对角矩阵,V⁻¹是倒矩阵V。
令我困惑的是,特征值作为向量返回,而 guides 我发现它应该作为对角矩阵返回。
代码示例:
using LinearAlgebra
# Create matrix
A = rand(3, 3)
# Eigendecomposition
AEig = eigen(A)
λ = AEig.values
3-element Vector{Float64}:
V = AEig.vectors
3×3 Matrix{Float64}:
Acomp = V*λ*inv(V)
A ≈ Acomp
尝试将向量与矩阵相乘 returns 出错:
DimensionMismatch("A has dimensions (3,1) but B has dimensions (3,3)")
这是因为将 V 与 λ returns 相乘是一个 3 元素向量,然后尝试将其与 V⁻¹ 相乘,这是一个 3×3 矩阵。我的问题是,是否有一种直接的方法可以从向量创建对角矩阵?或者,是否可以通过其他方式实现原始矩阵的“重组”?
您可以使用 LinearAlgebra
中的单位矩阵表示为 I
,如下所示:
julia> λ
3-element Vector{Float64}:
-0.4445656542213612
0.5573883013610712
1.310095519651262
julia> λ .* I(3)
3×3 Matrix{Float64}:
-0.444566 -0.0 -0.0
0.0 0.557388 0.0
0.0 0.0 1.3101
那里的.*
表示向量的每个元素都乘以矩阵的相应行。
[编辑:] 在使用 Diagonal()
函数发布问题后,我发现了另一种创建对角矩阵的方法。虽然上述解决方案有效,但这会创建更简单的语法:
julia> Diagonal(λ)
3×3 Diagonal{Float64, Vector{Float64}}:
-0.444566 ⋅ ⋅
⋅ 0.557388 ⋅
⋅ ⋅ 1.3101