C实现的多项式拟合函数

整理自《C常用算法程序集》 作者 徐士良 清华大学出版社 8.1最小二乘曲线拟合

 typedef CArrayCDoubleArray;
 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;i1)
	{
		T[1]=1;
		T[0]=-P;
		D2=0;
		C=0;
		G=0;
		for(i=0;i=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=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;
}

例子:
M=3; 表示3次多项式;
x作为数据点之外的一个自变量,其对应的函数值:
y = (int)(A[0]+A[1]*x+A[2]*x*x+A[3]*x*x*x);

你可能感兴趣的:(数学理论)