mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05: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).
							 | 
						||
| 
								 | 
							
								]
							 |