登录论坛

查看完整版本 : [求助]曲线拟合


mj1018
2008-06-17, 13:53
已知方程y=a+b*cos(x-c)
给定y和x,怎么用matlab拟合出a,b,c啊
本人刚学matlab,还请各位高手帮忙啊:lovely:

watcher
2008-06-17, 15:56
将cos(x-c)展开,原式变为
y=a+b*cos(c)*cos(x)+b*sin(c)*sin(x)
假设A=a,B=b*cos(c),C=b*sin(c),Xc=cos(x),Xs=sin(x)那么又有
y=A+B*Xc+C*Xs=[1,Xc,Xs]*[A;B;C];
由于x,y已知,即y,Xc,Xs已知;对于多个采样,问题又变为
Y=X*[A;B;C];%方程1
其中,Y=[y1;y2;...]是列向量,X=[1,Xc1,Xs1;1,Xc2,Xs2;...]是n行三列矩阵,n是采样个数。
这时,原问题变为求解方程1,待求量为A,B,C。A,B,C的一般表达式为
[A;B;C]=IX*Y;
这里IX是矩阵X的广义逆。在matlab中函数LSCOV(...)用于解决最小二乘广义逆,写法为
[A;B;C]=lscov(X,Y);%基于最小二乘的广义逆,不知合不合LZ要求,其它广义逆函数请查找帮助
求得A,B,C后,即可唯一解出a,b,c

vincent
2008-06-18, 09:33
可以按照二楼的试一下

fanxing39
2008-06-18, 23:58
不错哦, 2楼的把 最小二乘法拟合,用的挺不错的嘛:redface:

mj1018
2008-06-23, 12:14
厉害,谢谢!!