在sympy中查找特征值和特征向量返回空括号

时间:2017-05-02 13:41:24

标签: python matrix sympy

我试图找到4x4矩阵R的特征值和特征向量。为此,我使用来自sympy的命令R.eigenvals()和R.eigenvects(),但是,python返回空括号。我知道特征值是1和e ^(+ - 2ix)。我做错了吗?

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())

1 个答案:

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