mac*_*ntu 8 python matlab numpy octave eigenvector
我在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)
Run Code Online (Sandbox Code Playgroud)
eig_val包含:
eig_val =
0.1092 0
0 2.6668
Run Code Online (Sandbox Code Playgroud)
eig_vec包含:
eig_vec =
0.0896 + 0.6789i 0.0953 + 0.7225i
-0.7288 + 0.0000i 0.6848 + 0.0000i
Run Code Online (Sandbox Code Playgroud)
这是我的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)
Run Code Online (Sandbox Code Playgroud)
eig_val包含:
array([ 0.10923247, 2.66682217])
Run Code Online (Sandbox Code Playgroud)
eig_vec包含:
array([[-0.68477170+0.j , -0.72875765+0.j ],
[ 0.09530915-0.72249836j, -0.08955653+0.67889021j]])
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么这些输出是不同的,似乎每个两组不同的特征向量都是彼此的旋转版本.另一套更正确吗?
Jai*_*ime 15
这并不是很明显,但是你返回的特征向量在两种情况下实际上是相同的.请尝试以下方法:
>>> matlab_eigvec = np.array([[0.0896+0.6789j, 0.0953+0.7225j],
... [-0.7288+0.j, 0.6848+0.j]])
>>>
>>> f1, f2 = matlab_eigvec.T # matlab eigenvectors
>>> e1, e2 = eig_vec.T # numpy eigenvectors
>>> f1/e1
array([-0.13084653-0.99142531j, -0.13079065-0.99146862j])
>>> f2/e2
array([-0.13077050-0.99141326j, -0.13078845-0.99145198j])
Run Code Online (Sandbox Code Playgroud)
因此,您可以通过将numpy乘以得到matlab特征向量-0.13-0.99j,即它们是共线的,因此就特征向量而言是相同的.