mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | 
 | ||
|  | [section:sph_bessel Spherical Bessel Functions of the First and Second Kinds] | ||
|  | 
 | ||
|  | [h4 Synopsis] | ||
|  | 
 | ||
|  | `#include <boost/math/special_functions/bessel.hpp>` | ||
|  | 
 | ||
|  |    template <class T1, class T2> | ||
|  |    ``__sf_result`` sph_bessel(unsigned v, T2 x); | ||
|  | 
 | ||
|  |    template <class T1, class T2, class ``__Policy``> | ||
|  |    ``__sf_result`` sph_bessel(unsigned v, T2 x, const ``__Policy``&); | ||
|  | 
 | ||
|  |    template <class T1, class T2> | ||
|  |    ``__sf_result`` sph_neumann(unsigned v, T2 x); | ||
|  |     | ||
|  |    template <class T1, class T2, class ``__Policy``> | ||
|  |    ``__sf_result`` sph_neumann(unsigned v, T2 x, const ``__Policy``&); | ||
|  |     | ||
|  | [h4 Description] | ||
|  | 
 | ||
|  | The functions __sph_bessel and __sph_neumann return the result of the | ||
|  | Spherical Bessel functions of the first and second kinds respectively: | ||
|  | 
 | ||
|  | sph_bessel(v, x) = j[sub v](x) | ||
|  | 
 | ||
|  | sph_neumann(v, x) = y[sub v](x) = n[sub v](x) | ||
|  | 
 | ||
|  | where: | ||
|  | 
 | ||
|  | [equation sbessel2] | ||
|  | 
 | ||
|  | The return type of these functions is computed using the __arg_promotion_rules | ||
|  | for the single argument type T. | ||
|  | 
 | ||
|  | [optional_policy] | ||
|  | 
 | ||
|  | The functions return the result of __domain_error whenever the result is | ||
|  | undefined or complex: this occurs when `x < 0`. | ||
|  | 
 | ||
|  | The j[sub v][space] function is cyclic like J[sub v][space] but differs | ||
|  | in its behaviour at the origin: | ||
|  | 
 | ||
|  | [graph sph_bessel] | ||
|  | 
 | ||
|  | Likewise y[sub v][space] is also cyclic for large x, but tends to -[infin][space] | ||
|  | for small /x/: | ||
|  | 
 | ||
|  | [graph sph_neumann] | ||
|  | 
 | ||
|  | [h4 Testing] | ||
|  | 
 | ||
|  | There are two sets of test values: spot values calculated using | ||
|  | [@http://functions.wolfram.com/ functions.wolfram.com], | ||
|  | and a much larger set of tests computed using | ||
|  | a simplified version of this implementation | ||
|  | (with all the special case handling removed). | ||
|  | 
 | ||
|  | [h4 Accuracy] | ||
|  | 
 | ||
|  | [table_sph_bessel] | ||
|  | 
 | ||
|  | [table_sph_neumann] | ||
|  | 
 | ||
|  | [h4 Implementation] | ||
|  | 
 | ||
|  | Other than error handling and a couple of special cases these functions | ||
|  | are implemented directly in terms of their definitions: | ||
|  | 
 | ||
|  | [equation sbessel2] | ||
|  | 
 | ||
|  | The special cases occur for: | ||
|  | 
 | ||
|  | j[sub 0][space]= __sinc_pi(x) = sin(x) / x | ||
|  | 
 | ||
|  | and for small ['x < 1], we can use the series: | ||
|  | 
 | ||
|  | [equation sbessel5] | ||
|  | 
 | ||
|  | which neatly avoids the problem of calculating 0/0 that can occur with the | ||
|  | main definition as x [rarr] 0. | ||
|  | 
 | ||
|  | [endsect] | ||
|  | 
 | ||
|  | [/  | ||
|  |   Copyright 2006 John Maddock, Paul A. Bristow and Xiaogang Zhang. | ||
|  |   Distributed under the Boost Software License, Version 1.0. | ||
|  |   (See accompanying file LICENSE_1_0.txt or copy at | ||
|  |   http://www.boost.org/LICENSE_1_0.txt). | ||
|  | ] |