CalculateCurveParameter(&dx,&dy,M,N,A)

解决方案 »

  1.   

     谢谢楼上大侠,但是还有错误,请再帮忙看看,谢谢!float A[2];
     CalculateCurveParameter(&dx,&dy,M,N,A);//还是出现错误
     cout<<A;error C2664: 'CalculateCurveParameter' : cannot convert parameter 5 from 'float [2]' to 'class CArray<double,double> *'
      

  2.   

    得到一个师兄的帮助,已经能用了,开心,发上来://#include <afxtempl.h>#include<iostream.h>
    #include<fstream.h>//最小二乘法曲线拟合 
     
     void CalculateCurveParameter(double X[],double Y[],long M,long N,double A[])
    {
     //X,Y --  X,Y两轴的坐标
     //M   --  结果变量组数
     //N   --  采样数目
     //A   --  结果参数  long i,j,k;
     double Z,D1,D2,C,P,G,Q;
     double *B;
     double *T;
     double *S; B=new double(N);
     T=new double(N);
     S=new double(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;
    }
    void main()
    {
    int i;
    double *a;
    double *b;
        long M=3;
        long N=3;
    a=new double[M];
    b=new double[N];   //************输入数据***************//
        ifstream infp;
        infp.open ("input.txt",ios::in);
        //检查文件是否存在
    if (!infp)
    {
    cout<<"That file does not exist\n";

    }

    for(i=0;i<N;i++)
    {
    infp>>a[i];         //读入起始节点编号
    }
    for(i=0;i<N;i++)
    {
    infp>>b[i];     //读入终止节点编号
    }
    infp.close();
        double *A;
        A=new double[3];    CalculateCurveParameter(a,b,M,N,A);
       
    for(int tt=0;tt<3;tt++)
    {
        cout<<A[tt]<<endl;
    }
    ofstream outfp;
        outfp.open ("output.txt",ios::out);
    outfp<<" 双曲线拟合系数计算结果:\n "; for(int t=0;t<3;t++)
    {
        outfp<<"系数A["<<t<<"]="<<A[t]<<endl;
    }  outfp<<"方程组Y="<<A[0]<<"*X2+"<<A[1]<<"*X+"<<A[2]<<endl;

        outfp.close();

    }
      

  3.   

    拟合的方面很多吧:
    Nurbs、B样条、贝塞尔和波浪线
    一般网上都有例子