Найдите максимум гауссова с несколькими терминами

У меня есть набор данных (x,y), в который я вписываю гауссиан с тремя терминами (gauss3):

[gaussianFit,gof]=fit(x,y,'gauss3');

Теперь я хочу найти максимум этой функции. Я знаю, что для gauss1 максимум — это просто параметр b1, но я понятия не имею, как найти максимум, когда он представляет собой сумму нескольких гауссианов. Термины кажутся взвешенными (иначе моя идея была просто средней из трех b-терминов). Моей второй мыслью было решить всю дифференцированную функцию со всеми параметрами:

syms x
diff(a1.*exp(-((x-b1)./c1).^2) + a2.*exp(-((x-b2)./c2).^2) + a3.*exp(-((x-b3)./c3).^2)==0);
solve(dEqn,x)

... но это дает мне очень странные значения параметров, которые не являются исходными значениями. И я чувствую, что это просто громоздкое решение чего-то простого.

Я надеюсь, что кто-то может мне помочь, так как у меня нет идей.


person Niels Møller    schedule 29.04.2015    source источник


Ответы (1)


Вероятно, проще всего реконструировать распределение по подобранным параметрам, но для этого вам не нужно использовать символьную математику.

Вы можете создать реконструированную кривую, используя eval, а затем найти ее максимальное значение, как обычно:

a = 3; b = 4; x = 1:10;
recon = eval('a*x + b');
[mx, mI] = max(recon);

Вы можете получить выражение в виде строки из возвращаемого объекта соответствия или использовать каноническую форму.

person xenoclast    schedule 29.04.2015