jv.c
Go to the documentation of this file.
1 /* jv.c
2  *
3  * Bessel function of noninteger order
4  *
5  *
6  *
7  * SYNOPSIS:
8  *
9  * double v, x, y, jv();
10  *
11  * y = jv( v, x );
12  *
13  *
14  *
15  * DESCRIPTION:
16  *
17  * Returns Bessel function of order v of the argument,
18  * where v is real. Negative x is allowed if v is an integer.
19  *
20  * Several expansions are included: the ascending power
21  * series, the Hankel expansion, and two transitional
22  * expansions for large v. If v is not too large, it
23  * is reduced by recurrence to a region of best accuracy.
24  * The transitional expansions give 12D accuracy for v > 500.
25  *
26  *
27  *
28  * ACCURACY:
29  * Results for integer v are indicated by *, where x and v
30  * both vary from -125 to +125. Otherwise,
31  * x ranges from 0 to 125, v ranges as indicated by "domain."
32  * Error criterion is absolute, except relative when |jv()| > 1.
33  *
34  * arithmetic v domain x domain # trials peak rms
35  * IEEE 0,125 0,125 100000 4.6e-15 2.2e-16
36  * IEEE -125,0 0,125 40000 5.4e-11 3.7e-13
37  * IEEE 0,500 0,500 20000 4.4e-15 4.0e-16
38  * Integer v:
39  * IEEE -125,125 -125,125 50000 3.5e-15* 1.9e-16*
40  *
41  */
42 
43 
44 /*
45  * Cephes Math Library Release 2.8: June, 2000
46  * Copyright 1984, 1987, 1989, 1992, 2000 by Stephen L. Moshier
47  */
48 
49 
50 #include "mconf.h"
51 #define CEPHES_DEBUG 0
52 
53 #if CEPHES_DEBUG
54 #include <stdio.h>
55 #endif
56 
57 #define MAXGAM 171.624376956302725
58 
59 extern double MACHEP, MINLOG, MAXLOG;
60 
61 #define BIG 1.44115188075855872E+17
62 
63 static double jvs(double n, double x);
64 static double hankel(double n, double x);
65 static double recur(double *n, double x, double *newn, int cancel);
66 static double jnx(double n, double x);
67 static double jnt(double n, double x);
68 
69 double jv(double n, double x)
70 {
71  double k, q, t, y, an;
72  int i, sign, nint;
73 
74  nint = 0; /* Flag for integer n */
75  sign = 1; /* Flag for sign inversion */
76  an = fabs(n);
77  y = floor(an);
78  if (y == an) {
79  nint = 1;
80  i = an - 16384.0 * floor(an / 16384.0);
81  if (n < 0.0) {
82  if (i & 1)
83  sign = -sign;
84  n = an;
85  }
86  if (x < 0.0) {
87  if (i & 1)
88  sign = -sign;
89  x = -x;
90  }
91  if (n == 0.0)
92  return (j0(x));
93  if (n == 1.0)
94  return (sign * j1(x));
95  }
96 
97  if ((x < 0.0) && (y != an)) {
99  y = NAN;
100  goto done;
101  }
102 
103  if (x == 0 && n < 0 && !nint) {
105  return INFINITY / gamma(n + 1);
106  }
107 
108  y = fabs(x);
109 
110  if (y * y < fabs(n + 1) * MACHEP) {
111  return pow(0.5 * x, n) / gamma(n + 1);
112  }
113 
114  k = 3.6 * sqrt(y);
115  t = 3.6 * sqrt(an);
116  if ((y < t) && (an > 21.0))
117  return (sign * jvs(n, x));
118  if ((an < k) && (y > 21.0))
119  return (sign * hankel(n, x));
120 
121  if (an < 500.0) {
122  /* Note: if x is too large, the continued fraction will fail; but then the
123  * Hankel expansion can be used. */
124  if (nint != 0) {
125  k = 0.0;
126  q = recur(&n, x, &k, 1);
127  if (k == 0.0) {
128  y = j0(x) / q;
129  goto done;
130  }
131  if (k == 1.0) {
132  y = j1(x) / q;
133  goto done;
134  }
135  }
136 
137  if (an > 2.0 * y)
138  goto rlarger;
139 
140  if ((n >= 0.0) && (n < 20.0)
141  && (y > 6.0) && (y < 20.0)) {
142  /* Recur backwards from a larger value of n */
143  rlarger:
144  k = n;
145 
146  y = y + an + 1.0;
147  if (y < 30.0)
148  y = 30.0;
149  y = n + floor(y - n);
150  q = recur(&y, x, &k, 0);
151  y = jvs(y, x) * q;
152  goto done;
153  }
154 
155  if (k <= 30.0) {
156  k = 2.0;
157  }
158  else if (k < 90.0) {
159  k = (3 * k) / 4;
160  }
161  if (an > (k + 3.0)) {
162  if (n < 0.0)
163  k = -k;
164  q = n - floor(n);
165  k = floor(k) + q;
166  if (n > 0.0)
167  q = recur(&n, x, &k, 1);
168  else {
169  t = k;
170  k = n;
171  q = recur(&t, x, &k, 1);
172  k = t;
173  }
174  if (q == 0.0) {
175  y = 0.0;
176  goto done;
177  }
178  }
179  else {
180  k = n;
181  q = 1.0;
182  }
183 
184  /* boundary between convergence of
185  * power series and Hankel expansion
186  */
187  y = fabs(k);
188  if (y < 26.0)
189  t = (0.0083 * y + 0.09) * y + 12.9;
190  else
191  t = 0.9 * y;
192 
193  if (x > t)
194  y = hankel(k, x);
195  else
196  y = jvs(k, x);
197 #if CEPHES_DEBUG
198  printf("y = %.16e, recur q = %.16e\n", y, q);
199 #endif
200  if (n > 0.0)
201  y /= q;
202  else
203  y *= q;
204  }
205 
206  else {
207  /* For large n, use the uniform expansion or the transitional expansion.
208  * But if x is of the order of n**2, these may blow up, whereas the
209  * Hankel expansion will then work.
210  */
211  if (n < 0.0) {
212  sf_error("Jv", SF_ERROR_LOSS, NULL);
213  y = NAN;
214  goto done;
215  }
216  t = x / n;
217  t /= n;
218  if (t > 0.3)
219  y = hankel(n, x);
220  else
221  y = jnx(n, x);
222  }
223 
224  done:return (sign * y);
225 }
226 
227 /* Reduce the order by backward recurrence.
228  * AMS55 #9.1.27 and 9.1.73.
229  */
230 
231 static double recur(double *n, double x, double *newn, int cancel)
232 {
233  double pkm2, pkm1, pk, qkm2, qkm1;
234 
235  /* double pkp1; */
236  double k, ans, qk, xk, yk, r, t, kf;
237  static double big = BIG;
238  int nflag, ctr;
239  int miniter, maxiter;
240 
241  /* Continued fraction for Jn(x)/Jn-1(x)
242  * AMS 9.1.73
243  *
244  * x -x^2 -x^2
245  * ------ --------- --------- ...
246  * 2 n + 2(n+1) + 2(n+2) +
247  *
248  * Compute it with the simplest possible algorithm.
249  *
250  * This continued fraction starts to converge when (|n| + m) > |x|.
251  * Hence, at least |x|-|n| iterations are necessary before convergence is
252  * achieved. There is a hard limit set below, m <= 30000, which is chosen
253  * so that no branch in `jv` requires more iterations to converge.
254  * The exact maximum number is (500/3.6)^2 - 500 ~ 19000
255  */
256 
257  maxiter = 22000;
258  miniter = fabs(x) - fabs(*n);
259  if (miniter < 1)
260  miniter = 1;
261 
262  if (*n < 0.0)
263  nflag = 1;
264  else
265  nflag = 0;
266 
267  fstart:
268 
269 #if CEPHES_DEBUG
270  printf("recur: n = %.6e, newn = %.6e, cfrac = ", *n, *newn);
271 #endif
272 
273  pkm2 = 0.0;
274  qkm2 = 1.0;
275  pkm1 = x;
276  qkm1 = *n + *n;
277  xk = -x * x;
278  yk = qkm1;
279  ans = 0.0; /* ans=0.0 ensures that t=1.0 in the first iteration */
280  ctr = 0;
281  do {
282  yk += 2.0;
283  pk = pkm1 * yk + pkm2 * xk;
284  qk = qkm1 * yk + qkm2 * xk;
285  pkm2 = pkm1;
286  pkm1 = pk;
287  qkm2 = qkm1;
288  qkm1 = qk;
289 
290  /* check convergence */
291  if (qk != 0 && ctr > miniter)
292  r = pk / qk;
293  else
294  r = 0.0;
295 
296  if (r != 0) {
297  t = fabs((ans - r) / r);
298  ans = r;
299  }
300  else {
301  t = 1.0;
302  }
303 
304  if (++ctr > maxiter) {
306  goto done;
307  }
308  if (t < MACHEP)
309  goto done;
310 
311  /* renormalize coefficients */
312  if (fabs(pk) > big) {
313  pkm2 /= big;
314  pkm1 /= big;
315  qkm2 /= big;
316  qkm1 /= big;
317  }
318  }
319  while (t > MACHEP);
320 
321  done:
322  if (ans == 0)
323  ans = 1.0;
324 
325 #if CEPHES_DEBUG
326  printf("%.6e\n", ans);
327 #endif
328 
329  /* Change n to n-1 if n < 0 and the continued fraction is small */
330  if (nflag > 0) {
331  if (fabs(ans) < 0.125) {
332  nflag = -1;
333  *n = *n - 1.0;
334  goto fstart;
335  }
336  }
337 
338 
339  kf = *newn;
340 
341  /* backward recurrence
342  * 2k
343  * J (x) = --- J (x) - J (x)
344  * k-1 x k k+1
345  */
346 
347  pk = 1.0;
348  pkm1 = 1.0 / ans;
349  k = *n - 1.0;
350  r = 2 * k;
351  do {
352  pkm2 = (pkm1 * r - pk * x) / x;
353  /* pkp1 = pk; */
354  pk = pkm1;
355  pkm1 = pkm2;
356  r -= 2.0;
357  /*
358  * t = fabs(pkp1) + fabs(pk);
359  * if( (k > (kf + 2.5)) && (fabs(pkm1) < 0.25*t) )
360  * {
361  * k -= 1.0;
362  * t = x*x;
363  * pkm2 = ( (r*(r+2.0)-t)*pk - r*x*pkp1 )/t;
364  * pkp1 = pk;
365  * pk = pkm1;
366  * pkm1 = pkm2;
367  * r -= 2.0;
368  * }
369  */
370  k -= 1.0;
371  }
372  while (k > (kf + 0.5));
373 
374  /* Take the larger of the last two iterates
375  * on the theory that it may have less cancellation error.
376  */
377 
378  if (cancel) {
379  if ((kf >= 0.0) && (fabs(pk) > fabs(pkm1))) {
380  k += 1.0;
381  pkm2 = pk;
382  }
383  }
384  *newn = k;
385 #if CEPHES_DEBUG
386  printf("newn %.6e rans %.6e\n", k, pkm2);
387 #endif
388  return (pkm2);
389 }
390 
391 
392 
393 /* Ascending power series for Jv(x).
394  * AMS55 #9.1.10.
395  */
396 
397 static double jvs(double n, double x)
398 {
399  double t, u, y, z, k;
400  int ex, sgngam;
401 
402  z = -x * x / 4.0;
403  u = 1.0;
404  y = u;
405  k = 1.0;
406  t = 1.0;
407 
408  while (t > MACHEP) {
409  u *= z / (k * (n + k));
410  y += u;
411  k += 1.0;
412  if (y != 0)
413  t = fabs(u / y);
414  }
415 #if CEPHES_DEBUG
416  printf("power series=%.5e ", y);
417 #endif
418  t = frexp(0.5 * x, &ex);
419  ex = ex * n;
420  if ((ex > -1023)
421  && (ex < 1023)
422  && (n > 0.0)
423  && (n < (MAXGAM - 1.0))) {
424  t = pow(0.5 * x, n) / gamma(n + 1.0);
425 #if CEPHES_DEBUG
426  printf("pow(.5*x, %.4e)/gamma(n+1)=%.5e\n", n, t);
427 #endif
428  y *= t;
429  }
430  else {
431 #if CEPHES_DEBUG
432  z = n * log(0.5 * x);
433  k = lgam(n + 1.0);
434  t = z - k;
435  printf("log pow=%.5e, lgam(%.4e)=%.5e\n", z, n + 1.0, k);
436 #else
437  t = n * log(0.5 * x) - lgam_sgn(n + 1.0, &sgngam);
438 #endif
439  if (y < 0) {
440  sgngam = -sgngam;
441  y = -y;
442  }
443  t += log(y);
444 #if CEPHES_DEBUG
445  printf("log y=%.5e\n", log(y));
446 #endif
447  if (t < -MAXLOG) {
448  return (0.0);
449  }
450  if (t > MAXLOG) {
452  return (INFINITY);
453  }
454  y = sgngam * exp(t);
455  }
456  return (y);
457 }
458 
459 /* Hankel's asymptotic expansion
460  * for large x.
461  * AMS55 #9.2.5.
462  */
463 
464 static double hankel(double n, double x)
465 {
466  double t, u, z, k, sign, conv;
467  double p, q, j, m, pp, qq;
468  int flag;
469 
470  m = 4.0 * n * n;
471  j = 1.0;
472  z = 8.0 * x;
473  k = 1.0;
474  p = 1.0;
475  u = (m - 1.0) / z;
476  q = u;
477  sign = 1.0;
478  conv = 1.0;
479  flag = 0;
480  t = 1.0;
481  pp = 1.0e38;
482  qq = 1.0e38;
483 
484  while (t > MACHEP) {
485  k += 2.0;
486  j += 1.0;
487  sign = -sign;
488  u *= (m - k * k) / (j * z);
489  p += sign * u;
490  k += 2.0;
491  j += 1.0;
492  u *= (m - k * k) / (j * z);
493  q += sign * u;
494  t = fabs(u / p);
495  if (t < conv) {
496  conv = t;
497  qq = q;
498  pp = p;
499  flag = 1;
500  }
501  /* stop if the terms start getting larger */
502  if ((flag != 0) && (t > conv)) {
503 #if CEPHES_DEBUG
504  printf("Hankel: convergence to %.4E\n", conv);
505 #endif
506  goto hank1;
507  }
508  }
509 
510  hank1:
511  u = x - (0.5 * n + 0.25) * M_PI;
512  t = sqrt(2.0 / (M_PI * x)) * (pp * cos(u) - qq * sin(u));
513 #if CEPHES_DEBUG
514  printf("hank: %.6e\n", t);
515 #endif
516  return (t);
517 }
518 
519 
520 /* Asymptotic expansion for large n.
521  * AMS55 #9.3.35.
522  */
523 
524 static double lambda[] = {
525  1.0,
526  1.041666666666666666666667E-1,
527  8.355034722222222222222222E-2,
528  1.282265745563271604938272E-1,
529  2.918490264641404642489712E-1,
530  8.816272674437576524187671E-1,
531  3.321408281862767544702647E+0,
532  1.499576298686255465867237E+1,
533  7.892301301158651813848139E+1,
534  4.744515388682643231611949E+2,
535  3.207490090890661934704328E+3
536 };
537 
538 static double mu[] = {
539  1.0,
540  -1.458333333333333333333333E-1,
541  -9.874131944444444444444444E-2,
542  -1.433120539158950617283951E-1,
543  -3.172272026784135480967078E-1,
544  -9.424291479571202491373028E-1,
545  -3.511203040826354261542798E+0,
546  -1.572726362036804512982712E+1,
547  -8.228143909718594444224656E+1,
548  -4.923553705236705240352022E+2,
549  -3.316218568547972508762102E+3
550 };
551 
552 static double P1[] = {
553  -2.083333333333333333333333E-1,
554  1.250000000000000000000000E-1
555 };
556 
557 static double P2[] = {
558  3.342013888888888888888889E-1,
559  -4.010416666666666666666667E-1,
560  7.031250000000000000000000E-2
561 };
562 
563 static double P3[] = {
564  -1.025812596450617283950617E+0,
565  1.846462673611111111111111E+0,
566  -8.912109375000000000000000E-1,
567  7.324218750000000000000000E-2
568 };
569 
570 static double P4[] = {
571  4.669584423426247427983539E+0,
572  -1.120700261622299382716049E+1,
573  8.789123535156250000000000E+0,
574  -2.364086914062500000000000E+0,
575  1.121520996093750000000000E-1
576 };
577 
578 static double P5[] = {
579  -2.8212072558200244877E1,
580  8.4636217674600734632E1,
581  -9.1818241543240017361E1,
582  4.2534998745388454861E1,
583  -7.3687943594796316964E0,
584  2.27108001708984375E-1
585 };
586 
587 static double P6[] = {
588  2.1257013003921712286E2,
589  -7.6525246814118164230E2,
590  1.0599904525279998779E3,
591  -6.9957962737613254123E2,
592  2.1819051174421159048E2,
593  -2.6491430486951555525E1,
594  5.7250142097473144531E-1
595 };
596 
597 static double P7[] = {
598  -1.9194576623184069963E3,
599  8.0617221817373093845E3,
600  -1.3586550006434137439E4,
601  1.1655393336864533248E4,
602  -5.3056469786134031084E3,
603  1.2009029132163524628E3,
604  -1.0809091978839465550E2,
605  1.7277275025844573975E0
606 };
607 
608 
609 static double jnx(double n, double x)
610 {
611  double zeta, sqz, zz, zp, np;
612  double cbn, n23, t, z, sz;
613  double pp, qq, z32i, zzi;
614  double ak, bk, akl, bkl;
615  int sign, doa, dob, nflg, k, s, tk, tkp1, m;
616  static double u[8];
617  static double ai, aip, bi, bip;
618 
619  /* Test for x very close to n. Use expansion for transition region if so. */
620  cbn = cbrt(n);
621  z = (x - n) / cbn;
622  if (fabs(z) <= 0.7)
623  return (jnt(n, x));
624 
625  z = x / n;
626  zz = 1.0 - z * z;
627  if (zz == 0.0)
628  return (0.0);
629 
630  if (zz > 0.0) {
631  sz = sqrt(zz);
632  t = 1.5 * (log((1.0 + sz) / z) - sz); /* zeta ** 3/2 */
633  zeta = cbrt(t * t);
634  nflg = 1;
635  }
636  else {
637  sz = sqrt(-zz);
638  t = 1.5 * (sz - acos(1.0 / z));
639  zeta = -cbrt(t * t);
640  nflg = -1;
641  }
642  z32i = fabs(1.0 / t);
643  sqz = cbrt(t);
644 
645  /* Airy function */
646  n23 = cbrt(n * n);
647  t = n23 * zeta;
648 
649 #if CEPHES_DEBUG
650  printf("zeta %.5E, Airy(%.5E)\n", zeta, t);
651 #endif
652  airy(t, &ai, &aip, &bi, &bip);
653 
654  /* polynomials in expansion */
655  u[0] = 1.0;
656  zzi = 1.0 / zz;
657  u[1] = polevl(zzi, P1, 1) / sz;
658  u[2] = polevl(zzi, P2, 2) / zz;
659  u[3] = polevl(zzi, P3, 3) / (sz * zz);
660  pp = zz * zz;
661  u[4] = polevl(zzi, P4, 4) / pp;
662  u[5] = polevl(zzi, P5, 5) / (pp * sz);
663  pp *= zz;
664  u[6] = polevl(zzi, P6, 6) / pp;
665  u[7] = polevl(zzi, P7, 7) / (pp * sz);
666 
667 #if CEPHES_DEBUG
668  for (k = 0; k <= 7; k++)
669  printf("u[%d] = %.5E\n", k, u[k]);
670 #endif
671 
672  pp = 0.0;
673  qq = 0.0;
674  np = 1.0;
675  /* flags to stop when terms get larger */
676  doa = 1;
677  dob = 1;
678  akl = INFINITY;
679  bkl = INFINITY;
680 
681  for (k = 0; k <= 3; k++) {
682  tk = 2 * k;
683  tkp1 = tk + 1;
684  zp = 1.0;
685  ak = 0.0;
686  bk = 0.0;
687  for (s = 0; s <= tk; s++) {
688  if (doa) {
689  if ((s & 3) > 1)
690  sign = nflg;
691  else
692  sign = 1;
693  ak += sign * mu[s] * zp * u[tk - s];
694  }
695 
696  if (dob) {
697  m = tkp1 - s;
698  if (((m + 1) & 3) > 1)
699  sign = nflg;
700  else
701  sign = 1;
702  bk += sign * lambda[s] * zp * u[m];
703  }
704  zp *= z32i;
705  }
706 
707  if (doa) {
708  ak *= np;
709  t = fabs(ak);
710  if (t < akl) {
711  akl = t;
712  pp += ak;
713  }
714  else
715  doa = 0;
716  }
717 
718  if (dob) {
719  bk += lambda[tkp1] * zp * u[0];
720  bk *= -np / sqz;
721  t = fabs(bk);
722  if (t < bkl) {
723  bkl = t;
724  qq += bk;
725  }
726  else
727  dob = 0;
728  }
729 #if CEPHES_DEBUG
730  printf("a[%d] %.5E, b[%d] %.5E\n", k, ak, k, bk);
731 #endif
732  if (np < MACHEP)
733  break;
734  np /= n * n;
735  }
736 
737  /* normalizing factor ( 4*zeta/(1 - z**2) )**1/4 */
738  t = 4.0 * zeta / zz;
739  t = sqrt(sqrt(t));
740 
741  t *= ai * pp / cbrt(n) + aip * qq / (n23 * n);
742  return (t);
743 }
744 
745 /* Asymptotic expansion for transition region,
746  * n large and x close to n.
747  * AMS55 #9.3.23.
748  */
749 
750 static double PF2[] = {
751  -9.0000000000000000000e-2,
752  8.5714285714285714286e-2
753 };
754 
755 static double PF3[] = {
756  1.3671428571428571429e-1,
757  -5.4920634920634920635e-2,
758  -4.4444444444444444444e-3
759 };
760 
761 static double PF4[] = {
762  1.3500000000000000000e-3,
763  -1.6036054421768707483e-1,
764  4.2590187590187590188e-2,
765  2.7330447330447330447e-3
766 };
767 
768 static double PG1[] = {
769  -2.4285714285714285714e-1,
770  1.4285714285714285714e-2
771 };
772 
773 static double PG2[] = {
774  -9.0000000000000000000e-3,
775  1.9396825396825396825e-1,
776  -1.1746031746031746032e-2
777 };
778 
779 static double PG3[] = {
780  1.9607142857142857143e-2,
781  -1.5983694083694083694e-1,
782  6.3838383838383838384e-3
783 };
784 
785 
786 static double jnt(double n, double x)
787 {
788  double z, zz, z3;
789  double cbn, n23, cbtwo;
790  double ai, aip, bi, bip; /* Airy functions */
791  double nk, fk, gk, pp, qq;
792  double F[5], G[4];
793  int k;
794 
795  cbn = cbrt(n);
796  z = (x - n) / cbn;
797  cbtwo = cbrt(2.0);
798 
799  /* Airy function */
800  zz = -cbtwo * z;
801  airy(zz, &ai, &aip, &bi, &bip);
802 
803  /* polynomials in expansion */
804  zz = z * z;
805  z3 = zz * z;
806  F[0] = 1.0;
807  F[1] = -z / 5.0;
808  F[2] = polevl(z3, PF2, 1) * zz;
809  F[3] = polevl(z3, PF3, 2);
810  F[4] = polevl(z3, PF4, 3) * z;
811  G[0] = 0.3 * zz;
812  G[1] = polevl(z3, PG1, 1);
813  G[2] = polevl(z3, PG2, 2) * z;
814  G[3] = polevl(z3, PG3, 2) * zz;
815 #if CEPHES_DEBUG
816  for (k = 0; k <= 4; k++)
817  printf("F[%d] = %.5E\n", k, F[k]);
818  for (k = 0; k <= 3; k++)
819  printf("G[%d] = %.5E\n", k, G[k]);
820 #endif
821  pp = 0.0;
822  qq = 0.0;
823  nk = 1.0;
824  n23 = cbrt(n * n);
825 
826  for (k = 0; k <= 4; k++) {
827  fk = F[k] * nk;
828  pp += fk;
829  if (k != 4) {
830  gk = G[k] * nk;
831  qq += gk;
832  }
833 #if CEPHES_DEBUG
834  printf("fk[%d] %.5E, gk[%d] %.5E\n", k, fk, k, gk);
835 #endif
836  nk /= n23;
837  }
838 
839  fk = cbtwo * ai * pp / cbn + cbrt(4.0) * aip * qq / n;
840  return (fk);
841 }
external::detail::conv
PyObject * conv(PyObject *o)
Definition: test_pytypes.cpp:20
PG2
static double PG2[]
Definition: jv.c:773
P4
static double P4[]
Definition: jv.c:570
P6
static double P6[]
Definition: jv.c:587
s
RealScalar s
Definition: level1_cplx_impl.h:126
ceres::sin
Jet< T, N > sin(const Jet< T, N > &f)
Definition: jet.h:439
PG1
static double PG1[]
Definition: jv.c:768
PF3
static double PF3[]
Definition: jv.c:755
test_eigen.np
np
Definition: test_eigen.py:5
x
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition: gnuplot_common_settings.hh:12
sign
const EIGEN_DEVICE_FUNC SignReturnType sign() const
Definition: ArrayCwiseUnaryOps.h:219
PF4
static double PF4[]
Definition: jv.c:761
SF_ERROR_OVERFLOW
@ SF_ERROR_OVERFLOW
Definition: sf_error.h:12
log
const EIGEN_DEVICE_FUNC LogReturnType log() const
Definition: ArrayCwiseUnaryOps.h:128
exp
const EIGEN_DEVICE_FUNC ExpReturnType exp() const
Definition: ArrayCwiseUnaryOps.h:97
lgam
double lgam(double x)
Definition: gamma.c:275
P3
static double P3[]
Definition: jv.c:563
airy
int airy(double x, double *ai, double *aip, double *bi, double *bip)
Definition: airy.c:256
ceres::acos
Jet< T, N > acos(const Jet< T, N > &f)
Definition: jet.h:432
mu
static double mu[]
Definition: jv.c:538
recur
static double recur(double *n, double x, double *newn, int cancel)
Definition: jv.c:231
ceres::cos
Jet< T, N > cos(const Jet< T, N > &f)
Definition: jet.h:426
jv
double jv(double n, double x)
Definition: jv.c:69
boost::multiprecision::fabs
Real fabs(const Real &a)
Definition: boostmultiprec.cpp:119
PF2
static double PF2[]
Definition: jv.c:750
SF_ERROR_UNDERFLOW
@ SF_ERROR_UNDERFLOW
Definition: sf_error.h:11
n
int n
Definition: BiCGSTAB_simple.cpp:1
lgam_sgn
double lgam_sgn(double x, int *sign)
Definition: gamma.c:281
z3
static const Unit3 z3
Definition: testRotateFactor.cpp:44
j
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2
jvs
static double jvs(double n, double x)
Definition: jv.c:397
MACHEP
double MACHEP
Definition: const.c:54
Eigen::numext::q
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:1984
P1
static double P1[]
Definition: jv.c:552
polevl
static double polevl(double x, const double coef[], int N)
Definition: polevl.h:65
PG3
static double PG3[]
Definition: jv.c:779
hankel
static double hankel(double n, double x)
Definition: jv.c:464
MAXGAM
#define MAXGAM
Definition: jv.c:57
pybind_wrapper_test_script.z
z
Definition: pybind_wrapper_test_script.py:61
m
Matrix3f m
Definition: AngleAxis_mimic_euler.cpp:1
gamma
#define gamma
Definition: mconf.h:85
gtsam::symbol_shorthand::F
Key F(std::uint64_t j)
Definition: inference/Symbol.h:153
lambda
static double lambda[]
Definition: jv.c:524
y
Scalar * y
Definition: level1_cplx_impl.h:124
P5
static double P5[]
Definition: jv.c:578
j0
double j0(double x)
Definition: j0.c:185
Eigen::ArrayBase::pow
const Eigen::CwiseBinaryOp< Eigen::internal::scalar_pow_op< typename Derived::Scalar, typename ExponentDerived::Scalar >, const Derived, const ExponentDerived > pow(const Eigen::ArrayBase< Derived > &x, const Eigen::ArrayBase< ExponentDerived > &exponents)
Definition: GlobalFunctions.h:143
cbrt
double cbrt(double x)
Definition: cbrt.c:51
mconf.h
MAXLOG
double MAXLOG
Definition: jv.c:59
big
static double big
Definition: igam.c:119
p
float * p
Definition: Tutorial_Map_using.cpp:9
G
JacobiRotation< float > G
Definition: Jacobi_makeGivens.cpp:2
zeta
double zeta(double x, double q)
Definition: zeta.c:89
sf_error
void sf_error(const char *func_name, sf_error_t code, const char *fmt,...)
Definition: sf_error.c:41
BIG
#define BIG
Definition: jv.c:61
P7
static double P7[]
Definition: jv.c:597
MINLOG
double MINLOG
Definition: jv.c:59
jnx
static double jnx(double n, double x)
Definition: jv.c:609
NULL
#define NULL
Definition: ccolamd.c:609
M_PI
#define M_PI
Definition: mconf.h:117
align_3::t
Point2 t(10, 10)
j1
double j1(double x)
Definition: j1.c:174
SF_ERROR_DOMAIN
@ SF_ERROR_DOMAIN
Definition: sf_error.h:16
jnt
static double jnt(double n, double x)
Definition: jv.c:786
ceres::sqrt
Jet< T, N > sqrt(const Jet< T, N > &f)
Definition: jet.h:418
i
int i
Definition: BiCGSTAB_step_by_step.cpp:9
floor
const EIGEN_DEVICE_FUNC FloorReturnType floor() const
Definition: ArrayCwiseUnaryOps.h:481
P2
static double P2[]
Definition: jv.c:557
SF_ERROR_LOSS
@ SF_ERROR_LOSS
Definition: sf_error.h:14


gtsam
Author(s):
autogenerated on Sat Nov 16 2024 04:02:37