Symboles sympy python
Lorsque j'utilise "x" et "z" comme symboles, je n'ai aucun problème avec ce code:
from sympy import *
x, z = symbols('x z')
y = -6*x**2 + 2*x*z**0.5 + 50*x - z
solve((diff(y, x), diff(y, z)))
y.subs({x: 5, z: 25})
Mais quand j'utilise "q" et "a", la résolution ne me donne aucune solution.
q, a = symbols('q a')
y = -6*q**2 + 2*q*a**0.5 + 50*q - a
solve((diff(y, q), diff(y, a)))
y.subs({q: 5, a: 25})
Comme vous pouvez le voir, j'utilise "subs" pour vérifier qu'il n'y a pas de faute de frappe dans la fonction objectif.
MISE À JOUR: J'ai utilisé "Symbol" pour définir chaque variable individuellement, mais encore une fois en utilisant "q" et "a" ne fonctionne pas.
# This works
x = Symbol('x')
z = Symbol('z')
y = -6*x**2 + 2*x*z**0.5 + 50*x - z
solve((diff(y, x), diff(y, z)))
# This does not work
q = Symbol('q')
a = Symbol('a')
y = -6*q**2 + 2*q*a**0.5 + 50*q-a
solve((diff(y, q), diff(y, a)))
Je vous remercie.
Réponses
Je l'ai!
Tout dépend de l'ordre alphabétique de vos variables.
Si vous substituez xà zet zpour xvotre premier exemple , il cessera également de travailler.
Résoudre en interne envoie l'expression à la fonction _solvedans sympy.solverslaquelle essaie ensuite de résoudre votre équation et échoue plusieurs fois.
Enfin, comme dernier effort, il essaie de résoudre -sqrt(a) + qou x - sqrt(z)en choisissant des symboles à partir de celui-ci via une fonction interne _ok_syms, avec un argument qui les trie par ordre alphabétique (même sans cet argument, il le ferait toujours, mais s'il est enveloppé par reversedmagie, vos exemples fonctionnent de manière exactement opposée).
Et donc ça résout au x - sqrt(z)fur x: sqrt(z)et à -sqrt(a) + qmesure a: q**2.
Alors que dans le premier cas, il se termine par une solution facilement soluble 50 - 10*sqrt(z), dans le second cas, il est perdu -12*q + 2*sqrt(q**2) + 50car il ne peut pas simplifier sqrt(q**2).
source: beaucoup de tests sur: https://github.com/sympy/sympy/blob/master/sympy/solvers/solvers.py