获取 scipy 中的非归一化特征向量

Get non normalized eigenvectors in scipy

Scipy 和 Numpy returns 特征向量归一化。我正在尝试将这些向量用于物理应用程序,我需要它们不被标准化。

例如 a = np.matrix('-3, 2; -1, 0') W,V = spl.eig(a)

scipy returns [-2,-1] 的特征值 (W) 和模态矩阵 (V)(特征值作为列)[[ 0.89442719 0.70710678][ 0.4472136 0.70710678]]

我需要原始模态矩阵[[2 1][1 1]]

根据各种相关线程 (1) (2) (3),没有 "non normalized" 特征向量这样的东西。

确实,对应于矩阵A的特征值l的特征向量v定义为,

A*v = l*v

因此可以乘以任何标量并保持有效。

虽然根据算法,计算出的特征向量可能具有不同于 1 的范数,但这没有任何特定意义(物理或其他),因此不应依赖。在大多数数值库(scipy、R、matlab 等)中,通常 return 归一化特征向量。

你应该看看 sympy。这个包试图通过代数计算而不是数字计算来解决这个问题(就像 numpy 所做的那样)。

import sympy as sp
sp.init_printing(use_unicode=True)

mat_a = sp.Matrix([[-3, 2], [-1, 0]])
mat_a.eigenvects()

结果是(特征值、重数、特征向量):

[(-2, 1, [[2],[1]]), (-1, 1, [[1],[1]])]

重要的是要注意归一化特征向量也可以改变向量的direction/sign。这可能会对某些应用程序产生影响,程序员应仔细检查以确保符号有意义。