当有两个未知数时,在R中uniroot

时间:2015-09-16 05:52:30

标签: r integration equation

考虑两个参数fx的函数a。首先,我将fx进行整合,后者成为g的函数a。其次,我想找到g的结果函数a的根。我可以使用uniroot中的integrateR执行此操作吗?如果是这样,怎么样?如果没有,有没有办法做到这一点?感谢。

b <- 2

truncfn <- function(x) pmin(b, pmax(x, -b))

# thetashape and thetascale are constants
# x and a are arguments
f <- function(x, thetashape, thetascale, a){
  term1 <- -1/thetascale
  term2 <- (1-thetashape)/thetascale
  term3 <- x/(thetascale-thetashape*x)
  term1 + term2*term3 - a
}

# First, integrate f with respect to x
g <- integrate(truncfn(f), lower=0, upper=Inf)

# Second, find root of g
uniroot(g, ...)

1 个答案:

答案 0 :(得分:2)

您可以定义一个函数(我称之为truncfn2),对调用truncfn的结果调用f,然后g整合truncfn2 }。最后uniroot搜索g的根

b <- 2
truncfn <- function(x) pmin(b, pmax(x, -b))

# thetashape and thetascale are constants
# x and a are arguments
f <- function(x, thetashape, thetascale, a){
  term1 <- -1/thetascale
  term2 <- (1-thetashape)/thetascale
  term3 <- x/(thetascale-thetashape*x)
  term1 + term2*term3 - a
}
truncfn2 <- function(x, thetashape, thetascale, a) truncfn(f(x, thetashape, thetascale, a))

g <- function(a) integrate(truncfn2, thetascale=1, thetashape=0.6, a=a, lower=0, upper=10)$value
uniroot(g, lower=-10, upper=10)
# $root
# [1] -1.867932
# 
# $f.root
# [1] 1.134733e-07
# 
# $iter
# [1] 7
# 
# $init.it
# [1] NA
# 
# $estim.prec
# [1] 6.103516e-05