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

ode-Funktion bei wechselnden Variablen

 

Traumt@nzer
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 04.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2012, 11:33     Titel: ode-Funktion bei wechselnden Variablen
  Antworten mit Zitat      
Hallo Foren-Helfer,

ich habe ein Problem bezüglich einer ode-Funktion bei wechselnden Variablen.
Ich habe ein Zweimassenschwinger mit je einer Masse, Feder und Dämpfer (x1,m1,c1,b1; xA,mA,cA,bA),also ein DGL-System mit 2 DGL’s.
Die Anfangsbedingungen sind x1,0, xA,0, x‘1,0 =0 und x‘A,0 ungleich 0. Es gilt m1<<mA.

Nun zu meiner Problematik. Bei der maximalen Auslenkung soll sich die Feder c1 nicht mehr ausdehnen. D.h. ich gebe durch eine if-Funktion vor, dass der Dämpfer von b1,0=0 auf einen endlich hohen Wert gesetzt wird und so die Feder „festhalten“ soll. Diese Methode klappt bei einem Einmassenschwinger wunderbar, bei einem Zweimassenschwinger aber nicht mehr.

Bei vielen ode’s bekomme ich gar keine Ergebnisse in absehbarer Zeit (5 min), bei ode23 dehnt sich die Feder wieder aus.
Ich habe ode’s für steife und nicht steife DGL’S (explizite / implizite Verfahren) ausprobiert; habe RelTol und AbsTol verkleinert. Ohne Erfolg.

Kann mir jemand sagen worin das Lösungsproblem besteht und wie ich das Problem angehen kann!? Durch Recherchen nehme ich an, dass der Integrator ein Problem mit dem Variablensprung hat, da bei kleinen Schrittweiten und Variablenwechsel der Integrator sich „totrechnet“!? Kann ich das verhindern? Ich habe etwas von einem „Event Breaker“ gelesen.

Ich habe auch versucht die Federsteifigkeit durch eine if-Funktion drastisch zu erhöhen, dies funktioniert aber nicht einmal bei dem Einmassenschwinger (Feder dehnt sich wieder aus).

Vielen Dank für eure Hilfe.
Robert
Private Nachricht senden Benutzer-Profile anzeigen


Traumt@nzer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 04.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2012, 11:57     Titel:
  Antworten mit Zitat      
Was noch anzumerken ist, dass bei geringen Variablensprung ode23 ein realistisches Ergebnis liefert. Nur reicht der Dämpferwert nicht aus um die Feder festzuhalten. Der nächst höhere Wert (eine Stelle mehr) kann dann schon nicht mehr berechnet werden.

VG Robert
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2012, 12:58     Titel:
  Antworten mit Zitat      
so richtig habe ich das Problem nicht verstanden. Aber vielleicht hilft dir ja der Link etwas:

http://www.mathworks.de/help/techdo...../f1-662913.html#f1-669698
Private Nachricht senden Benutzer-Profile anzeigen
 
Traumt@nzer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 04.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2012, 13:28     Titel:
  Antworten mit Zitat      
Danke schon einmal. Ich schaue mir den Link an.

Kurzgefasst würde ich gerne wissen, warum MATLAB bei einem Variablensprung nicht weiterechnen kann bzw. was ich als Abhilfe tun kann.

Danke und VG Robert
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: 05.07.2012, 14:22     Titel:
  Antworten mit Zitat      
Hallo Traumt@nzer,

Intergratoren benötigen stetig ableitbare Funktionen. Man kann zwar Funktionen mit Sprungstellen als Input verwenden, aber dann wird die Schrittweitensteuerung des Integrators heftig verwirrt und in der Not die Schrittweite immer kleiner wählen, bis die Rundungsfehler größer sind als der Sprung selbst. Der Integrator wurstelt sich also durch.

Sinnvoll, also aus wissenschaftlicher Sicht die einzig zuverlässige Lösung, ist es, den Integerator beim Sprung zu stoppen (mit einer event-Funktion) und die End-Werte als Startwerte einer neuen Integration mit einer geänderten funktion zu starten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Traumt@nzer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 04.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2012, 12:43     Titel:
  Antworten mit Zitat      
Hat wunderbar mit der Event-Funtion funktioniert.

Danke an die Helfer
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.