0

我正在批处理 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

然后选择具有最佳 rsquare 的起点并绘制结果。

% plot
f = figure('Name', 'Gauss','Pointer','crosshair');
h = plot(fitresult, xData, yData, '-o'); 
4

1 回答 1

0

如果它们难以猜测,我建议使用一种不同的方法,这种方法不是迭代的,也不需要猜测参数的值来开始数值计算。

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

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

下面显示了一个具有高度分散数据的数值示例。通过此示例,您可以检查该方法是否正确实施。

在此处输入图像描述

在此处输入图像描述

注意:此方法可用于获取参数的一些近似值,这些参数可以作为“猜测”值放入通常的非线性回归软件中。

有关信息:该方法是线性回归 wrt 一个积分方程,高斯函数是其解:

在此处输入图像描述

一般原则见:https ://fr.scribd.com/doc/14674814/Regressions-et-equations-integrales

于 2021-04-22T10:15:53.510 回答