Article 5FDE9 Bessel determinants

Bessel determinants

by
John
from John D. Cook on (#5FDE9)

The Bessel functions J and Y are analogous to sine and cosine. Bessel functions come up in polar coordinates the way sines and cosines come up in rectangular coordinates. There are J and Y functions of various orders, conventionally written with a subscript .

bessell_gg.svg

I recently ran across a curious set of relations between these functions and their derivatives. Let's start with the following terms defined by 2 by 2 determinants.

bessel_det_four.svg

There are a lot of symmetries in the definitions above. First, every term has a subscript , so you can ignore those for now.

Second, every determinant has Js on the top row and Ys on the bottom.

bessel_det_pattern1.svg

Third, every determinant has as in the first column and bs in the second.

bessel_det_pattern2.svg

And finally, the primes, indicating derivatives, have the following pattern.

bessel_det_pattern3.svg

Now that we have all these definitions in place, there are several identities that the p's, q's, r's, and ss satisfy. Some of them depend on the orders, and that's why we included the subscripts. You can find various relations in A&S equation 9.1.32, but I wanted to point out one that's particularly elegant, A&S equation 9.1.34:

bessel_det_final.svg

This equation, a determinant of terms defined by determinants, reduces to a simple form that depends only on where the Bessel functions are evaluated, i.e. a and b, but not on their order .

Python example

The Python code below will show how to call Bessel functions and their derivatives and will illustrate the equations above.

 from math import pi from scipy.special import jv, yv, jvp, yvp def example(n, a, b): ja = jv(n, a) jb = jv(n, b) ya = yv(n, a) yb = yv(n, b) jap = jvp(n, a) jbp = jvp(n, b) yap = yvp(n, a) ybp = yvp(n, b) p = ja * yb - jb * ya q = ja * ybp - jbp * ya r = jap * yb - jb * yap s = jap * ybp - jbp * yap print(p*s - q*r) print(4/(pi*pi*a*b)) example(3, 16, 21)

This prints

 0.0012062045671706876 0.0012062045671706878

The two results differ slightly in the last decimal place due to rounding error.

The order of a Bessel function can be any real number [1], and the arguments can be any complex number. Here's another example with more general arguments.

 example(3.14, 16-3j, 21+1.2j) 

This prints

 (0.0011738907214344785 + 0.00015140286689885318j) (0.0011738907214345800 + 0.00015140286689880630j)

with the real and imaginary parts agreeing to 15 decimal places.

Related posts

[1] You can define Bessel functions with complex order, but SciPy doesn't support that.

The post Bessel determinants first appeared on John D. Cook.ba4RU0AJv2g
External Content
Source RSS or Atom Feed
Feed Location http://feeds.feedburner.com/TheEndeavour?format=xml
Feed Title John D. Cook
Feed Link https://www.johndcook.com/blog
Reply 0 comments