24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2583  |  回复: 10

water11

金虫 (正式写手)

[求助] MATLAB曲线拟合已有4人参与

请教大家一个用MATLAB进行曲线拟合的问题。
现有100行数据,每行3000个数据,其实就是一个3000*100的矩阵,希望找到一个指数函数与此相拟合。我用MATLAB画出了这100条曲线,可实在想不出对这些曲线拟合,找到一个与这些曲线相符的指数函数。请大家帮帮忙,万分感谢!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

meatball1982

铜虫 (小有名气)

我是以y=a*exp(x)+b作个例子,LZ具体的可以按自己的函数写。只要在定义函数那里修改就好。
如果LZ的不知道函数是什么形式,我的思路是多作几种,然后把100条线中,拟合效果最好的那个函数形式找出来 。

只作一咱函数形式的例子如下。

分三部分,生成数据,拟合,输出。
LZ是100条线,每条3000个点。
我的是5条线,每条10个点(省时)。

具体的程序如下,不明白matlab的函数看帮助。
我没说清楚的思路可以跟贴。

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : test_fit_diff_plot.m
  • 2014-01-15 11:17:26, 724 bytes
  • 附件 2 : dif_lines.jpg
  • 2014-01-15 11:17:40, 25.34 K
唉。还是学吧。
3楼2014-01-15 11:17:46
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

jsky1988

新虫 (小有名气)

引用回帖:
8楼: Originally posted by jsky1988 at 2014-01-15 22:55:43
最好确定一个有限长度的函数:
y=a(n)x^n+a(n-1)x^(n-1)+...a(0)x,n是有限的
然后采用最小二乘矩阵估计,求出各个系数,你简单计算一下矩阵方程,就很容易求出各个系数。。然后再matlab中通过矩阵求。。希望对你有 ...

忘了说一点,matlab中是有这个的拟合函数的,叫polyfit函数,你可以查查看它的原理。。
9楼2014-01-15 22:59:57
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

戴钢盔的猪头

木虫 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +1
jjdg: 感谢参与 2014-02-21 16:15:34
首先我觉得,用一条指数曲线拟合100条曲线,肯定是需要先将100行数据先求平均再进行处理的。这点同意七楼观点。其次,你怎么知道单一指数能拟合好?你必须对曲线进行半对数作图(semilogy)。如果半对数作图的结果显示接近一条直线才能认为可用单指数回归。否则,需要对数据进行拉普拉斯逆变换(ILT)。实际可用非负约束的吉洪诺夫正则化算法来分析指数成分。楼主方便的话可以把数据发上来,我帮你看看。

[ 发自手机版 http://muchong.com/3g ]
10楼2014-01-16 00:41:38
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

polypro

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
xzhdty: 谢谢参与 2014-01-15 09:00:36
water11: 金币+20, 有帮助 2014-01-15 19:59:17
指数函数有好多种,看你要用几个参数?对于这没多的拟合,建议可以用R-project编程算一下比较快。
泉涸,鱼相与处于陆,相呴以湿,相濡以沫,不如相忘于江湖。
2楼2014-01-15 08:11:54
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

mxlhit

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
water11: 金币+20, ★★★很有帮助 2014-01-15 19:58:50
还有一个简单的方法可以参考一下,就是你把数据放到EXCEL中,会自动拟合曲线,有个功能,然后你可以选择是拟合成几次的都可以改。
天行健,君子以自强不息。地势坤,君子以厚德载物
4楼2014-01-15 16:03:18
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

water11

金虫 (正式写手)

引用回帖:
3楼: Originally posted by meatball1982 at 2014-01-15 11:17:46
我是以y=a*exp(x)+b作个例子,LZ具体的可以按自己的函数写。只要在定义函数那里修改就好。
如果LZ的不知道函数是什么形式,我的思路是多作几种,然后把100条线中,拟合效果最好的那个函数形式找出来 。

只作一咱 ...

非常感谢回复。我看到了你的图,是5条拟合曲线,也就是对每条曲线进行拟合。 我需要的最终结果不是分别对每条线拟合来得到100条拟合曲线,而是找到一条指数曲线,使之与这100条曲线都拟合。请问你有其他的办法可以把你的这5条线拟合成一条吗?非常感谢。
5楼2014-01-15 19:56:15
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

water11

金虫 (正式写手)

引用回帖:
4楼: Originally posted by mxlhit at 2014-01-15 16:03:18
还有一个简单的方法可以参考一下,就是你把数据放到EXCEL中,会自动拟合曲线,有个功能,然后你可以选择是拟合成几次的都可以改。

非常感谢你的回复。EXCEL里可以自动拟合曲线吗?你说的是“添加趋势线”吗?这个我试过了,只能对单独一条线拟合。请问,你能不能说下你提到的具体是哪个功能?谢谢。
6楼2014-01-15 19:58:33
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

meatball1982

铜虫 (小有名气)

引用回帖:
5楼: Originally posted by water11 at 2014-01-15 19:56:15
非常感谢回复。我看到了你的图,是5条拟合曲线,也就是对每条曲线进行拟合。 我需要的最终结果不是分别对每条线拟合来得到100条拟合曲线,而是找到一条指数曲线,使之与这100条曲线都拟合。请问你有其他的办法可以 ...

我的思路是将所有的数据进行平均,然后 作一次曲线拟合。
具体的程序如下。

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : dif_oneline.jpg
  • 2014-01-15 20:24:00, 19.36 K
  • 附件 2 : test_fit_diff_plot.m
  • 2014-01-15 20:24:14, 1.11 K
唉。还是学吧。
7楼2014-01-15 20:24:31
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

jsky1988

新虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
water11: 金币+20 2014-02-13 07:13:19
最好确定一个有限长度的函数:
y=a(n)x^n+a(n-1)x^(n-1)+...a(0)x,n是有限的
然后采用最小二乘矩阵估计,求出各个系数,你简单计算一下矩阵方程,就很容易求出各个系数。。然后再matlab中通过矩阵求。。希望对你有帮助。。x^n级数是几乎可以通用的,当然你也可以拟合成傅里叶级数。。希望这个思路对你有帮助。。
8楼2014-01-15 22:55:43
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 water11 的主题更新
信息提示
请填处理意见