gpt4 book ai didi

r - 如何在R中的一个输入参数上最小化一个函数

转载 作者:行者123 更新时间:2023-12-04 03:58:36 25 4
gpt4 key购买 nike

假设我有一个定义如下的函数

myFunction = function(input1, input2, input3) {
# do something with input and then return
}

现在,我想仅在第一个输入(即 myFunction)上最小化 input1,同时修复其他参数。

在R中,似乎有一些预打包的函数,例如 nlmoptim等。但是文档并没有真正解释上面的问题。例如,似乎 optim只能在1个输入上最小化一个函数?我可能是错的,但是请纠正我,并向我展示采取这种最小化问题的建议方法。

非常感谢你!

最佳答案

为了在输入为向量时最小化输出,可以使用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的起始值(猜测从何处开始优化)。第二个是函数,然后您可以传入固定参数(例如 input2input3)。

在此示例中,最小值竟然是仅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

如果要基于 input2input3(不是该函数的第一个参数)最小化,可以将其他参数作为命名参数:
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

关于r - 如何在R中的一个输入参数上最小化一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com