シンボリック行列の固有値を計算しようとしていますM
のサイズは3x3
です。場合によっては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個の正しい複雑なシンボリック固有値を返します。場合でもeigenvals()
ができ、
lam = sp.symbols('lambda')
cp = sp.det(M - lam * sp.eye(3))
eigs = sp.solveset(cp, lam)
を、それは私にどのような場合でもConditionSet
を返します。私も次のように固有値を計算してみました
raise MatrixError("Could not compute eigenvalues for {}".format(self))
:私はx=1.
設定した場合しかし、私は次のエラーを取得します仕事をしなさい。
x
の任意の値に対して、この固有値問題を適切に解決する方法を知っている人はいますか?
ご協力いただきありがとうございます。私の問題は、sp.Iの代わりに1jを使用することから来ているようですが、確かにRationalの使用が役立ちます!問題は解決されましたが、SymPyの固有値に問題があります... – Azlof
私はあなたの例を単純化し、[SymPyの問題として]投稿しました(https://github.com/sympy/sympy/issues/13340) – FTP
問題解決済みギターで興味のある人には、SymPyのブランチマスタに修正が加えられました。ありがとうミシェル! – Azlof