Próbuję obliczyć wartości własne symbolicznej złożonej macierzy M
o rozmiarze 3x3
. W niektórych przypadkach eigenvals()
działa idealnie. Na przykład, następujący kod:Obliczanie symbolicznych wartości własnych za pomocą 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()
zwraca mi 3 poprawnych złożone symboliczne wartości własne M
. Jednakże kiedy ustawić x=1.
, pojawia się następujący błąd:
raise MatrixError("Could not compute eigenvalues for {}".format(self))
Próbowałem też do obliczania wartości własnych w następujący sposób:
lam = sp.symbols('lambda')
cp = sp.det(M - lam * sp.eye(3))
eigs = sp.solveset(cp, lam)
ale zwraca mi ConditionSet
W każdym przypadku, nawet gdy eigenvals()
puszka wykonuj pracę.
Czy ktoś wie, jak prawidłowo rozwiązać ten problem wartości własnej, dla dowolnej wartości x
?
Bardzo dziękuję za pomoc. Wydaje się, że mój problem pojawił się raczej w wyniku użycia 1j zamiast sp.I, ale użycie Rational z pewnością pomogło! Problem rozwiązany dla mnie, ale wciąż jest problem z eigenvalami SymPy ... – Azlof
Uprościliśmy Twój przykład i opublikowałem [jako problem z SymPy] (https://github.com/sympy/sympy/issues/13340) – FTP
Problem rozwiązany na github.Dla tych, którzy są zainteresowani, poprawka została pchnięta w gałęzi master programu SymPy. Dzięki Michelle! – Azlof