我需要帮助以最小二乘的方式将数据拟合到非线性函数。给定数据,当我有以下等式时,我该如何进行?
f(x) = 20 + ax + b*e^(c*2x)
所以我想找到a,b和c。如果是产品,我会通过在整个函数中取自然对数来线性化函数,但在这种情况下我似乎无法做到这一点。
谢谢
我需要帮助以最小二乘的方式将数据拟合到非线性函数。给定数据,当我有以下等式时,我该如何进行?
f(x) = 20 + ax + b*e^(c*2x)
所以我想找到a,b和c。如果是产品,我会通过在整个函数中取自然对数来线性化函数,但在这种情况下我似乎无法做到这一点。
谢谢
您可以使用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
向量 中的匿名函数b
。返回向量nlinfit
中这些系数的最终值。是、和的值的初始猜测。并且是包含您想要拟合的数据的向量。beta
beta0
b(1)
b(2)
b(3)
x
Y
或者,您可以在自己的文件中定义函数,如果它有点复杂的话。对于这种情况,您将有类似(在文件中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);
您可以尝试cftool
这是一个用于拟合数据的交互式工具。第二部分不太明白。如果您更详细地描述它可能会有所帮助。