/*Functtion :多项式拟合polyfit **********************************************/ #include //#include #include #include #include "wm_mem.h" void polyfit_verify(double x, double* a) { double y1 = a[1]*x + a[0]; printf("x=%d, y1=%d\n", (int)x, (int)(y1+0.5)); } /*==================polyfit(n,x,y,poly_n,a)===================*/ /*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/ /*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*/ /*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====*/ void polyfit(int n,double x[],double y[],int poly_n,double a[]) { int i,j; double *tempx,*tempy,*sumxx,*sumxy,*ata; void gauss_solve(int n,double A[],double x[],double b[]); tempx=tls_mem_calloc(n,sizeof(double)); sumxx=tls_mem_calloc(poly_n*2+1,sizeof(double)); tempy=tls_mem_calloc(n,sizeof(double)); sumxy=tls_mem_calloc(poly_n+1,sizeof(double)); ata=tls_mem_calloc((poly_n+1)*(poly_n+1),sizeof(double)); for (i=0;i=0;x[i]/=A[i*n+i],i--) for (j=i+1,x[i]=b[i];j