ODE IV Control and Variable Scale

Tuomo Keskitalo Tuomo.Keskitalo@iki.fi
Mon Mar 22 17:26:00 GMT 2010


Hi,

sorry, I did not understand your case correctly the first time. I often 
want to make sure that (fast) changes in variable values are followed 
precisely (my problems tend to be stiff) and therefore use eps_rel 
dominantly. You are right that eps_rel may well be 0. Depends on your 
problem.

On 03/22/2010 04:48 PM, Kevin H. Hobbs wrote:

> On 03/20/2010 03:18 PM, Tuomo Keskitalo wrote:
>> Hi,
>>
>> about ODE solver error tolerances: you _never_ want to set eps_rel to
>> zero. It would mean that you allow no error for the ODE solver, which is
>> something no numerical method can give you.
> 
> The ODE example program sets eps_rel to 0.0.
> 
>> As an example: gsl_odeiv_control_y_new (1e-12, 1e-8) means that if the
>> absolute value of a variable drops below 1e-12, you don't really care of
>> it's value any more (it is essentially zero for you). 
> 
> Right now I'm setting eps_abs to something like 1.0e-3.
> 
> As far as I can tell from the documentation there's nothing special
> about a variable value of 0.0 when eps_rel is 0.0. 1.0e-3 is the same as
> 0.0 and 100 + 1.0e-3 is the same as 100.
> 
> I want a constant error across the range of the variables.
> 
> eps_rel = 1e-8
>> means that you want at least 7 decimals of each variable to be accurate
>> on each ODE solver step. If you need to control the level of error with
>> more detail, then you can use a_y, a_dydt and scale_abs.
> 
> The trouble I have with these parameters is they depend on 0.0 being a
> special value, but in my model there is nothing special about 0.0 for
> most of the variables.
> 
> Voltage is the major example. Membrane voltage ranges from the reversal
> potential for potassium E_K = -80 mV to the reversal potential of sodium
> E_Na = 50 mV. The values of membrane voltage where the various membrane
> currents turn on and off are the critical values, but there are many of
> them and they are spread across the voltage range.
> 
>> A practical way to choose tolerances is to make a test and compare
>> results calculated with "strict" and "loose" eps_abs and eps_rel (order
>> of magnitude difference between strict and loose). If you get nearly
>> same values as result, you are probably safe to use your loose
>> tolerances. Of course, this depends on your problem, so be sure to test
>> it with your final computation case again.
> 
> We have a whole graduate student devoted to this testing right now.
> 
>> If you are not interested in optimizing the performance, I'd suggest you
>> simply try to use control_y_new and see how it works for you.
>>
> 
> We are very much interested in performance since we're trying to
> evaluate millions of models per day.
> 
> It appears that by using gsl_odeiv_control_scaled_new with scales
> proportional to the range of each variable, eps_rel = 0.0, a_y = 0.0,
> and a_dydt = 0.0 we can relax eps_abs and evaluate more models with
> greater accuracy.
> 


-- 
Tuomo.Keskitalo@iki.fi
http://iki.fi/tuomo.keskitalo



More information about the Gsl-discuss mailing list