help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 'InitialStep' and 'MaxStep' in ode45


From: John B. Thoo
Subject: Re: 'InitialStep' and 'MaxStep' in ode45
Date: Mon, 27 Jul 2009 09:04:39 -0700


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.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]