Exemplo n.º 1
0
Polynomial Laguerre(unsigned i)
{
    if(i==0)
        return Polynomial({1.0f});
    else if(i==1)
        return Polynomial({1.0f, -1.0f});
    else
        return (Laguerre(i-1)*Polynomial({2.0f*(i-1)+1.0f, -1.0f})-Laguerre(i-2)*float(i-1))/float(i);
}
Exemplo n.º 2
0
/* find all roots */
void CLPCAnal::AllRoots(COMPLEX *ap,int m,COMPLEX *roots)
{
	int	k,j,i;
	COMPLEX	x,bp,c;
	COMPLEX ad[MAXPOLY];

	for (j=0;j<=m;j++) ad[j] = ap[j];

	for (j=m;j>=1;j--) {
		/* find root */
		x = CMake(0.0,0.0);
		Laguerre(ad,j,&x);
		if (fabs(x.im) <= (IM_RANGE*fabs(x.re))) 
			x.im = 0.0;
		roots[j] = x;

		/* deflation */
		bp = ad[j];
		for (k=j-1;k>=0;k--) {
			c = ad[k];
			ad[k] = bp;
			bp = CAdd(CMult(x,bp),c);
		}
	}

	/* sort into increasing root.real */
	for (j=2;j<=m;j++) {
		x = roots[j];
		i = j;
		while ((i > 1) && (x.re < roots[i-1].re)) {
			roots[i] = roots[i-1];
			i = i - 1;
		}
		roots[i] = x;
	}
}
Exemplo n.º 3
0
double motional_rabi_factor(int n1, int n2, double z0, double k)
{
   //see Experimental Issues, Eq. 18, section 2.3.1
   double eta = z0*k;
   return exp(-0.5*eta*eta) * sqrt(factorial(n1)/ factorial(n2)) * pow(eta,(int)(n2-n1)) * fabs(Laguerre(n1, n2-n1, eta*eta));
}
Exemplo n.º 4
0
main()
{
    short m;
    double abscis[N];
    double  wt[N];
    double left, right;


    printf("Table 25.8, k= %1d, n=%1d\n\n", k, N);
    Jacobi(N, FLOATk, ZERO, abscis, wt);
    for (m=0; m<N; m++) wt[m] /= (k+1);
    
    for (m=0; m<N; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nTable 25.4, n=9\n\n");
    Radau_Jacobi(4, -0.5, ZERO, abscis, wt, &left);
    left *= 2;
    for (m=0; m<4; m++) abscis[m]= sqrt(abscis[m]);

    printf("%2d %20.18g %20.18g\n", 0, ZERO, left);
    for (m=0; m<4; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nTable 25.9, n= %1d\n\n", N);
    Laguerre(N, ZERO, abscis, wt);

    for (m=0; m<N; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nTable 25.10, n= %1d\n\n", N);
    Hermite(N, ZERO, abscis, wt);

    for (m=0; m<N; m++) wt[m] *= SqrtPI;
    for (m=0; m<N; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nSame, n= %1d\n\n", 2*N);
    Even_Hermite(2*N, ZERO, abscis, wt);
    for (m=0; m<N; m++) wt[m] *= SqrtPI;
    for (m=0; m<N; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nSame, n= %1d\n\n", 9);
    Odd_Hermite(9, ZERO, abscis, wt, &left);
    left *= SqrtPI;
    for (m=0; m<4; m++) wt[m] *= SqrtPI;

    printf("%2d %20.18g %20.18g\n", 0, ZERO, left);
    for (m=0; m<4; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nTable 25.6, n= %1d\n\n", N+1);
    Lobatto_Jacobi(N-1, ZERO, ZERO, abscis, wt, &left, &right);

    for (m=0; m<(N-1); m++) wt[m] *= 2;
    left *= 2;  right *= 2;
    for (m=0; m<(N-1); m++) abscis[m] = (2*abscis[m] - 1);

    printf("   %20.18g %20.18g\n", -1.0, left);
    for (m=0; m<(N-1); m++)
	printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    printf("   %20.18g %20.18g\n",  1.0, right);
}