'InitialStep' and 'MaxStep' in ode45
John B. Thoo
jthoo at yccd.edu
Mon Jul 27 11:04:39 CDT 2009
On Jul 26, 2009, at 1:36 AM, Thomas Treichl wrote:
> John B. Thoo schrieb:
>> Hi, everyone. I have a question about 'InitialStep' and 'MaxStep'
>> in ode45.
>> I tried to solve an equation using
>> [T, u] = ode45 (@F, [t0 tf], [u0, u0_t]);
>> and this is what I got:
>> octave-3.2.0:4> run_twoway
>> warning: Option "RelTol" not set, new value 0.000001 is used
>> warning: Option "AbsTol" not set, new value 0.000001 is used
>> warning: Option "InitialStep" not set, new value 1.200000 is used
>> warning: Option "MaxStep" not set, new value 1.200000 is used
>> error: Solving has not been successful. The iterative integration
>> loop exited at time t = 5.818179 before endpoint at tend =
>> 12.000000 was reached. This may happen if the stepsize grows
>> smaller than defined in vminstepsize. Try to reduce the value of
>> "InitialStep" and/ or "MaxStep" with the command "odeset".
>> octave-3.2.0:4>
>> So I halved tend and set 'InitialStep' and 'MaxStep' as follows:
>> options = odeset ('InitialStep', 1.0e-3, 'MaxStep', 1.0e-3, ...
>> 'RelTol', 1.0e-6, 'AbsTol', 1.0e-6);
>> [T, u] = ode45 (@F, [t0 tf], [u0, u0_t], options);
>> This time I got:
>> octave-3.2.0:4> run_twoway
>> error: Solving has not been successful. The iterative integration
>> loop exited at time t = 5.553544 before endpoint at tend =
>> 6.000000 was reached. This may happen if the stepsize grows
>> smaller than defined in vminstepsize. Try to reduce the value of
>> "InitialStep" and/ or "MaxStep" with the command "odeset".
>> octave-3.2.0:4>
>> My question is this:
>> If the first time 'InitialStep' and 'MaxStep' were set at 1.2
>> resulted in ode45 exiting prematurely at time t = 5.818179, then
>> why does decreasing 'InitialStep' and 'MaxStep' result in the
>> solver exiting prematurely at a *shorter* time t = 5.553544?
>
> Hi John,
>
> this strongly depends on your ODE system. I think you have a
> singularity somewhere at t=5.5..6.0, ie. that this is the third
> possibility for your problem that ode23..ode78 can not solve for
> you however you choose InitialStep and/or MaxStep. If your problem
> is that kind of stiff then you maybe should use a solver that can
> solve stiff problems, cf. description about the different solvers
> in odepkg.pdf and the description about all the different options
> that can be set.
>
> InitialStep and MaxStep in ode23..ode78 are not computed (as like
> the solvers in Matlab do) but must always be given by the user. If
> no value is given (eg. your first trial) then simply (tf-t0)/10 is
> taken - this might be completely wrong and depends on which ODE
> system should be solved.
>
> Now, if you choose another InitalStep then solving can completely
> different (in your first trial we have t1_1=(tf-t0)/10, in your
> second trial t1_2=1e-3, you see that t1_1 and t1_2 are already
> different in your first InititialStep, it would be pure luck if you
> would hit tx_1 = 5.818179 and tx_2 = 5.553544).
>
> Just for info, you normally should hit tx_1=tx_2 exactly if you
> take fixed step sizes, eg.
>
> [T, u] = ode45 (@F, [t0:tf], [u0, u0_t]);
> ## --> <-- pass a vector with time values
>
>> Another question:
>> How should I choose to set 'InitialStep' and 'MaxStep'? And
>> should they always be set to the same value?
>
> Ok, I hope I could explain InitialStep, MaxStep is different: There
> are errors computed every time you solve one delta time (AbsTol,
> RelTol). The solver tries to increase the dt automatically every
> time one time step was solved successfully (ie. computed error <
> AbsTol and/or RelTol). Let's say we had dt_old = 1 and the solver
> thinks dt_new = 2. If you set MaxStep = 1.5 then the user decreases
> dt to 1.5 and takes control over the solver's estimation.
>
> *If* ode45 is the right choice for your problem (because of
> stiffness) then not necessarily InitialStep and MaxStep have the
> same values. It depends once again what kind of system you have -
> might there be stability problems in your ODE system right at the
> beginning of solving (make InitialStep smaller) or somewhere in
> the middle or the end (make MaxStep smaller).
>
> Best regards
>
> Thomas
Dear Thomas,
Thanks for your reply. I have read it, but I need to read it over to
try to digest all that you've written.
As a point of interest, before I had received your reply, I reduced
'InitialStep' and 'MaxStep' further to 1e-6. Octave tried for 48
hours to solve the system until I reluctantly stopped it (CTRL-C).
During that time I couldn't do anything else on my computer:
selecting another window or typing became very, very, very slow as to
be practically impossible. Actually, I wanted to suspend the
computation temporarily, but found that CTRL-Z did not seem to work,
so I resorted to CTRL-C. Now I can again do other things (like read
my email).
Anyhow, enough of my woeful tale. Thanks again for your help.
---John.
More information about the Help-octave
mailing list