用R求极小值(1个变量X,n乘以一个固定参数U)
我试图最小化函数f(X,U)=(X*log(X)-1/(1-U))^2 式中,U=(U_1,…,U_n)~U(0,1),这意味着我有n个固定U的数量,并希望找到以下的最小值:用R求极小值(1个变量X,n乘以一个固定参数U),r,loops,for-loop,optimization,minimum,R,Loops,For Loop,Optimization,Minimum,我试图最小化函数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 <
(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)
n由于X*log(X)=1/(1-U[i])
可以对任何U[i]
进行数值求解,因此每个不同的U[i]
都有一个解,因此任何(X*ln(X)-1/(1-U[i])^2都可以被驱动为零,因此每个不同的U[i]都有一个解。如果通常U[i]都是不同的,这意味着存在长度(U)解。解决方案如下所示(如果U[i]都是不同的,则可以省略唯一性):
f True,xmin的所有条目都相等。我怎样才能解决这个问题?问题出在哪里?我有一个向量U=(u1,…un),其中U是固定的,我想要方程x1*log(x1)-1/(1-u1)的解,这是所有U_I in U的解。谢谢!我也用for循环解决了这个问题:xmin我认为优化需要时间,无论是使用sapply
还是for
都不会有太大区别。我做了一些测试:for循环10^6个数据需要22到26分钟,上面相同的函数和sapply需要4到8分钟如果预先分配结果向量,而不是以增量方式扩展它,循环将运行得更快。
for(i in 1:n){
Xsolution[i] <- optim(f(X,U[i])
}
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])
}
f <- function (X, a) ((X*log(X)-(1/(1-a)))^2)
unique(sapply(U, function(a) optimize(f, c(0, 1000000), a = a)$minimum))