2016-05-26 24 views
1

Ich bin ziemlich neu mit R und ich versuche, ein System von Differentialgleichungen mit de deSolve-Paket zu lösen.R-Paket deSolve: Fehler in checkFunc

Ich habe insgesamt 10000 Zeitschritte und alle 100 Zeitschritte muss ich die Werte der Variablen ändern. Der Code habe ich versucht, gibt mir folgende Fehlermeldung:

Error in checkFunc(Func2, times, y, rho) : 
    The number of derivatives returned by func() (2) must equal the length of the initial conditions vector (3) 

Ich bin nicht ganz sicher, wo der Fehler herkommt. Hier ist mein Code so weit:

library(deSolve) 

#--------variables and parameter-------------------------- 


parameters <- c(up = 0.0001, hm = 0.1, hp = 0,889, mm = 0.1 , nt = 100) 
yini <- c(u = 1, m = 0.001, h = 0.001) 
times <- seq(0,100, by=0.1) 
out<- NULL 

#--------functions--------------------------------------- 
DiffU <- function(t, yini, parameters){ 
    with(as.list(c(yini, parameters)),{ 

    #functions 
    du <- -(up*u) + hm*h + (1/2*nt)*h 
    dm <- hp*h - mm*m - (1/nt)*m 

    # return functions 
    list(c(du, dm)) 
    }) 
} 

#--------------------------------------------- 
repeat{ 
    out<- rbind(out, ode(yini, times, DiffU, parameters)) 
    yini<-c(u = u+0.5*h, m = 0.001, h = m+0.5*h) 
    x<- x+1 
    if (x==100){ 
    break 
    } 
} 

Haben Sie irgendwelche Vorschläge des Fehlers, um loszuwerden, oder den Code zu verbessern? Vielen Dank!

Antwort

0

Ihr Problem ist, dass Sie zwei Ableitungen 'du' und 'dm' haben, aber drei Werte für yini ('u', 'm' und 'h'). Dies verursacht den Fehler.

Eine Lösung ist (1) füge eine dritte Ableitung hinzu oder (2) entferne 'h' von yini und füge es den Parametern hinzu.