2013-07-24 1 views
2

Мне нужно свести к минимуму целевую функцию, показанную ниже, переменные в зеленых прямоугольниках будут введены в формулу, а переменные в красных ячейках должны быть оптимизированы, и будет начальное значение для каждого , на данный момент оптимизация не ограничена. Я поставил здесь формулу, чтобы не ждать кода, но для ответов, чтобы иметь представление о функции. То, что я сделал до сих пор: Я искал нити, я попробовал nlm команду на функции игрушечной:Многомерная нелинейная минимизация в R

fn =function(x,a) {sum(100*a+(2*x^2+5*x-7))} 
nlm(fn , a<-c(10),x<- c(100), hessian=TRUE) 

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

The Obj. Function

ответ

2

Обычно вызов функций R с операторами присваивания в списке аргументов произведет отказ. Это одна из областей, где <- - это не то же самое, что и =. Я бы не подумал, что это будет работать:

nlm(fn , a =c(10), x = c(100), hessian=TRUE) # and it didn't 

Сообщение об ошибке информативно, говоря вам есть недостающий параметр р:

> fn =function(x,p) {sum(100*p[1]+(2*x^2+5*x-7))} 
> nlm(fn , p=c(10),x = c(100), hessian=TRUE) 
$minimum 
[1] -4988507 

$estimate 
[1] -50090 

$gradient 
[1] 100 

$hessian 
    [,1] 
[1,] 0 

$code 
[1] 5 

$iterations 
[1] 6 
+0

1- Что в случае, если я хочу, чтобы оптимизировать значение р, а? 2 - могу ли я использовать nlm для функции, которую я перечислил выше. Спасибо – Athii

+0

'p' было только начальным значением параметра (ов). Это мог быть вектор значений, если функция принимала больше аргументов. Вы должны попробовать снова прочитать страницу справки для 'nlm' и работать со всеми примерами. –

+0

Означает ли это (количество параметров в функциях) = (длина (p))? – Athii

1

Я действительно рекомендую не прикладывая дополнительных параметров, которые не нужны для оптимизации вашей функции. Легче испортить, если у вас сложное имя для параметров.

Я бы деформировать вашу функцию так:

fn = function(x,a) {sum(100*a+(2*x^2+5*x-7))} 
f = function(x) {fn(x, 100)} 
nlm(f, 10, hessian=TRUE)