【问题标题】:Finding eigenvalues and eigenvectors in sympy returns empty brackets在 sympy 中查找特征值和特征向量返回空括号
【发布时间】:2017-09-30 01:39:37
【问题描述】:

我正在尝试查找 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())

【问题讨论】:

  • 代码与x = 0.5 和 Python 3.4-64bit 完美配合

标签: python matrix sympy


【解决方案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)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 2018-08-04
    • 2014-05-11
    • 2019-04-16
    • 2016-10-11
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多