我无法理解并在Matlab中应用nlinfit
函数。所以,让我说我给了矢量
x = [1, 2, 3, 4, 5]
y = [2.3, 2.1, 1.7, .95, .70]
并且我被要求将这些数据拟合成指数形式(我不知道这些数字是否有效,我做了它们)y = A*e^(Bx) + C
(A/B/C
是常量)。
我的理解是nlinfit
需要4个参数,两个向量,一个modelfunction
,在这种情况下应该是我上面的等式,然后是beta0
,我不知道完全理解。我的问题是如何在modelfunction
中实现nlinft
,以及如何找到beta0
(当只使用2个要绘制/拟合的向量时)以及如何实现?有人可以给我一个例子,以便我可以适用于任何合适的功能吗?我怀疑将来我会经常使用它,并且真的想学习它。
答案 0 :(得分:3)
查看文档中的第二个示例:http://www.mathworks.com/help/stats/nlinfit.html
基本上,您将函数句柄作为modelfunction
参数传递。要么在文件中创建一个函数,然后只是在前面传递一个带有@
的函数名,要么像这样创建一个匿名函数:
nlinfit(x, y, @(b,x)(b(1).*exp(b(2).*x) + b(3)), beta0)
您会注意到,在上面我将所有参数都卡在了一个矢量中。函数的第一个参数必须是您尝试解决的所有点的向量(例如,A
,B
和C
,而第二个参数必须为{{ 1}}。
正如木片所说,x
是您的起点,所以您对beta0
,A
和B
参数的最佳猜测(不一定非常好)。所以像C
或[1 1 1]
这样的东西,但它是非常具体的问题。你应该玩一些。请记住,这是一个本地搜索功能,因此可能会陷入局部最佳状态,因此您的起点实际上非常重要。
答案 1 :(得分:0)
beta0是您对参数的初步猜测。您的猜测越多,您就越有可能看到融合到可行的解决方案。 nlinfit只不过是一种优化。它必须从某个地方开始。