Excel R 中的求解器 - 最小化函数
Excel Solver in R - Minimizing a function
我有一个(对我来说)非常复杂的问题。我有两个向量:
vectora <- c(111, 245, 379, 516, 671)
vectorb <- c(38, 54, 62, 67, 108)
此外我还有两个变量
x = 80
y = 0.8
第三个向量基于变量 x 和 y,方法如下:
vectorc <- vectora^y/(1+(vectora^y-1)/x)
目标是通过改变x和y来最小化vectorb和vectorc的偏差。偏差由以下函数定义:
deviation <- (abs(vectorb[1]-vectorc[1])) + (abs(vectorb[2]-vectorc[2])) + (abs(vectorb[3]-vectorc[3])) + (abs(vectorb[4]-vectorc[4])) + (abs(vectorb[5]-vectorc[5]))
我如何在 R 中执行此操作?
您可以使用optim
程序!
这是它的工作原理:
vectora <- c(111, 245, 379, 516, 671)
vectorb <- c(38, 54, 62, 67, 108)
fn <- function(v) {
x = v[1]
y = v[2]
vectorc <- vectora^y/(1+(vectora^y-1)/x);
return <- sum(abs(vectorb - vectorc))
}
optim(c(80, 0.8), fn)
其输出为:
$par
[1] 91.4452617 0.8840952
$value
[1] 37.2487
$counts
function gradient
151 NA
$convergence
[1] 0
$message
NULL
我有一个(对我来说)非常复杂的问题。我有两个向量:
vectora <- c(111, 245, 379, 516, 671)
vectorb <- c(38, 54, 62, 67, 108)
此外我还有两个变量
x = 80
y = 0.8
第三个向量基于变量 x 和 y,方法如下:
vectorc <- vectora^y/(1+(vectora^y-1)/x)
目标是通过改变x和y来最小化vectorb和vectorc的偏差。偏差由以下函数定义:
deviation <- (abs(vectorb[1]-vectorc[1])) + (abs(vectorb[2]-vectorc[2])) + (abs(vectorb[3]-vectorc[3])) + (abs(vectorb[4]-vectorc[4])) + (abs(vectorb[5]-vectorc[5]))
我如何在 R 中执行此操作?
您可以使用optim
程序!
这是它的工作原理:
vectora <- c(111, 245, 379, 516, 671)
vectorb <- c(38, 54, 62, 67, 108)
fn <- function(v) {
x = v[1]
y = v[2]
vectorc <- vectora^y/(1+(vectora^y-1)/x);
return <- sum(abs(vectorb - vectorc))
}
optim(c(80, 0.8), fn)
其输出为:
$par
[1] 91.4452617 0.8840952
$value
[1] 37.2487
$counts
function gradient
151 NA
$convergence
[1] 0
$message
NULL