[R] lsoda warning "too much accuracy requested"

Thomas Petzoldt thpe at simecol.de
Fri Nov 21 17:56:52 CET 2008


Hi Colleen,

this error was not uncommon and is usually a sign of a numerically 
problematic or wrongly implemented model. Please use package deSolve, 
the successor of odesolve, that is more robust and has also a bunch 
alternative solvers for difficult cases.

I tested your code with deSolve (on R 2.8.0, Windows) and it runs 
without problems.

Thomas Petzoldt


BTW: your system worked also with odesolve, so my question: which 
versions (R, odesolve) and operating system are you using?

Colleen Carlson wrote:
> Dear list -
> 
>  
> 
> Does anyone have any ideas / comments about why I am receiving the following
> warning when I run lsoda:
> 
>  
> 
> 1:  lsoda--  at t (=r1), too much accuracy requested in: lsoda(start, times,
> model, parms) 
> 
> 2:       for precision of machine..  see tolsf (=r2) in: lsoda(start, times,
> model, parms)
> 
>  
> 
> I have tried changing both rtol and atol but without success.  I saw the
> thread in the R-archive of 11 June 2004 but this has not helped me.
> 
>  
> 
> I have built the model in stages and the problem only occurs when the
> exponent beta in the third DE is anything other than 0 or 1.  If beta = 0 or
> 1 then the solver gives me perfectly justifiable results.  Just changing
> beta to 0.9 or similar causes the problem.
> 
>  
> 
> I am still new to R so I am unsure if it is my programming or my
> understanding of the way lsoda works.
> 
>  
> 
> Any comments or input would be welcome.
> 
> Many thanks
> 
> Colleen
> 
> ___________
> 
>  
> 
> My code is:
> 
>  
> 
> library(odesolve)
> 
> SI <- 80
> 
> model <- function(t, x, parms) {
> 
>             H  <- x[1]
> 
>             BA <- x[2]
> 
>             N  <- x[3]
> 
> with(as.list(parms), {
> 
>             dHdt <- (b/c)*(((a**c)*((H)**(1-c))-H))
> 
>             dBAdt <- -(BA*b)*(c0+(c1*SI)-log(BA))/(log(1-((H/a)**c)))
> 
>             dNdt <-  N*alpha*(((log(1-((H/a)**c)))/b)**beta) - (gamma*BA)
> 
>             list(c(dHdt, dBAdt, dNdt))
> 
>             })
> 
>             }
> 
> times <- seq(0, 40, 1)
> 
>  
> 
> parms <- c(a=(SI*1.258621)-1.32759, b=0.1, c=0.4, c0=4.6012, c1=0.013597,
> alpha=0.0005, beta=0.5,  gamma=0.01)
> 
> start <- c(H=0.1, BA=0.1, N=600)
> 
>  
> 
> out <- as.data.frame(lsoda(start, times, model, parms))
> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.


-- 
Thomas Petzoldt
Technische Universitaet Dresden
Institut fuer Hydrobiologie        thomas.petzoldt at tu-dresden.de
01062 Dresden                      http://tu-dresden.de/hydrobiologie/
GERMANY



More information about the R-help mailing list