26#if defined (HAVE_CONFIG_H)
136 double zr = z.real ();
137 double zi = z.imag ();
148 Complex expz = exp (- 2.0 / 3.0 * z * sqrt (z));
150 double rexpz = expz.real ();
151 double iexpz = expz.imag ();
153 double tmp = ar*rexpz - ai*iexpz;
155 ai = ar*iexpz + ai*rexpz;
159 if (zi == 0.0 && (! scaled || zr >= 0.0))
178 retval(i, j) =
airy (z(i, j), deriv, scaled,
ierr(i, j));
194 retval(i) =
airy (z(i), deriv, scaled,
ierr(i));
213 float ar = a.real ();
214 float ai = a.imag ();
220 float rexpz = expz.real ();
221 float iexpz = expz.imag ();
223 float tmp = ar*rexpz - ai*iexpz;
225 ai = ar*iexpz + ai*rexpz;
229 if (z.imag () == 0.0 && (! scaled || z.real () >= 0.0))
248 retval(i, j) =
airy (z(i, j), deriv, scaled,
ierr(i, j));
264 retval(i) =
airy (z(i), deriv, scaled,
ierr(i));
272 return x ==
static_cast<double> (
static_cast<long> (
x));
305 double zr = z.real ();
306 double zi = z.imag ();
308 F77_FUNC (
zbesj, ZBESJ) (zr, zi, alpha, kode, 1, &yr, &yi, nz, t_ierr);
312 if (zi == 0.0 && zr >= 0.0)
322 if ((
static_cast<long> (alpha)) & 1)
334 tmp -= sin (M_PI * alpha) *
zbesy (z, alpha, kode,
ierr);
360 double zr = z.real ();
361 double zi = z.imag ();
365 if (zr == 0.0 && zi == 0.0)
372 F77_FUNC (
zbesy, ZBESY) (zr, zi, alpha, kode, 1, &yr, &yi, nz,
377 if (zi == 0.0 && zr >= 0.0)
388 if ((
static_cast<long> (alpha - 0.5)) & 1)
400 tmp += sin (M_PI * alpha) *
zbesj (z, alpha, kode,
ierr);
424 double zr = z.real ();
425 double zi = z.imag ();
427 F77_FUNC (
zbesi, ZBESI) (zr, zi, alpha, kode, 1, &yr, &yi, nz, t_ierr);
431 if (zi == 0.0 && zr >= 0.0)
451 Complex tmp2 = (2.0 / M_PI) * sin (M_PI * alpha)
457 tmp2 *= exp (-z -
std::abs (z.real ()));
484 double zr = z.real ();
485 double zi = z.imag ();
489 if (zr == 0.0 && zi == 0.0)
496 F77_FUNC (
zbesk, ZBESK) (zr, zi, alpha, kode, 1, &yr, &yi, nz,
501 if (zi == 0.0 && zr >= 0.0)
529 double zr = z.real ();
530 double zi = z.imag ();
532 F77_FUNC (
zbesh, ZBESH) (zr, zi, alpha, kode, 1, 1, &yr, &yi, nz,
565 double zr = z.real ();
566 double zi = z.imag ();
568 F77_FUNC (
zbesh, ZBESH) (zr, zi, alpha, kode, 2, 1, &yr, &yi, nz,
597 retval =
f (
x, alpha, (scaled ? 2 : 1),
ierr);
615 retval(i, j) =
f (
x(i, j), alpha, (scaled ? 2 : 1),
ierr(i, j));
633 retval(i, j) =
f (
x, alpha(i, j), (scaled ? 2 : 1),
ierr(i, j));
650 if (x_nr != alpha_nr || x_nc != alpha_nc)
651 (*current_liboctave_error_handler)
652 (
"%s: the sizes of alpha and x must conform", fn);
663 retval(i, j) =
f (
x(i, j), alpha(i, j), (scaled ? 2 : 1),
ierr(i, j));
679 retval(i) =
f (
x(i), alpha, (scaled ? 2 : 1),
ierr(i));
695 retval(i) =
f (
x, alpha(i), (scaled ? 2 : 1),
ierr(i));
707 if (dv != alpha.
dims ())
708 (*current_liboctave_error_handler)
709 (
"%s: the sizes of alpha and x must conform", fn);
717 retval(i) =
f (
x(i), alpha(i), (scaled ? 2 : 1),
ierr(i));
736 retval(i, j) =
f (
x(i), alpha(j), (scaled ? 2 : 1),
ierr(i, j));
741#define SS_BESSEL(name, fcn) \
743 name (double alpha, const Complex& x, bool scaled, octave_idx_type& ierr) \
745 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
748#define SM_BESSEL(name, fcn) \
750 name (double alpha, const ComplexMatrix& x, bool scaled, \
751 Array<octave_idx_type>& ierr) \
753 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
756#define MS_BESSEL(name, fcn) \
758 name (const Matrix& alpha, const Complex& x, bool scaled, \
759 Array<octave_idx_type>& ierr) \
761 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
764#define MM_BESSEL(name, fcn) \
766 name (const Matrix& alpha, const ComplexMatrix& x, bool scaled, \
767 Array<octave_idx_type>& ierr) \
769 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
772#define SN_BESSEL(name, fcn) \
774 name (double alpha, const ComplexNDArray& x, bool scaled, \
775 Array<octave_idx_type>& ierr) \
777 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
780#define NS_BESSEL(name, fcn) \
782 name (const NDArray& alpha, const Complex& x, bool scaled, \
783 Array<octave_idx_type>& ierr) \
785 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
788#define NN_BESSEL(name, fcn) \
790 name (const NDArray& alpha, const ComplexNDArray& x, bool scaled, \
791 Array<octave_idx_type>& ierr) \
793 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
796#define RC_BESSEL(name, fcn) \
798 name (const RowVector& alpha, const ComplexColumnVector& x, bool scaled, \
799 Array<octave_idx_type>& ierr) \
801 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
804#define ALL_BESSEL(name, fcn) \
805 SS_BESSEL (name, fcn) \
806 SM_BESSEL (name, fcn) \
807 MS_BESSEL (name, fcn) \
808 MM_BESSEL (name, fcn) \
809 SN_BESSEL (name, fcn) \
810 NS_BESSEL (name, fcn) \
811 NN_BESSEL (name, fcn) \
812 RC_BESSEL (name, fcn)
852 return x ==
static_cast<float> (
static_cast<long> (
x));
871 if (z.imag () == 0.0 && z.real () >= 0.0)
881 if ((
static_cast<long> (alpha)) & 1)
889 FloatComplex tmp = cosf (
static_cast<float> (M_PI) * alpha)
894 tmp -= sinf (
static_cast<float> (M_PI) * alpha)
922 if (z.real () == 0.0 && z.imag () == 0.0)
934 if (z.imag () == 0.0 && z.real () >= 0.0)
945 if ((
static_cast<long> (alpha - 0.5)) & 1)
953 FloatComplex tmp = cosf (
static_cast<float> (M_PI) * alpha)
958 tmp += sinf (
static_cast<float> (M_PI) * alpha)
987 if (z.imag () == 0.0 && z.real () >= 0.0)
1001 * sinf (
static_cast<float> (M_PI) * alpha)
1007 tmp2 *= exp (-z -
std::abs (z.real ()));
1035 if (z.real () == 0.0 && z.imag () == 0.0)
1046 if (z.imag () == 0.0 && z.real () >= 0.0)
1086 FloatComplex tmp = exp (
static_cast<float> (M_PI) * alpha * eye)
1119 FloatComplex tmp = exp (-
static_cast<float> (M_PI) * alpha * eye)
1137 retval =
f (
x, alpha, (scaled ? 2 : 1),
ierr);
1155 retval(i, j) =
f (
x(i, j), alpha, (scaled ? 2 : 1),
ierr(i, j));
1174 retval(i, j) =
f (
x, alpha(i, j), (scaled ? 2 : 1),
ierr(i, j));
1192 if (x_nr != alpha_nr || x_nc != alpha_nc)
1193 (*current_liboctave_error_handler)
1194 (
"%s: the sizes of alpha and x must conform", fn);
1205 retval(i, j) =
f (
x(i, j), alpha(i, j), (scaled ? 2 : 1),
ierr(i, j));
1221 retval(i) =
f (
x(i), alpha, (scaled ? 2 : 1),
ierr(i));
1237 retval(i) =
f (
x, alpha(i), (scaled ? 2 : 1),
ierr(i));
1250 if (dv != alpha.
dims ())
1251 (*current_liboctave_error_handler)
1252 (
"%s: the sizes of alpha and x must conform", fn);
1260 retval(i) =
f (
x(i), alpha(i), (scaled ? 2 : 1),
ierr(i));
1279 retval(i, j) =
f (
x(i), alpha(j), (scaled ? 2 : 1),
ierr(i, j));
1284#define SS_BESSEL(name, fcn) \
1286 name (float alpha, const FloatComplex& x, bool scaled, \
1287 octave_idx_type& ierr) \
1289 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
1292#define SM_BESSEL(name, fcn) \
1293 FloatComplexMatrix \
1294 name (float alpha, const FloatComplexMatrix& x, bool scaled, \
1295 Array<octave_idx_type>& ierr) \
1297 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
1300#define MS_BESSEL(name, fcn) \
1301 FloatComplexMatrix \
1302 name (const FloatMatrix& alpha, const FloatComplex& x, bool scaled, \
1303 Array<octave_idx_type>& ierr) \
1305 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
1308#define MM_BESSEL(name, fcn) \
1309 FloatComplexMatrix \
1310 name (const FloatMatrix& alpha, const FloatComplexMatrix& x, \
1311 bool scaled, Array<octave_idx_type>& ierr) \
1313 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
1316#define SN_BESSEL(name, fcn) \
1317 FloatComplexNDArray \
1318 name (float alpha, const FloatComplexNDArray& x, bool scaled, \
1319 Array<octave_idx_type>& ierr) \
1321 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
1324#define NS_BESSEL(name, fcn) \
1325 FloatComplexNDArray \
1326 name (const FloatNDArray& alpha, const FloatComplex& x, \
1327 bool scaled, Array<octave_idx_type>& ierr) \
1329 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
1332#define NN_BESSEL(name, fcn) \
1333 FloatComplexNDArray \
1334 name (const FloatNDArray& alpha, const FloatComplexNDArray& x, \
1335 bool scaled, Array<octave_idx_type>& ierr) \
1337 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
1340#define RC_BESSEL(name, fcn) \
1341 FloatComplexMatrix \
1342 name (const FloatRowVector& alpha, \
1343 const FloatComplexColumnVector& x, bool scaled, \
1344 Array<octave_idx_type>& ierr) \
1346 return do_bessel (fcn, #name, alpha, x, scaled, ierr); \
1349#define ALL_BESSEL(name, fcn) \
1350 SS_BESSEL (name, fcn) \
1351 SM_BESSEL (name, fcn) \
1352 MS_BESSEL (name, fcn) \
1353 MM_BESSEL (name, fcn) \
1354 SN_BESSEL (name, fcn) \
1355 NS_BESSEL (name, fcn) \
1356 NN_BESSEL (name, fcn) \
1357 RC_BESSEL (name, fcn)
1382 double zr = z.real ();
1383 double zi = z.imag ();
1396 double rexpz = expz.real ();
1397 double iexpz = expz.imag ();
1399 double tmp = ar*rexpz - ai*iexpz;
1401 ai = ar*iexpz + ai*rexpz;
1405 if (zi == 0.0 && (! scaled || zr >= 0.0))
1424 retval(i, j) =
biry (z(i, j), deriv, scaled,
ierr(i, j));
1440 retval(i) =
biry (z(i), deriv, scaled,
ierr(i));
1459 float ar = a.real ();
1460 float ai = a.imag ();
1467 float rexpz = expz.real ();
1468 float iexpz = expz.imag ();
1470 float tmp = ar*rexpz - ai*iexpz;
1472 ai = ar*iexpz + ai*rexpz;
1476 if (z.imag () == 0.0 && (! scaled || z.real () >= 0.0))
1495 retval(i, j) =
biry (z(i, j), deriv, scaled,
ierr(i, j));
1511 retval(i) =
biry (z(i), deriv, scaled,
ierr(i));
1536 ellipj (
double u,
double m,
double& sn,
double& cn,
double& dn,
double& err)
1538 static const int Nmax = 16;
1539 double m1, t=0, si_u, co_u, se_u, ta_u, b, c[Nmax], a[Nmax], phi;
1544 (*current_liboctave_warning_with_id_handler)
1545 (
"Octave:ellipj-invalid-m",
1546 "ellipj: invalid M value, required value 0 <= M <= 1");
1553 double sqrt_eps = std::sqrt (std::numeric_limits<double>::epsilon ());
1559 t = 0.25*m*(u - si_u*co_u);
1560 sn = si_u - t * co_u;
1561 cn = co_u + t * si_u;
1562 dn = 1 - 0.5*m*si_u*si_u;
1564 else if ((1 - m) < sqrt_eps)
1572 sn = ta_u + 0.25*m1*(si_u*co_u - u)*se_u*se_u;
1573 cn = se_u - 0.25*m1*(si_u*co_u - u)*ta_u*se_u;
1574 dn = se_u + 0.25*m1*(si_u*co_u + u)*ta_u*se_u;
1581 b = std::sqrt (1 - m);
1582 c[0] = std::sqrt (m);
1583 for (n = 1; n < Nmax; ++n)
1585 a[n] = (a[n - 1] + b)/2;
1586 c[n] = (a[n - 1] - b)/2;
1587 b = std::sqrt (a[n - 1]*b);
1588 if (c[n]/a[n] < std::numeric_limits<double>::epsilon ())
break;
1596 for (ii = 1; n > 0; ii *= 2, --n) {}
1598 for (n = Nn; n > 0; --n)
1600 phi = (
std::asin ((c[n]/a[n])* sin (phi)) + phi)/2;
1604 dn = std::sqrt (1 - m*sn*sn);
1612 double m1 = 1 - m, ss1, cc1, dd1;
1614 ellipj (u.imag (), m1, ss1, cc1, dd1, err);
1625 double ss, cc, dd, ddd;
1627 ellipj (u.real (), m, ss, cc, dd, err);
1628 ddd = cc1*cc1 + m*ss*ss*ss1*ss1;
1629 sn =
Complex (ss*dd1/ddd, cc*dd*ss1*cc1/ddd);
1630 cn =
Complex (cc*cc1/ddd, -ss*dd*ss1*dd1/ddd);
1631 dn =
Complex (dd*cc1*dd1/ddd, -m*ss*cc*ss1/ddd);
1673 static const double a[] =
1675 -2.806989788730439e+01, 1.562324844726888e+02,
1676 -1.951109208597547e+02, 9.783370457507161e+01,
1677 -2.168328665628878e+01, 1.772453852905383e+00
1679 static const double b[] =
1681 -5.447609879822406e+01, 1.615858368580409e+02,
1682 -1.556989798598866e+02, 6.680131188771972e+01,
1683 -1.328068155288572e+01
1685 static const double c[] =
1687 -5.504751339936943e-03, -2.279687217114118e-01,
1688 -1.697592457770869e+00, -1.802933168781950e+00,
1689 3.093354679843505e+00, 2.077595676404383e+00
1691 static const double d[] =
1693 7.784695709041462e-03, 3.224671290700398e-01,
1694 2.445134137142996e+00, 3.754408661907416e+00
1697 static const double spi2 = 8.862269254527579e-01;
1698 static const double pbreak_lo = 0.04850;
1699 static const double pbreak_hi = 1.95150;
1703 if (
x >= pbreak_lo &&
x <= pbreak_hi)
1706 const double q = 0.5*(1-
x), r = q*q;
1707 const double yn = (((((a[0]*r + a[1])*r + a[2])*r + a[3])*r + a[4])*r + a[5])*q;
1708 const double yd = ((((b[0]*r + b[1])*r + b[2])*r + b[3])*r + b[4])*r + 1.0;
1711 else if (
x > 0.0 &&
x < 2.0)
1714 const double q = (
x < 1
1715 ? std::sqrt (-2*std::log (0.5*
x))
1716 : std::sqrt (-2*std::log (0.5*(2-
x))));
1718 const double yn = ((((c[0]*q + c[1])*q + c[2])*q + c[3])*q + c[4])*q + c[5];
1720 const double yd = (((
d[0]*q +
d[1])*q +
d[2])*q +
d[3])*q + 1.0;
1737 double u = (
erf (y) - (1-
x)) * spi2 * exp (y*y);
1803 static const double a[] =
1805 -2.806989788730439e+01, 1.562324844726888e+02,
1806 -1.951109208597547e+02, 9.783370457507161e+01,
1807 -2.168328665628878e+01, 1.772453852905383e+00
1809 static const double b[] =
1811 -5.447609879822406e+01, 1.615858368580409e+02,
1812 -1.556989798598866e+02, 6.680131188771972e+01,
1813 -1.328068155288572e+01
1815 static const double c[] =
1817 -5.504751339936943e-03, -2.279687217114118e-01,
1818 -1.697592457770869e+00, -1.802933168781950e+00,
1819 3.093354679843505e+00, 2.077595676404383e+00
1821 static const double d[] =
1823 7.784695709041462e-03, 3.224671290700398e-01,
1824 2.445134137142996e+00, 3.754408661907416e+00
1827 static const double spi2 = 8.862269254527579e-01;
1828 static const double pbreak = 0.95150;
1829 double ax = fabs (
x), y;
1835 const double q = 0.5 *
x, r = q*q;
1836 const double yn = (((((a[0]*r + a[1])*r + a[2])*r + a[3])*r + a[4])*r + a[5])*q;
1837 const double yd = ((((b[0]*r + b[1])*r + b[2])*r + b[3])*r + b[4])*r + 1.0;
1843 const double q = std::sqrt (-2*std::log (0.5*(1-ax)));
1844 const double yn = ((((c[0]*q + c[1])*q + c[2])*q + c[3])*q + c[4])*q + c[5];
1845 const double yd = (((
d[0]*q +
d[1])*q +
d[2])*q +
d[3])*q + 1.0;
1856 double u = (
erf (y) -
x) * spi2 * exp (y*y);
1880 double im =
x.imag ();
1881 double u =
expm1 (
x.real ());
1882 double v = sin (im/2);
1884 retval =
Complex (u*v + u + v, (u+1) * sin (im));
1887 retval = std::exp (
x) -
Complex (1);
1899 float im =
x.imag ();
1900 float u =
expm1 (
x.real ());
1901 float v = sin (im/2);
1929 result = std::tgamma (
x);
1952 result = std::tgammaf (
x);
1962 double r =
x.real (), i =
x.imag ();
1964 if (fabs (r) < 0.5 && fabs (i) < 0.5)
1966 double u = 2*r + r*r + i*i;
1971 retval = std::log (
Complex (1) +
x);
1981 float r =
x.real (), i =
x.imag ();
1983 if (fabs (r) < 0.5 && fabs (i) < 0.5)
1985 float u = 2*r + r*r + i*i;
1995 static const double pi = 3.14159265358979323846;
1997 template <
typename T>
2008 return std::log (
x);
2015 return std::log (
x);
2018 template <
typename T>
2026 static const T dg_coeff[10] =
2028 -0.83333333333333333e-1, 0.83333333333333333e-2,
2029 -0.39682539682539683e-2, 0.41666666666666667e-2,
2030 -0.75757575757575758e-2, 0.21092796092796093e-1,
2031 -0.83333333333333333e-1, 0.4432598039215686,
2032 -0.3053954330270122e+1, 0.125318899521531e+2
2035 T overz2 = T (1.0) / (zc * zc);
2040 p += dg_coeff[k] * overz2k;
2041 p +=
xlog (zc) - T (0.5) / zc;
2045 template <
typename T>
2049 static const double euler_mascheroni
2050 = 0.577215664901532860606512090082402431042;
2062 p =
psi (1 - z) - (
pi / tan (
pi * z));
2067 p = - euler_mascheroni;
2075 p += 1.0 / (2 * k - 1);
2077 p = - euler_mascheroni - 2 * std::log (2) + 2 * (p);
2087 const signed char n = 10 - z;
2088 for (
signed char k = n - 1; k >= 0; k--)
2102 template <
typename T>
2108 typedef typename std::complex<T>::value_type P;
2113 std::complex<T> dgam (0.0, 0.0);
2115 dgam = std::complex<T> (
psi (z_r), 0.0);
2117 dgam =
psi (P (1.0) - z)- (P (
pi) / tan (P (
pi) * z));
2121 std::complex<T> z_m = z;
2124 unsigned char n = 8 - z_ra;
2125 z_m = z + std::complex<T> (n, 0.0);
2130 std::complex<T> z_p = z + P (n - 1);
2131 for (
unsigned char k = n; k > 0; k--, z_p -= 1.0)
2132 dgam -= P (1.0) / z_p;
2151 template <
typename T>
2160 F77_INT n = to_f77_int (n_arg);
2172 F77_INT n = to_f77_int (n_arg);
2179 template <
typename T>
2185 fortran_psifn<T> (z, n, ans,
ierr);
2194 ans = ans / (
std::pow (-1.0, n + 1) /
gamma (
double (n+1)));
2214#if defined (HAVE_LGAMMA_R)
2216 result = lgamma_r (
x, &sgngam);
2219 int sgngam = signgam;
2223 return result +
Complex (0., M_PI);
2233#if defined (HAVE_LGAMMAF_R)
2235 result = lgammaf_r (
x, &sgngam);
2237 result = std::lgammaf (
x);
2238 int sgngam = signgam;
2250 ?
Complex (std::log (-(1.0 +
x)), M_PI)
subroutine cairy(Z, ID, KODE, AI, NZ, IERR)
subroutine cbesh(Z, FNU, KODE, M, N, CY, NZ, IERR)
subroutine cbiry(Z, ID, KODE, BI, IERR)
octave_idx_type numel(void) const
Number of elements in the array.
octave_idx_type cols(void) const
const dim_vector & dims(void) const
Return a const-reference so that dims ()(i) works efficiently.
octave_idx_type rows(void) const
OCTARRAY_API void resize(const dim_vector &dv, const T &rfv)
Size of the specified dimension.
void resize(octave_idx_type nr, octave_idx_type nc, const Complex &rfv=Complex(0))
void resize(octave_idx_type nr, octave_idx_type nc, const FloatComplex &rfv=FloatComplex(0))
Vector representing the dimensions (size) of an Array.
octave_idx_type numel(int n=0) const
Number of elements that a matrix with this dimensions would have.
ColumnVector real(const ComplexColumnVector &a)
subroutine dpsifn(X, N, KODE, M, ANS, NZ, IERR)
#define F77_CONST_CMPLX_ARG(x)
#define F77_XFCN(f, F, args)
octave_f77_int_type F77_INT
double lo_ieee_nan_value(void)
F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE const F77_INT F77_INT & ierr
F77_RET_T const F77_DBLE * x
#define ALL_BESSEL(name, fcn)
std::complex< double > Dawson(std::complex< double > z, double relerr=0)
std::complex< double > w(std::complex< double > z, double relerr=0)
std::complex< double > erfi(std::complex< double > z, double relerr=0)
std::complex< double > erfc(std::complex< double > z, double relerr=0)
std::complex< double > erfcx(std::complex< double > z, double relerr=0)
std::complex< double > erf(std::complex< double > z, double relerr=0)
static bool is_integer_value(double x)
static Complex zbesh1(const Complex &z, double alpha, int kode, octave_idx_type &ierr)
static Complex zbesj(const Complex &z, double alpha, int kode, octave_idx_type &ierr)
static T xlog(const T &x)
Complex besselj(double alpha, const Complex &x, bool scaled, octave_idx_type &ierr)
static Complex zbesy(const Complex &z, double alpha, int kode, octave_idx_type &ierr)
static double do_erfinv(double x, bool refine)
static FloatComplex cbesh2(const FloatComplex &z, float alpha, int kode, octave_idx_type &ierr)
static double do_erfcinv(double x, bool refine)
Complex besselh2(double alpha, const Complex &x, bool scaled, octave_idx_type &ierr)
static Complex zbesk(const Complex &z, double alpha, int kode, octave_idx_type &ierr)
static FloatComplex cbesi(const FloatComplex &z, float alpha, int kode, octave_idx_type &ierr)
static T lanczos_approximation_psi(const T zc)
Complex bessely(double alpha, const Complex &x, bool scaled, octave_idx_type &ierr)
static FloatComplex cbesh1(const FloatComplex &z, float alpha, int kode, octave_idx_type &ierr)
void ellipj(double u, double m, double &sn, double &cn, double &dn, double &err)
static Complex do_bessel(dptr f, const char *, double alpha, const Complex &x, bool scaled, octave_idx_type &ierr)
Complex besselh1(double alpha, const Complex &x, bool scaled, octave_idx_type &ierr)
void fortran_psifn< float >(float z, octave_idx_type n_arg, float &ans, octave_idx_type &ierr)
FloatComplex(* fptr)(const FloatComplex &, float, int, octave_idx_type &)
static Complex zbesi(const Complex &z, double alpha, int kode, octave_idx_type &ierr)
static Complex zbesh2(const Complex &z, double alpha, int kode, octave_idx_type &ierr)
Complex log1p(const Complex &x)
Complex besseli(double alpha, const Complex &x, bool scaled, octave_idx_type &ierr)
static Complex bessel_return_value(const Complex &val, octave_idx_type ierr)
Complex asin(const Complex &x)
static FloatComplex cbesy(const FloatComplex &z, float alpha, int kode, octave_idx_type &ierr)
Complex airy(const Complex &z, bool deriv, bool scaled, octave_idx_type &ierr)
static FloatComplex cbesj(const FloatComplex &z, float alpha, int kode, octave_idx_type &ierr)
Complex erfc(const Complex &x)
void fortran_psifn< double >(double z, octave_idx_type n_arg, double &ans, octave_idx_type &ierr)
Complex(* dptr)(const Complex &, double, int, octave_idx_type &)
static FloatComplex cbesk(const FloatComplex &z, float alpha, int kode, octave_idx_type &ierr)
bool negative_sign(double x)
Complex rc_log1p(double x)
Complex rc_lgamma(double x)
std::complex< T > floor(const std::complex< T > &x)
Complex besselk(double alpha, const Complex &x, bool scaled, octave_idx_type &ierr)
Complex biry(const Complex &z, bool deriv, bool scaled, octave_idx_type &ierr)
static void fortran_psifn(T z, octave_idx_type n, T &ans, octave_idx_type &ierr)
Complex erf(const Complex &x)
Complex expm1(const Complex &x)
F77_RET_T F77_FUNC(dconv2o, DCONV2O)(const F77_INT &
static double f(double k, double l_nu, double c_pm)
std::complex< double > Complex
std::complex< float > FloatComplex
octave_int< T > pow(const octave_int< T > &a, const octave_int< T > &b)
subroutine psifn(X, N, KODE, M, ANS, NZ, IERR)
subroutine zairy(ZR, ZI, ID, KODE, AIR, AII, NZ, IERR)
subroutine zbesh(ZR, ZI, FNU, KODE, M, N, CYR, CYI, NZ, IERR)
subroutine zbiry(ZR, ZI, ID, KODE, BIR, BII, IERR)