2012-04-06 5 views
1

Edit: Genauer gesagt, ich suche nach einer praktischen Möglichkeit, die Form der Nullen einer Skalarfunktion mit 2 Variablen zu plotten. Die Werte müssen also nur bis zur Auflösung des von mir ausgewählten 2D-Gitters präzise sein. z.B. f (x, y) = sqrt (x^2 + y^2) - 4 sollte mir einen Kreis geben.Root-Suche für skalare multivariable Funktion

Das Problem ist, dass fsolve eine Vektorfunktion erfordert, so

from scipy.optimize import fsolve 
def a(x): return sin(x[0]) + cos(x[1]) 
nodes = fsolve(a,(.1,.2)) 

wird nicht funktionieren. Gibt es eine Problemumgehung? z.B. def a (x): zurück [sin (x [0]) + cos (x [1]), 0]

aber es wird nur 1 Lösung (array ([- 1.37079633,0.2]) anstelle von allen ausgegeben die möglichen Nullen).

+2

Wie würden Sie erwarten, dass es unendlich viele Lösungen zurückgibt? – user545424

+0

Entschuldigung, ich stimme zu, dass es ein schlechtes Beispiel ist – pcr

+0

@pcr: Könnten Sie ein vernünftigeres Beispiel zeigen, was Sie wollen? – talonmies

Antwort

2

Wenn Sie das Verhalten Ihrer 2D-Funktion und ihre Nullen diagnostizieren möchten, können Sie viel besser ein 2D-Wertegitter erstellen und mit etwas wie pcolor von Matplotlib plotten. Dann, wenn Sie wirklich genau finden müssen, wo die Nullen sind, wissen Sie, wo man fsolve sucht.

Prinzipiell ist es möglich, diesen Vorgang zu automatisieren, wenn Sie etwas über Ihre Funktion wissen, z. Wie viele Nullen gibt es für jeden Wert von y, dann wissen Sie, wie oft Sie fsolve um jedes Minimum anwenden müssen. Dies kann sich als ausreichend robust erweisen oder auch nicht. Aber es gibt keine allgemeine Lösung, um alle Nullen einer beliebigen nichtlinearen Funktion zu finden, insbesondere nicht für mehrere Dimensionen.

Verwandte Themen