Для данного примера я вижу что следует минимизировать функционал зависящий от 6 параметров:
По параметрам
оптимизацию можно сделать сразу аналитически. То есть численная оптимизация будет проходить только по трём параметрам:
.
Если вас интересует простой надёжный алгоритм, не использующий производные, то рекомендую алгоритм Нелдера-Мида. Именно он используется в стандартной функции
fminsearch программы МАТЛАБ. Его простоту гарантирую, так как сам его реализовывал на си.
И замечание по картинкам в первом посте. Предложенное положение максимумов (и в особенности их количество) крайне неудачное. В случае на рисунке данные лучше аппроксимировать суммой двух гауссианин, в противном случае погрешность коэффициентов модели будет гигантская. Так всегда бывает, когда два коэффициента в модели могут компенсировать неточности друг друга.
Чтобы лучше понять в чём именно заключается проблема, представьте себе, что вам необходимо разложить трёхмерный вектор по неортогональному базису в трёхмерном пространстве. Причём два вектора 1-й и 2-й этого базиса практически параллельны. Тогда небольшая флуктуация координат раскладываемого вектора приведёт к гигантской флуктуации коэффициентов разложения по 1-ому и 2-ому вектору. Аналогичная ситуация возникает и у вас, так как направления в пространстве допустимых моделей, задаваемые первой и второй гауссианиной практически параллельны.
В случае с численной оптимизацией подобная проблема особенно обостряется. Во-первых она сильно замедляет и затрудняет работу алгоритма (особенно всякие градиентные спуски). Во-вторых, конечный результат может оказаться в совершенно любом месте этой узкой ложбины, образующейся в целевой функции для этих двух самокомпенсирующихся переменных. Причём не обязательно достаточно близко к реальному минимуму.