|  | 24 |  | 
          
            |  | 25 | === Boost.Math Generalized Hypergeometric Functions === | 
          
            |  | 26 |  | 
          
            |  | 27 | Boost.Math [http://www.boost.org/doc/libs/1_55_0/libs/math/doc/html/index.html] | 
          
            |  | 28 | is a large well-established Boost library, but new mathematical functions can always be added. | 
          
            |  | 29 |  | 
          
            |  | 30 | Generalized hypergeometric functions are convergent power series | 
          
            |  | 31 | that have rational coefficients. | 
          
            |  | 32 |  | 
          
            |  | 33 | [http://en.wikipedia.org/wiki/Generalized_hypergeometric_function] | 
          
            |  | 34 |  | 
          
            |  | 35 | Hypergeometric functions are remarkably versatile because many of | 
          
            |  | 36 | the well-known functions and special functions of pure and applied | 
          
            |  | 37 | mathematics are special cases of hypergeometric functions. | 
          
            |  | 38 | These include various mathematical constants, | 
          
            |  | 39 | elementary transcendental functions, Bessel functions, | 
          
            |  | 40 | the incomplete gamma function, confluent hypergemetric functions, | 
          
            |  | 41 | generalized Legendre functions, and (infinitely) many more. | 
          
            |  | 42 |  | 
          
            |  | 43 | Even though the theory of hypergeometric functions is well-established, | 
          
            |  | 44 | there are, nonetheless, very few programs or libraries that offer | 
          
            |  | 45 | calculations of these fascinating and versatile functions. | 
          
            |  | 46 |  | 
          
            |  | 47 | In this project, we will implement fast, accurate calculations of | 
          
            |  | 48 | certain generalized hypergeometric functions and establish convergent | 
          
            |  | 49 | parameter ranges for these. We will write them with generic templates, | 
          
            |  | 50 | as is customary and suitable for Boost.Math. | 
          
            |  | 51 |  | 
          
            |  | 52 | Our work will make use of many numerical methods for special functions, | 
          
            |  | 53 | including expansions in Chebyshev polynomials, rational approximations, | 
          
            |  | 54 | Pade approximations, Taylor series, asymptotic series, and others. | 
          
            |  | 55 |  | 
          
            |  | 56 | The main goals of the project include: | 
          
            |  | 57 |  | 
          
            |  | 58 | * Investigate calculation methods for hypergeometric_0f1, 1f0, 1f1, 1f2, 2f1. | 
          
            |  | 59 | * Evaluate regions of parameter convergence for these. | 
          
            |  | 60 | * Ensure that calculations are fast and accurate computation for all built-in types and multiple-precision types. | 
          
            |  | 61 | * Optional: Add support generalized Legendre functions of type-I to Boost.Math. | 
          
            |  | 62 | * Optional: Replace certain internal calculations within Boost.Math with hypergemetric functions. | 
          
            |  | 63 |  | 
          
            |  | 64 | This project requires strong interest in and dedication to serious mathematical programming | 
          
            |  | 65 | and knowledge of C++, especially using templates which Boost.Math makes much | 
          
            |  | 66 | use of to support not only built-in float, double and long double but also multiple precision types. | 
          
            |  | 67 | You will need to have experience of using Boost libraries, including Boost.Test, and | 
          
            |  | 68 | a rudimentary or working knowledge of GIT will be useful. | 
          
            |  | 69 |  | 
          
            |  | 70 | A preliminary investigation for this project can be found here: | 
          
            |  | 71 | [https://github.com/boostorg/multiprecision/blob/develop/example/hypergeometric_luke_algorithms.cpp] | 
          
            |  | 72 | In this file, we are investigating Chebyshev expansions for multiple-precision calculations | 
          
            |  | 73 | of hypergeometric functions. | 
          
            |  | 74 |  | 
          
            |  | 75 | If this code leaves you terrified, then this project is not for you. | 
          
            |  | 76 | But if it only frightens you a little bit and piques your interest | 
          
            |  | 77 | (and you have a passion for numerical programming), then this project | 
          
            |  | 78 | is right for you. | 
          
            |  | 79 |  | 
          
            |  | 80 | If you would like to demonstrate your skills, use the file in the | 
          
            |  | 81 | link above such that hypergeometric_0f1 is used for multiple-precision | 
          
            |  | 82 | calculations of cylindrical Bessel functions (i.e., cyl_bessel_j). | 
          
            |  | 83 | Use Boost's cpp_dec_float_50 type, for example. Discuss the relation between | 
          
            |  | 84 | hypergeometric_0f1 and cyl_bessel_j, investigate convergence properties, | 
          
            |  | 85 | and take a peek at run-time characteristics. | 
          
            |  | 86 | You can use any platform, Linux, Mac or Microsoft with your IDE of choice, | 
          
            |  | 87 | perhaps Visual Studio, Eclipse, Code Blocks, or NetBeans. | 
          
            |  | 88 |  | 
          
            |  | 89 | This project will by mentored by Christopher Kormanyos, and | 
          
            |  | 90 | supported by Paul Bristow and John Maddock mathematical and algorithmic expertise, | 
          
            |  | 91 | administration, Boost infrastructure. | 
          
            |  | 92 |  |