vansen 发表于 2008-7-29 16:22

一道关于曲线拟合的例题

1、 关于y=f(x)有一些观测数据
   x=-2*pi:0.1*pi:2*pi,时
    相应的函数值为
   y =[ 0.00000.87261.38031.38761.04900.66670.4612
            0.43650.42930.2848 -0.0000 -0.2848 -0.4293 -0.4365
         -0.4612 -0.6667 -1.0490 -1.3876-1.3803 -0.8726   0
             0.87261.38031.38761.04900.66670.46120.4365
             0.42930.28480.0000 -0.2848 -0.4293 -0.4365 -0.4612
         -0.6667 -1.0490 -1.3876 -1.3803 -0.8726 -0.0000 ];
2、 通过plot(x,y)绘图
    x = -2*pi:0.1*pi:2*pi;
    y = [0.00000.87261.38031.38761.04900.66670.4612...
         0.43650.42930.2848 -0.0000 -0.2848 -0.4293 -0.4365 ...
          -0.4612 -0.6667 -1.0490 -1.3876-1.3803 -0.8726   0   ...
         0.87261.38031.38761.04900.66670.46120.4365...
         0.42930.28480.0000 -0.2848 -0.4293 -0.4365 -0.4612...
          -0.6667 -1.0490 -1.3876 -1.3803 -0.8726 -0.0000];
   plot(x,y,'+')
   hold on
   plot(x,y,'g')
3、观察图形,,发现很像sin,cos那样的周期振荡函数
    尝试选择拟合函数 f(x)=c1*sin(x)+c2*sin(2*x)+c3*sin(3*x)
    希望选择合适的c1,c2,c3, s.t. δ=Σ(f(xi)-yi)^2达到最小。
    注意,这里的x,y 均是已知数构成的向量;c1,c2,c3才是待定的。
    即 δ=Σ(f(xi)-yi)^2=g(c1,c2,c3).
    拟合问题转化为 求min{δ=g(c1,c2,c3)}
4、因为 δ=g(c1,c2,c3)是c1,c2,c3的元函数,所以可通过求偏导数
       δ'c1,δ'c2,δ'c3,并令
         δ'c1=0
         δ'c2=0         
         δ'c3=0,联立解出c1,c2,c3.
5、使用Matlab求解
    第一步:建立m文件
function p=stu(c,x)
p=c(1)*sin(x)+c(2)*sin(2*x)+c(3)*sin(3*x);
    第二步:在工作区输入,c1,c2,c3的估计值,如
c=
    第三步:调用
p=lsqcurvefit('stu',c,x,y)   
    第四步:绘图检验拟合函数与观测数据的接近程度
plot(x,y,'r+',x,p(1)*sin(x)+p(2)*sin(2*x)+p(3)*sin(3*x),'g')
   

sogooda 发表于 2008-7-30 16:13

回复 楼主 的帖子

楼主是原创吗?

vansen 发表于 2008-7-31 19:41

不是的,是我师兄给我的资料,正好那天有人问关于曲线拟合的问题,就一并发上来跟大家分享下!

sogooda 发表于 2008-8-1 10:44

回复 3楼 的帖子

没关系的,很不错的曲线拟合例子,相信对要做曲线拟合的朋友会有很大帮助的。
页: [1]
查看完整版本: 一道关于曲线拟合的例题