Numpy 特征系统求解器返回不正确的矩阵

Numpy eigensystem solver returns improper matrix

提问人:Rodney Price 提问时间:10/5/2023 最后编辑:jaredRodney Price 更新时间:10/5/2023 访问量:61

问:

我一直在尝试将输出用作 旋转矩阵,但矩阵由特征向量形成 退货不当;也就是说,它不是纯粹的旋转,而是 旋转和反射的组合。你可以把它看作是 遵循。numpy.linalg.eigh

GG = np.array([[2.0, 0.146, 0.0064],
               [0.146, -1.0, 0.0003],
               [0.0064, 0.0003, -1.0]])
vals,vecs = np.linalg.eigh(GG)
np.linalg.det(vecs)

这将返回 -0.99999999999。纯旋转将返回 1.0。

我是否遗漏了有关此求解器工作方式的某些信息?我怎样才能 get 或其他一些函数来返回正确的旋转 矩阵?也许这个矩阵是无痕的原因 问题?eigh

python numpy 特征向量

评论

1赞 bb1 10/5/2023
将一列乘以?vectsnp.linalg.det(vecs)
1赞 lastchance 10/5/2023
你没有理由假设结果是一个旋转矩阵 - 只是特征向量将是(对于你的矩阵)正交的。你无法保证它们出现的顺序,交换矩阵的两列会颠倒行列式的符号。

答:

2赞 flawr 10/5/2023 #1

考虑一个方阵,让我们假设是一个具有相应特征值的特征向量,即Ave

A*v = e*v

现在考虑一下如果我们按某个标量缩放会发生什么,让我们设置:vsw = v*s

A*w = A*(v*s) = (A*v)*s = (e*v) = e*(v*s) = e*w

原来也是特征值的特征向量!实际上,特征向量只定义到标量倍数,因此约定是将它们归一化为长度。因此,如果你缩放一个特征向量,你仍然有一个有效的特征系统,这次是行列式。we1-1+0.999...9

最后,为什么是 1 而不是 1?我们使用的是浮点运算,这并不精确。如果你正在尝试解决数值问题,我建议你熟悉浮点数、它们的问题和局限性以及最佳实践。0.999...9

分明

评论

0赞 Rodney Price 10/6/2023
有限的精度并不让我担心。行列式为 -1 这一事实是否意味着由特征向量形成的坐标轴形成左手坐标系?将一个特征向量乘以 -1 会得到一个右手坐标系?
0赞 flawr 10/6/2023
对于这个 3x3 系统,您可以说,通过正决定因素,惯用手性得以保留。基本上行列式告诉你体积 1 的形状在被矩阵变换后体积。