|
|
ode - Ausgabe zusätzlicher Variablen |
|
Felge der Nacht |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 29.11.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.01.2010, 21:53
Titel: ode - Ausgabe zusätzlicher Variablen
|
 |
Hallo,
meine Funktion, die ich mit dem ode-Solver aufrufen will, ist sehr komplex und beinhaltet neben den Variablen, die mir der Solver als Lösung liefert, noch weitere Werte, die ich ebenfalls haben möchte. Nur wie komme ich an diese Werte?
Kurzes Beispiel:
function dy = test(t,y)
m = y*t;
dy = m*sin(t);
end
ode würde mir ja jetzt nur y liefern, nur wie komme ich an m ran? Die Werte danach nochmal separat zu errechnen, wäre ja "Ressourcenverschwendung", da die Werte ja schonmal vorlagen. Geht das irgendwie eleganter?
Und wie komme ich an die Ableitung von y ran? Manuelles Differenzieren ist wohl recht fehlerträchtig?!
Danke schonmal im Voraus!
Gruß
Johannes
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.01.2010, 23:36
Titel:
|
 |
Hallo,
die Frage ist doch, wie man z.B. das m von außen reinbekommt?
und beim Aufruf dann
Stichwort: anonymous function handle.
Grüße,
Harald
|
|
|
Felge der Nacht |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 29.11.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.01.2010, 00:13
Titel:
|
 |
Danke für deine Antwort!
Also das m kenne ich ja vorher nicht sondern das soll bei jedem Funktionsaufruf innerhalb der Funktion errechnet werden.
Die Frage ist, wie ich das dann da rausbekomme. Das m ist ja nur stellvertretend für (m)eine komplexere Funktion (Matrizen zuweisen, nichtlineares Gleichungsystem lösen und auswerten).
Unter anderem will ich eine Winkelbeschleunigung über ein winkelabhängiges Drehmoment berechnen:
function domega = test(t, omega)
{
M = "irgendwas in Abh. von omega";
domega = (M(omega) - M_Last)/Trägheit;
}
end
Das könnte ich jetzt mit ode lösen lassen. Jetzt will ich aber nicht nur einen t und einen omega-Vektor, sondern auch das Moment in jedem berechneten Zeitpunkt.
Sollte doch irgendwie gehen. Oder hab ich da eine falsche Vorstellung vom ode-Solver?
|
|
|
Thomas84 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.01.2010, 07:53
Titel:
|
 |
Ist zwar nicht so schön, aber mit globalen Variablen geht es. Vielleicht gibts ja aber auch noch eine bessere Lösung.
|
|
|
Felge der Nacht |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 29.11.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.01.2010, 11:29
Titel:
|
 |
Danke für eure Antworten!
Der Vorschlag mit den globalen Variablen hat den Nachteil, dass der ode ja nicht nur zu den Zeiten von tspan rechnet und man die Daten dann wieder aufbereiten müsste, gerade wenn der Solver merkt, dass die Schrittweite zu groß war und er die Berechnung wiederholt.
Wundert mich, dass es für das Problem keine offensichtliche Lösung zu geben scheint.
|
|
|
Felge der Nacht |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 29.11.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.01.2010, 11:33
Titel:
|
 |
|
 |
|
So, ich habe das ganze jetzt programmiert und möchte euch meine Erfahrungen nicht vorenthalten!
Die Sache mit den globalen Variablen funktioniert prinzipiell. Woran es letztlich aber scheitert, ist, dass der Solver einerseits gleiche Punkte mehrmals berechnet, wegen der Fehlerabschätzung, und andererseits der solver nicht exakt die Zeitpunkte evaluiert, die man vorgibt.
Angenommen, mein vorgegebener Zeitvektor hat 10 Einträge und die globalen Variablen dann 300 Einträge. Jetzt könnte man prüfen, welcher der 300 Einträge am ehesten der Kurve entsprechen, die der solver liefert, und dann nur diese Punkte auswerten. Das ist mir jedoch zu umständlich. Ich werde jetzt hingegen versuchen, meine zusätzlichen Variablen doch über einen separaten Berechnungsschritt zu gewinnen.
Warum der Solver die von mir gewünschte Funktionalität mit den zusätzlichen Variablen nicht anbietet, erklärt sich eigentlich dadurch, dass er die vorgegebenen Zeitpunkte nicht exakt trifft. Von den DGLs, welche er lösen soll, weiß er, wie sie sich in der Umgebung des Punktes verhalten und wie zuverlässig eine Interpolation ist. Für die zusätzlichen Variablen innerhalb der Funktion gilt dies jedoch nicht.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|