/************************************************************************* * lsm.c * * Least square method library * * makecint -A -dl lsm.sl -c lsm.c * *************************************************************************/ #define G__LSMSL /************************************************************************* * Least Square method * * Input : * double x[n],y[n] : arbitrary data points * int n : number of data point * int m : polinominal order 1 <= m <= 20 * * Output : * double c[m+1] : y=c[m]*x^m + c[m-1]*x^(m-1) .... c[1]*x + c[0] * * Return : * 0 : success * -1 : m>=n || m<1 || m>20 * *************************************************************************/ int lstsq(double x[],double y[],int n,int m,double c[]) { int mp1,mp2,m2,i,j,k,l; double w1,w2,w3,pivot,aik,a[21][22],w[42]; /* Invalid condition check */ if(m>=n || m<1 || m>20) return(-1); /* Set constants */ mp1 = m+1; mp2 = m+2; m2 = 2*m; for(i=0;i