J'essaie de calculer des valeurs propres d'une matrice complexe symbolique M
de taille 3x3
. Dans certains cas, eigenvals()
fonctionne parfaitement. Par exemple, le code suivant:Calcul des valeurs propres symboliques avec 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()
me retourne 3 valeurs propres symboliques correctes complexes de M
. Cependant, quand je mets x=1.
, je reçois l'erreur suivante:
raise MatrixError("Could not compute eigenvalues for {}".format(self))
J'ai essayé aussi de calculer les valeurs propres comme suit:
lam = sp.symbols('lambda')
cp = sp.det(M - lam * sp.eye(3))
eigs = sp.solveset(cp, lam)
mais il me renvoie un ConditionSet
dans tous les cas, même si eigenvals()
peut fait le travail.
Est-ce que quelqu'un sait comment résoudre correctement ce problème de valeur propre, pour une valeur de x
?
Merci beaucoup pour votre aide. Il semble que mon problème vient plutôt de l'utilisation de 1j au lieu de sp.I, mais l'utilisation de Rational aide sûrement! Problème résolu pour moi, mais il y a toujours un problème avec les eigenvals de SymPy ... – Azlof
J'ai simplifié votre exemple et publié [en tant que numéro SymPy] (https://github.com/sympy/sympy/issues/13340) – FTP
Problème résolu sur github.Pour ceux qui sont intéressés, le correctif a été poussé dans la branche principale de SymPy. Merci Michelle! – Azlof