如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
最小二乘法曲线拟合:typedefCArray<double,double>CDoubleArray;BOOLCalculateCurveParameter(CDoubleArray*X,CDoubleArray*Y,longM,longN,CDoubleArray*A){//X,Y--X,Y两轴的坐标//M--结果变量组数//N--采样数目//A--结果参数,从低次到高次registerlongi,j,k;doubleZ,D1,D2,C,P,G,Q;CDoubleArrayB,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];}}returnTRUE;}使用示例:曲线:y=2x^2+1CDoubleArraydx;CDoubleArraydy;dx.Add(-1.0);dx.Add(0.0);dx.Add(1.0);dy.Add(3.0);dy.Add(1.0);dy.Add(3.0);CDoubleArraydr;dr.Add(0.0);dr.Add(0.0);dr.Add(0.0);CalculateCurveParameter(&dx,&dy,3,3,&dr);TRACE("%f,%f,%f",dr[0],dr[1],dr[2]);输出为1,0,2