在Matlab中通过数据点拟合指数曲线

3

我有一个指数衰减的数据,想要在Matlab中拟合一条曲线。请问如何操作?


4
Statistics Toolbox产品页面上有一个很好的演示,讨论了将非线性模型转换为线性模型可能出现的问题。最好的方法是使用非线性回归;使用“线性化、最小二乘、去线性化”技术导出一组“智能”起始条件。该演示的链接为:http://www.mathworks.com/products/statistics/demos.html?file=/products/demos/shipping/stats/xform2lineardemo.html。 - richard willey
3
Richard Willey的评论应该成为(被接受的)答案。按照一些回答所建议的线性化和最小二乘法并不是一个好主意,因为这种转换会赋予小值过大的权重。最好使用nlinfit。 - Lukas
@richardwilley的链接被MathWorks弄坏了。更新版本似乎在这里:http://www.mathworks.com/help/stats/examples/curve-fitting-and-distribution-fitting.html。 - horchler
5个回答

5

试试这个:

ft=fittype('exp1');
cf=fit(time,data,ft)

这是您的数据向量timedata,其中时间是自变量,数据是因变量。这将为您提供指数衰减曲线的系数。

如何绘制这个图形? - Nick
@Adiel 当我尝试这个时,我遇到了一个错误,提示为“输入参数类型'cfit'的未定义函数'diff'。在cfit/plot (line 64)中出现错误 如果任何(diff(xdata)<0)在slopeFirst2hours (line 6)中出现错误 plot(time, cf, 'r')你能告诉我我做错了什么吗? - clarkson
@clarkson 你是对的。应该用一个单一的命令来绘制- plot(cf,time,data) - Adiel

2
如果您的意思是最小二乘拟合,您应该尝试使用lsqcurvefit。

1

cftool(X,Y) 是一个不错的选择。 这里有一些链接:

LINK1 LINK2


0
Matlab有一个名为polyfit的函数。它可以将曲线拟合到可以表示为a*X^n+b*X^(n-1)+.....z形式的数据上。然而,如果您确定数据是某种指数衰减,您可以尝试先取对数,然后再使用polyfit函数。我认为这样会起作用。

0

线性化,最小二乘法,去线性化 :-)


你说得对,虽然我认为可能有一个可以自动完成这个任务的包,但手动完成可能比寻找它更省时间 :) - Ingo
这个回答很简短,但我从-1点赞它,因为它对于没有曲线拟合工具箱的用户非常有帮助。 - FvD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接