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