我正在嘗試計算大小爲3x3
的符號複數矩陣M
的特徵值。在某些情況下,eigenvals()
完美。例如,下面的代碼:使用sympy計算符號特徵值
import sympy as sp
kx = sp.symbols('kx')
x = 0.
M = sp.Matrix([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
M[0, 0] = 1.
M[0, 1] = 2./3.
M[0, 2] = 2./3.
M[1, 0] = sp.exp(1j*kx) * 1./6. + x
M[1, 1] = sp.exp(1j*kx) * 2./3.
M[1, 2] = sp.exp(1j*kx) * -1./3.
M[2, 0] = sp.exp(-1j*kx) * 1./6.
M[2, 1] = sp.exp(-1j*kx) * -1./3.
M[2, 2] = sp.exp(-1j*kx) * 2./3.
dict_eig = M.eigenvals()
返回我的M
3個正確的複雜的符號特徵值。但是,當我設置x=1.
,我得到以下錯誤:
raise MatrixError("Could not compute eigenvalues for {}".format(self))
我也試着計算特徵值如下:
lam = sp.symbols('lambda')
cp = sp.det(M - lam * sp.eye(3))
eigs = sp.solveset(cp, lam)
但它返回我在任何情況下ConditionSet
,即使eigenvals()
能做這項工作。
有誰知道如何正確解決這個特徵值問題,對於任何值x
?
非常感謝您的幫助。似乎我的問題來自使用1j而不是使用sp.I,但使用Rational肯定有幫助!問題已解決,但仍然存在SymPy的特徵值問題... – Azlof
我簡化了您的示例併發布了[作爲SymPy問題](https://github.com/sympy/sympy/issues/13340) – FTP
問題解決在github上。對於那些有興趣的人來說,修復已經被SymPy的分支大師所推動。謝謝米歇爾! – Azlof