2013-03-18 3 views
2

Моя проблема, вероятно, часто, но я не знаю, как адаптировать ответ на эту проблемуОптимизация функции 2 параметров

У меня есть функция F с двумя параметрами (а, б) и у меня есть чтобы найти максимум этой функции.

На данный момент, я могу это сделать:

optimization_of_F<-function(a,b){ 
    solution=c(0,0,0) #initialization 
    a=seq(0, 5, by=0.1) 
    b=seq(0.1, 5, by =0.1) 

    for (d in a){ 
    for (k in b){ 
     if (F(d, k) > solution[1]) { 
     solution[1]= F(d,k) 
     solution[2]= d 
     solution[3]= k 
     } 
    }  
    } 
    return(solution) 
} 

Но этот путь слишком долго, и я хотел бы, чтобы оптимизировать его. Как я могу это сделать ?

+0

Вы понимаете, что переписываете 'решение' во всех, кроме последней итерации цикла? –

+0

Кроме того, не вызывайте функцию 'F', так как это означает' FALSE' –

+0

Я просто пишу решение, если это лучше, чем временное решение. – Stephen

ответ

1

Я чувствую, что это поможет вам ближе к тому, что вы ищете:

a=seq(0, 5, by=0.1) 
b=seq(0.1, 5, by =0.1) 
outer(a, b, FUN=F) 
+0

Кажется, что работает. Есть ли способ сохранить значение a и b во внешней матрице? – Stephen

+0

Вид. Вы можете использовать 'rownames (MatrixName) <- a' и то же самое с' colnames'. Вы также можете построить «массив», по существу, матрицу, в которой каждая ячейка имеет три значения. –

5

Попробуйте, где F ваша функция, c(0,0) первоначальное предположение, c=2 и d=pi/3 фиксированные параметры подаются в F,

optim(c(0,0), F, c=2, d=pi/3) 
+0

Как я могу использовать «optim», если у моей функции F есть другие параметры? Пример: F (a, b, c, d) с c и d исправить мной. – Stephen

+0

Я сделал тест, но он не работает. 'Тест <-функции (а, б, в) { сумма = а + B + C возврата (сумма) } Optim (с (0,0), испытание, с = 1)' – Stephen

+2

'optim' будет только оптимизировать первый параметр' F', поэтому он должен быть вектором 'c (a, b)'. Попробуйте 'F = function (p = c (1,1), c = 1) {(p [1] - c)^2 + (p [2] -2 * c)^2}' – baptiste

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