Esempio n. 1
0
File: psi.c Progetto: gaow/kbac
/* psi(z) for large |z| in the right half-plane; [Abramowitz + Stegun, 6.3.18] */
static
gsl_complex
psi_complex_asymp(gsl_complex z)
{
  /* coefficients in the asymptotic expansion for large z;
   * let w = z^(-2) and write the expression in the form
   *
   *   ln(z) - 1/(2z) - 1/12 w (1 + c1 w + c2 w + c3 w + ... )
   */
  static const double c1 = -0.1;
  static const double c2 =  1.0/21.0;
  static const double c3 = -0.05;

  gsl_complex zi = gsl_complex_inverse(z);
  gsl_complex w  = gsl_complex_mul(zi, zi);
  gsl_complex cs;

  /* Horner method evaluation of term in parentheses */
  gsl_complex sum;
  sum = gsl_complex_mul_real(w, c3/c2);
  sum = gsl_complex_add_real(sum, 1.0);
  sum = gsl_complex_mul_real(sum, c2/c1);
  sum = gsl_complex_mul(sum, w);
  sum = gsl_complex_add_real(sum, 1.0);
  sum = gsl_complex_mul_real(sum, c1);
  sum = gsl_complex_mul(sum, w);
  sum = gsl_complex_add_real(sum, 1.0);

  /* correction added to log(z) */
  cs = gsl_complex_mul(sum, w);
  cs = gsl_complex_mul_real(cs, -1.0/12.0);
  cs = gsl_complex_add(cs, gsl_complex_mul_real(zi, -0.5));

  return gsl_complex_add(gsl_complex_log(z), cs);
}
Esempio n. 2
0
gsl_complex gsl_complex_log_b(gsl_complex a, gsl_complex b)
{
    return gsl_complex_div(gsl_complex_log(a), gsl_complex_log(b));
}
Esempio n. 3
0
gsl_complex gsl_complex_log10(gsl_complex a)
{				/* z = log10(a) */
    return gsl_complex_mul_real(gsl_complex_log(a), 1 / log(10.));
}
Esempio n. 4
0
 /** Logarithm of a complex number (base e)
 \ingroup complex
 \param[in] z Complex number
 \return \f$ \log z \f$*/
 complex log(const complex& z)
 {
   return complex(gsl_complex_log(z.as_gsl_type()));
 }