WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

ode45 und zeitabhängiger Term in Funktion

 

Weissbart
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 18:54     Titel: ode45 und zeitabhängiger Term in Funktion
  Antworten mit Zitat      
Hallo liebes Forum

Habe folgendes Problem bei dem ich einfach nicht weiter komme. Vielleicht kann mir jemand helfen.

Ich muss ein Diff Gleichungsystem lösen. Dazu verwende ich den ode45 Löser. Mein Code sieht wie folgt aus:

Code:


x0=[3 0];
t=0:0.01:10;
m=1;
D=2;

[t,y]=ode45(@DGFunktion,t,x0,[],D,m);

 


und

Code:

function dx=DGFunktion(t,x,D,m)
   
    dx=[0;0];
    dx(1)=x(2);
    dx(2)=-(D/m)*x(1)+F*ts;
   
end
 


Nun ist mein Problem, dass die Kraft F in dx(2) nur bei bestimmten Zeitpunkten aktiv sein soll. Also z.B. bei 5 und 3 Sekunden und sonst immer 0. Dachte ich kann einen Art Schalter ts einbauen, den ich zwischen 1 und 0 hin und her schalte. Habs aber nicht zusammen bekommen.

Wie mach ich Matlab das klar?

Danke für jede Hilfe

mfg, Weissbart
Private Nachricht senden Benutzer-Profile anzeigen


samsa10
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 10.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 19:55     Titel:
  Antworten mit Zitat      
Hallo!

Spalte die Summanden in dx(2) auf, also:

Code:

dx(2)=-(D/m)*x(1)+Fneu;
 


und Fneu ist nur an den gewünschten Stellen ungleich 0.

Grüße samsa
Private Nachricht senden Benutzer-Profile anzeigen
 
Weissbart
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 20:05     Titel:
  Antworten mit Zitat      
Hallo Samsa

Danke für deine Antwort. Leider weiss ich nicht wie man zum Beispiel so ein Fneu definiert, damit matlab damit im ode45 rechnen kann.

Danke!

mfg, Weissbart
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.01.2012, 20:47     Titel:
  Antworten mit Zitat      
Hallo,

z.B.
Code:
if t>3 & t < 5
F = ...
else
F = 0;
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.01.2012, 22:41     Titel: Re: ode45 und zeitabhängiger Term in Funktion
  Antworten mit Zitat      
Hallo Weissbart,

Es ist technisch möglich ODE45 eine unstetige Funktion integrieren zu lassen. Allerdings ist ein Runge-Kutta-Integrator mit Schrittweitensteuerung dafür nicht konzipiert. Es ist vergleichbar mit dem Einhämmern von Schrauben in die Wand - manchmal hält's.

Um einen Schritt zu berechnen wertet der Runge-Kutta-Algorithmus die Funktion zu verschiedenen Zeiten aus. Wenn ein Teil der Werte nun vor und ein paar nach dem Zeitsprung liegen, geht die Schrittweitensteuerung von einer extremen Änderung des Gradienten aus und verkleinert die Schrittweite so lange, bis entweder hmin erreicht ist (das ergibt dann zumindest eine Warnung), oder bis Rundungsfehler den Knick zufällig verschwinden lassen. In beiden Fällen wurden dann aber viele Millionen Schritte zu viel berechnet und die kummulierten lokalen Fehler führend zu einem sehr ungenauen Ergebnis.

Es gibt Integratoren, bei denen man per Event-Funktion direkt die Parameter ändern kann. Die fahren dann die Zeit exakt bis zum Schaltpunkt und starten den Integrator danach neu. Leider können die Matlab-Integratoren dies aber nicht. Stattdessen muss man entweder mit einer Event-Funktion den Integrator stoppen, oder wenn die Schalt-Zeitpunkte explizit vorliegen kann man einfach die Integration nur bis zu diesem Punkt laufen lassen. Dann werden die Parameter geändert und der Integrator neu gestartet.

Aus numerischer Sicht ist dringend zu empfehlen auf jede Unstetigkeit in der zu integrierenden Funktion zu verzichten: Die Funktionen IF, MAX, MIN, ABS (es sei denn das Argument hat Steigung 0 beim Nullpunkt, z.B. SIN^2), und RAND dürfen niemals Einfluss auf die Trajetorie haben, unstetige Funktionen wie Tangens bedürfen eines expliziten Tests.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2012, 07:23     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Aus numerischer Sicht ist dringend zu empfehlen auf jede Unstetigkeit in der zu integrierenden Funktion zu verzichten: Die Funktionen IF, MAX, MIN, ABS (es sei denn das Argument hat Steigung 0 beim Nullpunkt, z.B. SIN^2), und RAND dürfen niemals Einfluss auf die Trajetorie haben, unstetige Funktionen wie Tangens bedürfen eines expliziten Tests.


Ich denke es wird aus Bequemlichkeit trotzdem oft so gemacht.

Code:

function dx=DGFunktion(t,x,D,m)
   
    t_vec = [t_vec,t];
   
    if t>3 && t < 5
        F = 1;
    else
        F = 0;
    end

   
    dx=[0;0];
    dx(1)=x(2);
    dx(2)=-(D/m)*x(1)+F*t;
end
 


Die obige DGL benötigt 200 Integrationsschritte (siehe Anhang) bei Standardeinstellungen. Bei größeren F werden allerdings wirklich die meisten Integrationsschritte an den Unstetigkeitsstellen verbraten.

viele Grüße
Thomas

int_ode45.png
 Beschreibung:

Download
 Dateiname:  int_ode45.png
 Dateigröße:  9.91 KB
 Heruntergeladen:  872 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.01.2012, 12:18     Titel:
  Antworten mit Zitat      
Hallo Thomas84,

Zitat:
Ich denke es wird aus Bequemlichkeit trotzdem oft so gemacht.

Ja, das stimmt. Aber da dies ein Forum für eine Software ist, die für ernsthafte wissenschaftliche Arbeit genutzt wird, halte ich es für wichtig, den Ratschlag zu verbreiten.

Ein Integrator funktioniert nur dann zuverlässig, wenn man ihn innerhalb der Spezifikationen betreibt. Ich habe schon eine Menge wissenschaftlicher Publikationen gesehen, bei denen große (>1000 Komponenten), steife, unstetige Funktionen durch ODE45 durchgenudelt werden und keine Analyse der Sensitivitäten durchgeführt wird, also eine Bestimmung der Abhänigkeit der Endwerte von einer Variation der Anfangswerte.
Es gibt immer wieder Wissenschaftler, die eine "Trajektorie" als Lösung angeben, nachdem sie ein unstetiges chaotisches System durch einen Integrator gejagt haben. Um dem vorzubeugen, sollte man gleich seinen Professor beeindrucken und auf die Simulation unstetiger Systeme auch in trivialen Übungsaufgaben verzichten.

Würdet ihr einer gehuddelten Berechnungsmethode trauen, wenn damit die Euro-Werte auf euren Giro-Konten bestimmt werden? Nein? Wieso sollte man dann für wissenschaftliche Projekte kleinere Ansprüche stellen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.01.2012, 12:44     Titel:
  Antworten mit Zitat      
Hallo Jan,

es gibt weitaus Schlimmeres Smile Ich weiß von einer Dissertation, in der ein sehr interessantes Phänomen beschrieben wurde. Leider hat sich im Nachhinein herausgestellt, dass das Phänomen dadurch entstand, dass zur Simulation expliziter Euler mit konstanter Schrittweite verwendet wurde.

Verglichen damit sind Vergehen wie das Integrieren über Unstetigkeiten (die es im realen System so meist ohnehin nicht gibt) doch verzeihlich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.01.2012, 23:37     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ein expliziter Euler mit konstanter SChrittweite wäre zumindest von der Unstetigkeitsstelle nicht ganz so hart getroffen...
Ich kenne eine Dissertation, bei der ein sehr scharfer Peak genau bei der gesuchten Frequenz gefunden wurde, wobei zunächst alle Frequenzen darüber und danach alle Frequenzen darunter weggefiltert wurden. Aber dies wurde wenigstens noch vor der Endfassung entdeckt und gelöscht.

Liebe Doktoranden!

Natürlich wird in diesem Forum viel über FOR-Schleifen und den SAVE-Befehl gesprochen. Man kann hier aber auch genügend Knowhow finden, um über weit anspruchsvollere Probleme zu diskutieren, die bei der Anwendung von Matlab auftreten. Numerische Verfahren verfügen immer über gewisse Tücken und die Verwendung ausserhalb der Spezifikationen ist ein grober handwerklicher Fehler. Die Gefahren werden aber nicht explizit in der Dokumentation beschrieben, weil eine Dokumentation kein Lehrbuch ist. Die immense Fülle der Matlab-Bibliotheken verleitet dazu, mal eben die verfügbaren Tools zu verwenden. Bei ernsthafter wissenschaftlicher Arbeit muss man sich aber unbedingt mit den Werkzeugen auskennen, oder jemand fragen, der über die notwendige Ausbildung verfügt.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.