多项式拟合的根老是不好求?MATLAB里的polyfit
你已经用得滚瓜烂熟,但碰到高阶多项式,数值不稳定真让人头大。polyfitroots就挺适合你这种场景,直接帮你把根求出来,比自己倒腾稳多了。
polyfit_roots_drv.m
是主程序,像个调度员一样,把你的数据传进去,再把结果整出来。写个脚本,调用它就行,逻辑清晰,接口也还挺好用。
核心算法在polyfit_roots.m
,它不像原生polyfit
那样只给系数,而是上来就帮你把根算好。你要是搞过数值方法,看到它用了牛顿法或者迭代法估计会会心一笑,挺地道的思路。
还有个arnoldi.m
也挺有料,它用的是阿诺尔迪迭代法,搞过稀疏矩阵的肯定熟。目的是帮你搞 Krylov 子空间,从而更高效求解特征值,大规模问题就靠它了。
要验证拟合效果,可以用polyval_roots.m
来看看多项式在某些点上的值。你要画个图、残差,这个函数还蛮实用的。
文档也准备得比较齐全,license.txt
是开源协议,html
文档可以快速上手。建议你先跑一遍例子,再结合源码理解逻辑。
如果你常在做高阶拟合、信号或系统辨识,polyfitroots确实是个不错的工具。直接拿根用,比手动解多项式靠谱多了。