指数曲线拟合3个系数

时间:2015-11-01 17:24:19

标签: matlab curve-fitting exponential

我有一些数据(两个相同大小的向量X和Y),并希望通过MATLAB将指数函数拟合为f(x)=a+(b-a)*exp(-c*x)。我的目标实际上是找到系数a,b和c。

我在MATLAB手册中找到了fit(X,Y,'exp2')fit(X,Y,'exp1','StartPoint',[x0,y0]),这与我正在寻找的有点不同。

2 个答案:

答案 0 :(得分:2)

您可以使用custom equation

f = fit(x, y, 'a+(b-a)*exp(-c*x)')

答案 1 :(得分:1)

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

在那里你可以选择x和y数据以及你想要适合它们的函数(指数甚至自定义)。

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

如果您对结果感到满意并且想要在代码中使用它们,只需点击“文件”选项卡下的生成代码即可。 Curve fitting app

你可以在我拍摄的截图中看到详细信息。 按下生成代码按钮后,matlab将创建一个将产生相同结果的函数。 我想做的就是复制我在这种情况下需要的部分:

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

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

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

如您所见,matlab添加了必要的细节,现在您可以使用fitresult访问拟合参数。例如 - > fitresult.a