若要在输入为向量时最小化输出,您可以使用optim。
myFunction = function(input1, input2, input3) sum(abs(input1 - 3))
o = optim(7:10, myFunction, input2=5, input3=6)
o$par
# [1] 2.999989 2.999995 3.000000 3.000001
optim(在我的示例中为7:10)的第一个参数是input1 的起始值(猜测从哪里开始优化)。第二个是函数,然后可以传入固定参数(如input2和input3)。
在这个例子中,最小值变成了一个只有 3s 的向量(因为这最小化了sum(abs(input1 - 3)))。
如果您只执行一维最小化,您将使用optimize 函数,并在传递函数后将其他输入传递给它:
myFunction = function(input1, input2, input3) {
return(abs(input1 - 3) + input2 + input3)
}
o = optimize(myFunction, 2, 3, interval=c(-100, 100))
print(o$minimum)
# [1] 3.000003
如果您想根据input2 或input3(不是函数的第一个参数)最小化,您可以将其他参数作为命名参数:
myFunction = function(input1, input2, input3) {
return(abs(input1 - 3) + abs(input2 - 12) + input3)
}
print(optimize(myFunction, input1=2, input3=3, interval=c(-100, 100)))
print(o$minimum)
[1] 11.99998
如果您想知道为什么会这样,那是因为 optimize 被定义为:
function (f, interval, ..., lower = min(interval), upper = max(interval),
maximum = FALSE, tol = .Machine$double.eps^0.25)
... 允许使用任意数量的附加参数,然后将其传递给 myFunction。