优化在R。

优化在R。,r,optimization,R,Optimization,所以我有一个函数w.r.t$x$,它实际上是一个积分,它的值是w.r.t$t$。所以我做了一个嵌套函数,但一旦我尝试优化它,我就会得到一个恼人的错误 我相信这是因为积分需要假设$x>5/2$才能计算。如何假设R中的参数?以下是我的代码和错误: g = function(x){ f = function(t) {exp(-((x*t)^3))^(1/3)*(1-(1-exp(-((10*x/(2*x-5))*t)^(1/3)))^2)} R = integrate(f,0,Inf) } g

所以我有一个函数w.r.t$x$,它实际上是一个积分,它的值是w.r.t$t$。所以我做了一个嵌套函数,但一旦我尝试优化它,我就会得到一个恼人的错误

我相信这是因为积分需要假设$x>5/2$才能计算。如何假设R中的参数?以下是我的代码和错误:

g = function(x){
  f = function(t) {exp(-((x*t)^3))^(1/3)*(1-(1-exp(-((10*x/(2*x-5))*t)^(1/3)))^2)}
  R = integrate(f,0,Inf)
}
g=Vectorize(g)

optimize(g, c(0.1, 10), tol = 0.0001)
错误:

Error in optimize(g, c(0.1, 10), tol = 1e-04) : 
  invalid function value in 'optimize'
用Maple做这件事要容易得多。只要[integral]假设$x>5/2$,我得到的答案是$x=5.258565455$,这是正确的

非常感谢您的帮助。

R中的
integrate()
函数提供了元素列表。逻辑上,您只需要整数的值,即

g <- function (x) {
    f <- function (t) exp(-((x*t)^3))^(1/3)*(1-(1-exp(-((10*x/(2*x-5))*t)^(1/3)))^2)
    integrate(f, 0, Inf)$value
}

optimize(g, c(0.1, 10), tol = 0.0001)

g同样,我认为没有必要矢量化你说的
x
需要大于5/2,但是你的初始范围是
c(0.1,10)
,因此
optimize
可能会尝试在
x=0.1
计算积分。除了下面答案中的建议之外,最好将初始范围设置为
c(5/2+0.00001,10)