2015-11-02 1495 views
3

我有很多数据,我认为可以将它适用于sigmoid(基于我的视觉而不是数学公式)。使用MATLAB对我的数据拟合sigmoid

如何找到具有统计学意义的最佳S形数据解释能力的参数形式?

谢谢!

+0

如果设置正确,并且可以确保分母在近似值范围内没有零,多项式(等度)的比率可以非常好地拟合S形。这可能是过度的,但很难说根据你的问题。 – mathematician1975

+1

你可以尝试与lsqnonlin http://au.mathworks.com/help/optim/ug/lsqnonlin.html – gregswiss

+1

可能重复的[MATLAB拟合数据给用户给定函数](http://stackoverflow.com/questions/12970043 /数据到用户给定函数的matlab拟合) – tashuhka

回答

3

你可以做的一件伟大的事情是在Matlab中使用“曲线拟合”应用程序。你可以在APPS的“数学,统计和优化”部分找到它。

在那里,您可以选择您的x和y数据以及您希望适合它们的功能(您可以输入自定义方程式,例如S形)。

然后,您可以在一个图上看到拟合结果,并显示拟合参数。

如果您对结果感到满意并且想要在代码中使用它们,只需点击File选项卡下的生成代码即可。 See Here 你可以在截图中看到细节。按下生成代码按钮后,matlab将创建一个功能,它会得到相同的结果。我喜欢做的仅仅是复制,我需要在这种情况下,部分:

enter code here 
[xData, yData] = prepareCurveData(x, y); 

% Set up fittype and options. 
ft = fittype('a/(1+exp(-b*x))', 'independent', 'x', 'dependent', 'y'); 
opts = fitoptions('Method', 'NonlinearLeastSquares'); 
opts.Display = 'Off'; 
opts.StartPoint = [0.957166948242946 0.485375648722841]; 

% Fit model to data. 
[fitresult, gof] = fit(xData, yData, ft, opts); 

,你可以看到MATLAB添加必要的细节,现在你可以访问使用fitresult拟合参数。例如 - > fitresult.a

+1

只要小心,代码和图像中的fittype不对应。 – lhcgeneva

+0

@lhcgeneva为什么不呢? – HoomanShan

+0

因为你的图像中的fittype是sigmoid('a /(1 + exp(-bx)'),而你的代码是指数('a +(ba)* exp(-c * x)') – lhcgeneva