Da das Beispiel in der Dokumentation gebrochen ist, wie löse ich ein nichtlineares System von Gleichungen in SymPy numerisch?

8

Die Dokumentation zu nonlinsolve gibt dieses Beispiel:

%Vor%

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.

    
Michael A 24.11.2016, 20:45
quelle

2 Antworten

3

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.

%Vor%

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):

%Vor%     
Ilya V. Schurov 26.11.2016, 22:32
quelle
6

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 Ссылка ).

%Vor%

Für symbolische Lösungen würde ich empfehlen, das alte solve zu verwenden, bis nonlinsolve reift.

    
asmeurer 01.12.2016 21:58
quelle

Tags und Links