# GL Profile Suite / boost_1_51_0 / boost / math / special_functions / laguerre.hpp

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135``` ```// (C) Copyright John Maddock 2006. // Use, modification and distribution are subject to 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) #ifndef BOOST_MATH_SPECIAL_LAGUERRE_HPP #define BOOST_MATH_SPECIAL_LAGUERRE_HPP #ifdef _MSC_VER #pragma once #endif #include #include #include namespace boost{ namespace math{ // Recurrance relation for Laguerre polynomials: template inline typename tools::promote_args::type laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1) { typedef typename tools::promote_args::type result_type; return ((2 * n + 1 - result_type(x)) * result_type(Ln) - n * result_type(Lnm1)) / (n + 1); } namespace detail{ // Implement Laguerre polynomials via recurrance: template T laguerre_imp(unsigned n, T x) { T p0 = 1; T p1 = 1 - x; if(n == 0) return p0; unsigned c = 1; while(c < n) { std::swap(p0, p1); p1 = laguerre_next(c, x, p0, p1); ++c; } return p1; } template inline typename tools::promote_args::type laguerre(unsigned n, T x, const Policy&, const mpl::true_&) { typedef typename tools::promote_args::type result_type; typedef typename policies::evaluation::type value_type; return policies::checked_narrowing_cast(detail::laguerre_imp(n, static_cast(x)), "boost::math::laguerre<%1%>(unsigned, %1%)"); } template inline typename tools::promote_args::type laguerre(unsigned n, unsigned m, T x, const mpl::false_&) { return boost::math::laguerre(n, m, x, policies::policy<>()); } } // namespace detail template inline typename tools::promote_args::type laguerre(unsigned n, T x) { return laguerre(n, x, policies::policy<>()); } // Recurrence for associated polynomials: template inline typename tools::promote_args::type laguerre_next(unsigned n, unsigned l, T1 x, T2 Pl, T3 Plm1) { typedef typename tools::promote_args::type result_type; return ((2 * n + l + 1 - result_type(x)) * result_type(Pl) - (n + l) * result_type(Plm1)) / (n+1); } namespace detail{ // Laguerre Associated Polynomial: template T laguerre_imp(unsigned n, unsigned m, T x, const Policy& pol) { // Special cases: if(m == 0) return boost::math::laguerre(n, x, pol); T p0 = 1; if(n == 0) return p0; T p1 = m + 1 - x; unsigned c = 1; while(c < n) { std::swap(p0, p1); p1 = laguerre_next(c, m, x, p0, p1); ++c; } return p1; } } template inline typename tools::promote_args::type laguerre(unsigned n, unsigned m, T x, const Policy& pol) { typedef typename tools::promote_args::type result_type; typedef typename policies::evaluation::type value_type; return policies::checked_narrowing_cast(detail::laguerre_imp(n, m, static_cast(x), pol), "boost::math::laguerre<%1%>(unsigned, unsigned, %1%)"); } template inline typename laguerre_result::type laguerre(unsigned n, T1 m, T2 x) { typedef typename policies::is_policy::type tag_type; return detail::laguerre(n, m, x, tag_type()); } } // namespace math } // namespace boost #endif // BOOST_MATH_SPECIAL_LAGUERRE_HPP ```
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.