R 求方程组的根

R 求方程组的根,r,equation,nonlinear-functions,R,Equation,Nonlinear Functions,我想在rootSolve包中使用multiroot命令来查找b和m。 代码如下所示。 我尝试了不同的起始值,但结果要么是NaN,要么是NaNs生成的 n <- 23 model <- function(theta){ b <- theta[1] m <- theta[2] power <- exp(-(x-m)*b) a <- -n/sum(log(1-power)) betat <- apply(x,1,function(x)

我想在
rootSolve
包中使用
multiroot
命令来查找b和m。 代码如下所示。 我尝试了不同的起始值,但结果要么是
NaN
,要么是
NaNs生成的

n <- 23
model <- function(theta){  
  b <- theta[1]
  m <- theta[2] 
  power <- exp(-(x-m)*b)
  a <- -n/sum(log(1-power))
  betat <- apply(x,1,function(x) (x-m)*power/(1-power))
  mut <- apply(x,1, function(x) power/(1-power))
  F1 <- n/b-sum(x)+n*m+(a-1)*sum(betat)
  F2 <- n*b-b*(a-1)*sum(mut)
  c(F1=F1,F2=F2)
}
multiroot(f = model, start = c(.5, .5))

n您确定有解决方案吗?除此之外,非线性问题一般都很难解决。关于起始值、收敛标准,它们可能非常合理……我添加了系统和报告的解决方案出版物中存在错误?如果我假设报告的值未知。我怎样才能正确地解方程组呢?有几个第一印象:1$u$应具有下标$i$,基于公式中的$x_i$。这意味着,如果将
x
作为向量而不是矩阵,则不希望申请计算
betat
mut
。2.当$u$接近1时,您将遇到数值稳定性问题。相当于$x-m$或$b$接近0。你能重写方程来解决这个问题吗?我认为log sum exp技巧在这里可能有用?你确定有解决方案吗?除此之外,非线性问题一般都很难解决。关于起始值、收敛标准,它们可能非常合理……我添加了系统和报告的解决方案出版物中存在错误?如果我假设报告的值未知。我怎样才能正确地解方程组呢?有几个第一印象:1$u$应具有下标$i$,基于公式中的$x_i$。这意味着,如果将
x
作为向量而不是矩阵,则不希望申请计算
betat
mut
。2.当$u$接近1时,您将遇到数值稳定性问题。相当于$x-m$或$b$接近0。你能重写方程来解决这个问题吗?我认为log sum exp技巧在这里可能有用?谢谢。但仍然存在一个问题。起始值的微小变化给了NaN。实际上,我检查了这个结果,并将它们与原始论文进行了比较。这个结果比那些好。但是起始值确实是一个大问题。如果没有其他帮助的话,你必须在网格中搜索起始值。谢谢。但仍然存在一个问题。起始值的微小变化给了NaN。实际上,我检查了这个结果,并将它们与原始论文进行了比较。这个结果比那些好。但是起始值确实是一个大问题。如果没有其他帮助的话,就必须对起始值进行网格搜索。
library(rootSolve)
x<- c(17.88,28.92,33,41.52,42.12,45.6,48.40,51.84,51.96,54.12,55.56,67.80,
  68.64,68.64,68.88,84.12,93.12, 98.64,105.12,105.84,127.92,128.04,173.4)
n <- length(x)

model <- function(theta){  
  b <- theta[1]
  m <- theta[2] 
  power <- exp(-(x-m)*b)
  a <- -n/sum(log(1-power))
  F1 <- n/b-sum(x-m) + (a-1)*sum((x-m)*power/(1-power))
  F2 <- n*b - b*(a-1)*sum(power/(1-power))
  c(F1=F1,F2=F2)
}
# model(c(b = 0.031, m = 4.748))
multiroot(f = model, start = c(.03, 5))
> multiroot(f = model, start = c(.03, 5))
$root
[1] 0.03140027 4.55976021

$f.root
           F1            F2 
-2.046363e-12 -6.217249e-15 

$iter
[1] 5

$estim.precis
[1] 1.02629e-12