作者kusobike ()
看板MATLAB
标题Re: [讨论] fitting
时间Sat Sep 22 22:31:54 2012
※ 引述《a0952028698 (泰劳)》之铭言:
: 版上的各位高手大家好
: 小弟在处理磁滞效应的时候遇到了一些问题
: 简单来说假如我现在有两组data
: 我在输入电压时1~20v
: 因为磁滞效应所以可能两次得到的结果会不一样
: 就像是同样我输入x=1:20
: 却得到两组
: 比如说第一次y1=1:20和第二次却得到y2=11:20这样
: 那我想要以一个f(x)=ax^2+bx+c
: 来表达得到这两组data的一个较好的回归曲线
: fit出a b和c
: 乍看之下因为同1个x却得到两个y
: 这违反了函数的基本定义
: 搞得我不知道从何下手polyfit 以及linsquare好像都不太能
: 不知道该怎麽办
: 於是上来请教各位
: 谢谢大家
我不是Matlab使用者,我使用的是Scilab,
所以我不清楚Matlab提供的polyfit与linsquare这两个拟合函式的使用方法
不过,曲线拟合的原理是共通的,大致分为两种
(以下是我的印象,供参考)
direct fitting & indirect fitting
从你的文章来看,使用的是indirect fitting,
也就是求 min(sum((Y_i - y_i)^2)))
Y_i 是数据点,y_i是拟合曲线的值
我进一步推测,你遇到的问题受限於内建涵式本身的功能不合用
换言之,内建涵式是用来拟合"一组"数据点,但是你要拟合的数据点为多组
以下有两个建议方向
1.仔细阅读Matlab手册,或许polyfit与linsquare能拟合多组数据
2.自己写,或者套用最佳化演算法,求min(sum((Y_i - y_i)^2)))
因为拟合多组数据与一组数据,差异仅在於(Y_i-y_i)的数量不同而已
(後续以delta_Y表示)
若卡在内建涵式无法最小化多组数据的delta_Y,只好自己兜出一套求解器拉
如果你有Matlab最佳化演算法工具箱,如遗传演算法,可以朝此方向下手
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 221.169.218.131
1F:推 a0952028698:已经解决。感谢您 09/27 10:59