用户操作
[即时聊天] [发私信] [加为好友]
谢震宇ID:breath
11019次访问,排名10231(1)好友0人,关注者3
享受工作、享受生活
breath的文章
原创 10 篇
翻译 0 篇
转载 0 篇
评论 12 篇
最近评论
hoozh:楼上的看看日期

breath发表于 2000年12月29日 00:51:00
jiazhen:放空炮,做广告么?怎么下不了
瓦工:怎么搞不下来啊,breath 帮个忙啊!
瓦工:怎么搞不下来啊,breath 帮个忙啊!
jiey:不知道函数后面三个参数是什么意思?breath的邮箱是多少哦,想请教个这个问题
文章分类
    收藏
      相册
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 最小二乘法曲线拟合收藏

      新一篇: 优化了的过关键点的光滑曲线拟合算法的修正(一个链表的定义) | 旧一篇: 最小二乘法直线拟合

      //最小二乘法曲线拟合
      typedef CArray<double,double>CDoubleArray;
      BOOL CalculateCurveParameter(CDoubleArray *X,CDoubleArray *Y,long M,long N,CDoubleArray *A)
      {
       //X,Y --  X,Y两轴的坐标
       //M   --  结果变量组数
       //N   --  采样数目
       //A   --  结果参数

       register long i,j,k;
       double Z,D1,D2,C,P,G,Q;
       CDoubleArray B,T,S;
       B.SetSize(N);
       T.SetSize(N);
       S.SetSize(N);
       if(M>N)M=N;
       for(i=0;i<M;i++)
        (*A)[i]=0;
       Z=0;
       B[0]=1;
       D1=N;
       P=0;
       C=0;
       for(i=0;i<N;i++)
       {
        P=P+(*X)[i]-Z;
        C=C+(*Y)[i];
       }
       C=C/D1;
       P=P/D1;
       (*A)[0]=C*B[0];
       if(M>1)
       {
        T[1]=1;
        T[0]=-P;
        D2=0;
        C=0;
        G=0;
        for(i=0;i<N;i++)
        {
         Q=(*X)[i]-Z-P;
         D2=D2+Q*Q;
         C=(*Y)[i]*Q+C;
         G=((*X)[i]-Z)*Q*Q+G;
        }
        C=C/D2;
        P=G/D2;
        Q=D2/D1;
        D1=D2;
        (*A)[1]=C*T[1];
        (*A)[0]=C*T[0]+(*A)[0];
       }
       for(j=2;j<M;j++)
       {
        S[j]=T[j-1];
        S[j-1]=-P*T[j-1]+T[j-2];
        if(j>=3)
        {
         for(k=j-2;k>=1;k--)
          S[k]=-P*T[k]+T[k-1]-Q*B[k];
        }
        S[0]=-P*T[0]-Q*B[0];
        D2=0;
        C=0;
        G=0;
        for(i=0;i<N;i++)
        {
         Q=S[j];
         for(k=j-1;k>=0;k--)
          Q=Q*((*X)[i]-Z)+S[k];
         D2=D2+Q*Q;
         C=(*Y)[i]*Q+C;
         G=((*X)[i]-Z)*Q*Q+G;
        }
        C=C/D2;
        P=G/D2;
        Q=D2/D1;
        D1=D2;
        (*A)[j]=C*S[j];
        T[j]=S[j];
        for(k=j-1;k>=0;k--)
        {
         (*A)[k]=C*S[k]+(*A)[k];
         B[k]=T[k];
         T[k]=S[k];
        }
       }
       return TRUE;
      }

      发表于 @ 2000年12月22日 03:14:00|评论(loading...)|编辑

      新一篇: 优化了的过关键点的光滑曲线拟合算法的修正(一个链表的定义) | 旧一篇: 最小二乘法直线拟合

      评论

      #jiey 发表于2005-08-10 11:57:00  IP: 61.186.252.*
      不知道函数后面三个参数是什么意思?breath的邮箱是多少哦,想请教个这个问题
      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © breath