Radiation force and the Struve function

The radiation force for a uniformly exited circular piston is represented by Bessel and Struve functions (Kinsler and Frey, Pierce).  Routines for computing Bessel functions are readily available for some higher level languages but not for others, whereas routines for computing the Struve function are less common.  An excellent resource that provides Fortran routines for these and a wide range of other special functions is the book, Computation of Special Functions, by S.-J. Zhang and J. Jin.  These Fortran subroutines are available online (http://jin.ece.uiuc.edu/routines/routines.html), and these have also been converted into Matlab functions (http://ceta.mit.edu/ceta/comp_spec_func/).  The Matlab versions of these routines accept only scalar arguments, so these have been modified for vector inputs as well, and the results are included here (struveh0.m, struveh1.m, besselj0.m, besselj1.m, jinc.m).  There is also a routine (besselzeros.m) that calculates the zeros of Jm(x) and Jm’(x).  This routine has been modified with respect to the original such that the zeros are returned in matrices/tables (see Fundamentals of Physical Acoustics by Blackstock, p. 393) instead of the original encoded vectors.  Another routine calculates the Fresnel sine and cosine integrals (fcs.m).  The Bessel functions now also return the correct answer for negative real arguments, which is not the case for the besselj() function evaluated for integer order in Matlab.

An interesting approximation to the Struve function H1 is derived in a paper by Aarts and Janssen (JASA, 2003).  The Struve function H1 is approximated by a linear combination of the Bessel function J0 and the spherical Bessel functions j0 and j1.  This is an effective approximation for all values of ka, and the error is smaller than the asymptotic expression for H1 up to approximately 2ka = 60.  A Matlab function for this approximate expression is included here (struveh1approx.m), and a routine that evaluates the asymptotic expansion for large arguments and the series expansion for H1 for small arguments is included here (struveh1approx2.m).

Note: The cephes library (http://www.netlib.org/cephes/) also contains C language listings of many special functions, including Bessel functions and Struve functions.

These routines should run correctly on Matlab, Octave, and Lyme.

References:

Kinsler, L., Frey, A., Coppens, A., and Sanders, J. (1982).  Fundamentals of Acoustics (Wiley, New York).

Pierce, A. (1989).  Acoustics, An Introduction to Its Physical Principles and Applications (ASA, New York).

Zhang, S. and Jin, J. (1996).  Computation of Special Functions (Wiley, New York).

Aarts RM and Janssen AJ, “Approximation of the Struve function H1 occurring in impedance calculations.” J Acoust Soc Am. 2003 May;113(5):2635-7.

Blackstock, D.  Fundamentals of Physical Acoustics (Wiley-Interscience, New York).

Copyright 2005 – Robert J. McGough.

Updated 2008 – Robert J. McGough.