.eigenvals创建一个新变量

时间:2015-11-13 14:37:18

标签: python python-2.7 numpy sympy eigenvalue

我用.eigenvals()函数计算矩阵的特征值。当我为我的矩阵这样做时,我从未声明过的新变量出现在解决方案中并且我不知道它来自何处,我也不期望它发生,但它肯定会影响解决方案。 我有numpy和sympy的问题。 这是我的同情代码:

from sympy import *

D,Bm,Bp,Bz,l=symbols('D Bm Bp Bz l')
H=Matrix(([D+Bz,Bm,0],[Bp,0,Bm],[0,Bp,D-Bz]))
ev=H.eigenvals()
sol=ev.keys()

print sol[0] 
print
print sol[1]
print
print sol[2]

解决方案看起来像这样,这个奇怪的'我'在那里。当我想使用计算出的特征值时,我必须定义什么' I'是,否则它不会解决我的公式。

2*D/3 + (-2*Bm*Bp/3 - Bz**2/3 - D**2/9)/(Bm*Bp*D - 8*D**3/27 + D*(-2*Bm*Bp - Bz**2 + D**2)/3 + sqrt((-2*Bm*Bp/3 - Bz**2/3 - D**2/9)**3 + (2*Bm*Bp*D - 16*D**3/27 + 2*D*(-2*Bm*Bp - Bz**2 + D**2)/3)**2/4))**(1/3) - (Bm*Bp*D - 8*D**3/27 + D*(-2*Bm*Bp - Bz**2 + D**2)/3 + sqrt((-2*Bm*Bp/3 - Bz**2/3 - D**2/9)**3 + (2*Bm*Bp*D - 16*D**3/27 + 2*D*(-2*Bm*Bp - Bz**2 + D**2)/3)**2/4))**(1/3)

2*D/3 + (-2*Bm*Bp/3 - Bz**2/3 - D**2/9)/((-1/2 - sqrt(3)*I/2)*(Bm*Bp*D - 8*D**3/27 + D*(-2*Bm*Bp - Bz**2 + D**2)/3 + sqrt((-2*Bm*Bp/3 - Bz**2/3 - D**2/9)**3 + (2*Bm*Bp*D - 16*D**3/27 + 2*D*(-2*Bm*Bp - Bz**2 + D**2)/3)**2/4))**(1/3)) - (-1/2 - sqrt(3)*I/2)*(Bm*Bp*D - 8*D**3/27 + D*(-2*Bm*Bp - Bz**2 + D**2)/3 + sqrt((-2*Bm*Bp/3 - Bz**2/3 - D**2/9)**3 + (2*Bm*Bp*D - 16*D**3/27 + 2*D*(-2*Bm*Bp - Bz**2 + D**2)/3)**2/4))**(1/3)

2*D/3 + (-2*Bm*Bp/3 - Bz**2/3 - D**2/9)/((-1/2 + sqrt(3)*I/2)*(Bm*Bp*D - 8*D**3/27 + D*(-2*Bm*Bp - Bz**2 + D**2)/3 + sqrt((-2*Bm*Bp/3 - Bz**2/3 - D**2/9)**3 + (2*Bm*Bp*D - 16*D**3/27 + 2*D*(-2*Bm*Bp - Bz**2 + D**2)/3)**2/4))**(1/3)) - (-1/2 + sqrt(3)*I/2)*(Bm*Bp*D - 8*D**3/27 + D*(-2*Bm*Bp - Bz**2 + D**2)/3 + sqrt((-2*Bm*Bp/3 - Bz**2/3 - D**2/9)**3 + (2*Bm*Bp*D - 16*D**3/27 + 2*D*(-2*Bm*Bp - Bz**2 + D**2)/3)**2/4))**(1/3)

我也可以用结果数字地做,我的所有符号都是数字,但是'我'在同一点停留在解决方案中。

有没有人见过这个或知道,python在这里做什么或者这个'我'代表?知道,那里发生了什么将是一个很大的帮助,因为计算出的特征值并没有像我预期的那样完全表现,我把责任归咎于那些包括那个' I'。 感谢您提前发表任何意见。

1 个答案:

答案 0 :(得分:2)

I是虚数单位sqrt(-1)

>>> from sympy import I
>>> complex(I)
1j

例如,

>>> from sympy import poly
>>> from sympy.abc import x
>>> p = poly(x**2 + 1)
>>> p.root(0)
-I
>>> p.root(1)
I