在Matlab中从高斯拟合中找到已知y值的x值

时间:2014-01-09 03:08:02

标签: matlab curve-fitting gaussian

我有一些数据符合格式的高斯:

y = a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2),(系数abc都是已知的。不幸的是我无法发布图像,但它看起来像一个标准的高斯图,只是其中一个尾部没有完全降到零。

我想要做的是让Matlab确定我指定的任何x值的y值。由于拟合是高斯的,因此几乎每个y值都会有两个值。

如果有人可以帮助我,我会很感激。 谢谢!

1 个答案:

答案 0 :(得分:0)

您需要求解给定y和未知x的非线性方程。 fsolve是这样做的一种方式,但它只返回一个解决方案。您需要使用不同的起始值进行迭代。您还可以使用文件交换中的newtzero来查找更多解决方案。这是一个例子:

[a1,b1,c1] = deal(2, 3, 4);
[a2,b2,c2] = deal(2, 3, 4);


yValue  = 3; % example of known y value

f = @(x) a1*exp(-((x-b1)/c1).^2) + a2*exp(-((x-b2)/c2).^2) - yValue ;



x =  newtzero(f, [0]); % search for roots of f function



xT = linspace(-20, 20, 100); 
yT = arrayfun(f, xT);

figure, plot(xT, yT, '-'); hold on; grid on;
plot(xT, zeros(1, numel(xT)), 'k-');

% plot found roots
plot(x, zeros(1, numel(x)), 'ro');

enter image description here