我需要最小化下面显示的目标函数,绿色框中的变量将被引入公式,并且需要优化红色框中的变量,并且每个变量都有一个起始值。到目前为止,优化不受限制。我把公式放在这里不是为了等待代码,而是为了让响应能够了解函数。到目前为止我做了什么:我搜索了线程,我在玩具函数上尝试了nlm
命令:
fn =function(x,a) {sum(100*a+(2*x^2+5*x-7))}
nlm(fn , a<-c(10),x<- c(100), hessian=TRUE)
但我无法得到最佳值(a),我怀疑我在公式中有一些错误,我使用这个公式作为解决下面公式的起点。我正在寻找的是任何人都可以指出我将从R开始的合适功能。
答案 0 :(得分:2)
通常在参数列表中使用赋值运算符调用R函数将导致失败。这是<-
与=
不同的一个领域。我不会想到这会起作用:
nlm(fn , a =c(10), x = c(100), hessian=TRUE) # and it didn't
错误消息提供信息,告诉您缺少参数p:
> fn =function(x,p) {sum(100*p[1]+(2*x^2+5*x-7))}
> nlm(fn , p=c(10),x = c(100), hessian=TRUE)
$minimum
[1] -4988507
$estimate
[1] -50090
$gradient
[1] 100
$hessian
[,1]
[1,] 0
$code
[1] 5
$iterations
[1] 6
答案 1 :(得分:1)
我实际上建议不要将不需要的额外参数添加到您的函数中。如果你的参数名称复杂,那就容易搞砸了。
我会像这样扭曲你的功能:
fn = function(x,a) {sum(100*a+(2*x^2+5*x-7))}
f = function(x) {fn(x, 100)}
nlm(f, 10, hessian=TRUE)