Ошибки при попытке условной оптимизации с помощью optim()

Я использовал решатель Excel для решения следующей проблемы

решить для a b и c в уравнении:

y = a*b*c*x/((1 - c*x)(1 - c*x + b*c*x))

с учетом ограничений

0 < a < 100
0 < b < 100
0 < c < 100

f(x[1]) < 10
f(x[2]) > 20
f(x[3]) < 40

где у меня около 10 (x, y )пар значений. Я минимизирую сумму abs (y -f (x )). И я могу ограничить как коэффициенты, так и диапазон значений результата моей функции для каждого x.

Я попробовал nls (, не пытаясь наложить ограничения ), и хотя Excel предоставлял оценки почти для любых начальных значений, которые я хотел предоставить, nls почти никогда не возвращал ответа.

Я переключился на использование optim, но у меня возникли проблемы с применением ограничений.

Вот чего я достиг до сих пор-

best = function(p,x,y){sum(abs(y - p[1]*p[2]*p[3]*x/((1 - p[3]*x)*(1 - p[3]*x + p[2]*p[3]*x))))}
p = c(1,1,1)
x = c(.1,.5,.9)
y = c(5,26,35)
optim(p,best,x=x,y=y)

Я сделал это, чтобы добавить первый набор ограничений -

optim(p,best,x=x,y=y,method="L-BFGS-B",lower=c(0,0,0),upper=c(100,100,100))

. Я получаю сообщение об ошибке ""ОШИБКА :ABNORMAL _TERMINATION _IN _LNSRCH"

и в итоге получим более высокое значение ошибки ($value ). Так что, похоже, я делаю что-то не так. Я вообще не мог понять, как применить другой набор ограничений.

Может ли кто-нибудь дать мне основную идею, как решить эту проблему, которую сможет понять не -статистик? Я просмотрел много сообщений и просмотрел несколько книг по R. Книги R остановились на самом простом использовании optim.

5
задан joran 8 July 2012 в 23:39
поделиться