Bei numerischen Berechnungen besteht eine gute Chance, eine nichtlineare Simultangleichung zu lösen. Vor vielen Jahren, als ich ein Doktorand war, der forschte, habe ich es in Fortran implementiert. In letzter Zeit habe ich mehr Möglichkeiten, Programme in Python zu schreiben, und ich bin auf eine Situation gestoßen, in der ich eine nichtlineare Simultangleichung erneut gelöst habe. Die Newton-Methode ist eine bekannte Methode zum Lösen nichtlinearer simultaner Gleichungen, aber ich habe nach einer guten Bibliothek gesucht, da die Implementierung von Grund auf schwierig ist.
Es war einfach, nicht seltsam. Dieses Mal möchte ich als Beispiel die folgenden nichtlinearen Simultangleichungen lösen.
Der Quellcode lautet wie folgt. Ich werde später eine kurze Erklärung geben.
import numpy as np
from scipy import optimize
#Geben Sie die zu lösende Funktion in einer Liste zurück
def func(x):
return [x[0]**2 + x[1]**2 -1.0,
x[0]]
result = optimize.root( func, [ 1.0, 0.0], method="broyden1")
print(result)
Das Ausführungsergebnis ist wie folgt.
fun: array([-1.98898568e-07, -5.14009858e-06])
message: 'A solution was found at the specified tolerance.'
nit: 9
status: 1
success: True
x: array([-5.14009858e-06, 9.99999901e-01])
Einzelheiten zur Verwendung von scipy.optimize.root finden Sie in der scipy-Dokumentation. Hier ist eine grobe Erklärung. Das erste Argument von optimize.root ist die Funktion func, die die Funktion definiert, die Sie lösen möchten. Das zweite Argument ist der Anfangswert, der verwendet werden soll, wenn mit der Lösung des Problems begonnen wird. Im dritten Argument geben Sie an, wie gelöst werden soll. Weitere Informationen finden Sie im scipy-Dokument. Hier ist jedoch eine Einschränkung. .. Dieses Mal wird broyden1 in der Methode angegeben, aber je nach Argument muss die Jacobi-Matrix separat definiert werden. Es war ein Ärger für mich, also habe ich einen gewählt, der keine Jakobi-Prozession erfordert.
Der wichtige Teil des Ausführungsergebnisses ist auch der Teil von x: array (), der die eigentliche Lösung darstellt, und er scheint $ x = 0, y = 1 $ zu sein. Weitere Informationen zur Lösung finden Sie unter scipy.optimize.OptimizeResult.
Python ist praktisch, da es auf verschiedene Arten einfach implementiert werden kann. Ich wollte mich als Doktorand treffen. Nein, ich habe ihn getroffen, aber es war mühsam, den Zug zu wechseln, also tat ich so, als würde ich ihn nicht sehen. Es tut uns leid.
Recommended Posts