static double kaiser(double beta, int M, int n)
{
	if (M == 1)
		return 1.;

	if (fabs((double)n / (double)M - 0.5) >= 0.5)
		return 0.;

	return bessel_I0(beta * sqrt(1. - pow(2. * (double)n / (double)M - 1., 2.)))
		/ bessel_I0(beta);
}	
Exemple #2
0
real gdisk(real r)
{
  real x1 = 0.5 * alpha1 * r, x2 = 0.5 * alpha2 * r, a1, a2;;

  if (epsilon1 >= 0.0)				/* compute smoothed accel.  */
    a1 = - mdisk1 * rqbe(alpha1) *
      simpson(dgdisk, r, alpha1, epsilon1, 0, KMAX*alpha1, STEP*alpha1);
  else						/* use exact expression     */
    a1 = - mdisk1 * rqbe(alpha1) *
      r * (bessel_I0(x1) * bessel_K0(x1) - bessel_I1(x1) * bessel_K1(x1)) / 2;
  if (epsilon2 >= 0.0)
    a2 = - mdisk2 * rqbe(alpha2) *
      simpson(dgdisk, r, alpha2, epsilon2, 0, KMAX*alpha2, STEP*alpha2);
  else
    a2 = - mdisk2 * rqbe(alpha2) *
      r * (bessel_I0(x2) * bessel_K0(x2) - bessel_I1(x2) * bessel_K1(x2)) / 2;
  return (a1 + a2);	       
}