home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-SSP.ARJ / LGPOL.C < prev    next >
Encoding:
Text File  |  1984-08-09  |  1.1 KB  |  67 lines

  1.    lgpol(n,d)
  2.  
  3.       /* this function computes the coefficients for Legendre  */
  4.       /* polynomials of degree n.                              */
  5.  
  6.       int n;
  7.       double d[];
  8.  
  9.     {
  10.       int i,im,j,m,n1,n2,nk,nt,nu;
  11.       double b,bn,dt,p,s,v;
  12.  
  13.       p = n;
  14.       n2 = n - 1;
  15.  
  16.       if(n2 < 0)
  17.       {
  18.        d[0] = 1.;
  19.        return;
  20.       }
  21.  
  22.       if(n2 == 0)
  23.       {
  24.        d[0] = 1.;
  25.        d[1] = 0.;
  26.        return;
  27.       }
  28.  
  29.       n1 = n + 1;
  30.       nt = n + n2;
  31.       bn = n1/2.;
  32.       im = bn;
  33.       v = 2.;
  34.  
  35.       for(i = 3; i <= n; i++)
  36.        v = v * i;
  37.  
  38.       s = 3.;
  39.       for(i = 5; i <= nt; i+=2)
  40.        s = s * i;
  41.  
  42.       d[0] = s / v;
  43.       nu = n1;
  44.       nk = n;
  45.  
  46.       for(i = 1; i <= im; i++)
  47.       {
  48.        nu = nu - 2;
  49.        if(nu > 0)
  50.        {
  51.         j = n1 - nu;
  52.         d[j-1] = 0.;
  53.        }
  54.        m = nk;
  55.        v = m;
  56.        nk = nk - 2;
  57.        if(nk <= 0) break;
  58.        j = n1 - m;
  59.        dt = d[j-1];
  60.        dt = (v * (v-1.) * dt)/((p - v +2.) * (p + v-1.));
  61.        j = n1 - nk;
  62.        d[j-1] = -dt;
  63.       }
  64.        d[n1-1] = - d[n2-1]/(p * bn);
  65.     }
  66.  
  67.