2016-05-31 6 views
0

Ich habe Zweifel, wie man ode45 verwendet, da ich weiß, dass es eine interne variable Schrittgröße verwendet. Zum Beispiel habe ich in meinem speziellen Fall ein Modell von ODEs und verwende eine Abtastzeit von 5 Minuten. Daher innerhalb meiner Hauptsimulationsschleife habe ich die folgende Zeile die Ausgabe von meinem Modell zu erhalten, indem es ode45 unter Verwendung der Lösung:Matlab ode45 interner Schritt

[T,X] = ode45(@(t,x) model(t,x,u,data),[t t+scenario.Ts],x0); 

Wo u Eingänge des Modells sind, data eine Struktur mit Parametern ist, werden x0 die Anfangsbedingungen beim aktuellen Zeitschritt und ist die Anfangs- und Endzeit. Mein Zweifel ist, dass zwischen t und t+scenario.Ts der ode45 -solver variable Zeitschritte verwendet und somit die Art und Weise, wie ich meine Eingabeaktionen einführe, u beeinflusst werden kann. Daher verstehe ich, dass ein Wert eines bestimmten Eingangs u durch die internen Zeitschritte zwischen konstant gehalten wird. Wenn ich zum Beispiel ein Flussmittel, d. H. Wasser in einen Tank, habe, hat der Zeitschritt eine direkte Auswirkung auf diese u.

Lassen Sie mich das ein wenig mehr mit einem Beispiel erklären. Wenn über Ich weiß, dass u(1) = 10. Dann sollte der reale Eingang, den ich verwenden sollte, u(1)=10/(# of time steps between [t0 tend]) sein. Da der interne Schritt jedoch variabel ist, welchen Eingang muss ich verwenden?

Ich hoffe, Sie verstehen mein Problem und können mir helfen.

+0

@ykaragol Wenn Sie den Code in einem [suggest edit] (http://stackoverflow.com/review/suggested-edits/12534423) formatieren, formatieren Sie ihn bitte das nächste Mal. Sonst könnte Ihre Bearbeitung abgelehnt werden, da es keinerlei Verbesserung gibt ... – Matt

+0

Schwer zu sagen, ohne den Code für 'model' zu sehen (oder ein repräsentatives ausführbares Beispiel). Es sieht so aus, als ob Sie versuchen, einen Parameter in Bezug auf die Zeit zu variieren. Sie können ein steifes System erstellen, das zu ineffizienten und sogar falschen Ergebnissen führen kann. Ihre Modellfunktion sollte nicht von der Anzahl der Zeitschritte abhängig sein. 'u' sollte eine Funktion von' t' oder von Ihrem Zustandsvektor 'x' sein. – horchler

Antwort

0

Sie sollten die Eingänge so formulieren, dass sie unabhängig von der Zeitdiskretisierung ist. Dies sollte kein Problem sein, wenn Ihre Gleichungen in kontinuierlicher Zeit formuliert werden. Wenn die Steuervariable nicht konstant ist, sollten Sie sie explizit von t abhängig machen und eine Funktion u(t) schreiben.

Wenn meine Antwort nicht ausreicht, um Ihnen zu helfen, fügen Sie bitte weitere Details zu Ihrer Anwendung hinzu, insbesondere das dynamische Modell, das Sie simulieren. Dann können wir Ihnen weiterhelfen.