2015-09-16 1 views
0

Рассмотрим функцию f из двух аргументов x и a. Сначала я беру интеграцию f относительно x, которая становится функцией g от a. Во-вторых, я хочу найти корень полученной функции g из a. Могу ли я сделать это, используя uniroot и integrate в R? Если да, то как? Если нет, есть ли способ сделать это вообще? Благодарю.uniroot в R при наличии двух неизвестных

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, ...) 

ответ

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 
Смежные вопросы