home *** CD-ROM | disk | FTP | other *** search
- stplrg(m,x,y,n,c,iflag,a)
-
- /* this function will fit a polynomial of degree n */
- /* to m observations, by the method of least squares. */
-
- int *iflag,m,n;
- float a[],c[],x[],y[];
-
- {
- int i,ij,in1,n1,n2,nc,nnpn,n1n1,n1n2,j,l,k,jnp2,im1jp1,
- iiflag;
- float xpwr;
-
- n1 = n + 1;
- n2 = n1 + 1;
- nnpn = n-1 + n * n2;
- n1n1 = n + n * n2;
- n1n2 = n1 * n2 -1;
-
- ij = (n * n2);
- for(j = 0; j <= ij; j+=n2)
- {
- for(i = 0; i <= n1; i++)
- {
- k = j + i;
- a[k] = 0.;
- }
- }
-
- for(k = 1; k <= m; k++)
- {
- xpwr = x[k-1];
- for(j = 1; j <= n; j++)
- {
- jnp2 = n1 + j * n2;
- a[j] = a[j] + xpwr;
- a[jnp2] = a[jnp2] + xpwr * y[k-1];
- xpwr = xpwr * x[k-1];
- }
- for(i = 1; i <= n; i++)
- {
- in1 = n + i * n2;
- a[in1] = a[in1] + xpwr;
- xpwr = xpwr * x[k-1];
- }
- a[n1] = a[n1] + y[k-1];
- }
- a[0] = m;
- for(i = n2; i <= n*n2; i+=n2)
- {
- ij = i;
- for(j = 0; j <= n-1; j++)
- {
- im1jp1 = ij + 1 - n2;
- a[ij] = a[im1jp1];
- ij = ij + 1;
- }
- }
- nc = -n2;
- matinv(&iiflag,&iiflag,n1,nc,a,n2,i,xpwr);
- *iflag = iiflag;
- k = n1n2;
- for(i = 0; i <= n; i++)
- {
- c[i] = a[k];
- k = k - n2;
- }
- }