2016-09-04 11 views
1

У меня есть функция, которая дает мне вероятность, которую я хочу максимизировать. Проблема в том, что мне нужно дать 4 параметра, которые мне нужно оценить. У меня есть эта функция:Matlab maximize function

[likelihood, z0, z1, z2, z3]= myfun(g, g1, g2, x1, g3, x2, x3) 

что в выходе дает правдоподобие, как я могу его максимизировать? Я знаю все g, но я не знаю x, и я должен оценить их с максимизацией вероятности. Более того, я не знаю z.

Предполагаю, что мне следует выполнить fminsearch, но я не смог найти документацию с оценкой параметров, подобную этой.

ответ

1

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

  1. Takes неизвестные параметры, как один аргумент массива
  2. Возвращает значение, чтобы минимизировать, а не максимизировать

Предполагая, что 0 является разумным начальное значение для всех x параметров, это будет выглядеть примерно так:

x = fminsearch(@(x) -myfun(g, g1, g2, x(1), g3, x(2), x(3)), [0,0,0]); 
x1 = x(1); 
x2 = x(2); 
x3 = x(3); 

Чтобы узнать z значения и в результате likelihood из результата поиска, вы можете просто поместить результат обратно в myfun:

[likelihood, z0, z1, z2, z3] = myfun(g, g1, g2, x1, g3, x2, x3) 
+0

Правильно - входы делать строго не должны быть скалярными выстраивались в 1D массив; они могут быть расположены в матрице, но поиск будет пытаться оптимизировать каждый элемент в матрице. Поскольку в этом случае существует простое число значений для оптимизации, массив 1 на 7 является вашим единственным вариантом. Вы могли бы упорядочить 7 значений немного более кратко: 'ss = fminsearch (@ (ss) -kalcvf (y, lead, a, reshape (ss (1: 4), 2,2), b, H, diag (ss (5: 7)), z0, vz0), нули (1,7)). – Will

+0

Если у вас есть Инструментарий оптимизации, то 'fmincon' предлагает типы ограничений, которые вы ищете. У меня нет инструментария, но похоже, что ваш пример будет выглядеть примерно так: 'fmincon (@ (ss) -kalcvf (y, lead, a, reshape (ss (1: 4), 2,2), b, H, diag (ss (5: 7)), z0, vz0), нули (7,1), [[-eye (2); eye (2)] нули (4,5)], [0; 0; 1; 1]) '. Если у вас его нет, существуют различные стратегии, которые вы можете использовать с неограниченным поиском, которые обсуждаются онлайн. Если вы используете специально созданную функцию или нет, помните, что поиск нелинейной функции не гарантирует оптимальный или даже хороший ответ на свой счет. – Will

+0

. Вы получаете эту ошибку, потому что количество элементов, которые вы извлекаете из 'params' не соответствует размеру матриц, в которые вы их преобразуете. Чтобы изменить формулу «H» на матрицу размером 9 на 2, вам нужно 18 элементов, но 'params (5:23)' имеет 19. То же самое для 'reshape (params (24: 145), 11,11)', у вас есть слишком много. Но чтобы ответить на ваш второй вопрос, 143 параметра почти наверняка слишком много, чтобы получить хороший результат в разумные временные рамки. Если хороший результат вообще возможен с безусловным поиском, возможно, есть значительно более эффективные способы получения того же результата. – Will

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

  • Нет связанных вопросов^_^