Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用R求极小值(1个变量X,n乘以一个固定参数U)_R_Loops_For Loop_Optimization_Minimum - Fatal编程技术网

用R求极小值(1个变量X,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 <

我试图最小化函数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)
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))