使用高斯函数作为测试用例不是很恰当,计算出来的半高宽都一样。
我在peaks函数的基础上改出来一个多峰函数,还存在一些小问题,但基本上可用了,你可以先看看:X = -10 : .5 : 10;
Y = -10 : .5 : 10;
FWHM = X * 0;
for i = 1 : length(X)
x = X(i);
f = 3*(1-x).^2.*exp(-(x.^2) - (Y+1).^2) + 10*(x/5 + x.^2 + Y.^4).*exp(-x.^2-Y.^2);
[max_f, ind] = max(f);
HM = (max_f-min(f)) / 2;
% 通过插值找到左侧的半高坐标
% 如果是多峰,确保只在靠近峰值的附近找
f1 = f(1:ind(1));
Y1 = Y(1:ind(1));
ind1 = [1 find(diff(f1)<=0)];
f1 = f1(ind1(end):end);
Y1 = Y1(ind1(end):end);
y1 = interp1(f1,Y1,HM);
% 通过插值找到右侧的半高坐标
f2 = f(ind(1):end);
Y2 = Y(ind(1):end);
ind1 = [find(diff(f2)>=0) length(f2)];
f2 = f2(1:ind1(1));
Y2 = Y2(1:ind1(1));
y2 =