When the solution of ODE45 diverges (doesn't matter why and how), the following warning will be displayed, and the solver can not continue:
Warning: Failure at t=8.190397e+01. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (2.273737e-13) at time t.
I am running ode45 on a matrix (lots of inputs), so I want to find out automatically for which inputs the above condition(failure) happens. I mean, Is there any other sign of this condition returned by ode45 that can be written in an array automatically? Something that can be used in a if
statment as:
if {some variable is returned/is equal to ...} then {the solver has failed}
to identify those faulty inputs automatically without looking for the displayed warning.
[t,y]=ode45(@(t,y)[y(1)^2;y(2)],[0 1],[1;1]);
. The two equations are independent. The first has a growth rate that causes the step size to become very small. In turn this causesode45
to eventually abort. I guess the question is how one could write their ODE function to determine that this is going to happen, but avoid it by zeroing out an equation before the step size get too small? Obviously there would be no solution to the zeroed out equation, butode45
could continue on its merry way and obtain full solutions for the remaining elements. – horchlerif
statement and checking for the failure at each run. – Mostafa