2015-11-03 99 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 

仍然是相同的解决方案,但现在微,你可以将其提供给最优化。