TransWikia.com

'The number of derivatives returned by func() (2) must equal the length of the initial conditions vector (4)' em R

Stack Overflow em Português Asked by Rafaela on September 27, 2021

Estou usando ode, do pacote deSolve para resolver um sistema de EDOs em R, mas recebo o erro:

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

Meu vetor de retorno tem tamanho 4, como a condição inicial, então não sei qual o problema.

monod = function(t, c, parametros){
  
  # Parametros
  um = parametros$um 
  Ks = parametros$ks 
  Yx = parametros$Yx 
  Yp = parametros$Yp 
  up = parametros$up 
  Kp = parametros$Kp 
  
  # Concentração das espécies
  X = c["X"]
  P = c["P"]
  S = c["S"]
  V = c["V"]
  
  # derivadas d/dt 
  dX = um*S*X/(S+Ks)-(0.7/V)*X                 #dS/dt
  dP = up*S*X/(S+Kp)-(0.7/V)*P                 #dE/dt
  dS = -(1/Yx)*dX-(1/Yp)*dP-(0.7/V)*(S-30)     #dC/dt
  dV = 0.7                                     #dV/dt
  
  return( list( c(dX, dP, dS, dV) ) )
}

#Teste de saída
c_inicial = c(X = 1.7, P = 0, S = 40, V = 1)

# tempo
t     = seq(0, 96, by = 1)

# Parametros
parametros = list(um = 0.1, Ks = 0.18, Yx = 0.25, Yp = 0.68, up = 0.05, Kp = 0.0002)

# solver (método pardrão lsoda)
out = ode(y = c_inicial, times = t, func = monod, parms = parametros)
head(out)

Se alguém puder me ajudar, agradeço!

One Answer

Acho que o problema é como você define os valores iniciais e paramêtros dentro da função do modelo. Olhando a documentação do pacote deSolve e seguindo as orientações de como construir o modelo com a função with(), vai funcionar:

library(deSolve)

monod = function(t, c, parametros){
    with(as.list( c(c, parametros)), {

        # derivadas d/dt 
        dX = um*S*X/(S+Ks)-(0.7/V)*X                 #dS/dt
        dP = up*S*X/(S+Kp)-(0.7/V)*P                 #dE/dt
        dS = -(1/Yx)*dX-(1/Yp)*dP-(0.7/V)*(S-30)     #dC/dt
        dV = 0.7                                     #dV/dt
        
        return( list( c(dX, dP, dS, dV) ) )
    })
}

#Teste de saída
c_inicial = c(X = 1.7, P = 0, S = 40, V = 1)

# tempo
t     = seq(0, 96, by = 1)

# Parametros
parametros = list(um = 0.1, Ks = 0.18, Yx = 0.25, Yp = 0.68, up = 0.05, Kp = 0.0002)

# solver (método pardrão lsoda)
out = ode(y = c_inicial, times = t, func = monod, parms = parametros)
head(out)

Correct answer by Willian Vieira on September 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP