Relle Lösung aus solve auswähl < Maple < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:19 So 03.02.2008 | Autor: | lale |
Hallo zusammen,
Kurzfassung:
Gibt es eine Möglichkeit aus der Folge von Lösungen die solve liefert die reelle(n) herauszufiltern?
Lange Fassung mit Hintergrund:
Ich rechne an einem Koppelgetriebe rum und will berechnen, wann zwei bestimmte Glieder kolinear sind. Das kommt genau in einer Stellung der Getriebeglieder vor (=es gibt genau eine reelle Lösung). Zunächst erstelle ich die Gleichung für diese Stellung, die von einer Variable (die die Stellung der Koppelgetriebes angibt) abhängt. Da ich nur an der reellen Lösung interessiert bin, habe ich diese bisher mit fsolve ermittelt. Nun kämpfe ich mit dem Phänomen, dass fsolve mir keine Lösung liefert (als output wirft er immer fsolve(<formel>,<variable>) raus, obwohl die selbe Formel mit evalf(solve(<formel>,<variable>)) bearbeitet, einen reellen und einen imaginären Wert liefert.
Meine erste Idee: "Wenn fsolve nicht will, dann nehme ich halt die reelle Lösung von solve, aber wie filtere ich die raus?"
Abgesehen davon würde mich noch interessieren, warum fsolve diese Lösung nicht findet?
Bin für Tipps, Anregungen und Erklärungen dankbar.
Gruß Lars
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:35 Mo 04.02.2008 | Autor: | lale |
Hallo zusammen,
ich habe mir nun folgenden Workaround programmiert:
realsolve := proc(fnc)
local lsgsolve, lsg, i;
lsg := [];
lsgsolve := [solve(fnc)];
for i from 1 to nops(lsgsolve) do
if is(op(i,lsgsolve),'real') then
lsg := [op(i,lsgsolve)];
end if
end do;
return op(lsg);
end proc:
Ich hege aber weiterhin den Verdacht, dass dies mit "Kanonen auf Spatzen geschossen" ist.
Elegantere Lösungen sind weiterhin gefragt.
Gruß LaLe
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:12 Mo 04.02.2008 | Autor: | Laxomat |
Hallo,
dass fsolve kein Ergebnis liefert, sondern nur den ursprünglichen Befehl, kann daran liegen, dass Maple keine Lösung findet. Das liegt daran, das fsolve Lösungen mit Hilfe einer numerischen Iteration sucht und bei schlechtem Anfangswert, kann die Routine ins Leere laufen.
Das einzige was man da machen könnte, wäre den Bereich durch ein Intervall einzuschränken, das als optionales Argument mit übergeben werden kann (am besten mal in der Maplehilfe anschauen: ?dsolve)
Wenn das nicht möglich ist, fällt mir momentan auch keine bessere Variante als deine kleine Routine ein.
Gruss, Laxomat
|
|
|
|
|
Status: |
(Korrektur) richtig (detailiert geprüft) | Datum: | 09:58 Mi 06.02.2008 | Autor: | lale |
Hallo zusammen, insbesondere Laxomat,
ich habe meinen Workaround jetzt so erweitert, dass zunächst versucht wird mit fsolve (unter Angabe eines Startwertes) eine Lösung zu finden und erst, wenn das nicht funktioniert, per solve und der Auswahl der reellen Lösung weiter versucht wird.
Das Ergebnis ist rundum zufrieden stellend, der Algorithmus läuft durch und dass deutlich schneller als mit der solve-Lösung.
Danke und Gruß LaLe
|
|
|
|