将最小二乘意义的数据拟合到非线性方程

时间:2014-03-30 13:47:04

标签: matlab least-squares nonlinear-functions

我需要帮助将数据以最小二乘的方式拟合为非线性函数。给定数据,当我有以下等式时如何进行?

f(x)= 20 + ax + b * e ^(c * 2x)

所以我想找到a,b和c。如果它是产品,我会通过在函数中使用自然对数来线性化函数,但在这种情况下我似乎无法做到这一点。

由于

2 个答案:

答案 0 :(得分:2)

您可以使用nlinfit工具,它不需要曲线拟合工具箱(我不认为......)

这样的东西
f = @(b,x)(20 + b(1)*x + b(2)*exp(b(3)*2*x));
beta0 = [1, 1, 1];
beta = nlinfit(x, Y, f, beta0);

当MATLAB解决这个最小二乘问题时,它会将系数传递给向量f中的匿名函数bnlinfit返回beta向量中这些系数的最终值。 beta0是对b(1)b(2)b(3)值的初步猜测。 xY是包含您想要适合的数据的向量。

或者,您可以在自己的文件中定义该函数,如果它稍微复杂一点。在这种情况下,你会有类似的东西(在文件my_function.m中)

function y = my_function(b,x)
y = 20 + b(1)*x + b(2)*exp(b(3)*2*x);
end

,其余代码看起来像

beta0 = [1, 1, 1];
beta = nlinfit(x, Y, @my_function, beta0);

另请参阅:Using nlinfit in Matlab?

答案 1 :(得分:1)

您可以尝试cftool这是一个用于拟合数据的交互式工具。第二部分我不太明白。如果您更详细地描述它可能会有所帮助。