#include /* Joel Heinrich February 10 2005 Returns Gauss-Laguerre quadrature abscissas and log(weights) which can be used to approximate integral u=0 to infinity pow(u,alpha)*exp(-u)*f(u) du as sum k=0 to n-1 exp(lw[k])*f(x[k]) or equivalently sum k=0 to n-1 exp(lw[k]+log(f(x[k]))) The quadrature is exact for polynomial f of degree 2n-1 or less. */ void gausslaguerre(double x[],double lw[],int n,double alpha){ const int nshift = 20; const double shift = 1<0) { p1=1; p2=0; nscale=0; z -= dz; for(j=1;j<=n;++j){ const double p3=p2; p2=p1; p1=((2*j-1+alpha-z)*p2 - (j-1+alpha)*p3)/j; if(fabs(p2)>shift) { ++nscale; p1 *= rshift; p2 *= rshift; } } dz = p1*z/(n*p1-(n+alpha)*p2); if(fabs(dz)<1.0e-10*z)--k; } x[i]=z; lw[i] = log(z/(p2*p2)) - 2*nshift*nscale*M_LN2 ; } { double t = 0.0; for(i=n-1;i>=0;--i) t += exp(lw[i]); t = lgamma(alpha+1)-log(t); for(i=0;i