Проблема минимизации функции в Matlab (fmincon)

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

Для этого я пытаюсь использовать функцию Matlab fmincon, чтобы минимизировать следующую функцию:

function f = myfun(x)

TS_krm = KRM(normrnd(x(1),x(2),100,1), L);
f = sum((TS_insitu - TS_krm).^2);

Эта функция вычисляет сумму квадратов остатков, которую я хочу минимизировать. Для этого я пробую использовать fmincon:

x = fmincon(@myfun, [65;8], [], [], [], [], [0;0], [90;20], [], options);

Таким образом, я использую начальную ориентацию со средним значением 65 градусов и стандартным отклонением 8. Я также устанавливаю границы среднего угла от 0 до 90 градусов и границы стандартного отклонения от 0 до 20 градусов. .

Тем не менее, похоже, что он не находит должным образом средние значения и углы стандартного отклонения, которые минимизируют функцию. Обычно он выводит что-то около N (65,8), почти как будто он на самом деле не пытается много других значений, далеких от начальных точек.

Есть идеи, что я могу сделать, чтобы эта работа работала? Я знаю, что могу установить настройки TolX и TolFun, но я не совсем уверен, что они делают и какой эффект они будут иметь. Если это помогает, типичные значения, с которыми я имею дело, обычно составляют около -45 дБ.

Спасибо!


person Josiah    schedule 15.12.2010    source источник
comment
акустическая сила рыбы? Может быть, акустическая сила эхолота от рыбы? Хотя первое - гораздо лучшее название для группы. В любом случае, это интересная проблема!   -  person mtrw    schedule 15.12.2010
comment
Да, я не хотел вдаваться в подробности. Реальные значения, с которыми я работаю, - это целевые силы, которые, по сути, представляют собой отношение интенсивности мощности, полученной от эха, к интенсивности выходной мощности.   -  person Josiah    schedule 16.12.2010


Ответы (1)


вам следует посмотреть на порядок значений f для разных входов. это может повлиять на значения, которые вам нужно ввести в TolFun (устойчивость алгоритма минимизации к изменениям в f). например, если TolFun = 1e-6 и разница между f (45) и f (64) равна 1e-7, алгоритм может остановиться на 65. Кроме того, я думаю, что используемый вами алгоритм предполагает, что функции дифференцируемы. (он использует производные, чтобы найти «куда идти дальше»), не уверен, что это так в вашей функции. если это не так, вы должны использовать симплекс, чтобы найти минимум.

person Yuval    schedule 16.12.2010
comment
Хорошо, я могу попробовать варьировать TolFun и посмотреть, поможет ли это вообще. Я думаю, что начинаю сужать его, но, вероятно, его можно улучшить. Я думаю, что одна из основных проблем, с которыми я столкнулся, заключалась в том, что, поскольку моя функция включает нормальное распределение, каждая итерация функции будет приводить к немного разным результатам. Таким образом, fmincon становится сложнее минимизировать то, что постоянно меняется. Я тоже проверю симплекс. Спасибо за помощь. - person Josiah; 16.12.2010