2015-11-03 2 views
2

Я создаю две функции f (i) и f (j), и я хочу одновременно найти значение i и j, так что разность f (i) -f (j) минимизирована. Однако при запуске кода ниже я получаю сообщение об ошибке.Ошибка при оптимизации в R

У меня есть две функции с параметром я и 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

делает ниже? и можете ли вы 'dput' ваши данные? –

ответ

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 

все еще такое же решение, но теперь дифференцируемое, и вы можете подавать его большинству оптимизаторов.

Смежные вопросы