matrix - Julia 中对称矩阵的对角化产生奇怪的结果

标签 matrix julia

我想了解我的 Julia 程序发生了什么情况。问题如下:我有一个对称非负矩阵,我使用

对角化
egvals, egvecs = eig(H_mat)

根据定理,我的矩阵应该具有与非负特征向量相关联的最大特征值。 H_mat 还有一个技巧,它的第一列和第一行都有一个用零填充的条目。

对角化产生最大正特征值 E_max,实际上它是最后一个特征值,因为 Julia 按顺序排列特征值直至最大,但我与 E_max 相关的特征向量的所有条目并非为零或正(即它们具有负数)条目)

egvecs[:,end] # Some or several components ii, egvecs[ii,end]<0

这是我没有得到正确结果的矩阵,例如:

[0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
 0.0 0.0 2.0 0.0 0.0 1.414213562373095 0.0 0.0 0.0 0.0 0.0 1.414213562373095 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 3.0 0.0 0.0 1.7320508075688774 0.0 0.0 0.0 0.0 0.0 1.7320508075688774 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 1.414213562373095 0.0 0.0 2.0 0.0 1.414213562373095 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 1.7320508075688774 0.0 0.0 3.0 0.0 2.0 0.0 0.0 0.0 1.0 0.0 1.414213562373095 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 1.414213562373095 0.0 2.0 0.0 0.0 0.0 0.0 0.0 1.414213562373095 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 2.0 0.0 3.0 1.7320508075688774 0.0 0.0 0.0 0.0 1.414213562373095 1.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.7320508075688774 3.0 0.0 0.0 0.0 0.0 0.0 1.7320508075688774 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 1.414213562373095 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 2.0 0.0 1.0 0.0 0.0 1.414213562373095 0.0 0.0 0.0
0.0 0.0 0.0 1.7320508075688774 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 3.0 0.0 1.414213562373095 0.0 0.0 2.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.414213562373095 0.0 0.0 0.0 1.0 0.0 2.0 0.0 0.0 1.414213562373095 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 1.414213562373095 0.0 1.414213562373095 0.0 0.0 0.0 1.414213562373095 0.0 3.0 1.414213562373095 0.0 1.414213562373095 1.414213562373095 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.7320508075688774 0.0 0.0 0.0 0.0 1.414213562373095 3.0 0.0 0.0 2.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.414213562373095 0.0 1.414213562373095 0.0 0.0 2.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 0.0 1.414213562373095 0.0 0.0 3.0 1.0 1.7320508075688774
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.414213562373095 2.0 0.0 1.0 3.0 1.7320508075688774
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.7320508075688774 1.7320508075688774 3.0]

(应该是20X20矩阵)

最佳答案

特征向量仅按比例确定,因为要求它们求解 (A - lambda*I)v = 0如果 v1解方程,则 v2 = -v1做。在对称情况下,标准是将所有向量归一化为一,但这仍然导致符号未确定。因此,您使用的定理必须说类似于可以选择对应于最大值的向量,使其具有非负元素。事实上,我知道与矩阵的最大特征值相对应的特征向量具有非正元素。 julia> eig(A) |> t -> all(t[2][:,indmax(t[1])] .<= 0) true

关于matrix - Julia 中对称矩阵的对角化产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29550515/

相关文章:

algorithm - 在 N 维矩阵中找到大于 x 的值,其中 x 是索引之和

c - 找出 C 中 k 个最小值的索引

c - 矩形矩阵复杂度

parallel-processing - 将矩阵的每一行乘以随机数的最佳方法

java - Libgdx:围绕 z 轴变换 vector 2

python-3.x - 根据条件替换 python numpy 矩阵值,而不使用 for 循环

dictionary - 不变字典

每当变量名称出现拼写错误时,Julia 就会与 Queryverse 一起崩溃

julia - 如何在 Julia 中获取数组的最小值?

directory - 在 Julia 中返回当前目录上方的一个文件夹