在Matlab中使用nlinfit?

时间:2013-09-17 01:53:44

标签: matlab

我无法理解并在Matlab中应用nlinfit函数。所以,让我说我给了矢量

x = [1, 2, 3, 4, 5] 
y = [2.3, 2.1, 1.7, .95, .70] 

并且我被要求将这些数据拟合成指数形式(我不知道这些数字是否有效,我做了它们)y = A*e^(Bx) + CA/B/C是常量)。

我的理解是nlinfit需要4个参数,两个向量,一个modelfunction,在这种情况下应该是我上面的等式,然后是beta0,我不知道完全理解。我的问题是如何在modelfunction中实现nlinft,以及如何找到beta0(当只使用2个要绘制/拟合的向量时)以及如何实现?有人可以给我一个例子,以便我可以适用于任何合适的功能吗?我怀疑将来我会经常使用它,并且真的想学习它。

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)

您会注意到,在上面我将所有参数都卡在了一个矢量中。函数的第一个参数必须是您尝试解决的所有点的向量(例如,ABC,而第二个参数必须为{{ 1}}。

正如木片所说,x是您的起点,所以您对beta0AB参数的最佳猜测(不一定非常好)。所以像C[1 1 1]这样的东西,但它是非常具体的问题。你应该玩一些。请记住,这是一个本地搜索功能,因此可能会陷入局部最佳状态,因此您的起点实际上非常重要。

答案 1 :(得分:0)

beta0是您对参数的初步猜测。您的猜测越多,您就越有可能看到融合到可行的解决方案。 nlinfit只不过是一种优化。它必须从某个地方开始。