2016-09-07 32 views
0

我需要找到這個矩陣的eigenvvalues,以及類似這樣的矩陣(空格表示分隔符):查找蟒蛇複數值矩陣的特徵值

[[1.0000 -0.7071*I 0 -0.7071*I 0 0 0 0 0]  
[0.7071*I 0.5000 -0.7071*I 0 -0.70710*I 0 0 0 0]  
[0 0.7071*I 1.0000 0 0 -0.7071*I 0 0 0] 
[0.7071*I 0 0 0.5000 -0.7071*I 0 -0.7071*I 0 0]  
[0 0.7071*I 0 0.7071*I 0 -0.7071*I 0 -0.7071*I 0]  
[0 0 0.7071*I 0 0.7071*I 0.5000 0 0 -0.7071*I]  
[0 0 0 0.7071*I 0 0 1.0000 -0.7071*I 0]  
[0 0 0 0 0.7071*I 0 0.7071*I 0.5000 -0.7071*I]  
[0 0 0 0 0 0.7071*I 0 0.7071*I 1.000]] 

錯誤: numpy.linalg.eigvalsh()給出錯誤「可以」 t將複雜轉換爲浮動「。

可能是什麼原因,如何找到特徵值?

+0

請發表您的基質中使用的方式 – Glostas

+0

在文檔(http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.linalg.eigvalsh.html)它明確指出''numpy.linalg.eigvalsh'只適用於真實或厄米特矩陣。你的事情很複雜。爲什麼它應該工作?你必須這樣做@Glostas暗示的方式 –

+1

這是一個Hermiatian矩陣。 –

回答

-1

在numpy的,你得到這個免費

import numpy as np 

matrix = np.array([[1+1j,0+1j],[0+1j,1+1j]]) 
eingenvalues,eigenvectors=np.linalg.eig(matrix) 

就會給你帶來,特徵值和相應的eigenvectosr

如果你真的只在特徵值感興趣,你可以使用

eingenvalues=np.linalg.eigvals(matrix) 
+0

這不是問題的答案。問題是爲什麼'eigvalsh'產生了一個錯誤信息。 –

+0

問題是「可能是什麼原因,以及如何找到特徵值?」。這給出了特徵值... – Glostas

1

正如不止一位評論員所解釋的,您的矩陣可以與eigvalsh一起正常工作。

import numpy as np 
from numpy.linalg import eigvalsh 

I = 1j 
arr = np.array([[1.0000, -0.7071*I, 0, -0.7071*I, 0, 0, 0, 0, 0], 
    [0.7071*I, 0.5000, -0.7071*I, 0, -0.70710*I, 0, 0, 0, 0], 
    [0, 0.7071*I, 1.0000, 0, 0, -0.7071*I, 0, 0, 0], 
    [0.7071*I, 0, 0, 0.5000, -0.7071*I, 0, -0.7071*I, 0, 0], 
    [0, 0.7071*I, 0, 0.7071*I, 0, -0.7071*I, 0, -0.7071*I, 0], 
    [0, 0, 0.7071*I, 0, 0.7071*I, 0.5000, 0, 0, -0.7071*I], 
    [0, 0, 0, 0.7071*I, 0, 0, 1.0000, -0.7071*I, 0], 
    [0, 0, 0, 0, 0.7071*I, 0, 0.7071*I, 0.5000, -0.7071*I], 
    [0, 0, 0, 0, 0, 0.7071*I, 0, 0.7071*I, 1.000]]) 

# Ensure hermitian 
assert(np.all(0 == (arr - np.conj(arr.T)))) 

print(eigvalsh(arr)) 
# outputs: 
# [-1.56153421 -0.2807671 -0.2807671 0.5   0.5   1.   1.7807671 1.7807671 2.56153421]