Borrar filtros
Borrar filtros

how to stop ode45 when one of states reach certain value

128 visualizaciones (últimos 30 días)
[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)

Respuesta aceptada

Jan
Jan el 4 de Mayo de 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 comentarios
James Gilliam
James Gilliam el 20 de Oct. de 2023
What is T in this senario and how is it defined? Thanks
Walter Roberson
Walter Roberson el 20 de Oct. de 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.

Iniciar sesión para comentar.

Más respuestas (2)

Walter Roberson
Walter Roberson el 4 de Mayo de 2016
Editada: Walter Roberson el 13 de Sept. de 2017

Gustavo Lunardon
Gustavo Lunardon el 17 de Ag. de 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 comentario
Walter Roberson
Walter Roberson el 19 de Ag. de 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.

Iniciar sesión para comentar.

Categorías

Más información sobre Programming en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by