Matlab-尝试各种高斯拟合的起点,选择一个具有最高rsquare的起点,然后进行绘图

Matlab-尝试各种高斯拟合的起点,选择一个具有最高rsquare的起点,然后进行绘图,matlab,curve-fitting,gaussian,goodness-of-fit,Matlab,Curve Fitting,Gaussian,Goodness Of Fit,我正在批量处理1000个数据。有时,峰值位置和大小会发生剧烈变化,程序很难用一个起点值找到这些峰值。我必须将数据分成更小的批来更改起始点值,这非常耗时 是否可以尝试不同的起点值并选择具有最佳rsquare的起点值 ft = fittype('y0 + a*exp(-((x-xa)/(wa))^2), 'independent', 'x', 'dependent', 'y' ); opts = fitoptions( 'Method', 'NonlinearLeastSquares' ); opt

我正在批量处理1000个数据。有时,峰值位置和大小会发生剧烈变化,程序很难用一个起点值找到这些峰值。我必须将数据分成更小的批来更改起始点值,这非常耗时

是否可以尝试不同的起点值并选择具有最佳rsquare的起点值

ft = fittype('y0 + a*exp(-((x-xa)/(wa))^2), 'independent', 'x', 'dependent', 'y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';

opts.StartPoint = [10 10 10 0]; % this is a, wa, xa and y0 - from the equation

[fitresult, gof] = fit(xData, yData, ft, opts);

alpha = gof.rsquare; % extract goodness of fit

if alpha < 0.98 % if rsquare (goodness of fit) is not good enough
    
for x = 100:10:500; y= 10:1:50 %these numbers are not set in stone - can be any number
    
opts.StartPoint = [10+x 10 10+y 0]; % tweak the start point values for the fit

[fitresult, gof] = fit(xData, yData, ft, opts); % fit again

如果它们在猜测上有困难,我建议使用一种不同的方法,这种方法不需要迭代,也不需要猜测参数的值来开始数值演算

由于我没有您的问题的代表性数据,我无法检查以下建议的方法是否适合您的情况。这取决于数据的分散性和点的分布

试试看。如果结果不正确,请告诉我

下面是一个数据高度分散的数值例子。通过本例,您可以检查该方法是否正确实现

注:该方法可用于获得一些参数的近似值,这些值可在通常的非线性回归软件中作为“猜测”值

仅供参考:该方法是一个线性回归wrt积分方程,高斯函数为其解:


关于一般原则,请参见:

如果我没有弄错的话,您正在描述盆地跳跃方法。我认为,对于像高斯函数这样健壮的函数,你不需要这样的函数,尽管你可以查阅Jean Jacquelin的工作,找到一些不需要迭代就能获得真正精确的初始参数的好方法。@Mad物理学家谢谢你的建议,我将阅读建议的参考文献。我正在批量处理1000个数据。有时,峰值的位置和大小会发生剧烈变化,程序很难找到具有单个起点值的峰值。我必须将数据分成更小的批来更改起始点值,这很耗时。你需要一个好的猜测方法。我已经开始研究一个叫做scikit guess的东西,你可能会发现它作为参考很有用。
% plot
f = figure('Name', 'Gauss','Pointer','crosshair');
h = plot(fitresult, xData, yData, '-o');