2013-07-24 43 views
2

我需要最小化下面顯示的目標函數,將綠色框中的變量引入到公式中,紅色框中的變量需要進行優化,每個元素的起始值。迄今爲止,優化不受限制。我把公式放在這裏不是爲了等待代碼,而是爲了對這個函數有一個想法。我到目前爲止已經完成:我搜索線程,我試過一個玩具功能nlm命令:R中的多元非線性最小化

fn =function(x,a) {sum(100*a+(2*x^2+5*x-7))} 
nlm(fn , a<-c(10),x<- c(100), hessian=TRUE) 

,但我不能爲最佳(一)獲得的價值,我懷疑我在公式中出現了一些錯誤,我將此公式作爲處理下面公式的出發點。我正在尋找的是任何一個可以指向我將從R開始的適合R的函數。

The Obj. Function

回答

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 
+0

1,如果我想優化p的價值,以及什麼情況下? 2 - 我可以使用nlm作爲上面列出的函數,謝謝 – Athii

+0

'p'只是參數的起始值。如果函數接受更多參數,它可能是一個值的向量。您應該再次嘗試閱讀'nlm'的幫助頁面並使用所有示例。 –

+0

這是否意味着(函數中的參數號)=(length(p))? – Athii

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)