2011-09-07 69 views
1

我試圖使用optim()中的R求解以下等式拉姆達:的Optim與不等式約束

拉姆達/西格瑪^ 2 - LN(拉姆達/西格瑪^ 2)= 1 + 1/Q

受約束:

拉姆達>西格馬^ 2。

我不知道怎麼去一個關於R.

設立這個我打開替代優化程序以及雖然方程似乎凸,因此optim應該是一個不錯的選擇。

謝謝!

+0

是Λ唯一的變量?如果您在'?optim'中檢查一維問題中的「註釋」,建議使用「optimize()」。當你說「求解lambda」時,你的方程中是否存在等式(或不等式)?或者你想要最小化或最大化你的表情? – Gregor

+0

我更新了方程(我有一個錯字)。是的,這是一個單一的問題。我將探索優化() - 感謝領先! –

回答

2

您正試圖解答一個等式。是否滿足約束,只能事後決定。 您可以使用uniroot如下

f <- function(x,sigma=1,Q=1) {x/sigma^2 - log(x/sigma^2) - 1 - 1/Q} 
uniroot(f,c(1,5)) 

$root 
[1] 3.146198 

$f.root 
[1] 3.552369e-06 

$iter 
[1] 5 

$estim.prec 
[1] 6.103516e-05 
+0

補充說明:只要Q> = 0,x的解決方案總是> = sigma^2。 –

1

決定這是比評論更多的答案。

兩個optimoptimize最小化功能,所以你想做的事就是寫一個返回,也就是說,誤差平方對於給定的λ誤差函數(se(lambda, sigma^2, Q),請確保您的λ是第一個參數)。然後調用optim(f = se, lower = sigma^2, sigma^2, Q),它會返回最小化錯誤函數的lambda的值。如果你有多個數據點(Q,Σ^ 2對),那麼使你的函數爲平方誤差的總和,或嘗試使用nls()