Was bedeutet denn "dass das klappt"? Was klappt denn nicht? Und was soll wie geändert werden?
Gruß, Jan
Jay98
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 05.01.2017, 21:58
Titel:
Hallo Jan,
danke vielmals fürs bereinigen!
Wenn ich dieses System mit ode23s oder mit anderen Solvern lösen möchte, dauert das Berechnen ewig beziehungsweise funktioniert es garnicht
Mit freundlichen Grüßen Jay98
du musst uns schon ein wenig dabei helfen, dir zu helfen.
Zitat:
Wenn ich dieses System mit ode23s oder mit anderen Solvern lösen möchte
Woher sollten wir erahnen, dass du das möchtest?!
Zitat:
dauert das Berechnen ewig beziehungsweise funktioniert es garnicht
Du hast zuvor geschrieben, dass es nicht klappt - und jetzt, dass es nicht funktioniert. Was funktioniert nicht? Wenn du eine Fehlermeldung bekommst, dann poste sie doch bitte.
Poste bitte außerdem den Aufruf, den du für das Lösen der DGL verwendest, und das bitte inkl. der verwendeten Parameter und Startwerte.
Grüße,
Harald
Jay98
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 06.01.2017, 11:10
Titel:
Hallo,
es tut mir wirklich leid, ihr seht ja, ich kenne mir wirklich kaum aus und wusste daher nicht, was ihr alles braucht um mir zu helfen.
Mein Ausgangs-f.m-File lautet:
Code:
function dxdt=f(x,t,m,r1,r2,VR1,VR2,KM,Kv,Ps,P0,l)
dxdt = zeros(4,1);
Nun möchte ich, dass wenn x(3)<=0 ist, die Formel für Q11 nicht mehr
Q11=(abs((Ps-x(3))/Kv))^(1/2)*sin(2*pi*t+0.1); lautet sondern
Q11=(abs((Ps-x(4))/Kv))^(1/2)*sin(2*pi*t+0.1);
und das gleiche gilt für Q22 bei x(3)<=0 soll die Formel nicht mehr
Q22=(abs((x(4)-P0)/Kv))^(1/2)*sin(2*pi*t+0.1); lauten sondern
Q22=(abs((x(3)-P0)/Kv))^(1/2)*sin(2*pi*t+0.1);
Du brauchst Dich nicht zu entschuldigen. Es ist alles in Ordnung. Fragen zu Matlab sind hier immer willkommen. Wir versuchen mit dem Nachbohren nur das Problem einzugrenzen, damit wir der Lösung näher kommen.
Ich habe übrigens wieder Deinen Code bereinigt. Bitte verwende die Code-Umgebung für Code: Markiere den Code und drücke die "[Code]"-Taste. Dann ist er besser lesbar und die Befehle werden automatisch mit den Hilfetexten verlinkt.
Matlab's ODE-Integratoren benötigen glatte Funktionen, da andernfalls das Verhalten nicht mehr definiert ist. Vielleicht werden die Ergebnisse ziemlich falsch oder der Integrator bleibt mit einer Fehlermeldung stecken.
Grundsätzlich sind deshalb alle unstetigen Funktionen in den zu integrierenden Funktionen verboten: <, >,
abs
, (tan mit Einschränkungen),
if
, [code]clock[/code], usw.
Wenn Du bei x(3)==0 etwas ändern willst, eignet sich dafür eine Event-Funktion: Der Integrator erkennt dann diese Grenze und bricht die Integration ab. Man ruft ihn dann in einer Schleife auf, bis der Endwert für die Zeit erreicht ist.
Ich habe allerdings schon viele wissenschaftliche Auswertungen gesehen, in denen einfach über solche Unstetigkeiten hinweg integriert wurde. Man bekommt oft auch tatsächlich eine Zahl als Ergebnis. Nur dass dann als "Berechnung" zu werten, ist mutig. Bei einer Sensitivitäts-Analyse fällt das schnell auf: Kleine Variationen der Inputs und der Parameter führen dann zu großen Änderungen der Trajektorien und solche Simulationen kann man dann nicht mehr validieren.
Gruß, Jan
Jay98
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 08.01.2017, 18:30
Titel:
Hallo Jan,
danke für die hilfreichen Tipps!
Ab jetzt werde ich die Codes mit dem Button einfügen.
Lg Jay98
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
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.