在python中找到复值矩阵的特征值

时间:2016-09-07 09:08:06

标签: python numpy matrix linear-algebra eigenvalue

我需要找到这个矩阵的特征值,类似这样的矩阵(空格表示分隔符):

[[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()给出错误“无法将复数转换为浮动”。

可能是什么原因,我如何找到特征值?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:-1)

在numpy中你可以免费获得

import numpy as np

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

将为您提供特征值和相应的特征值

如果您真的只对特征值感兴趣,可以使用

eingenvalues=np.linalg.eigvals(matrix)