Оптим с ограничением неравенства - PullRequest
2 голосов
/ 07 сентября 2011

Я пытаюсь использовать optim() в R, чтобы найти лямбду в следующем уравнении:

лямбда / сигма ^ 2 - ln (лямбда / сигма ^ 2) = 1 + 1 / Q

подлежит ограничению:

лямбда> сигма ^ 2.

Я не уверен, как можно настроить это в R.

Я также открыт для альтернативных процедур оптимизации, хотя уравнение кажется выпуклым, и поэтому optim должно быть хорошим выбором.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 07 сентября 2011

Вы пытаетесь решить уравнение.Будь или нет ограничение, может быть решено только пост.Вы можете использовать uniroot следующим образом

f <- function(x,sigma=1,Q=1) {x/sigma^2 - log(x/sigma^2) - 1 - 1/Q}
uniroot(f,c(1,5))

, давая

$root
[1] 3.146198

$f.root
[1] 3.552369e-06

$iter
[1] 5

$estim.prec
[1] 6.103516e-05
1 голос
/ 07 сентября 2011

Решили, что это скорее ответ, чем комментарий.

И optim, и optimize минимизируют функции, поэтому вы хотите написать функцию ошибки, которая возвращает, скажем, квадрат ошибкизаданная лямбда (se(lambda, sigma^2, Q), убедитесь, что ваша лямбда является первым аргументом).Затем вызовите optim(f = se, lower = sigma^2, sigma^2, Q), и он вернет значение лямбда, которое минимизирует вашу функцию ошибки.Если у вас есть несколько точек данных (Q, сигма ^ 2 пары), сделайте вашу функцию суммой квадратов ошибок или попробуйте использовать nls().

...