home *** CD-ROM | disk | FTP | other *** search
- lgpol(n,d)
-
- /* this function computes the coefficients for Legendre */
- /* polynomials of degree n. */
-
- int n;
- double d[];
-
- {
- int i,im,j,m,n1,n2,nk,nt,nu;
- double b,bn,dt,p,s,v;
-
- p = n;
- n2 = n - 1;
-
- if(n2 < 0)
- {
- d[0] = 1.;
- return;
- }
-
- if(n2 == 0)
- {
- d[0] = 1.;
- d[1] = 0.;
- return;
- }
-
- n1 = n + 1;
- nt = n + n2;
- bn = n1/2.;
- im = bn;
- v = 2.;
-
- for(i = 3; i <= n; i++)
- v = v * i;
-
- s = 3.;
- for(i = 5; i <= nt; i+=2)
- s = s * i;
-
- d[0] = s / v;
- nu = n1;
- nk = n;
-
- for(i = 1; i <= im; i++)
- {
- nu = nu - 2;
- if(nu > 0)
- {
- j = n1 - nu;
- d[j-1] = 0.;
- }
- m = nk;
- v = m;
- nk = nk - 2;
- if(nk <= 0) break;
- j = n1 - m;
- dt = d[j-1];
- dt = (v * (v-1.) * dt)/((p - v +2.) * (p + v-1.));
- j = n1 - nk;
- d[j-1] = -dt;
- }
- d[n1-1] = - d[n2-1]/(p * bn);
- }
-