用R

时间:2017-11-07 15:04:25

标签: r

我试图找到两个方程的x(代码中的X 1和y(代码中的X [2])的根,如下所示

Integral Equations

我在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的样本。有什么建议吗?

1 个答案:

答案 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