我试图找到两个方程的x(代码中的X 1和y(代码中的X [2])的根,如下所示
我在R包rootSolve中使用函数multiroot:
m<-0.01
r<- 0.5
c<- 0.01006885
eq.sol<-function(x,para)
{
m<-para[1]
r<-para[2]
c<-para[3]
inteq1<-function(b)
{
x[1]*exp(-x[1]*b)/(b+x[2])
}
inteq2<-function(b)
{
x[1]*exp(-x[1]*b)/(b+x[2])^2
}
F1<-integrate(inteq1, 0, Inf)$value-m*c*(1-r)/(c+m*r)
F2<-integrate(inteq2, 0, Inf)$value-m^2*c*(1-r)^2/(c+m*r)
c(F1=F1, F2=F2)
}
find.para<-multiroot(eq.sol, start = c(0.05,1), para = c(m, r, c), positive = TRUE)
其中m,r和c是常数。两个变量预计是积极的。但是,它会返回以下错误:
diagonal element is zero
[1] 2
Warning messages:
1: In stode(y, times, func, parms = parms, ...) :
error during factorisation of matrix (dgefa); singular matrix
2: In stode(y, times, func, parms = parms, ...) : steady-state not reached
更新
感谢Lyngbakr的解决方案。在这种情况下,似乎需要一个很好的初始猜测。但是,如果将此函数插入另一个函数并从某个分布中随机抽取c,比如U(0.005,0.05),我就无法使其适用于所有c的样本。有什么建议吗?
答案 0 :(得分:1)
尝试不同的初步猜测。例如,
find.para<-multiroot(eq.sol, start = c(1e-3, 1e-3), parms = c(phi, r, c), positive = TRUE)
给出,
$root
[1] 0.002437481 98.082693040
$f.root
F1 F2
-2.844821e-09 -5.135857e-12
$iter
[1] 21
$estim.precis
[1] 1.424978e-09