我有一些数据符合格式的高斯:
y = a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2)
,(系数a
,b
,c
都是已知的。不幸的是我无法发布图像,但它看起来像一个标准的高斯图,只是其中一个尾部没有完全降到零。
我想要做的是让Matlab确定我指定的任何x
值的y
值。由于拟合是高斯的,因此几乎每个y
值都会有两个值。
如果有人可以帮助我,我会很感激。 谢谢!
答案 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');