Simboli sympy Python
Quando uso "x" e "z" come simboli, non ho problemi con questo codice:
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})
Ma quando uso "q" e "a", risolvere non mi dà alcuna soluzione.
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})
Come puoi vedere utilizzo "subs" per verificare che non ci siano errori di battitura nella funzione obiettivo.
AGGIORNAMENTO: Ho usato "Simbolo" per impostare ogni variabile individualmente, ma ancora una volta usare "q" e "a" non funziona.
# 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)))
Grazie.
Risposte
Fatto!
Tutto dipende da un ordine alfabetico delle tue variabili.
Se sostituite xper ze zper xnel vostro primo esempio sarà anche smettere di lavorare.
Risolvi internamente invia l'espressione alla funzione _solvein sympy.solverscui poi cerca di risolvere l'equazione e fallisce molte volte.
Infine, come ultimo sforzo, quello che fa è cercare di risolvere -sqrt(a) + qo x - sqrt(z)prelevare simboli da esso attraverso una funzione interna _ok_syms, con un argomento che li ordina alfabeticamente (anche senza questo argomento lo farebbe comunque, ma se avvolto con reversedesso magicamente fa funzionare i tuoi esempi in modo esattamente opposto).
E così risolve x - sqrt(z)come x: sqrt(z)e -sqrt(a) + qcome a: q**2.
Mentre nel primo caso si finisce con una soluzione facilmente risolvibile 50 - 10*sqrt(z), nel secondo caso si perde in -12*q + 2*sqrt(q**2) + 50quanto non è in grado di semplificare sqrt(q**2).
fonte: molti test su: https://github.com/sympy/sympy/blob/master/sympy/solvers/solvers.py