找回密码
 注册
Simdroid-非首页
查看: 137|回复: 6

Matlab 幂函数拟合

[复制链接]
发表于 2014-7-16 16:47:21 | 显示全部楼层 |阅读模式 来自 辽宁沈阳

在Matlab中,幂函数(y=ax^b)拟合,除了取对数线性拟合然后再用指数还原的方法外,
c1=polyfit(log(x),log(y),1);
y1=exp(c1(2))*(x1.^c1(1));

还有其它的方法吗?用这种方法跟Origin计算的结果对比,有一些误差,大的时候会达到5%。
期待解答,谢谢!


发表于 2014-7-16 20:11:04 | 显示全部楼层 来自 加拿大
Simdroid开发平台
你可以用非线性拟合方式,matlab 多个工具箱都提供了解决方案:如曲线拟合工具箱的 fit 函数、优化工具箱的的 lsqcurvefit 系列,还有统计工具箱的 nlinfit。这些解决方案都支持自定义函数拟合,只不过你需要提供拟合初值。你可以先用你上述的线性拟合方法获得的结果作为非线性拟合的初值试试
回复 不支持

使用道具 举报

 楼主| 发表于 2014-7-16 21:15:18 | 显示全部楼层 来自 辽宁沈阳
本帖最后由 huangzhiye 于 2014-7-16 21:19 编辑
winner245 发表于 2014-7-16 20:11
你可以用非线性拟合方式,matlab 多个工具箱都提供了解决方案:如曲线拟合工具箱的 fit 函数、优化工具箱的 ...

谢谢 winner245 的回复,
麻烦您可以推荐一些关于 “fit函数、lsqcurvefit系列、nlinfit” 的学习教材或者网上的教程吗?我的数据只有4个实测值点,基本符合幂函数规律,选用哪个函数系列更合适些。本人初学,Matlab很多函数不太熟悉,谢谢!
回复 不支持

使用道具 举报

发表于 2014-7-16 23:02:22 | 显示全部楼层 来自 加拿大
huangzhiye 发表于 2014-7-16 21:15
谢谢 winner245 的回复,
麻烦您可以推荐一些关于 “fit函数、lsqcurvefit系列、nlinfit” 的学习教材或者 ...

我是对照着 help 文档学习这些函数的
如果照你说的 4 个实测点,可能数据量太少了,仅仅根据4个点就断定数据一定符合幂函数关系,可能有点武断。这个跟你采用什么拟合函数无关,建议加大数据量再做拟合
回复 不支持

使用道具 举报

发表于 2014-7-17 08:36:52 | 显示全部楼层 来自 北京
同意4楼的建议,多采集一些数据,采用回归加验证的方式,结果更具有一定概率的准确性
建议用nlinfitb函数,有提高鲁棒性的算法,结果更具有说服力,关键还是在初值的选择上

既然你已经有心中的结果了,可以作为初值就事半功倍了

即使是变换后线性拟合,你可以试试regress函数,看结果是否精确一些
回复 不支持

使用道具 举报

发表于 2014-7-18 18:49:17 | 显示全部楼层 来自 加拿大
ljelly 发表于 2014-7-17 08:36
同意4楼的建议,多采集一些数据,采用回归加验证的方式,结果更具有一定概率的准确性
建议用nlinfitb函数, ...

请问版主,非线性拟合中初值一般根据什么原则选取呢?如何才能得到比较 “合适” 的初值呢?诚心向版主求教
回复 不支持

使用道具 举报

发表于 2014-7-19 00:14:53 | 显示全部楼层 来自 新疆乌鲁木齐
李某人的意思我揣测是初值选择更多依赖于使用者对问题本身的熟悉,如果是全新的问题,一般问题大家更多会采用1stopt这种无初值的“暴力”办法,如果实在是数学函数写不出来,恐怕还是要看作者的数学直觉。或:吴鹏当时探讨过采用随机行走法,直觉上貌似有些“随机靶点”蒙特卡洛的味道。随口猜,未必对。那篇帖子当时用不上,没细看:lol
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 09:38 , Processed in 0.039948 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表