【发布时间】:2016-03-02 12:29:31
【问题描述】:
我正在尝试最小化函数 f(X,U) = (X*log(X)-1/(1-U))^2 其中 U=(U_1,...,U_n) ~ U(0,1),这意味着我有 n 个固定 U 并且想要找到以下的最小值:
(x_1*ln(x_1)-1/(1-u_1))^2
(x_2*ln(x_2)-1/(1-u_2))^2
......
(x_n*ln(x_n)-1/(1-u_n))^2
为此,我想使用 optim 函数。
我已经定义了:
n <- 10^3
U <- sort(runif(n,min=0,max=1))
X <- c()
Xsolution<- c()
f <- function(X,U){
return(-(X*log(X)-(1/(1-U)))^2)
} #-, because min(f) = max(-f)
现在我不知道如何用 optim() 做到这一点?对于以下代码,我总是收到以下错误:
for(i in 1:n){
Xsolution[i] <- optim(f(X,U[i])
}
log(X) 中的错误:数学函数的非数字参数
旁注:我会欢迎没有 for 循环的方法,因为对于伟大的 n,它会花费太长时间。也许你可以帮我让它与 sapply 一起工作?还是另一种方式?
另外,我认为我可以使用 optimize(...,maximize=FALSE,..):
f <- function (X, a) ((X*log(X)-(1/(1-a)))^2)
for (i in 1:n){
xmin[i] <- optimize(f, c(0, 10000), tol = 0.0001, a = U[i])
}
这也不能正常工作...
另外,问题可能是它需要太长时间。我想用 n=10^6 来做。但是我很确定必须有一种方法可以在没有for循环的情况下做到这一点?我认为 for 循环是导致这需要很长时间的问题。请帮帮我,我一直在这个问题上坐了很久,这很令人沮丧。
【问题讨论】:
-
没错,xmin 的所有条目都是相等的。我该如何解决这个问题?
-
问题出在哪里?我有一个向量 U = (u1,...un) ,其中 u 是固定的,我想要方程 x1*log(x1) - 1/(1-u1) 的解,这适用于 U 中的所有 u_i。
标签: r loops for-loop optimization minimum