朱莉娅的特征分解和"composition"



我在Julia中学习了一些关于因子分解的教程。为了练习,我试图从矩阵中进行本征分解,并使用以下公式重新创建原始矩阵:

A=VλV⁻cco

其中V是特征向量的矩阵,λ是特征值的对角矩阵,V⁻cco是逆矩阵V。

让我困惑的是,本征值是作为向量返回的,而我找到的指南指出,它应该作为对角矩阵返回。

代码示例:

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

尝试将矢量和矩阵相乘会返回错误:

DimensionMismatch("A has dimensions (3,1) but B has dimensions (3,3)")

这是因为将V与λ相乘会返回一个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

相关内容

  • 没有找到相关文章

最新更新