DMUG-Archiv 2003

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

AW: FindRoot 5.0 Problem

... mit FindRoot versucht man von y[x] den Wert von x zu finden, für den y=w ist.

W ist hier 0. Wenn ich den ListPlot und pts betrachte, dann sehe ich dass {x,0} nur zwei mal vorkommt. Beim ersten und 
beim 5. Datenpunkt.

Wie kann dann

FindRoot[foo[u] == 0, {u, u1,u2}]

für verschiedene u1 und u2 3 Lösungen bringen?

Gruß

Peter

-----Ursprüngliche Nachricht-----
Von: owner-demug@XXXXXXX.ch [mailto:owner-demug@XXXXXXX.ch]Im
Auftrag von Hermann Klocker
Gesendet: Freitag, 31. Oktober 2003 07:08
An: 'Peter Klamser'
Cc: demug@XXXXXXX.ch
Betreff: RE: FindRoot 5.0 Problem


> -----Original Message-----
> From: owner-demug@XXXXXXX.ch [mailto:owner-demug@XXXXXXX.ch] On
> Behalf Of Peter Klamser
> Sent: Thursday, October 30, 2003 11:56 PM
> To: Hermann Klocker; demug@XXXXXXX.ch
> Subject: AW: FindRoot 5.0 Problem
> 
> Sehr geehrter Herr Klocker,
> 
> Sie haben offenbar aus dem Hilfetext von MMA 5.0 die Befehle rauskopiert
> und wollen nun für eine spline einen x Wert für ein vorgegebnes y finden.
> 

Stimmt, ich hab das getan, weil das eine Spline-Funktion ist, die jeder
Mmma-Anwender zur Verfügung hat - ich selbst verwende Anwendungsdaten.

> ListPlot[pts // Sort, PlotJoined -> True]
> ParametricPlot[spline[i], {i, 0, Length[pts] - 1}]
> Show[%, %%]
> 
> Man sieht im Hilfstext, dass spline nicht eine Funktion von x sondern eine
> Funktion von i ist, wenn gilt

[...]

> 
> Aber die entscheidende Frage ist doch: Welchen Wert soll eigentlich
> FindRoot zurückgeben, wenn y=0 ist? 0 oder 3?
> 
> Es handelt sich eben um eine Relation und nicht um eine Funktion.
> 

Das stimmt schon - FindRoot sollte ganz einfach über den Startwert die
mögliche Lösung selektieren (dass so was furchtbar schief gehen kann ist mir
auch klar) - in diesem Beispiel gibt es für mein Problem die Lösungen  {0,
1.50811, 3} für die Parameterwerte, bei denen x=0 wird.

Das Problem war, dass FindRoot unabhängig von den vorgegebenen Startwerten
den Wert 0 zurückgegeben hat (in meinem Anwendungsfall sogar immer die
gesuchte Abszisse), ohne dass ich das zuerst bemerkt hätte (keine
Fehlermeldung). Ob das was mit SplineFit zu tun hatte, war mir zu diesem
Zeitpunkt nicht klar - deshalb konstruierte ich das Beispiel. 

Mit der von Jens Peer Kuska angegebenen Lösung

foo[u_?NumericQ] := First[spline[u]];
FindRoot[foo[u] == 0, {u, 1.5, 1.6}]
FindRoot[foo[u] == 0, {u, 0, 0.1}]
FindRoot[foo[u] == 0, {u, 2.9, 3.1}]

läuft's jetzt auch wunderbar. Allerdings musste ich noch eine Stelle in
meiner Anwendung suchen (und so wie oben "erweitern"), damit alles lief.

Danke für die hilfreichen Hinweise.

Hermann






Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html