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

Event function ode45

 

maki
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2020, 16:27     Titel: Event function ode45
  Antworten mit Zitat      
Hallo,
meine Event function funktioniert leider nicht.

Code:
n = 10;
t=0;
y=[0,0,0,0,0,0,0];
   
for k = 1:n
c0 = [ Xv0(k); Xt0(k); cGlc0(k); cLac0(k);  cGln0(k); cAmm0(k); v0(k)];

 options = odeset('Event','TCD');
[tSpeicher,ySpeicher] = ode45(@(t,c) Model_MK3(t,c,b),p{k},c0,options);
 
 t = vertcat(t,tSpeicher);
 y= vertcat(y,ySpeicher);
 
end


function [value,isterminal,direction] = TCD(t,y)

isterminal = 1; %1 weil die Integration bei erreichtem Wert gestoppt werden soll
direction = 1; % weil es bei der Steigung sein soll
if y(:,1) > 1.5*10^6 %Zielwert
    value=0; %stoppen
else
    value=1; %nicht stoppen
end


der Wert y(:,1) steigt im laufe der For-Schleife über den Zielwert, allerdings stoppt die Integration nicht. Eine Fehlermeldung wird nicht angezeigt.

Ziel ist es, bei Erreichen des Zielwerts in eine neue Iteration zu springen.

Hat jemand eine Idee?

Viele Grüße,
Martin
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.06.2020, 17:39     Titel:
  Antworten mit Zitat      
Hallo,

mit dem Debugger solltest du dem selbst auf den Grund gehen können.

Du hast ja einen Vektor. Soll gestoppt werden, wenn:
a. eine bestimmte Komponente den Schwellwert überschreitet?
b. irgendeine Komponente den Schwellwert überschreitet?
c. alle Komponenten den Schwellwert überschreiten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
maki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2020, 17:50     Titel:
  Antworten mit Zitat      
Hallo,

ich logge antwort a.

Zitat:
eine bestimmte Komponente den Schwellwert überschreitet?
ein.

Wird das für Matlab aus dieser Zeile

if y(:,1) > 1.5*10^6 %Zielwert
    value=0; %stoppen
else
    value=1; %nicht stoppen
end


nicht ersichtlich? Der Debugger bestätigt mir die Übersteigung des Zielwerts. Allerdings wird mir kein Wert für "Value" angezeigt, könnte das ein Grund sein?

Viele Grüße,
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

y ist vermutlich ein Spaltenvektor. Versuch also mal y(1,:) oder einfach y(1).

Zitat:
Allerdings wird mir kein Wert für "Value" angezeigt, könnte das ein Grund sein?

Wenn du schrittweise bis zur letzten Zeile der Funktion gehst, sollte ein Value angezeigt werden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
maki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2020, 15:29     Titel:
  Antworten mit Zitat      
Zitat:
Versuch also mal y(1,Smile


Des Rätsels Lösung,danke!

Eine weitere Frage: Value springt nun, bei erreichen des Zielwerts, auf 0, wie es soll. Allerdings stoppt die Integration nicht, da die Zeit des Integrators nicht erreicht ist.

Ein kleines Beispiel:
Die Zeit habe ich wie folgt festgelegt:

Code:
p =cell (1,9);
p{1}= [0.24 43.6800 66.7200];
p{2}= [74.6400 120 144.2400];
p{3}= [144.4800 192 215.5200];
p{4}= [216.2400 264 288];
p{5}= [288.0500 334.6100 405.1700];
p{6}= [476.4500 595.2500 737.8100];
p{7}= [737.8600 760.4440 806.9800 877.4200 970.2760];
p{8}= [970.3260  993.8680 1041.388 1111.588];
p{9}= [1111.638 1134.63 1180.902 1248.246];


Wird nun der Zielwerkt bei 480 Stunden erreicht (ist dann in p{7}), erfolgt eine Integration bis zu letzten Wert der Zeile p{7} (trotz Value =0). Kann ich das verhindern?

Viele Grüße,
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.06.2020, 15:54     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich das richtig sehe, hast du die Bedeutung von value falsch interpretiert. Es wird nach einer Nullstelle von value gesucht. Ich würde

value = y(1,:) - 1.5*10^6

wählen.

Falls y(1,:) < 1.5*10^6 ist value < 0. Wenn y(1,:) > 1.5*10^6 wird, wird value > 0.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
maki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2020, 16:50     Titel:
  Antworten mit Zitat      
verstanden, danke!

Viele Grüße,
Martin
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 - 2024 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.