Effacer les filtres
Effacer les filtres

how to stop ode45 when one of states reach certain value

128 vues (au cours des 30 derniers jours)
Mohamed Aburakhis
Mohamed Aburakhis le 4 Mai 2016
Commenté : Walter Roberson le 20 Oct 2023
[x_dot] =derivative(t, x)
x is states [x(1).....x(4)] I need to stop the integration when x(3) reaches 0.1 when the integration stop record (t)

Réponse acceptée

Jan
Jan le 4 Mai 2016
Opt = odeset('Events', @myEvent);
[T, Y] = ode45(@YourFun, T, Y0, Opt);
function [value, isterminal, direction] = myEvent(T, Y)
value = (Y(3) == 0.1);
isterminal = 1; % Stop the integration
direction = 0;
  7 commentaires
James Gilliam
James Gilliam le 20 Oct 2023
What is T in this senario and how is it defined? Thanks
Walter Roberson
Walter Roberson le 20 Oct 2023
In the call
[T, Y] = ode45(@YourFun, T, Y0, Opt);
the input T is the timespan to integrate over. It is a vector that must have at least two elements, but may have more. If it has two elements then ode45() will decide by itself what times to output information at; if it has more than two elements then ode45() will output information at the times given in the vector.

Connectez-vous pour commenter.

Plus de réponses (2)

Walter Roberson
Walter Roberson le 4 Mai 2016
Modifié(e) : Walter Roberson le 13 Sep 2017
  1 commentaire
Mohamed Aburakhis
Mohamed Aburakhis le 4 Mai 2016
I found a lot of options , which one should I use?

Connectez-vous pour commenter.


Gustavo Lunardon
Gustavo Lunardon le 17 Août 2020
This is confusing. In matlab help it says: An event occurs when value(i) is equal to zero. All answers in this post make it value = 1 for the event to happen. Are the answers outdated somehow?
  1 commentaire
Walter Roberson
Walter Roberson le 19 Août 2020
This is a valid concern.
value = (X(8) == 0.05 ) and (Y(3) == 0.1) would happen rarely, when the values were bit-for-bit identical to the representation of 0.05 and 0.1 . One bit different in the representation and the condition will not fire. Better is to write x(8) - 0.05 or 0.05 - x(8), and Y(3)-0.1 or 0.1-Y(3) -- zero crossings can be detected for those.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by