import numpy as np
import scipy.optimize as optim
def fun(x):
return x - 2*np.cos(x)
sol = optim.root(fun, x0 = 0)
print("Nullstelle(n) von f(x): x =", sol.x)Nullstelle(n) von f(x): x = [1.02986653]
SciPy ist eine riesige Fundgrube an numerischen Methoden für Python, beispielsweise zur Optimierung (scipy.optimize), Spektralanalyse (scipy.fftpack), weiterer linearer Algebra (scipy.linalg) und vielem mehr.
Wir werden SciPy in den zukünftigen Übungseinheiten ausführlich nutzen, aber wir werden keinen systematischen Überblick über seine Fähigkeiten geben, weil diese zu umfangreich sind. Der documentation ist jedoch sehr gut und sollte Ihnen dabei helfen.
Stellen Sie sich ein Pendel mit einer Winkelfeder vor, die es in eine horizontale Position zieht.

Seine Gleichgewichtsposition wird durch die folgende transzendente Gleichung angegeben (\(\varphi\) ist der Winkel entgegen dem Uhrzeigersinn zwischen dem Pendel und dem Horizont) \[ \varphi = 2\, \cos \varphi\]
Obwohl dies nicht genau gelöst werden kann, lässt es sich mithilfe des SciPy-Optimierungsmoduls leicht annähernd lösen. Zuerst drücken wir die Gleichung als Funktion aus, deren Nullstelle berechnet werden soll \[ f(x) = x-2\, \cos x,\]

und dann verwenden wir scipy.optmimize.root mit einer passenden Anfangsschätzung x0, um unsere Lösung zu finden.
import numpy as np
import scipy.optimize as optim
def fun(x):
return x - 2*np.cos(x)
sol = optim.root(fun, x0 = 0)
print("Nullstelle(n) von f(x): x =", sol.x)Nullstelle(n) von f(x): x = [1.02986653]
Dieses Beispiel zeigt, wie einfach selbst komplizierte Probleme (hier die approximative Lösung einer nichtlinearen Gleichung) gelöst werden können, ohne eigenen Code zu schreiben, indem vorhandene ScyPy-Funktionen genutzt werden.
root, um zu verstehen, welche Parameter benötigt werden und welche Informationen aus dem Ergebnis abgerufen werden können – Was passiert, wenn Sie die anfängliche Schätzung \(x_0 = -1,5\) festlegen? Erklären Sie, warum der Löser fehlschlägt (Hinweis: Sehen Sie sich die Darstellung der Funktion an).scipy.optimize an. Wie kann man das Minimum von \(f(x)\) finden? Welches Minimum finden Sie genau?