45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样拟合最小二乘法曲线?

怎么样拟合最小二乘法曲线?

2016-08-25 18:48:25 来源:www.45fan.com 【

怎么样拟合最小二乘法曲线?

//最小二乘法曲线拟合

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 longi,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];

}

}

return TRUE;

}

本文地址:http://www.45fan.com/a/question/67603.html
Tags: 曲线 最小 乘法
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部