Die Dokumentation zu nonlinsolve
gibt dieses Beispiel:
aber selbst in der Live-Shell auf ihrer Website, die einen Fehler verursacht:
%Vor% Wie kann ich mit nonlinsolve
ein Gleichungssystem numerisch lösen? Ich weiß, dass ich ufuncify
verwenden kann, um die Gleichungen in ein System zu konvertieren, das scipy.optimize.fsolve
lösen kann, aber ich würde lieber diese paar Zeilen von Boilerplate vermeiden und einfach SymPy direkt verwenden.
Laut der SymPy-Dokumentation zu solve
wird die Verwendung von solve
nicht empfohlen . Für nichtlineare Gleichungssysteme empfiehlt die Dokumentation sympy.solvers.solveset.nonlinsolve
, was ich hier versuche zu verwenden.
Es scheint, dass dieses Modul nicht in 1.0.0
release enthalten ist, sondern nur im aktuellen head
verfügbar ist. Wie auch immer, es kann eine gute Idee sein, den aktuellen Status von sympy
repo zu überprüfen, da ihre Releases eher selten sind.
Laut den Dokumenten ist dies so einfach wie
%Vor% (Ich musste python3
anstelle von python
verwenden, da ich sowohl systemweite Python 2- als auch Python 3-Installationen habe. Sie können auch virtualenv
verwenden, um sudo
zu vermeiden.)
Danach wird die neueste Github-Version mit dem normalen import
verfügbar sein.
Jetzt funktioniert das Beispiel:
%Vor% P.S. Wenn Sie wirklich an einer numerischen Lösung Ihrer Gleichung interessiert sind, scheint es, dass ufuncify
+ fsolve
thing Ihnen besser passt. SymPy ist ein Computeralgebrasystem, also wird nonlinsolve
sein Bestes geben, um das nichtlineare System analytisch zu lösen, nicht numerisch. Und natürlich kann es scheitern (wie bei jedem analytischen Solver):
Wenn Sie die Systeme numerisch lösen wollen, verwenden Sie nsolve
. Es erfordert eine erste Schätzung für die Lösung (es gibt auch viele Optionen, die Sie übergeben können, um verschiedene Solver zu verwenden, siehe Ссылка und Ссылка ).
Für symbolische Lösungen würde ich empfehlen, das alte solve
zu verwenden, bis nonlinsolve
reift.