【问题标题】:Diagonalization of symmetric matrices in julia yields strange resultsJulia中对称矩阵的对角化产生奇怪的结果
【发布时间】:2015-06-15 12:40:34
【问题描述】:

我想了解我在 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 矩阵)

【问题讨论】:

  • 用你声明的属性尝试了一个随机的H_mat,并且最大特征值与一个所有非负值的特征向量相关联。你能提供你的H_mat吗?
  • 完成了,我想你可以放心地将它复制粘贴到 julia 中
  • 很好奇。而不是H_mat,请查看eigs=svd(H_mat);eig(s[1] * diagm(s[2]) * s[3]') 结果。除了小的精度问题外,您所说的属性似乎还成立。
  • 也看看eig(H_mat ^ 2)。财产似乎也在这里。
  • 嗯,我对线性代数的了解似乎正在消失和/或其中有一些漏洞。 Eigenvectors are defined up to a phase, i.e. if $Av=\lambda v then e^{i\theta}v$ is also an eigenvector, and specifically so is $-v$.。所以随意旋转/否定。 Julia 否定的eig-vectors 是合法的并且符合你的理论。 [有点希望我在插话之前已经研究/重新学习了这个。] 8-)

标签: matrix julia


【解决方案1】:

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

【讨论】:

  • 是的,我也注意到了。这有点棘手,因为您在特征向量数的分量中看到了这些 -3.4404941487182017e-19、0.22222222222222252。所以看起来你的特征向量混合了正数和负数。
  • 确实如此,但我认为浮点数是不可避免的。
  • 同意,但乍一看它给了我错误的印象。反正我的眼睛是睁着的。感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2018-07-25
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多