2017-05-02 101 views
1

我正在尝试查找4x4矩阵R的特征值和特征向量。为此,我使用sympy中的命令R.eigenvals()和R.eigenvects(),但是,python返回空括号。我知道特征值是1和e ^(+ - 2ix)。难道我做错了什么?在sympy中查找特征值和特征向量返回空括号

import pprint  
from sympy import *  

R=Matrix([[(cos(x))**2, -cos(x)*sin(x), -cos(x)*sin(x), (sin(x))**2],[cos(x)*sin(x), (cos(x))**2, -(sin(x))**2, -cos(x)*sin(x)],  [cos(x)*sin(x), -(sin(x))**2, (cos(x))**2, -cos(x)*sin(x)],   [(sin(x))**2, sin(x)*cos(x), sin(x)*cos(x), (cos(x))**2]])  

pprint (R)  
pprint (R.eigenvals())  
pprint (R.eigenvects()) 
+0

代码工作完全正常使用'X = 0.5'和Python 3.4-64bit –

回答

1

这似乎是一个错误。作为一种解决方法,人们可以尝试通过明确计算和求解特征多项式来“手动”地找到特征值。

lam = sp.symbols('lambda') 
cp = sp.det(R - lam * sp.eye(4)) 
eigs = sp.solveset(cp, lam) 
eigs 
{1, 
-sqrt(2)*sqrt(cos(4*x) - 1)/2 + cos(2*x), 
sqrt(2)*sqrt(cos(4*x) - 1)/2 + cos(2*x)} 

注意,在实值三角因素方面提供的特征值,因为后者的特征多项式的因素。但是,由于cos(4*x)-1不可能是正数,所以最后两个特征值事实上是复杂的。

受此观察的启发,通过将特征多项式的三角因子重写为复指数,可以尝试更清晰的特征值表达式。事实上,

eigs_v2 = sp.solveset(cp.rewrite(sp.exp).simplify(), lam) 
eigs_v2 

{1, exp(-2*I*x), exp(2*I*x)}

相关问题