【问题标题】:GRG Non-Linear Least Squares (Optimization)GRG 非线性最小二乘法(优化)
【发布时间】:2017-12-22 13:45:41
【问题描述】:

我正在尝试转换包含求解器函数的 Excel 电子表格,使用 GRG Non-Linear 优化返回最小平方误差和的 2 个变量。我在 4 个已知距离 (A) 处有 4 个已知时间 (B)。我需要创建一个优化函数来找出 Vmax 和 Tau 值的交互产生最小的平方误差和。我查看了 nls 函数和 nloptr 包,但似乎无法将它们拼凑在一起。 Vmax 和 Tau 的当前值是通过 excel 求解器函数确定的,只需要在 R 中复制。任何和所有帮助将不胜感激。谢谢你。

A <- c(0,10, 20, 40)
B <- c(0,1.51, 2.51, 4.32)

Measured <- as.data.frame(cbind(A, B))

Corrected <- Measured
Corrected$B <- Corrected$B + .2
colnames(Corrected) <- c("Distance (yds)", "Time (s)")
Corrected$`X (m)` <- Corrected$`Distance (yds)`*.9144

Vmax = 10.460615006988 
Tau = 1.03682513806393 

Predicted_X <- c(Vmax * (Corrected$`Time (s)`[1] - Tau + Tau*exp(-Corrected$`Time (s)`[1]/Tau)),
Vmax * (Corrected$`Time (s)`[2] - Tau + Tau*exp(-Corrected$`Time (s)`[2]/Tau)),
Vmax * (Corrected$`Time (s)`[3] - Tau + Tau*exp(-Corrected$`Time (s)`[3]/Tau)),
Vmax * (Corrected$`Time (s)`[4] - Tau + Tau*exp(-Corrected$`Time (s)`[4]/Tau)))

Corrected$`Predicted X (m)` <- Predicted_X
Corrected$`Squared Error` <- (Corrected$`X (m)`-Corrected$`Predicted X (m)`)^2

#Sum_Squared_Error <- sum(Corrected$`Squared Error`)

【问题讨论】:

    标签: r


    【解决方案1】:

    您的问题还没有解决吗? 我正在解决类似的问题,我想我可以提供帮助。

    首先,您必须定义一个函数,该函数将作为误差之和,用于变量 Vmax 和 Tau。 然后你可以调用一个优化算法来改变这些变量并寻找你的函数的最小值。 optim() 对于您的应用程序可能已经足够了,但这里是 nloptr 的文档:

    https://www.rdocumentation.org/packages/nloptr/versions/1.0.4/topics/nloptr

    这里是 R 中的优化包列表:

    https://cran.r-project.org/web/views/Optimization.html

    编辑:

    我很快重新编码了我会做的方式。我是初学者,所以这可能不是最好的方法,但它仍然有效。

    A <- c(0,10, 20, 40)
    B <- c(0,1.51, 2.51, 4.32)
    
    Measured <- as.data.frame(cbind(A, B))
    
    Corrected <- Measured
    Corrected$B <- Corrected$B + .2
    colnames(Corrected) <- c("Distance (yds)", "Time (s)")
    Corrected$`X (m)` <- Corrected$`Distance (yds)`*.9144
    
    #initialize values
    Vmax0 = 15
    Tau0 = 5
    
    x0 = c(Vmax0,Tau0)
    
    #define function to optimise: optim will minimize the output
    f <- function(x) {
    
    y=0
    #variables will be optimise to find the minimum value of f
    Vmax = x[1]
    Tau = x[2]
    
    Predicted_X <- Vmax * (Corrected$`Time (s)` - Tau + Tau*exp(-Corrected$`Time (s)`/Tau))
    
    y = sum((Predicted_X - Corrected$`X (m)`)^2)
    
    return(y)
    
    }
    
    #call optim: results will be available in variable Y
    Y<-optim(x0,f)
    

    如果你在控制台输入Y,你会发现求解器找到的值和Excel一样,达到收敛。

    在 R 中,无需像您那样使用括号定义数据框中的列,而是使用向量。您可能应该先学习有关此的教程。

    另外,您将初始值设置为已经是最佳值的值也是一种误导。如果你这样做,那么 optim() 将不会进一步优化。

    这是 optim 的文档:

    https://stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html

    以及如何使用函数的教程:

    https://www.datacamp.com/community/tutorials/functions-in-r-a-tutorial

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2013-06-12
      相关资源
      最近更新 更多