2015-05-28 155 views
0

我希望在R中找到一個優化工具,它可以讓我確定輸入參數的值(比如0.001和0.1之間的一個特定值),從而使我的函數產生所需的輸出值。R中的優化工具來查找使輸出值最小化的函數的輸入參數?

我的函數接受一個輸入參數並計算一個值。我希望這個輸出值與預定的數字完全匹配,所以函數輸出這兩個值之間的差值的絕對值;當它們相同時,函數的輸出爲零。

我試過optimize(),但它似乎設置爲最小化輸入參數,而不是輸出值。我也嘗試過uniroot(),但它會產生錯誤f() values at end points not of opposite sign,這表明它不喜歡增加/減少輸入參數將輸出值降低到某一點的事實,但是超出該點後會再次增加。

道歉,如果我在這裏丟失了一些明顯的東西 - 我對優化功能是全新的。

+0

「我對優化功能完全陌生。」它不幸地顯示。您應該先閱讀一些有關該主題的介紹性文章。 – Roland

+0

你能否指點我正確的方向?我做了大量的背景研究,似乎並不明顯。 – Roger

回答

2

事實上,你錯過了一些顯而易見的事情:-)這是非常明顯的,你應該/可以制定你的問題。

假設函數必須等於期望的輸出值是f。 定義滿足

g <- function(x) f(x) - output_value 

功能g現在你可以使用uniroot找到g的零。但是您必須提供滿足uniroot要求的終端。即對於一個端點,g的值必須爲正值,另一個端點的g值必須爲負值(或相反方向)。

例子:

f <- function(x) x - 10 
g <- function(x) f(x) - 8 

然後

uniroot(g,c(0,20)) 

會做你想要什麼,但

uniroot(g,c(0,2)) 

會發出錯誤信息values at end points not of opposite sign

您也可以使用優化功能,但您希望最小化功能g。直接設置:optimize確實不是最小化輸入參數。徹底閱讀幫助。

+0

我沒有考慮過在一個函數中使用函數,所以對於我來說恐怕不是那麼明顯。謝謝! – Roger