【发布时间】:2013-09-23 22:04:49
【问题描述】:
我在 Matlab 和 Numpy 中计算特征向量,但得到不同的结果。我的印象是给定矩阵只有一组特征向量,但是这两个输出似乎都是有效的。
这是我的matlab代码:
m = [ 1.4675 + 0.0000i 0.1669 + 1.2654i;
0.1669 - 1.2654i 1.3085 + 0.0000i]
[eig_vec,eig_val] = eig(m)
eig_val 包含:
eig_val =
0.1092 0
0 2.6668
eig_vec 包含:
eig_vec =
0.0896 + 0.6789i 0.0953 + 0.7225i
-0.7288 + 0.0000i 0.6848 + 0.0000i
这是我的python代码:
m = np.array([[1.46753694+0.j, 0.16692111+1.26535838j],
[0.16692111-1.26535838j, 1.30851770+0.j]])
eig_val,eig_vec = linalg.eigh(m)
eig_val 包含:
array([ 0.10923247, 2.66682217])
eig_vec 包含:
array([[-0.68477170+0.j , -0.72875765+0.j ],
[ 0.09530915-0.72249836j, -0.08955653+0.67889021j]])
谁能解释为什么这些输出不同,似乎两组不同的特征向量都是彼此的旋转版本。一组比另一组更正确吗?
【问题讨论】:
-
特征向量不是唯一的:stackoverflow.com/a/18152804/97160,但我认为 MATLAB 和 NumPy 都依赖相同的 LAPACK 例程来计算它们,因此您可能会得到相似的结果。
-
请参阅this older question 了解更多关于特征向量的非唯一性(它与 matlab 与 mathematica 相关,但本质上是一个重复的问题)...
标签: python matlab numpy octave eigenvector