Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化ODE并重新计算R中的初始值_R_Optimization_Ode - Fatal编程技术网

优化ODE并重新计算R中的初始值

优化ODE并重新计算R中的初始值,r,optimization,ode,R,Optimization,Ode,我想知道是否可以在以下问题中提供一些输入:在使用modCost和modFit获得结果之后,我尝试为我的函数返回一个最佳值 所以本质上我试着做的是玩弄一个基本的预测,优化以得到一个我认为有效的拟合。但我也希望'yi'参数作为Modfit函数中的一个参数 是否有一个特定的功能,我可以使用,也许或解决办法?如有任何帮助/建议,将不胜感激 为糟糕的代码、第一篇文章等道歉: 仅调整以下代码行似乎有效: ## model cost function, see help file and vignette f

我想知道是否可以在以下问题中提供一些输入:在使用modCost和modFit获得结果之后,我尝试为我的函数返回一个最佳值

所以本质上我试着做的是玩弄一个基本的预测,优化以得到一个我认为有效的拟合。但我也希望'yi'参数作为Modfit函数中的一个参数

是否有一个特定的功能,我可以使用,也许或解决办法?如有任何帮助/建议,将不胜感激

为糟糕的代码、第一篇文章等道歉:


仅调整以下代码行似乎有效:

## model cost function, see help file and vignette for details 
modelCost <- function(p) { 
  out <- ode(y = p["Y"], func = derivs, parms = p["a"], times = yobs$time) 
  return(modCost(out, yobs)) 
} 

## start values for the parameters 
startpars <- c(Y = 6, a = 0.1) 
注意,微分方程有一个解析解:y=yi*expa*time-time_0。因此,更简单的方法是使用optim将其直接拟合到数据中:

与另一种方法非常接近

现在,使用microbenchmark将两者进行比较,我们得到以下结果:

Unit: milliseconds
                                 expr      min       lq     mean  median       uq      max neval
 modFit(f = modelCost, p = startpars) 36.22868 37.52432 40.68432 38.3405 40.02509 85.91644   100

Unit: milliseconds
                                 expr      min       lq     mean   median       uq      max neval
 optim(par = startpars, fn = ls_cost) 1.927786 1.980567 2.082507 2.010147 2.094988 5.522633   100

因此,后一种方法要快一个数量级。

Hi。我觉得你的Q有点不清楚。您的意思是希望function modelCost或modFit返回PAR或PARM或startpars?您使用的ode和modFit软件包是什么?您好,Stephen,谢谢您的回复,并对我的不清晰表示歉意。我希望'yi'参数作为参数包含在Modfit函数中。@P.Galanis这是实际问题还是只是一个示例?我问,因为有一个分析解决方案可以很容易地适应数据,同时实现您的目标。@Lyngbakr您好,这几乎就是问题所在-向量和名称会更长,但不会真正影响事情。如果您有什么想法,欢迎提出建议。@P.Galanis下面有两个解决方案。非常感谢@Lyngbakr这非常有帮助!我按照您的指示得到了结果,但在modCostout中的ModFit错误之后,我也得到了一个错误,yobs:在模型输出中未找到观测变量Y,您看到了相同的吗?@P.Galanis不,我没有得到那个错误。如果我复制并粘贴您的代码,然后用我的代码替换相应的行,它对我来说运行良好。非常感谢,非常感谢!谢谢
#$par
#         Y          a 
#5.81276026 0.09872004 
# My cost function
ls_cost <- function(p){
  sum((p["Y"] * exp(p["a"] * (yobs$time - min(yobs$time))) - yobs$Y)^2)
}

# Optimise for initial condition and 'a'
optim(par = startpars, fn = ls_cost)
#$par
#         Y          a 
#5.81256899 0.09872287 
Unit: milliseconds
                                 expr      min       lq     mean  median       uq      max neval
 modFit(f = modelCost, p = startpars) 36.22868 37.52432 40.68432 38.3405 40.02509 85.91644   100

Unit: milliseconds
                                 expr      min       lq     mean   median       uq      max neval
 optim(par = startpars, fn = ls_cost) 1.927786 1.980567 2.082507 2.010147 2.094988 5.522633   100