# How to introduce a constriant and stop condition in ode45 ？

4 views (last 30 days)
Cola on 8 Jun 2022
Commented: Cola on 9 Jun 2022
There are two questions. The first question is how to introduce a constriant in ode45 for a variable.
For example, the constriant of y(2) is 0<=y(2)<=2 in the following code，and how to introduce it?
The second question is how to introduce a stop condition in ode45？
For example, how to stop the integration of ode45 at two conditions when y(1)<-1 and y(2)<-2 in the following code?
y10=2;
y20=0;
Y0=[y10,y20];
[t, Y] = ode45(@fun,[0:0.1:20], Y0);
plot(t,Y(:,1),'-o',t,Y(:,2),'-o')
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2')
function Dy=fun(t,y)
Dy=zeros(2,1);
Dy(1)=y(2);
Dy(2)=(1-y(1)^2)*y(2)-y(1)
end
##### 2 CommentsShowHide 1 older comment
Cola on 9 Jun 2022
You have my gratitude.

Torsten on 8 Jun 2022
Edited: Torsten on 8 Jun 2022
First question:
You can't prescribe a constraint for a solution variable of an ODE. The ODE variable results automatically from the ODE equation, so you cannot influence it: either it respects your constraint or not.
Second question:
Use the "event" facility of the ODE integrators:
Cola on 9 Jun 2022
Edited: Cola on 9 Jun 2022
Thank you so much. The second question is solved by the ''event''. The first question is like what you said, but I still want to try it.

Jan on 8 Jun 2022
Both is done by an event function. There you can check the values of the current trajectory and stop the integration. If the values should be limited only, you restart the integration from the current location setting the corresponding derivative to 0.
Cola on 9 Jun 2022
Thank you for your prompt response. The second question is solved, and I am trying to introduce a constraint by an event function for the first question .