2015-11-03 100 views
2

我創建了兩個函數f(i)和f(j),我想同時找到i和j的值,使差值f(i)-f(j)最小化。 但是,在運行下面的代碼時出現錯誤。在R中進行優化時出錯

我有參數i和j兩個功能如下

bu1<- function(j){ 
sum(linkinc_lev1$gdp*(1/(1+ (linkinc_lev1$use_gro*(1+j/100)))) 
} 

bu1<- function(j){ 
sum(linkinc_lev2$gdp*(1/(1+ (linkinc_lev2$use_gro*(1+i/100)))) 
} 

現在我需要同時找到i和j的值的最小化上述功能,使得差。

我試圖像

f1<- function(j,i) abs(bu1(j)-td1(i)) 
ans_lev1<-optimize(f1, lower=-100, upper=100), 

,但得到的錯誤Error in td1(i) : argument "i" is missing, with no default

有R中的任何方式,以儘量減少基於兩個參數的功能呢?

+2

你有兩個函數bu1 ...但沒有td1。順便說一句'linkinc_lev1'是什麼?一壺果醬,一架黃銅飛機? –

+0

haha​​ ..apologies,第二個函數是td1。 linkinc_lev1只是一個數據框名稱,shud提到:) – user36176

+0

做了以下幫助?你能輸入你的數據嗎? –

回答

0

是的,幾乎所有的優化器都在參數向量上工作。你應該修改你的函數類似

f1<- function(param) abs(bu1(param[2])-td1(param[1])) 

即函數只有一個參數「參數」,並在函數內部,你獲取的利益價值出來。

注意:如果您使用abs(),則最終會得到一個不可區分的目標函數。你必須選擇一個可以處理它的優化器(例如SANN和Nelder-Mead)。我寧願做

f1 <- function(param) (bu1(param[2])-td1(param[1]))^2 

仍然是相同的解決方案,但現在微,你可以將其提供給最優化。