diff --git a/.drone.star b/.drone.star index 987562d8f..691246e33 100644 --- a/.drone.star +++ b/.drone.star @@ -18,7 +18,7 @@ def main(ctx): things_to_test = [ "special_fun", "distribution_tests", "mp", "misc", "interpolators", "quadrature", "autodiff", "long-running-tests", "float128_tests", "concepts" ] gcc13_things_to_test = [ "special_fun", "distribution_tests", "mp", "misc", "interpolators", "quadrature", "autodiff", "long-running-tests", "float128_tests", "concepts", "new_floats" ] sanitizer_test = [ "special_fun", "distribution_tests", "misc", "interpolators", "quadrature", "float128_tests" ] - reverse_mode_autodiff_test = [ "test_reverse_mode_autodiff", "autodiff-long-running-tests" ] + reverse_mode_autodiff_test = [ "test_reverse_mode_autodiff", "autodiff-long-running-tests", "gradient_based_optimizers" ] gnu_5_stds = [ "gnu++14", "c++14" ] gnu_6_stds = [ "gnu++14", "c++14", "gnu++17", "c++17" ] clang_6_stds = [ "c++14", "c++17" ] diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml index b879117d0..6c76d1f23 100644 --- a/.github/workflows/codecov.yml +++ b/.github/workflows/codecov.yml @@ -55,6 +55,8 @@ jobs: compiler: gcc-12, cxxstd: '20', os: ubuntu-22.04, install: 'g++-12-multilib', address-model: '64', suite: 'autodiff' } - { name: Collect coverage reverse-autodiff, coverage: yes, compiler: gcc-12, cxxstd: '20', os: ubuntu-22.04, install: 'g++-12-multilib', address-model: '64', suite: 'test_reverse_mode_autodiff' } + - { name: Collect coverage gradient-optimizers, coverage: yes, + compiler: gcc-12, cxxstd: '20', os: ubuntu-22.04, install: 'g++-12-multilib', address-model: '64', suite: 'gradient_based_optimizers' } timeout-minutes: 360 runs-on: ${{matrix.os}} container: ${{matrix.container}} diff --git a/doc/equations/autodiff/thomson_potential.svg b/doc/equations/autodiff/thomson_potential.svg new file mode 100644 index 000000000..dd01ba10d --- /dev/null +++ b/doc/equations/autodiff/thomson_potential.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/doc/equations/gradient_based_optimizers/thomson_potential.svg b/doc/equations/gradient_based_optimizers/thomson_potential.svg new file mode 100644 index 000000000..dd01ba10d --- /dev/null +++ b/doc/equations/gradient_based_optimizers/thomson_potential.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/doc/graphs/gradient_based_optimizers/lbfgs_to_nag_and_gd_comparison.svg b/doc/graphs/gradient_based_optimizers/lbfgs_to_nag_and_gd_comparison.svg new file mode 100644 index 000000000..0610220af --- /dev/null +++ b/doc/graphs/gradient_based_optimizers/lbfgs_to_nag_and_gd_comparison.svg @@ -0,0 +1,1195 @@ + + + + + + + + 2026-01-28T21:18:00.560497 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/graphs/gradient_based_optimizers/nag_to_gd_comparison.svg b/doc/graphs/gradient_based_optimizers/nag_to_gd_comparison.svg new file mode 100644 index 000000000..4daa2db30 --- /dev/null +++ b/doc/graphs/gradient_based_optimizers/nag_to_gd_comparison.svg @@ -0,0 +1,961 @@ + + + + + + + + 2026-01-28T20:44:00.469139 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/graphs/gradient_based_optimizers/thomson_energy_error_gradient_descent.svg b/doc/graphs/gradient_based_optimizers/thomson_energy_error_gradient_descent.svg new file mode 100644 index 000000000..5d4e04814 --- /dev/null +++ b/doc/graphs/gradient_based_optimizers/thomson_energy_error_gradient_descent.svg @@ -0,0 +1,1860 @@ + + + + + + + + 2026-01-28T20:44:52.460257 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/graphs/gradient_based_optimizers/thomson_sphere_2to8.png b/doc/graphs/gradient_based_optimizers/thomson_sphere_2to8.png new file mode 100644 index 000000000..f1a85e049 Binary files /dev/null and b/doc/graphs/gradient_based_optimizers/thomson_sphere_2to8.png differ diff --git a/doc/graphs/gradient_based_optimizers/thomson_sphere_2to8.svg b/doc/graphs/gradient_based_optimizers/thomson_sphere_2to8.svg new file mode 100644 index 000000000..d8b9ef90d --- /dev/null +++ b/doc/graphs/gradient_based_optimizers/thomson_sphere_2to8.svg @@ -0,0 +1,9313 @@ + + + + + + + + 2026-01-28T14:07:45.541041 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/html/backgrounders.html b/doc/html/backgrounders.html index 6ed338bf8..50718a264 100644 --- a/doc/html/backgrounders.html +++ b/doc/html/backgrounders.html @@ -1,9 +1,9 @@ - + Chapter 24. Backgrounders - + @@ -55,7 +55,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

+ Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

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)

diff --git a/doc/html/constants.html b/doc/html/constants.html index 2c6e0c52d..893277560 100644 --- a/doc/html/constants.html +++ b/doc/html/constants.html @@ -1,9 +1,9 @@ - + Chapter 4. Mathematical Constants - + @@ -48,7 +48,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

+ Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

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)

diff --git a/doc/html/cstdfloat.html b/doc/html/cstdfloat.html index 76449322e..e08f03957 100644 --- a/doc/html/cstdfloat.html +++ b/doc/html/cstdfloat.html @@ -1,9 +1,9 @@ - + Chapter 3. Specified-width floating-point typedefs - + @@ -56,7 +56,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

+ Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

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)

diff --git a/doc/html/dist.html b/doc/html/dist.html index 125f3fb0c..ae3f75ed7 100644 --- a/doc/html/dist.html +++ b/doc/html/dist.html @@ -1,9 +1,9 @@ - + Chapter 5. Statistical Distributions and Functions - + @@ -160,6 +160,8 @@ Erlang) Distribution
Geometric Distribution
+
Holtsmark + Distribution
Hyperexponential Distribution
Hypergeometric @@ -172,11 +174,14 @@ Gaussian (or Inverse Normal) Distribution
Kolmogorov-Smirnov Distribution
+
Landau Distribution
Laplace Distribution
Logistic Distribution
Log Normal Distribution
+
Map-Airy + Distribution
Negative Binomial Distribution
Noncentral @@ -192,6 +197,8 @@
Pareto Distribution
Poisson Distribution
Rayleigh Distribution
+
SαS Point5 + Distribution
Skew Normal Distribution
Students @@ -211,7 +218,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

+ Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

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)

diff --git a/doc/html/extern_c.html b/doc/html/extern_c.html index bac9d3e2e..b660da54f 100644 --- a/doc/html/extern_c.html +++ b/doc/html/extern_c.html @@ -1,9 +1,9 @@ - + Chapter 9. TR1 and C99 external "C" Functions - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

+ Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

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)

diff --git a/doc/html/filters.html b/doc/html/filters.html index bd75b2a9f..b2d5ae9c1 100644 --- a/doc/html/filters.html +++ b/doc/html/filters.html @@ -1,9 +1,9 @@ - + Chapter 15. Filters - + @@ -35,7 +35,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

+ Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

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)

diff --git a/doc/html/gcd_lcm.html b/doc/html/gcd_lcm.html index bdff04e20..850bf1842 100644 --- a/doc/html/gcd_lcm.html +++ b/doc/html/gcd_lcm.html @@ -1,9 +1,9 @@ - + Chapter 19. Integer Utilities (Greatest Common Divisor and Least Common Multiple) - + @@ -40,7 +40,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

+ Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

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)

diff --git a/doc/html/index.html b/doc/html/index.html index 7f4e54c23..534943afb 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -1,9 +1,9 @@ - + Math Toolkit 4.2.1 - + @@ -82,6 +82,9 @@

Xiaogang Zhang

+

+Maksym Zhelyeznyakov +

This manual is also available in printer @@ -91,7 +94,7 @@ This manual is also available in

Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/doc/html/indexes.html b/doc/html/indexes.html index 503e08acb..5851d685d 100644 --- a/doc/html/indexes.html +++ b/doc/html/indexes.html @@ -1,9 +1,9 @@ - + Chapter 26. Indexes - + @@ -41,7 +41,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

+ Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

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)

diff --git a/doc/html/indexes/s01.html b/doc/html/indexes/s01.html index 60131cc27..493ce79f1 100644 --- a/doc/html/indexes/s01.html +++ b/doc/html/indexes/s01.html @@ -1,9 +1,9 @@ - + Function Index - + @@ -25,7 +25,7 @@

-Function Index

+Function Index

1 2 4 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _

@@ -129,10 +128,18 @@
  • +

    add_checkpoint

    + +
  • +
  • add_fn

  • +

    adjoint

    + +
  • +
  • agm

  • differential_evolution

  • @@ -971,6 +1013,23 @@
  • +

    dist

    + +
  • +
  • distribution

  • @@ -1323,10 +1383,16 @@
  • C99 C Functions

  • +
  • exponential_distribution

  • +
  • +

    exp_sinh_integrate

    + +
  • extended_kindlmann

  • +
  • extreme_value_distribution

  • F @@ -1413,6 +1479,10 @@
  • +

    fisher_f_distribution

    + +
  • +
  • float

  • @@ -1546,6 +1616,7 @@
  • Error Function Inverses

  • Finding Zeros of Airy Functions

  • Generic operations common to all distributions are non-member functions

  • +
  • Gradient Descent

  • Heuman Lambda Function

  • Implementation

  • Inverse Chi Squared Distribution

  • @@ -1577,6 +1648,10 @@
  • +

    function_constraint

    + +
  • +
  • fvar

  • @@ -1593,6 +1668,10 @@
  • +

    gamma_distribution

    + +
  • +
  • gamma_p

    H @@ -1667,7 +1767,7 @@
  • +
  • inverse_chi_squared_distribution

  • +
  • inverse_gamma_distribution

  • +
  • +

    inverse_gaussian_distribution

    + +
  • iround

  • +

    l2_ball_constraint

    + +
  • +
  • l2_distance

  • @@ -2278,6 +2401,8 @@

    lambert_wm1_prime

    +
  • landau_distribution

  • +
  • laplace_distribution

  • ldexp

  • +

    logcdf

    + +
  • +
  • logistic_distribution

  • +
  • logistic_sigmoid

  • +
  • logit

  • +
  • +

    lognormal_distribution

    + +
  • +
  • +

    logpdf

    + +
  • +
  • logsumexp

  • @@ -2516,6 +2670,7 @@
  • @@ -2603,6 +2758,22 @@
  • +

    make_gradient_descent

    + +
  • +
  • +

    make_lbfgs

    + +
  • +
  • +

    make_nag

    + +
  • +
  • +

    mapairy_distribution

    + +
  • +
  • mean

  • +
  • negative_binomial_distribution

  • newton_raphson_iterate

    - +
  • nextafter

    @@ -2801,8 +2973,21 @@
  • +

    non_central_beta_distribution

    + +
  • +
  • +

    non_central_chi_squared_distribution

    + +
  • +
  • +

    non_central_f_distribution

    + +
  • +
  • norm

    A B C D E F G H I J K L M N O P Q R S T U V W

    A
    -
    +
    B
    @@ -55,6 +65,10 @@
  • binomial_distribution

  • +
  • +

    box_constraints

    + +
  • C @@ -114,6 +128,10 @@
  • +

    combined_convergence_policy

    + +
  • +
  • complex

  • N @@ -312,6 +373,14 @@
  • negative_binomial_distribution

  • +

    nesterov_accelerated_gradient

    + +
  • +
  • +

    nesterov_update_policy

    + +
  • +
  • nonfinite_num_get

  • @@ -320,6 +389,10 @@
  • +

    nonnegativity_constraint

    + +
  • +
  • non_central_beta_distribution

  • @@ -349,6 +422,10 @@
    P @@ -409,13 +490,46 @@

    random_search_parameters

    +
  • +

    random_uniform_initializer_rvar

    + +
  • rayleigh_distribution

  • +
  • +

    relative_objective_tol_policy

    + +
  • +
  • +

    reverse_mode_function_eval_policy

    + +
  • +
  • +

    reverse_mode_gradient_evaluation_policy

    + +
  • +
  • +

    rvar

    + +
  • S
  • +

    tape_initializer_rvar

    + +
  • +
  • triangular_distribution

    • Additional Implementation Notes

    • @@ -460,8 +578,16 @@

      ulps_plot

      +
    • +

      unconstrained_policy

      + +
    • uniform_distribution

    • +

      unit_sphere_constraint

      + +
    • +
    • upper_incomplete_gamma_fract

      • Continued Fraction Evaluation

      • @@ -480,6 +606,10 @@ W
          +
        • +

          wallclock_termination_policy

          + +
        • weibull_distribution

        • whittaker_shannon

          @@ -492,7 +622,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

          + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

          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)

          diff --git a/doc/html/indexes/s03.html b/doc/html/indexes/s03.html index 9596923cd..46825b452 100644 --- a/doc/html/indexes/s03.html +++ b/doc/html/indexes/s03.html @@ -1,9 +1,9 @@ - + Typedef Index - + @@ -25,8 +25,8 @@

        -Typedef Index

        -

        A B C D E F G H I K L N P R S T U V W

        +Typedef Index
    +

    A B C D E F G H I K L M N P R S T U V W

    A @@ -154,6 +154,10 @@

    -Macro Index

    +Macro Index

    B F

    @@ -97,10 +97,6 @@
  • -

    BOOST_HAS_LOG1P

    - -
  • -
  • BOOST_MATH_ASSERT

  • +

    BOOST_MATH_BUFFER_SIZE

    + +
  • +
  • BOOST_MATH_CONTROL_FP

  • +

    BOOST_MATH_CUDA_ENABLED

    + +
  • +
  • BOOST_MATH_DECLARE_DISTRIBUTIONS

  • +

    BOOST_MATH_REVERSE_MODE_ET_ON

    + +
  • +
  • BOOST_MATH_ROUNDING_ERROR_POLICY

  • @@ -370,7 +458,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/indexes/s05.html b/doc/html/indexes/s05.html index f9fe4007e..db583578a 100644 --- a/doc/html/indexes/s05.html +++ b/doc/html/indexes/s05.html @@ -1,9 +1,9 @@ - + Index - + @@ -24,7 +24,7 @@

    -Index

    +Index

    1 2 4 5 7 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _

    @@ -90,7 +90,6 @@
  • Rational Method Comparison with Intel C++ C++0x mode version 1910 on linux

  • Rational Method Comparison with Microsoft Visual C++ version 14.2 on Windows x64

  • Spherical Harmonics

  • -
  • Weibull Distribution

  • @@ -187,6 +186,10 @@
  • +

    abstract_optimizer

    + +
  • +
  • accuracy

  • Geometric Distribution
    +
    Holtsmark + Distribution
    Hyperexponential Distribution
    Hypergeometric @@ -63,11 +65,14 @@ Gaussian (or Inverse Normal) Distribution
    Kolmogorov-Smirnov Distribution
    +
    Landau Distribution
    Laplace Distribution
    Logistic Distribution
    Log Normal Distribution
    +
    Map-Airy + Distribution
    Negative Binomial Distribution
    Noncentral @@ -83,6 +88,8 @@
    Pareto Distribution
    Poisson Distribution
    Rayleigh Distribution
    +
    SαS Point5 + Distribution
    Skew Normal Distribution
    Students @@ -99,7 +106,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dist_algorithms.html b/doc/html/math_toolkit/dist_ref/dist_algorithms.html index ffda71c14..dab64cbe2 100644 --- a/doc/html/math_toolkit/dist_ref/dist_algorithms.html +++ b/doc/html/math_toolkit/dist_ref/dist_algorithms.html @@ -1,9 +1,9 @@ - + Distribution Algorithms - + @@ -122,7 +122,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists.html b/doc/html/math_toolkit/dist_ref/dists.html index 0cbf64914..698cafb7f 100644 --- a/doc/html/math_toolkit/dist_ref/dists.html +++ b/doc/html/math_toolkit/dist_ref/dists.html @@ -1,9 +1,9 @@ - + Distributions - + @@ -48,6 +48,8 @@ Erlang) Distribution
    Geometric Distribution
    +
    Holtsmark + Distribution
    Hyperexponential Distribution
    Hypergeometric @@ -60,11 +62,14 @@ Gaussian (or Inverse Normal) Distribution
    Kolmogorov-Smirnov Distribution
    +
    Landau Distribution
    Laplace Distribution
    Logistic Distribution
    Log Normal Distribution
    +
    Map-Airy + Distribution
    Negative Binomial Distribution
    Noncentral @@ -80,6 +85,8 @@
    Pareto Distribution
    Poisson Distribution
    Rayleigh Distribution
    +
    SαS Point5 + Distribution
    Skew Normal Distribution
    Students @@ -94,7 +101,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/arcine_dist.html b/doc/html/math_toolkit/dist_ref/dists/arcine_dist.html index 4f4afed84..ffafc8a22 100644 --- a/doc/html/math_toolkit/dist_ref/dists/arcine_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/arcine_dist.html @@ -1,9 +1,9 @@ - + Arcsine Distribution - + @@ -44,11 +44,11 @@ typedef Policy policy_type; // Constructor from two range parameters, x_min and x_max: - arcsine_distribution(RealType x_min = 0, RealType x_max = 1); + BOOST_MATH_GPU_ENABLED arcsine_distribution(RealType x_min = 0, RealType x_max = 1); // Range Parameter accessors: - RealType x_min() const; - RealType x_max() const; + BOOST_MATH_GPU_ENABLED RealType x_min() const; + BOOST_MATH_GPU_ENABLED RealType x_max() const; }; }} // namespaces @@ -168,8 +168,8 @@ Parameter Accessors -
    RealType x_min() const;
    -RealType x_max() const;
    +
    BOOST_MATH_GPU_ENABLED RealType x_min() const;
    +BOOST_MATH_GPU_ENABLED RealType x_max() const;
     

    Return the parameter x_min or x_max @@ -195,11 +195,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The formulae for calculating these are shown in the table below, and at @@ -633,7 +635,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/bernoulli_dist.html b/doc/html/math_toolkit/dist_ref/dists/bernoulli_dist.html index a70a19cec..bbf907f88 100644 --- a/doc/html/math_toolkit/dist_ref/dists/bernoulli_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/bernoulli_dist.html @@ -1,9 +1,9 @@ - + Bernoulli Distribution - + @@ -43,9 +43,9 @@ typedef RealType value_type; typedef Policy policy_type; - bernoulli_distribution(RealType p); // Constructor. + BOOST_MATH_GPU_ENABLED bernoulli_distribution(RealType p); // Constructor. // Accessor function. - RealType success_fraction() const + BOOST_MATH_GPU_ENABLED RealType success_fraction() const // Probability of success (as a fraction). }; }} // namespaces @@ -98,13 +98,13 @@ Member Functions -
    bernoulli_distribution(RealType p);
    +
    BOOST_MATH_GPU_ENABLED bernoulli_distribution(RealType p);
     

    Constructs a bernoulli distribution with success_fraction p.

    -
    RealType success_fraction() const
    +
    BOOST_MATH_GPU_ENABLED RealType success_fraction() const
     

    Returns the success_fraction parameter of this distribution. @@ -120,11 +120,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is 0 and 1, and the useful supported @@ -353,7 +355,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/beta_dist.html b/doc/html/math_toolkit/dist_ref/dists/beta_dist.html index b1cf114fd..e82b8f7c6 100644 --- a/doc/html/math_toolkit/dist_ref/dists/beta_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/beta_dist.html @@ -1,9 +1,9 @@ - + Beta Distribution - + @@ -45,30 +45,30 @@ typedef RealType value_type; typedef Policy policy_type; // Constructor from two shape parameters, alpha & beta: - beta_distribution(RealType a, RealType b); + BOOST_MATH_GPU_ENABLED beta_distribution(RealType a, RealType b); // Parameter accessors: - RealType alpha() const; - RealType beta() const; + BOOST_MATH_GPU_ENABLED RealType alpha() const; + BOOST_MATH_GPU_ENABLED RealType beta() const; // Parameter estimators of alpha or beta from mean and variance. - static RealType find_alpha( + BOOST_MATH_GPU_ENABLED static RealType find_alpha( RealType mean, // Expected value of mean. RealType variance); // Expected value of variance. - static RealType find_beta( + BOOST_MATH_GPU_ENABLED static RealType find_beta( RealType mean, // Expected value of mean. RealType variance); // Expected value of variance. // Parameter estimators from // either alpha or beta, and x and probability. - static RealType find_alpha( + BOOST_MATH_GPU_ENABLED static RealType find_alpha( RealType beta, // from beta. RealType x, // x. RealType probability); // cdf - static RealType find_beta( + BOOST_MATH_GPU_ENABLED static RealType find_beta( RealType alpha, // alpha. RealType x, // probability x. RealType probability); // probability cdf. @@ -137,7 +137,7 @@ Constructor -
    beta_distribution(RealType alpha, RealType beta);
    +
    BOOST_MATH_GPU_ENABLED beta_distribution(RealType alpha, RealType beta);
     

    Constructs a beta distribution with shape parameters alpha @@ -165,13 +165,13 @@ Parameter Accessors -

    RealType alpha() const;
    +
    BOOST_MATH_GPU_ENABLED RealType alpha() const;
     

    Returns the parameter alpha from which this distribution was constructed.

    -
    RealType beta() const;
    +
    BOOST_MATH_GPU_ENABLED RealType beta() const;
     

    Returns the parameter beta from which this distribution @@ -248,11 +248,13 @@ from presumed-known mean and variance. Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The formulae for calculating these are shown in the table below, and at @@ -606,7 +608,7 @@ from presumed-known mean and variance. Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/binomial_dist.html b/doc/html/math_toolkit/dist_ref/dists/binomial_dist.html index 0cec272b9..da6b49805 100644 --- a/doc/html/math_toolkit/dist_ref/dists/binomial_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/binomial_dist.html @@ -1,9 +1,9 @@ - + Binomial Distribution - + @@ -479,10 +479,10 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, range and support.

    @@ -890,7 +890,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/cauchy_dist.html b/doc/html/math_toolkit/dist_ref/dists/cauchy_dist.html index 79f041a23..045032f91 100644 --- a/doc/html/math_toolkit/dist_ref/dists/cauchy_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/cauchy_dist.html @@ -1,9 +1,9 @@ - + Cauchy-Lorentz Distribution - + @@ -42,10 +42,10 @@ typedef RealType value_type; typedef Policy policy_type; - cauchy_distribution(RealType location = 0, RealType scale = 1); + BOOST_MATH_GPU_ENABLED cauchy_distribution(RealType location = 0, RealType scale = 1); - RealType location()const; - RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType location()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; };

    @@ -92,7 +92,7 @@ Member Functions -

    cauchy_distribution(RealType location = 0, RealType scale = 1);
    +
    BOOST_MATH_GPU_ENABLED cauchy_distribution(RealType location = 0, RealType scale = 1);
     

    Constructs a Cauchy distribution, with location parameter location @@ -103,12 +103,12 @@

    Requires scale > 0, otherwise calls domain_error.

    -
    RealType location()const;
    +
    BOOST_MATH_GPU_ENABLED RealType location()const;
     

    Returns the location parameter of the distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale parameter of the distribution. @@ -124,11 +124,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    Note however that the Cauchy distribution does not have a mean, standard @@ -192,7 +194,7 @@

    Using the relation: pdf = 1 / (π * γ * (1 + ((x - x0 ) - / γ)2) + / γ)2))

    @@ -210,30 +212,21 @@ p = 0.5 + atan(x)/π

    - But that suffers from cancellation error as x -> -∞. So recall - that for x < - 0: + But that suffers from cancellation error as x -> -∞. +

    +

    + Instead, the mathematically equivalent expression based on the + function atan2 is used:

    - atan(x) = -π/2 - atan(1/x) + p = atan2(1, -x)/π

    - Substituting into the above we get: + By symmetry, the complement is

    - p = -atan(1/x)/π ; x < 0 + q = atan2(1, x)/π

    -

    - So the procedure is to calculate the cdf for -fabs(x) using the - above formula. Note that to factor in the location and scale - parameters you must substitute (x - x0 ) / γ for x in the above. -

    -

    - This procedure yields the smaller of p and - q, so the result may need subtracting from - 1 depending on whether we want the complement or not, and whether - x is less than x0 or not. -

    @@ -296,7 +289,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/chi_squared_dist.html b/doc/html/math_toolkit/dist_ref/dists/chi_squared_dist.html index 2629b7bb9..bd5a433ef 100644 --- a/doc/html/math_toolkit/dist_ref/dists/chi_squared_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/chi_squared_dist.html @@ -1,9 +1,9 @@ - + Chi Squared Distribution - + @@ -45,13 +45,13 @@ typedef Policy policy_type; // Constructor: - chi_squared_distribution(RealType i); + BOOST_MATH_GPU_ENABLED chi_squared_distribution(RealType i); // Accessor to parameter: - RealType degrees_of_freedom()const; + BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const; // Parameter estimation: - static RealType find_degrees_of_freedom( + BOOST_MATH_GPU_ENABLED static RealType find_degrees_of_freedom( RealType difference_from_mean, RealType alpha, RealType beta, @@ -178,11 +178,13 @@ independent, normally distributed random Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    (We have followed the usual restriction of the mode to degrees of freedom @@ -399,7 +401,7 @@ independent, normally distributed random Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/empirical_cdf.html b/doc/html/math_toolkit/dist_ref/dists/empirical_cdf.html index 4e99d3da7..671ea188e 100644 --- a/doc/html/math_toolkit/dist_ref/dists/empirical_cdf.html +++ b/doc/html/math_toolkit/dist_ref/dists/empirical_cdf.html @@ -1,9 +1,9 @@ - + Empirical Cumulative Distribution Function - + @@ -190,7 +190,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/exp_dist.html b/doc/html/math_toolkit/dist_ref/dists/exp_dist.html index bd580bac3..8dc61f2c6 100644 --- a/doc/html/math_toolkit/dist_ref/dists/exp_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/exp_dist.html @@ -1,9 +1,9 @@ - + Exponential Distribution - + @@ -41,9 +41,9 @@ typedef RealType value_type; typedef Policy policy_type; - exponential_distribution(RealType lambda = 1); + BOOST_MATH_GPU_ENABLED exponential_distribution(RealType lambda = 1); - RealType lambda()const; + BOOST_MATH_GPU_ENABLED RealType lambda()const; };

    @@ -72,7 +72,7 @@ Member Functions -

    exponential_distribution(RealType lambda = 1);
    +
    BOOST_MATH_GPU_ENABLED exponential_distribution(RealType lambda = 1);
     

    Constructs an Exponential @@ -82,7 +82,7 @@

    Requires lambda > 0, otherwise calls domain_error.

    -
    RealType lambda()const;
    +
    BOOST_MATH_GPU_ENABLED RealType lambda()const;
     

    Accessor function returns the lambda parameter of the distribution. @@ -98,15 +98,22 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0, +∞].

    +

    + In this distribution the implementation of both logcdf, + and logpdf are specialized + to improve numerical accuracy. +

    Accuracy @@ -157,6 +164,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = -expm1(-x * λ) +

    + + +

    cdf @@ -169,6 +188,18 @@ + +

    + logcdf +

    + + +

    + log(cdf) = log1p(-exp(-x * λ)) +

    + + +

    cdf complement @@ -316,7 +347,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/extreme_dist.html b/doc/html/math_toolkit/dist_ref/dists/extreme_dist.html index 7ca6ac89c..816534b97 100644 --- a/doc/html/math_toolkit/dist_ref/dists/extreme_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/extreme_dist.html @@ -1,9 +1,9 @@ - + Extreme Value Distribution - + @@ -41,10 +41,10 @@ public: typedef RealType value_type; - extreme_value_distribution(RealType location = 0, RealType scale = 1); + BOOST_MATH_GPU_ENABLED extreme_value_distribution(RealType location = 0, RealType scale = 1); - RealType scale()const; - RealType location()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType location()const; };

    @@ -101,7 +101,7 @@ Member Functions -

    extreme_value_distribution(RealType location = 0, RealType scale = 1);
    +
    BOOST_MATH_GPU_ENABLED extreme_value_distribution(RealType location = 0, RealType scale = 1);
     

    Constructs an Extreme Value distribution with the specified location and @@ -111,12 +111,12 @@ Requires scale > 0, otherwise calls domain_error.

    -
    RealType location()const;
    +
    BOOST_MATH_GPU_ENABLED RealType location()const;
     

    Returns the location parameter of the distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale parameter of the distribution. @@ -132,15 +132,22 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random parameter is [-∞, +∞].

    +

    + In this distribution the implementation of both logcdf, + and logpdf are specialized + to improve numerical accuracy. +

    Accuracy @@ -192,6 +199,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = log(1/b) + e - exp(e) +

    + + +

    cdf @@ -204,6 +223,18 @@ + +

    + logcdf +

    + + +

    + log(cdf) = -exp((a-x)/b) +

    + + +

    cdf complement @@ -319,7 +350,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/f_dist.html b/doc/html/math_toolkit/dist_ref/dists/f_dist.html index cb967469c..fbd996af2 100644 --- a/doc/html/math_toolkit/dist_ref/dists/f_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/f_dist.html @@ -1,9 +1,9 @@ - + F Distribution - + @@ -43,11 +43,11 @@ typedef RealType value_type; // Construct: - fisher_f_distribution(const RealType& i, const RealType& j); + BOOST_MATH_GPU_ENABLED fisher_f_distribution(const RealType& i, const RealType& j); // Accessors: - RealType degrees_of_freedom1()const; - RealType degrees_of_freedom2()const; + BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom1()const; + BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom2()const; }; }} //namespaces @@ -81,7 +81,7 @@ Member Functions
    -
    fisher_f_distribution(const RealType& df1, const RealType& df2);
    +
    BOOST_MATH_GPU_ENABLED fisher_f_distribution(const RealType& df1, const RealType& df2);
     

    Constructs an F-distribution with numerator degrees of freedom df1 @@ -92,12 +92,12 @@ both greater than zero, otherwise domain_error is called.

    -
    RealType degrees_of_freedom1()const;
    +
    BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom1()const;
     

    Returns the numerator degrees of freedom parameter of the distribution.

    -
    RealType degrees_of_freedom2()const;
    +
    BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom2()const;
     

    Returns the denominator degrees of freedom parameter of the distribution. @@ -113,11 +113,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0, +∞]. @@ -423,7 +425,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/gamma_dist.html b/doc/html/math_toolkit/dist_ref/dists/gamma_dist.html index a07236561..b2f2d0a84 100644 --- a/doc/html/math_toolkit/dist_ref/dists/gamma_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/gamma_dist.html @@ -1,9 +1,9 @@ - + Gamma (and Erlang) Distribution - + @@ -39,10 +39,10 @@ typedef RealType value_type; typedef Policy policy_type; - gamma_distribution(RealType shape, RealType scale = 1) + BOOST_MATH_GPU_ENABLED gamma_distribution(RealType shape, RealType scale = 1) - RealType shape()const; - RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType shape()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; }; }} // namespaces @@ -130,7 +130,7 @@ Member Functions -
    gamma_distribution(RealType shape, RealType scale = 1);
    +
    BOOST_MATH_GPU_ENABLED gamma_distribution(RealType shape, RealType scale = 1);
     

    Constructs a gamma distribution with shape shape and @@ -140,12 +140,12 @@ Requires that the shape and scale parameters are greater than zero, otherwise calls domain_error.

    -
    RealType shape()const;
    +
    BOOST_MATH_GPU_ENABLED RealType shape()const;
     

    Returns the shape parameter of this distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale parameter of this distribution. @@ -161,15 +161,21 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0,+∞].

    +

    + In this distribution the implementation of logpdf + is specialized to improve numerical accuracy. +

    Accuracy @@ -224,6 +230,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = -k*log(θ) + (k-1)*log(x) - lgamma(k) - (x/θ) +

    + + +

    cdf @@ -354,7 +372,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/geometric_dist.html b/doc/html/math_toolkit/dist_ref/dists/geometric_dist.html index bbf0ad2eb..b561b87dd 100644 --- a/doc/html/math_toolkit/dist_ref/dists/geometric_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/geometric_dist.html @@ -1,13 +1,13 @@ - + Geometric Distribution - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -44,28 +44,28 @@ typedef RealType value_type; typedef Policy policy_type; // Constructor from success_fraction: - geometric_distribution(RealType p); + BOOST_MATH_GPU_ENABLED geometric_distribution(RealType p); // Parameter accessors: - RealType success_fraction() const; - RealType successes() const; + BOOST_MATH_GPU_ENABLED RealType success_fraction() const; + BOOST_MATH_GPU_ENABLED RealType successes() const; // Bounds on success fraction: - static RealType find_lower_bound_on_p( + BOOST_MATH_GPU_ENABLED static RealType find_lower_bound_on_p( RealType trials, RealType successes, RealType probability); // alpha - static RealType find_upper_bound_on_p( + BOOST_MATH_GPU_ENABLED static RealType find_upper_bound_on_p( RealType trials, RealType successes, RealType probability); // alpha // Estimate min/max number of trials: - static RealType find_minimum_number_of_trials( + BOOST_MATH_GPU_ENABLED static RealType find_minimum_number_of_trials( RealType k, // Number of failures. RealType p, // Success fraction. RealType probability); // Probability threshold alpha. - static RealType find_maximum_number_of_trials( + BOOST_MATH_GPU_ENABLED static RealType find_maximum_number_of_trials( RealType k, // Number of failures. RealType p, // Success fraction. RealType probability); // Probability threshold alpha. @@ -469,11 +469,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    However it's worth taking a moment to define what these actually mean in @@ -587,7 +589,11 @@

    -
    +

    + In this distribution the implementation of logcdf + is specialized to improve numerical accuracy. +

    +
    Accuracy
    @@ -652,6 +658,18 @@ + +

    + logcdf +

    + + +

    + log(cdf) = log1p(-exp(log1p(-p) * (k+1))) +

    + + +

    cdf complement @@ -831,14 +849,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/dist_ref/dists/holtsmark_dist.html b/doc/html/math_toolkit/dist_ref/dists/holtsmark_dist.html index 854d8cfe5..8dde3c727 100644 --- a/doc/html/math_toolkit/dist_ref/dists/holtsmark_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/holtsmark_dist.html @@ -1,6 +1,6 @@ - + Holtsmark Distribution @@ -194,7 +194,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/hyperexponential_dist.html b/doc/html/math_toolkit/dist_ref/dists/hyperexponential_dist.html index a3fedd35e..424b49cf2 100644 --- a/doc/html/math_toolkit/dist_ref/dists/hyperexponential_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/hyperexponential_dist.html @@ -1,12 +1,12 @@ - + Hyperexponential Distribution - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -1191,10 +1191,10 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, range and support.

    @@ -1457,14 +1457,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/dist_ref/dists/hypergeometric_dist.html b/doc/html/math_toolkit/dist_ref/dists/hypergeometric_dist.html index 8846f8061..ed7f053de 100644 --- a/doc/html/math_toolkit/dist_ref/dists/hypergeometric_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/hypergeometric_dist.html @@ -1,9 +1,9 @@ - + Hypergeometric Distribution - + @@ -152,10 +152,10 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, range and support.

    @@ -348,7 +348,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/inverse_chi_squared_dist.html b/doc/html/math_toolkit/dist_ref/dists/inverse_chi_squared_dist.html index feeef7fda..eeca2b5c5 100644 --- a/doc/html/math_toolkit/dist_ref/dists/inverse_chi_squared_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/inverse_chi_squared_dist.html @@ -1,9 +1,9 @@ - + Inverse Chi Squared Distribution - + @@ -39,11 +39,11 @@ typedef RealType value_type; typedef Policy policy_type; - inverse_chi_squared_distribution(RealType df = 1); // Not explicitly scaled, default 1/df. - inverse_chi_squared_distribution(RealType df, RealType scale = 1/df); // Scaled. + BOOST_MATH_GPU_ENABLED inverse_chi_squared_distribution(RealType df = 1); // Not explicitly scaled, default 1/df. + BOOST_MATH_GPU_ENABLED inverse_chi_squared_distribution(RealType df, RealType scale = 1/df); // Scaled. - RealType degrees_of_freedom()const; // Default 1. - RealType scale()const; // Optional scale [xi] (variance), default 1/degrees_of_freedom. + BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const; // Default 1. + BOOST_MATH_GPU_ENABLED RealType scale()const; // Optional scale [xi] (variance), default 1/degrees_of_freedom. }; }} // namespace boost // namespace math @@ -192,8 +192,8 @@ Member Functions
    -
    inverse_chi_squared_distribution(RealType df = 1); // Implicitly scaled 1/df.
    -inverse_chi_squared_distribution(RealType df = 1, RealType scale); // Explicitly scaled.
    +
    BOOST_MATH_GPU_ENABLED inverse_chi_squared_distribution(RealType df = 1); // Implicitly scaled 1/df.
    +BOOST_MATH_GPU_ENABLED inverse_chi_squared_distribution(RealType df = 1, RealType scale); // Explicitly scaled.
     

    Constructs an inverse chi_squared distribution with ν degrees of freedom @@ -204,12 +204,12 @@ Requires that the degrees of freedom ν parameter is greater than zero, otherwise calls domain_error.

    -
    RealType degrees_of_freedom()const;
    +
    BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const;
     

    Returns the degrees_of_freedom ν parameter of this distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale ξ parameter of this distribution. @@ -225,11 +225,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variate is [0,+∞]. @@ -461,7 +463,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/inverse_gamma_dist.html b/doc/html/math_toolkit/dist_ref/dists/inverse_gamma_dist.html index 01972b385..b5a0eec54 100644 --- a/doc/html/math_toolkit/dist_ref/dists/inverse_gamma_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/inverse_gamma_dist.html @@ -1,9 +1,9 @@ - + Inverse Gamma Distribution - + @@ -39,10 +39,10 @@ typedef RealType value_type; typedef Policy policy_type; - inverse_gamma_distribution(RealType shape, RealType scale = 1) + BOOST_MATH_GPU_ENABLED inverse_gamma_distribution(RealType shape, RealType scale = 1) - RealType shape()const; - RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType shape()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; }; }} // namespaces @@ -121,7 +121,7 @@ Member Functions -
    inverse_gamma_distribution(RealType shape = 1, RealType scale = 1);
    +
    BOOST_MATH_GPU_ENABLED inverse_gamma_distribution(RealType shape = 1, RealType scale = 1);
     

    Constructs an inverse gamma distribution with shape α and scale β. @@ -130,12 +130,12 @@ Requires that the shape and scale parameters are greater than zero, otherwise calls domain_error.

    -
    RealType shape()const;
    +
    BOOST_MATH_GPU_ENABLED RealType shape()const;
     

    Returns the α shape parameter of this inverse gamma distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the β scale parameter of this inverse gamma distribution. @@ -151,11 +151,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variate is [0,+∞]. @@ -170,6 +172,10 @@ equal to zero as a special case, returning zero for pdf and cdf.

    +

    + In this distribution the implementation of logpdf + is specialized to improve numerical accuracy. +

    Accuracy @@ -189,7 +195,7 @@ Implementation

    - In the following table α is the shape parameter of the distribution, α is its + In the following table α is the shape parameter of the distribution, β is its scale parameter, x is the random variate, p is the probability and q = 1-p.

    @@ -225,6 +231,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = α * log(β) + (-α-1)*log(x) - lgamma(α) - (β/x) +

    + + +

    cdf @@ -355,7 +373,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/inverse_gaussian_dist.html b/doc/html/math_toolkit/dist_ref/dists/inverse_gaussian_dist.html index 4589d4719..8919ea114 100644 --- a/doc/html/math_toolkit/dist_ref/dists/inverse_gaussian_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/inverse_gaussian_dist.html @@ -1,9 +1,9 @@ - + Inverse Gaussian (or Inverse Normal) Distribution - + @@ -39,11 +39,11 @@ typedef RealType value_type; typedef Policy policy_type; - inverse_gaussian_distribution(RealType mean = 1, RealType scale = 1); + BOOST_MATH_GPU_ENABLED inverse_gaussian_distribution(RealType mean = 1, RealType scale = 1); - RealType mean()const; // mean default 1. - RealType scale()const; // Optional scale, default 1 (unscaled). - RealType shape()const; // Shape = scale/mean. + BOOST_MATH_GPU_ENABLED RealType mean()const; // mean default 1. + BOOST_MATH_GPU_ENABLED RealType scale()const; // Optional scale, default 1 (unscaled). + BOOST_MATH_GPU_ENABLED RealType shape()const; // Shape = scale/mean. }; typedef inverse_gaussian_distribution<double> inverse_gaussian; @@ -144,7 +144,7 @@ Member Functions -
    inverse_gaussian_distribution(RealType df = 1, RealType scale = 1); // optionally scaled.
    +
    BOOST_MATH_GPU_ENABLED inverse_gaussian_distribution(RealType df = 1, RealType scale = 1); // optionally scaled.
     

    Constructs an inverse_gaussian distribution with μ mean, and scale λ, with @@ -154,12 +154,12 @@ Requires that both the mean μ parameter and scale λ are greater than zero, otherwise calls domain_error.

    -
    RealType mean()const;
    +
    BOOST_MATH_GPU_ENABLED RealType mean()const;
     

    Returns the mean μ parameter of this distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale λ parameter of this distribution. @@ -175,11 +175,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variate is [0,+∞). @@ -194,6 +196,10 @@ equal to zero as a special case, returning zero for both pdf and cdf.

    +

    + In this distribution the implementation of logpdf + is specialized to improve numerical accuracy. +

    Accuracy @@ -247,6 +253,19 @@ + +

    + logpdf +

    + + +

    + log(pdf) = (-λ*pow(μ-x, 2)/(x*μ2) + log(λ) - 3*log(x) - log(2*π)) + / 2 +

    + + +

    cdf @@ -434,7 +453,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/kolmogorov_smirnov_dist.html b/doc/html/math_toolkit/dist_ref/dists/kolmogorov_smirnov_dist.html index eb2e5ca31..b583c9076 100644 --- a/doc/html/math_toolkit/dist_ref/dists/kolmogorov_smirnov_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/kolmogorov_smirnov_dist.html @@ -1,13 +1,13 @@ - + Kolmogorov-Smirnov Distribution - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -123,10 +123,10 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, range and support.

    @@ -320,7 +320,7 @@



    [2] @@ -338,14 +338,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/dist_ref/dists/landau_dist.html b/doc/html/math_toolkit/dist_ref/dists/landau_dist.html index 5150c3544..52eadc679 100644 --- a/doc/html/math_toolkit/dist_ref/dists/landau_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/landau_dist.html @@ -1,6 +1,6 @@ - + Landau Distribution @@ -211,7 +211,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/laplace_dist.html b/doc/html/math_toolkit/dist_ref/dists/laplace_dist.html index 816ebf4e3..cd04d642d 100644 --- a/doc/html/math_toolkit/dist_ref/dists/laplace_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/laplace_dist.html @@ -1,12 +1,12 @@ - + Laplace Distribution - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -43,10 +43,10 @@ typedef RealType value_type; typedef Policy policy_type; // Construct: - laplace_distribution(RealType location = 0, RealType scale = 1); + BOOST_MATH_GPU_ENABLED laplace_distribution(RealType location = 0, RealType scale = 1); // Accessors: - RealType location()const; - RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType location()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; }; }} // namespaces @@ -82,7 +82,7 @@ Member Functions

    -
    laplace_distribution(RealType location = 0, RealType scale = 1);
    +
    BOOST_MATH_GPU_ENABLED laplace_distribution(RealType location = 0, RealType scale = 1);
     

    Constructs a laplace distribution with location location @@ -99,12 +99,12 @@ Requires that the scale parameter is greater than zero, otherwise calls domain_error.

    -
    RealType location()const;
    +
    BOOST_MATH_GPU_ENABLED RealType location()const;
     

    Returns the location parameter of this distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale parameter of this distribution. @@ -120,15 +120,22 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [-∞,+∞].

    +

    + In this distribution the implementation of both logcdf, + and logpdf are specialized + to improve numerical accuracy. +

    Accuracy @@ -177,6 +184,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = -abs(x-μ)/σ - log(σ) - log(2) +

    + + +

    cdf @@ -196,6 +215,24 @@ + +

    + logcdf +

    + + +

    + log(cdf) = +

    +

    + x < μ : p = ((x - μ) / σ) - ln(2) +

    +

    + x >= μ : p = log1p(-exp((μ-x) / σ) / 2) +

    + + +

    cdf complement @@ -348,14 +385,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/dist_ref/dists/logistic_dist.html b/doc/html/math_toolkit/dist_ref/dists/logistic_dist.html index 61a1be728..ebee833e0 100644 --- a/doc/html/math_toolkit/dist_ref/dists/logistic_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/logistic_dist.html @@ -1,9 +1,9 @@ - + Logistic Distribution - + @@ -42,10 +42,10 @@ typedef RealType value_type; typedef Policy policy_type; // Construct: - logistic_distribution(RealType location = 0, RealType scale = 1); + BOOST_MATH_GPU_ENABLED logistic_distribution(RealType location = 0, RealType scale = 1); // Accessors: - RealType location()const; // location. - RealType scale()const; // scale. + BOOST_MATH_GPU_ENABLED RealType location()const; // location. + BOOST_MATH_GPU_ENABLED RealType scale()const; // scale. }; @@ -73,7 +73,7 @@ Member Functions

    -
    logistic_distribution(RealType u = 0, RealType s = 1);
    +
    BOOST_MATH_GPU_ENABLED logistic_distribution(RealType u = 0, RealType s = 1);
     

    Constructs a logistic distribution with location u @@ -84,12 +84,12 @@ 0, otherwise a domain_error is raised.

    -
    RealType location()const;
    +
    BOOST_MATH_GPU_ENABLED RealType location()const;
     

    Returns the location of this distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale of this distribution. @@ -105,11 +105,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [-[max_value], +[min_value]]. However, @@ -124,6 +126,10 @@ as special cases if RealType permits. and +overflow_error respectively.

    +

    + In this distribution the implementation of logcdf + is specialized to improve numerical accuracy. +

    Accuracy @@ -183,6 +189,18 @@ as special cases if RealType permits. + +

    + logcdf +

    + + +

    + log(cdf) = -log1p(exp((u-x)/s)) +

    + + +

    cdf complement @@ -285,7 +303,7 @@ as special cases if RealType permits. Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/lognormal_dist.html b/doc/html/math_toolkit/dist_ref/dists/lognormal_dist.html index d4e3b8f55..e117c3341 100644 --- a/doc/html/math_toolkit/dist_ref/dists/lognormal_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/lognormal_dist.html @@ -1,13 +1,13 @@ - + Log Normal Distribution - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -44,10 +44,10 @@ typedef RealType value_type; typedef Policy policy_type; // Construct: - lognormal_distribution(RealType location = 0, RealType scale = 1); + BOOST_MATH_GPU_ENABLED lognormal_distribution(RealType location = 0, RealType scale = 1); // Accessors: - RealType location()const; - RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType location()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; }; }} // namespaces @@ -91,7 +91,7 @@ Member Functions

    -
    lognormal_distribution(RealType location = 0, RealType scale = 1);
    +
    BOOST_MATH_GPU_ENABLED lognormal_distribution(RealType location = 0, RealType scale = 1);
     

    Constructs a lognormal distribution with location location @@ -109,12 +109,12 @@ Requires that the scale parameter is greater than zero, otherwise calls domain_error.

    -
    RealType location()const;
    +
    BOOST_MATH_GPU_ENABLED RealType location()const;
     

    Returns the location parameter of this distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale parameter of this distribution. @@ -130,11 +130,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0,+∞]. @@ -319,14 +321,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/dist_ref/dists/mapairy_dist.html b/doc/html/math_toolkit/dist_ref/dists/mapairy_dist.html index d76e354c0..9ff7956de 100644 --- a/doc/html/math_toolkit/dist_ref/dists/mapairy_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/mapairy_dist.html @@ -1,6 +1,6 @@ - + Map-Airy Distribution @@ -202,7 +202,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/nc_beta_dist.html b/doc/html/math_toolkit/dist_ref/dists/nc_beta_dist.html index 192e2948a..2ac65c201 100644 --- a/doc/html/math_toolkit/dist_ref/dists/nc_beta_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/nc_beta_dist.html @@ -1,9 +1,9 @@ - + Noncentral Beta Distribution - + @@ -45,14 +45,14 @@ typedef Policy policy_type; // Constructor: - non_central_beta_distribution(RealType alpha, RealType beta, RealType lambda); + BOOST_MATH_GPU_ENABLED non_central_beta_distribution(RealType alpha, RealType beta, RealType lambda); // Accessor to shape parameters: - RealType alpha()const; - RealType beta()const; + BOOST_MATH_GPU_ENABLED RealType alpha()const; + BOOST_MATH_GPU_ENABLED RealType beta()const; // Accessor to non-centrality parameter lambda: - RealType non_centrality()const; + BOOST_MATH_GPU_ENABLED RealType non_centrality()const; }; }} // namespaces @@ -103,7 +103,7 @@ is a central χ2 Member Functions
    -
    non_central_beta_distribution(RealType a, RealType b, RealType lambda);
    +
    BOOST_MATH_GPU_ENABLED non_central_beta_distribution(RealType a, RealType b, RealType lambda);
     

    Constructs a noncentral beta distribution with shape parameters a @@ -112,19 +112,19 @@ is a central χ2

    Requires a > 0, b > 0 and lambda >= 0, otherwise calls domain_error.

    -
    RealType alpha()const;
    +
    BOOST_MATH_GPU_ENABLED RealType alpha()const;
     

    Returns the parameter a from which this object was constructed.

    -
    RealType beta()const;
    +
    BOOST_MATH_GPU_ENABLED RealType beta()const;
     

    Returns the parameter b from which this object was constructed.

    -
    RealType non_centrality()const;
    +
    BOOST_MATH_GPU_ENABLED RealType non_centrality()const;
     

    Returns the parameter lambda from which this object @@ -145,7 +145,9 @@ is a central χ2 median, mode, Hazard Function, Cumulative Hazard Function, - range and support. + range and support. For this distribution + these functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    Mean and variance are implemented using hypergeometric pfq functions and @@ -481,7 +483,7 @@ is a central χ2 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/nc_chi_squared_dist.html b/doc/html/math_toolkit/dist_ref/dists/nc_chi_squared_dist.html index fab03c0ad..0dc811db5 100644 --- a/doc/html/math_toolkit/dist_ref/dists/nc_chi_squared_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/nc_chi_squared_dist.html @@ -1,9 +1,9 @@ - + Noncentral Chi-Squared Distribution - + @@ -45,22 +45,22 @@ typedef Policy policy_type; // Constructor: - non_central_chi_squared_distribution(RealType v, RealType lambda); + BOOST_MATH_GPU_ENABLED non_central_chi_squared_distribution(RealType v, RealType lambda); // Accessor to degrees of freedom parameter v: - RealType degrees_of_freedom()const; + BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const; // Accessor to non centrality parameter lambda: - RealType non_centrality()const; + BOOST_MATH_GPU_ENABLED RealType non_centrality()const; // Parameter finders: - static RealType find_degrees_of_freedom(RealType lambda, RealType x, RealType p); + BOOST_MATH_GPU_ENABLED static RealType find_degrees_of_freedom(RealType lambda, RealType x, RealType p); template <class A, class B, class C> - static RealType find_degrees_of_freedom(const complemented3_type<A,B,C>& c); + BOOST_MATH_GPU_ENABLED static RealType find_degrees_of_freedom(const complemented3_type<A,B,C>& c); - static RealType find_non_centrality(RealType v, RealType x, RealType p); + BOOST_MATH_GPU_ENABLED static RealType find_non_centrality(RealType v, RealType x, RealType p); template <class A, class B, class C> - static RealType find_non_centrality(const complemented3_type<A,B,C>& c); + BOOST_MATH_GPU_ENABLED static RealType find_non_centrality(const complemented3_type<A,B,C>& c); }; }} // namespaces @@ -116,7 +116,7 @@ Member Functions
    -
    non_central_chi_squared_distribution(RealType v, RealType lambda);
    +
    BOOST_MATH_GPU_ENABLED non_central_chi_squared_distribution(RealType v, RealType lambda);
     

    Constructs a Chi-Squared distribution with ν degrees of freedom and non-centrality @@ -125,24 +125,24 @@

    Requires ν > 0 and lambda >= 0, otherwise calls domain_error.

    -
    RealType degrees_of_freedom()const;
    +
    BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const;
     

    Returns the parameter ν from which this object was constructed.

    -
    RealType non_centrality()const;
    +
    BOOST_MATH_GPU_ENABLED RealType non_centrality()const;
     

    Returns the parameter lambda from which this object was constructed.

    -
    static RealType find_degrees_of_freedom(RealType lambda, RealType x, RealType p);
    +
    BOOST_MATH_GPU_ENABLED static RealType find_degrees_of_freedom(RealType lambda, RealType x, RealType p);
     

    This function returns the number of degrees of freedom ν such that: cdf(non_central_chi_squared<RealType, Policy>(v, lambda), x) == p

    template <class A, class B, class C>
    -static RealType find_degrees_of_freedom(const complemented3_type<A,B,C>& c);
    +BOOST_MATH_GPU_ENABLED static RealType find_degrees_of_freedom(const complemented3_type<A,B,C>& c);
     

    When called with argument boost::math::complement(lambda, x, @@ -152,7 +152,7 @@

    cdf(complement(non_central_chi_squared<RealType, Policy>(v, lambda), x)) == q.

    -
    static RealType find_non_centrality(RealType v, RealType x, RealType p);
    +
    BOOST_MATH_GPU_ENABLED static RealType find_non_centrality(RealType v, RealType x, RealType p);
     

    This function returns the non centrality parameter lambda @@ -162,7 +162,7 @@ cdf(non_central_chi_squared<RealType, Policy>(v, lambda), x) == p

    template <class A, class B, class C>
    -static RealType find_non_centrality(const complemented3_type<A,B,C>& c);
    +BOOST_MATH_GPU_ENABLED static RealType find_non_centrality(const complemented3_type<A,B,C>& c);
     

    When called with argument boost::math::complement(v, @@ -185,11 +185,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0, +∞]. @@ -566,7 +568,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/nc_f_dist.html b/doc/html/math_toolkit/dist_ref/dists/nc_f_dist.html index cc058b056..ef4c83384 100644 --- a/doc/html/math_toolkit/dist_ref/dists/nc_f_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/nc_f_dist.html @@ -1,9 +1,9 @@ - + Noncentral F Distribution - + @@ -45,14 +45,14 @@ typedef Policy policy_type; // Constructor: - non_central_f_distribution(RealType v1, RealType v2, RealType lambda); + BOOST_MATH_GPU_ENABLED non_central_f_distribution(RealType v1, RealType v2, RealType lambda); // Accessor to degrees_of_freedom parameters v1 & v2: - RealType degrees_of_freedom1()const; - RealType degrees_of_freedom2()const; + BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom1()const; + BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom2()const; // Accessor to non-centrality parameter lambda: - RealType non_centrality()const; + BOOST_MATH_GPU_ENABLED RealType non_centrality()const; }; }} // namespaces @@ -99,7 +99,7 @@ random variable with v1 degrees Member Functions -
    non_central_f_distribution(RealType v1, RealType v2, RealType lambda);
    +
    BOOST_MATH_GPU_ENABLED non_central_f_distribution(RealType v1, RealType v2, RealType lambda);
     

    Constructs a non-central beta distribution with parameters v1 @@ -109,19 +109,19 @@ random variable with v1 degrees Requires v1 > 0, v2 > 0 and lambda >= 0, otherwise calls domain_error.

    -
    RealType degrees_of_freedom1()const;
    +
    BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom1()const;
     

    Returns the parameter v1 from which this object was constructed.

    -
    RealType degrees_of_freedom2()const;
    +
    BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom2()const;
     

    Returns the parameter v2 from which this object was constructed.

    -
    RealType non_centrality()const;
    +
    BOOST_MATH_GPU_ENABLED RealType non_centrality()const;
     

    Returns the non-centrality parameter lambda from which @@ -138,11 +138,13 @@ random variable with v1 degrees Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0, +∞]. @@ -406,7 +408,7 @@ is the non-centrality parameter, x is the Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/nc_t_dist.html b/doc/html/math_toolkit/dist_ref/dists/nc_t_dist.html index d7dd9fbb0..974db746c 100644 --- a/doc/html/math_toolkit/dist_ref/dists/nc_t_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/nc_t_dist.html @@ -1,9 +1,9 @@ - + Noncentral T Distribution - + @@ -125,10 +125,10 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, range and support.

    @@ -562,7 +562,7 @@ when the normal distribution Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/negative_binomial_dist.html b/doc/html/math_toolkit/dist_ref/dists/negative_binomial_dist.html index 7a3d2c270..5fbc8302b 100644 --- a/doc/html/math_toolkit/dist_ref/dists/negative_binomial_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/negative_binomial_dist.html @@ -1,12 +1,12 @@ - + Negative Binomial Distribution - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -44,28 +44,28 @@ typedef RealType value_type; typedef Policy policy_type; // Constructor from successes and success_fraction: - negative_binomial_distribution(RealType r, RealType p); + BOOST_MATH_GPU_ENABLED negative_binomial_distribution(RealType r, RealType p); // Parameter accessors: - RealType success_fraction() const; - RealType successes() const; + BOOST_MATH_GPU_ENABLED RealType success_fraction() const; + BOOST_MATH_GPU_ENABLED RealType successes() const; // Bounds on success fraction: - static RealType find_lower_bound_on_p( + BOOST_MATH_GPU_ENABLED static RealType find_lower_bound_on_p( RealType trials, RealType successes, RealType probability); // alpha - static RealType find_upper_bound_on_p( + BOOST_MATH_GPU_ENABLED static RealType find_upper_bound_on_p( RealType trials, RealType successes, RealType probability); // alpha // Estimate min/max number of trials: - static RealType find_minimum_number_of_trials( + BOOST_MATH_GPU_ENABLED static RealType find_minimum_number_of_trials( RealType k, // Number of failures. RealType p, // Success fraction. RealType probability); // Probability threshold alpha. - static RealType find_maximum_number_of_trials( + BOOST_MATH_GPU_ENABLED static RealType find_maximum_number_of_trials( RealType k, // Number of failures. RealType p, // Success fraction. RealType probability); // Probability threshold alpha. @@ -202,7 +202,7 @@ Construct

    -
    negative_binomial_distribution(RealType r, RealType p);
    +
    BOOST_MATH_GPU_ENABLED negative_binomial_distribution(RealType r, RealType p);
     

    Constructor: r is the total number of successes, @@ -218,13 +218,13 @@ Accessors -

    RealType success_fraction() const; // successes / trials (0 <= p <= 1)
    +
    BOOST_MATH_GPU_ENABLED RealType success_fraction() const; // successes / trials (0 <= p <= 1)
     

    Returns the parameter p from which this distribution was constructed.

    -
    RealType successes() const; // required successes (r > 0)
    +
    BOOST_MATH_GPU_ENABLED RealType successes() const; // required successes (r > 0)
     

    Returns the parameter r from which this distribution @@ -240,7 +240,7 @@ Lower Bound on Parameter p -

    static RealType find_lower_bound_on_p(
    +
    BOOST_MATH_GPU_ENABLED static RealType find_lower_bound_on_p(
       RealType failures,
       RealType successes,
       RealType probability) // (0 <= alpha <= 1), 0.05 equivalent to 95% confidence.
    @@ -301,7 +301,7 @@
               Upper
               Bound on Parameter p
             
    -
    static RealType find_upper_bound_on_p(
    +
    BOOST_MATH_GPU_ENABLED static RealType find_upper_bound_on_p(
        RealType trials,
        RealType successes,
        RealType alpha); // (0 <= alpha <= 1), 0.05 equivalent to 95% confidence.
    @@ -361,7 +361,7 @@
               Estimating
               Number of Trials to Ensure at Least a Certain Number of Failures
             
    -
    static RealType find_minimum_number_of_trials(
    +
    BOOST_MATH_GPU_ENABLED static RealType find_minimum_number_of_trials(
        RealType k,     // number of failures.
        RealType p,     // success fraction.
        RealType alpha); // probability threshold (0.05 equivalent to 95%).
    @@ -412,7 +412,7 @@
               Estimating
               Number of Trials to Ensure a Maximum Number of Failures or Less
             
    -
    static RealType find_maximum_number_of_trials(
    +
    BOOST_MATH_GPU_ENABLED static RealType find_maximum_number_of_trials(
        RealType k,     // number of failures.
        RealType p,     // success fraction.
        RealType alpha); // probability threshold (0.05 equivalent to 95%).
    @@ -466,11 +466,13 @@
               Cumulative Distribution Function,
               Probability Density Function,
               Quantile, Hazard Function, Cumulative Hazard Function,
    -          mean, median,
    -          mode, variance,
    -          standard deviation,
    -          skewness, kurtosis, kurtosis_excess,
    -          range and support.
    +          __logcdf, __logpdf, mean,
    +          median, mode,
    +          variance, standard deviation, skewness, kurtosis,
    +          kurtosis_excess,
    +          range and support. For this distribution
    +          all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED
    +          and can be run on both host and device.
             

    However it's worth taking a moment to define what these actually mean in @@ -872,14 +874,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/dist_ref/dists/normal_dist.html b/doc/html/math_toolkit/dist_ref/dists/normal_dist.html index 9378403bf..6d283b712 100644 --- a/doc/html/math_toolkit/dist_ref/dists/normal_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/normal_dist.html @@ -1,9 +1,9 @@ - + Normal (Gaussian) Distribution - + @@ -44,13 +44,13 @@ typedef RealType value_type; typedef Policy policy_type; // Construct: - normal_distribution(RealType mean = 0, RealType sd = 1); + BOOST_MATH_GPU_ENABLED normal_distribution(RealType mean = 0, RealType sd = 1); // Accessors: - RealType mean()const; // location. - RealType standard_deviation()const; // scale. + BOOST_MATH_GPU_ENABLED RealType mean()const; // location. + BOOST_MATH_GPU_ENABLED RealType standard_deviation()const; // scale. // Synonyms, provided to allow generic use of find_location and find_scale. - RealType location()const; - RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType location()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; }; }} // namespaces @@ -95,7 +95,7 @@ Member Functions -
    normal_distribution(RealType mean = 0, RealType sd = 1);
    +
    BOOST_MATH_GPU_ENABLED normal_distribution(RealType mean = 0, RealType sd = 1);
     

    Constructs a normal distribution with mean mean and @@ -105,14 +105,14 @@ Requires sd > 0, otherwise domain_error is called.

    -
    RealType mean()const;
    -RealType location()const;
    +
    BOOST_MATH_GPU_ENABLED RealType mean()const;
    +BOOST_MATH_GPU_ENABLED RealType location()const;
     

    both return the mean of this distribution.

    -
    RealType standard_deviation()const;
    -RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType standard_deviation()const;
    +BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    both return the standard deviation of this distribution. @@ -131,11 +131,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [-[max_value], +[min_value]]. However, @@ -189,6 +191,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = -log(s) - log(2*π)/2 - (x-mean)2/(2*s2) +

    + + +

    cdf @@ -315,7 +329,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/pareto.html b/doc/html/math_toolkit/dist_ref/dists/pareto.html index 2cc90b5d5..626d3860b 100644 --- a/doc/html/math_toolkit/dist_ref/dists/pareto.html +++ b/doc/html/math_toolkit/dist_ref/dists/pareto.html @@ -1,9 +1,9 @@ - + Pareto Distribution - + @@ -42,10 +42,10 @@ public: typedef RealType value_type; // Constructor: - pareto_distribution(RealType scale = 1, RealType shape = 1) + BOOST_MATH_GPU_ENABLED pareto_distribution(RealType scale = 1, RealType shape = 1) // Accessors: - RealType scale()const; - RealType shape()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType shape()const; }; }} // namespaces @@ -92,7 +92,7 @@ Member Functions -
    pareto_distribution(RealType scale = 1, RealType shape = 1);
    +
    BOOST_MATH_GPU_ENABLED pareto_distribution(RealType scale = 1, RealType shape = 1);
     

    Constructs a pareto @@ -102,12 +102,12 @@ Requires that the shape and scale parameters are both greater than zero, otherwise calls domain_error.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale parameter of this distribution.

    -
    RealType shape()const;
    +
    BOOST_MATH_GPU_ENABLED RealType shape()const;
     

    Returns the shape parameter of this distribution. @@ -123,15 +123,21 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The supported domain of the random variable is [scale, ∞].

    +

    + In this distribution the implementation of logcdf + is specialized to improve numerical accuracy. +

    Accuracy @@ -198,6 +204,18 @@ + +

    + logcdf +

    + + +

    + log(cdf) = log1p(-pow(β/x, α)) +

    + + +

    cdf complement @@ -338,7 +356,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/poisson_dist.html b/doc/html/math_toolkit/dist_ref/dists/poisson_dist.html index 9c3d2f757..f7cdaed26 100644 --- a/doc/html/math_toolkit/dist_ref/dists/poisson_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/poisson_dist.html @@ -1,9 +1,9 @@ - + Poisson Distribution - + @@ -43,8 +43,8 @@ typedef RealType value_type; typedef Policy policy_type; - poisson_distribution(RealType mean = 1); // Constructor. - RealType mean()const; // Accessor. + BOOST_MATH_GPU_ENABLED poisson_distribution(RealType mean = 1); // Constructor. + BOOST_MATH_GPU_ENABLED RealType mean()const; // Accessor. } }} // namespaces boost::math @@ -116,12 +116,12 @@ Member Functions
    -
    poisson_distribution(RealType mean = 1);
    +
    BOOST_MATH_GPU_ENABLED poisson_distribution(RealType mean = 1);
     

    Constructs a poisson distribution with mean mean.

    -
    RealType mean()const;
    +
    BOOST_MATH_GPU_ENABLED RealType mean()const;
     

    Returns the mean of this distribution. @@ -137,15 +137,21 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0, ∞].

    +

    + In this distribution the implementation of logpdf + is specialized to improve numerical accuracy. +

    Accuracy @@ -200,6 +206,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = -lgamma(k+1) + k*log(λ) - λ if k > 0 and λ > 0 +

    + + +

    cdf @@ -318,7 +336,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/rayleigh.html b/doc/html/math_toolkit/dist_ref/dists/rayleigh.html index 9dc5db4bb..cc44da9bf 100644 --- a/doc/html/math_toolkit/dist_ref/dists/rayleigh.html +++ b/doc/html/math_toolkit/dist_ref/dists/rayleigh.html @@ -1,13 +1,13 @@ - + Rayleigh Distribution - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -43,9 +43,9 @@ typedef RealType value_type; typedef Policy policy_type; // Construct: - rayleigh_distribution(RealType sigma = 1) + BOOST_MATH_GPU_ENABLED rayleigh_distribution(RealType sigma = 1) // Accessors: - RealType sigma()const; + BOOST_MATH_GPU_ENABLED RealType sigma()const; }; }} // namespaces @@ -104,7 +104,7 @@ Member Functions

    -
    rayleigh_distribution(RealType sigma = 1);
    +
    BOOST_MATH_GPU_ENABLED rayleigh_distribution(RealType sigma = 1);
     

    Constructs a Rayleigh @@ -113,7 +113,7 @@

    Requires that the σ parameter is greater than zero, otherwise calls domain_error.

    -
    RealType sigma()const;
    +
    BOOST_MATH_GPU_ENABLED RealType sigma()const;
     

    Returns the sigma parameter of this distribution. @@ -129,15 +129,22 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0, max_value].

    +

    + In this distribution the implementation of both logcdf, + and logpdf are specialized + to improve numerical accuracy. +

    Accuracy @@ -188,6 +195,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = -(x2)/(2*σ2) - 2*log(σ) + log(x) +

    + + +

    cdf @@ -201,6 +220,18 @@ + +

    + logcdf +

    + + +

    + log(cdf) = log1p(-exp(-x2 / (2*σ2))) +

    + + +

    cdf complement @@ -336,14 +367,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/dist_ref/dists/saspoint5_dist.html b/doc/html/math_toolkit/dist_ref/dists/saspoint5_dist.html index 69c25d20f..ddffc80b2 100644 --- a/doc/html/math_toolkit/dist_ref/dists/saspoint5_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/saspoint5_dist.html @@ -1,6 +1,6 @@ - + SαS Point5 Distribution @@ -186,7 +186,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/skew_normal_dist.html b/doc/html/math_toolkit/dist_ref/dists/skew_normal_dist.html index 5d664fb95..1ee03b3b0 100644 --- a/doc/html/math_toolkit/dist_ref/dists/skew_normal_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/skew_normal_dist.html @@ -1,12 +1,12 @@ - + Skew Normal Distribution - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -208,10 +208,10 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, range and support.

    @@ -510,14 +510,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/dist_ref/dists/students_t_dist.html b/doc/html/math_toolkit/dist_ref/dists/students_t_dist.html index 92c010e04..60557b726 100644 --- a/doc/html/math_toolkit/dist_ref/dists/students_t_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/students_t_dist.html @@ -1,9 +1,9 @@ - + Students t Distribution - + @@ -44,13 +44,13 @@ typedef Policy policy_type; // Constructor: - students_t_distribution(const RealType& v); + BOOST_MATH_GPU_ENABLED students_t_distribution(const RealType& v); // Accessor: - RealType degrees_of_freedom()const; + BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const; // degrees of freedom estimation: - static RealType find_degrees_of_freedom( + BOOST_MATH_GPU_ENABLED static RealType find_degrees_of_freedom( RealType difference_from_mean, RealType alpha, RealType beta, @@ -104,7 +104,7 @@ Member Functions
    -
    students_t_distribution(const RealType& v);
    +
    BOOST_MATH_GPU_ENABLED students_t_distribution(const RealType& v);
     

    Constructs a Student's t-distribution with v degrees @@ -116,12 +116,12 @@ Note that non-integral degrees of freedom are supported, and are meaningful under certain circumstances.

    -
    RealType degrees_of_freedom()const;
    +
    BOOST_MATH_GPU_ENABLED RealType degrees_of_freedom()const;
     

    returns the number of degrees of freedom of this distribution.

    -
    static RealType find_degrees_of_freedom(
    +
    BOOST_MATH_GPU_ENABLED static RealType find_degrees_of_freedom(
        RealType difference_from_mean,
        RealType alpha,
        RealType beta,
    @@ -188,11 +188,13 @@
               Cumulative Distribution Function,
               Probability Density Function,
               Quantile, Hazard Function, Cumulative Hazard Function,
    -          mean, median,
    -          mode, variance,
    -          standard deviation,
    -          skewness, kurtosis, kurtosis_excess,
    -          range and support.
    +          __logcdf, __logpdf, mean,
    +          median, mode,
    +          variance, standard deviation, skewness, kurtosis,
    +          kurtosis_excess,
    +          range and support. For this distribution
    +          all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED
    +          and can be run on both host and device.
             

    The domain of the random variable is [-∞, +∞]. @@ -430,7 +432,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/triangular_dist.html b/doc/html/math_toolkit/dist_ref/dists/triangular_dist.html index 459e1dec0..fd32f19c1 100644 --- a/doc/html/math_toolkit/dist_ref/dists/triangular_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/triangular_dist.html @@ -1,9 +1,9 @@ - + Triangular Distribution - + @@ -43,12 +43,12 @@ typedef RealType value_type; typedef Policy policy_type; - triangular_distribution(RealType lower = -1, RealType mode = 0, RealType upper = 1); // Constructor. + BOOST_MATH_GPU_ENABLED triangular_distribution(RealType lower = -1, RealType mode = 0, RealType upper = 1); // Constructor. : m_lower(lower), m_mode(mode), m_upper(upper) // Default is -1, 0, +1 symmetric triangular distribution. // Accessor functions. - RealType lower()const; - RealType mode()const; - RealType upper()const; + BOOST_MATH_GPU_ENABLED RealType lower()const; + BOOST_MATH_GPU_ENABLED RealType mode()const; + BOOST_MATH_GPU_ENABLED RealType upper()const; }; // class triangular_distribution }} // namespaces @@ -126,7 +126,7 @@ Member Functions -
    triangular_distribution(RealType lower = 0, RealType mode = 0 RealType upper = 1);
    +
    BOOST_MATH_GPU_ENABLED triangular_distribution(RealType lower = 0, RealType mode = 0 RealType upper = 1);
     

    Constructs a triangular @@ -168,19 +168,19 @@

    The parameters of a distribution can be obtained using these member functions:

    -
    RealType lower()const;
    +
    BOOST_MATH_GPU_ENABLED RealType lower()const;
     

    Returns the lower parameter of this distribution (default -1).

    -
    RealType mode()const;
    +
    BOOST_MATH_GPU_ENABLED RealType mode()const;
     

    Returns the mode parameter of this distribution (default 0).

    -
    RealType upper()const;
    +
    BOOST_MATH_GPU_ENABLED RealType upper()const;
     

    Returns the upper parameter of this distribution (default+1). @@ -196,11 +196,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is \lowerto \upper, and the supported @@ -430,7 +432,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/uniform_dist.html b/doc/html/math_toolkit/dist_ref/dists/uniform_dist.html index 5101d858a..39dc3e420 100644 --- a/doc/html/math_toolkit/dist_ref/dists/uniform_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/uniform_dist.html @@ -1,9 +1,9 @@ - + Uniform Distribution - + @@ -41,11 +41,11 @@ public: typedef RealType value_type; - uniform_distribution(RealType lower = 0, RealType upper = 1); // Constructor. + BOOST_MATH_GPU_ENABLED uniform_distribution(RealType lower = 0, RealType upper = 1); // Constructor. : m_lower(lower), m_upper(upper) // Default is standard uniform distribution. // Accessor functions. - RealType lower()const; - RealType upper()const; + BOOST_MATH_GPU_ENABLED RealType lower()const; + BOOST_MATH_GPU_ENABLED RealType upper()const; }; // class uniform_distribution }} // namespaces @@ -116,7 +116,7 @@ Member Functions -
    uniform_distribution(RealType lower = 0, RealType upper = 1);
    +
    BOOST_MATH_GPU_ENABLED uniform_distribution(RealType lower = 0, RealType upper = 1);
     

    Constructs a uniform @@ -127,12 +127,12 @@ Requires that the lower and upper parameters are both finite; otherwise if infinity or NaN then calls domain_error.

    -
    RealType lower()const;
    +
    BOOST_MATH_GPU_ENABLED RealType lower()const;
     

    Returns the lower parameter of this distribution.

    -
    RealType upper()const;
    +
    BOOST_MATH_GPU_ENABLED RealType upper()const;
     

    Returns the upper parameter of this distribution. @@ -148,11 +148,13 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is any finite value, but the supported @@ -353,7 +355,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/dists/weibull_dist.html b/doc/html/math_toolkit/dist_ref/dists/weibull_dist.html index 33be3dc4b..91a58136a 100644 --- a/doc/html/math_toolkit/dist_ref/dists/weibull_dist.html +++ b/doc/html/math_toolkit/dist_ref/dists/weibull_dist.html @@ -1,9 +1,9 @@ - + Weibull Distribution - + @@ -43,10 +43,10 @@ typedef RealType value_type; typedef Policy policy_type; // Construct: - weibull_distribution(RealType shape, RealType scale = 1) + BOOST_MATH_GPU_ENABLED weibull_distribution(RealType shape, RealType scale = 1) // Accessors: - RealType shape()const; - RealType scale()const; + BOOST_MATH_GPU_ENABLED RealType shape()const; + BOOST_MATH_GPU_ENABLED RealType scale()const; }; }} // namespaces @@ -118,7 +118,7 @@ Member Functions -
    weibull_distribution(RealType shape, RealType scale = 1);
    +
    BOOST_MATH_GPU_ENABLED weibull_distribution(RealType shape, RealType scale = 1);
     

    Constructs a Weibull @@ -128,12 +128,12 @@ Requires that the shape and scale parameters are both greater than zero, otherwise calls domain_error.

    -
    RealType shape()const;
    +
    BOOST_MATH_GPU_ENABLED RealType shape()const;
     

    Returns the shape parameter of this distribution.

    -
    RealType scale()const;
    +
    BOOST_MATH_GPU_ENABLED RealType scale()const;
     

    Returns the scale parameter of this distribution. @@ -149,15 +149,22 @@ Cumulative Distribution Function, Probability Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, - range and support. + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, + range and support. For this distribution + all non-member accessor functions are marked with BOOST_MATH_GPU_ENABLED + and can be run on both host and device.

    The domain of the random variable is [0, ∞].

    +

    + In this distribution the implementation of both logcdf, + and logpdf are specialized + to improve numerical accuracy. +

    Accuracy @@ -210,6 +217,18 @@ + +

    + logpdf +

    + + +

    + log(pdf) = log(α) - α * log(β) + log(x) * (α-1) - pow(x/β, α) +

    + + +

    cdf @@ -222,6 +241,18 @@ + +

    + logcdf +

    + + +

    + log(cdf) = log1p(-exp(-pow(x / β, α))) +

    + + +

    cdf complement @@ -360,7 +391,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/dist_ref/nmp.html b/doc/html/math_toolkit/dist_ref/nmp.html index 9f62e2a8b..5e9f4bc52 100644 --- a/doc/html/math_toolkit/dist_ref/nmp.html +++ b/doc/html/math_toolkit/dist_ref/nmp.html @@ -1,9 +1,9 @@ - + Non-Member Properties - + @@ -64,6 +64,12 @@
  • kurtosis_excess
  • +
  • + __logcdf. +
  • +
  • + __logpdf. +
  • mean.
  • @@ -615,6 +621,28 @@

    + Natural + Log of the Cumulative Distribution Function +
    +
    template <class RealType, Policy>
    +RealType logcdf(const Distribution-Type<RealType, Policy>& dist);
    +
    +

    + Returns the natural log of the CDF of distribution dist. +

    +
    + + Natural + Log of the Probability Density Function +
    +
    template <class RealType, Policy>
    +RealType logcdf(const Distribution-Type<RealType, Policy>& dist);
    +
    +

    + Returns the natural log of the CDF of distribution dist. +

    +
    + P and Q
    @@ -625,7 +653,7 @@ returned by these functions.

    - + Percent Point Function or Percentile
    @@ -634,7 +662,7 @@ the Quantile.

    - + Inverse CDF Function.
    @@ -643,7 +671,7 @@ Quantile.

    - + Inverse Survival Function.
    @@ -652,7 +680,7 @@ of the probability.

    - + Probability Mass Function
    @@ -666,7 +694,7 @@ Function applies to continuous distributions.

    - + Lower Critical Value.
    @@ -676,7 +704,7 @@ the Quantile.

    - + Upper Critical Value.
    @@ -687,7 +715,7 @@ complement of the probability.

    - + Survival Function
    @@ -696,7 +724,7 @@ the Cumulative Distribution Function.

    - + Entropy

    @@ -719,7 +747,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential.html b/doc/html/math_toolkit/double_exponential.html index 7d1fbfe4b..9a23fcc2d 100644 --- a/doc/html/math_toolkit/double_exponential.html +++ b/doc/html/math_toolkit/double_exponential.html @@ -1,9 +1,9 @@ - + Double-exponential quadrature - + @@ -40,6 +40,7 @@ Maximum Interval Halvings and Memory Requirements
    Thread Safety
    Caveats
    +
    GPU Usage
    References
    @@ -47,7 +48,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/de_caveats.html b/doc/html/math_toolkit/double_exponential/de_caveats.html index f21351117..985c9921d 100644 --- a/doc/html/math_toolkit/double_exponential/de_caveats.html +++ b/doc/html/math_toolkit/double_exponential/de_caveats.html @@ -1,13 +1,13 @@ - + Caveats - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -174,14 +174,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/double_exponential/de_exp_sinh.html b/doc/html/math_toolkit/double_exponential/de_exp_sinh.html index 4f4198222..94998119b 100644 --- a/doc/html/math_toolkit/double_exponential/de_exp_sinh.html +++ b/doc/html/math_toolkit/double_exponential/de_exp_sinh.html @@ -1,9 +1,9 @@ - + exp_sinh - + @@ -104,7 +104,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/de_levels.html b/doc/html/math_toolkit/double_exponential/de_levels.html index a0c89c0d7..85b9fe8c5 100644 --- a/doc/html/math_toolkit/double_exponential/de_levels.html +++ b/doc/html/math_toolkit/double_exponential/de_levels.html @@ -1,9 +1,9 @@ - + Setting the Maximum Interval Halvings and Memory Requirements - + @@ -65,7 +65,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/de_overview.html b/doc/html/math_toolkit/double_exponential/de_overview.html index 777811872..7d5c401a8 100644 --- a/doc/html/math_toolkit/double_exponential/de_overview.html +++ b/doc/html/math_toolkit/double_exponential/de_overview.html @@ -1,9 +1,9 @@ - + Overview - + @@ -218,7 +218,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/de_refes.html b/doc/html/math_toolkit/double_exponential/de_refes.html index 6bbbef9f3..b4412efe3 100644 --- a/doc/html/math_toolkit/double_exponential/de_refes.html +++ b/doc/html/math_toolkit/double_exponential/de_refes.html @@ -1,12 +1,12 @@ - + References - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -53,14 +53,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/double_exponential/de_sinh_sinh.html b/doc/html/math_toolkit/double_exponential/de_sinh_sinh.html index b56fe6530..d794b09ee 100644 --- a/doc/html/math_toolkit/double_exponential/de_sinh_sinh.html +++ b/doc/html/math_toolkit/double_exponential/de_sinh_sinh.html @@ -1,9 +1,9 @@ - + sinh_sinh - + @@ -82,7 +82,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/de_tanh_sinh.html b/doc/html/math_toolkit/double_exponential/de_tanh_sinh.html index 920e6736b..44f21ff02 100644 --- a/doc/html/math_toolkit/double_exponential/de_tanh_sinh.html +++ b/doc/html/math_toolkit/double_exponential/de_tanh_sinh.html @@ -1,9 +1,9 @@ - + tanh_sinh - + @@ -527,7 +527,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/de_tanh_sinh_2_arg.html b/doc/html/math_toolkit/double_exponential/de_tanh_sinh_2_arg.html index 2049f610c..2c961c40d 100644 --- a/doc/html/math_toolkit/double_exponential/de_tanh_sinh_2_arg.html +++ b/doc/html/math_toolkit/double_exponential/de_tanh_sinh_2_arg.html @@ -1,9 +1,9 @@ - + Handling functions with large features near an endpoint with tanh-sinh quadrature - + @@ -89,7 +89,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/de_thread.html b/doc/html/math_toolkit/double_exponential/de_thread.html index 2f91b8c78..b4f27cd07 100644 --- a/doc/html/math_toolkit/double_exponential/de_thread.html +++ b/doc/html/math_toolkit/double_exponential/de_thread.html @@ -1,9 +1,9 @@ - + Thread Safety - + @@ -52,7 +52,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/de_tol.html b/doc/html/math_toolkit/double_exponential/de_tol.html index 37dee12af..2cdf33c6d 100644 --- a/doc/html/math_toolkit/double_exponential/de_tol.html +++ b/doc/html/math_toolkit/double_exponential/de_tol.html @@ -1,9 +1,9 @@ - + Setting the Termination Condition for Integration - + @@ -62,7 +62,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/double_exponential/gpu_usage.html b/doc/html/math_toolkit/double_exponential/gpu_usage.html index 4ddae6090..387773438 100644 --- a/doc/html/math_toolkit/double_exponential/gpu_usage.html +++ b/doc/html/math_toolkit/double_exponential/gpu_usage.html @@ -1,6 +1,6 @@ - + GPU Usage @@ -53,7 +53,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint.html b/doc/html/math_toolkit/ellint.html index 160d7cb49..82d15af7b 100644 --- a/doc/html/math_toolkit/ellint.html +++ b/doc/html/math_toolkit/ellint.html @@ -1,9 +1,9 @@ - + Elliptic Integrals - + @@ -47,7 +47,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint/ellint_1.html b/doc/html/math_toolkit/ellint/ellint_1.html index 0f998085a..8a5c7626c 100644 --- a/doc/html/math_toolkit/ellint/ellint_1.html +++ b/doc/html/math_toolkit/ellint/ellint_1.html @@ -1,9 +1,9 @@ - + Elliptic Integrals of the First Kind - Legendre Form - + @@ -37,16 +37,16 @@
    namespace boost { namespace math {
     
     template <class T1, class T2>
    -calculated-result-type ellint_1(T1 k, T2 phi);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_1(T1 k, T2 phi);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_1(T1 k, T2 phi, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_1(T1 k, T2 phi, const Policy&);
     
     template <class T>
    -calculated-result-type ellint_1(T k);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_1(T k);
     
     template <class T, class Policy>
    -calculated-result-type ellint_1(T k, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_1(T k, const Policy&);
     
     }} // namespaces
     
    @@ -69,10 +69,10 @@ when they are the same type then the result is the same type as the arguments.

    template <class T1, class T2>
    -calculated-result-type ellint_1(T1 k, T2 phi);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_1(T1 k, T2 phi);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_1(T1 k, T2 phi, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_1(T1 k, T2 phi, const Policy&);
     

    Returns the incomplete elliptic integral of the first kind F(φ, @@ -92,10 +92,10 @@ documentation for more details.

    template <class T>
    -calculated-result-type ellint_1(T k);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_1(T k);
     
     template <class T>
    -calculated-result-type ellint_1(T k, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_1(T k, const Policy&);
     

    Returns the complete elliptic integral of the first kind K(k): @@ -280,7 +280,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint/ellint_2.html b/doc/html/math_toolkit/ellint/ellint_2.html index 72a10be88..70f80e3a5 100644 --- a/doc/html/math_toolkit/ellint/ellint_2.html +++ b/doc/html/math_toolkit/ellint/ellint_2.html @@ -1,9 +1,9 @@ - + Elliptic Integrals of the Second Kind - Legendre Form - + @@ -37,16 +37,16 @@
    namespace boost { namespace math {
     
     template <class T1, class T2>
    -calculated-result-type ellint_2(T1 k, T2 phi);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_2(T1 k, T2 phi);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_2(T1 k, T2 phi, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_2(T1 k, T2 phi, const Policy&);
     
     template <class T>
    -calculated-result-type ellint_2(T k);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_2(T k);
     
     template <class T, class Policy>
    -calculated-result-type ellint_2(T k, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_2(T k, const Policy&);
     
     }} // namespaces
     
    @@ -69,10 +69,10 @@ when they are the same type then the result is the same type as the arguments.

    template <class T1, class T2>
    -calculated-result-type ellint_2(T1 k, T2 phi);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_2(T1 k, T2 phi);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_2(T1 k, T2 phi, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_2(T1 k, T2 phi, const Policy&);
     

    Returns the incomplete elliptic integral of the second kind E(φ, @@ -92,10 +92,10 @@ documentation for more details.

    template <class T>
    -calculated-result-type ellint_2(T k);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_2(T k);
     
     template <class T>
    -calculated-result-type ellint_2(T k, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_2(T k, const Policy&);
     

    Returns the complete elliptic integral of the second kind E(k): @@ -309,7 +309,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint/ellint_3.html b/doc/html/math_toolkit/ellint/ellint_3.html index 9692430ff..eeddba12c 100644 --- a/doc/html/math_toolkit/ellint/ellint_3.html +++ b/doc/html/math_toolkit/ellint/ellint_3.html @@ -1,9 +1,9 @@ - + Elliptic Integrals of the Third Kind - Legendre Form - + @@ -37,16 +37,16 @@
    namespace boost { namespace math {
     
     template <class T1, class T2, class T3>
    -calculated-result-type ellint_3(T1 k, T2 n, T3 phi);
    +BOOST_MATH_CUDA_ENABLED calculated-result-type ellint_3(T1 k, T2 n, T3 phi);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ellint_3(T1 k, T2 n, T3 phi, const Policy&);
    +BOOST_MATH_CUDA_ENABLED calculated-result-type ellint_3(T1 k, T2 n, T3 phi, const Policy&);
     
     template <class T1, class T2>
    -calculated-result-type ellint_3(T1 k, T2 n);
    +BOOST_MATH_CUDA_ENABLED calculated-result-type ellint_3(T1 k, T2 n);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_3(T1 k, T2 n, const Policy&);
    +BOOST_MATH_CUDA_ENABLED calculated-result-type ellint_3(T1 k, T2 n, const Policy&);
     
     }} // namespaces
     
    @@ -70,10 +70,10 @@ arguments.

    template <class T1, class T2, class T3>
    -calculated-result-type ellint_3(T1 k, T2 n, T3 phi);
    +BOOST_MATH_CUDA_ENABLED calculated-result-type ellint_3(T1 k, T2 n, T3 phi);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ellint_3(T1 k, T2 n, T3 phi, const Policy&);
    +BOOST_MATH_CUDA_ENABLED calculated-result-type ellint_3(T1 k, T2 n, T3 phi, const Policy&);
     

    Returns the incomplete elliptic integral of the third kind Π(n, @@ -95,10 +95,10 @@ documentation for more details.

    template <class T1, class T2>
    -calculated-result-type ellint_3(T1 k, T2 n);
    +BOOST_MATH_CUDA_ENABLED calculated-result-type ellint_3(T1 k, T2 n);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_3(T1 k, T2 n, const Policy&);
    +BOOST_MATH_CUDA_ENABLED calculated-result-type ellint_3(T1 k, T2 n, const Policy&);
     

    Returns the complete elliptic integral of the first kind Π(n, k): @@ -348,7 +348,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint/ellint_carlson.html b/doc/html/math_toolkit/ellint/ellint_carlson.html index d598490ed..3e8a9ec22 100644 --- a/doc/html/math_toolkit/ellint/ellint_carlson.html +++ b/doc/html/math_toolkit/ellint/ellint_carlson.html @@ -1,9 +1,9 @@ - + Elliptic Integrals - Carlson Form - + @@ -37,10 +37,10 @@
    namespace boost { namespace math {
     
     template <class T1, class T2, class T3>
    -calculated-result-type ellint_rf(T1 x, T2 y, T3 z)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rf(T1 x, T2 y, T3 z)
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ellint_rf(T1 x, T2 y, T3 z, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rf(T1 x, T2 y, T3 z, const Policy&)
     
     }} // namespaces
     
    @@ -49,10 +49,10 @@
    namespace boost { namespace math {
     
     template <class T1, class T2, class T3>
    -calculated-result-type ellint_rd(T1 x, T2 y, T3 z)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rd(T1 x, T2 y, T3 z)
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ellint_rd(T1 x, T2 y, T3 z, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rd(T1 x, T2 y, T3 z, const Policy&)
     
     }} // namespaces
     
    @@ -61,10 +61,10 @@
    namespace boost { namespace math {
     
     template <class T1, class T2, class T3, class T4>
    -calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p)
     
     template <class T1, class T2, class T3, class T4, class Policy>
    -calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy&)
     
     }} // namespaces
     
    @@ -73,10 +73,10 @@
    namespace boost { namespace math {
     
     template <class T1, class T2>
    -calculated-result-type ellint_rc(T1 x, T2 y)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rc(T1 x, T2 y)
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_rc(T1 x, T2 y, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rc(T1 x, T2 y, const Policy&)
     
     }} // namespaces
     
    @@ -85,10 +85,10 @@
    namespace boost { namespace math {
     
     template <class T1, class T2, class T3>
    -calculated-result-type ellint_rg(T1 x, T2 y, T3 z)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rg(T1 x, T2 y, T3 z)
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ellint_rg(T1 x, T2 y, T3 z, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rg(T1 x, T2 y, T3 z, const Policy&)
     
     }} // namespaces
     
    @@ -111,10 +111,10 @@ types: otherwise the return is the same type as the arguments.

    template <class T1, class T2, class T3>
    -calculated-result-type ellint_rf(T1 x, T2 y, T3 z)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rf(T1 x, T2 y, T3 z)
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ellint_rf(T1 x, T2 y, T3 z, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rf(T1 x, T2 y, T3 z, const Policy&)
     

    Returns Carlson's Elliptic Integral RF: @@ -134,10 +134,10 @@ documentation for more details.

    template <class T1, class T2, class T3>
    -calculated-result-type ellint_rd(T1 x, T2 y, T3 z)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rd(T1 x, T2 y, T3 z)
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ellint_rd(T1 x, T2 y, T3 z, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rd(T1 x, T2 y, T3 z, const Policy&)
     

    Returns Carlson's elliptic integral RD: @@ -157,10 +157,10 @@ documentation for more details.

    template <class T1, class T2, class T3, class T4>
    -calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p)
     
     template <class T1, class T2, class T3, class T4, class Policy>
    -calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy&)
     

    Returns Carlson's elliptic integral RJ: @@ -188,10 +188,10 @@

    template <class T1, class T2>
    -calculated-result-type ellint_rc(T1 x, T2 y)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rc(T1 x, T2 y)
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_rc(T1 x, T2 y, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rc(T1 x, T2 y, const Policy&)
     

    Returns Carlson's elliptic integral RC: @@ -219,10 +219,10 @@

    template <class T1, class T2, class T3>
    -calculated-result-type ellint_rg(T1 x, T2 y, T3 z)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rg(T1 x, T2 y, T3 z)
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ellint_rg(T1 x, T2 y, T3 z, const Policy&)
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_rg(T1 x, T2 y, T3 z, const Policy&)
     

    Returns Carlson's elliptic integral RG: @@ -986,7 +986,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint/ellint_d.html b/doc/html/math_toolkit/ellint/ellint_d.html index aac40f113..f5ecca7c9 100644 --- a/doc/html/math_toolkit/ellint/ellint_d.html +++ b/doc/html/math_toolkit/ellint/ellint_d.html @@ -1,9 +1,9 @@ - + Elliptic Integral D - Legendre Form - + @@ -37,16 +37,16 @@
    namespace boost { namespace math {
     
     template <class T1, class T2>
    -calculated-result-type ellint_d(T1 k, T2 phi);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_d(T1 k, T2 phi);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_d(T1 k, T2 phi, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_d(T1 k, T2 phi, const Policy&);
     
     template <class T1>
    -calculated-result-type ellint_d(T1 k);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_d(T1 k);
     
     template <class T1, class Policy>
    -calculated-result-type ellint_d(T1 k, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_d(T1 k, const Policy&);
     
     }} // namespaces
     
    @@ -65,10 +65,10 @@ arguments.

    template <class T1, class T2>
    -calculated-result-type ellint_d(T1 k, T2 phi);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_d(T1 k, T2 phi);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type ellint_3(T1 k, T2 phi, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_3(T1 k, T2 phi, const Policy&);
     

    Returns the incomplete elliptic integral: @@ -89,10 +89,10 @@ documentation for more details.

    template <class T1>
    -calculated-result-type ellint_d(T1 k);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_d(T1 k);
     
     template <class T1, class Policy>
    -calculated-result-type ellint_d(T1 k, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ellint_d(T1 k, const Policy&);
     

    Returns the complete elliptic integral D(k) = D(π/2, k) @@ -367,7 +367,7 @@ using Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint/ellint_intro.html b/doc/html/math_toolkit/ellint/ellint_intro.html index d050d4db4..2666ba1a9 100644 --- a/doc/html/math_toolkit/ellint/ellint_intro.html +++ b/doc/html/math_toolkit/ellint/ellint_intro.html @@ -1,9 +1,9 @@ - + Elliptic Integral Overview - + @@ -487,7 +487,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint/heuman_lambda.html b/doc/html/math_toolkit/ellint/heuman_lambda.html index a8141636c..8889a2ab4 100644 --- a/doc/html/math_toolkit/ellint/heuman_lambda.html +++ b/doc/html/math_toolkit/ellint/heuman_lambda.html @@ -1,9 +1,9 @@ - + Heuman Lambda Function - + @@ -36,10 +36,10 @@
    namespace boost { namespace math {
     
     template <class T1, class T2>
    -calculated-result-type heuman_lambda(T1 k, T2 phi);
    +BOOST_MATH_GPU_ENABLED calculated-result-type heuman_lambda(T1 k, T2 phi);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type heuman_lambda(T1 k, T2 phi, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type heuman_lambda(T1 k, T2 phi, const Policy&);
     
     }} // namespaces
     
    @@ -210,7 +210,7 @@ using Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ellint/jacobi_zeta.html b/doc/html/math_toolkit/ellint/jacobi_zeta.html index e73e75808..445075da9 100644 --- a/doc/html/math_toolkit/ellint/jacobi_zeta.html +++ b/doc/html/math_toolkit/ellint/jacobi_zeta.html @@ -1,9 +1,9 @@ - + Jacobi Zeta Function - + @@ -36,10 +36,10 @@
    namespace boost { namespace math {
     
     template <class T1, class T2>
    -calculated-result-type jacobi_zeta(T1 k, T2 phi);
    +BOOST_MATH_GPU_ENABLED calculated-result-type jacobi_zeta(T1 k, T2 phi);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type jacobi_zeta(T1 k, T2 phi, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type jacobi_zeta(T1 k, T2 phi, const Policy&);
     
     }} // namespaces
     
    @@ -265,7 +265,7 @@ using the Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/error_handling.html b/doc/html/math_toolkit/error_handling.html index 82db089a7..412838390 100644 --- a/doc/html/math_toolkit/error_handling.html +++ b/doc/html/math_toolkit/error_handling.html @@ -1,13 +1,13 @@ - + Error Handling - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -1108,14 +1108,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/estrin.html b/doc/html/math_toolkit/estrin.html index cbed796eb..72726e200 100644 --- a/doc/html/math_toolkit/estrin.html +++ b/doc/html/math_toolkit/estrin.html @@ -1,9 +1,9 @@ - + Estrin's method for polynomial evaluation - + @@ -89,7 +89,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/exact_typdefs.html b/doc/html/math_toolkit/exact_typdefs.html index d6d28ea2c..f704bba2f 100644 --- a/doc/html/math_toolkit/exact_typdefs.html +++ b/doc/html/math_toolkit/exact_typdefs.html @@ -1,9 +1,9 @@ - + Exact-Width Floating-Point typedefs - + @@ -161,7 +161,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/examples.html b/doc/html/math_toolkit/examples.html index 6e12374fd..50f36ff25 100644 --- a/doc/html/math_toolkit/examples.html +++ b/doc/html/math_toolkit/examples.html @@ -1,9 +1,9 @@ - + Examples - + @@ -126,7 +126,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/exp.html b/doc/html/math_toolkit/exp.html index cd76870c1..fb4507c75 100644 --- a/doc/html/math_toolkit/exp.html +++ b/doc/html/math_toolkit/exp.html @@ -1,9 +1,9 @@ - + The Quaternionic Exponential - + @@ -44,7 +44,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/expint.html b/doc/html/math_toolkit/expint.html index 1567aee25..069f24d2c 100644 --- a/doc/html/math_toolkit/expint.html +++ b/doc/html/math_toolkit/expint.html @@ -1,9 +1,9 @@ - + Exponential Integrals - + @@ -36,7 +36,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/expint/expint_i.html b/doc/html/math_toolkit/expint/expint_i.html index 05279e230..80c8be37b 100644 --- a/doc/html/math_toolkit/expint/expint_i.html +++ b/doc/html/math_toolkit/expint/expint_i.html @@ -1,9 +1,9 @@ - + Exponential Integral Ei - + @@ -36,10 +36,10 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type expint(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type expint(T z);
     
     template <class T, class Policy>
    -calculated-result-type expint(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type expint(T z, const Policy&);
     
     }} // namespaces
     
    @@ -58,10 +58,10 @@ Description
    template <class T>
    -calculated-result-type expint(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type expint(T z);
     
     template <class T, class Policy>
    -calculated-result-type expint(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type expint(T z, const Policy&);
     

    Returns the exponential @@ -324,7 +324,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/expint/expint_n.html b/doc/html/math_toolkit/expint/expint_n.html index 94d41d38f..c642f1eb2 100644 --- a/doc/html/math_toolkit/expint/expint_n.html +++ b/doc/html/math_toolkit/expint/expint_n.html @@ -1,9 +1,9 @@ - + Exponential Integral En - + @@ -36,10 +36,10 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type expint(unsigned n, T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type expint(unsigned n, T z);
     
     template <class T, class Policy>
    -calculated-result-type expint(unsigned n, T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type expint(unsigned n, T z, const Policy&);
     
     }} // namespaces
     
    @@ -58,10 +58,10 @@ Description
    template <class T>
    -calculated-result-type expint(unsigned n, T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type expint(unsigned n, T z);
     
     template <class T, class Policy>
    -calculated-result-type expint(unsigned n, T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type expint(unsigned n, T z, const Policy&);
     

    Returns the exponential @@ -276,7 +276,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/factorials.html b/doc/html/math_toolkit/factorials.html index 67590f79b..8b1b580fe 100644 --- a/doc/html/math_toolkit/factorials.html +++ b/doc/html/math_toolkit/factorials.html @@ -1,9 +1,9 @@ - + Factorials and Binomial Coefficients - + @@ -40,7 +40,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/factorials/sf_binomial.html b/doc/html/math_toolkit/factorials/sf_binomial.html index a938003ba..50e4854b2 100644 --- a/doc/html/math_toolkit/factorials/sf_binomial.html +++ b/doc/html/math_toolkit/factorials/sf_binomial.html @@ -1,9 +1,9 @@ - + Binomial Coefficients - + @@ -132,7 +132,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/factorials/sf_double_factorial.html b/doc/html/math_toolkit/factorials/sf_double_factorial.html index 15aeeec54..3f34edc4f 100644 --- a/doc/html/math_toolkit/factorials/sf_double_factorial.html +++ b/doc/html/math_toolkit/factorials/sf_double_factorial.html @@ -1,9 +1,9 @@ - + Double Factorial - + @@ -148,7 +148,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/factorials/sf_factorial.html b/doc/html/math_toolkit/factorials/sf_factorial.html index 8bfb0ff33..663574475 100644 --- a/doc/html/math_toolkit/factorials/sf_factorial.html +++ b/doc/html/math_toolkit/factorials/sf_factorial.html @@ -1,9 +1,9 @@ - + Factorial - + @@ -183,7 +183,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/factorials/sf_falling_factorial.html b/doc/html/math_toolkit/factorials/sf_falling_factorial.html index 1c0386179..1a0dbd3cc 100644 --- a/doc/html/math_toolkit/factorials/sf_falling_factorial.html +++ b/doc/html/math_toolkit/factorials/sf_falling_factorial.html @@ -1,9 +1,9 @@ - + Falling Factorial - + @@ -96,7 +96,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/factorials/sf_rising_factorial.html b/doc/html/math_toolkit/factorials/sf_rising_factorial.html index 932e1b38c..66d34f239 100644 --- a/doc/html/math_toolkit/factorials/sf_rising_factorial.html +++ b/doc/html/math_toolkit/factorials/sf_rising_factorial.html @@ -1,9 +1,9 @@ - + Rising Factorial - + @@ -101,7 +101,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fastest_typdefs.html b/doc/html/math_toolkit/fastest_typdefs.html index aa0993a5d..feb8eee35 100644 --- a/doc/html/math_toolkit/fastest_typdefs.html +++ b/doc/html/math_toolkit/fastest_typdefs.html @@ -1,9 +1,9 @@ - + Fastest floating-point typedefs - + @@ -50,7 +50,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/float128.html b/doc/html/math_toolkit/float128.html index 6ad37935d..e4a1319fe 100644 --- a/doc/html/math_toolkit/float128.html +++ b/doc/html/math_toolkit/float128.html @@ -1,9 +1,9 @@ - + Implementation of Float128 type - + @@ -158,7 +158,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/float128/exp_function.html b/doc/html/math_toolkit/float128/exp_function.html index 76fcf8f8c..d9f80c442 100644 --- a/doc/html/math_toolkit/float128/exp_function.html +++ b/doc/html/math_toolkit/float128/exp_function.html @@ -1,9 +1,9 @@ - + Exponential function - + @@ -58,7 +58,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/float128/overloading.html b/doc/html/math_toolkit/float128/overloading.html index f8da72f63..69c2e47bf 100644 --- a/doc/html/math_toolkit/float128/overloading.html +++ b/doc/html/math_toolkit/float128/overloading.html @@ -1,9 +1,9 @@ - + Overloading template functions with float128_t - + @@ -83,7 +83,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/float128/typeinfo.html b/doc/html/math_toolkit/float128/typeinfo.html index 12fd81c5b..f1373b7eb 100644 --- a/doc/html/math_toolkit/float128/typeinfo.html +++ b/doc/html/math_toolkit/float128/typeinfo.html @@ -1,9 +1,9 @@ - + typeinfo - + @@ -64,7 +64,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/float128_hints.html b/doc/html/math_toolkit/float128_hints.html index 8db013b06..67477905f 100644 --- a/doc/html/math_toolkit/float128_hints.html +++ b/doc/html/math_toolkit/float128_hints.html @@ -1,9 +1,9 @@ - + Hints on using float128 (and __float128) - + @@ -93,7 +93,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/float_comparison.html b/doc/html/math_toolkit/float_comparison.html index 38dc6381d..3d7e65050 100644 --- a/doc/html/math_toolkit/float_comparison.html +++ b/doc/html/math_toolkit/float_comparison.html @@ -1,9 +1,9 @@ - + Floating-point Comparison - + @@ -400,7 +400,7 @@ epsilon_difference = 0.000000000 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fourier_integrals.html b/doc/html/math_toolkit/fourier_integrals.html index 007296b3c..a7e120b3d 100644 --- a/doc/html/math_toolkit/fourier_integrals.html +++ b/doc/html/math_toolkit/fourier_integrals.html @@ -1,9 +1,9 @@ - + Fourier Integrals - + @@ -302,7 +302,7 @@ pi/(2e) = 5.778636748954608589550465916563481e-01, difference -6.74075480535532 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fp_facets.html b/doc/html/math_toolkit/fp_facets.html index 894829bbc..2a1bc8856 100644 --- a/doc/html/math_toolkit/fp_facets.html +++ b/doc/html/math_toolkit/fp_facets.html @@ -1,9 +1,9 @@ - + Facets for Floating-Point Infinities and NaNs - + @@ -78,7 +78,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fp_facets/examples.html b/doc/html/math_toolkit/fp_facets/examples.html index 875286bb8..0aa395845 100644 --- a/doc/html/math_toolkit/fp_facets/examples.html +++ b/doc/html/math_toolkit/fp_facets/examples.html @@ -1,9 +1,9 @@ - + Examples - + @@ -244,7 +244,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fp_facets/facets_intro.html b/doc/html/math_toolkit/fp_facets/facets_intro.html index 33cf16e5b..d79265f8c 100644 --- a/doc/html/math_toolkit/fp_facets/facets_intro.html +++ b/doc/html/math_toolkit/fp_facets/facets_intro.html @@ -1,9 +1,9 @@ - + Introduction - + @@ -366,7 +366,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fp_facets/portability.html b/doc/html/math_toolkit/fp_facets/portability.html index df321165d..ab1fd80ff 100644 --- a/doc/html/math_toolkit/fp_facets/portability.html +++ b/doc/html/math_toolkit/fp_facets/portability.html @@ -1,9 +1,9 @@ - + Portability - + @@ -37,7 +37,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fp_facets/rationale.html b/doc/html/math_toolkit/fp_facets/rationale.html index a83be60e0..aa31f7b64 100644 --- a/doc/html/math_toolkit/fp_facets/rationale.html +++ b/doc/html/math_toolkit/fp_facets/rationale.html @@ -1,9 +1,9 @@ - + Design Rationale - + @@ -54,7 +54,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fp_facets/reference.html b/doc/html/math_toolkit/fp_facets/reference.html index ffbd211b8..69087574e 100644 --- a/doc/html/math_toolkit/fp_facets/reference.html +++ b/doc/html/math_toolkit/fp_facets/reference.html @@ -1,9 +1,9 @@ - + Reference - + @@ -477,7 +477,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/fpclass.html b/doc/html/math_toolkit/fpclass.html index c7760c86e..2b86c1f74 100644 --- a/doc/html/math_toolkit/fpclass.html +++ b/doc/html/math_toolkit/fpclass.html @@ -1,9 +1,9 @@ - + Floating-Point Classification: Infinities and NaNs - + @@ -238,7 +238,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/future.html b/doc/html/math_toolkit/future.html index 251e23aa7..d17cfe6f4 100644 --- a/doc/html/math_toolkit/future.html +++ b/doc/html/math_toolkit/future.html @@ -1,9 +1,9 @@ - + Extras/Future Directions - + @@ -134,7 +134,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/gauss.html b/doc/html/math_toolkit/gauss.html index 92d50b6ea..81e111932 100644 --- a/doc/html/math_toolkit/gauss.html +++ b/doc/html/math_toolkit/gauss.html @@ -1,9 +1,9 @@ - + Gauss-Legendre quadrature - + @@ -201,7 +201,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/gauss_kronrod.html b/doc/html/math_toolkit/gauss_kronrod.html index 07cf7c02a..9fc69aae2 100644 --- a/doc/html/math_toolkit/gauss_kronrod.html +++ b/doc/html/math_toolkit/gauss_kronrod.html @@ -1,9 +1,9 @@ - + Gauss-Kronrod Quadrature - + @@ -273,7 +273,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/gd_opt.html b/doc/html/math_toolkit/gd_opt.html new file mode 100644 index 000000000..22171405f --- /dev/null +++ b/doc/html/math_toolkit/gd_opt.html @@ -0,0 +1,54 @@ + + + +Gradient Based Optimizers + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    + + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/gd_opt/gradient_descent.html b/doc/html/math_toolkit/gd_opt/gradient_descent.html new file mode 100644 index 000000000..6df1e2b13 --- /dev/null +++ b/doc/html/math_toolkit/gd_opt/gradient_descent.html @@ -0,0 +1,419 @@ + + + +Gradient Descent + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    + +
    + + Synopsis +
    +
    #include <boost/math/optimization/gradient_descent.hpp>
    +
    +template<typename ArgumentContainer,
    +         typename RealType,
    +     class Objective,
    +     class InitializationPolicy,
    +     class ObjectiveEvalPolicy,
    +     class GradEvalPolicy>
    +class gradient_descent {
    +  public:
    +    void step();
    +}
    +
    +/* Convenience overloads  */
    +/* make gradient descent by providing
    + ** objective function
    + ** variables to optimize over
    + ** optionally learing rate
    + *
    + * requires that code is written using boost::math::differentiation::rvar
    + */
    +template<class Objective, typename ArgumentContainer, typename RealType>
    +auto make_gradient_descent(Objective&& obj, ArgumentContainer& x, RealType lr = RealType{ 0.01 });
    +
    +/* make gradient descent by providing
    + * objective function
    + ** variables to optimize over
    + ** learning rate (not optional)
    + ** initialization policy
    + *
    + * requires that code is written using boost::math::differentiation::rvar
    + */
    +
    +template<class Objective, typename ArgumentContainer, typename RealType, class InitializationPolicy>
    +    auto make_gradient_descent(Objective&& obj,
    +                               ArgumentContainer& x,
    +                               RealType lr,
    +                               InitializationPolicy&& ip);
    +/* make gradient descent by providing
    +** objective function
    +** variables to optimize over
    +** learning rate (not optional)
    +** variable initialization policy
    +** objective evaluation policy
    +** gradient evaluation policy
    +*
    +* code does not have to use boost::math::differentiation::rvar
    +*/
    +template<typename ArgumentContainer,
    +             typename RealType,
    +     class Objective,
    +         class InitializationPolicy,
    +             class ObjectiveEvalPolicy,
    +             class GradEvalPolicy>
    +auto make_gradient_descent(Objective&& obj,
    +                           ArgumentContainer& x,
    +                               RealType& lr,
    +                               InitializationPolicy&& ip,
    +                               ObjectiveEvalPolicy&& oep,
    +                               GradEvalPolicy&& gep)
    +
    +

    + Gradient descent iteratively updates parameters x + in the direction opposite to the gradient of the objective function (minimizing + the objective). +

    +
    x[i] -= lr * g[i]
    +
    +

    + where lr is a user defined + learning rate. For a more complete description of the theoretical principle + check the wikipedia + page +

    +

    + The implementation delegates: - the initialization of differentiable variables + to an initialization policy - objective evaluation to an objective evaluation + policy - the gradient computation to a gradient evaluation policy - the parameter + updates to an update policy +

    +

    + The interface is intended to be pytorch-like, where a optimizer object is + constructed and progressed with a step() method. A helper minimize + method is also provided. +

    +
    + + Parameters +
    +
      +
    • + Objective&& + obj : objective function to + minimize +
    • +
    • + ArgumentContainer& + x : variables to optimize over +
    • +
    • + RealType& + lr : learning rate. A larger + value takes larger steps during descent, leading to faster, but more + unstable convergence. Conversely, small values are more stable but take + longer to converge. +
    • +
    • + InitializationPolicy&& ip + : Initialization policy for optimizer state and variables. Users may + supply a custom initialization policy to control how the argument container + and any AD specific runtime state : i.e. reverse-mode tape attachment/reset + are initialized. By default, the optimizer uses the user-provided initial + values in x and performs the standard reverse mode AD initialization + required for gradient evaluation. Custom initialization policies are + useful for randomized starts, non rvar AD types, or when gradients are + supplied externally. See the reverse-mode autodiff policy documentation + for the required initialization policy interface when writing custom + policies. +
    • +
    • + ObjectiveEvalPolicy&& + oep : tells the optimizer how + to evaluate the objective function. By default reverse_mode_function_eval_policy<RealType>. +
    • +
    • + GradEvalPolicy&& + gep : tells the optimizer how + to evaluate the gradient of the objective function. By default reverse_mode_gradient_evaluation_policy<RealType> +
    • +
    +
    + + Example + using a manual optimization +
    +

    + In this section we will present an example for finding optimal configurations + of electrically charged particles confined to a R + = 1 + sphere. This problem is also known as the Thomson + problem. In summary, we are looking for the configuration of an N-electron + system subject to the Coulomb potential confined to the $S^2$ sphere. The + Coulomb potential is given by: +

    +

    + +

    +

    + The code below manually minimizes the above potential energy function for + N particles over their two angular positions. +

    +
    #include <boost/math/differentiation/autodiff_reverse.hpp>
    +#include <boost/math/optimization/gradient_descent.hpp>
    +#include <boost/math/optimization/minimizer.hpp>
    +#include <cmath>
    +#include <fstream>
    +#include <iostream>
    +#include <random>
    +#include <string>
    +namespace rdiff = boost::math::differentiation::reverse_mode;
    +namespace bopt  = boost::math::optimization;
    +double random_double(double min = 0.0, double max = 1.0)
    +{
    +    static thread_local std::mt19937       rng{std::random_device{}()};
    +    std::uniform_real_distribution<double> dist(min, max);
    +    return dist(rng);
    +}
    +
    +template<typename S>
    +struct vec3
    +{
    +    /**
    +    * @brief R^3 coordinates of particle on Thomson Sphere
    +    */
    +    S x, y, z;
    +};
    +
    +template<class S>
    +static inline vec3<S> sph_to_xyz(const S& theta, const S& phi)
    +{
    +    /**
    +     * convenience overload to convert from [theta,phi] -> x, y, z
    +     */
    +    return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)};
    +}
    +
    +template<typename T>
    +T thomson_energy(std::vector<T>& r)
    +{
    +    const size_t N    = r.size() / 2;
    +    const T      tiny = T(1e-12);
    +
    +    T E = 0;
    +    for (size_t i = 0; i < N; ++i) {
    +        const T& theta_i = r[2 * i + 0];
    +        const T& phi_i   = r[2 * i + 1];
    +        auto     ri      = sph_to_xyz(theta_i, phi_i);
    +
    +        for (size_t j = i + 1; j < N; ++j) {
    +            const T& theta_j = r[2 * j + 0];
    +            const T& phi_j   = r[2 * j + 1];
    +            auto     rj      = sph_to_xyz(theta_j, phi_j);
    +
    +            T dx = ri.x - rj.x;
    +            T dy = ri.y - rj.y;
    +        T dz = ri.z - rj.z;
    +
    +            T d2 = dx * dx + dy * dy + dz * dz + tiny;
    +            E += 1.0 / sqrt(d2);
    +        }
    +    }
    +    return E;
    +}
    +
    +template<class T>
    +std::vector<rdiff::rvar<T, 1>> init_theta_phi_uniform(size_t N, unsigned seed = 12345)
    +{
    +    const T pi = T(3.1415926535897932384626433832795);
    +
    +    std::mt19937                      rng(seed);
    +    std::uniform_real_distribution<T> unif01(T(0), T(1));
    +    std::uniform_real_distribution<T> unifm11(T(-1), T(1));
    +
    +    std::vector<rdiff::rvar<T, 1>> u;
    +    u.reserve(2 * N);
    +
    +    for (size_t i = 0; i < N; ++i) {
    +        T z     = unifm11(rng);
    +        T phi   = (T(2) * pi) * unif01(rng) - pi;
    +        T theta = std::acos(z);
    +
    +        u.emplace_back(theta);
    +        u.emplace_back(phi);
    +    }
    +    return u;
    +}
    +
    +int main(int argc, char* argv[])
    +{
    +    if (argc != 2) {
    +        std::cerr << "Usage: " << argv[0] << " <N>\n";
    +        return 1;
    +    }
    +
    +    const int    N      = std::stoi(argv[1]);
    +    const int    NSTEPS = 100000;
    +    const double lr     = 1e-3;
    +
    +    auto u_ad = init_theta_phi_uniform<double>(N);
    +
    +        auto gdopt = bopt::make_gradient_descent(&thomson_energy<rdiff::rvar<double, 1>>, u_ad, lr);
    +
    +    // filenames
    +    std::string pos_filename    = "thomson_" + std::to_string(N) + ".csv";
    +    std::string energy_filename = "energy_" + std::to_string(N) + ".csv";
    +
    +        std::ofstream pos_out(pos_filename);
    +        std::ofstream energy_out(energy_filename);
    +
    +        pos_out << "step,particle,x,y,z\n";
    +        energy_out << "step,energy\n";
    +
    +    for (int step = 0; step < NSTEPS; ++step) {
    +            gdopt.step();
    +            for (int pi = 0; pi < N; ++pi) {
    +                double theta = u_ad[2 * pi + 0].item();
    +                double phi   = u_ad[2 * pi + 1].item();
    +                auto   r     = sph_to_xyz(theta, phi);
    +                pos_out << step << "," << pi << "," << r.x << "," << r.y << "," << r.z << "\n";
    +            }
    +        auto E = gdopt.objective_value();
    +        energy_out << step << "," << E << "\n";
    +        }
    +
    +        pos_out.close();
    +        energy_out.close();
    +
    +        return 0;
    +}
    +
    +

    + The variable +

    +
    const int    N      = std::stoi(argv[1]);
    +

    + is the number of particles read from the command line +

    +
    const int    NSTEPS = 100000;
    +

    + is the number of optimization steps +

    +
    const double lr     = 1e-3;
    +

    + is the optimizer learning rate. Using the code the way its written, the optimizer + runs for 100000 steps. Running the program with +

    +
    ./thomson_sphere N
    +
    +

    + optimizes the N particle system. Below is a plot of several optimal configurations + for N=2,...8 particles. +

    +

    + +

    +

    + Below is a plot of the final energy of the system, and its deviation from + the theoretically predicted values. The table of theoretical energy values + for the problem is from wikipedia. +

    +

    + [gbo_graphi thomson_energy_error_gradient_descent.svg] +

    +
    + + Example + using minimize +
    +

    + Often, we don't want to actually implement our own stepping function, i.e. + we care about certain convergence criteria. In the above example, we need + to include the minimizer.hpp header: +

    +
    #include <boost/math/optimization/minimizer.hpp>
    +
    +

    + and replace the optimization loop: +

    +
    for (int step = 0; step < NSTEPS; ++step) {
    +           gdopt.step();
    +           for (int pi = 0; pi < N; ++pi) {
    +               double theta = u_ad[2 * pi + 0].item();
    +               double phi   = u_ad[2 * pi + 1].item();
    +               auto   r     = sph_to_xyz(theta, phi);
    +               pos_out << step << "," << pi << "," << r.x << "," << r.y << "," << r.z << "\n";
    +           }
    +       auto E = gdopt.objective_value();
    +       energy_out << step << "," << E << "\n";
    +       }
    +
    +

    + with +

    +
    auto result = minimize(gdopt);
    +
    +

    + minimize returns a +

    +
    optimization_result<typename Optimizer::real_type_t>
    +

    + , a struct with the following fields: +

    +
    size_t num_iter;
    +RealType objective_value;
    +std::vector<RealType> objective_history;
    +bool converged;
    +
    +

    + where num_iter is the number + of iterations the optimizer went through, objective_value + is the final objective value, objective_history + are the intermediate objective values, and converged + is whether the convergence criterion was satisfied. By default, minimize(optimizer) + uses a gradient norm convergence criterion. If norm(gradient_vector) < + 1e-3, the criterion is satisfied. Maximum number of iterations is set at + 100000. For more info on how to use minimize + check the minimize docs. With default parameters, gradient descent solves + the N=2 problem in 93799 + steps. +

    +
    + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/gd_opt/introduction.html b/doc/html/math_toolkit/gd_opt/introduction.html new file mode 100644 index 000000000..dd3794f43 --- /dev/null +++ b/doc/html/math_toolkit/gd_opt/introduction.html @@ -0,0 +1,753 @@ + + + +Introduction + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    + +

    + Gradient based optimizers are algorithms that use the gradient of a function + to iteratively find locally extreme points of functions over a set of parameters. + This sections provides a description of a set of gradient optimizers. The + optimizers are written with boost::math::differentiation::reverse_mode::rvar + in mind, however if a way to evaluate the funciton and its gradient is provided, + the optimizers should work in exactly the same way. +

    +

    + Below is a table that summarizes the intended usage patterns of the provided + optimizers and policies, and is meant as a practical guide rather than a + strict prescription: +

    +

    + + List + of Optimizers +

    +
    ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    + Optimizer +

    +
    +

    + Order +

    +
    +

    + Uses Curvature +

    +
    +

    + Memory Cost +

    +
    +

    + Intended Problem Class +

    +
    +

    + When to Use +

    +
    +

    + gradient descent +

    +
    +

    + first +

    +
    +

    + no +

    +
    +

    + low +

    +
    +

    + Smooth, well-scaled objectives +

    +
    +

    + Baseline method; debugging; when behavior transparency matters +

    +
    +

    + nesterov accelerated gradient +

    +
    +

    + first +

    +
    +

    + no +

    +
    +

    + low +

    +
    +

    + Ill-conditioned or narrow-valley problems +

    +
    +

    + When plain gradient descent converges slowly or oscillates +

    +
    +

    + L-BFGS +

    +
    +

    + quasi second order +

    +
    +

    + approximate +

    +
    +

    + medium +

    +
    +

    + Smooth, deterministic objectives +

    +
    +

    + When gradients are reliable and faster convergence is needed +

    +
    +

    + + Optimizer + Policies +

    +
    + + Initialization + Policies +
    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + +
    +

    + Policy +

    +
    +

    + Use case +

    +
    +

    + Responsibilities +

    +
    +

    + tape_initializer_rvar +

    +
    +

    + User initialzes all varibles manually +

    +
    +

    + initializes tape +

    +
    +

    + random_uniform_initializer_rvar +

    +
    +

    + Initializes all variables with a random number between a min and + max value +

    +
    +

    + Initializes variables. Initializes tape. +

    +
    +

    + costant_initializer_rvar +

    +
    +

    + Initializes all variables with a constant +

    +
    +

    + Initializes variables. Initializes tape. +

    +
    +
    + + Evaluation + Policies +
    +
    +++++ + + + + + + + + + + + + + + + + + +
    +

    + Policy +

    +
    +

    + Use case +

    +
    +

    + Responsibilities +

    +
    +

    + reverse_mode_function_eval_policy +

    +
    +

    + Default. User with boost reverse mode autodiff +

    +
    +

    + tells the optimizer how to evaluate the objective +

    +
    +

    + reverse_mode_gradient_evaluation_policy +

    +
    +

    + Default. User with boost reverse mode autodiff +

    +
    +

    + tells the optimizer how to evaluate the gradients of an objective +

    +
    +

    + These policies are intended to use with boost reverse mode autodiff. If you + need to use the optimizers with a custom AD variable, or by providing the + gradient of an objective manually, check the docs for policies to see how + the policies are implemented. +

    +

    + + LBFGS line + search policies +

    +

    + the table below summarizes the two line search policies provided for use + with LBFGS. +

    +
    +++++++ + + + + + + + + + + + + + + + + + + + + + + + +
    +

    + Policy +

    +
    +

    + Enforced Conditions +

    +
    +

    + Per iteration cost +

    +
    +

    + Convergence +

    +
    +

    + Use case +

    +
    +

    + Strong Wolfe +

    +
    +

    + function decrease. curvature condition +

    +
    +

    + higher +

    +
    +

    + faster +

    +
    +

    + most of the time +

    +
    +

    + Armijo +

    +
    +

    + function decrease only +

    +
    +

    + lower +

    +
    +

    + slower +

    +
    +

    + you know what you're doing +

    +
    +

    + + Minimizer + Policies +

    +
    + + Convergence + Policies +
    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    + Policy +

    +
    +

    + Criterion +

    +
    +

    + When to Use +

    +
    +

    + gradient_norm_convergence_policy +

    +
    +

    + gradient norm < tol +

    +
    +

    + Default. Stationarity based condition +

    +
    +

    + objective_tol_convergence_policy +

    +
    +

    + absolute difference between objective steps is small +

    +
    +

    + Well-scaled objectives +

    +
    +

    + relative_objective_tol_policy +

    +
    +

    + relative difference between objective steps is small +

    +
    +

    + Scale-invariant convergence +

    +
    +

    + combined_convergence_policy +

    +
    +

    + logical combination OR +

    +
    +

    + you need a combination of convergence conditions +

    +
    +
    + + Termination + Policies +
    +
    +++++ + + + + + + + + + + + + + + + + + +
    +

    + Policy +

    +
    +

    + Controls +

    +
    +

    + When to Use +

    +
    +

    + max_iter_termination_policy +

    +
    +

    + iteration count +

    +
    +

    + Hard safety bound (almost always recommended) +

    +
    +

    + wallclock_termination_policy +

    +
    +

    + wall clock time +

    +
    +

    + benchmarking, real-time constraints +

    +
    +
    + + Constraint + and Projection Policies +
    +
    ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    + Policy +

    +
    +

    + Constraint Type +

    +
    +

    + unconstrained_policy +

    +
    +

    + No constraint +

    +
    +

    + box_constraints +

    +
    +

    + upper/lower bound clip +

    +
    +

    + nonnegativity_constraint +

    +
    +

    + set everything below 0, to 0 +

    +
    +

    + l2_ball_constraint +

    +
    +

    + 2-norm(x) < r +

    +
    +

    + l1_ball_constraint +

    +
    +

    + 1-norm(x) < r +

    +
    +

    + simplex_constraint +

    +
    +

    + Probability simplex +

    +
    +

    + function_constraint +

    +
    +

    + custom user provided function wrapper +

    +
    +

    + unit_sphere_constraint +

    +
    +

    + 2-norm(x) = 1 +

    +
    +
    + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/gd_opt/lbfgs.html b/doc/html/math_toolkit/gd_opt/lbfgs.html new file mode 100644 index 000000000..ae9574727 --- /dev/null +++ b/doc/html/math_toolkit/gd_opt/lbfgs.html @@ -0,0 +1,412 @@ + + + +L-BFGS + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    +

    +L-BFGS +

    +
    + + Synopsis +
    +
    #include <boost/math/optimization/lbfgs.hpp>
    +
    +namespace boost {
    +namespace math {
    +namespace optimization {
    +
    +namespace rdiff = boost::math::differentiation::reverse_mode;
    +
    +/**
    + *
    + * @brief Limited-memory BFGS (L-BFGS) optimizer
    + *
    + * The `lbfgs` class implements the Limited-memory BFGS optimization algorithm,
    + * a quasi-Newton method that approximates the inverse Hessian using a rolling
    + * window of the last `m` updates. It is suitable for medium- to large-scale
    + * optimization problems where full Hessian storage is infeasible.
    + *
    + * @tparam> ArgumentContainer: container type for parameters, e.g.
    + * std::vector<RealType>
    + * @tparam> RealType scalar floating type (e.g. double, float)
    + * @tparam> Objective: objective function. must support "f(x)" evaluation
    + * @tparam> InitializationPolicy: policy for initializing x
    + * @tparam> ObjectiveEvalPolicy: policy for computing the objective value
    + * @tparam> GradEvalPolicy: policy for computing gradients
    + * @tparam> LineaSearchPolicy: e.g. Armijo, StrongWolfe
    + *
    + * https://en.wikipedia.org/wiki/Limited-memory_BFGS
    + */
    +
    +template<typename ArgumentContainer,
    +         typename RealType,
    +         class Objective,
    +         class InitializationPolicy,
    +         class ObjectiveEvalPolicy,
    +         class GradEvalPolicy,
    +         class LineSearchPolicy>
    +class lbfgs
    +{
    +public:
    +  lbfgs(Objective&& objective,
    +        ArgumentContainer& x,
    +        size_t m,
    +        InitializationPolicy&& ip,
    +        ObjectiveEvalPolicy&& oep,
    +        GradEvalPolicy&& gep,
    +        lbfgs_update_policy<RealType>&& up,
    +        LineSearchPolicy&& lsp);
    +
    +  void step();
    +};
    +
    +/* Convenience overloads */
    +/* create l-bfgs optimizer with
    + * objective function
    + * argument container
    + * optional
    + * - history size : how far to look in the past
    + */
    +template<class Objective, typename ArgumentContainer>
    +auto make_lbfgs(Objective&& obj, ArgumentContainer& x, std::size_t m = 10);
    +
    +template<class Objective,
    +         typename ArgumentContainer,
    +         class InitializationPolicy>
    +auto make_lbfgs(Objective&& obj,
    +           ArgumentContainer& x,
    +           std::size_t m,
    +           InitializationPolicy&& ip)
    +
    +/* construct lbfgs with a custom initialization and line search policy */
    +template<class Objective,
    +         typename ArgumentContainer,
    +         class InitializationPolicy,
    +         class LineSearchPolicy>
    +auto make_lbfgs(Objective&& obj,
    +           ArgumentContainer& x,
    +           std::size_t m,
    +           InitializationPolicy&& ip,
    +           LineSearchPolicy&& lsp);
    +
    +/* construct lbfgs optimizer with:
    + * custom initialization policy
    + * function evaluation policy
    + * gradient evaluation policy
    + * line search policy
    + */
    +template<class Objective,
    +         typename ArgumentContainer,
    +         class InitializationPolicy,
    +         class FunctionEvalPolicy,
    +         class GradientEvalPolicy,
    +         class LineSearchPolicy>
    +auto make_lbfgs(Objective&& obj,
    +           ArgumentContainer& x,
    +           std::size_t m,
    +           InitializationPolicy&& ip,
    +           FunctionEvalPolicy&& fep,
    +           GradientEvalPolicy&& gep,
    +           LineSearchPolicy&& lsp);
    +
    +} // namespace optimization
    +} // namespace math
    +} // namespace boost
    +
    +

    + LBFGS (limited memory BFGS) is a quasi-Newton optimizer that builds an approximation + to the inverse Hessian using only first-order information (function values + and gradients). Unlike full BFGS, it does not store or update a dense matrix; + instead it maintains a fixed size history of the most recent m correction + pairs and computes the search direction using a two loop recursion. In practice, + LBFGS often converges in significantly fewer iterations than normal gradient + based methods, especially on smooth, ill-conditioned objectives. +

    +
    + + Algorithm +
    +

    + At each iteration k, LBFGS: * Evaluates the gradient g_k = grad(f(x_k)). + * Computes a quasi-Newton search direction using the last m updates. * Chooses + a step length alpha_k using a line search policy. * Updates parameters: +

    +
    x_k += alpha_k p_k
    +
    +

    + * Forms the correction pairs: +

    +
    s_k = x_k - x_prev y_k = g_k - g_prev
    +
    +

    + and stores up to the last m + pairs (s_k, y_k). +

    +

    + The line search is a key part of practical LBFGS: it typically removes the + need to hand-tune a learning rate and improves robustness. +

    +
    + + Parameters +
    +
      +
    • + Objective&& + obj : objective function to + minimize. +
    • +
    • + ArgumentContainer& + x : variables to optimize over. + Updated in-place. +
    • +
    • + std::size_t m + : history size. Typical values are 5–20. Default is 10. Larger m can + improve directions but increases memory and per-step cost. +
    • +
    • + InitializationPolicy&& ip + : Initialization policy for optimizer state and variables. Users may + supply a custom initialization policy to control how the argument container + and any AD-specific runtime state : i.e. reverse-mode tape attachment/reset + are initialized. By default, the optimizer uses the same initialization + as gradient descent, taking the user provided initial values in x and + initializing the internal momentum/velocity state to zero. Custom initialization + policies are useful for randomized starts, non rvar AD types, or when + gradients are supplied externally. Check the docs for Reverse Mode autodiff + policies for initialization policy structure to write custom policies. +
    • +
    • + ObjectiveEvalPolicy&& + oep : policy for evaluating + the objective function value at a given x. By default this is a reverse-mode + AD evaluation policy when using rvar. +
    • +
    • + GradEvalPolicy&& + gep : policy for evaluating + the gradient of the objective. By default this is a reverse-mode AD gradient + evaluation policy when using rvar. +
    • +
    • +

      + LineSearchPolicy&& + lsp : policy for selecting + the step length alpha along a search direction. Determines the acceptance + criteria and how many function/gradient evaluations may be performed + during a step Default is Strong Wolfe, but Armijo is an option. Strong + Wolfe uses both function and gradient information to ensure good curvature + conditions, while Armijo relies only on function decrease and is simpler + but less robust for quasi-Newton methods. +

      +
      + + Notes +
      +
    • +
    • + LBFGS assumes the objective is sufficiently smooth for gradients to be + informative. It is typically most effective on unconstrained smooth problems. +
    • +
    • + LBFGS usually requires fewer iterations than gradient descent, but each + iteration is more expensive because it performs multiple objective/gradient + evaluations during line search. +
    • +
    +
    + + Example + : Thomson Problem +
    +
    #include <boost/math/differentiation/autodiff_reverse.hpp>
    +#include <boost/math/optimization/lbfgs.hpp>
    +#include <boost/math/optimization/minimizer.hpp>
    +#include <cmath>
    +#include <fstream>
    +#include <iostream>
    +#include <random>
    +#include <string>
    +namespace rdiff = boost::math::differentiation::reverse_mode;
    +namespace bopt  = boost::math::optimization;
    +double random_double(double min = 0.0, double max = 1.0)
    +{
    +    static thread_local std::mt19937       rng{std::random_device{}()};
    +    std::uniform_real_distribution<double> dist(min, max);
    +    return dist(rng);
    +}
    +
    +template<typename S>
    +struct vec3
    +{
    +    /**
    +     * @brief R^3 coordinates of particle on Thomson Sphere
    +     */
    +    S x, y, z;
    +};
    +
    +template<class S>
    +static inline vec3<S> sph_to_xyz(const S& theta, const S& phi)
    +{
    +    /**
    +     * convenience overload to convert from [theta,phi] -> x, y, z
    +     */
    +    return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)};
    +}
    +
    +template<typename T>
    +T thomson_energy(std::vector<T>& r)
    +{
    +    /* inverse square law
    +     */
    +    const size_t N    = r.size() / 2;
    +    const T      tiny = T(1e-12);
    +
    +    T E = 0;
    +    for (size_t i = 0; i < N; ++i) {
    +        const T& theta_i = r[2 * i + 0];
    +        const T& phi_i   = r[2 * i + 1];
    +        auto     ri      = sph_to_xyz(theta_i, phi_i);
    +
    +        for (size_t j = i + 1; j < N; ++j) {
    +            const T& theta_j = r[2 * j + 0];
    +            const T& phi_j   = r[2 * j + 1];
    +            auto     rj      = sph_to_xyz(theta_j, phi_j);
    +
    +            T dx = ri.x - rj.x;
    +            T dy = ri.y - rj.y;
    +            T dz = ri.z - rj.z;
    +
    +            T d2 = dx * dx + dy * dy + dz * dz + tiny;
    +            E += 1.0 / sqrt(d2);
    +        }
    +    }
    +    return E;
    +}
    +
    +template<class T>
    +std::vector<rdiff::rvar<T, 1>> init_theta_phi_uniform(size_t N, unsigned seed = 12345)
    +{
    +    const T pi = T(3.1415926535897932384626433832795);
    +
    +    std::mt19937                      rng(seed);
    +    std::uniform_real_distribution<T> unif01(T(0), T(1));
    +    std::uniform_real_distribution<T> unifm11(T(-1), T(1));
    +
    +    std::vector<rdiff::rvar<T, 1>> u;
    +    u.reserve(2 * N);
    +
    +    for (size_t i = 0; i < N; ++i) {
    +        T z     = unifm11(rng);
    +        T phi   = (T(2) * pi) * unif01(rng) - pi;
    +        T theta = std::acos(z);
    +
    +        u.emplace_back(theta);
    +        u.emplace_back(phi);
    +    }
    +    return u;
    +}
    +
    +int main(int argc, char* argv[])
    +{
    +
    +    if (argc != 2) {
    +        std::cerr << "Usage: " << argv[0] << " <N>\n";
    +        return 1;
    +    }
    +
    +    const int    N      = std::stoi(argv[1]);
    +    auto u_ad = init_theta_phi_uniform<double>(N);
    +
    +    auto lbfgs_opt = bopt::make_lbfgs(&thomson_energy<rdiff::rvar<double, 1>>, u_ad);
    +
    +    // filenames
    +    std::string pos_filename    = "thomson_" + std::to_string(N) + ".csv";
    +    std::string energy_filename = "lbfgs_energy_" + std::to_string(N) + ".csv";
    +
    +    std::ofstream pos_out(pos_filename);
    +    std::ofstream energy_out(energy_filename);
    +
    +    energy_out << "step,energy\n";
    +
    +    auto result = minimize(lbfgs_opt);
    +    for (int pi = 0; pi < N; ++pi) {
    +        double theta = u_ad[2 * pi + 0].item();
    +        double phi   = u_ad[2 * pi + 1].item();
    +        auto   r     = sph_to_xyz(theta, phi);
    +        pos_out << pi << "," << r.x << "," << r.y << "," << r.z << "\n";
    +    }
    +    auto E = lbfgs_opt.objective_value();
    +    int i = 0;
    +    for(auto& obj_hist : result.objective_history)
    +    {
    +        energy_out << i << "," << obj_hist << "\n";
    +        ++i;
    +    }
    +    energy_out << "," << E << "\n";
    +
    +    pos_out.close();
    +    energy_out.close();
    +
    +    return 0;
    +}
    +
    +

    + For the N = + 2 case, LBFGS requires only 5 iterations + to converge, the nesterov version of this problem converges in 4663 iterations with default parameters, and + gradient descent requires 93799 + iterations. Convergence is assumed to mean the norm of the gradient is less + than 1e-3. Below is a plot showcasing + the 3 different methods for the N=20 particle + case. +

    +

    + +

    +

    + In this case, gradient descent reaches the maximum number of iterations, + and does not converge, nag converges in 150 + iterations, and LBFGS converges in 67 + iterations. +

    +
    + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/gd_opt/minimize.html b/doc/html/math_toolkit/gd_opt/minimize.html new file mode 100644 index 000000000..daed072a6 --- /dev/null +++ b/doc/html/math_toolkit/gd_opt/minimize.html @@ -0,0 +1,333 @@ + + + +minimize + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    + +
    + + Synopsis +
    +
    #include <boost/math/optimization/minimizer.hpp>
    +
    +namespace boost {
    +namespace math {
    +namespace optimization {
    +template<typename RealType>
    +struct optimization_result
    +{
    +  size_t num_iter = 0;
    +  RealType objective_value;
    +  std::vector<RealType> objective_history;
    +  bool converged;
    +};
    +
    +/* Minimize an objective using a given optimizer.
    + *
    + * The optimizer `opt` must expose a `step()` method and the associated
    + * typedefs:
    + *   - argument_container_t
    + *   - real_type_t
    + *
    + * The behavior of the minimization loop is controlled by policy objects:
    + *  - ConstraintPolicy: projects variables onto a feasible set
    + *  - ConvergencePolicy: determines when convergence has been reached
    + *  - TerminationPolicy: determines when optimization must stop regardless
    + *    of convergence (e.g. max iterations)
    + *
    + * The function returns an `optimization_result` summarizing the run.
    + */
    +template<class Optimizer,
    +         class ConstraintPolicy =
    +           unconstrained_policy<typename Optimizer::argument_container_t>,
    +         class ConvergencePolicy =
    +           gradient_norm_convergence_policy<typename Optimizer::real_type_t>,
    +         class TerminationPolicy = max_iter_termination_policy>
    +auto minimize(Optimizer& opt,
    +         ConstraintPolicy project = ConstraintPolicy{},
    +         ConvergencePolicy converged =
    +           ConvergencePolicy{
    +             static_cast<typename Optimizer::real_type_t>(1e-3) },
    +         TerminationPolicy terminate = TerminationPolicy(100000),
    +         bool history = true)
    +
    +

    + This header provides a generic driver function minimize + that repeatedly advances an optimizer via step(), optionally projects parameters onto a + constraint set, and stops when either a convergence criterion is met or a + termination criterion triggers. +

    +
    + + Parameters +
    +
      +
    • + Optimizer& + opt : Optimizer instance. +
    • +
    • + ConstraintPolicy project + : Projection policy applied after each step(). Default is unconstrained_policy + (no projection). +
    • +
    • + ConvergencePolicy converged + : Stopping criterion. Default is gradient_norm_convergence_policy(tol=1e-3). +
    • +
    • + TerminationPolicy terminate + : Hard stop criterion. Default is max_iter_termination_policy(100000). +
    • +
    • + bool history + : If true, records opt.objective_value() after each iteration in optimization_result::objective_history. +
    • +
    +
    + + Convergence + Policies +
    +

    + Convergence policies decide when the optimization has converged. Each policy + has the signature: +

    +
    bool operator()(const GradientContainer& g, RealType objective_value) const;
    +
    +
    + + gradient_norm_convergence_policy +
    +

    + Stops when the Euclidean norm of the gradient falls below a tolerance: +

    +
    template<typename RealType>
    +struct gradient_norm_convergence_policy
    +{
    +explicit gradient_norm_convergence_policy(RealType tol);
    +
    +template<class GradientContainer>
    +bool operator()(const GradientContainer& g, RealType objective_v) const;
    +};
    +
    +
    + + objective_tol_convergence_policy +
    +

    + Stops when the absolute change in objective value between successive iterations + drops below a tolerance: +

    +
    template<typename RealType>
    +struct objective_tol_convergence_policy
    +{
    +explicit objective_tol_convergence_policy(RealType tol);
    +
    +template<class GradientContainer>
    +bool operator()(const GradientContainer&, RealType objective_v) const;
    +};
    +
    +

    + The first call always returns false +

    +
    + + relative_objective_tol_policy +
    +

    + Stops when the relative objective change drops below a tolerance: +

    +
    template<typename RealType>
    +struct relative_objective_tol_policy
    +{
    +explicit relative_objective_tol_policy(RealType rel_tol);
    +
    +template<class GradientContainer>
    +bool operator()(const GradientContainer&, RealType objective_v) const;
    +};
    +
    +

    + The relative change is computed as: +

    +
    abs(obj - last_obj) / max(1, abs(last_obj))
    +
    +
    + + combined_convergence_policy +
    +

    + Combines two convergence policies and stops when either triggers: +

    +
    template<class Policy1, class Policy2>
    +struct combined_convergence_policy
    +{
    +combined_convergence_policy(Policy1 p1, Policy2 p2);
    +
    +template<class GradientContainer, class RealType>
    +bool operator()(const GradientContainer& g, RealType obj) const;
    +};
    +
    +
    + + Termination + Policies +
    +

    + Termination policies provide a hard stop independent of convergence. Each + policy has the signature: +

    +
    bool operator()(size_t iter);
    +
    +
    + + max_iter_termination_policy +
    +

    + Stops after a fixed number of iterations +

    +
    struct max_iter_termination_policy { explicit max_iter_termination_policy(size_t max_iter); bool operator()(size_t iter); };
    +
    +
    + + wallclock_termination_policy +
    +

    + Stops after a wall-clock time budget: +

    +
    struct wallclock_termination_policy { explicit wallclock_termination_policy(std::chrono::milliseconds max_time); bool operator()(size_t iter) const; };
    +
    +
    + + Constraint + and Projection Policies +
    +

    + Projection policies modify the optimizer variables after each step. Each + policy has the signature: +

    +
    void operator()(ArgumentContainer& x) const;
    +
    +
    + + unconstrained_policy +
    +

    + No projection; leaves parameters unchanged +

    +
    template<typename ArgumentContainer> struct unconstrained_policy { void operator()(ArgumentContainer&); };
    +
    +
    + + box_constraints +
    +

    + Clamps each variable into [min, max] +

    +
    template<typename ArgumentContainer, typename RealType> struct box_constraints { box_constraints(RealType min, RealType max); void operator()(ArgumentContainer& x); };
    +
    +
    + + nonnegativity_constraint +
    +

    + Sets anything less than 0 to + 0 +

    +
    template<typename ArgumentContainer, typename RealType> struct nonnegativity_constraint { void operator()(ArgumentContainer& x) const; };
    +
    +
    + + l2_ball_constraint +
    +

    + Projects onto the L2 ball + of radius radius by uniform + scaling when needed +

    +
    template<typename ArgumentContainer, typename RealType> struct l2_ball_constraint { explicit l2_ball_constraint(RealType radius); void operator()(ArgumentContainer& x) const; };
    +
    +
    + + l1_ball_constraint +
    +

    + Projects onto the L1 ball + of radius radius by uniform + scaling +

    +
    template<typename ArgumentContainer, typename RealType> struct l1_ball_constraint { explicit l1_ball_constraint(RealType radius); void operator()(ArgumentContainer& x) const; };
    +
    +

    + This is not the exact Euclidean projection onto the L1 ball; it is a simple + scaling-based constraint +

    +
    + + simplex_constraint +
    +

    + Projects onto the scaled probability simplex by clipping negatives to 0 and renormalizing to sum to 1 +

    +
    template<typename ArgumentContainer, typename RealType> struct simplex_constraint { void operator()(ArgumentContainer& x) const; };
    +
    +
    + + function_constraint +
    +

    + Wraps a user-provided projection function +

    +
    template<typename ArgumentContainer> struct function_constraint { using func_t = void (*)(ArgumentContainer&); explicit function_constraint(func_t f); void operator()(ArgumentContainer& x) const; };
    +
    +
    + + unit_sphere_constraint +
    +

    + Normalizes the vector to unit L2 norm +

    +
    template<typename ArgumentContainer, typename RealType> struct unit_sphere_constraint { void operator()(ArgumentContainer& x) const; };
    +
    +

    + This projects onto the unit sphere (if ||x||_2 > 0) +

    +
    + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/gd_opt/minimze.html b/doc/html/math_toolkit/gd_opt/minimze.html new file mode 100644 index 000000000..6165f4d2b --- /dev/null +++ b/doc/html/math_toolkit/gd_opt/minimze.html @@ -0,0 +1,43 @@ + + + +minimize + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    + + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/gd_opt/nesterov.html b/doc/html/math_toolkit/gd_opt/nesterov.html new file mode 100644 index 000000000..8152ed5d4 --- /dev/null +++ b/doc/html/math_toolkit/gd_opt/nesterov.html @@ -0,0 +1,393 @@ + + + +Nesterov Accelerated Gradient Descent + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    + +
    + + Synopsis +
    +
    #include <boost/math/optimization/nesterov.hpp>
    +
    +namespace boost {
    +namespace math {
    +namespace optimization {
    +
    +namespace rdiff = boost::math::differentiation::reverse_mode;
    +
    +/**
    + * @brief The nesterov_accelerated_gradient class
    + *
    + * https://jlmelville.github.io/mize/nesterov.html
    + */
    +template<typename ArgumentContainer,
    +         typename RealType,
    +         class Objective,
    +         class InitializationPolicy,
    +         class ObjectiveEvalPolicy,
    +         class GradEvalPolicy>
    +class nesterov_accelerated_gradient
    +  : public abstract_optimizer<
    +      ArgumentContainer,
    +      RealType,
    +      Objective,
    +      InitializationPolicy,
    +      ObjectiveEvalPolicy,
    +      GradEvalPolicy,
    +      nesterov_update_policy<RealType>,
    +      nesterov_accelerated_gradient<ArgumentContainer,
    +                                    RealType,
    +                                    Objective,
    +                                    InitializationPolicy,
    +                                    ObjectiveEvalPolicy,
    +                                    GradEvalPolicy>>
    +{
    +public:
    +  nesterov_accelerated_gradient(Objective&& objective,
    +                                ArgumentContainer& x,
    +                                InitializationPolicy&& ip,
    +                                ObjectiveEvalPolicy&& oep,
    +                                GradEvalPolicy&& gep,
    +                                nesterov_update_policy<RealType>&& up);
    +  void step();
    +};
    +
    +/* Convenience overloads  */
    +/* make nesterov accelerated gradient descent by providing
    + ** objective function
    + ** variables to optimize over
    + ** Optionally
    + *  - lr: learning rate / step size (typical: 1e-4 .. 1e-1 depending on scaling)
    + *  - mu: momentum coefficient in [0, 1) (typical: 0.8 .. 0.99)
    + */
    +
    +template<class Objective, typename ArgumentContainer, typename RealType>
    +auto make_nag(Objective&& obj,
    +              ArgumentContainer& x,
    +              RealType lr = RealType{ 0.01 },
    +              RealType mu = RealType{ 0.95 });
    +
    +/* provide initialization policy
    + * lr, and mu no longer optional
    + */
    +template<class Objective,
    +         typename ArgumentContainer,
    +         typename RealType,
    +         class InitializationPolicy>
    +auto make_nag(Objective&& obj,
    +         ArgumentContainer& x,
    +         RealType lr,
    +         RealType mu,
    +         InitializationPolicy&& ip);
    +
    +/* provide
    + * initialization policy
    + * objective evaluation policy
    + * gradient evaluation policy
    + */
    +template<typename ArgumentContainer,
    +         typename RealType,
    +         class Objective,
    +         class InitializationPolicy,
    +         class ObjectiveEvalPolicy,
    +         class GradEvalPolicy>
    +auto make_nag(Objective&& obj,
    +         ArgumentContainer& x,
    +         RealType lr,
    +         RealType mu,
    +         InitializationPolicy&& ip,
    +         ObjectiveEvalPolicy&& oep,
    +         GradEvalPolicy&& gep);
    +
    +} // namespace optimization
    +} // namespace math
    +} // namespace boost
    +
    +

    + Nesterov accelerated gradient (NAG) is a first-order optimizer that augments + gradient descent with a momentum term and evaluates the gradient at a "lookahead" + point. In practice this often improves convergence speed compared to vanilla + gradient descent, especially in narrow valleys and ill-conditioned problems. +

    +
    + + Algorithm +
    +

    + NAG maintains a "velocity" vector v (same shape as x). At iteration + k it performs: +

    +
    v = mu * v - lr * g;
    +x += -mu * v_prev + (1 + mu) *v
    +
    +

    + where: +

    +

    + lr is the learning rate / step size +

    +

    + mu is the momentum coefficient (typically close to 1) +

    +

    + Setting mu = 0 reduces NAG to standard gradient descent. +

    +
    + + Parameters +
    +
      +
    • + Objective&& + obj : objective function to + minimize. +
    • +
    • + ArgumentContainer& + x : variables to optimize over. + Updated in place. +
    • +
    • + RealType lr + : learning rate. Larger values take larger steps (faster but potentially + unstable). Smaller values are more stable but converge more slowly. +
    • +
    • + RealType mu + : momentum coefficient in [0,1). Higher values, e.g. 0.9 to 0.99, typically + accelerate convergence but may require a smaller lr +
    • +
    • + InitializationPolicy&& ip + : Initialization policy for optimizer state and variables. Users may + supply a custom initialization policy to control how the argument container + and any AD-specific runtime state : i.e. reverse-mode tape attachment/reset + are initialized. By default, the optimizer uses the same initialization + as gradient descent, taking the user provided initial values in x and + initializing the internal momentum/velocity state to zero. Custom initialization + policies are useful for randomized starts, non rvar AD types, or when + gradients are supplied externally. Check the docs for Reverse Mode autodiff + policies for initialization policy structure to write custom policies. +
    • +
    • + ObjectiveEvalPolicy&& + oep : objective evaluation + policy. By default reverse_mode_function_eval_policy<RealType> +
    • +
    • + GradEvalPolicy&& + gep : gradient evaluation policy. + By default reverse_mode_gradient_evaluation_policy<RealType> +
    • +
    +
    + + Notes +
    +
      +
    • + NAG uses the same policy-based design as gradient descent: initialization, + objective evaluation, and gradient evaluation can be customized independently. +
    • +
    • + When using reverse-mode AD rvar, + the objective should be written in terms of AD variables so gradients + can be obtained automatically by the default gradient evaluation policy. +
    • +
    • + Typical tuning: start with mu + = 0.9 + or 0.95; if the objective + oscillates or diverges, reduce lr + (or slightly reduce mu). +
    • +
    +
    + + Example + : Thomson Sphere +
    +
    #include <boost/math/differentiation/autodiff_reverse.hpp>
    +#include <boost/math/optimization/gradient_descent.hpp>
    +#include <boost/math/optimization/minimizer.hpp>
    +#include <cmath>
    +#include <fstream>
    +#include <iostream>
    +#include <random>
    +#include <string>
    +namespace rdiff = boost::math::differentiation::reverse_mode;
    +namespace bopt  = boost::math::optimization;
    +double random_double(double min = 0.0, double max = 1.0)
    +{
    +    static thread_local std::mt19937       rng{std::random_device{}()};
    +    std::uniform_real_distribution<double> dist(min, max);
    +    return dist(rng);
    +}
    +
    +template<typename S>
    +struct vec3
    +{
    +    /**
    +     * @brief R^3 coordinates of particle on Thomson Sphere
    +     */
    +    S x, y, z;
    +};
    +
    +template<class S>
    +static inline vec3<S> sph_to_xyz(const S& theta, const S& phi)
    +{
    +    /**
    +     * convenience overload to convert from [theta,phi] -> x, y, z
    +     */
    +    return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)};
    +}
    +
    +template<typename T>
    +T thomson_energy(std::vector<T>& r)
    +{
    +    /* inverse square law
    +     */
    +    const size_t N    = r.size() / 2;
    +    const T      tiny = T(1e-12);
    +
    +    T E = 0;
    +    for (size_t i = 0; i < N; ++i) {
    +        const T& theta_i = r[2 * i + 0];
    +        const T& phi_i   = r[2 * i + 1];
    +        auto     ri      = sph_to_xyz(theta_i, phi_i);
    +
    +        for (size_t j = i + 1; j < N; ++j) {
    +            const T& theta_j = r[2 * j + 0];
    +            const T& phi_j   = r[2 * j + 1];
    +            auto     rj      = sph_to_xyz(theta_j, phi_j);
    +
    +            T dx = ri.x - rj.x;
    +            T dy = ri.y - rj.y;
    +            T dz = ri.z - rj.z;
    +
    +            T d2 = dx * dx + dy * dy + dz * dz + tiny;
    +            E += 1.0 / sqrt(d2);
    +        }
    +    }
    +    return E;
    +}
    +
    +template<class T>
    +std::vector<rdiff::rvar<T, 1>> init_theta_phi_uniform(size_t N, unsigned seed = 12345)
    +{
    +    const T pi = T(3.1415926535897932384626433832795);
    +
    +    std::mt19937                      rng(seed);
    +    std::uniform_real_distribution<T> unif01(T(0), T(1));
    +    std::uniform_real_distribution<T> unifm11(T(-1), T(1));
    +
    +    std::vector<rdiff::rvar<T, 1>> u;
    +    u.reserve(2 * N);
    +
    +    for (size_t i = 0; i < N; ++i) {
    +        T z     = unifm11(rng);
    +        T phi   = (T(2) * pi) * unif01(rng) - pi;
    +        T theta = std::acos(z);
    +
    +        u.emplace_back(theta);
    +        u.emplace_back(phi);
    +    }
    +    return u;
    +}
    +
    +int main(int argc, char* argv[])
    +{
    +
    +    if (argc != 2) {
    +        std::cerr << "Usage: " << argv[0] << " <N>\n";
    +        return 1;
    +    }
    +
    +    const int    N      = std::stoi(argv[1]);
    +    const double lr     = 1e-3;
    +    const double mu 	= 0.95;
    +    auto u_ad = init_theta_phi_uniform<double>(N);
    +
    +    auto nesterov_opt = bopt::make_nag(&thomson_energy<rdiff::rvar<double, 1>>, u_ad, lr, mu);
    +
    +    // filenames
    +    std::string pos_filename    = "thomson_" + std::to_string(N) + ".csv";
    +    std::string energy_filename = "nesterov_energy_" + std::to_string(N) + ".csv";
    +
    +    std::ofstream pos_out(pos_filename);
    +    std::ofstream energy_out(energy_filename);
    +
    +    energy_out << "step,energy\n";
    +
    +    auto result = minimize(nesterov_opt);
    +    for (int pi = 0; pi < N; ++pi) {
    +        double theta = u_ad[2 * pi + 0].item();
    +        double phi   = u_ad[2 * pi + 1].item();
    +        auto   r     = sph_to_xyz(theta, phi);
    +        pos_out << pi << "," << r.x << "," << r.y << "," << r.z << "\n";
    +    }
    +    auto E = nesterov_opt.objective_value();
    +    int i = 0;
    +    for(auto& obj_hist : result.objective_history)
    +    {
    +        energy_out << i << "," << obj_hist << "\n";
    +        ++i;
    +    }
    +    energy_out << "," << E << "\n";
    +
    +    pos_out.close();
    +    energy_out.close();
    +
    +    return 0;
    +}
    +
    +

    + The nesterov version of this problem converges much faster than regular gradient + descent, in only 4663 iterations + with default parameters, vs the 93799 + iterations required by gradient descent. +

    +

    + +

    +
    + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/gd_opt/policies.html b/doc/html/math_toolkit/gd_opt/policies.html new file mode 100644 index 000000000..df2a87cfb --- /dev/null +++ b/doc/html/math_toolkit/gd_opt/policies.html @@ -0,0 +1,255 @@ + + + +Reverse Mode autodiff policies + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    + +

    + This header provides default policy implementations for using the gradient-based + optimizers with boost::math::differentiation::reverse_mode::rvar These policies handle: +

    +
      +
    • + preparing the reverse-mode tape before evaluating an objective, +
    • +
    • + extracting gradients from rvar arguments after backpropagation, +
    • +
    • + initializing rvar containers + and establishing tape checkpoints. +
    • +
    +
    + + Synopsis +
    +
    #include <boost/math/optimization/detail/rdiff_optimization_policies>
    +
    +namespace boost {
    +namespace math {
    +namespace optimization {
    +
    +namespace rdiff = boost::math::differentiation::reverse_mode;
    +
    +/**
    + * @brief> function evaluation policy for reverse mode autodiff
    + * @arg objective> objective function to evaluate
    + * @arg x> argument list
    + */
    +template<typename RealType>
    +struct reverse_mode_function_eval_policy
    +{
    +  template<typename Objective, class ArgumentContainer>
    +  rdiff::rvar<RealType, 1> operator()(Objective&& objective,
    +                                      ArgumentContainer& x);
    +};
    +
    +/**
    + * @brief> gradient evaluation policy
    + * @arg obj_f> objective
    + * @arg x> argument list
    + * @arg f_eval_olicy> funciton evaluation policy. These need to be
    + *                    done in tandem
    + * @arg obj_v> reference to variable inside gradient class
    + */
    +template<typename RealType>
    +struct reverse_mode_gradient_evaluation_policy
    +{
    +  template<class Objective,
    +           class ArgumentContainer,
    +           class FunctionEvaluationPolicy>
    +  void operator()(Objective&& obj_f,
    +                  ArgumentContainer& x,
    +                  FunctionEvaluationPolicy&& f_eval_pol,
    +                  RealType& obj_v,
    +                  std::vector<RealType>& g)
    +};
    + /*
    + * init policies
    + */
    +
    +/* default rvar policy */
    +template<typename RealType>
    +struct tape_initializer_rvar
    +{
    +    template<class ArgumentContainer>
    +    void operator()(ArgumentContainer& x) const noexcept;
    +};
    +
    +/* random uniform */
    +template<typename RealType>
    +struct random_uniform_initializer_rvar
    +{
    +  RealType low_, high_;
    +  size_t seed_;
    +  random_uniform_initializer_rvar(RealType low = 0,
    +                                  RealType high = 1,
    +                                  size_t seed = std::random_device{}());
    +
    +  template<class ArgumentContainer>
    +  void operator()(ArgumentContainer& x) const;
    +};
    +
    +/* constant initializer */
    +template<typename RealType>
    +struct costant_initializer_rvar
    +{
    +  RealType constant;
    +  explicit costant_initializer_rvar(RealType v = 0);
    +
    +  template<class ArgumentContainer>
    +  void operator()(ArgumentContainer& x) const;
    +};
    +} // namespace optimization
    +} // namespace math
    +} // namespace boost
    +
    +
    + + Function + evaluation policies +
    +

    + A function evaluation policy defines how an objective is evaluated at the + current parameters, and is responsible for any AD bookkeeping required before + the call. +

    +
    + + reverse_mode_function_eval_policy +
    +
    template<typename RealType> struct reverse_mode_function_eval_policy { template<typename Objective, class ArgumentContainer> rdiff::rvar<RealType, 1> operator()(Objective&& objective, ArgumentContainer& x); };
    +
    +

    + This policy evaluates the objective objective(x) using reverse-mode AD and + ensures the active tape is in a valid state before evaluation: +

    +

    + ArgumentContainer must contain rdiff::rvar<RealType,1> values. +

    +
    + + Gradient + evaluation policies +
    +

    + A gradient evaluation policy defines how gradients are computed and extracted + into an ordinary numeric container. +

    +
    + + reverse_mode_gradient_evaluation_policy +
    +
    template<typename RealType> struct reverse_mode_gradient_evaluation_policy { template<class Objective, class ArgumentContainer, class FunctionEvaluationPolicy> void operator()(Objective&& obj_f, ArgumentContainer& x, FunctionEvaluationPolicy&& f_eval_pol, RealType& obj_v, std::vector<RealType>& g); };
    +
    +

    + This policy computes the objective value and gradient using reverse-mode + autodiff +

    +
    + + Initialization + policies +
    +

    + Initialization policies prepare the argument container and the reverse-mode + tape for optimization. They establish tape checkpoints that are later used + by function/gradient evaluation policies. +

    +
    + + tape_initializer_rvar +
    +
    template<typename RealType> struct tape_initializer_rvar { template<class ArgumentContainer> void operator()(ArgumentContainer& x) const noexcept; };
    +
    +

    + This policy: * statically requires ArgumentContainer::value_type + to be rdiff::rvar<RealType,1>, * adds + a checkpoint to the active reverse-mode tape via tape.add_checkpoint() +

    +
    + + random_uniform_initializer_rvar +
    +
    template<typename RealType>
    +struct random_uniform_initializer_rvar
    +{
    +random_uniform_initializer_rvar(RealType low = 0,
    +RealType high = 1,
    +size_t seed = std::random_device{}());
    +
    +template<class ArgumentContainer>
    +void operator()(ArgumentContainer& x) const;
    +};
    +
    +

    + This policy initializes each element of x independently as: +

    +
    x[i] = rdiff::rvar<RealType,1>(U(low, high))
    +
    +

    + using +

    +
    boost::random::mt19937
    +
    +

    + and +

    +
    boost::random::uniform_real_distribution<RealType>
    +
    +
    + + costant_initializer_rvar +
    +
    template<typename RealType>
    +struct costant_initializer_rvar
    +{
    +explicit costant_initializer_rvar(RealType v = 0);
    +
    +template<class ArgumentContainer>
    +void operator()(ArgumentContainer& x) const;
    +};
    +
    +

    + This policy initializes each element of x to the constant value v +

    +
    + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/gd_opt/policies/init_pol.html b/doc/html/math_toolkit/gd_opt/policies/init_pol.html new file mode 100644 index 000000000..864fa860c --- /dev/null +++ b/doc/html/math_toolkit/gd_opt/policies/init_pol.html @@ -0,0 +1,44 @@ + + + +Initialization Policies + + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    + + +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/math_toolkit/getting_best.html b/doc/html/math_toolkit/getting_best.html index 01d1940e0..d2b2c9ce0 100644 --- a/doc/html/math_toolkit/getting_best.html +++ b/doc/html/math_toolkit/getting_best.html @@ -1,9 +1,9 @@ - + Getting the Best Performance from this Library: Compiler and Compiler Options - + @@ -142,7 +142,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/gpu.html b/doc/html/math_toolkit/gpu.html index 78fdfc9a5..4416b6646 100644 --- a/doc/html/math_toolkit/gpu.html +++ b/doc/html/math_toolkit/gpu.html @@ -1,6 +1,6 @@ - + Support for GPU programming in Boost.Math @@ -108,7 +108,7 @@ void test_beta_dist_kernel(const double* in, double* out, int num_elements) Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/greatest_typdefs.html b/doc/html/math_toolkit/greatest_typdefs.html index 023cf911f..fe96da362 100644 --- a/doc/html/math_toolkit/greatest_typdefs.html +++ b/doc/html/math_toolkit/greatest_typdefs.html @@ -1,9 +1,9 @@ - + Greatest-width floating-point typedef - + @@ -82,7 +82,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hankel.html b/doc/html/math_toolkit/hankel.html index 9f8a0a812..91f903a07 100644 --- a/doc/html/math_toolkit/hankel.html +++ b/doc/html/math_toolkit/hankel.html @@ -1,9 +1,9 @@ - + Hankel Functions - + @@ -36,7 +36,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hankel/cyl_hankel.html b/doc/html/math_toolkit/hankel/cyl_hankel.html index d36754bdc..6b67f4c8f 100644 --- a/doc/html/math_toolkit/hankel/cyl_hankel.html +++ b/doc/html/math_toolkit/hankel/cyl_hankel.html @@ -1,9 +1,9 @@ - + Cyclic Hankel Functions - + @@ -31,17 +31,35 @@ Synopsis -
    template <class T1, class T2>
    -std::complex<calculated-result-type> cyl_hankel_1(T1 v, T2 x);
    -
    -template <class T1, class T2, class Policy>
    -std::complex<calculated-result-type> cyl_hankel_1(T1 v, T2 x, const Policy&);
    +
    #if !defined(__CUDACC__) && !defined(__CUDACC_RTC__)
     
     template <class T1, class T2>
    -std::complex<calculated-result-type> cyl_hankel_2(T1 v, T2 x);
    +BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> cyl_hankel_1(T1 v, T2 x);
     
     template <class T1, class T2, class Policy>
    -std::complex<calculated-result-type> cyl_hankel_2(T1 v, T2 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> cyl_hankel_1(T1 v, T2 x, const Policy&);
    +
    +template <class T1, class T2>
    +BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> cyl_hankel_2(T1 v, T2 x);
    +
    +template <class T1, class T2, class Policy>
    +BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> cyl_hankel_2(T1 v, T2 x, const Policy&);
    +
    +#else // When using cuda we use namespace cuda::std:: instead of std::
    +
    +template <class T1, class T2>
    +BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> cyl_hankel_1(T1 v, T2 x);
    +
    +template <class T1, class T2, class Policy>
    +BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> cyl_hankel_1(T1 v, T2 x, const Policy&);
    +
    +template <class T1, class T2>
    +BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> cyl_hankel_2(T1 v, T2 x);
    +
    +template <class T1, class T2, class Policy>
    +BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> cyl_hankel_2(T1 v, T2 x, const Policy&);
    +
    +#endif
     
    @@ -162,7 +180,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hankel/sph_hankel.html b/doc/html/math_toolkit/hankel/sph_hankel.html index 8da5a9f78..e0c2d922e 100644 --- a/doc/html/math_toolkit/hankel/sph_hankel.html +++ b/doc/html/math_toolkit/hankel/sph_hankel.html @@ -1,9 +1,9 @@ - + Spherical Hankel Functions - + @@ -31,17 +31,35 @@ Synopsis
    -
    template <class T1, class T2>
    -std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x);
    -
    -template <class T1, class T2, class Policy>
    -std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x, const Policy&);
    +
    #if !defined(__CUDACC__) && !defined(__CUDACC_RTC__)
     
     template <class T1, class T2>
    -std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x);
    +BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x);
     
     template <class T1, class T2, class Policy>
    -std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x, const Policy&);
    +
    +template <class T1, class T2>
    +BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x);
    +
    +template <class T1, class T2, class Policy>
    +BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x, const Policy&);
    +
    +#else // When using cuda we use namespace cuda::std:: instead of std::
    +
    +template <class T1, class T2>
    +BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x);
    +
    +template <class T1, class T2, class Policy>
    +BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x, const Policy&);
    +
    +template <class T1, class T2>
    +BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x);
    +
    +template <class T1, class T2, class Policy>
    +BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x, const Policy&);
    +
    +#endif
     
    @@ -112,7 +130,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/high_precision.html b/doc/html/math_toolkit/high_precision.html index 91922e110..bb990c941 100644 --- a/doc/html/math_toolkit/high_precision.html +++ b/doc/html/math_toolkit/high_precision.html @@ -1,9 +1,9 @@ - + Using Boost.Math with High-Precision Floating-Point Libraries - + @@ -101,7 +101,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/high_precision/e_float.html b/doc/html/math_toolkit/high_precision/e_float.html index dded56439..1704d20cf 100644 --- a/doc/html/math_toolkit/high_precision/e_float.html +++ b/doc/html/math_toolkit/high_precision/e_float.html @@ -1,9 +1,9 @@ - + Using e_float Library - + @@ -47,7 +47,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/high_precision/float128.html b/doc/html/math_toolkit/high_precision/float128.html index fd51196dc..d115614d4 100644 --- a/doc/html/math_toolkit/high_precision/float128.html +++ b/doc/html/math_toolkit/high_precision/float128.html @@ -1,9 +1,9 @@ - + Using with GCC's __float128 datatype - + @@ -52,7 +52,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/high_precision/use_mpfr.html b/doc/html/math_toolkit/high_precision/use_mpfr.html index ebf1d47b9..63e4a7dfe 100644 --- a/doc/html/math_toolkit/high_precision/use_mpfr.html +++ b/doc/html/math_toolkit/high_precision/use_mpfr.html @@ -1,9 +1,9 @@ - + Using With MPFR or GMP - High-Precision Floating-Point Library - + @@ -95,7 +95,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/high_precision/use_multiprecision.html b/doc/html/math_toolkit/high_precision/use_multiprecision.html index 8b2be3fb1..4bca9e637 100644 --- a/doc/html/math_toolkit/high_precision/use_multiprecision.html +++ b/doc/html/math_toolkit/high_precision/use_multiprecision.html @@ -1,9 +1,9 @@ - + Using Boost.Multiprecision - + @@ -285,7 +285,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/high_precision/use_ntl.html b/doc/html/math_toolkit/high_precision/use_ntl.html index 7c38a23eb..822fcb525 100644 --- a/doc/html/math_toolkit/high_precision/use_ntl.html +++ b/doc/html/math_toolkit/high_precision/use_ntl.html @@ -1,9 +1,9 @@ - + Using NTL Library - + @@ -60,7 +60,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/high_precision/using_test.html b/doc/html/math_toolkit/high_precision/using_test.html index f06fc876e..61567c08d 100644 --- a/doc/html/math_toolkit/high_precision/using_test.html +++ b/doc/html/math_toolkit/high_precision/using_test.html @@ -1,9 +1,9 @@ - + Using without expression templates for Boost.Test and others - + @@ -130,7 +130,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/high_precision/why_high_precision.html b/doc/html/math_toolkit/high_precision/why_high_precision.html index 3fe5c901c..73c66541e 100644 --- a/doc/html/math_toolkit/high_precision/why_high_precision.html +++ b/doc/html/math_toolkit/high_precision/why_high_precision.html @@ -1,9 +1,9 @@ - + Why use a high-precision library rather than built-in floating-point types? - + @@ -126,7 +126,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hints.html b/doc/html/math_toolkit/hints.html index 76b95114d..c002de82a 100644 --- a/doc/html/math_toolkit/hints.html +++ b/doc/html/math_toolkit/hints.html @@ -1,9 +1,9 @@ - + Other Hints and tips - + @@ -121,7 +121,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/history1.html b/doc/html/math_toolkit/history1.html index 713350e8e..5eba9e040 100644 --- a/doc/html/math_toolkit/history1.html +++ b/doc/html/math_toolkit/history1.html @@ -1,9 +1,9 @@ - + History and What's New - + @@ -1866,7 +1866,7 @@ by switching to use the Students t distribution (or Normal distribution Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/history2.html b/doc/html/math_toolkit/history2.html index e91c82373..d29d142e0 100644 --- a/doc/html/math_toolkit/history2.html +++ b/doc/html/math_toolkit/history2.html @@ -1,9 +1,9 @@ - + History and What's New - + @@ -1866,7 +1866,7 @@ by switching to use the Students t distribution (or Normal distribution Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hypergeometric.html b/doc/html/math_toolkit/hypergeometric.html index 74e8a2b75..032263b14 100644 --- a/doc/html/math_toolkit/hypergeometric.html +++ b/doc/html/math_toolkit/hypergeometric.html @@ -1,9 +1,9 @@ - + Hypergeometric Functions - + @@ -46,7 +46,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hypergeometric/hypergeometric_0f1.html b/doc/html/math_toolkit/hypergeometric/hypergeometric_0f1.html index 432dfa0fd..4f247b97e 100644 --- a/doc/html/math_toolkit/hypergeometric/hypergeometric_0f1.html +++ b/doc/html/math_toolkit/hypergeometric/hypergeometric_0f1.html @@ -1,9 +1,9 @@ - + Hypergeometric 0F1 - + @@ -98,7 +98,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hypergeometric/hypergeometric_1f0.html b/doc/html/math_toolkit/hypergeometric/hypergeometric_1f0.html index 26c5761b1..b1f0bb6f6 100644 --- a/doc/html/math_toolkit/hypergeometric/hypergeometric_1f0.html +++ b/doc/html/math_toolkit/hypergeometric/hypergeometric_1f0.html @@ -1,9 +1,9 @@ - + Hypergeometric 1F0 - + @@ -86,7 +86,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hypergeometric/hypergeometric_1f1.html b/doc/html/math_toolkit/hypergeometric/hypergeometric_1f1.html index fd8bc8ccc..157d633b6 100644 --- a/doc/html/math_toolkit/hypergeometric/hypergeometric_1f1.html +++ b/doc/html/math_toolkit/hypergeometric/hypergeometric_1f1.html @@ -1,9 +1,9 @@ - + Hypergeometric 1F1 - + @@ -777,7 +777,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hypergeometric/hypergeometric_2f0.html b/doc/html/math_toolkit/hypergeometric/hypergeometric_2f0.html index ba2c4a9c1..6adff6831 100644 --- a/doc/html/math_toolkit/hypergeometric/hypergeometric_2f0.html +++ b/doc/html/math_toolkit/hypergeometric/hypergeometric_2f0.html @@ -1,9 +1,9 @@ - + Hypergeometric 2F0 - + @@ -107,7 +107,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hypergeometric/hypergeometric_pfq.html b/doc/html/math_toolkit/hypergeometric/hypergeometric_pfq.html index 2fc2fdc24..fa7ca51a2 100644 --- a/doc/html/math_toolkit/hypergeometric/hypergeometric_pfq.html +++ b/doc/html/math_toolkit/hypergeometric/hypergeometric_pfq.html @@ -1,9 +1,9 @@ - + Hypergeometric pFq - + @@ -144,7 +144,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/hypergeometric/hypergeometric_refs.html b/doc/html/math_toolkit/hypergeometric/hypergeometric_refs.html index 7df5c309a..c31d2631b 100644 --- a/doc/html/math_toolkit/hypergeometric/hypergeometric_refs.html +++ b/doc/html/math_toolkit/hypergeometric/hypergeometric_refs.html @@ -1,9 +1,9 @@ - + Hypergeometric References - + @@ -96,7 +96,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals.html b/doc/html/math_toolkit/internals.html index e49ea9df2..866925989 100644 --- a/doc/html/math_toolkit/internals.html +++ b/doc/html/math_toolkit/internals.html @@ -1,9 +1,9 @@ - + Internal tools - + @@ -54,7 +54,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/agm.html b/doc/html/math_toolkit/internals/agm.html index eb08be203..0743bef1d 100644 --- a/doc/html/math_toolkit/internals/agm.html +++ b/doc/html/math_toolkit/internals/agm.html @@ -1,9 +1,9 @@ - + Arithmetic-Geometric Mean - + @@ -121,7 +121,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/centered_continued_fraction.html b/doc/html/math_toolkit/internals/centered_continued_fraction.html index 036a56b81..5e8494c81 100644 --- a/doc/html/math_toolkit/internals/centered_continued_fraction.html +++ b/doc/html/math_toolkit/internals/centered_continued_fraction.html @@ -1,9 +1,9 @@ - + Centered Continued Fractions - + @@ -92,7 +92,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/cf.html b/doc/html/math_toolkit/internals/cf.html index 38d965590..648be0dcc 100644 --- a/doc/html/math_toolkit/internals/cf.html +++ b/doc/html/math_toolkit/internals/cf.html @@ -1,9 +1,9 @@ - + Continued Fraction Evaluation - + @@ -372,7 +372,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/cohen_acceleration.html b/doc/html/math_toolkit/internals/cohen_acceleration.html index df9e28f35..aa558d907 100644 --- a/doc/html/math_toolkit/internals/cohen_acceleration.html +++ b/doc/html/math_toolkit/internals/cohen_acceleration.html @@ -1,9 +1,9 @@ - + Cohen Acceleration - + @@ -156,7 +156,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/color_maps.html b/doc/html/math_toolkit/internals/color_maps.html index 240ba4277..7135476b9 100644 --- a/doc/html/math_toolkit/internals/color_maps.html +++ b/doc/html/math_toolkit/internals/color_maps.html @@ -1,9 +1,9 @@ - + Color Maps - + @@ -161,7 +161,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/engel_expansion.html b/doc/html/math_toolkit/internals/engel_expansion.html index cf74a40d5..3ad6b3dbe 100644 --- a/doc/html/math_toolkit/internals/engel_expansion.html +++ b/doc/html/math_toolkit/internals/engel_expansion.html @@ -1,9 +1,9 @@ - + Engel Expansion - + @@ -70,7 +70,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/error_test.html b/doc/html/math_toolkit/internals/error_test.html index b622ec1f8..b7951f74b 100644 --- a/doc/html/math_toolkit/internals/error_test.html +++ b/doc/html/math_toolkit/internals/error_test.html @@ -1,9 +1,9 @@ - + Relative Error and Testing - + @@ -225,7 +225,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/luroth_expansion.html b/doc/html/math_toolkit/internals/luroth_expansion.html index 8d88cb957..6ee255342 100644 --- a/doc/html/math_toolkit/internals/luroth_expansion.html +++ b/doc/html/math_toolkit/internals/luroth_expansion.html @@ -1,9 +1,9 @@ - + Luroth Expansions - + @@ -102,7 +102,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/minimax.html b/doc/html/math_toolkit/internals/minimax.html index 949ea2ef8..e7d75b8b7 100644 --- a/doc/html/math_toolkit/internals/minimax.html +++ b/doc/html/math_toolkit/internals/minimax.html @@ -1,9 +1,9 @@ - + Minimax Approximations and the Remez Algorithm - + @@ -270,7 +270,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/recurrence.html b/doc/html/math_toolkit/internals/recurrence.html index 2cbde0402..7911c04d6 100644 --- a/doc/html/math_toolkit/internals/recurrence.html +++ b/doc/html/math_toolkit/internals/recurrence.html @@ -1,9 +1,9 @@ - + Tools For 3-Term Recurrence Relations - + @@ -288,7 +288,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/series_evaluation.html b/doc/html/math_toolkit/internals/series_evaluation.html index 24f0196be..ebc2069a9 100644 --- a/doc/html/math_toolkit/internals/series_evaluation.html +++ b/doc/html/math_toolkit/internals/series_evaluation.html @@ -1,9 +1,9 @@ - + Series Evaluation - + @@ -239,7 +239,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/simple_continued_fraction.html b/doc/html/math_toolkit/internals/simple_continued_fraction.html index af6834515..82cbbe9e0 100644 --- a/doc/html/math_toolkit/internals/simple_continued_fraction.html +++ b/doc/html/math_toolkit/internals/simple_continued_fraction.html @@ -1,9 +1,9 @@ - + Simple Continued Fractions - + @@ -107,7 +107,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/test_data.html b/doc/html/math_toolkit/internals/test_data.html index 5b893620b..c747b3c39 100644 --- a/doc/html/math_toolkit/internals/test_data.html +++ b/doc/html/math_toolkit/internals/test_data.html @@ -1,9 +1,9 @@ - + Graphing, Profiling, and Generating Test Data for Special Functions - + @@ -550,7 +550,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals/tuples.html b/doc/html/math_toolkit/internals/tuples.html index ac3578ee0..5a92e9753 100644 --- a/doc/html/math_toolkit/internals/tuples.html +++ b/doc/html/math_toolkit/internals/tuples.html @@ -1,9 +1,9 @@ - + Tuples - + @@ -71,7 +71,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/internals_overview.html b/doc/html/math_toolkit/internals_overview.html index 2ab475116..89f4d95b9 100644 --- a/doc/html/math_toolkit/internals_overview.html +++ b/doc/html/math_toolkit/internals_overview.html @@ -1,9 +1,9 @@ - + Overview - + @@ -47,7 +47,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/interp.html b/doc/html/math_toolkit/interp.html index 4b38b830e..d175c81cd 100644 --- a/doc/html/math_toolkit/interp.html +++ b/doc/html/math_toolkit/interp.html @@ -1,9 +1,9 @@ - + Interpreting these Results - + @@ -60,7 +60,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/intro_pol_overview.html b/doc/html/math_toolkit/intro_pol_overview.html index fa996551f..643825b2f 100644 --- a/doc/html/math_toolkit/intro_pol_overview.html +++ b/doc/html/math_toolkit/intro_pol_overview.html @@ -1,9 +1,9 @@ - + Policies - + @@ -104,7 +104,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/inv_hyper.html b/doc/html/math_toolkit/inv_hyper.html index ad9c144e0..4f594acd2 100644 --- a/doc/html/math_toolkit/inv_hyper.html +++ b/doc/html/math_toolkit/inv_hyper.html @@ -1,9 +1,9 @@ - + Inverse Hyperbolic Functions - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/inv_hyper/acosh.html b/doc/html/math_toolkit/inv_hyper/acosh.html index 3b6112fdb..460035c1f 100644 --- a/doc/html/math_toolkit/inv_hyper/acosh.html +++ b/doc/html/math_toolkit/inv_hyper/acosh.html @@ -1,9 +1,9 @@ - + acosh - + @@ -122,7 +122,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/inv_hyper/asinh.html b/doc/html/math_toolkit/inv_hyper/asinh.html index 3fa19efe8..2af4fe402 100644 --- a/doc/html/math_toolkit/inv_hyper/asinh.html +++ b/doc/html/math_toolkit/inv_hyper/asinh.html @@ -1,9 +1,9 @@ - + asinh - + @@ -117,7 +117,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/inv_hyper/atanh.html b/doc/html/math_toolkit/inv_hyper/atanh.html index 740dada61..68d8ce9c9 100644 --- a/doc/html/math_toolkit/inv_hyper/atanh.html +++ b/doc/html/math_toolkit/inv_hyper/atanh.html @@ -1,9 +1,9 @@ - + atanh - + @@ -126,7 +126,7 @@ denoting std + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/inv_hyper/inv_hyper_over.html b/doc/html/math_toolkit/inv_hyper/inv_hyper_over.html index 8811dde4f..41fdce2e3 100644 --- a/doc/html/math_toolkit/inv_hyper/inv_hyper_over.html +++ b/doc/html/math_toolkit/inv_hyper/inv_hyper_over.html @@ -1,9 +1,9 @@ - + Inverse Hyperbolic Functions Overview - + @@ -137,7 +137,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/issues.html b/doc/html/math_toolkit/issues.html index f2c62a3c6..f6501219f 100644 --- a/doc/html/math_toolkit/issues.html +++ b/doc/html/math_toolkit/issues.html @@ -1,9 +1,9 @@ - + Known Issues, and TODO List - + @@ -1193,7 +1193,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi.html b/doc/html/math_toolkit/jacobi.html index 24ce7b425..89c4cda56 100644 --- a/doc/html/math_toolkit/jacobi.html +++ b/doc/html/math_toolkit/jacobi.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Functions - + @@ -62,7 +62,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jac_over.html b/doc/html/math_toolkit/jacobi/jac_over.html index 29d0ad2ea..b42d118c3 100644 --- a/doc/html/math_toolkit/jacobi/jac_over.html +++ b/doc/html/math_toolkit/jacobi/jac_over.html @@ -1,9 +1,9 @@ - + Overview of the Jacobi Elliptic Functions - + @@ -124,7 +124,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_cd.html b/doc/html/math_toolkit/jacobi/jacobi_cd.html index f04b899f2..5075a7405 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_cd.html +++ b/doc/html/math_toolkit/jacobi/jacobi_cd.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function cd - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_cn.html b/doc/html/math_toolkit/jacobi/jacobi_cn.html index e65cbe29c..a039ad88d 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_cn.html +++ b/doc/html/math_toolkit/jacobi/jacobi_cn.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function cn - + @@ -69,7 +69,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_cs.html b/doc/html/math_toolkit/jacobi/jacobi_cs.html index b6d4500be..a7dead50f 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_cs.html +++ b/doc/html/math_toolkit/jacobi/jacobi_cs.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function cs - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_dc.html b/doc/html/math_toolkit/jacobi/jacobi_dc.html index a2add0ca3..37593bd1b 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_dc.html +++ b/doc/html/math_toolkit/jacobi/jacobi_dc.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function dc - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_dn.html b/doc/html/math_toolkit/jacobi/jacobi_dn.html index 8f62efd77..e0cb448d7 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_dn.html +++ b/doc/html/math_toolkit/jacobi/jacobi_dn.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function dn - + @@ -69,7 +69,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_ds.html b/doc/html/math_toolkit/jacobi/jacobi_ds.html index 322255d1b..4ea24eef5 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_ds.html +++ b/doc/html/math_toolkit/jacobi/jacobi_ds.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function ds - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_elliptic.html b/doc/html/math_toolkit/jacobi/jacobi_elliptic.html index 9a2c1faed..b7cec248f 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_elliptic.html +++ b/doc/html/math_toolkit/jacobi/jacobi_elliptic.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic SN, CN and DN - + @@ -759,7 +759,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_nc.html b/doc/html/math_toolkit/jacobi/jacobi_nc.html index 4410b42af..51a0808ae 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_nc.html +++ b/doc/html/math_toolkit/jacobi/jacobi_nc.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function nc - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_nd.html b/doc/html/math_toolkit/jacobi/jacobi_nd.html index ca9c4034c..0b180eb24 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_nd.html +++ b/doc/html/math_toolkit/jacobi/jacobi_nd.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function nd - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_ns.html b/doc/html/math_toolkit/jacobi/jacobi_ns.html index 627715fb1..5a2d64771 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_ns.html +++ b/doc/html/math_toolkit/jacobi/jacobi_ns.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function ns - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_sc.html b/doc/html/math_toolkit/jacobi/jacobi_sc.html index e4fd59464..5ed2db0bd 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_sc.html +++ b/doc/html/math_toolkit/jacobi/jacobi_sc.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function sc - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_sd.html b/doc/html/math_toolkit/jacobi/jacobi_sd.html index 787328015..c1185637f 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_sd.html +++ b/doc/html/math_toolkit/jacobi/jacobi_sd.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function sd - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi/jacobi_sn.html b/doc/html/math_toolkit/jacobi/jacobi_sn.html index b8f417be3..a3e6ca16f 100644 --- a/doc/html/math_toolkit/jacobi/jacobi_sn.html +++ b/doc/html/math_toolkit/jacobi/jacobi_sn.html @@ -1,9 +1,9 @@ - + Jacobi Elliptic Function sn - + @@ -69,7 +69,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi_theta.html b/doc/html/math_toolkit/jacobi_theta.html index a1cece63a..f5e4f060b 100644 --- a/doc/html/math_toolkit/jacobi_theta.html +++ b/doc/html/math_toolkit/jacobi_theta.html @@ -1,9 +1,9 @@ - + Jacobi Theta Functions - + @@ -44,7 +44,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi_theta/jacobi_theta1.html b/doc/html/math_toolkit/jacobi_theta/jacobi_theta1.html index 8043b6f25..a7c05f3d4 100644 --- a/doc/html/math_toolkit/jacobi_theta/jacobi_theta1.html +++ b/doc/html/math_toolkit/jacobi_theta/jacobi_theta1.html @@ -1,9 +1,9 @@ - + Jacobi Theta Function θ1 - + @@ -138,7 +138,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi_theta/jacobi_theta2.html b/doc/html/math_toolkit/jacobi_theta/jacobi_theta2.html index 5aae8ceeb..1259b161b 100644 --- a/doc/html/math_toolkit/jacobi_theta/jacobi_theta2.html +++ b/doc/html/math_toolkit/jacobi_theta/jacobi_theta2.html @@ -1,9 +1,9 @@ - + Jacobi Theta Function θ2 - + @@ -138,7 +138,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi_theta/jacobi_theta3.html b/doc/html/math_toolkit/jacobi_theta/jacobi_theta3.html index 1aaab7be9..d0e2788a2 100644 --- a/doc/html/math_toolkit/jacobi_theta/jacobi_theta3.html +++ b/doc/html/math_toolkit/jacobi_theta/jacobi_theta3.html @@ -1,9 +1,9 @@ - + Jacobi Theta Function θ3 - + @@ -155,7 +155,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi_theta/jacobi_theta4.html b/doc/html/math_toolkit/jacobi_theta/jacobi_theta4.html index fb99431da..8f09a8aac 100644 --- a/doc/html/math_toolkit/jacobi_theta/jacobi_theta4.html +++ b/doc/html/math_toolkit/jacobi_theta/jacobi_theta4.html @@ -1,9 +1,9 @@ - + Jacobi Theta Function θ4 - + @@ -155,7 +155,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jacobi_theta/jacobi_theta_overview.html b/doc/html/math_toolkit/jacobi_theta/jacobi_theta_overview.html index e1a560187..5915ee193 100644 --- a/doc/html/math_toolkit/jacobi_theta/jacobi_theta_overview.html +++ b/doc/html/math_toolkit/jacobi_theta/jacobi_theta_overview.html @@ -1,9 +1,9 @@ - + Overview of the Jacobi Theta Functions - + @@ -161,7 +161,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/jso.html b/doc/html/math_toolkit/jso.html index 8e0cc038c..6c21b843b 100644 --- a/doc/html/math_toolkit/jso.html +++ b/doc/html/math_toolkit/jso.html @@ -1,9 +1,9 @@ - + Algorithm jSO - + @@ -206,7 +206,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/lambert_w.html b/doc/html/math_toolkit/lambert_w.html index dba2238c6..0463f87d4 100644 --- a/doc/html/math_toolkit/lambert_w.html +++ b/doc/html/math_toolkit/lambert_w.html @@ -1,9 +1,9 @@ - + Lambert W function - + @@ -1913,7 +1913,7 @@ if (f(w) / f'
    (w + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/lanczos.html b/doc/html/math_toolkit/lanczos.html index 7d59785da..ff3388ce2 100644 --- a/doc/html/math_toolkit/lanczos.html +++ b/doc/html/math_toolkit/lanczos.html @@ -1,9 +1,9 @@ - + The Lanczos Approximation - + @@ -573,7 +573,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/linear_regression.html b/doc/html/math_toolkit/linear_regression.html index bed68e01c..6b5842c86 100644 --- a/doc/html/math_toolkit/linear_regression.html +++ b/doc/html/math_toolkit/linear_regression.html @@ -1,9 +1,9 @@ - + Linear Regression - + @@ -216,7 +216,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ljung_box.html b/doc/html/math_toolkit/ljung_box.html index 7d4040d0b..694719e50 100644 --- a/doc/html/math_toolkit/ljung_box.html +++ b/doc/html/math_toolkit/ljung_box.html @@ -1,9 +1,9 @@ - + The Ljung-Box Test - + @@ -119,7 +119,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/logistic.html b/doc/html/math_toolkit/logistic.html index 63c960f2e..69304efd8 100644 --- a/doc/html/math_toolkit/logistic.html +++ b/doc/html/math_toolkit/logistic.html @@ -1,6 +1,6 @@ - + Logistic Functions @@ -36,7 +36,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/logistic/logistic_sigmoid.html b/doc/html/math_toolkit/logistic/logistic_sigmoid.html index 4aaa91840..a1a04a30d 100644 --- a/doc/html/math_toolkit/logistic/logistic_sigmoid.html +++ b/doc/html/math_toolkit/logistic/logistic_sigmoid.html @@ -1,6 +1,6 @@ - + logistic_sigmoid @@ -58,7 +58,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/logistic/logit.html b/doc/html/math_toolkit/logistic/logit.html index 3a4551177..77d142574 100644 --- a/doc/html/math_toolkit/logistic/logit.html +++ b/doc/html/math_toolkit/logistic/logit.html @@ -1,6 +1,6 @@ - + logit @@ -57,7 +57,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/logs_and_tables.html b/doc/html/math_toolkit/logs_and_tables.html index 67878a8c7..93fc1904d 100644 --- a/doc/html/math_toolkit/logs_and_tables.html +++ b/doc/html/math_toolkit/logs_and_tables.html @@ -1,9 +1,9 @@ - + Error logs and tables - + @@ -38,7 +38,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/logs_and_tables/all_table.html b/doc/html/math_toolkit/logs_and_tables/all_table.html index fcd6fd1f8..aae861214 100644 --- a/doc/html/math_toolkit/logs_and_tables/all_table.html +++ b/doc/html/math_toolkit/logs_and_tables/all_table.html @@ -1,9 +1,9 @@ - + Tables of Error Rates for all Functions - + @@ -12051,7 +12051,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/logs_and_tables/logs.html b/doc/html/math_toolkit/logs_and_tables/logs.html index a7a768b86..fd17a7d3d 100644 --- a/doc/html/math_toolkit/logs_and_tables/logs.html +++ b/doc/html/math_toolkit/logs_and_tables/logs.html @@ -1,9 +1,9 @@ - + Error Logs For Error Rate Tables - + @@ -3144,7 +3144,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/macros.html b/doc/html/math_toolkit/macros.html index 20aa6a6de..d81b2c7a2 100644 --- a/doc/html/math_toolkit/macros.html +++ b/doc/html/math_toolkit/macros.html @@ -1,9 +1,9 @@ - + Floating-Point Constant Macros - + @@ -74,7 +74,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/main_faq.html b/doc/html/math_toolkit/main_faq.html index ba09069cf..a7af4bce6 100644 --- a/doc/html/math_toolkit/main_faq.html +++ b/doc/html/math_toolkit/main_faq.html @@ -1,9 +1,9 @@ - + Boost.Math Frequently Asked Questions (FAQs) - + @@ -102,10 +102,10 @@ Density Function, Quantile, Hazard Function, Cumulative Hazard Function, - mean, median, - mode, variance, - standard deviation, - skewness, kurtosis, kurtosis_excess, + __logcdf, __logpdf, mean, + median, mode, + variance, standard deviation, skewness, kurtosis, + kurtosis_excess, range and support.

    @@ -373,7 +373,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/main_intro.html b/doc/html/math_toolkit/main_intro.html index 6248b1712..294a4b3a7 100644 --- a/doc/html/math_toolkit/main_intro.html +++ b/doc/html/math_toolkit/main_intro.html @@ -1,9 +1,9 @@ - + About the Math Toolkit - + @@ -183,7 +183,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/main_tr1.html b/doc/html/math_toolkit/main_tr1.html index bdf7cb6bd..5b0bca7da 100644 --- a/doc/html/math_toolkit/main_tr1.html +++ b/doc/html/math_toolkit/main_tr1.html @@ -1,12 +1,12 @@ - + C99 and TR1 C Functions Overview - + - - + + @@ -603,7 +603,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/makima.html b/doc/html/math_toolkit/makima.html index 2c147bcc1..a808e6443 100644 --- a/doc/html/math_toolkit/makima.html +++ b/doc/html/math_toolkit/makima.html @@ -1,9 +1,9 @@ - + Modified Akima interpolation - + @@ -131,7 +131,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/mem_typedef.html b/doc/html/math_toolkit/mem_typedef.html index 417ef8678..97e7cc0c4 100644 --- a/doc/html/math_toolkit/mem_typedef.html +++ b/doc/html/math_toolkit/mem_typedef.html @@ -1,9 +1,9 @@ - + Quaternion Member Typedefs - + @@ -58,7 +58,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/minimum_typdefs.html b/doc/html/math_toolkit/minimum_typdefs.html index cfe2d97a3..ae9c80f98 100644 --- a/doc/html/math_toolkit/minimum_typdefs.html +++ b/doc/html/math_toolkit/minimum_typdefs.html @@ -1,9 +1,9 @@ - + Minimum-width floating-point typedefs - + @@ -48,7 +48,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/multiprecision.html b/doc/html/math_toolkit/multiprecision.html index 4a1598a13..5621a14c1 100644 --- a/doc/html/math_toolkit/multiprecision.html +++ b/doc/html/math_toolkit/multiprecision.html @@ -1,9 +1,9 @@ - + Cost of High-Precision Non-built-in Floating-point - + @@ -112,7 +112,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/naive_monte_carlo.html b/doc/html/math_toolkit/naive_monte_carlo.html index 4b1856b29..49ccb4517 100644 --- a/doc/html/math_toolkit/naive_monte_carlo.html +++ b/doc/html/math_toolkit/naive_monte_carlo.html @@ -1,9 +1,9 @@ - + Naive Monte Carlo Integration - + @@ -223,7 +223,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/namespaces.html b/doc/html/math_toolkit/namespaces.html index 000cdf2ca..b96ccf409 100644 --- a/doc/html/math_toolkit/namespaces.html +++ b/doc/html/math_toolkit/namespaces.html @@ -1,9 +1,9 @@ - + Namespaces - + @@ -91,7 +91,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/navigation.html b/doc/html/math_toolkit/navigation.html index ce4c419a1..7ae027870 100644 --- a/doc/html/math_toolkit/navigation.html +++ b/doc/html/math_toolkit/navigation.html @@ -1,9 +1,9 @@ - + Navigation - + @@ -28,7 +28,7 @@ Navigation

    - +

    Boost.Math documentation is provided in both HTML and PDF formats. @@ -90,7 +90,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/new_const.html b/doc/html/math_toolkit/new_const.html index 868e3bcb6..8ae1818a3 100644 --- a/doc/html/math_toolkit/new_const.html +++ b/doc/html/math_toolkit/new_const.html @@ -1,9 +1,9 @@ - + Defining New Constants - + @@ -249,7 +249,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/next_float.html b/doc/html/math_toolkit/next_float.html index 31a2fc561..49276814f 100644 --- a/doc/html/math_toolkit/next_float.html +++ b/doc/html/math_toolkit/next_float.html @@ -1,9 +1,9 @@ - + Floating-Point Representation Distance (ULP), and Finding Adjacent Floating-Point Values - + @@ -102,7 +102,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/next_float/float_advance.html b/doc/html/math_toolkit/next_float/float_advance.html index d7db8b931..03e2e71ca 100644 --- a/doc/html/math_toolkit/next_float/float_advance.html +++ b/doc/html/math_toolkit/next_float/float_advance.html @@ -1,9 +1,9 @@ - + Advancing a floating-point Value by a Specific Representation Distance (ULP) float_advance - + @@ -58,7 +58,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/next_float/float_distance.html b/doc/html/math_toolkit/next_float/float_distance.html index ea794357c..668ecdaaf 100644 --- a/doc/html/math_toolkit/next_float/float_distance.html +++ b/doc/html/math_toolkit/next_float/float_distance.html @@ -1,9 +1,9 @@ - + Calculating the Representation Distance Between Two floating-point Values (ULP) float_distance - + @@ -92,7 +92,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/next_float/float_next.html b/doc/html/math_toolkit/next_float/float_next.html index 13b6f9c60..d475f6855 100644 --- a/doc/html/math_toolkit/next_float/float_next.html +++ b/doc/html/math_toolkit/next_float/float_next.html @@ -1,9 +1,9 @@ - + Finding the Next Greater Representable Value (float_next) - + @@ -62,7 +62,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/next_float/float_prior.html b/doc/html/math_toolkit/next_float/float_prior.html index f78c965cc..a3862d147 100644 --- a/doc/html/math_toolkit/next_float/float_prior.html +++ b/doc/html/math_toolkit/next_float/float_prior.html @@ -1,9 +1,9 @@ - + Finding the Next Smaller Representable Value (float_prior) - + @@ -62,7 +62,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/next_float/nextafter.html b/doc/html/math_toolkit/next_float/nextafter.html index 282e5de84..7403d94fa 100644 --- a/doc/html/math_toolkit/next_float/nextafter.html +++ b/doc/html/math_toolkit/next_float/nextafter.html @@ -1,9 +1,9 @@ - + Finding the Next Representable Value in a Specific Direction (nextafter) - + @@ -116,7 +116,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/next_float/ulp.html b/doc/html/math_toolkit/next_float/ulp.html index d05e76e9b..e68f2dcb6 100644 --- a/doc/html/math_toolkit/next_float/ulp.html +++ b/doc/html/math_toolkit/next_float/ulp.html @@ -1,9 +1,9 @@ - + Obtaining the Size of a Unit In the Last Place - ULP - + @@ -149,7 +149,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/norms.html b/doc/html/math_toolkit/norms.html index 7f148db21..89c85cf60 100644 --- a/doc/html/math_toolkit/norms.html +++ b/doc/html/math_toolkit/norms.html @@ -1,9 +1,9 @@ - + Norms - + @@ -365,7 +365,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/number_series.html b/doc/html/math_toolkit/number_series.html index f6862de61..11e894ad3 100644 --- a/doc/html/math_toolkit/number_series.html +++ b/doc/html/math_toolkit/number_series.html @@ -1,9 +1,9 @@ - + Number Series - + @@ -40,7 +40,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/number_series/bernoulli_numbers.html b/doc/html/math_toolkit/number_series/bernoulli_numbers.html index 81f6900ab..48e3fb07d 100644 --- a/doc/html/math_toolkit/number_series/bernoulli_numbers.html +++ b/doc/html/math_toolkit/number_series/bernoulli_numbers.html @@ -1,9 +1,9 @@ - + Bernoulli Numbers - + @@ -370,7 +370,7 @@ and also obtain much Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/number_series/fibonacci_numbers.html b/doc/html/math_toolkit/number_series/fibonacci_numbers.html index 518eb90e1..27117b9d0 100644 --- a/doc/html/math_toolkit/number_series/fibonacci_numbers.html +++ b/doc/html/math_toolkit/number_series/fibonacci_numbers.html @@ -1,9 +1,9 @@ - + Fibonacci Numbers - + @@ -183,7 +183,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/number_series/primes.html b/doc/html/math_toolkit/number_series/primes.html index 060a2bd38..99392e41c 100644 --- a/doc/html/math_toolkit/number_series/primes.html +++ b/doc/html/math_toolkit/number_series/primes.html @@ -1,9 +1,9 @@ - + Prime Numbers - + @@ -74,7 +74,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/number_series/tangent_numbers.html b/doc/html/math_toolkit/number_series/tangent_numbers.html index 92872bee5..74330fb81 100644 --- a/doc/html/math_toolkit/number_series/tangent_numbers.html +++ b/doc/html/math_toolkit/number_series/tangent_numbers.html @@ -1,9 +1,9 @@ - + Tangent Numbers - + @@ -126,7 +126,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_create.html b/doc/html/math_toolkit/oct_create.html index b27488e7c..956dde9e8 100644 --- a/doc/html/math_toolkit/oct_create.html +++ b/doc/html/math_toolkit/oct_create.html @@ -1,9 +1,9 @@ - + Octonion Creation Functions - + @@ -70,7 +70,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_header.html b/doc/html/math_toolkit/oct_header.html index d94345400..32362b5b9 100644 --- a/doc/html/math_toolkit/oct_header.html +++ b/doc/html/math_toolkit/oct_header.html @@ -1,9 +1,9 @@ - + Header File - + @@ -35,7 +35,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_history.html b/doc/html/math_toolkit/oct_history.html index cf31768a3..1c0110f95 100644 --- a/doc/html/math_toolkit/oct_history.html +++ b/doc/html/math_toolkit/oct_history.html @@ -1,9 +1,9 @@ - + History - + @@ -97,7 +97,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_mem_fun.html b/doc/html/math_toolkit/oct_mem_fun.html index c269d1ff1..b9c2f225b 100644 --- a/doc/html/math_toolkit/oct_mem_fun.html +++ b/doc/html/math_toolkit/oct_mem_fun.html @@ -1,9 +1,9 @@ - + Octonion Member Functions - + @@ -245,7 +245,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_non_mem.html b/doc/html/math_toolkit/oct_non_mem.html index 80c727e21..d9e1db520 100644 --- a/doc/html/math_toolkit/oct_non_mem.html +++ b/doc/html/math_toolkit/oct_non_mem.html @@ -1,9 +1,9 @@ - + Octonion Non-Member Operators - + @@ -209,7 +209,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_overview.html b/doc/html/math_toolkit/oct_overview.html index 48a8ecfd7..7159450c5 100644 --- a/doc/html/math_toolkit/oct_overview.html +++ b/doc/html/math_toolkit/oct_overview.html @@ -1,9 +1,9 @@ - + Overview - + @@ -72,7 +72,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_specialization.html b/doc/html/math_toolkit/oct_specialization.html index ba45f4984..a8844888a 100644 --- a/doc/html/math_toolkit/oct_specialization.html +++ b/doc/html/math_toolkit/oct_specialization.html @@ -1,9 +1,9 @@ - + Octonion Specializations - + @@ -228,7 +228,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_synopsis.html b/doc/html/math_toolkit/oct_synopsis.html index 3561c1c48..c8193fe3d 100644 --- a/doc/html/math_toolkit/oct_synopsis.html +++ b/doc/html/math_toolkit/oct_synopsis.html @@ -1,9 +1,9 @@ - + Synopsis - + @@ -127,7 +127,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_tests.html b/doc/html/math_toolkit/oct_tests.html index bd2209a67..98fa24b74 100644 --- a/doc/html/math_toolkit/oct_tests.html +++ b/doc/html/math_toolkit/oct_tests.html @@ -1,9 +1,9 @@ - + Test Program - + @@ -46,7 +46,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_todo.html b/doc/html/math_toolkit/oct_todo.html index f83fd64df..660c6c28e 100644 --- a/doc/html/math_toolkit/oct_todo.html +++ b/doc/html/math_toolkit/oct_todo.html @@ -1,9 +1,9 @@ - + To Do - + @@ -43,7 +43,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_trans.html b/doc/html/math_toolkit/oct_trans.html index 4ddbf83ea..5407b13e8 100644 --- a/doc/html/math_toolkit/oct_trans.html +++ b/doc/html/math_toolkit/oct_trans.html @@ -1,9 +1,9 @@ - + Octonions Transcendentals - + @@ -134,7 +134,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_typedefs.html b/doc/html/math_toolkit/oct_typedefs.html index f09e24d5a..16ffe874e 100644 --- a/doc/html/math_toolkit/oct_typedefs.html +++ b/doc/html/math_toolkit/oct_typedefs.html @@ -1,9 +1,9 @@ - + Octonion Member Typedefs - + @@ -58,7 +58,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/oct_value_ops.html b/doc/html/math_toolkit/oct_value_ops.html index fd1de4f4e..0db15307b 100644 --- a/doc/html/math_toolkit/oct_value_ops.html +++ b/doc/html/math_toolkit/oct_value_ops.html @@ -1,9 +1,9 @@ - + Octonion Value Operations - + @@ -94,7 +94,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/octonion.html b/doc/html/math_toolkit/octonion.html index e40d03a3e..5723ff71d 100644 --- a/doc/html/math_toolkit/octonion.html +++ b/doc/html/math_toolkit/octonion.html @@ -1,9 +1,9 @@ - + Template Class octonion - + @@ -100,7 +100,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/overview_tr1.html b/doc/html/math_toolkit/overview_tr1.html index e462e7f5b..0e58c0d6a 100644 --- a/doc/html/math_toolkit/overview_tr1.html +++ b/doc/html/math_toolkit/overview_tr1.html @@ -1,9 +1,9 @@ - + C99 and C++ TR1 C-style Functions - + @@ -603,7 +603,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/owens_t.html b/doc/html/math_toolkit/owens_t.html index 9c3859242..c111a2589 100644 --- a/doc/html/math_toolkit/owens_t.html +++ b/doc/html/math_toolkit/owens_t.html @@ -1,9 +1,9 @@ - + Owen's T function - + @@ -309,7 +309,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pchip.html b/doc/html/math_toolkit/pchip.html index 727afb510..6fa2903b1 100644 --- a/doc/html/math_toolkit/pchip.html +++ b/doc/html/math_toolkit/pchip.html @@ -1,9 +1,9 @@ - + PCHIP interpolation - + @@ -124,7 +124,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/perf_over1.html b/doc/html/math_toolkit/perf_over1.html index 76bc4cd8f..65e8213a5 100644 --- a/doc/html/math_toolkit/perf_over1.html +++ b/doc/html/math_toolkit/perf_over1.html @@ -1,9 +1,9 @@ - + Performance - + @@ -74,7 +74,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/perf_over2.html b/doc/html/math_toolkit/perf_over2.html index ed0b43391..51c8ac834 100644 --- a/doc/html/math_toolkit/perf_over2.html +++ b/doc/html/math_toolkit/perf_over2.html @@ -1,9 +1,9 @@ - + Performance Overview - + @@ -74,7 +74,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/perf_test_app.html b/doc/html/math_toolkit/perf_test_app.html index 2e5f2675e..58190e982 100644 --- a/doc/html/math_toolkit/perf_test_app.html +++ b/doc/html/math_toolkit/perf_test_app.html @@ -1,9 +1,9 @@ - + The Performance Test Applications - + @@ -104,7 +104,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_overview.html b/doc/html/math_toolkit/pol_overview.html index 02fa9dac4..addca5342 100644 --- a/doc/html/math_toolkit/pol_overview.html +++ b/doc/html/math_toolkit/pol_overview.html @@ -1,9 +1,9 @@ - + Policy Overview - + @@ -104,7 +104,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref.html b/doc/html/math_toolkit/pol_ref.html index dc9be5cfb..6835be56f 100644 --- a/doc/html/math_toolkit/pol_ref.html +++ b/doc/html/math_toolkit/pol_ref.html @@ -1,9 +1,9 @@ - + Policy Reference - + @@ -50,7 +50,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/assert_undefined.html b/doc/html/math_toolkit/pol_ref/assert_undefined.html index b2f804f4a..21be08ade 100644 --- a/doc/html/math_toolkit/pol_ref/assert_undefined.html +++ b/doc/html/math_toolkit/pol_ref/assert_undefined.html @@ -1,9 +1,9 @@ - + Mathematically Undefined Function Policies - + @@ -88,7 +88,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/discrete_quant_ref.html b/doc/html/math_toolkit/pol_ref/discrete_quant_ref.html index cd312d0d9..0061c8f80 100644 --- a/doc/html/math_toolkit/pol_ref/discrete_quant_ref.html +++ b/doc/html/math_toolkit/pol_ref/discrete_quant_ref.html @@ -1,9 +1,9 @@ - + Discrete Quantile Policies - + @@ -238,7 +238,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/error_handling_policies.html b/doc/html/math_toolkit/pol_ref/error_handling_policies.html index bae066d44..5604bb73d 100644 --- a/doc/html/math_toolkit/pol_ref/error_handling_policies.html +++ b/doc/html/math_toolkit/pol_ref/error_handling_policies.html @@ -1,9 +1,9 @@ - + Error Handling Policies - + @@ -759,7 +759,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/internal_promotion.html b/doc/html/math_toolkit/pol_ref/internal_promotion.html index 1f1a4fc24..3b937c6ce 100644 --- a/doc/html/math_toolkit/pol_ref/internal_promotion.html +++ b/doc/html/math_toolkit/pol_ref/internal_promotion.html @@ -1,9 +1,9 @@ - + Internal Floating-point Promotion Policies - + @@ -136,7 +136,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/iteration_pol.html b/doc/html/math_toolkit/pol_ref/iteration_pol.html index f6e0305b9..c76b896e6 100644 --- a/doc/html/math_toolkit/pol_ref/iteration_pol.html +++ b/doc/html/math_toolkit/pol_ref/iteration_pol.html @@ -1,9 +1,9 @@ - + Iteration Limits Policies - + @@ -53,7 +53,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/namespace_pol.html b/doc/html/math_toolkit/pol_ref/namespace_pol.html index f194b2560..18087c8cf 100644 --- a/doc/html/math_toolkit/pol_ref/namespace_pol.html +++ b/doc/html/math_toolkit/pol_ref/namespace_pol.html @@ -1,9 +1,9 @@ - + Setting Polices at Namespace Scope - + @@ -144,7 +144,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/pol_ref_ref.html b/doc/html/math_toolkit/pol_ref/pol_ref_ref.html index f9aad696e..98ffc0875 100644 --- a/doc/html/math_toolkit/pol_ref/pol_ref_ref.html +++ b/doc/html/math_toolkit/pol_ref/pol_ref_ref.html @@ -1,9 +1,9 @@ - + Policy Class Reference - + @@ -247,7 +247,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/policy_defaults.html b/doc/html/math_toolkit/pol_ref/policy_defaults.html index eeb506ab0..ef9661e9b 100644 --- a/doc/html/math_toolkit/pol_ref/policy_defaults.html +++ b/doc/html/math_toolkit/pol_ref/policy_defaults.html @@ -1,9 +1,9 @@ - + Using Macros to Change the Policy Defaults - + @@ -244,7 +244,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_ref/precision_pol.html b/doc/html/math_toolkit/pol_ref/precision_pol.html index cf6cd0c19..6e5ce9157 100644 --- a/doc/html/math_toolkit/pol_ref/precision_pol.html +++ b/doc/html/math_toolkit/pol_ref/precision_pol.html @@ -1,9 +1,9 @@ - + Precision Policies - + @@ -96,7 +96,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial.html b/doc/html/math_toolkit/pol_tutorial.html index 5fa1936a3..1a5d4e8d4 100644 --- a/doc/html/math_toolkit/pol_tutorial.html +++ b/doc/html/math_toolkit/pol_tutorial.html @@ -1,9 +1,9 @@ - + Policy Tutorial - + @@ -52,7 +52,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/ad_hoc_dist_policies.html b/doc/html/math_toolkit/pol_tutorial/ad_hoc_dist_policies.html index 4d82db755..e3dff0f7d 100644 --- a/doc/html/math_toolkit/pol_tutorial/ad_hoc_dist_policies.html +++ b/doc/html/math_toolkit/pol_tutorial/ad_hoc_dist_policies.html @@ -1,9 +1,9 @@ - + Setting Policies for Distributions on an Ad Hoc Basis - + @@ -91,7 +91,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/ad_hoc_sf_policies.html b/doc/html/math_toolkit/pol_tutorial/ad_hoc_sf_policies.html index f33c27864..067d5bb76 100644 --- a/doc/html/math_toolkit/pol_tutorial/ad_hoc_sf_policies.html +++ b/doc/html/math_toolkit/pol_tutorial/ad_hoc_sf_policies.html @@ -1,9 +1,9 @@ - + Changing the Policy on an Ad Hoc Basis for the Special Functions - + @@ -160,7 +160,7 @@ errno = 33 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/changing_policy_defaults.html b/doc/html/math_toolkit/pol_tutorial/changing_policy_defaults.html index 608b8d5e8..70b6008c7 100644 --- a/doc/html/math_toolkit/pol_tutorial/changing_policy_defaults.html +++ b/doc/html/math_toolkit/pol_tutorial/changing_policy_defaults.html @@ -1,9 +1,9 @@ - + Changing the Policy Defaults - + @@ -244,7 +244,7 @@ errno is set to: 33 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/namespace_policies.html b/doc/html/math_toolkit/pol_tutorial/namespace_policies.html index 91a570fda..1dd787cb5 100644 --- a/doc/html/math_toolkit/pol_tutorial/namespace_policies.html +++ b/doc/html/math_toolkit/pol_tutorial/namespace_policies.html @@ -1,9 +1,9 @@ - + Setting Policies at Namespace or Translation Unit Scope - + @@ -352,7 +352,7 @@ Result of quantile(complement(binom, 0.05)) is: 8 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/policy_tut_defaults.html b/doc/html/math_toolkit/pol_tutorial/policy_tut_defaults.html index 30f236926..f61f777c6 100644 --- a/doc/html/math_toolkit/pol_tutorial/policy_tut_defaults.html +++ b/doc/html/math_toolkit/pol_tutorial/policy_tut_defaults.html @@ -1,9 +1,9 @@ - + Policies Have Sensible Defaults - + @@ -144,7 +144,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/policy_usage.html b/doc/html/math_toolkit/pol_tutorial/policy_usage.html index a970d0687..91c8a7ef5 100644 --- a/doc/html/math_toolkit/pol_tutorial/policy_usage.html +++ b/doc/html/math_toolkit/pol_tutorial/policy_usage.html @@ -1,9 +1,9 @@ - + So How are Policies Used Anyway? - + @@ -59,7 +59,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/understand_dis_quant.html b/doc/html/math_toolkit/pol_tutorial/understand_dis_quant.html index 90867e22e..a90c04652 100644 --- a/doc/html/math_toolkit/pol_tutorial/understand_dis_quant.html +++ b/doc/html/math_toolkit/pol_tutorial/understand_dis_quant.html @@ -1,9 +1,9 @@ - + Understanding Quantiles of Discrete Distributions - + @@ -403,7 +403,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/user_def_err_pol.html b/doc/html/math_toolkit/pol_tutorial/user_def_err_pol.html index b0b82167e..111fa613f 100644 --- a/doc/html/math_toolkit/pol_tutorial/user_def_err_pol.html +++ b/doc/html/math_toolkit/pol_tutorial/user_def_err_pol.html @@ -1,9 +1,9 @@ - + Calling User Defined Error Handlers - + @@ -440,7 +440,7 @@ Result of tgamma(-190.5) is: 0 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/pol_tutorial/what_is_a_policy.html b/doc/html/math_toolkit/pol_tutorial/what_is_a_policy.html index 338d6469d..b746a310a 100644 --- a/doc/html/math_toolkit/pol_tutorial/what_is_a_policy.html +++ b/doc/html/math_toolkit/pol_tutorial/what_is_a_policy.html @@ -1,9 +1,9 @@ - + So Just What is a Policy Anyway? - + @@ -87,7 +87,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/polynomials.html b/doc/html/math_toolkit/polynomials.html index fab79b6ba..ef1facec7 100644 --- a/doc/html/math_toolkit/polynomials.html +++ b/doc/html/math_toolkit/polynomials.html @@ -1,9 +1,9 @@ - + Polynomials - + @@ -322,7 +322,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers.html b/doc/html/math_toolkit/powers.html index de2ec3636..ebcaa2bab 100644 --- a/doc/html/math_toolkit/powers.html +++ b/doc/html/math_toolkit/powers.html @@ -1,9 +1,9 @@ - + Basic Functions - + @@ -46,7 +46,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/cbrt.html b/doc/html/math_toolkit/powers/cbrt.html index 6f0f0aef8..ce6463c2a 100644 --- a/doc/html/math_toolkit/powers/cbrt.html +++ b/doc/html/math_toolkit/powers/cbrt.html @@ -1,9 +1,9 @@ - + cbrt - + @@ -151,7 +151,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/cos_pi.html b/doc/html/math_toolkit/powers/cos_pi.html index 3e1d33e32..e8abb5be3 100644 --- a/doc/html/math_toolkit/powers/cos_pi.html +++ b/doc/html/math_toolkit/powers/cos_pi.html @@ -1,9 +1,9 @@ - + cos_pi - + @@ -155,7 +155,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/ct_pow.html b/doc/html/math_toolkit/powers/ct_pow.html index ec6bb6e3a..f0f2ddb44 100644 --- a/doc/html/math_toolkit/powers/ct_pow.html +++ b/doc/html/math_toolkit/powers/ct_pow.html @@ -1,9 +1,9 @@ - + Compile Time Power of a Runtime Base - + @@ -42,10 +42,10 @@
    namespace boost { namespace math {
     
     template <int N, typename T>
    -constexpr calculated-result-type pow(T base);
    +BOOST_MATH_GPU_ENABLED constexpr calculated-result-type pow(T base);
     
     template <int N, typename T, class Policy>
    -constexpr calculated-result-type pow(T base, const Policy& policy);
    +BOOST_MATH_GPU_ENABLED constexpr calculated-result-type pow(T base, const Policy& policy);
     
     }}
     
    @@ -260,7 +260,7 @@ improving the implementation. Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/expm1.html b/doc/html/math_toolkit/powers/expm1.html index 81e0e3649..c7ef7227c 100644 --- a/doc/html/math_toolkit/powers/expm1.html +++ b/doc/html/math_toolkit/powers/expm1.html @@ -1,9 +1,9 @@ - + expm1 - + @@ -161,7 +161,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/hypot.html b/doc/html/math_toolkit/powers/hypot.html index 00c6ec88c..2bae0e438 100644 --- a/doc/html/math_toolkit/powers/hypot.html +++ b/doc/html/math_toolkit/powers/hypot.html @@ -1,9 +1,9 @@ - + hypot - + @@ -32,6 +32,12 @@ template <class T1, class T2, class Policy> calculated-result-type hypot(T1 x, T2 y, const Policy&); + +template <class T1, class T2, class T3> +calculated-result-type hypot(T1 x, T2 y, T3 z); + +template <class T1, class T2, class T3, class Policy> +calculated-result-type hypot(T1 x, T2 y, T3 z, const Policy&);

    Effects: computes @@ -45,8 +51,8 @@

    The return type of this function is computed using the result - type calculation rules when T1 and T2 are of different - types. + type calculation rules when T1 and T2 (and or T3) are of + different types.

    The final Policy argument is optional and can @@ -77,6 +83,14 @@

    Then if x * ε >= y we can simply return x.

    +

    + In the 3-arg case the approach is to scale by the largest argument, and then + calculate +

    +

    + const auto a = max(max(x, y), z); return a == 0 ? 0 : a * sqrt(x/a * x/a + + y/a * y/a + z/a * z/a); +

    Otherwise the result is given by:

    @@ -89,7 +103,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/log1p.html b/doc/html/math_toolkit/powers/log1p.html index 9894c3fd7..ef84ff9ef 100644 --- a/doc/html/math_toolkit/powers/log1p.html +++ b/doc/html/math_toolkit/powers/log1p.html @@ -1,9 +1,9 @@ - + log1p - + @@ -176,7 +176,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/logaddexp.html b/doc/html/math_toolkit/powers/logaddexp.html index e0d5d989f..a3a7077c5 100644 --- a/doc/html/math_toolkit/powers/logaddexp.html +++ b/doc/html/math_toolkit/powers/logaddexp.html @@ -1,9 +1,9 @@ - + logaddexp and logsumexp - + @@ -151,7 +151,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/powm1.html b/doc/html/math_toolkit/powers/powm1.html index a1fca99ed..4914fff32 100644 --- a/doc/html/math_toolkit/powers/powm1.html +++ b/doc/html/math_toolkit/powers/powm1.html @@ -1,9 +1,9 @@ - + powm1 - + @@ -155,7 +155,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/rsqrt.html b/doc/html/math_toolkit/powers/rsqrt.html index bd6081656..6c7b37a47 100644 --- a/doc/html/math_toolkit/powers/rsqrt.html +++ b/doc/html/math_toolkit/powers/rsqrt.html @@ -1,9 +1,9 @@ - + Reciprocal square root - + @@ -101,7 +101,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/sin_pi.html b/doc/html/math_toolkit/powers/sin_pi.html index c362a9331..ade1318d9 100644 --- a/doc/html/math_toolkit/powers/sin_pi.html +++ b/doc/html/math_toolkit/powers/sin_pi.html @@ -1,9 +1,9 @@ - + sin_pi - + @@ -155,7 +155,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/powers/sqrt1pm1.html b/doc/html/math_toolkit/powers/sqrt1pm1.html index 3eba5d089..b854a46d9 100644 --- a/doc/html/math_toolkit/powers/sqrt1pm1.html +++ b/doc/html/math_toolkit/powers/sqrt1pm1.html @@ -1,9 +1,9 @@ - + sqrt1pm1 - + @@ -153,7 +153,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quartic_roots.html b/doc/html/math_toolkit/quartic_roots.html index 41b2cbc48..f62bc17cb 100644 --- a/doc/html/math_toolkit/quartic_roots.html +++ b/doc/html/math_toolkit/quartic_roots.html @@ -1,9 +1,9 @@ - + Roots of Quartic Polynomials - + @@ -73,7 +73,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat.html b/doc/html/math_toolkit/quat.html index 0e09d5efe..9ec33ea9d 100644 --- a/doc/html/math_toolkit/quat.html +++ b/doc/html/math_toolkit/quat.html @@ -1,9 +1,9 @@ - + Template Class quaternion - + @@ -85,7 +85,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat_header.html b/doc/html/math_toolkit/quat_header.html index 1cf29bde8..cc9bfae94 100644 --- a/doc/html/math_toolkit/quat_header.html +++ b/doc/html/math_toolkit/quat_header.html @@ -1,9 +1,9 @@ - + Header File - + @@ -35,7 +35,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat_history.html b/doc/html/math_toolkit/quat_history.html index dca6835c1..d12e1b7a7 100644 --- a/doc/html/math_toolkit/quat_history.html +++ b/doc/html/math_toolkit/quat_history.html @@ -1,9 +1,9 @@ - + History - + @@ -99,7 +99,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat_mem_fun.html b/doc/html/math_toolkit/quat_mem_fun.html index f8fe80d4e..ccac63d8a 100644 --- a/doc/html/math_toolkit/quat_mem_fun.html +++ b/doc/html/math_toolkit/quat_mem_fun.html @@ -1,9 +1,9 @@ - + Quaternion Member Functions - + @@ -222,7 +222,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat_non_mem.html b/doc/html/math_toolkit/quat_non_mem.html index 347edfdfe..ffedc707b 100644 --- a/doc/html/math_toolkit/quat_non_mem.html +++ b/doc/html/math_toolkit/quat_non_mem.html @@ -1,9 +1,9 @@ - + Quaternion Non-Member Operators - + @@ -210,7 +210,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat_overview.html b/doc/html/math_toolkit/quat_overview.html index c40d4fadb..2e139fc87 100644 --- a/doc/html/math_toolkit/quat_overview.html +++ b/doc/html/math_toolkit/quat_overview.html @@ -1,9 +1,9 @@ - + Overview - + @@ -82,7 +82,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat_synopsis.html b/doc/html/math_toolkit/quat_synopsis.html index 09d605d64..942bf1780 100644 --- a/doc/html/math_toolkit/quat_synopsis.html +++ b/doc/html/math_toolkit/quat_synopsis.html @@ -1,9 +1,9 @@ - + Synopsis - + @@ -114,7 +114,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat_tests.html b/doc/html/math_toolkit/quat_tests.html index 25b30c45e..f30408e4b 100644 --- a/doc/html/math_toolkit/quat_tests.html +++ b/doc/html/math_toolkit/quat_tests.html @@ -1,9 +1,9 @@ - + Test Program - + @@ -47,7 +47,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quat_todo.html b/doc/html/math_toolkit/quat_todo.html index 0e87d4c26..2cc0150e9 100644 --- a/doc/html/math_toolkit/quat_todo.html +++ b/doc/html/math_toolkit/quat_todo.html @@ -1,9 +1,9 @@ - + To Do - + @@ -47,7 +47,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/quintic_hermite.html b/doc/html/math_toolkit/quintic_hermite.html index 6b40ccb2f..97d713c82 100644 --- a/doc/html/math_toolkit/quintic_hermite.html +++ b/doc/html/math_toolkit/quintic_hermite.html @@ -1,9 +1,9 @@ - + Quintic Hermite interpolation - + @@ -227,7 +227,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/random_search.html b/doc/html/math_toolkit/random_search.html index 5c8f03646..e80c07d57 100644 --- a/doc/html/math_toolkit/random_search.html +++ b/doc/html/math_toolkit/random_search.html @@ -1,9 +1,9 @@ - + Random Search - + @@ -184,7 +184,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/rational.html b/doc/html/math_toolkit/rational.html index 6be0b987b..2d401927a 100644 --- a/doc/html/math_toolkit/rational.html +++ b/doc/html/math_toolkit/rational.html @@ -1,9 +1,9 @@ - + Polynomial and Rational Function Evaluation - + @@ -217,7 +217,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/rationale.html b/doc/html/math_toolkit/rationale.html index da3f66ff0..3426e0fac 100644 --- a/doc/html/math_toolkit/rationale.html +++ b/doc/html/math_toolkit/rationale.html @@ -1,9 +1,9 @@ - + Rationale - + @@ -141,7 +141,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/real_concepts.html b/doc/html/math_toolkit/real_concepts.html index 24e43fa39..f0c4dcf27 100644 --- a/doc/html/math_toolkit/real_concepts.html +++ b/doc/html/math_toolkit/real_concepts.html @@ -1,9 +1,9 @@ - + Conceptual Requirements for Real Number Types - + @@ -1362,7 +1362,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/refs.html b/doc/html/math_toolkit/refs.html index 747f4e1a1..db920cb20 100644 --- a/doc/html/math_toolkit/refs.html +++ b/doc/html/math_toolkit/refs.html @@ -1,9 +1,9 @@ - + References - + @@ -201,7 +201,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/relative_error.html b/doc/html/math_toolkit/relative_error.html index 01140ec60..108a69bd7 100644 --- a/doc/html/math_toolkit/relative_error.html +++ b/doc/html/math_toolkit/relative_error.html @@ -1,9 +1,9 @@ - + Relative Error - + @@ -111,7 +111,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/remez.html b/doc/html/math_toolkit/remez.html index bb873ab91..7bbe445b6 100644 --- a/doc/html/math_toolkit/remez.html +++ b/doc/html/math_toolkit/remez.html @@ -1,9 +1,9 @@ - + The Remez Method - + @@ -541,7 +541,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/result_type.html b/doc/html/math_toolkit/result_type.html index 35ab5f7aa..752f89931 100644 --- a/doc/html/math_toolkit/result_type.html +++ b/doc/html/math_toolkit/result_type.html @@ -1,9 +1,9 @@ - + Calculation of the Type of the Result - + @@ -170,7 +170,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_comparison.html b/doc/html/math_toolkit/root_comparison.html index d9913d9bc..756a19c2d 100644 --- a/doc/html/math_toolkit/root_comparison.html +++ b/doc/html/math_toolkit/root_comparison.html @@ -1,9 +1,9 @@ - + Comparison of Root Finding Algorithms - + @@ -41,7 +41,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_comparison/cbrt_comparison.html b/doc/html/math_toolkit/root_comparison/cbrt_comparison.html index 70fabe399..dc3200b45 100644 --- a/doc/html/math_toolkit/root_comparison/cbrt_comparison.html +++ b/doc/html/math_toolkit/root_comparison/cbrt_comparison.html @@ -1,9 +1,9 @@ - + Comparison of Cube Root Finding Algorithms - + @@ -1574,7 +1574,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_comparison/elliptic_comparison.html b/doc/html/math_toolkit/root_comparison/elliptic_comparison.html index 74028299d..a1c74cbd9 100644 --- a/doc/html/math_toolkit/root_comparison/elliptic_comparison.html +++ b/doc/html/math_toolkit/root_comparison/elliptic_comparison.html @@ -1,9 +1,9 @@ - + Comparison of Elliptic Integral Root Finding Algorithms - + @@ -1855,7 +1855,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_comparison/root_n_comparison.html b/doc/html/math_toolkit/root_comparison/root_n_comparison.html index e1ce065da..1afdaf8f2 100644 --- a/doc/html/math_toolkit/root_comparison/root_n_comparison.html +++ b/doc/html/math_toolkit/root_comparison/root_n_comparison.html @@ -1,9 +1,9 @@ - + Comparison of Nth-root Finding Algorithms - + @@ -5272,7 +5272,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_finding_examples.html b/doc/html/math_toolkit/root_finding_examples.html index 3bc995d0d..ca1f8aa79 100644 --- a/doc/html/math_toolkit/root_finding_examples.html +++ b/doc/html/math_toolkit/root_finding_examples.html @@ -1,9 +1,9 @@ - + Examples of Root-Finding (with and without derivatives) - + @@ -75,7 +75,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_finding_examples/5th_root_eg.html b/doc/html/math_toolkit/root_finding_examples/5th_root_eg.html index 5e96e0742..eb13257fc 100644 --- a/doc/html/math_toolkit/root_finding_examples/5th_root_eg.html +++ b/doc/html/math_toolkit/root_finding_examples/5th_root_eg.html @@ -1,9 +1,9 @@ - + Computing the Fifth Root - + @@ -152,7 +152,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_finding_examples/cbrt_eg.html b/doc/html/math_toolkit/root_finding_examples/cbrt_eg.html index c6d6dd837..d7ef9c934 100644 --- a/doc/html/math_toolkit/root_finding_examples/cbrt_eg.html +++ b/doc/html/math_toolkit/root_finding_examples/cbrt_eg.html @@ -1,9 +1,9 @@ - + Finding the Cubed Root With and Without Derivatives - + @@ -470,7 +470,7 @@ and reusing it, omits error handling, and does not handle negative values Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_finding_examples/elliptic_eg.html b/doc/html/math_toolkit/root_finding_examples/elliptic_eg.html index 671353160..c744e83c7 100644 --- a/doc/html/math_toolkit/root_finding_examples/elliptic_eg.html +++ b/doc/html/math_toolkit/root_finding_examples/elliptic_eg.html @@ -1,9 +1,9 @@ - + A More complex example - Inverting the Elliptic Integrals - + @@ -258,7 +258,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_finding_examples/lambda.html b/doc/html/math_toolkit/root_finding_examples/lambda.html index 1f63c954e..ebe430ad5 100644 --- a/doc/html/math_toolkit/root_finding_examples/lambda.html +++ b/doc/html/math_toolkit/root_finding_examples/lambda.html @@ -1,9 +1,9 @@ - + Using C++11 Lambda's - + @@ -64,7 +64,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_finding_examples/multiprecision_root.html b/doc/html/math_toolkit/root_finding_examples/multiprecision_root.html index 5cc76e648..a02f502dc 100644 --- a/doc/html/math_toolkit/root_finding_examples/multiprecision_root.html +++ b/doc/html/math_toolkit/root_finding_examples/multiprecision_root.html @@ -1,9 +1,9 @@ - + Root-finding using Boost.Multiprecision - + @@ -276,7 +276,7 @@ value = 2, cube root =1.2599210498948731647672106072782283505702514647015 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/root_finding_examples/nth_root.html b/doc/html/math_toolkit/root_finding_examples/nth_root.html index 8f702d831..fea311fb4 100644 --- a/doc/html/math_toolkit/root_finding_examples/nth_root.html +++ b/doc/html/math_toolkit/root_finding_examples/nth_root.html @@ -1,9 +1,9 @@ - + Generalizing to Compute the nth root - + @@ -173,7 +173,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/roots_deriv.html b/doc/html/math_toolkit/roots_deriv.html index 9d03cae8b..612e8dcaa 100644 --- a/doc/html/math_toolkit/roots_deriv.html +++ b/doc/html/math_toolkit/roots_deriv.html @@ -1,9 +1,9 @@ - -Root Finding With Derivatives: Newton-Raphson, Halley & Schröder + +Root Finding With Derivatives: Newton-Raphson, Halley & Schroeder - + @@ -25,8 +25,8 @@
    @@ -38,10 +38,10 @@ namespace tools { // Note namespace boost::math::tools. // Newton-Raphson template <class F, class T> -T newton_raphson_iterate(F f, T guess, T min, T max, int digits); +BOOST_MATH_GPU_ENABLED T newton_raphson_iterate(F f, T guess, T min, T max, int digits); template <class F, class T> -T newton_raphson_iterate(F f, T guess, T min, T max, int digits, std::uintmax_t& max_iter); +BOOST_MATH_GPU_ENABLED T newton_raphson_iterate(F f, T guess, T min, T max, int digits, std::uintmax_t& max_iter); // Halley template <class F, class T> @@ -50,7 +50,7 @@ template <class F, class T> T halley_iterate(F f, T guess, T min, T max, int digits, std::uintmax_t& max_iter); -// Schr'''&#xf6;'''der +// Schroeder template <class F, class T> T schroder_iterate(F f, T guess, T min, T max, int digits); @@ -111,7 +111,7 @@

    For the third-order methods (Halley - and Schröder) the tuple + and Schroeder) the tuple should have three elements containing the evaluation of the function and its first and second derivatives.

    @@ -270,7 +270,7 @@

    - Schröder's + Schroeder's Method

    @@ -294,10 +294,11 @@ Under ideal conditions, the number of correct digits trebles with each iteration.

    - This is Schröder's general result (equation 18 from Stewart, + This is Schroeder's general result (equation 18 from Stewart, G. W. "On Infinitely Many Algorithms for Solving Equations." English - translation of Schröder's original paper. College Park, MD: University of Maryland, - Institute for Advanced Computer Studies, Department of Computer Science, 1993.) + translation of Schroeder's original paper. College Park, MD: University of + Maryland, Institute for Advanced Computer Studies, Department of Computer Science, + 1993.)

    This method guarantees at least quadratic convergence (the same as Newton's @@ -364,7 +365,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/roots_noderiv.html b/doc/html/math_toolkit/roots_noderiv.html index 8a29cac8d..b61978bd7 100644 --- a/doc/html/math_toolkit/roots_noderiv.html +++ b/doc/html/math_toolkit/roots_noderiv.html @@ -1,9 +1,9 @@ - + Root Finding Without Derivatives - + @@ -205,7 +205,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/roots_noderiv/TOMS748.html b/doc/html/math_toolkit/roots_noderiv/TOMS748.html index eae54122d..00b9714f0 100644 --- a/doc/html/math_toolkit/roots_noderiv/TOMS748.html +++ b/doc/html/math_toolkit/roots_noderiv/TOMS748.html @@ -1,9 +1,9 @@ - + Algorithm TOMS 748: Alefeld, Potra and Shi: Enclosing zeros of continuous functions - + @@ -183,7 +183,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/roots_noderiv/bisect.html b/doc/html/math_toolkit/roots_noderiv/bisect.html index 1460bb12e..21282cb7b 100644 --- a/doc/html/math_toolkit/roots_noderiv/bisect.html +++ b/doc/html/math_toolkit/roots_noderiv/bisect.html @@ -1,9 +1,9 @@ - + Bisection - + @@ -140,7 +140,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/roots_noderiv/bracket_solve.html b/doc/html/math_toolkit/roots_noderiv/bracket_solve.html index c51bc1188..744457a39 100644 --- a/doc/html/math_toolkit/roots_noderiv/bracket_solve.html +++ b/doc/html/math_toolkit/roots_noderiv/bracket_solve.html @@ -1,9 +1,9 @@ - + Bracket and Solve Root - + @@ -172,7 +172,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/roots_noderiv/brent.html b/doc/html/math_toolkit/roots_noderiv/brent.html index 6421dc813..657146d92 100644 --- a/doc/html/math_toolkit/roots_noderiv/brent.html +++ b/doc/html/math_toolkit/roots_noderiv/brent.html @@ -1,9 +1,9 @@ - + Brent-Decker Algorithm - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/roots_noderiv/implementation.html b/doc/html/math_toolkit/roots_noderiv/implementation.html index 5243362fe..0c6037544 100644 --- a/doc/html/math_toolkit/roots_noderiv/implementation.html +++ b/doc/html/math_toolkit/roots_noderiv/implementation.html @@ -1,13 +1,13 @@ - + Implementation - + - + @@ -49,7 +49,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/roots_noderiv/root_termination.html b/doc/html/math_toolkit/roots_noderiv/root_termination.html index eac179508..3da791f08 100644 --- a/doc/html/math_toolkit/roots_noderiv/root_termination.html +++ b/doc/html/math_toolkit/roots_noderiv/root_termination.html @@ -1,9 +1,9 @@ - + Termination Condition Functors - + @@ -88,7 +88,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/rounding.html b/doc/html/math_toolkit/rounding.html index 6cc26209c..0c74e1cfa 100644 --- a/doc/html/math_toolkit/rounding.html +++ b/doc/html/math_toolkit/rounding.html @@ -1,9 +1,9 @@ - + Rounding Truncation and Integer Conversion - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/rounding/modf.html b/doc/html/math_toolkit/rounding/modf.html index 383d73238..3644003c0 100644 --- a/doc/html/math_toolkit/rounding/modf.html +++ b/doc/html/math_toolkit/rounding/modf.html @@ -1,9 +1,9 @@ - + Integer and Fractional Part Splitting (modf) - + @@ -69,7 +69,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/rounding/round.html b/doc/html/math_toolkit/rounding/round.html index a8d47d9ba..e64e9f813 100644 --- a/doc/html/math_toolkit/rounding/round.html +++ b/doc/html/math_toolkit/rounding/round.html @@ -1,9 +1,9 @@ - + Rounding Functions - + @@ -69,7 +69,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/rounding/trunc.html b/doc/html/math_toolkit/rounding/trunc.html index 67c244f89..c22c6669b 100644 --- a/doc/html/math_toolkit/rounding/trunc.html +++ b/doc/html/math_toolkit/rounding/trunc.html @@ -1,9 +1,9 @@ - + Truncation Functions - + @@ -71,7 +71,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/runs_test.html b/doc/html/math_toolkit/runs_test.html index bf8fc5cb7..21ed9af24 100644 --- a/doc/html/math_toolkit/runs_test.html +++ b/doc/html/math_toolkit/runs_test.html @@ -1,9 +1,9 @@ - + Runs tests - + @@ -217,7 +217,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_beta.html b/doc/html/math_toolkit/sf_beta.html index 29a4c0c4e..2833e1bc3 100644 --- a/doc/html/math_toolkit/sf_beta.html +++ b/doc/html/math_toolkit/sf_beta.html @@ -1,9 +1,9 @@ - + Beta Functions - + @@ -41,7 +41,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_beta/beta_derivative.html b/doc/html/math_toolkit/sf_beta/beta_derivative.html index 0f972a33b..e2bcb63f9 100644 --- a/doc/html/math_toolkit/sf_beta/beta_derivative.html +++ b/doc/html/math_toolkit/sf_beta/beta_derivative.html @@ -1,9 +1,9 @@ - + Derivative of the Incomplete Beta Function - + @@ -37,10 +37,10 @@
    namespace boost{ namespace math{
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibeta_derivative(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_derivative(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta_derivative(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_derivative(T1 a, T2 b, T3 x, const Policy&);
     
     }} // namespaces
     
    @@ -89,7 +89,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_beta/beta_function.html b/doc/html/math_toolkit/sf_beta/beta_function.html index 19f38f361..0295d5f0f 100644 --- a/doc/html/math_toolkit/sf_beta/beta_function.html +++ b/doc/html/math_toolkit/sf_beta/beta_function.html @@ -1,9 +1,9 @@ - + Beta - + @@ -36,10 +36,10 @@
    namespace boost{ namespace math{
     
     template <class T1, class T2>
    -calculated-result-type beta(T1 a, T2 b);
    +BOOST_MATH_GPU_ENABLED calculated-result-type beta(T1 a, T2 b);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type beta(T1 a, T2 b, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type beta(T1 a, T2 b, const Policy&);
     
     }} // namespaces
     
    @@ -291,7 +291,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_beta/ibeta_function.html b/doc/html/math_toolkit/sf_beta/ibeta_function.html index f88171acc..eec414468 100644 --- a/doc/html/math_toolkit/sf_beta/ibeta_function.html +++ b/doc/html/math_toolkit/sf_beta/ibeta_function.html @@ -1,9 +1,9 @@ - + Incomplete Beta Functions - + @@ -37,28 +37,28 @@
    namespace boost{ namespace math{
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibeta(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta(T1 a, T2 b, T3 x, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibetac(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibetac(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac(T1 a, T2 b, T3 x, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type beta(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type beta(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type beta(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type beta(T1 a, T2 b, T3 x, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type betac(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type betac(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type betac(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type betac(T1 a, T2 b, T3 x, const Policy&);
     
     }} // namespaces
     
    @@ -101,10 +101,10 @@ documentation for more details.

    template <class T1, class T2, class T3>
    -calculated-result-type ibeta(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta(T1 a, T2 b, T3 x, const Policy&);
     

    Returns the normalised incomplete beta function of a, b and x: @@ -118,10 +118,10 @@

    template <class T1, class T2, class T3>
    -calculated-result-type ibetac(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibetac(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac(T1 a, T2 b, T3 x, const Policy&);
     

    Returns the normalised complement of the incomplete beta function of a, b @@ -132,10 +132,10 @@

    template <class T1, class T2, class T3>
    -calculated-result-type beta(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type beta(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type beta(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type beta(T1 a, T2 b, T3 x, const Policy&);
     

    Returns the full (non-normalised) incomplete beta function of a, b and x: @@ -145,10 +145,10 @@

    template <class T1, class T2, class T3>
    -calculated-result-type betac(T1 a, T2 b, T3 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type betac(T1 a, T2 b, T3 x);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type betac(T1 a, T2 b, T3 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type betac(T1 a, T2 b, T3 x, const Policy&);
     

    Returns the full (non-normalised) complement of the incomplete beta function @@ -887,7 +887,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_beta/ibeta_inv_function.html b/doc/html/math_toolkit/sf_beta/ibeta_inv_function.html index 3e3e7c6fa..313a9fb7f 100644 --- a/doc/html/math_toolkit/sf_beta/ibeta_inv_function.html +++ b/doc/html/math_toolkit/sf_beta/ibeta_inv_function.html @@ -1,9 +1,9 @@ - + The Incomplete Beta Function Inverses - + @@ -33,52 +33,52 @@
    namespace boost{ namespace math{
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibeta_inv(T1 a, T2 b, T3 p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inv(T1 a, T2 b, T3 p);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, const Policy&);
     
     template <class T1, class T2, class T3, class T4>
    -calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, T4* py);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, T4* py);
     
     template <class T1, class T2, class T3, class T4, class Policy>
    -calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibetac_inv(T1 a, T2 b, T3 q);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inv(T1 a, T2 b, T3 q);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, const Policy&);
     
     template <class T1, class T2, class T3, class T4>
    -calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, T4* py);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, T4* py);
     
     template <class T1, class T2, class T3, class T4, class Policy>
    -calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibeta_inva(T1 b, T2 x, T3 p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inva(T1 b, T2 x, T3 p);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta_inva(T1 b, T2 x, T3 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inva(T1 b, T2 x, T3 p, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibetac_inva(T1 b, T2 x, T3 q);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inva(T1 b, T2 x, T3 q);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibetac_inva(T1 b, T2 x, T3 q, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inva(T1 b, T2 x, T3 q, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibeta_invb(T1 a, T2 x, T3 p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_invb(T1 a, T2 x, T3 p);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta_invb(T1 a, T2 x, T3 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_invb(T1 a, T2 x, T3 p, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type ibetac_invb(T1 a, T2 x, T3 q);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_invb(T1 a, T2 x, T3 q);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibetac_invb(T1 a, T2 x, T3 q, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_invb(T1 a, T2 x, T3 q, const Policy&);
     
     }} // namespaces
     
    @@ -128,16 +128,16 @@ of different types.

    template <class T1, class T2, class T3>
    -calculated-result-type ibeta_inv(T1 a, T2 b, T3 p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inv(T1 a, T2 b, T3 p);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, const Policy&);
     
     template <class T1, class T2, class T3, class T4>
    -calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, T4* py);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, T4* py);
     
     template <class T1, class T2, class T3, class T4, class Policy>
    -calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy&);
     

    Returns a value x such that: p @@ -163,16 +163,16 @@ documentation for more details.

    template <class T1, class T2, class T3>
    -calculated-result-type ibetac_inv(T1 a, T2 b, T3 q);
    +BOOST_MATH_GPU_ENABLEDcalculated-result-type ibetac_inv(T1 a, T2 b, T3 q);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, const Policy&);
     
     template <class T1, class T2, class T3, class T4>
    -calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, T4* py);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, T4* py);
     
     template <class T1, class T2, class T3, class T4, class Policy>
    -calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy&);
     

    Returns a value x such that: q @@ -198,10 +198,10 @@ documentation for more details.

    template <class T1, class T2, class T3>
    -calculated-result-type ibeta_inva(T1 b, T2 x, T3 p);
    +BOOST_MATH_GPU_ENABLEDcalculated-result-type ibeta_inva(T1 b, T2 x, T3 p);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta_inva(T1 b, T2 x, T3 p, const Policy&);
    +BOOST_MATH_GPU_ENABLEDcalculated-result-type ibeta_inva(T1 b, T2 x, T3 p, const Policy&);
     

    Returns a value a such that: p @@ -219,10 +219,10 @@ documentation for more details.

    template <class T1, class T2, class T3>
    -calculated-result-type ibetac_inva(T1 b, T2 x, T3 p);
    +BOOST_MATH_GPU_ENABLEDcalculated-result-type ibetac_inva(T1 b, T2 x, T3 p);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibetac_inva(T1 b, T2 x, T3 p, const Policy&);
    +BOOST_MATH_GPU_ENABLEDcalculated-result-type ibetac_inva(T1 b, T2 x, T3 p, const Policy&);
     

    Returns a value a such that: q @@ -240,10 +240,10 @@ documentation for more details.

    template <class T1, class T2, class T3>
    -calculated-result-type ibeta_invb(T1 b, T2 x, T3 p);
    +BOOST_MATH_GPU_ENABLEDcalculated-result-type ibeta_invb(T1 b, T2 x, T3 p);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibeta_invb(T1 b, T2 x, T3 p, const Policy&);
    +BOOST_MATH_GPU_ENABLEDcalculated-result-type ibeta_invb(T1 b, T2 x, T3 p, const Policy&);
     

    Returns a value b such that: p @@ -261,10 +261,10 @@ documentation for more details.

    template <class T1, class T2, class T3>
    -calculated-result-type ibetac_invb(T1 b, T2 x, T3 p);
    +BOOST_MATH_GPU_ENABLEDcalculated-result-type ibetac_invb(T1 b, T2 x, T3 p);
     
     template <class T1, class T2, class T3, class Policy>
    -calculated-result-type ibetac_invb(T1 b, T2 x, T3 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type ibetac_invb(T1 b, T2 x, T3 p, const Policy&);
     

    Returns a value b such that: q @@ -909,7 +909,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_erf.html b/doc/html/math_toolkit/sf_erf.html index 0e11e9972..248bf78dc 100644 --- a/doc/html/math_toolkit/sf_erf.html +++ b/doc/html/math_toolkit/sf_erf.html @@ -1,9 +1,9 @@ - + Error Functions - + @@ -37,7 +37,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_erf/error_function.html b/doc/html/math_toolkit/sf_erf/error_function.html index 2d41758c3..361f6a2d7 100644 --- a/doc/html/math_toolkit/sf_erf/error_function.html +++ b/doc/html/math_toolkit/sf_erf/error_function.html @@ -1,9 +1,9 @@ - + Error Function erf and complement erfc - + @@ -37,16 +37,16 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type erf(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erf(T z);
     
     template <class T, class Policy>
    -calculated-result-type erf(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erf(T z, const Policy&);
     
     template <class T>
    -calculated-result-type erfc(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erfc(T z);
     
     template <class T, class Policy>
    -calculated-result-type erfc(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erfc(T z, const Policy&);
     
     }} // namespaces
     
    @@ -65,10 +65,10 @@ Description
    template <class T>
    -calculated-result-type erf(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erf(T z);
     
     template <class T, class Policy>
    -calculated-result-type erf(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erf(T z, const Policy&);
     

    Returns the error @@ -84,10 +84,10 @@

    template <class T>
    -calculated-result-type erfc(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erfc(T z);
     
     template <class T, class Policy>
    -calculated-result-type erfc(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erfc(T z, const Policy&);
     

    Returns the complement of the error @@ -528,7 +528,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_erf/error_inv.html b/doc/html/math_toolkit/sf_erf/error_inv.html index dde4b93ed..da7c8423e 100644 --- a/doc/html/math_toolkit/sf_erf/error_inv.html +++ b/doc/html/math_toolkit/sf_erf/error_inv.html @@ -1,9 +1,9 @@ - + Error Function Inverses - + @@ -36,16 +36,16 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type erf_inv(T p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erf_inv(T p);
     
     template <class T, class Policy>
    -calculated-result-type erf_inv(T p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erf_inv(T p, const Policy&);
     
     template <class T>
    -calculated-result-type erfc_inv(T p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erfc_inv(T p);
     
     template <class T, class Policy>
    -calculated-result-type erfc_inv(T p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erfc_inv(T p, const Policy&);
     
     }} // namespaces
     
    @@ -64,10 +64,10 @@ Description
    template <class T>
    -calculated-result-type erf_inv(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erf_inv(T z);
     
     template <class T, class Policy>
    -calculated-result-type erf_inv(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erf_inv(T z, const Policy&);
     

    Returns the inverse @@ -81,10 +81,10 @@

    template <class T>
    -calculated-result-type erfc_inv(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erfc_inv(T z);
     
     template <class T, class Policy>
    -calculated-result-type erfc_inv(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type erfc_inv(T z, const Policy&);
     

    Returns the inverse of the complement of the error function of z, that is @@ -363,7 +363,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma.html b/doc/html/math_toolkit/sf_gamma.html index ece4e529c..976fc37c0 100644 --- a/doc/html/math_toolkit/sf_gamma.html +++ b/doc/html/math_toolkit/sf_gamma.html @@ -1,9 +1,9 @@ - + Gamma Functions - + @@ -45,7 +45,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/digamma.html b/doc/html/math_toolkit/sf_gamma/digamma.html index 569432a43..cddb83bda 100644 --- a/doc/html/math_toolkit/sf_gamma/digamma.html +++ b/doc/html/math_toolkit/sf_gamma/digamma.html @@ -1,9 +1,9 @@ - + Digamma - + @@ -36,10 +36,10 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type digamma(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type digamma(T z);
     
     template <class T, class Policy>
    -calculated-result-type digamma(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type digamma(T z, const Policy&);
     
     }} // namespaces
     
    @@ -470,7 +470,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/gamma_derivatives.html b/doc/html/math_toolkit/sf_gamma/gamma_derivatives.html index d5ca38ea6..b88cd6cc4 100644 --- a/doc/html/math_toolkit/sf_gamma/gamma_derivatives.html +++ b/doc/html/math_toolkit/sf_gamma/gamma_derivatives.html @@ -1,9 +1,9 @@ - + Derivative of the Incomplete Gamma Function - + @@ -37,10 +37,10 @@
    namespace boost{ namespace math{
     
     template <class T1, class T2>
    -calculated-result-type gamma_p_derivative(T1 a, T2 x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_derivative(T1 a, T2 x);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_p_derivative(T1 a, T2 x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_derivative(T1 a, T2 x, const Policy&);
     
     }} // namespaces
     
    @@ -94,7 +94,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/gamma_ratios.html b/doc/html/math_toolkit/sf_gamma/gamma_ratios.html index 5522aaacd..4f5ee0e77 100644 --- a/doc/html/math_toolkit/sf_gamma/gamma_ratios.html +++ b/doc/html/math_toolkit/sf_gamma/gamma_ratios.html @@ -1,9 +1,9 @@ - + Ratios of Gamma Functions - + @@ -32,16 +32,16 @@
    namespace boost{ namespace math{
     
     template <class T1, class T2>
    -calculated-result-type tgamma_ratio(T1 a, T2 b);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_ratio(T1 a, T2 b);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type tgamma_ratio(T1 a, T2 b, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_ratio(T1 a, T2 b, const Policy&);
     
     template <class T1, class T2>
    -calculated-result-type tgamma_delta_ratio(T1 a, T2 delta);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_delta_ratio(T1 a, T2 delta);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type tgamma_delta_ratio(T1 a, T2 delta, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_delta_ratio(T1 a, T2 delta, const Policy&);
     
     }} // namespaces
     
    @@ -50,10 +50,10 @@ Description
    template <class T1, class T2>
    -calculated-result-type tgamma_ratio(T1 a, T2 b);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_ratio(T1 a, T2 b);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type tgamma_ratio(T1 a, T2 b, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_ratio(T1 a, T2 b, const Policy&);
     

    Returns the ratio of gamma functions: @@ -73,10 +73,10 @@ b-a).

    template <class T1, class T2>
    -calculated-result-type tgamma_delta_ratio(T1 a, T2 delta);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_delta_ratio(T1 a, T2 delta);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type tgamma_delta_ratio(T1 a, T2 delta, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_delta_ratio(T1 a, T2 delta, const Policy&);
     

    Returns the ratio of gamma functions: @@ -407,7 +407,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/igamma.html b/doc/html/math_toolkit/sf_gamma/igamma.html index 7b1d6801d..1fe87286b 100644 --- a/doc/html/math_toolkit/sf_gamma/igamma.html +++ b/doc/html/math_toolkit/sf_gamma/igamma.html @@ -1,9 +1,9 @@ - + Incomplete Gamma Functions - + @@ -36,28 +36,28 @@
    namespace boost{ namespace math{
     
     template <class T1, class T2>
    -calculated-result-type gamma_p(T1 a, T2 z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p(T1 a, T2 z);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_p(T1 a, T2 z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p(T1 a, T2 z, const Policy&);
     
     template <class T1, class T2>
    -calculated-result-type gamma_q(T1 a, T2 z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q(T1 a, T2 z);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_q(T1 a, T2 z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q(T1 a, T2 z, const Policy&);
     
     template <class T1, class T2>
    -calculated-result-type tgamma_lower(T1 a, T2 z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_lower(T1 a, T2 z);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type tgamma_lower(T1 a, T2 z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_lower(T1 a, T2 z, const Policy&);
     
     template <class T1, class T2>
    -calculated-result-type tgamma(T1 a, T2 z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma(T1 a, T2 z);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type tgamma(T1 a, T2 z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma(T1 a, T2 z, const Policy&);
     
     }} // namespaces
     
    @@ -89,10 +89,10 @@ otherwise the return type is simply T1.

    template <class T1, class T2>
    -calculated-result-type gamma_p(T1 a, T2 z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p(T1 a, T2 z);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_p(T1 a, T2 z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p(T1 a, T2 z, const Policy&);
     

    Returns the normalised lower incomplete gamma function of a and z: @@ -109,10 +109,10 @@

    template <class T1, class T2>
    -calculated-result-type gamma_q(T1 a, T2 z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q(T1 a, T2 z);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_q(T1 a, T2 z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q(T1 a, T2 z, const Policy&);
     

    Returns the normalised upper incomplete gamma function of a and z: @@ -129,10 +129,10 @@

    template <class T1, class T2>
    -calculated-result-type tgamma_lower(T1 a, T2 z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_lower(T1 a, T2 z);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type tgamma_lower(T1 a, T2 z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma_lower(T1 a, T2 z, const Policy&);
     

    Returns the full (non-normalised) lower incomplete gamma function of a and @@ -143,10 +143,10 @@

    template <class T1, class T2>
    -calculated-result-type tgamma(T1 a, T2 z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma(T1 a, T2 z);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type tgamma(T1 a, T2 z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma(T1 a, T2 z, const Policy&);
     

    Returns the full (non-normalised) upper incomplete gamma function of a and @@ -1002,7 +1002,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/igamma_inv.html b/doc/html/math_toolkit/sf_gamma/igamma_inv.html index abda951bd..c59f3b432 100644 --- a/doc/html/math_toolkit/sf_gamma/igamma_inv.html +++ b/doc/html/math_toolkit/sf_gamma/igamma_inv.html @@ -1,9 +1,9 @@ - + Incomplete Gamma Function Inverses - + @@ -37,28 +37,28 @@
    namespace boost{ namespace math{
     
     template <class T1, class T2>
    -calculated-result-type gamma_q_inv(T1 a, T2 q);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q_inv(T1 a, T2 q);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_q_inv(T1 a, T2 q, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q_inv(T1 a, T2 q, const Policy&);
     
     template <class T1, class T2>
    -calculated-result-type gamma_p_inv(T1 a, T2 p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_inv(T1 a, T2 p);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_p_inv(T1 a, T2 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_inv(T1 a, T2 p, const Policy&);
     
     template <class T1, class T2>
    -calculated-result-type gamma_q_inva(T1 x, T2 q);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q_inva(T1 x, T2 q);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_q_inva(T1 x, T2 q, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q_inva(T1 x, T2 q, const Policy&);
     
     template <class T1, class T2>
    -calculated-result-type gamma_p_inva(T1 x, T2 p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_inva(T1 x, T2 p);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_p_inva(T1 x, T2 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_inva(T1 x, T2 p, const Policy&);
     
     }} // namespaces
     
    @@ -106,10 +106,10 @@
    template <class T1, class T2>
    -calculated-result-type gamma_q_inv(T1 a, T2 q);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q_inv(T1 a, T2 q);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_q_inv(T1 a, T2 q, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q_inv(T1 a, T2 q, const Policy&);
     

    Returns a value x such that: q @@ -120,10 +120,10 @@ Requires: a > 0 and 1 >= p,q >= 0.

    template <class T1, class T2>
    -calculated-result-type gamma_p_inv(T1 a, T2 p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_inv(T1 a, T2 p);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_p_inv(T1 a, T2 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_inv(T1 a, T2 p, const Policy&);
     

    Returns a value x such that: p @@ -134,10 +134,10 @@ Requires: a > 0 and 1 >= p,q >= 0.

    template <class T1, class T2>
    -calculated-result-type gamma_q_inva(T1 x, T2 q);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q_inva(T1 x, T2 q);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_q_inva(T1 x, T2 q, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_q_inva(T1 x, T2 q, const Policy&);
     

    Returns a value a such that: q @@ -148,10 +148,10 @@ Requires: x > 0 and 1 >= p,q >= 0.

    template <class T1, class T2>
    -calculated-result-type gamma_p_inva(T1 x, T2 p);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_inva(T1 x, T2 p);
     
     template <class T1, class T2, class Policy>
    -calculated-result-type gamma_p_inva(T1 x, T2 p, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type gamma_p_inva(T1 x, T2 p, const Policy&);
     

    Returns a value a such that: p @@ -612,7 +612,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/lgamma.html b/doc/html/math_toolkit/sf_gamma/lgamma.html index d19124ad9..9b29e773b 100644 --- a/doc/html/math_toolkit/sf_gamma/lgamma.html +++ b/doc/html/math_toolkit/sf_gamma/lgamma.html @@ -1,9 +1,9 @@ - + Log Gamma - + @@ -36,16 +36,16 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type lgamma(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type lgamma(T z);
     
     template <class T, class Policy>
    -calculated-result-type lgamma(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type lgamma(T z, const Policy&);
     
     template <class T>
    -calculated-result-type lgamma(T z, int* sign);
    +BOOST_MATH_GPU_ENABLED calculated-result-type lgamma(T z, int* sign);
     
     template <class T, class Policy>
    -calculated-result-type lgamma(T z, int* sign, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type lgamma(T z, int* sign, const Policy&);
     
     }} // namespaces
     
    @@ -481,7 +481,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/polygamma.html b/doc/html/math_toolkit/sf_gamma/polygamma.html index 3edb16329..e2eed2bf0 100644 --- a/doc/html/math_toolkit/sf_gamma/polygamma.html +++ b/doc/html/math_toolkit/sf_gamma/polygamma.html @@ -1,9 +1,9 @@ - + Polygamma - + @@ -406,7 +406,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/tgamma.html b/doc/html/math_toolkit/sf_gamma/tgamma.html index bdcdb0e4f..481dd5360 100644 --- a/doc/html/math_toolkit/sf_gamma/tgamma.html +++ b/doc/html/math_toolkit/sf_gamma/tgamma.html @@ -1,9 +1,9 @@ - + Gamma - + @@ -36,16 +36,16 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type tgamma(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma(T z);
     
     template <class T, class Policy>
    -calculated-result-type tgamma(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma(T z, const Policy&);
     
     template <class T>
    -calculated-result-type tgamma1pm1(T dz);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma1pm1(T dz);
     
     template <class T, class Policy>
    -calculated-result-type tgamma1pm1(T dz, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma1pm1(T dz, const Policy&);
     
     }} // namespaces
     
    @@ -54,10 +54,10 @@ Description
    template <class T>
    -calculated-result-type tgamma(T z);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma(T z);
     
     template <class T, class Policy>
    -calculated-result-type tgamma(T z, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma(T z, const Policy&);
     

    Returns the "true gamma" (hence name tgamma) of value z: @@ -82,10 +82,10 @@ when T is an integer type, and T otherwise.

    template <class T>
    -calculated-result-type tgamma1pm1(T dz);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma1pm1(T dz);
     
     template <class T, class Policy>
    -calculated-result-type tgamma1pm1(T dz, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type tgamma1pm1(T dz, const Policy&);
     

    Returns tgamma(dz + 1) - 1. @@ -523,7 +523,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_gamma/trigamma.html b/doc/html/math_toolkit/sf_gamma/trigamma.html index 5e97f2150..ee0f18179 100644 --- a/doc/html/math_toolkit/sf_gamma/trigamma.html +++ b/doc/html/math_toolkit/sf_gamma/trigamma.html @@ -1,9 +1,9 @@ - + Trigamma - + @@ -36,10 +36,10 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type trigamma(T x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type trigamma(T x);
     
     template <class T, class Policy>
    -calculated-result-type trigamma(T x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type trigamma(T x, const Policy&);
     
     }} // namespaces
     
    @@ -215,7 +215,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_implementation.html b/doc/html/math_toolkit/sf_implementation.html index e5839f63b..620bfc943 100644 --- a/doc/html/math_toolkit/sf_implementation.html +++ b/doc/html/math_toolkit/sf_implementation.html @@ -1,9 +1,9 @@ - + Additional Implementation Notes - + @@ -848,7 +848,7 @@ done Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly.html b/doc/html/math_toolkit/sf_poly.html index a61798359..d99a2889f 100644 --- a/doc/html/math_toolkit/sf_poly.html +++ b/doc/html/math_toolkit/sf_poly.html @@ -1,9 +1,9 @@ - + Polynomials - + @@ -46,7 +46,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly/cardinal_b_splines.html b/doc/html/math_toolkit/sf_poly/cardinal_b_splines.html index eb4dac20d..170b8997e 100644 --- a/doc/html/math_toolkit/sf_poly/cardinal_b_splines.html +++ b/doc/html/math_toolkit/sf_poly/cardinal_b_splines.html @@ -1,9 +1,9 @@ - + Cardinal B-splines - + @@ -210,7 +210,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly/chebyshev.html b/doc/html/math_toolkit/sf_poly/chebyshev.html index be6881bc5..83e10c6e7 100644 --- a/doc/html/math_toolkit/sf_poly/chebyshev.html +++ b/doc/html/math_toolkit/sf_poly/chebyshev.html @@ -1,9 +1,9 @@ - + Chebyshev Polynomials - + @@ -248,7 +248,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly/gegenbauer.html b/doc/html/math_toolkit/sf_poly/gegenbauer.html index 8768c4e3f..a8b618de9 100644 --- a/doc/html/math_toolkit/sf_poly/gegenbauer.html +++ b/doc/html/math_toolkit/sf_poly/gegenbauer.html @@ -1,9 +1,9 @@ - + Gegenbauer Polynomials - + @@ -36,13 +36,13 @@
    namespace boost{ namespace math{
     
     template<typename Real>
    -Real gegenbauer(unsigned n, Real lambda, Real x);
    +BOOST_MATH_GPU_ENABLED Real gegenbauer(unsigned n, Real lambda, Real x);
     
     template<typename Real>
    -Real gegenbauer_prime(unsigned n, Real lambda, Real x);
    +BOOST_MATH_GPU_ENABLED Real gegenbauer_prime(unsigned n, Real lambda, Real x);
     
     template<typename Real>
    -Real gegenbauer_derivative(unsigned n, Real lambda, Real x, unsigned k);
    +BOOST_MATH_GPU_ENABLED Real gegenbauer_derivative(unsigned n, Real lambda, Real x, unsigned k);
     
     }} // namespaces
     
    @@ -154,7 +154,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly/hermite.html b/doc/html/math_toolkit/sf_poly/hermite.html index 92693bbc4..6e3adf773 100644 --- a/doc/html/math_toolkit/sf_poly/hermite.html +++ b/doc/html/math_toolkit/sf_poly/hermite.html @@ -1,9 +1,9 @@ - + Hermite Polynomials - + @@ -36,13 +36,13 @@
    namespace boost{ namespace math{
     
     template <class T>
    -calculated-result-type hermite(unsigned n, T x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type hermite(unsigned n, T x);
     
     template <class T, class Policy>
    -calculated-result-type hermite(unsigned n, T x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type hermite(unsigned n, T x, const Policy&);
     
     template <class T1, class T2, class T3>
    -calculated-result-type hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);
    +BOOST_MATH_GPU_ENABLED calculated-result-type hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);
     
     }} // namespaces
     
    @@ -57,10 +57,10 @@ type.

    template <class T>
    -calculated-result-type hermite(unsigned n, T x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type hermite(unsigned n, T x);
     
     template <class T, class Policy>
    -calculated-result-type hermite(unsigned n, T x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type hermite(unsigned n, T x, const Policy&);
     

    Returns the value of the Hermite Polynomial of order n @@ -84,7 +84,7 @@

    template <class T1, class T2, class T3>
    -calculated-result-type hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);
    +BOOST_MATH_GPU_ENABLED calculated-result-type hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);
     

    Implements the three term recurrence relation for the Hermite polynomials, @@ -232,7 +232,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly/jacobi.html b/doc/html/math_toolkit/sf_poly/jacobi.html index 4cf07a1ef..9c3fec4c2 100644 --- a/doc/html/math_toolkit/sf_poly/jacobi.html +++ b/doc/html/math_toolkit/sf_poly/jacobi.html @@ -1,13 +1,13 @@ - + Jacobi Polynomials - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -96,14 +96,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/math_toolkit/sf_poly/laguerre.html b/doc/html/math_toolkit/sf_poly/laguerre.html index ce282a103..d4ed38b3c 100644 --- a/doc/html/math_toolkit/sf_poly/laguerre.html +++ b/doc/html/math_toolkit/sf_poly/laguerre.html @@ -1,9 +1,9 @@ - + Laguerre (and Associated) Polynomials - + @@ -375,7 +375,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly/legendre.html b/doc/html/math_toolkit/sf_poly/legendre.html index 65888f33e..34199b1f8 100644 --- a/doc/html/math_toolkit/sf_poly/legendre.html +++ b/doc/html/math_toolkit/sf_poly/legendre.html @@ -1,9 +1,9 @@ - + Legendre (and Associated) Polynomials - + @@ -642,7 +642,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly/legendre_stieltjes.html b/doc/html/math_toolkit/sf_poly/legendre_stieltjes.html index a8643d1a3..31be823b2 100644 --- a/doc/html/math_toolkit/sf_poly/legendre_stieltjes.html +++ b/doc/html/math_toolkit/sf_poly/legendre_stieltjes.html @@ -1,9 +1,9 @@ - + Legendre-Stieltjes Polynomials - + @@ -129,7 +129,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sf_poly/sph_harm.html b/doc/html/math_toolkit/sf_poly/sph_harm.html index a8c6b3e68..41aa452fa 100644 --- a/doc/html/math_toolkit/sf_poly/sph_harm.html +++ b/doc/html/math_toolkit/sf_poly/sph_harm.html @@ -1,9 +1,9 @@ - + Spherical Harmonics - + @@ -323,7 +323,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sign_functions.html b/doc/html/math_toolkit/sign_functions.html index d44a7585d..38d368887 100644 --- a/doc/html/math_toolkit/sign_functions.html +++ b/doc/html/math_toolkit/sign_functions.html @@ -1,9 +1,9 @@ - + Sign Manipulation Functions - + @@ -237,7 +237,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/signal_statistics.html b/doc/html/math_toolkit/signal_statistics.html index 4fa6b987b..ae6444e35 100644 --- a/doc/html/math_toolkit/signal_statistics.html +++ b/doc/html/math_toolkit/signal_statistics.html @@ -1,9 +1,9 @@ - + Signal Statistics - + @@ -321,7 +321,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sinc.html b/doc/html/math_toolkit/sinc.html index 1e0e1bb0f..8a1bf8a24 100644 --- a/doc/html/math_toolkit/sinc.html +++ b/doc/html/math_toolkit/sinc.html @@ -1,9 +1,9 @@ - + Sinus Cardinal and Hyperbolic Sinus Cardinal Functions - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sinc/sinc_overview.html b/doc/html/math_toolkit/sinc/sinc_overview.html index ab6d4fdd0..df63adb06 100644 --- a/doc/html/math_toolkit/sinc/sinc_overview.html +++ b/doc/html/math_toolkit/sinc/sinc_overview.html @@ -1,9 +1,9 @@ - + Sinus Cardinal and Hyperbolic Sinus Cardinal Functions Overview - + @@ -71,7 +71,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sinc/sinc_pi.html b/doc/html/math_toolkit/sinc/sinc_pi.html index 4d8981998..88d07b3e3 100644 --- a/doc/html/math_toolkit/sinc/sinc_pi.html +++ b/doc/html/math_toolkit/sinc/sinc_pi.html @@ -1,9 +1,9 @@ - + sinc_pi - + @@ -30,16 +30,16 @@
    #include <boost/math/special_functions/sinc.hpp>
     
    template<class T>
    -calculated-result-type sinc_pi(const T x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type sinc_pi(const T x);
     
     template<class T, class Policy>
    -calculated-result-type sinc_pi(const T x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type sinc_pi(const T x, const Policy&);
     
     template<class T, template<typename> class U>
    -U<T> sinc_pi(const U<T> x);
    +BOOST_MATH_GPU_ENABLED U<T> sinc_pi(const U<T> x);
     
     template<class T, template<typename> class U, class Policy>
    -U<T> sinc_pi(const U<T> x, const Policy&);
    +BOOST_MATH_GPU_ENABLED U<T> sinc_pi(const U<T> x, const Policy&);
     

    Computes the Sinus Cardinal @@ -67,7 +67,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/sinc/sinhc_pi.html b/doc/html/math_toolkit/sinc/sinhc_pi.html index 41e0e3445..92dede593 100644 --- a/doc/html/math_toolkit/sinc/sinhc_pi.html +++ b/doc/html/math_toolkit/sinc/sinhc_pi.html @@ -1,9 +1,9 @@ - + sinhc_pi - + @@ -30,10 +30,10 @@
    #include <boost/math/special_functions/sinhc.hpp>
     
    template<class T>
    -calculated-result-type sinhc_pi(const T x);
    +BOOST_MATH_GPU_ENABLED calculated-result-type sinhc_pi(const T x);
     
     template<class T, class Policy>
    -calculated-result-type sinhc_pi(const T x, const Policy&);
    +BOOST_MATH_GPU_ENABLED calculated-result-type sinhc_pi(const T x, const Policy&);
     
     template<typename T, template<typename> class U>
     U<T> sinhc_pi(const U<T> x);
    @@ -72,7 +72,7 @@
           Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno
           Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde,
           Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle
    -      Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/spec.html b/doc/html/math_toolkit/spec.html index 54de65acb..061b9f0cb 100644 --- a/doc/html/math_toolkit/spec.html +++ b/doc/html/math_toolkit/spec.html @@ -1,9 +1,9 @@ - + Quaternion Specializations - + @@ -178,7 +178,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/special_tut.html b/doc/html/math_toolkit/special_tut.html index 2e2e958df..d345e172b 100644 --- a/doc/html/math_toolkit/special_tut.html +++ b/doc/html/math_toolkit/special_tut.html @@ -1,9 +1,9 @@ - + Tutorial: How to Write a New Special Function - + @@ -37,7 +37,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/special_tut/special_tut_impl.html b/doc/html/math_toolkit/special_tut/special_tut_impl.html index 21c5c37a3..abb1f35f4 100644 --- a/doc/html/math_toolkit/special_tut/special_tut_impl.html +++ b/doc/html/math_toolkit/special_tut/special_tut_impl.html @@ -1,9 +1,9 @@ - + Implementation - + @@ -376,7 +376,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/special_tut/special_tut_test.html b/doc/html/math_toolkit/special_tut/special_tut_test.html index b88057e3b..74844e00e 100644 --- a/doc/html/math_toolkit/special_tut/special_tut_test.html +++ b/doc/html/math_toolkit/special_tut/special_tut_test.html @@ -1,9 +1,9 @@ - + Testing - + @@ -354,7 +354,7 @@ std::cout << "<note>The long double tests have been disabled on this platform " "either because the long double overloads of the usual math functions are " "not available at all, or because they are too inaccurate for these tests " - "to pass.</note>" << std::cout; + "to pass.</note>" << std::endl; #endif }
    @@ -511,7 +511,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/specified_typedefs.html b/doc/html/math_toolkit/specified_typedefs.html index 01fb88dfd..6009f99ce 100644 --- a/doc/html/math_toolkit/specified_typedefs.html +++ b/doc/html/math_toolkit/specified_typedefs.html @@ -1,9 +1,9 @@ - + Overview - + @@ -94,7 +94,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/standalone.html b/doc/html/math_toolkit/standalone.html index 43137148e..6b964fbc5 100644 --- a/doc/html/math_toolkit/standalone.html +++ b/doc/html/math_toolkit/standalone.html @@ -1,9 +1,9 @@ - + Standalone Usage - + @@ -72,7 +72,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut.html b/doc/html/math_toolkit/stat_tut.html index 3dfa96eab..8c8280537 100644 --- a/doc/html/math_toolkit/stat_tut.html +++ b/doc/html/math_toolkit/stat_tut.html @@ -1,9 +1,9 @@ - + Statistical Distributions Tutorial - + @@ -142,7 +142,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/dist_params.html b/doc/html/math_toolkit/stat_tut/dist_params.html index c2b57e7b9..7a8019d2a 100644 --- a/doc/html/math_toolkit/stat_tut/dist_params.html +++ b/doc/html/math_toolkit/stat_tut/dist_params.html @@ -1,9 +1,9 @@ - + Discrete Probability Distributions - + @@ -86,7 +86,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/overview.html b/doc/html/math_toolkit/stat_tut/overview.html index bbde10f4a..da8f8b014 100644 --- a/doc/html/math_toolkit/stat_tut/overview.html +++ b/doc/html/math_toolkit/stat_tut/overview.html @@ -1,9 +1,9 @@ - + Overview of Statistical Distributions - + @@ -46,7 +46,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/overview/complements.html b/doc/html/math_toolkit/stat_tut/overview/complements.html index 5f1f3fd6e..577c1c221 100644 --- a/doc/html/math_toolkit/stat_tut/overview/complements.html +++ b/doc/html/math_toolkit/stat_tut/overview/complements.html @@ -1,9 +1,9 @@ - + Complements are supported too - and when to use them - + @@ -186,7 +186,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/overview/generic.html b/doc/html/math_toolkit/stat_tut/overview/generic.html index 8fd3c26d3..e8a1faf9d 100644 --- a/doc/html/math_toolkit/stat_tut/overview/generic.html +++ b/doc/html/math_toolkit/stat_tut/overview/generic.html @@ -1,9 +1,9 @@ - + Generic operations common to all distributions are non-member functions - + @@ -46,6 +46,16 @@
    quantile(my_dist, p);  // Returns the value of the random variable x
                            // such that cdf(my_dist, x) == p.
     
    +

    + As are the logcdf (Natural log of the Cumulative Distribution Function): +

    +
    logcdf(my_dist, x); // Returns logcdf at at point x of distribution my_dist.
    +
    +

    + And the logpdf (Natural log of the Probability Density Function): +

    +
    logpdf(my_dist, x); // Returns logpdf at point x of distribution my_dist.
    +

    If you're wondering why these aren't member functions, it's to make the library more easily extensible: if you want to add additional generic operations @@ -53,6 +63,76 @@ do is add the appropriate non-member functions, overloaded for each implemented distribution type.

    +

    + The logcdf and logpdf functions are minimally calculated with log(cdf(my_dist, + x)), and log(pdf(my_dist, x)) respectively. The following distributions + have specialized implementations of the logcdf: +

    +
      +
    • + Exponential +
    • +
    • + Extreme Value +
    • +
    • + Geometric +
    • +
    • + Laplace +
    • +
    • + Logistic +
    • +
    • + Pareto +
    • +
    • + Rayleigh +
    • +
    • + Weibull +
    • +
    +

    + And the following distributions have specialized implementations of logpdf: +

    +
      +
    • + Exponential +
    • +
    • + Extreme Value +
    • +
    • + Gamma +
    • +
    • + Inverse Gamma +
    • +
    • + Inverse Gaussian +
    • +
    • + Laplace +
    • +
    • + Normal +
    • +
    • + Poisson +
    • +
    • + Rayleigh +
    • +
    • + Weibull +
    • +
    +

    + These above listed specialized implementations allow a higher degree of + precision than can be obtained through the naive generic method. +

    @@ -243,7 +323,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/overview/headers.html b/doc/html/math_toolkit/stat_tut/overview/headers.html index 8bd7edd3b..205685b8b 100644 --- a/doc/html/math_toolkit/stat_tut/overview/headers.html +++ b/doc/html/math_toolkit/stat_tut/overview/headers.html @@ -1,9 +1,9 @@ - +Headers and Namespaces - + @@ -65,7 +65,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/overview/objects.html b/doc/html/math_toolkit/stat_tut/overview/objects.html index b6394bc1b..88588afcb 100644 --- a/doc/html/math_toolkit/stat_tut/overview/objects.html +++ b/doc/html/math_toolkit/stat_tut/overview/objects.html @@ -1,9 +1,9 @@ - +Distributions are Objects - + @@ -121,7 +121,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/overview/parameters.html b/doc/html/math_toolkit/stat_tut/overview/parameters.html index 3776ae1e4..fdaaca4a1 100644 --- a/doc/html/math_toolkit/stat_tut/overview/parameters.html +++ b/doc/html/math_toolkit/stat_tut/overview/parameters.html @@ -1,9 +1,9 @@ - +Parameters can be calculated - + @@ -59,7 +59,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/overview/summary.html b/doc/html/math_toolkit/stat_tut/overview/summary.html index 9acc5d898..c39a76641 100644 --- a/doc/html/math_toolkit/stat_tut/overview/summary.html +++ b/doc/html/math_toolkit/stat_tut/overview/summary.html @@ -1,9 +1,9 @@ - +Summary - + @@ -61,7 +61,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/variates.html b/doc/html/math_toolkit/stat_tut/variates.html index e53c35131..3cab42af9 100644 --- a/doc/html/math_toolkit/stat_tut/variates.html +++ b/doc/html/math_toolkit/stat_tut/variates.html @@ -1,9 +1,9 @@ - +Random Variates and Distribution Parameters - + @@ -62,7 +62,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg.html b/doc/html/math_toolkit/stat_tut/weg.html index ae65e0521..a4a4419f2 100644 --- a/doc/html/math_toolkit/stat_tut/weg.html +++ b/doc/html/math_toolkit/stat_tut/weg.html @@ -1,9 +1,9 @@ - +Worked Examples - + @@ -115,7 +115,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/binom_eg.html b/doc/html/math_toolkit/stat_tut/weg/binom_eg.html index 10742eb64..b85a292e2 100644 --- a/doc/html/math_toolkit/stat_tut/weg/binom_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/binom_eg.html @@ -1,9 +1,9 @@ - +Binomial Distribution Examples - + @@ -47,7 +47,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/binom_eg/binom_conf.html b/doc/html/math_toolkit/stat_tut/weg/binom_eg/binom_conf.html index bca6b5a78..e46a69c38 100644 --- a/doc/html/math_toolkit/stat_tut/weg/binom_eg/binom_conf.html +++ b/doc/html/math_toolkit/stat_tut/weg/binom_eg/binom_conf.html @@ -1,9 +1,9 @@ - +Calculating Confidence Limits on the Frequency of Occurrence for a Binomial Distribution - + @@ -227,7 +227,7 @@ _______________________________________________________________________ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/binom_eg/binom_size_eg.html b/doc/html/math_toolkit/stat_tut/weg/binom_eg/binom_size_eg.html index 849d02f77..4de329bea 100644 --- a/doc/html/math_toolkit/stat_tut/weg/binom_eg/binom_size_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/binom_eg/binom_size_eg.html @@ -1,9 +1,9 @@ - +Estimating Sample Sizes for a Binomial Distribution. - + @@ -146,7 +146,7 @@ ____________________________ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/binom_eg/binomial_coinflip_example.html b/doc/html/math_toolkit/stat_tut/weg/binom_eg/binomial_coinflip_example.html index 011b9763a..094164399 100644 --- a/doc/html/math_toolkit/stat_tut/weg/binom_eg/binomial_coinflip_example.html +++ b/doc/html/math_toolkit/stat_tut/weg/binom_eg/binomial_coinflip_example.html @@ -1,9 +1,9 @@ - +Binomial Coin-Flipping Example - + @@ -266,7 +266,7 @@ Probability of getting up to (<=) heads Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/binom_eg/binomial_quiz_example.html b/doc/html/math_toolkit/stat_tut/weg/binom_eg/binomial_quiz_example.html index 55810e037..cb50fd378 100644 --- a/doc/html/math_toolkit/stat_tut/weg/binom_eg/binomial_quiz_example.html +++ b/doc/html/math_toolkit/stat_tut/weg/binom_eg/binomial_quiz_example.html @@ -1,9 +1,9 @@ - +Binomial Quiz Example - + @@ -444,7 +444,7 @@ If guessing then percentiles 1 to 99% will get 0 to 7.788 right. Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/c_sharp.html b/doc/html/math_toolkit/stat_tut/weg/c_sharp.html index e76d0706c..8eb810aaf 100644 --- a/doc/html/math_toolkit/stat_tut/weg/c_sharp.html +++ b/doc/html/math_toolkit/stat_tut/weg/c_sharp.html @@ -1,9 +1,9 @@ - +Using the Distributions from Within C# - + @@ -44,7 +44,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/cs_eg.html b/doc/html/math_toolkit/stat_tut/weg/cs_eg.html index ca94a0da1..560077f14 100644 --- a/doc/html/math_toolkit/stat_tut/weg/cs_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/cs_eg.html @@ -1,9 +1,9 @@ - +Chi Squared Distribution Examples - + @@ -41,7 +41,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_intervals.html b/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_intervals.html index 6da1e2c5f..30cef2efc 100644 --- a/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_intervals.html +++ b/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_intervals.html @@ -1,9 +1,9 @@ - +Confidence Intervals on the Standard Deviation - + @@ -236,7 +236,7 @@ ________________________________________ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_size.html b/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_size.html index 866f3d33c..fdf6d09ca 100644 --- a/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_size.html +++ b/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_size.html @@ -1,9 +1,9 @@ - +Estimating the Required Sample Sizes for a Chi-Square Test for the Standard Deviation - + @@ -168,7 +168,7 @@ _______________________________________________________________ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_test.html b/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_test.html index 576368e83..b4b780a01 100644 --- a/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_test.html +++ b/doc/html/math_toolkit/stat_tut/weg/cs_eg/chi_sq_test.html @@ -1,9 +1,9 @@ - +Chi-Square Test for the Standard Deviation - + @@ -283,7 +283,7 @@ Standard Deviation > 10.000 ACCEPTED Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/dist_construct_eg.html b/doc/html/math_toolkit/stat_tut/weg/dist_construct_eg.html index b576708e2..520e2cefc 100644 --- a/doc/html/math_toolkit/stat_tut/weg/dist_construct_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/dist_construct_eg.html @@ -1,9 +1,9 @@ - +Distribution Construction Examples - + @@ -334,7 +334,7 @@ error C3861: 'mybetad0': identifier not found Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/error_eg.html b/doc/html/math_toolkit/stat_tut/weg/error_eg.html index 5fc9304fc..10e39bcf2 100644 --- a/doc/html/math_toolkit/stat_tut/weg/error_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/error_eg.html @@ -1,9 +1,9 @@ - +Error Handling Example - + @@ -192,7 +192,7 @@ errno is set to: 33 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/f_eg.html b/doc/html/math_toolkit/stat_tut/weg/f_eg.html index f60a13820..9bd848ecb 100644 --- a/doc/html/math_toolkit/stat_tut/weg/f_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/f_eg.html @@ -1,9 +1,9 @@ - +F Distribution Examples - + @@ -315,7 +315,7 @@ Standard deviation 1 is greater than standard deviation 2 ACCEPTED Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/find_eg.html b/doc/html/math_toolkit/stat_tut/weg/find_eg.html index 7390f77dd..f06d0e5e9 100644 --- a/doc/html/math_toolkit/stat_tut/weg/find_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/find_eg.html @@ -1,9 +1,9 @@ - +Find Location and Scale Examples - + @@ -41,7 +41,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/find_eg/find_location_eg.html b/doc/html/math_toolkit/stat_tut/weg/find_eg/find_location_eg.html index bd4fcba8e..8f0c53c34 100644 --- a/doc/html/math_toolkit/stat_tut/weg/find_eg/find_location_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/find_eg/find_location_eg.html @@ -1,9 +1,9 @@ - +Find Location (Mean) Example - + @@ -176,7 +176,7 @@ Normal distribution with mean = 0.355146 has fraction > 2 = 0.05 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/find_eg/find_mean_and_sd_eg.html b/doc/html/math_toolkit/stat_tut/weg/find_eg/find_mean_and_sd_eg.html index abc3db975..c0623742e 100644 --- a/doc/html/math_toolkit/stat_tut/weg/find_eg/find_mean_and_sd_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/find_eg/find_mean_and_sd_eg.html @@ -1,9 +1,9 @@ - +Find mean and standard deviation example - + @@ -441,7 +441,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/find_eg/find_scale_eg.html b/doc/html/math_toolkit/stat_tut/weg/find_eg/find_scale_eg.html index 50a0fd162..dddc3c391 100644 --- a/doc/html/math_toolkit/stat_tut/weg/find_eg/find_scale_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/find_eg/find_scale_eg.html @@ -1,9 +1,9 @@ - +Find Scale (Standard Deviation) Example - + @@ -195,7 +195,7 @@ Normal distribution with mean = 0.946339 has fraction > -2 = 0.999 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/geometric_eg.html b/doc/html/math_toolkit/stat_tut/weg/geometric_eg.html index 500f6bf70..1a7a75643 100644 --- a/doc/html/math_toolkit/stat_tut/weg/geometric_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/geometric_eg.html @@ -1,9 +1,9 @@ - +Geometric Distribution Examples - + @@ -408,7 +408,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/inverse_chi_squared_eg.html b/doc/html/math_toolkit/stat_tut/weg/inverse_chi_squared_eg.html index 788137d6d..519555409 100644 --- a/doc/html/math_toolkit/stat_tut/weg/inverse_chi_squared_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/inverse_chi_squared_eg.html @@ -1,9 +1,9 @@ - +Inverse Chi-Squared Distribution Bayes Example - + @@ -347,7 +347,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/nag_library.html b/doc/html/math_toolkit/stat_tut/weg/nag_library.html index 52f9b177c..87855e607 100644 --- a/doc/html/math_toolkit/stat_tut/weg/nag_library.html +++ b/doc/html/math_toolkit/stat_tut/weg/nag_library.html @@ -1,9 +1,9 @@ - +Comparison with C, R, FORTRAN-style Free Functions - + @@ -102,7 +102,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/nccs_eg.html b/doc/html/math_toolkit/stat_tut/weg/nccs_eg.html index bfeafc5a5..3adf085c5 100644 --- a/doc/html/math_toolkit/stat_tut/weg/nccs_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/nccs_eg.html @@ -1,9 +1,9 @@ - +Non Central Chi Squared Example - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/nccs_eg/nccs_power_eg.html b/doc/html/math_toolkit/stat_tut/weg/nccs_eg/nccs_power_eg.html index 95f5fc6a7..820063e07 100644 --- a/doc/html/math_toolkit/stat_tut/weg/nccs_eg/nccs_power_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/nccs_eg/nccs_power_eg.html @@ -1,9 +1,9 @@ - +Tables of the power function of the chi2 test. - + @@ -1273,7 +1273,7 @@ test at the 5% significance Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg.html b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg.html index 99d58c7ec..ca2eb5774 100644 --- a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg.html @@ -1,9 +1,9 @@ - +Negative Binomial Distribution Examples - + @@ -48,7 +48,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/neg_binom_conf.html b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/neg_binom_conf.html index 5af7b44af..2ea63d8d8 100644 --- a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/neg_binom_conf.html +++ b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/neg_binom_conf.html @@ -1,9 +1,9 @@ - +Calculating Confidence Limits on the Frequency of Occurrence for the Negative Binomial Distribution - + @@ -207,7 +207,7 @@ ___________________________________________ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/neg_binom_size_eg.html b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/neg_binom_size_eg.html index d424dca31..df41deef9 100644 --- a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/neg_binom_size_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/neg_binom_size_eg.html @@ -1,9 +1,9 @@ - +Estimating Sample Sizes for the Negative Binomial. - + @@ -193,7 +193,7 @@ ____________________________ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/negative_binomial_example1.html b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/negative_binomial_example1.html index 5f9021533..a67b42f89 100644 --- a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/negative_binomial_example1.html +++ b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/negative_binomial_example1.html @@ -1,9 +1,9 @@ - +Negative Binomial Sales Quota Example. - + @@ -481,7 +481,7 @@ If confidence of meeting quota is 0.95, then finishing house is 21 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/negative_binomial_example2.html b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/negative_binomial_example2.html index 176f14a0c..8ada4b306 100644 --- a/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/negative_binomial_example2.html +++ b/doc/html/math_toolkit/stat_tut/weg/neg_binom_eg/negative_binomial_example2.html @@ -1,9 +1,9 @@ - +Negative Binomial Table Printing Example. - + @@ -122,7 +122,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/normal_example.html b/doc/html/math_toolkit/stat_tut/weg/normal_example.html index 188a7a297..c666e78c6 100644 --- a/doc/html/math_toolkit/stat_tut/weg/normal_example.html +++ b/doc/html/math_toolkit/stat_tut/weg/normal_example.html @@ -1,9 +1,9 @@ - +Normal Distribution Examples - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/normal_example/normal_misc.html b/doc/html/math_toolkit/stat_tut/weg/normal_example/normal_misc.html index 539ae5401..f1586ba7f 100644 --- a/doc/html/math_toolkit/stat_tut/weg/normal_example/normal_misc.html +++ b/doc/html/math_toolkit/stat_tut/weg/normal_example/normal_misc.html @@ -1,9 +1,9 @@ - +Some Miscellaneous Examples of the Normal (Gaussian) Distribution - + @@ -504,7 +504,7 @@ Fraction 3 standard deviations within either side of mean is 0.997300203936740 Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/st_eg.html b/doc/html/math_toolkit/stat_tut/weg/st_eg.html index 253fa0428..5868933c3 100644 --- a/doc/html/math_toolkit/stat_tut/weg/st_eg.html +++ b/doc/html/math_toolkit/stat_tut/weg/st_eg.html @@ -1,9 +1,9 @@ - +Student's t Distribution Examples - + @@ -46,7 +46,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/st_eg/paired_st.html b/doc/html/math_toolkit/stat_tut/weg/st_eg/paired_st.html index 545837ce2..befa26277 100644 --- a/doc/html/math_toolkit/stat_tut/weg/st_eg/paired_st.html +++ b/doc/html/math_toolkit/stat_tut/weg/st_eg/paired_st.html @@ -1,9 +1,9 @@ - +Comparing two paired samples with the Student's t distribution - + @@ -51,7 +51,7 @@ that there is no change.
  • - Test + Test whether the true mean is zero. If the result is consistent with a true mean of zero, then we are unable to reject the null-hypothesis that there is no change. @@ -67,7 +67,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_intervals.html b/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_intervals.html index 53a6bf8f0..f44f04fcf 100644 --- a/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_intervals.html +++ b/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_intervals.html @@ -1,13 +1,13 @@ - + Calculating confidence intervals on the mean with the Students-t distribution - + - + @@ -254,7 +254,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_size.html b/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_size.html index b517d9c5a..692d5f50e 100644 --- a/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_size.html +++ b/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_size.html @@ -1,12 +1,12 @@ - + Estimating how large a sample size would have to become in order to give a significant Students-t test result with a single sample test - + - + @@ -165,7 +165,7 @@ _______________________________________________________________ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_test.html b/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_test.html index 151789b57..112fb4b1b 100644 --- a/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_test.html +++ b/doc/html/math_toolkit/stat_tut/weg/st_eg/tut_mean_test.html @@ -1,9 +1,9 @@ - + Testing a sample mean for difference from a "true" mean - + @@ -25,7 +25,7 @@

    @@ -320,7 +320,7 @@ Mean > 38.900 REJECTED Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/stat_tut/weg/st_eg/two_sample_students_t.html b/doc/html/math_toolkit/stat_tut/weg/st_eg/two_sample_students_t.html index 3b79fbcd4..1fa0c17f8 100644 --- a/doc/html/math_toolkit/stat_tut/weg/st_eg/two_sample_students_t.html +++ b/doc/html/math_toolkit/stat_tut/weg/st_eg/two_sample_students_t.html @@ -1,9 +1,9 @@ - + Comparing the means of two samples with the Students-t test - + @@ -348,7 +348,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/t_test.html b/doc/html/math_toolkit/t_test.html index dd984073e..2cc2df91d 100644 --- a/doc/html/math_toolkit/t_test.html +++ b/doc/html/math_toolkit/t_test.html @@ -1,9 +1,9 @@ - + t-tests - + @@ -259,7 +259,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/threads.html b/doc/html/math_toolkit/threads.html index 5ef7cfbd4..2fec37ebb 100644 --- a/doc/html/math_toolkit/threads.html +++ b/doc/html/math_toolkit/threads.html @@ -1,9 +1,9 @@ - + Thread Safety - + @@ -38,7 +38,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/tr1_ref.html b/doc/html/math_toolkit/tr1_ref.html index 0ece2e9cd..a42d4987d 100644 --- a/doc/html/math_toolkit/tr1_ref.html +++ b/doc/html/math_toolkit/tr1_ref.html @@ -1,11 +1,11 @@ - + TR1 C Functions Quick Reference - + - + @@ -545,7 +545,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/tradoffs.html b/doc/html/math_toolkit/tradoffs.html index ef923c3d9..1cf66a31d 100644 --- a/doc/html/math_toolkit/tradoffs.html +++ b/doc/html/math_toolkit/tradoffs.html @@ -1,9 +1,9 @@ - + Trading Accuracy for Performance - + @@ -2554,7 +2554,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/trans.html b/doc/html/math_toolkit/trans.html index fa24f731a..73f44dbd7 100644 --- a/doc/html/math_toolkit/trans.html +++ b/doc/html/math_toolkit/trans.html @@ -1,9 +1,9 @@ - + Quaternion Transcendentals - + @@ -130,7 +130,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/trapezoidal.html b/doc/html/math_toolkit/trapezoidal.html index d94c49684..f49eac7f2 100644 --- a/doc/html/math_toolkit/trapezoidal.html +++ b/doc/html/math_toolkit/trapezoidal.html @@ -1,9 +1,9 @@ - + Trapezoidal Quadrature - + @@ -231,7 +231,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/tuning.html b/doc/html/math_toolkit/tuning.html index 5d76e2bba..3ebb62263 100644 --- a/doc/html/math_toolkit/tuning.html +++ b/doc/html/math_toolkit/tuning.html @@ -1,9 +1,9 @@ - + Performance Tuning Macros - + @@ -7914,7 +7914,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/tutorial.html b/doc/html/math_toolkit/tutorial.html index 64dc15bda..a443a5a08 100644 --- a/doc/html/math_toolkit/tutorial.html +++ b/doc/html/math_toolkit/tutorial.html @@ -1,9 +1,9 @@ - + Tutorial - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/tutorial/non_templ.html b/doc/html/math_toolkit/tutorial/non_templ.html index aaf075dcb..55d526629 100644 --- a/doc/html/math_toolkit/tutorial/non_templ.html +++ b/doc/html/math_toolkit/tutorial/non_templ.html @@ -1,9 +1,9 @@ - + Use in non-template code - + @@ -72,7 +72,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/tutorial/templ.html b/doc/html/math_toolkit/tutorial/templ.html index 53cf4e929..85381c0c4 100644 --- a/doc/html/math_toolkit/tutorial/templ.html +++ b/doc/html/math_toolkit/tutorial/templ.html @@ -1,9 +1,9 @@ - + Use in template code - + @@ -143,7 +143,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/tutorial/user_def.html b/doc/html/math_toolkit/tutorial/user_def.html index 9d4a4402c..9f7f06f03 100644 --- a/doc/html/math_toolkit/tutorial/user_def.html +++ b/doc/html/math_toolkit/tutorial/user_def.html @@ -1,9 +1,9 @@ - + Use With User-Defined Types - + @@ -250,6 +250,17 @@
  • [Tip]
    + GPU + Support +
    +

    + All Boost.Math constants are marked with BOOST_MATH_GPU_ENABLED + and can be used on both host and device. Note that when running on device + you are limited to using only float + and double types. +

    +
    + Custom Specializing a constant
    @@ -281,7 +292,7 @@ }}}} // namespaces
    - + Diagnosing what meta-programmed code is doing
    @@ -322,7 +333,7 @@ the constant will be constructed from a string on each call. Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/ulps_plots.html b/doc/html/math_toolkit/ulps_plots.html index f14816040..3a12a22ad 100644 --- a/doc/html/math_toolkit/ulps_plots.html +++ b/doc/html/math_toolkit/ulps_plots.html @@ -1,9 +1,9 @@ - + ULPs Plots - + @@ -213,7 +213,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/univariate_statistics.html b/doc/html/math_toolkit/univariate_statistics.html index c309f99c7..06c5738fd 100644 --- a/doc/html/math_toolkit/univariate_statistics.html +++ b/doc/html/math_toolkit/univariate_statistics.html @@ -1,9 +1,9 @@ - + Univariate Statistics - + @@ -528,7 +528,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/value_op.html b/doc/html/math_toolkit/value_op.html index cf4b6dc28..b587ffa3a 100644 --- a/doc/html/math_toolkit/value_op.html +++ b/doc/html/math_toolkit/value_op.html @@ -1,9 +1,9 @@ - + Quaternion Value Operations - + @@ -95,7 +95,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/vector_barycentric.html b/doc/html/math_toolkit/vector_barycentric.html index 3a7c3de9f..64963ddc2 100644 --- a/doc/html/math_toolkit/vector_barycentric.html +++ b/doc/html/math_toolkit/vector_barycentric.html @@ -1,9 +1,9 @@ - + Vector-valued Barycentric Rational Interpolation - + @@ -114,7 +114,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/wavelet_transforms.html b/doc/html/math_toolkit/wavelet_transforms.html index 55e83a770..b8922c9a6 100644 --- a/doc/html/math_toolkit/wavelet_transforms.html +++ b/doc/html/math_toolkit/wavelet_transforms.html @@ -1,9 +1,9 @@ - + Wavelet Transforms - + @@ -95,7 +95,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/whittaker_shannon.html b/doc/html/math_toolkit/whittaker_shannon.html index 242ee4306..5ee076ac1 100644 --- a/doc/html/math_toolkit/whittaker_shannon.html +++ b/doc/html/math_toolkit/whittaker_shannon.html @@ -1,9 +1,9 @@ - + Whittaker-Shannon interpolation - + @@ -104,7 +104,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/z_test.html b/doc/html/math_toolkit/z_test.html index bbda367fa..151666480 100644 --- a/doc/html/math_toolkit/z_test.html +++ b/doc/html/math_toolkit/z_test.html @@ -1,9 +1,9 @@ - + z-tests - + @@ -50,12 +50,6 @@ template<typename Container, typename Real = typename Container::value_type> std::pair<Real, Real> two_sample_z_test(Container const & u, Container const & v); -template<typename ForwardIterator, typename Real = typename std::iterator_traits<ForwardIterator>::value_type> -std::pair<Real, Real> paired_samples_z_test(ForwardIterator begin_1, ForwardIterator end_1, ForwardIterator begin_2, ForwardIterator begin_2); - -template<typename Container, typename Real = typename Container::value_type> -std::pair<Real, Real> paired_samples_z_test(Container const & u, Container const & v); - }}}

    @@ -160,7 +154,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/zetas.html b/doc/html/math_toolkit/zetas.html index f38d0e8ce..d772417e1 100644 --- a/doc/html/math_toolkit/zetas.html +++ b/doc/html/math_toolkit/zetas.html @@ -1,9 +1,9 @@ - + Zeta Functions - + @@ -33,7 +33,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/math_toolkit/zetas/zeta.html b/doc/html/math_toolkit/zetas/zeta.html index 4a517596c..ca0fd2671 100644 --- a/doc/html/math_toolkit/zetas/zeta.html +++ b/doc/html/math_toolkit/zetas/zeta.html @@ -1,9 +1,9 @@ - + Riemann Zeta Function - + @@ -392,7 +392,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/octonions.html b/doc/html/octonions.html index acb41c9d7..8f5209073 100644 --- a/doc/html/octonions.html +++ b/doc/html/octonions.html @@ -1,9 +1,9 @@ - + Chapter 18. Octonions - + @@ -51,7 +51,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/optimization.html b/doc/html/optimization.html index b4ab502bd..56db63645 100644 --- a/doc/html/optimization.html +++ b/doc/html/optimization.html @@ -1,9 +1,9 @@ - + Chapter 11. Optimization - + @@ -34,6 +34,16 @@
    Random Search
    Evolution Strategy with Covariance Matrix Adaptation
    +
    Gradient Based Optimizers
    +
    +
    Introduction
    +
    Gradient Descent
    +
    Nesterov Accelerated Gradient + Descent
    +
    L-BFGS
    +
    minimize
    +
    Reverse Mode autodiff policies
    +

    @@ -41,7 +51,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/overview.html b/doc/html/overview.html index 2fe65ad1b..7e7e6439b 100644 --- a/doc/html/overview.html +++ b/doc/html/overview.html @@ -1,9 +1,9 @@ - + Chapter 1. Overview - + @@ -39,6 +39,7 @@
    Calculation of the Type of the Result
    Error Handling
    +
    Support for GPU programming in Boost.Math
    Compilers
    Configuration Macros
    Policies
    @@ -58,7 +59,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/perf.html b/doc/html/perf.html index 7b6abe893..6d22b7787 100644 --- a/doc/html/perf.html +++ b/doc/html/perf.html @@ -1,9 +1,9 @@ - + Chapter 23. Performance - + @@ -48,7 +48,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/policy.html b/doc/html/policy.html index e4ee830b8..7d7fe7821 100644 --- a/doc/html/policy.html +++ b/doc/html/policy.html @@ -1,9 +1,9 @@ - + Chapter 22. Policies: Controlling Precision, Error Handling etc - + @@ -77,7 +77,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/poly.html b/doc/html/poly.html index 65fb08f74..fac0cced9 100644 --- a/doc/html/poly.html +++ b/doc/html/poly.html @@ -1,12 +1,12 @@ - + Chapter 12. Polynomials and Rational Functions - + - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -40,14 +40,14 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/quadrature.html b/doc/html/quadrature.html index 10a1e895f..9041b488a 100644 --- a/doc/html/quadrature.html +++ b/doc/html/quadrature.html @@ -1,9 +1,9 @@ - + Chapter 14. Quadrature and Differentiation - + @@ -46,6 +46,7 @@ Maximum Interval Halvings and Memory Requirements
    Thread Safety
    Caveats
    +
    GPU Usage
    References
    Fourier Integrals
    @@ -53,6 +54,7 @@
    Wavelet Transforms
    Numerical Differentiation
    Automatic Differentiation
    +
    Reverse Mode Automatic Differentiation
    Lanczos Smoothing Derivatives
    @@ -61,7 +63,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/quaternions.html b/doc/html/quaternions.html index c52216781..807213ad4 100644 --- a/doc/html/quaternions.html +++ b/doc/html/quaternions.html @@ -1,9 +1,9 @@ - + Chapter 17. Quaternions - + @@ -52,7 +52,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/root_finding.html b/doc/html/root_finding.html index b5c76f8fb..76488e2bf 100644 --- a/doc/html/root_finding.html +++ b/doc/html/root_finding.html @@ -1,9 +1,9 @@ - + Chapter 10. Root Finding & Minimization Algorithms - + @@ -42,7 +42,7 @@
    Implementation
    Root Finding With Derivatives: - Newton-Raphson, Halley & Schröder
    + Newton-Raphson, Halley & Schroeder
    Roots of Cubic Polynomials
    Roots of Quartic Polynomials
    Examples of Root-Finding @@ -89,7 +89,7 @@ algorithm.

    - For root-finding with derivatives + For root-finding with derivatives the methods of Newton-Raphson iteration, Halley, and Schröder are implemented. @@ -121,7 +121,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/special.html b/doc/html/special.html index d4a238898..543c51137 100644 --- a/doc/html/special.html +++ b/doc/html/special.html @@ -1,9 +1,9 @@ - + Chapter 8. Special Functions - + @@ -92,6 +92,11 @@
    Gegenbauer Polynomials
    Jacobi Polynomials
    +
    Logistic Functions
    +
    +
    logit
    +
    logistic_sigmoid
    +
    Bessel Functions
    Bessel Function Overview
    @@ -245,7 +250,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/standalone_HTML.manifest b/doc/html/standalone_HTML.manifest index 864f3bad9..57ce0d9d8 100644 --- a/doc/html/standalone_HTML.manifest +++ b/doc/html/standalone_HTML.manifest @@ -9,6 +9,7 @@ math_toolkit/namespaces.html math_toolkit/standalone.html math_toolkit/result_type.html math_toolkit/error_handling.html +math_toolkit/gpu.html math_toolkit/compilers_overview.html math_toolkit/config_macros.html math_toolkit/intro_pol_overview.html @@ -127,15 +128,18 @@ math_toolkit/dist_ref/dists/extreme_dist.html math_toolkit/dist_ref/dists/f_dist.html math_toolkit/dist_ref/dists/gamma_dist.html math_toolkit/dist_ref/dists/geometric_dist.html +math_toolkit/dist_ref/dists/holtsmark_dist.html math_toolkit/dist_ref/dists/hyperexponential_dist.html math_toolkit/dist_ref/dists/hypergeometric_dist.html math_toolkit/dist_ref/dists/inverse_chi_squared_dist.html math_toolkit/dist_ref/dists/inverse_gamma_dist.html math_toolkit/dist_ref/dists/inverse_gaussian_dist.html math_toolkit/dist_ref/dists/kolmogorov_smirnov_dist.html +math_toolkit/dist_ref/dists/landau_dist.html math_toolkit/dist_ref/dists/laplace_dist.html math_toolkit/dist_ref/dists/logistic_dist.html math_toolkit/dist_ref/dists/lognormal_dist.html +math_toolkit/dist_ref/dists/mapairy_dist.html math_toolkit/dist_ref/dists/negative_binomial_dist.html math_toolkit/dist_ref/dists/nc_beta_dist.html math_toolkit/dist_ref/dists/nc_chi_squared_dist.html @@ -145,6 +149,7 @@ math_toolkit/dist_ref/dists/normal_dist.html math_toolkit/dist_ref/dists/pareto.html math_toolkit/dist_ref/dists/poisson_dist.html math_toolkit/dist_ref/dists/rayleigh.html +math_toolkit/dist_ref/dists/saspoint5_dist.html math_toolkit/dist_ref/dists/skew_normal_dist.html math_toolkit/dist_ref/dists/students_t_dist.html math_toolkit/dist_ref/dists/triangular_dist.html @@ -205,6 +210,9 @@ math_toolkit/sf_poly/sph_harm.html math_toolkit/sf_poly/cardinal_b_splines.html math_toolkit/sf_poly/gegenbauer.html math_toolkit/sf_poly/jacobi.html +math_toolkit/logistic.html +math_toolkit/logistic/logit.html +math_toolkit/logistic/logistic_sigmoid.html math_toolkit/bessel.html math_toolkit/bessel/bessel_over.html math_toolkit/bessel/bessel_first.html @@ -322,6 +330,13 @@ math_toolkit/differential_evolution.html math_toolkit/jso.html math_toolkit/random_search.html math_toolkit/cma_es.html +math_toolkit/gd_opt.html +math_toolkit/gd_opt/introduction.html +math_toolkit/gd_opt/gradient_descent.html +math_toolkit/gd_opt/nesterov.html +math_toolkit/gd_opt/lbfgs.html +math_toolkit/gd_opt/minimize.html +math_toolkit/gd_opt/policies.html poly.html math_toolkit/polynomials.html math_toolkit/estrin.html @@ -355,12 +370,14 @@ math_toolkit/double_exponential/de_tol.html math_toolkit/double_exponential/de_levels.html math_toolkit/double_exponential/de_thread.html math_toolkit/double_exponential/de_caveats.html +math_toolkit/double_exponential/gpu_usage.html math_toolkit/double_exponential/de_refes.html math_toolkit/fourier_integrals.html math_toolkit/naive_monte_carlo.html math_toolkit/wavelet_transforms.html math_toolkit/diff.html math_toolkit/autodiff.html +math_toolkit/autodiff0.html math_toolkit/diff0.html filters.html math_toolkit/daubechies_filters.html diff --git a/doc/html/statistics.html b/doc/html/statistics.html index 4587fdcc9..f341a8321 100644 --- a/doc/html/statistics.html +++ b/doc/html/statistics.html @@ -1,9 +1,9 @@ - + Chapter 6. Statistics - + @@ -46,7 +46,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/status.html b/doc/html/status.html index 7df20600c..cd1290a29 100644 --- a/doc/html/status.html +++ b/doc/html/status.html @@ -1,9 +1,9 @@ - + Chapter 25. Library Status - + @@ -39,7 +39,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/using_udt.html b/doc/html/using_udt.html index 23f10a352..b1cbbfc06 100644 --- a/doc/html/using_udt.html +++ b/doc/html/using_udt.html @@ -1,9 +1,9 @@ - + Chapter 21. Use with User-Defined Floating-Point Types - Boost.Multiprecision and others - + @@ -59,7 +59,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/utils.html b/doc/html/utils.html index 1f860241c..75406ad49 100644 --- a/doc/html/utils.html +++ b/doc/html/utils.html @@ -1,9 +1,9 @@ - + Chapter 2. Floating Point Utilities - + @@ -75,7 +75,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/html/vector_functionals.html b/doc/html/vector_functionals.html index 877256f5f..264af3eff 100644 --- a/doc/html/vector_functionals.html +++ b/doc/html/vector_functionals.html @@ -1,9 +1,9 @@ - + Chapter 7. Vector Functionals - Norms - + @@ -35,7 +35,7 @@ Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle - Walker and Xiaogang Zhang

    + Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov

    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)

    diff --git a/doc/math.qbk b/doc/math.qbk index 1f479b2d4..f48c87b88 100644 --- a/doc/math.qbk +++ b/doc/math.qbk @@ -1,13 +1,13 @@ [book Math Toolkit [quickbook 1.7] - [copyright 2006-2021 Nikhar Agrawal, Anton Bikineev, Matthew Borland, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle Walker and Xiaogang Zhang] + [copyright 2006-2021 Nikhar Agrawal, Anton Bikineev, Matthew Borland, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle Walker, Xiaogang Zhang, and Maksym Zhelyeznyakov] [/purpose ISBN 0-9504833-2-X 978-0-9504833-2-0, Classification 519.2-dc22] [license 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]) ] - [authors [Agrawal, Nikhar], [Bikineev, Anton], [Borland, Matthew], [Bristow, Paul A.], [Holin, Hubert], [Guazzone, Marco], [Kormanyos, Christopher], [Lalande, Bruno], [Maddock, John], [Miller, Evan], [Murphy, Jeremy W.], [Pulver, Matthew], [Råde, Johan], [Sobotta, Benjamin], [Sewani, Gautam], [Thompson, Nicholas], [van den Berg, Thijs], [Walker, Daryle], [Zhang, Xiaogang]] + [authors [Agrawal, Nikhar], [Bikineev, Anton], [Borland, Matthew], [Bristow, Paul A.], [Holin, Hubert], [Guazzone, Marco], [Kormanyos, Christopher], [Lalande, Bruno], [Maddock, John], [Miller, Evan], [Murphy, Jeremy W.], [Pulver, Matthew], [Råde, Johan], [Sobotta, Benjamin], [Sewani, Gautam], [Thompson, Nicholas], [van den Berg, Thijs], [Walker, Daryle], [Zhang, Xiaogang], [Zhelyeznyakov, Maksym]] [/last-revision $Date$] [version 4.2.1] ] @@ -739,6 +739,7 @@ and as a CD ISBN 0-9504833-2-X 978-0-9504833-2-0, Classification 519.2-dc22. [include optimization/jso.qbk] [include optimization/random_search.qbk] [include optimization/cma_es.qbk] +[include optimization/gradient_optimizers.qbk] [endmathpart] [/mathpart optimization Optimization] [mathpart poly Polynomials and Rational Functions] diff --git a/doc/optimization/gradient_optimizers.qbk b/doc/optimization/gradient_optimizers.qbk new file mode 100644 index 000000000..f9c0001bd --- /dev/null +++ b/doc/optimization/gradient_optimizers.qbk @@ -0,0 +1,1318 @@ +[/ +Copyright (c) 2025-2026 Maksym Zhelyeznyakov +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) +] + +[section:gd_opt Gradient Based Optimizers] +[template autodiff_equation[name] ''''''] +[template autodiff_graph[name] ''''''] +[template gbo_graph[name] ''''''] + +[section:introduction Introduction] +Gradient based optimizers are algorithms that use the gradient of a function to iteratively find locally extreme points of functions over a set of parameters. This sections provides a description of a set of gradient optimizers. The optimizers are written with `boost::math::differentiation::reverse_mode::rvar` in mind, however if a way to evaluate the funciton and its gradient is provided, the optimizers should work in exactly the same way. + +Below is a table that summarizes the intended usage patterns of the provided optimizers and policies, and is meant as a practical guide rather than a strict prescription: + +[h1:table-optimizers List of Optimizers] +[table + [[Optimizer] [Order] [Uses Curvature] [Memory Cost] [Intended Problem Class] [When to Use]] + [[gradient descent] [first] [no] [low] [Smooth, well-scaled objectives] [Baseline method; debugging; when behavior transparency matters]] + [[nesterov accelerated gradient] [first] [no] [low] [Ill-conditioned or narrow-valley problems] [When plain gradient descent converges slowly or oscillates]] + [[L-BFGS] [quasi second order] [approximate] [medium] [Smooth, deterministic objectives] [When gradients are reliable and faster convergence is needed]] +] + +[h1:table-optimizer-policies Optimizer Policies] +[heading Initialization Policies] +[table + [[Policy] [Use case] [Responsibilities]] + [[tape_initializer_rvar] [User initialzes all varibles manually] [initializes tape]] + [[random_uniform_initializer_rvar] [Initializes all variables with a random number between a min and max value] [Initializes variables. Initializes tape.]] + [[costant_initializer_rvar] [Initializes all variables with a constant] [Initializes variables. Initializes tape.]] +] + +[heading Evaluation Policies] +[table + [[Policy] [Use case] [Responsibilities]] + [[reverse_mode_function_eval_policy] [Default. User with boost reverse mode autodiff] [tells the optimizer how to evaluate the objective]] + [[reverse_mode_gradient_evaluation_policy] [Default. User with boost reverse mode autodiff] [tells the optimizer how to evaluate the gradients of an objective]] +] + +These policies are intended to use with boost reverse mode autodiff. If you need to use the optimizers with a custom AD variable, or by providing the gradient of an objective manually, check the docs for policies to see how the policies are implemented. + +[h1:line-search-policies LBFGS line search policies] +the table below summarizes the two line search policies provided for use with LBFGS. +[table + [[Policy] [Enforced Conditions] [Per iteration cost] [Convergence] [Use case]] + [[Strong Wolfe] [function decrease. curvature condition] [higher] [faster] [most of the time]] + [[Armijo] [function decrease only] [lower] [slower] [you know what you're doing]] +] +[h1:minimizer-policies Minimizer Policies] +[heading Convergence Policies] +[table + [[Policy] [Criterion] [When to Use]] + [[gradient_norm_convergence_policy] [gradient norm < tol] [Default. Stationarity based condition]] + [[objective_tol_convergence_policy] [absolute difference between objective steps is small] [Well-scaled objectives]] + [[relative_objective_tol_policy] [relative difference between objective steps is small] [Scale-invariant convergence]] + [[combined_convergence_policy] [logical combination OR] [you need a combination of convergence conditions]] +] + +[heading Termination Policies] +[table + [[Policy] [Controls] [When to Use]] + [[max_iter_termination_policy] [iteration count] [Hard safety bound (almost always recommended)]] + [[wallclock_termination_policy] [wall clock time] [benchmarking, real-time constraints]] +] + +[heading Constraint and Projection Policies] +[table + [[Policy] [Constraint Type]] + [[unconstrained_policy] [No constraint]] + [[box_constraints] [upper/lower bound clip]] + [[nonnegativity_constraint] [set everything below 0, to 0]] + [[l2_ball_constraint] [ 2-norm(x) < r]] + [[l1_ball_constraint] [ 1-norm(x) < r]] + [[simplex_constraint] [Probability simplex]] + [[function_constraint] [custom user provided function wrapper]] + [[unit_sphere_constraint] [2-norm(x) = 1]] +] +[endsect] [/section:introduction] + +[section:gradient_descent Gradient Descent] +[heading Synopsis] +`` + #include + + template + class gradient_descent { + public: + void step(); + } + + /* Convenience overloads */ + /* make gradient descent by providing + ** objective function + ** variables to optimize over + ** optionally learing rate + * + * requires that code is written using boost::math::differentiation::rvar + */ + template + auto make_gradient_descent(Objective&& obj, ArgumentContainer& x, RealType lr = RealType{ 0.01 }); + + /* make gradient descent by providing + * objective function + ** variables to optimize over + ** learning rate (not optional) + ** initialization policy + * + * requires that code is written using boost::math::differentiation::rvar + */ + + template + auto make_gradient_descent(Objective&& obj, + ArgumentContainer& x, + RealType lr, + InitializationPolicy&& ip); + /* make gradient descent by providing + ** objective function + ** variables to optimize over + ** learning rate (not optional) + ** variable initialization policy + ** objective evaluation policy + ** gradient evaluation policy + * + * code does not have to use boost::math::differentiation::rvar + */ + template + auto make_gradient_descent(Objective&& obj, + ArgumentContainer& x, + RealType& lr, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep) +`` + +Gradient descent iteratively updates parameters `x` in the direction opposite to the gradient of the objective function (minimizing the objective). +`` +x[i] -= lr * g[i] +`` +where `lr` is a user defined learning rate. For a more complete description of the theoretical principle check [@https://en.wikipedia.org/wiki/Gradient_descent the wikipedia page] + +The implementation delegates: +- the initialization of differentiable variables to an initialization policy +- objective evaluation to an objective evaluation policy +- the gradient computation to a gradient evaluation policy +- the parameter updates to an update policy + +The interface is intended to be pytorch-like, where a optimizer object is constructed and progressed with a `step()` method. A helper `minimize` method is also provided. + +[heading Parameters] + +* `Objective&& obj` : objective function to minimize +* `ArgumentContainer& x` : variables to optimize over +* `RealType& lr` : learning rate. A larger value takes larger steps during descent, leading to faster, but more unstable convergence. Conversely, small values are more stable but take longer to converge. +* `InitializationPolicy&& ip` : Initialization policy for optimizer state and variables. Users may supply a custom initialization policy to control how the argument container and any AD specific runtime state : i.e. reverse-mode tape attachment/reset are initialized. By default, the optimizer uses the user-provided initial values in x and performs the standard reverse mode AD initialization required for gradient evaluation. Custom initialization policies are useful for randomized starts, non rvar AD types, or when gradients are supplied externally. See the reverse-mode autodiff policy documentation for the required initialization policy interface when writing custom policies. +* `ObjectiveEvalPolicy&& oep` : tells the optimizer how to evaluate the objective function. By default `reverse_mode_function_eval_policy`. +* `GradEvalPolicy&& gep` : tells the optimizer how to evaluate the gradient of the objective function. By default `reverse_mode_gradient_evaluation_policy` + +[heading Example using a manual optimization] +In this section we will present an example for finding optimal configurations of electrically charged particles confined to a `R = 1` sphere. This problem is also known as the [@https://en.wikipedia.org/wiki/Thomson_problem Thomson problem]. In summary, we are looking for the configuration of an N-electron system subject to the Coulomb potential confined to the $S^2$ sphere. The Coulomb potential is given by: + +[:[:[autodiff_equation thomson_potential.svg]]] + +The code below manually minimizes the above potential energy function for N particles over their two angular positions. + +`` + #include + #include + #include + #include + #include + #include + #include + #include + namespace rdiff = boost::math::differentiation::reverse_mode; + namespace bopt = boost::math::optimization; + double random_double(double min = 0.0, double max = 1.0) + { + static thread_local std::mt19937 rng{std::random_device{}()}; + std::uniform_real_distribution dist(min, max); + return dist(rng); + } + + template + struct vec3 + { + /** + * @brief R^3 coordinates of particle on Thomson Sphere + */ + S x, y, z; + }; + + template + static inline vec3 sph_to_xyz(const S& theta, const S& phi) + { + /** + * convenience overload to convert from [theta,phi] -> x, y, z + */ + return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)}; + } + + template + T thomson_energy(std::vector& r) + { + const size_t N = r.size() / 2; + const T tiny = T(1e-12); + + T E = 0; + for (size_t i = 0; i < N; ++i) { + const T& theta_i = r[2 * i + 0]; + const T& phi_i = r[2 * i + 1]; + auto ri = sph_to_xyz(theta_i, phi_i); + + for (size_t j = i + 1; j < N; ++j) { + const T& theta_j = r[2 * j + 0]; + const T& phi_j = r[2 * j + 1]; + auto rj = sph_to_xyz(theta_j, phi_j); + + T dx = ri.x - rj.x; + T dy = ri.y - rj.y; + T dz = ri.z - rj.z; + + T d2 = dx * dx + dy * dy + dz * dz + tiny; + E += 1.0 / sqrt(d2); + } + } + return E; + } + + template + std::vector> init_theta_phi_uniform(size_t N, unsigned seed = 12345) + { + const T pi = T(3.1415926535897932384626433832795); + + std::mt19937 rng(seed); + std::uniform_real_distribution unif01(T(0), T(1)); + std::uniform_real_distribution unifm11(T(-1), T(1)); + + std::vector> u; + u.reserve(2 * N); + + for (size_t i = 0; i < N; ++i) { + T z = unifm11(rng); + T phi = (T(2) * pi) * unif01(rng) - pi; + T theta = std::acos(z); + + u.emplace_back(theta); + u.emplace_back(phi); + } + return u; + } + + int main(int argc, char* argv[]) + { + if (argc != 2) { + std::cerr << "Usage: " << argv[0] << " \n"; + return 1; + } + + const int N = std::stoi(argv[1]); + const int NSTEPS = 100000; + const double lr = 1e-3; + + auto u_ad = init_theta_phi_uniform(N); + + auto gdopt = bopt::make_gradient_descent(&thomson_energy>, u_ad, lr); + + // filenames + std::string pos_filename = "thomson_" + std::to_string(N) + ".csv"; + std::string energy_filename = "energy_" + std::to_string(N) + ".csv"; + + std::ofstream pos_out(pos_filename); + std::ofstream energy_out(energy_filename); + + pos_out << "step,particle,x,y,z\n"; + energy_out << "step,energy\n"; + + for (int step = 0; step < NSTEPS; ++step) { + gdopt.step(); + for (int pi = 0; pi < N; ++pi) { + double theta = u_ad[2 * pi + 0].item(); + double phi = u_ad[2 * pi + 1].item(); + auto r = sph_to_xyz(theta, phi); + pos_out << step << "," << pi << "," << r.x << "," << r.y << "," << r.z << "\n"; + } + auto E = gdopt.objective_value(); + energy_out << step << "," << E << "\n"; + } + + pos_out.close(); + energy_out.close(); + + return 0; + } +`` +The variable +``const int N = std::stoi(argv[1]);`` +is the number of particles read from the command line +``const int NSTEPS = 100000;`` +is the number of optimization steps +``const double lr = 1e-3;`` +is the optimizer learning rate. Using the code the way its written, the optimizer runs for 100000 steps. Running the program with +``` + ./thomson_sphere N +``` +optimizes the N particle system. Below is a plot of several optimal configurations for N=2,...8 particles. +[:[:[gbo_graph thomson_sphere_2to8.svg]]] + +Below is a plot of the final energy of the system, and its deviation from the theoretically predicted values. The table of theoretical energy values for the problem is from [@https://en.wikipedia.org/wiki/Thomson_problem wikipedia]. +[:[:[gbo_graphi thomson_energy_error_gradient_descent.svg]]] + +[heading Example using minimize] +Often, we don't want to actually implement our own stepping function, i.e. we care about certain convergence criteria. In the above example, we need to include the minimizer.hpp header: +``` + #include +``` + +and replace the optimization loop: +``` + for (int step = 0; step < NSTEPS; ++step) { + gdopt.step(); + for (int pi = 0; pi < N; ++pi) { + double theta = u_ad[2 * pi + 0].item(); + double phi = u_ad[2 * pi + 1].item(); + auto r = sph_to_xyz(theta, phi); + pos_out << step << "," << pi << "," << r.x << "," << r.y << "," << r.z << "\n"; + } + auto E = gdopt.objective_value(); + energy_out << step << "," << E << "\n"; + } + +``` +with +``` + auto result = minimize(gdopt); +``` +minimize returns a ``optimization_result``, a struct with the following fields: +``` + size_t num_iter; + RealType objective_value; + std::vector objective_history; + bool converged; +``` + +where `num_iter` is the number of iterations the optimizer went through, `objective_value` is the final objective value, `objective_history` are the intermediate objective values, and `converged` is whether the convergence criterion was satisfied. By default, `minimize(optimizer)` uses a gradient norm convergence criterion. If norm(gradient_vector) < 1e-3, the criterion is satisfied. Maximum number of iterations is set at 100000. For more info on how to use `minimize` check the minimize docs. With default parameters, gradient descent solves the `N=2` problem in `93799` steps. + +[endsect] [/section:gradient_descent] + +[section:nesterov Nesterov Accelerated Gradient Descent] +[heading Synopsis] +``` +#include + +namespace boost { +namespace math { +namespace optimization { + +namespace rdiff = boost::math::differentiation::reverse_mode; + +/** + * @brief The nesterov_accelerated_gradient class + * + * https://jlmelville.github.io/mize/nesterov.html + */ +template +class nesterov_accelerated_gradient + : public abstract_optimizer< + ArgumentContainer, + RealType, + Objective, + InitializationPolicy, + ObjectiveEvalPolicy, + GradEvalPolicy, + nesterov_update_policy, + nesterov_accelerated_gradient> +{ +public: + nesterov_accelerated_gradient(Objective&& objective, + ArgumentContainer& x, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep, + nesterov_update_policy&& up); + void step(); +}; + +/* Convenience overloads */ +/* make nesterov accelerated gradient descent by providing + ** objective function + ** variables to optimize over + ** Optionally + * - lr: learning rate / step size (typical: 1e-4 .. 1e-1 depending on scaling) + * - mu: momentum coefficient in [0, 1) (typical: 0.8 .. 0.99) + */ + +template +auto make_nag(Objective&& obj, + ArgumentContainer& x, + RealType lr = RealType{ 0.01 }, + RealType mu = RealType{ 0.95 }); + +/* provide initialization policy + * lr, and mu no longer optional + */ +template +auto make_nag(Objective&& obj, + ArgumentContainer& x, + RealType lr, + RealType mu, + InitializationPolicy&& ip); + +/* provide + * initialization policy + * objective evaluation policy + * gradient evaluation policy + */ +template +auto make_nag(Objective&& obj, + ArgumentContainer& x, + RealType lr, + RealType mu, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep); + +} // namespace optimization +} // namespace math +} // namespace boost +``` + +Nesterov accelerated gradient (NAG) is a first-order optimizer that augments gradient descent with a momentum term and evaluates the gradient at a "lookahead" point. In practice this often improves convergence speed compared to vanilla gradient descent, especially in narrow valleys and ill-conditioned problems. + +[heading Algorithm] + +NAG maintains a "velocity" vector v (same shape as x). At iteration k it performs: +``` +v = mu * v - lr * g; +x += -mu * v_prev + (1 + mu) *v +``` +where: + +lr is the learning rate / step size + +mu is the momentum coefficient (typically close to 1) + +Setting mu = 0 reduces NAG to standard gradient descent. +[heading Parameters] + +* `Objective&& obj` : objective function to minimize. +* `ArgumentContainer& x` : variables to optimize over. Updated in place. +* `RealType lr` : learning rate. Larger values take larger steps (faster but potentially unstable). Smaller values are more stable but converge more slowly. +* `RealType mu` : momentum coefficient in `[0,1)`. Higher values, e.g. 0.9 to 0.99, typically accelerate convergence but may require a smaller `lr` +* `InitializationPolicy&& ip` : Initialization policy for optimizer state and variables. Users may supply a custom initialization policy to control how the argument container and any AD-specific runtime state : i.e. reverse-mode tape attachment/reset are initialized. By default, the optimizer uses the same initialization as gradient descent, taking the user provided initial values in x and initializing the internal momentum/velocity state to zero. Custom initialization policies are useful for randomized starts, non rvar AD types, or when gradients are supplied externally. Check the docs for Reverse Mode autodiff policies for initialization policy structure to write custom policies. +* `ObjectiveEvalPolicy&& oep` : objective evaluation policy. By default `reverse_mode_function_eval_policy` +* `GradEvalPolicy&& gep` : gradient evaluation policy. By default `reverse_mode_gradient_evaluation_policy` + +[heading Notes] +* NAG uses the same policy-based design as gradient descent: initialization, objective evaluation, and gradient evaluation can be customized independently. +* When using reverse-mode AD `rvar`, the objective should be written in terms of AD variables so gradients can be obtained automatically by the default gradient evaluation policy. +* Typical tuning: start with `mu = 0.9` or `0.95`; if the objective oscillates or diverges, reduce `lr` (or slightly reduce `mu`). + +[heading Example : Thomson Sphere] +``` +#include +#include +#include +#include +#include +#include +#include +#include +namespace rdiff = boost::math::differentiation::reverse_mode; +namespace bopt = boost::math::optimization; +double random_double(double min = 0.0, double max = 1.0) +{ + static thread_local std::mt19937 rng{std::random_device{}()}; + std::uniform_real_distribution dist(min, max); + return dist(rng); +} + +template +struct vec3 +{ + /** + * @brief R^3 coordinates of particle on Thomson Sphere + */ + S x, y, z; +}; + +template +static inline vec3 sph_to_xyz(const S& theta, const S& phi) +{ + /** + * convenience overload to convert from [theta,phi] -> x, y, z + */ + return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)}; +} + +template +T thomson_energy(std::vector& r) +{ + /* inverse square law + */ + const size_t N = r.size() / 2; + const T tiny = T(1e-12); + + T E = 0; + for (size_t i = 0; i < N; ++i) { + const T& theta_i = r[2 * i + 0]; + const T& phi_i = r[2 * i + 1]; + auto ri = sph_to_xyz(theta_i, phi_i); + + for (size_t j = i + 1; j < N; ++j) { + const T& theta_j = r[2 * j + 0]; + const T& phi_j = r[2 * j + 1]; + auto rj = sph_to_xyz(theta_j, phi_j); + + T dx = ri.x - rj.x; + T dy = ri.y - rj.y; + T dz = ri.z - rj.z; + + T d2 = dx * dx + dy * dy + dz * dz + tiny; + E += 1.0 / sqrt(d2); + } + } + return E; +} + +template +std::vector> init_theta_phi_uniform(size_t N, unsigned seed = 12345) +{ + const T pi = T(3.1415926535897932384626433832795); + + std::mt19937 rng(seed); + std::uniform_real_distribution unif01(T(0), T(1)); + std::uniform_real_distribution unifm11(T(-1), T(1)); + + std::vector> u; + u.reserve(2 * N); + + for (size_t i = 0; i < N; ++i) { + T z = unifm11(rng); + T phi = (T(2) * pi) * unif01(rng) - pi; + T theta = std::acos(z); + + u.emplace_back(theta); + u.emplace_back(phi); + } + return u; +} + +int main(int argc, char* argv[]) +{ + + if (argc != 2) { + std::cerr << "Usage: " << argv[0] << " \n"; + return 1; + } + + const int N = std::stoi(argv[1]); + const double lr = 1e-3; + const double mu = 0.95; + auto u_ad = init_theta_phi_uniform(N); + + auto nesterov_opt = bopt::make_nag(&thomson_energy>, u_ad, lr, mu); + + // filenames + std::string pos_filename = "thomson_" + std::to_string(N) + ".csv"; + std::string energy_filename = "nesterov_energy_" + std::to_string(N) + ".csv"; + + std::ofstream pos_out(pos_filename); + std::ofstream energy_out(energy_filename); + + energy_out << "step,energy\n"; + + auto result = minimize(nesterov_opt); + for (int pi = 0; pi < N; ++pi) { + double theta = u_ad[2 * pi + 0].item(); + double phi = u_ad[2 * pi + 1].item(); + auto r = sph_to_xyz(theta, phi); + pos_out << pi << "," << r.x << "," << r.y << "," << r.z << "\n"; + } + auto E = nesterov_opt.objective_value(); + int i = 0; + for(auto& obj_hist : result.objective_history) + { + energy_out << i << "," << obj_hist << "\n"; + ++i; + } + energy_out << "," << E << "\n"; + + pos_out.close(); + energy_out.close(); + + return 0; +} +``` + +The nesterov version of this problem converges much faster than regular gradient descent, in only `4663` iterations with default parameters, vs the `93799` iterations required by gradient descent. + +[:[:[gbo_graph nag_to_gd_comparison.svg]]] + +[endsect] [/section:nesterov] + +[section:lbfgs L-BFGS] +[heading Synopsis] +``` +#include + +namespace boost { +namespace math { +namespace optimization { + +namespace rdiff = boost::math::differentiation::reverse_mode; + +/** + * + * @brief Limited-memory BFGS (L-BFGS) optimizer + * + * The `lbfgs` class implements the Limited-memory BFGS optimization algorithm, + * a quasi-Newton method that approximates the inverse Hessian using a rolling + * window of the last `m` updates. It is suitable for medium- to large-scale + * optimization problems where full Hessian storage is infeasible. + * + * @tparam> ArgumentContainer: container type for parameters, e.g. + * std::vector + * @tparam> RealType scalar floating type (e.g. double, float) + * @tparam> Objective: objective function. must support "f(x)" evaluation + * @tparam> InitializationPolicy: policy for initializing x + * @tparam> ObjectiveEvalPolicy: policy for computing the objective value + * @tparam> GradEvalPolicy: policy for computing gradients + * @tparam> LineaSearchPolicy: e.g. Armijo, StrongWolfe + * + * https://en.wikipedia.org/wiki/Limited-memory_BFGS + */ + +template +class lbfgs +{ +public: + lbfgs(Objective&& objective, + ArgumentContainer& x, + size_t m, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep, + lbfgs_update_policy&& up, + LineSearchPolicy&& lsp); + + void step(); +}; + +/* Convenience overloads */ +/* create l-bfgs optimizer with + * objective function + * argument container + * optional + * - history size : how far to look in the past + */ +template +auto make_lbfgs(Objective&& obj, ArgumentContainer& x, std::size_t m = 10); + +template +auto make_lbfgs(Objective&& obj, + ArgumentContainer& x, + std::size_t m, + InitializationPolicy&& ip) + +/* construct lbfgs with a custom initialization and line search policy */ +template +auto make_lbfgs(Objective&& obj, + ArgumentContainer& x, + std::size_t m, + InitializationPolicy&& ip, + LineSearchPolicy&& lsp); + +/* construct lbfgs optimizer with: + * custom initialization policy + * function evaluation policy + * gradient evaluation policy + * line search policy + */ +template +auto make_lbfgs(Objective&& obj, + ArgumentContainer& x, + std::size_t m, + InitializationPolicy&& ip, + FunctionEvalPolicy&& fep, + GradientEvalPolicy&& gep, + LineSearchPolicy&& lsp); + +} // namespace optimization +} // namespace math +} // namespace boost +``` + +LBFGS (limited memory BFGS) is a quasi-Newton optimizer that builds an approximation to the inverse Hessian using only first-order information (function values and gradients). Unlike full BFGS, it does not store or update a dense matrix; instead it maintains a fixed size history of the most recent m correction pairs and computes the search direction using a two loop recursion. In practice, LBFGS often converges in significantly fewer iterations than normal gradient based methods, especially on smooth, ill-conditioned objectives. + +[heading Algorithm] + +At each iteration k, LBFGS: +* Evaluates the gradient g_k = grad(f(x_k)). +* Computes a quasi-Newton search direction using the last m updates. +* Chooses a step length alpha_k using a line search policy. +* Updates parameters: +``` +x_k += alpha_k p_k +``` +* Forms the correction pairs: +``` +s_k = x_k - x_prev y_k = g_k - g_prev +``` +and stores up to the last `m` pairs `(s_k, y_k)`. + +The line search is a key part of practical LBFGS: it typically removes the need to hand-tune a learning rate and improves robustness. + +[heading Parameters] + +* `Objective&& obj` : objective function to minimize. +* `ArgumentContainer& x` : variables to optimize over. Updated in-place. +* `std::size_t m` : history size. Typical values are 5–20. Default is 10. Larger m can improve directions but increases memory and per-step cost. +* `InitializationPolicy&& ip` : Initialization policy for optimizer state and variables. Users may supply a custom initialization policy to control how the argument container and any AD-specific runtime state : i.e. reverse-mode tape attachment/reset are initialized. By default, the optimizer uses the same initialization as gradient descent, taking the user provided initial values in x and initializing the internal momentum/velocity state to zero. Custom initialization policies are useful for randomized starts, non rvar AD types, or when gradients are supplied externally. Check the docs for Reverse Mode autodiff policies for initialization policy structure to write custom policies. +* `ObjectiveEvalPolicy&& oep` : policy for evaluating the objective function value at a given x. By default this is a reverse-mode AD evaluation policy when using `rvar`. +* `GradEvalPolicy&& gep` : policy for evaluating the gradient of the objective. By default this is a reverse-mode AD gradient evaluation policy when using `rvar`. +* `LineSearchPolicy&& lsp` : policy for selecting the step length alpha along a search direction. Determines the acceptance criteria and how many function/gradient evaluations may be performed during a step Default is Strong Wolfe, but Armijo is an option. Strong Wolfe uses both function and gradient information to ensure good curvature conditions, while Armijo relies only on function decrease and is simpler but less robust for quasi-Newton methods. +[heading Notes] + +* LBFGS assumes the objective is sufficiently smooth for gradients to be informative. It is typically most effective on unconstrained smooth problems. + +* LBFGS usually requires fewer iterations than gradient descent, but each iteration is more expensive because it performs multiple objective/gradient evaluations during line search. + +[heading Example : Thomson Problem] +``` +#include +#include +#include +#include +#include +#include +#include +#include +namespace rdiff = boost::math::differentiation::reverse_mode; +namespace bopt = boost::math::optimization; +double random_double(double min = 0.0, double max = 1.0) +{ + static thread_local std::mt19937 rng{std::random_device{}()}; + std::uniform_real_distribution dist(min, max); + return dist(rng); +} + +template +struct vec3 +{ + /** + * @brief R^3 coordinates of particle on Thomson Sphere + */ + S x, y, z; +}; + +template +static inline vec3 sph_to_xyz(const S& theta, const S& phi) +{ + /** + * convenience overload to convert from [theta,phi] -> x, y, z + */ + return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)}; +} + +template +T thomson_energy(std::vector& r) +{ + /* inverse square law + */ + const size_t N = r.size() / 2; + const T tiny = T(1e-12); + + T E = 0; + for (size_t i = 0; i < N; ++i) { + const T& theta_i = r[2 * i + 0]; + const T& phi_i = r[2 * i + 1]; + auto ri = sph_to_xyz(theta_i, phi_i); + + for (size_t j = i + 1; j < N; ++j) { + const T& theta_j = r[2 * j + 0]; + const T& phi_j = r[2 * j + 1]; + auto rj = sph_to_xyz(theta_j, phi_j); + + T dx = ri.x - rj.x; + T dy = ri.y - rj.y; + T dz = ri.z - rj.z; + + T d2 = dx * dx + dy * dy + dz * dz + tiny; + E += 1.0 / sqrt(d2); + } + } + return E; +} + +template +std::vector> init_theta_phi_uniform(size_t N, unsigned seed = 12345) +{ + const T pi = T(3.1415926535897932384626433832795); + + std::mt19937 rng(seed); + std::uniform_real_distribution unif01(T(0), T(1)); + std::uniform_real_distribution unifm11(T(-1), T(1)); + + std::vector> u; + u.reserve(2 * N); + + for (size_t i = 0; i < N; ++i) { + T z = unifm11(rng); + T phi = (T(2) * pi) * unif01(rng) - pi; + T theta = std::acos(z); + + u.emplace_back(theta); + u.emplace_back(phi); + } + return u; +} + +int main(int argc, char* argv[]) +{ + + if (argc != 2) { + std::cerr << "Usage: " << argv[0] << " \n"; + return 1; + } + + const int N = std::stoi(argv[1]); + auto u_ad = init_theta_phi_uniform(N); + + auto lbfgs_opt = bopt::make_lbfgs(&thomson_energy>, u_ad); + + // filenames + std::string pos_filename = "thomson_" + std::to_string(N) + ".csv"; + std::string energy_filename = "lbfgs_energy_" + std::to_string(N) + ".csv"; + + std::ofstream pos_out(pos_filename); + std::ofstream energy_out(energy_filename); + + energy_out << "step,energy\n"; + + auto result = minimize(lbfgs_opt); + for (int pi = 0; pi < N; ++pi) { + double theta = u_ad[2 * pi + 0].item(); + double phi = u_ad[2 * pi + 1].item(); + auto r = sph_to_xyz(theta, phi); + pos_out << pi << "," << r.x << "," << r.y << "," << r.z << "\n"; + } + auto E = lbfgs_opt.objective_value(); + int i = 0; + for(auto& obj_hist : result.objective_history) + { + energy_out << i << "," << obj_hist << "\n"; + ++i; + } + energy_out << "," << E << "\n"; + + pos_out.close(); + energy_out.close(); + + return 0; +} +``` +For the `N = 2` case, LBFGS requires only 5 iterations to converge, the nesterov version of this problem converges in `4663` iterations with default parameters, and gradient descent requires `93799` iterations. Convergence is assumed to mean the norm of the gradient is less than `1e-3`. Below is a plot showcasing the 3 different methods for the `N=20` particle case. + +[:[:[gbo_graph lbfgs_to_nag_and_gd_comparison.svg]]] + +In this case, gradient descent reaches the maximum number of iterations, and does not converge, nag converges in `150` iterations, and LBFGS converges in `67` iterations. + +[endsect] [/section:lbfgs] + +[section:minimize minimize] +[heading Synopsis] +``` +#include + +namespace boost { +namespace math { +namespace optimization { +template +struct optimization_result +{ + size_t num_iter = 0; + RealType objective_value; + std::vector objective_history; + bool converged; +}; + +/* Minimize an objective using a given optimizer. + * + * The optimizer `opt` must expose a `step()` method and the associated + * typedefs: + * - argument_container_t + * - real_type_t + * + * The behavior of the minimization loop is controlled by policy objects: + * - ConstraintPolicy: projects variables onto a feasible set + * - ConvergencePolicy: determines when convergence has been reached + * - TerminationPolicy: determines when optimization must stop regardless + * of convergence (e.g. max iterations) + * + * The function returns an `optimization_result` summarizing the run. + */ +template, + class ConvergencePolicy = + gradient_norm_convergence_policy, + class TerminationPolicy = max_iter_termination_policy> +auto minimize(Optimizer& opt, + ConstraintPolicy project = ConstraintPolicy{}, + ConvergencePolicy converged = + ConvergencePolicy{ + static_cast(1e-3) }, + TerminationPolicy terminate = TerminationPolicy(100000), + bool history = true) +``` + +This header provides a generic driver function `minimize` that repeatedly advances an optimizer via `step()`, optionally projects parameters onto a constraint set, and stops when either a convergence criterion is met or a termination criterion triggers. + +[heading Parameters] +* `Optimizer& opt` : Optimizer instance. +* `ConstraintPolicy project` : Projection policy applied after each `step()`. Default is `unconstrained_policy` (no projection). +* `ConvergencePolicy converged` : Stopping criterion. Default is `gradient_norm_convergence_policy(tol=1e-3)`. +* `TerminationPolicy terminate` : Hard stop criterion. Default is `max_iter_termination_policy(100000)`. +* `bool history` : If true, records `opt.objective_value()` after each iteration in `optimization_result::objective_history.` + +[heading Convergence Policies] +Convergence policies decide when the optimization has converged. Each policy has the signature: +``` +bool operator()(const GradientContainer& g, RealType objective_value) const; +``` +[heading gradient_norm_convergence_policy] + +Stops when the Euclidean norm of the gradient falls below a tolerance: +``` +template +struct gradient_norm_convergence_policy +{ +explicit gradient_norm_convergence_policy(RealType tol); + +template +bool operator()(const GradientContainer& g, RealType objective_v) const; +}; +``` +[heading objective_tol_convergence_policy] + +Stops when the absolute change in objective value between successive iterations drops below a tolerance: +``` +template +struct objective_tol_convergence_policy +{ +explicit objective_tol_convergence_policy(RealType tol); + +template +bool operator()(const GradientContainer&, RealType objective_v) const; +}; +``` +The first call always returns false + +[heading relative_objective_tol_policy] + +Stops when the relative objective change drops below a tolerance: +``` +template +struct relative_objective_tol_policy +{ +explicit relative_objective_tol_policy(RealType rel_tol); + +template +bool operator()(const GradientContainer&, RealType objective_v) const; +}; +``` +The relative change is computed as: +``` +abs(obj - last_obj) / max(1, abs(last_obj)) +``` + +[heading combined_convergence_policy] + +Combines two convergence policies and stops when either triggers: +``` +template +struct combined_convergence_policy +{ +combined_convergence_policy(Policy1 p1, Policy2 p2); + +template +bool operator()(const GradientContainer& g, RealType obj) const; +}; +``` + +[heading Termination Policies] + +Termination policies provide a hard stop independent of convergence. Each policy has the signature: + +``` +bool operator()(size_t iter); +``` + +[heading max_iter_termination_policy] + +Stops after a fixed number of iterations +``` +struct max_iter_termination_policy { explicit max_iter_termination_policy(size_t max_iter); bool operator()(size_t iter); }; +``` + +[heading wallclock_termination_policy] + +Stops after a wall-clock time budget: +``` +struct wallclock_termination_policy { explicit wallclock_termination_policy(std::chrono::milliseconds max_time); bool operator()(size_t iter) const; }; +``` + +[heading Constraint and Projection Policies] + +Projection policies modify the optimizer variables after each step. Each policy has the signature: + +``` +void operator()(ArgumentContainer& x) const; +``` + +[heading unconstrained_policy] + +No projection; leaves parameters unchanged + +``` +template struct unconstrained_policy { void operator()(ArgumentContainer&); }; +``` + +[heading box_constraints] + +Clamps each variable into `[min, max]` + +``` +template struct box_constraints { box_constraints(RealType min, RealType max); void operator()(ArgumentContainer& x); }; +``` + +[heading nonnegativity_constraint] + +Sets anything less than `0` to `0` + +``` +template struct nonnegativity_constraint { void operator()(ArgumentContainer& x) const; }; +``` + +[heading l2_ball_constraint] + +Projects onto the `L2` ball of radius `radius` by uniform scaling when needed + +``` +template struct l2_ball_constraint { explicit l2_ball_constraint(RealType radius); void operator()(ArgumentContainer& x) const; }; +``` + +[heading l1_ball_constraint] + +Projects onto the `L1` ball of radius `radius` by uniform scaling + +``` +template struct l1_ball_constraint { explicit l1_ball_constraint(RealType radius); void operator()(ArgumentContainer& x) const; }; +``` + +This is not the exact Euclidean projection onto the L1 ball; it is a simple scaling-based constraint + +[heading simplex_constraint] + +Projects onto the scaled probability simplex by clipping negatives to `0` and renormalizing to sum to `1` + +``` +template struct simplex_constraint { void operator()(ArgumentContainer& x) const; }; +``` + +[heading function_constraint] + +Wraps a user-provided projection function + +``` +template struct function_constraint { using func_t = void (*)(ArgumentContainer&); explicit function_constraint(func_t f); void operator()(ArgumentContainer& x) const; }; +``` + +[heading unit_sphere_constraint] + +Normalizes the vector to unit L2 norm + +``` +template struct unit_sphere_constraint { void operator()(ArgumentContainer& x) const; }; +``` + +This projects onto the unit sphere (if ||x||_2 > 0) + +[endsect] [/section:minimize] + +[section:policies Reverse Mode autodiff policies] +This header provides default policy implementations for using the gradient-based optimizers with `boost::math::differentiation::reverse_mode::rvar` These policies handle: + +* preparing the reverse-mode tape before evaluating an objective, +* extracting gradients from rvar arguments after backpropagation, +* initializing `rvar` containers and establishing tape checkpoints. + +[heading Synopsis] + +``` +#include + +namespace boost { +namespace math { +namespace optimization { + +namespace rdiff = boost::math::differentiation::reverse_mode; + +/** + * @brief> function evaluation policy for reverse mode autodiff + * @arg objective> objective function to evaluate + * @arg x> argument list + */ +template +struct reverse_mode_function_eval_policy +{ + template + rdiff::rvar operator()(Objective&& objective, + ArgumentContainer& x); +}; + +/** + * @brief> gradient evaluation policy + * @arg obj_f> objective + * @arg x> argument list + * @arg f_eval_olicy> funciton evaluation policy. These need to be + * done in tandem + * @arg obj_v> reference to variable inside gradient class + */ +template +struct reverse_mode_gradient_evaluation_policy +{ + template + void operator()(Objective&& obj_f, + ArgumentContainer& x, + FunctionEvaluationPolicy&& f_eval_pol, + RealType& obj_v, + std::vector& g) +}; + /* + * init policies + */ + +/* default rvar policy */ +template +struct tape_initializer_rvar +{ + template + void operator()(ArgumentContainer& x) const noexcept; +}; + +/* random uniform */ +template +struct random_uniform_initializer_rvar +{ + RealType low_, high_; + size_t seed_; + random_uniform_initializer_rvar(RealType low = 0, + RealType high = 1, + size_t seed = std::random_device{}()); + + template + void operator()(ArgumentContainer& x) const; +}; + +/* constant initializer */ +template +struct costant_initializer_rvar +{ + RealType constant; + explicit costant_initializer_rvar(RealType v = 0); + + template + void operator()(ArgumentContainer& x) const; +}; +} // namespace optimization +} // namespace math +} // namespace boost +``` + +[heading Function evaluation policies] + +A function evaluation policy defines how an objective is evaluated at the current parameters, and is responsible for any AD bookkeeping required before the call. + +[heading reverse_mode_function_eval_policy] +``` +template struct reverse_mode_function_eval_policy { template rdiff::rvar operator()(Objective&& objective, ArgumentContainer& x); }; +``` +This policy evaluates the objective objective(x) using reverse-mode AD and ensures the active tape is in a valid state before evaluation: + +ArgumentContainer must contain rdiff::rvar values. + +[heading Gradient evaluation policies] + +A gradient evaluation policy defines how gradients are computed and extracted into an ordinary numeric container. + +[heading reverse_mode_gradient_evaluation_policy] + +``` +template struct reverse_mode_gradient_evaluation_policy { template void operator()(Objective&& obj_f, ArgumentContainer& x, FunctionEvaluationPolicy&& f_eval_pol, RealType& obj_v, std::vector& g); }; +``` + +This policy computes the objective value and gradient using reverse-mode autodiff + +[heading Initialization policies] + +Initialization policies prepare the argument container and the reverse-mode tape for optimization. They establish tape checkpoints that are later used by function/gradient evaluation policies. + +[heading tape_initializer_rvar] + +``` +template struct tape_initializer_rvar { template void operator()(ArgumentContainer& x) const noexcept; }; +``` + +This policy: +* statically requires `ArgumentContainer::value_type` to be `rdiff::rvar`, +* adds a checkpoint to the active reverse-mode tape via `tape.add_checkpoint()` + +[heading random_uniform_initializer_rvar] + +``` +template +struct random_uniform_initializer_rvar +{ +random_uniform_initializer_rvar(RealType low = 0, +RealType high = 1, +size_t seed = std::random_device{}()); + +template +void operator()(ArgumentContainer& x) const; +}; +``` + +This policy initializes each element of x independently as: +``` +x[i] = rdiff::rvar(U(low, high)) +``` + +using +``` +boost::random::mt19937 +``` + +and + +``` +boost::random::uniform_real_distribution +``` + +[heading costant_initializer_rvar] + +``` +template +struct costant_initializer_rvar +{ +explicit costant_initializer_rvar(RealType v = 0); + +template +void operator()(ArgumentContainer& x) const; +}; +``` + +This policy initializes each element of x to the constant value v + +[endsect] [/section:policies] + +[endsect] [/section:gd_opt] diff --git a/doc/sf/igamma.qbk b/doc/sf/igamma.qbk index 3895d64c3..1ce33d7a7 100644 --- a/doc/sf/igamma.qbk +++ b/doc/sf/igamma.qbk @@ -26,6 +26,12 @@ template BOOST_MATH_GPU_ENABLED ``__sf_result`` lgamma_q(T1 a, T2 z, const ``__Policy``&); + template + BOOST_MATH_GPU_ENABLED ``__sf_result`` lgamma_p(T1 a, T2 z); + + template + BOOST_MATH_GPU_ENABLED ``__sf_result`` lgamma_p(T1 a, T2 z, const ``__Policy``&); + template BOOST_MATH_GPU_ENABLED ``__sf_result`` tgamma_lower(T1 a, T2 z); @@ -72,6 +78,15 @@ This function changes rapidly from 0 to 1 around the point z == a: [graph gamma_p] + template + BOOST_MATH_GPU_ENABLED ``__sf_result`` lgamma_p(T1 a, T2 z); + + template + BOOST_MATH_GPU_ENABLED ``__sf_result`` lgamma_p(T1 a, T2 z, const ``__Policy``&); + +Returns the natural log of the normalized lower incomplete gamma function +of a and z. + template BOOST_MATH_GPU_ENABLED ``__sf_result`` gamma_q(T1 a, T2 z); diff --git a/example/.gradient_descent_example.cpp.swp b/example/.gradient_descent_example.cpp.swp new file mode 100644 index 000000000..ab6c20b70 Binary files /dev/null and b/example/.gradient_descent_example.cpp.swp differ diff --git a/example/gradient_descent_example.cpp b/example/gradient_descent_example.cpp new file mode 100755 index 000000000..25a7ad4da --- /dev/null +++ b/example/gradient_descent_example.cpp @@ -0,0 +1,146 @@ +// Copyright Maksym Zhelyenzyakov 2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#include +#include +#include +#include +#include +#include +#include +#include +namespace rdiff = boost::math::differentiation::reverse_mode; +namespace bopt = boost::math::optimization; +double random_double(double min = 0.0, double max = 1.0) +{ + static thread_local std::mt19937 rng{std::random_device{}()}; + std::uniform_real_distribution dist(min, max); + return dist(rng); +} + +template +struct vec3 +{ + /** + * @brief R^3 coordinates of particle on Thomson Sphere + */ + S x, y, z; +}; + +template +static inline vec3 sph_to_xyz(const S& theta, const S& phi) +{ + /** + * convenience overload to convert from [theta,phi] -> x, y, z + */ + return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)}; +} + +template +T thomson_energy(std::vector& r) +{ + /* inverse square law + */ + const size_t N = r.size() / 2; + const T tiny = T(1e-12); + + T E = 0; + for (size_t i = 0; i < N; ++i) { + const T& theta_i = r[2 * i + 0]; + const T& phi_i = r[2 * i + 1]; + auto ri = sph_to_xyz(theta_i, phi_i); + + for (size_t j = i + 1; j < N; ++j) { + const T& theta_j = r[2 * j + 0]; + const T& phi_j = r[2 * j + 1]; + auto rj = sph_to_xyz(theta_j, phi_j); + + T dx = ri.x - rj.x; + T dy = ri.y - rj.y; + T dz = ri.z - rj.z; + + T d2 = dx * dx + dy * dy + dz * dz + tiny; + E += 1.0 / sqrt(d2); + } + } + return E; +} + +template +std::vector> init_theta_phi_uniform(size_t N, unsigned seed = 12345) +{ + const T pi = T(3.1415926535897932384626433832795); + + std::mt19937 rng(seed); + std::uniform_real_distribution unif01(T(0), T(1)); + std::uniform_real_distribution unifm11(T(-1), T(1)); + + std::vector> u; + u.reserve(2 * N); + + for (size_t i = 0; i < N; ++i) { + T z = unifm11(rng); + T phi = (T(2) * pi) * unif01(rng) - pi; + T theta = std::acos(z); + + u.emplace_back(theta); + u.emplace_back(phi); + } + return u; +} + +int main(int argc, char* argv[]) +{ + /* + if (argc != 2) { + std::cerr << "Usage: " << argv[0] << " \n"; + return 1; + }*/ + + const int N = 2;// std::stoi(argv[1]); + const int NSTEPS = 100000; + const double lr = 1e-3; + + auto u_ad = init_theta_phi_uniform(N); + + auto gdopt = bopt::make_gradient_descent(&thomson_energy>, u_ad, lr); + + // filenames + std::string pos_filename = "thomson_" + std::to_string(N) + ".csv"; + std::string energy_filename = "energy_" + std::to_string(N) + ".csv"; + + std::ofstream pos_out(pos_filename); + std::ofstream energy_out(energy_filename); + + pos_out << "step,particle,x,y,z\n"; + energy_out << "step,energy\n"; + + /* + for (int step = 0; step < NSTEPS; ++step) { + gdopt.step(); + for (int pi = 0; pi < N; ++pi) { + double theta = u_ad[2 * pi + 0].item(); + double phi = u_ad[2 * pi + 1].item(); + auto r = sph_to_xyz(theta, phi); + pos_out << step << "," << pi << "," << r.x << "," << r.y << "," << r.z << "\n"; + } + auto E = gdopt.objective_value(); + energy_out << step << "," << E << "\n"; + }*/ + + auto result = minimize(gdopt); + for (int pi = 0; pi < N; ++pi) { + double theta = u_ad[2 * pi + 0].item(); + double phi = u_ad[2 * pi + 1].item(); + auto r = sph_to_xyz(theta, phi); + pos_out << pi << "," << r.x << "," << r.y << "," << r.z << "\n"; + } + auto E = gdopt.objective_value(); + energy_out << "," << E << "\n"; + + pos_out.close(); + energy_out.close(); + + return 0; +} diff --git a/example/lbfgs_example.cpp b/example/lbfgs_example.cpp new file mode 100755 index 000000000..51980766e --- /dev/null +++ b/example/lbfgs_example.cpp @@ -0,0 +1,135 @@ +// Copyright Maksym Zhelyenzyakov 2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#include +#include +#include +#include +#include +#include +#include +#include +namespace rdiff = boost::math::differentiation::reverse_mode; +namespace bopt = boost::math::optimization; +double random_double(double min = 0.0, double max = 1.0) +{ + static thread_local std::mt19937 rng{std::random_device{}()}; + std::uniform_real_distribution dist(min, max); + return dist(rng); +} + +template +struct vec3 +{ + /** + * @brief R^3 coordinates of particle on Thomson Sphere + */ + S x, y, z; +}; + +template +static inline vec3 sph_to_xyz(const S& theta, const S& phi) +{ + /** + * convenience overload to convert from [theta,phi] -> x, y, z + */ + return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)}; +} + +template +T thomson_energy(std::vector& r) +{ + /* inverse square law + */ + const size_t N = r.size() / 2; + const T tiny = T(1e-12); + + T E = 0; + for (size_t i = 0; i < N; ++i) { + const T& theta_i = r[2 * i + 0]; + const T& phi_i = r[2 * i + 1]; + auto ri = sph_to_xyz(theta_i, phi_i); + + for (size_t j = i + 1; j < N; ++j) { + const T& theta_j = r[2 * j + 0]; + const T& phi_j = r[2 * j + 1]; + auto rj = sph_to_xyz(theta_j, phi_j); + + T dx = ri.x - rj.x; + T dy = ri.y - rj.y; + T dz = ri.z - rj.z; + + T d2 = dx * dx + dy * dy + dz * dz + tiny; + E += 1.0 / sqrt(d2); + } + } + return E; +} + +template +std::vector> init_theta_phi_uniform(size_t N, unsigned seed = 12345) +{ + const T pi = T(3.1415926535897932384626433832795); + + std::mt19937 rng(seed); + std::uniform_real_distribution unif01(T(0), T(1)); + std::uniform_real_distribution unifm11(T(-1), T(1)); + + std::vector> u; + u.reserve(2 * N); + + for (size_t i = 0; i < N; ++i) { + T z = unifm11(rng); + T phi = (T(2) * pi) * unif01(rng) - pi; + T theta = std::acos(z); + + u.emplace_back(theta); + u.emplace_back(phi); + } + return u; +} + +int main(int argc, char* argv[]) +{ + + if (argc != 2) { + std::cerr << "Usage: " << argv[0] << " \n"; + return 1; + } + + const int N = std::stoi(argv[1]); + auto u_ad = init_theta_phi_uniform(N); + + auto lbfgs_opt = bopt::make_lbfgs(&thomson_energy>, u_ad); + + // filenames + std::string pos_filename = "thomson_" + std::to_string(N) + ".csv"; + std::string energy_filename = "lbfgs_energy_" + std::to_string(N) + ".csv"; + + std::ofstream pos_out(pos_filename); + std::ofstream energy_out(energy_filename); + + energy_out << "step,energy\n"; + + auto result = minimize(lbfgs_opt); + for (int pi = 0; pi < N; ++pi) { + double theta = u_ad[2 * pi + 0].item(); + double phi = u_ad[2 * pi + 1].item(); + auto r = sph_to_xyz(theta, phi); + pos_out << pi << "," << r.x << "," << r.y << "," << r.z << "\n"; + } + auto E = lbfgs_opt.objective_value(); + int i = 0; + for(auto& obj_hist : result.objective_history) + { + energy_out << i << "," << obj_hist << "\n"; + ++i; + } + energy_out << "," << E << "\n"; + + pos_out.close(); + energy_out.close(); + + return 0; +} diff --git a/example/nesterov_example.cpp b/example/nesterov_example.cpp new file mode 100755 index 000000000..2b4ff4e4f --- /dev/null +++ b/example/nesterov_example.cpp @@ -0,0 +1,137 @@ +// Copyright Maksym Zhelyenzyakov 2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#include +#include +#include +#include +#include +#include +#include +#include +namespace rdiff = boost::math::differentiation::reverse_mode; +namespace bopt = boost::math::optimization; +double random_double(double min = 0.0, double max = 1.0) +{ + static thread_local std::mt19937 rng{std::random_device{}()}; + std::uniform_real_distribution dist(min, max); + return dist(rng); +} + +template +struct vec3 +{ + /** + * @brief R^3 coordinates of particle on Thomson Sphere + */ + S x, y, z; +}; + +template +static inline vec3 sph_to_xyz(const S& theta, const S& phi) +{ + /** + * convenience overload to convert from [theta,phi] -> x, y, z + */ + return {sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)}; +} + +template +T thomson_energy(std::vector& r) +{ + /* inverse square law + */ + const size_t N = r.size() / 2; + const T tiny = T(1e-12); + + T E = 0; + for (size_t i = 0; i < N; ++i) { + const T& theta_i = r[2 * i + 0]; + const T& phi_i = r[2 * i + 1]; + auto ri = sph_to_xyz(theta_i, phi_i); + + for (size_t j = i + 1; j < N; ++j) { + const T& theta_j = r[2 * j + 0]; + const T& phi_j = r[2 * j + 1]; + auto rj = sph_to_xyz(theta_j, phi_j); + + T dx = ri.x - rj.x; + T dy = ri.y - rj.y; + T dz = ri.z - rj.z; + + T d2 = dx * dx + dy * dy + dz * dz + tiny; + E += 1.0 / sqrt(d2); + } + } + return E; +} + +template +std::vector> init_theta_phi_uniform(size_t N, unsigned seed = 12345) +{ + const T pi = T(3.1415926535897932384626433832795); + + std::mt19937 rng(seed); + std::uniform_real_distribution unif01(T(0), T(1)); + std::uniform_real_distribution unifm11(T(-1), T(1)); + + std::vector> u; + u.reserve(2 * N); + + for (size_t i = 0; i < N; ++i) { + T z = unifm11(rng); + T phi = (T(2) * pi) * unif01(rng) - pi; + T theta = std::acos(z); + + u.emplace_back(theta); + u.emplace_back(phi); + } + return u; +} + +int main(int argc, char* argv[]) +{ + + if (argc != 2) { + std::cerr << "Usage: " << argv[0] << " \n"; + return 1; + } + + const int N = std::stoi(argv[1]); + const double lr = 1e-3; + const double mu = 0.95; + auto u_ad = init_theta_phi_uniform(N); + + auto nesterov_opt = bopt::make_nag(&thomson_energy>, u_ad, lr, mu); + + // filenames + std::string pos_filename = "thomson_" + std::to_string(N) + ".csv"; + std::string energy_filename = "nesterov_energy_" + std::to_string(N) + ".csv"; + + std::ofstream pos_out(pos_filename); + std::ofstream energy_out(energy_filename); + + energy_out << "step,energy\n"; + + auto result = minimize(nesterov_opt); + for (int pi = 0; pi < N; ++pi) { + double theta = u_ad[2 * pi + 0].item(); + double phi = u_ad[2 * pi + 1].item(); + auto r = sph_to_xyz(theta, phi); + pos_out << pi << "," << r.x << "," << r.y << "," << r.z << "\n"; + } + auto E = nesterov_opt.objective_value(); + int i = 0; + for(auto& obj_hist : result.objective_history) + { + energy_out << i << "," << obj_hist << "\n"; + ++i; + } + energy_out << "," << E << "\n"; + + pos_out.close(); + energy_out.close(); + + return 0; +} diff --git a/include/boost/math/ccmath/signbit.hpp b/include/boost/math/ccmath/signbit.hpp index bb12a5b61..87f4cc7c9 100644 --- a/include/boost/math/ccmath/signbit.hpp +++ b/include/boost/math/ccmath/signbit.hpp @@ -14,7 +14,6 @@ #include #include -#include #include #include diff --git a/include/boost/math/differentiation/autodiff_reverse.hpp b/include/boost/math/differentiation/autodiff_reverse.hpp index c42d3e5a6..d7b5124ce 100644 --- a/include/boost/math/differentiation/autodiff_reverse.hpp +++ b/include/boost/math/differentiation/autodiff_reverse.hpp @@ -580,6 +580,8 @@ public: } it->backward(); } + + void set_item(RealType value) { value_ = inner_t(value); } }; template diff --git a/include/boost/math/differentiation/detail/reverse_mode_autodiff_memory_management.hpp b/include/boost/math/differentiation/detail/reverse_mode_autodiff_memory_management.hpp index ee668c18b..382af5f5c 100644 --- a/include/boost/math/differentiation/detail/reverse_mode_autodiff_memory_management.hpp +++ b/include/boost/math/differentiation/detail/reverse_mode_autodiff_memory_management.hpp @@ -23,407 +23,435 @@ namespace detail { template class flat_linear_allocator_iterator { - /** + /** * @brief enables iterating over linear allocator with * c++ iterators */ public: - using raw_allocator_type = std::remove_const_t; - using value_type = typename allocator_type::value_type; - using pointer = typename allocator_type::value_type *; - using const_ptr_type = const value_type *; - using reference = typename allocator_type::value_type &; - using const_reference_type = const value_type &; - using iterator_category = std::random_access_iterator_tag; - using difference_type = ptrdiff_t; + using raw_allocator_type = std::remove_const_t; + using value_type = typename allocator_type::value_type; + using pointer = typename allocator_type::value_type*; + using const_ptr_type = const value_type*; + using reference = typename allocator_type::value_type&; + using const_reference_type = const value_type&; + using iterator_category = std::random_access_iterator_tag; + using difference_type = ptrdiff_t; private: - const allocator_type *storage_ = nullptr; - size_t index_ = 0; - size_t begin_ = 0; - size_t end_ = 0; + const allocator_type* storage_ = nullptr; + size_t index_ = 0; + size_t begin_ = 0; + size_t end_ = 0; public: - flat_linear_allocator_iterator() = default; + flat_linear_allocator_iterator() = default; - explicit flat_linear_allocator_iterator(allocator_type *storage, size_t index) - : storage_(storage) - , index_(index) - , begin_(0) - , end_(storage->size()) - {} + explicit flat_linear_allocator_iterator(allocator_type* storage, size_t index) + : storage_(storage) + , index_(index) + , begin_(0) + , end_(storage->size()) + { + } - explicit flat_linear_allocator_iterator(allocator_type *storage, - size_t index, - size_t begin, - size_t end) - : storage_(storage) - , index_(index) - , begin_(begin) - , end_(end) - {} + explicit flat_linear_allocator_iterator(allocator_type* storage, + size_t index, + size_t begin, + size_t end) + : storage_(storage) + , index_(index) + , begin_(begin) + , end_(end) + { + } - explicit flat_linear_allocator_iterator(const allocator_type *storage, size_t index) - : storage_(storage) - , index_(index) - , begin_(0) - , end_(storage->size()) - {} + explicit flat_linear_allocator_iterator(const allocator_type* storage, + size_t index) + : storage_(storage) + , index_(index) + , begin_(0) + , end_(storage->size()) + { + } - explicit flat_linear_allocator_iterator(const allocator_type *storage, - size_t index, - size_t begin, - size_t end) - : storage_(storage) - , index_(index) - , begin_(begin) - , end_(end) - {} - reference operator*() - { - BOOST_MATH_ASSERT(index_ >= begin_ && index_ < end_); - return (*storage_->data_[index_ / buffer_size])[index_ % buffer_size]; - } + explicit flat_linear_allocator_iterator(const allocator_type* storage, + size_t index, + size_t begin, + size_t end) + : storage_(storage) + , index_(index) + , begin_(begin) + , end_(end) + { + } + reference operator*() + { + BOOST_MATH_ASSERT(index_ >= begin_ && index_ < end_); + return (*storage_->data_[index_ / buffer_size])[index_ % buffer_size]; + } - const_reference_type operator*() const - { - BOOST_MATH_ASSERT(index_ >= begin_ && index_ < end_); - return (*storage_->data_[index_ / buffer_size])[index_ % buffer_size]; - } + const_reference_type operator*() const + { + BOOST_MATH_ASSERT(index_ >= begin_ && index_ < end_); + return (*storage_->data_[index_ / buffer_size])[index_ % buffer_size]; + } - pointer operator->() - { - BOOST_MATH_ASSERT(index_ >= begin_ && index_ < end_); - return &operator*(); - } + pointer operator->() + { + BOOST_MATH_ASSERT(index_ >= begin_ && index_ < end_); + return &operator*(); + } - const_ptr_type operator->() const - { - BOOST_MATH_ASSERT(index_ >= begin_ && index_ < end_); - return &operator*(); - } - flat_linear_allocator_iterator &operator++() - { - ++index_; - return *this; - } + const_ptr_type operator->() const + { + BOOST_MATH_ASSERT(index_ >= begin_ && index_ < end_); + return &operator*(); + } + flat_linear_allocator_iterator& operator++() + { + ++index_; + return *this; + } - flat_linear_allocator_iterator operator++(int) - { - auto tmp = *this; - ++(*this); - return tmp; - } + flat_linear_allocator_iterator operator++(int) + { + auto tmp = *this; + ++(*this); + return tmp; + } - flat_linear_allocator_iterator &operator--() - { - --index_; - return *this; - } + flat_linear_allocator_iterator& operator--() + { + --index_; + return *this; + } - flat_linear_allocator_iterator operator--(int) - { - auto tmp = *this; - --(*this); - return tmp; - } + flat_linear_allocator_iterator operator--(int) + { + auto tmp = *this; + --(*this); + return tmp; + } - bool operator==(const flat_linear_allocator_iterator &other) const - { - return index_ == other.index_ && storage_ == other.storage_; - } + bool operator==(const flat_linear_allocator_iterator& other) const + { + return index_ == other.index_ && storage_ == other.storage_; + } - bool operator!=(const flat_linear_allocator_iterator &other) const { return !(*this == other); } + bool operator!=(const flat_linear_allocator_iterator& other) const + { + return !(*this == other); + } - flat_linear_allocator_iterator operator+(difference_type n) const - { - return flat_linear_allocator_iterator(storage_, index_ + static_cast(n), begin_, end_); - } + flat_linear_allocator_iterator operator+(difference_type n) const + { + return flat_linear_allocator_iterator( + storage_, index_ + static_cast(n), begin_, end_); + } - flat_linear_allocator_iterator &operator+=(difference_type n) - { - index_ += n; - return *this; - } + flat_linear_allocator_iterator& operator+=(difference_type n) + { + index_ += n; + return *this; + } - flat_linear_allocator_iterator operator-(difference_type n) const - { - return flat_linear_allocator_iterator(storage_, index_ - n, begin_, end_); - } - flat_linear_allocator_iterator &operator-=(difference_type n) - { - index_ -= n; - return *this; - } + flat_linear_allocator_iterator operator-(difference_type n) const + { + return flat_linear_allocator_iterator(storage_, index_ - n, begin_, end_); + } + flat_linear_allocator_iterator& operator-=(difference_type n) + { + index_ -= n; + return *this; + } - difference_type operator-(const flat_linear_allocator_iterator &other) const - { - return static_cast(index_) - static_cast(other.index_); - } + difference_type operator-(const flat_linear_allocator_iterator& other) const + { + return static_cast(index_) - + static_cast(other.index_); + } - reference operator[](difference_type n) { return *(*this + n); } + reference operator[](difference_type n) { return *(*this + n); } - const_reference_type operator[](difference_type n) const { return *(*this + n); } + const_reference_type operator[](difference_type n) const + { + return *(*this + n); + } - bool operator<(const flat_linear_allocator_iterator &other) const - { - return index_ < other.index_; - } + bool operator<(const flat_linear_allocator_iterator& other) const + { + return index_ < other.index_; + } - bool operator>(const flat_linear_allocator_iterator &other) const - { - return index_ > other.index_; - } + bool operator>(const flat_linear_allocator_iterator& other) const + { + return index_ > other.index_; + } - bool operator<=(const flat_linear_allocator_iterator &other) const - { - return index_ <= other.index_; - } + bool operator<=(const flat_linear_allocator_iterator& other) const + { + return index_ <= other.index_; + } - bool operator>=(const flat_linear_allocator_iterator &other) const - { - return index_ >= other.index_; - } + bool operator>=(const flat_linear_allocator_iterator& other) const + { + return index_ >= other.index_; + } - bool operator!() const noexcept { return storage_ == nullptr; } + bool operator!() const noexcept { return storage_ == nullptr; } }; /* memory management helps for tape */ template class flat_linear_allocator { - /** @brief basically a vector> + /** @brief basically a vector> * intended to work like a vector that allocates memory in chunks * and doesn't invalidate references * */ public: - // store vector of unique pointers to arrays - // to avoid vector reference invalidation - using buffer_type = std::array; - using buffer_ptr = std::unique_ptr>; + // store vector of unique pointers to arrays + // to avoid vector reference invalidation + using buffer_type = std::array; + using buffer_ptr = std::unique_ptr>; private: - std::vector data_; - size_t total_size_ = 0; - std::vector checkpoints_; //{0}; + std::vector data_; + size_t total_size_ = 0; + std::vector checkpoints_; //{0}; public: - friend class flat_linear_allocator_iterator, - buffer_size>; - friend class flat_linear_allocator_iterator, - buffer_size>; - using value_type = RealType; - using iterator - = flat_linear_allocator_iterator, buffer_size>; - using const_iterator - = flat_linear_allocator_iterator, - buffer_size>; + friend class flat_linear_allocator_iterator< + flat_linear_allocator, + buffer_size>; + friend class flat_linear_allocator_iterator< + const flat_linear_allocator, + buffer_size>; + using value_type = RealType; + using iterator = + flat_linear_allocator_iterator, + buffer_size>; + using const_iterator = flat_linear_allocator_iterator< + const flat_linear_allocator, + buffer_size>; - size_t buffer_id() const noexcept { return total_size_ / buffer_size; } - size_t item_id() const noexcept { return total_size_ % buffer_size; } + size_t buffer_id() const noexcept { return total_size_ / buffer_size; } + size_t item_id() const noexcept { return total_size_ % buffer_size; } private: - void allocate_buffer() - { - data_.emplace_back(std::make_unique()); - } + void allocate_buffer() + { + data_.emplace_back(std::make_unique()); + } public: - flat_linear_allocator() { allocate_buffer(); } - flat_linear_allocator(const flat_linear_allocator &) = delete; - flat_linear_allocator &operator=(const flat_linear_allocator &) = delete; - flat_linear_allocator(flat_linear_allocator &&) = delete; - flat_linear_allocator &operator=(flat_linear_allocator &&) = delete; - ~flat_linear_allocator() - { - destroy_all(); - data_.clear(); - } + flat_linear_allocator() { allocate_buffer(); } + flat_linear_allocator(const flat_linear_allocator&) = delete; + flat_linear_allocator& operator=(const flat_linear_allocator&) = delete; + flat_linear_allocator(flat_linear_allocator&&) = delete; + flat_linear_allocator& operator=(flat_linear_allocator&&) = delete; + ~flat_linear_allocator() + { + destroy_all(); + data_.clear(); + } - void destroy_all() - { - for (size_t i = 0; i < total_size_; ++i) { - size_t bid = i / buffer_size; - size_t iid = i % buffer_size; - (*data_[bid])[iid].~RealType(); - } + void destroy_all() + { + for (size_t i = 0; i < total_size_; ++i) { + size_t bid = i / buffer_size; + size_t iid = i % buffer_size; + (*data_[bid])[iid].~RealType(); } - /** @brief + } + /** @brief * helper functions to clear tape and create block in tape */ - void clear() - { - data_.clear(); - total_size_ = 0; - checkpoints_.clear(); - allocate_buffer(); - } + void clear() + { + data_.clear(); + total_size_ = 0; + checkpoints_.clear(); + allocate_buffer(); + } - // doesn't delete anything, only sets the current index to zero - void reset() { total_size_ = 0; } - void rewind() { total_size_ = 0; }; + // doesn't delete anything, only sets the current index to zero + void reset() { total_size_ = 0; } + void rewind() { total_size_ = 0; }; - // adds current index as a checkpoint to be able to walk back to - void add_checkpoint() - { - if (total_size_ > 0) { - checkpoints_.push_back(total_size_ - 1); - } else { - checkpoints_.push_back(0); - } - }; + // adds current index as a checkpoint to be able to walk back to + void add_checkpoint() + { + checkpoints_.push_back(total_size_); + /* + * if (total_size_ > 0) { + checkpoints_.push_back(total_size_ - 1); + } else { + checkpoints_.push_back(0); + }*/ + }; - /** @brief clears all checkpoints + /** @brief clears all checkpoints * */ - void reset_checkpoints() { checkpoints_.clear(); } + void reset_checkpoints() { checkpoints_.clear(); } - void rewind_to_last_checkpoint() { total_size_ = checkpoints_.back(); } - void rewind_to_checkpoint_at(size_t index) { total_size_ = checkpoints_[index]; } + void rewind_to_last_checkpoint() { total_size_ = checkpoints_.back(); } + void rewind_to_checkpoint_at(size_t index) + { + total_size_ = checkpoints_[index]; + } - void fill(const RealType &val) - { - for (size_t i = 0; i < total_size_; ++i) { - size_t bid = i / buffer_size; - size_t iid = i % buffer_size; - (*data_[bid])[iid] = val; - } + void fill(const RealType& val) + { + for (size_t i = 0; i < total_size_; ++i) { + size_t bid = i / buffer_size; + size_t iid = i % buffer_size; + (*data_[bid])[iid] = val; } + } - /** @brief emplaces back object at the end of the + /** @brief emplaces back object at the end of the * data structure, calls default constructor */ - iterator emplace_back() - { - if (item_id() == 0 && total_size_ != 0) { - allocate_buffer(); - } - size_t bid = buffer_id(); - size_t iid = item_id(); + iterator emplace_back() + { + if (item_id() == 0 && total_size_ != 0) { + allocate_buffer(); + } + size_t bid = buffer_id(); + size_t iid = item_id(); - RealType *ptr = &(*data_[bid])[iid]; - new (ptr) RealType(); - ++total_size_; - return iterator(this, total_size_ - 1); - }; + RealType* ptr = &(*data_[bid])[iid]; + new (ptr) RealType(); + ++total_size_; + return iterator(this, total_size_ - 1); + }; - /** @brief, emplaces back object at end of data structure, + /** @brief, emplaces back object at end of data structure, * passes arguments to constructor */ - template - iterator emplace_back(Args &&...args) - { - if (item_id() == 0 && total_size_ != 0) { - allocate_buffer(); - } - BOOST_MATH_ASSERT(buffer_id() < data_.size()); - BOOST_MATH_ASSERT(item_id() < buffer_size); - RealType *ptr = &(*data_[buffer_id()])[item_id()]; - new (ptr) RealType(std::forward(args)...); - ++total_size_; - return iterator(this, total_size_ - 1); + template + iterator emplace_back(Args&&... args) + { + if (item_id() == 0 && total_size_ != 0) { + allocate_buffer(); } - /** @brief default constructs n objects at end of + BOOST_MATH_ASSERT(buffer_id() < data_.size()); + BOOST_MATH_ASSERT(item_id() < buffer_size); + RealType* ptr = &(*data_[buffer_id()])[item_id()]; + new (ptr) RealType(std::forward(args)...); + ++total_size_; + return iterator(this, total_size_ - 1); + } + /** @brief default constructs n objects at end of * data structure, n known at compile time */ - template - iterator emplace_back_n() - { - size_t bid = buffer_id(); - size_t iid = item_id(); - if (iid + n < buffer_size) { - RealType *ptr = &(*data_[bid])[iid]; - for (size_t i = 0; i < n; ++i) { - new (ptr + i) RealType(); - } - total_size_ += n; - return iterator(this, total_size_ - n, total_size_ - n, total_size_); - } else { - size_t allocs_in_curr_buffer = buffer_size - iid; - size_t allocs_in_next_buffer = n - (buffer_size - iid); - RealType *ptr = &(*data_[bid])[iid]; - for (size_t i = 0; i < allocs_in_curr_buffer; ++i) { - new (ptr + i) RealType(); - } - allocate_buffer(); - bid = data_.size() - 1; - iid = 0; - total_size_ += n; + template + iterator emplace_back_n() + { + size_t bid = buffer_id(); + size_t iid = item_id(); + if (iid + n < buffer_size) { + RealType* ptr = &(*data_[bid])[iid]; + for (size_t i = 0; i < n; ++i) { + new (ptr + i) RealType(); + } + total_size_ += n; + return iterator(this, total_size_ - n, total_size_ - n, total_size_); + } else { + size_t allocs_in_curr_buffer = buffer_size - iid; + size_t allocs_in_next_buffer = n - (buffer_size - iid); + RealType* ptr = &(*data_[bid])[iid]; + for (size_t i = 0; i < allocs_in_curr_buffer; ++i) { + new (ptr + i) RealType(); + } + allocate_buffer(); + bid = data_.size() - 1; + iid = 0; + total_size_ += n; - RealType *ptr2 = &(*data_[bid])[iid]; - for (size_t i = 0; i < allocs_in_next_buffer; i++) { - new (ptr2 + i) RealType(); - } - return iterator(this, total_size_ - n, total_size_ - n, total_size_); - } + RealType* ptr2 = &(*data_[bid])[iid]; + for (size_t i = 0; i < allocs_in_next_buffer; i++) { + new (ptr2 + i) RealType(); + } + return iterator(this, total_size_ - n, total_size_ - n, total_size_); } - /** @brief default constructs n objects at end of + } + /** @brief default constructs n objects at end of * data structure, n known at run time */ - iterator emplace_back_n(size_t n) - { - size_t bid = buffer_id(); - size_t iid = item_id(); - if (iid + n < buffer_size) { - RealType *ptr = &(*data_[bid])[iid]; - for (size_t i = 0; i < n; ++i) { - new (ptr + i) RealType(); - } - total_size_ += n; - return iterator(this, total_size_ - n, total_size_ - n, total_size_); - } else { - size_t allocs_in_curr_buffer = buffer_size - iid; - size_t allocs_in_next_buffer = n - (buffer_size - iid); - RealType *ptr = &(*data_[bid])[iid]; - for (size_t i = 0; i < allocs_in_curr_buffer; ++i) { - new (ptr + i) RealType(); - } - allocate_buffer(); - bid = data_.size() - 1; - iid = 0; - total_size_ += n; + iterator emplace_back_n(size_t n) + { + size_t bid = buffer_id(); + size_t iid = item_id(); + if (iid + n < buffer_size) { + RealType* ptr = &(*data_[bid])[iid]; + for (size_t i = 0; i < n; ++i) { + new (ptr + i) RealType(); + } + total_size_ += n; + return iterator(this, total_size_ - n, total_size_ - n, total_size_); + } else { + size_t allocs_in_curr_buffer = buffer_size - iid; + size_t allocs_in_next_buffer = n - (buffer_size - iid); + RealType* ptr = &(*data_[bid])[iid]; + for (size_t i = 0; i < allocs_in_curr_buffer; ++i) { + new (ptr + i) RealType(); + } + allocate_buffer(); + bid = data_.size() - 1; + iid = 0; + total_size_ += n; - RealType *ptr2 = &(*data_[bid])[iid]; - for (size_t i = 0; i < allocs_in_next_buffer; i++) { - new (ptr2 + i) RealType(); - } - return iterator(this, total_size_ - n, total_size_ - n, total_size_); - } + RealType* ptr2 = &(*data_[bid])[iid]; + for (size_t i = 0; i < allocs_in_next_buffer; i++) { + new (ptr2 + i) RealType(); + } + return iterator(this, total_size_ - n, total_size_ - n, total_size_); } + } - /** @brief number of elements */ - size_t size() const { return total_size_; } + /** @brief number of elements */ + size_t size() const { return total_size_; } - /** @brief total capacity */ - size_t capacity() const { return data_.size() * buffer_size; } + /** @brief total capacity */ + size_t capacity() const { return data_.size() * buffer_size; } - /** @brief iterator helpers */ - iterator begin() { return iterator(this, 0); } - iterator end() { return iterator(this, total_size_); } - const_iterator begin() const { return const_iterator(this, 0); } - const_iterator end() const { return const_iterator(this, total_size_); } + /** @brief iterator helpers */ + iterator begin() { return iterator(this, 0); } + iterator end() { return iterator(this, total_size_); } + const_iterator begin() const { return const_iterator(this, 0); } + const_iterator end() const { return const_iterator(this, total_size_); } - iterator last_checkpoint() { return iterator(this, checkpoints_.back(), 0, total_size_); } - iterator first_checkpoint() { return iterator(this, checkpoints_[0], 0, total_size_); }; - iterator checkpoint_at(size_t index) - { - return iterator(this, checkpoints_[index], 0, total_size_); - }; + iterator last_checkpoint() + { + return iterator(this, checkpoints_.back(), 0, total_size_); + } + iterator first_checkpoint() + { + return iterator(this, checkpoints_[0], 0, total_size_); + }; + iterator checkpoint_at(size_t index) + { + return iterator(this, checkpoints_[index], 0, total_size_); + }; - /** @brief searches for item in allocator + /** @brief searches for item in allocator * only used to find gradient nodes for propagation */ - iterator find(const RealType *const item) - { - return std::find_if(begin(), end(), [&](const RealType &val) { return &val == item; }); - } - /** @brief vector like access, + iterator find(const RealType* const item) + { + return std::find_if( + begin(), end(), [&](const RealType& val) { return &val == item; }); + } + /** @brief vector like access, * currently unused anywhere but very useful for debugging */ - RealType &operator[](std::size_t i) - { - BOOST_MATH_ASSERT(i < total_size_); - return (*data_[i / buffer_size])[i % buffer_size]; - } - const RealType &operator[](std::size_t i) const - { - BOOST_MATH_ASSERT(i < total_size_); - return (*data_[i / buffer_size])[i % buffer_size]; - } + RealType& operator[](std::size_t i) + { + BOOST_MATH_ASSERT(i < total_size_); + return (*data_[i / buffer_size])[i % buffer_size]; + } + const RealType& operator[](std::size_t i) const + { + BOOST_MATH_ASSERT(i < total_size_); + return (*data_[i / buffer_size])[i % buffer_size]; + } }; } // namespace detail } // namespace reverse_mode diff --git a/include/boost/math/optimization/detail/differentiable_opt_utilties.hpp b/include/boost/math/optimization/detail/differentiable_opt_utilties.hpp new file mode 100644 index 000000000..8fd3c2a08 --- /dev/null +++ b/include/boost/math/optimization/detail/differentiable_opt_utilties.hpp @@ -0,0 +1,157 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_OPTIMIZATION_DETAIL_DIFFERENTIABLE_OPT_UTILITIES_HPP +#define BOOST_MATH_OPTIMIZATION_DETAIL_DIFFERENTIABLE_OPT_UTILITIES_HPP +#include +#include +#include +#include +#include + +namespace boost { +namespace math { +namespace optimization { + +namespace rdiff = boost::math::differentiation::reverse_mode; + +/** @brief> helper to get the underlying realtype from + * update policy + * */ +template +struct update_policy_real_type; + +template class UpdPol, typename RealType> +struct update_policy_real_type> +{ + using type = RealType; +}; + +template +using update_policy_real_type_t = + typename update_policy_real_type::type>::type; + +/** @brief> get realtype from argument container + * */ +template +struct argument_container_t +{ + using type = typename argument_container_t::type>::type; +}; + +template +struct argument_container_t> +{ + using type = ValueType; +}; + +template +struct argument_container_t, N>> +{ + using type = RealType; +}; + +template class Container, typename ValueType, typename... Args> +struct argument_container_t> +{ + using type = ValueType; +}; + +template class Container, + typename RealType, + std::size_t N, + typename... Args> +struct argument_container_t, Args...>> +{ + using type = RealType; +}; +/******************************************************************************/ +/** @brief simple blas helpers + */ +template +auto +dot(const Container& x, const Container& y) -> typename Container::value_type +{ + using T = typename Container::value_type; + BOOST_MATH_ASSERT(x.size() == y.size()); + return std::inner_product(x.begin(), x.end(), y.begin(), T(0)); +} + +template +auto +norm_2(const Container& x) -> typename Container::value_type +{ + return sqrt(dot(x, x)); +} + +template +auto +norm_1(const Container& x) -> typename Container::value_type +{ + using T = typename Container::value_type; + T ret{ 0 }; + for (auto& xi : x) { + ret += abs(xi); + } + return ret; +} + +template +T +norm_inf(const std::vector& x) +{ + BOOST_ASSERT(!x.empty()); + + T max_val = std::abs(x[0]); + const std::size_t n = x.size(); + + for (std::size_t i = 1; i < n; ++i) { + const T abs_val = std::abs(x[i]); + if (abs_val > max_val) + max_val = abs_val; + } + return max_val; +} +/** @brief alpha*x (alpha is scalar, x is vector */ +template +void +scale(Container& x, const RealType& alpha) +{ + for (auto& xi : x) { + xi *= alpha; + } +} + +/** @brief y += alpha * x + */ +template +void +axpy(RealType alpha, const ContainerX& x, ContainerY& y) +{ + BOOST_MATH_ASSERT(x.size() == y.size()); + const size_t n = x.size(); + for (size_t i = 0; i < n; ++i) { + y[i] += alpha * x[i]; + } +} +/******************************************************************************/ +template +std::vector +random_vector(size_t n) +{ + /** @brief> generates a random std::vector of size n + * using mt19937 algorithm + */ + static std::mt19937 rng{ std::random_device{}() }; + static std::uniform_real_distribution dist(0.0, 1.0); + + std::vector result(n); + std::generate(result.begin(), result.end(), [&] { return static_cast(dist(rng)); }); + return result; +} + +} // namespace optimization +} // namespace math +} // namespace boost +#endif diff --git a/include/boost/math/optimization/detail/gradient_opt_base.hpp b/include/boost/math/optimization/detail/gradient_opt_base.hpp new file mode 100644 index 000000000..e13b79279 --- /dev/null +++ b/include/boost/math/optimization/detail/gradient_opt_base.hpp @@ -0,0 +1,92 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_OPTIMIZATION_DETAIL_GRADIENT_OPT_BASE_HPP +#define BOOST_MATH_OPTIMIZATION_DETAIL_GRADIENT_OPT_BASE_HPP +#include + +namespace boost { +namespace math { +namespace optimization { + +namespace rdiff = boost::math::differentiation::reverse_mode; + +/** + * @brief The abstract_optimizer class implementing common variables + * and methods across optimizers + * + * @tparam> ArgumentContainer + * @tparam> RealType + * @tparam> Objective + * @tparam> InitializationPolicy + * + */ + +template +class abstract_optimizer +{ +protected: + Objective objective_; // obj function + ArgumentContainer& x_; // arguments to objective function + std::vector g_; // container of references to gradients + ObjectiveEvalPolicy obj_eval_; // how to evaluate your funciton + GradEvalPolicy grad_eval_; // how to evaluate/bind gradients + InitializationPolicy init_; // how to initialize the problem + UpdatePolicy update_; // update step + RealType obj_v_; // objective value (for history) + // access derived class + DerivedOptimizer& derived() { return static_cast(*this); } + const DerivedOptimizer& derived() const + { + return static_cast(*this); + } + + void step_impl() + { + grad_eval_(objective_, x_, obj_eval_, obj_v_, g_); + for (size_t i = 0; i < x_.size(); ++i) { + update_(x_[i], g_[i]); + } + }; + +public: + using argument_container_t = ArgumentContainer; + using real_type_t = RealType; + + abstract_optimizer(Objective&& objective, + ArgumentContainer& x, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep, + UpdatePolicy&& up) + : objective_(std::forward(objective)) + , x_(x) + , obj_eval_(std::forward(oep)) + , grad_eval_(std::forward(gep)) + , init_(std::forward(ip)) + , update_(std::forward(up)) + { + init_(x_); // initialize your problem + g_.resize(x_.size()); // initialize space for gradients + } + + ArgumentContainer& arguments() { return derived().x_; } + const ArgumentContainer& arguments() const { return derived().x_; } + + RealType& objective_value() { return derived().obj_v_; } + const RealType& objective_value() const { return derived().obj_v_; } + std::vector& gradients() { return derived().g_; } + const std::vector& gradients() const { return derived().g_; } +}; +} // namespace optimization +} // namespace math +} // namespace boost +#endif diff --git a/include/boost/math/optimization/detail/line_search_policies.hpp b/include/boost/math/optimization/detail/line_search_policies.hpp new file mode 100644 index 000000000..1bc3c1cc4 --- /dev/null +++ b/include/boost/math/optimization/detail/line_search_policies.hpp @@ -0,0 +1,206 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_OPTIMIZATION_DETAIL_LINE_SEARCH_POLICIES_HPP +#define BOOST_MATH_OPTIMIZATION_DETAIL_LINE_SEARCH_POLICIES_HPP + +#include +#include +#include +namespace boost { +namespace math { +namespace optimization { + +/** + * @brief> Armijo condition backtracking line search + * https://en.wikipedia.org/wiki/Backtracking_line_search + * + * f(x+alpha p) <= f(x) + alpha * c * grad(f)^T + * + * Jorge Nocedal and Stephen J. Wright, + * Numerical Optimization, 2nd Edition, + * Springer, 2006. + * + * Algorithm 3.1: Backtracking Line Search + * (Page 37) + */ +template +class armijo_line_search_policy +{ +private: + RealType alpha0_; // initial step size + RealType c_; // sufficient decrease constant + RealType rho_; // backtracking factor + int max_iter_; // maximum backtracking steps + +public: + armijo_line_search_policy(RealType alpha0 = 1.0, + RealType c = 1e-4, + RealType rho = 0.5, + int max_iter = 20) + : alpha0_(alpha0) + , c_(c) + , rho_(rho) + , max_iter_(max_iter) + { + } + + template + RealType operator()(Objective& objective, + ObjectiveEvalPolicy& obj_eval, + GradientEvalPolicy& grad_eval, + ArgumentContainer& x, + const std::vector& g, + const std::vector& p, + RealType f_x) const + { + /** @brief> line search + * */ + RealType alpha = alpha0_; + ArgumentContainer x_trial; // = x; // copy + const RealType gTp = dot(g, p); + + for (int iter = 0; iter < max_iter_; ++iter) { + x_trial = x; + axpy(alpha, p, x_trial); + auto f_trial = obj_eval(objective, x_trial); + if (f_trial <= + f_x + c_ * alpha * gTp) // check if armijo condition is satisfied + return alpha; + alpha *= rho_; + } + return alpha; + } +}; + +/** @brief> Strong-Wolfe line search: + * Jorge Nocedal and Stephen J. Wright, + * Numerical Optimization, 2nd Edition, + * Springer, 2006. + * + * Algorithm 3.5 Line Search Algorithm (Strong Wolfe Conditions) + * pages 60-61 + */ +template +class strong_wolfe_line_search_policy +{ +private: + RealType alpha0_; // initial step size + RealType c1_; // Armijo constant (sufficient decrease) + RealType c2_; // curvature constant + RealType rho_; // backtracking factor + int max_iter_; // maximum iterations +public: + strong_wolfe_line_search_policy(RealType alpha0 = 1.0, + RealType c1 = 1e-4, + RealType c2 = 0.9, + RealType rho = 2.0, + int max_iter = 20) + : alpha0_(alpha0) + , c1_(c1) + , c2_(c2) + , rho_(rho) + , max_iter_(max_iter) + { + } + template + RealType operator()(Objective& objective, + ObjectiveEvalPolicy& obj_eval, + GradientEvalPolicy& grad_eval, + ArgumentContainer& x, + const std::vector& g, + const std::vector& p, + RealType f_x) const + { + RealType gTp0 = dot(g, p); + RealType alpha_prev{0}; + RealType f_prev = f_x; + RealType alpha = alpha0_; + + ArgumentContainer x_trial; + std::vector g_trial(g.size()); + for (int i = 0; i < max_iter_; ++i) { + x_trial = x; // explicit copy + axpy(alpha, p, x_trial); + RealType f_trial = static_cast(obj_eval(objective, x_trial)); + if ((f_trial > f_x + c1_ * alpha * gTp0) || + (i > 0 && f_trial >= f_prev)) { + return zoom( + objective, obj_eval, grad_eval, x, p, f_x, gTp0, alpha_prev, alpha); + } + grad_eval(objective, x_trial, obj_eval, f_trial, g_trial); + RealType gTp = dot(g_trial, p); + + if (fabs(gTp) <= c2_ * fabs(gTp0)) { + return alpha; + } + + if (gTp >= 0) { + return zoom( + objective, obj_eval, grad_eval, x, p, f_x, gTp0, alpha, alpha_prev); + } + alpha_prev = alpha; + f_prev = f_trial; + alpha *= rho_; + } + + return alpha; + } + +private: + template + RealType zoom(Objective& objective, + ObjectiveEvalPolicy& obj_eval, + GradientEvalPolicy& grad_eval, + ArgumentContainer& x, + const std::vector& p, + RealType f_x, + RealType gTp0, + RealType alpha_lo, + RealType alpha_hi) const + { + ArgumentContainer x_trial; + std::vector g_trial(p.size()); + + for (int iter = 0; iter < max_iter_; ++iter) { + const RealType alpha_mid = 0.5 * (alpha_lo + alpha_hi); + x_trial = x; + axpy(alpha_mid, p, x_trial); + RealType f_mid; + grad_eval(objective, x_trial, obj_eval, f_mid, g_trial); + RealType gTp_mid = dot(g_trial, p); + ArgumentContainer x_lo = x; + axpy(alpha_lo, p, x_lo); + RealType f_lo = static_cast(obj_eval(objective, x_lo)); + if ((f_mid > f_x + c1_ * alpha_mid * gTp0) || (f_mid >= f_lo)) { + alpha_hi = alpha_mid; + } else { + if (fabs(gTp_mid) <= c2_ * fabs(gTp0)) { + return alpha_mid; + } + if (gTp_mid * (alpha_hi - alpha_lo) >= 0) { + alpha_hi = alpha_lo; + } + alpha_lo = alpha_mid; + } + } + + return 0.5 * (alpha_lo + alpha_hi); + } +}; + +} // namespace optimization +} // namespace math +} // namespace boost +#endif // LINE_SEARCH_POLICIES_HPP diff --git a/include/boost/math/optimization/detail/rdiff_optimization_policies.hpp b/include/boost/math/optimization/detail/rdiff_optimization_policies.hpp new file mode 100644 index 000000000..b4cad4b00 --- /dev/null +++ b/include/boost/math/optimization/detail/rdiff_optimization_policies.hpp @@ -0,0 +1,134 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_OPTIMIZATION_DETAIL_RDIFF_OPTIMIZATION_POLICIES_HPP +#define BOOST_MATH_OPTIMIZATION_DETAIL_RDIFF_OPTIMIZATION_POLICIES_HPP + +#include +#include +#include + +namespace boost { +namespace math { +namespace optimization { + +namespace rdiff = boost::math::differentiation::reverse_mode; + +/******************************************************************/ +/** + * @brief> function evaluation policy for reverse mode autodiff + * @arg objective> objective function to evaluate + * @arg x> argument list + */ +template +struct reverse_mode_function_eval_policy +{ + template + rdiff::rvar operator()(Objective&& objective, + ArgumentContainer& x) + { + auto& tape = rdiff::get_active_tape(); + tape.zero_grad(); + tape.rewind_to_last_checkpoint(); + + return objective(x); + } +}; +/******************************************************************/ + +/** + * @brief> gradient evaluation policy + * @arg obj_f> objective + * @arg x> argument list + * @arg f_eval_olicy> funciton evaluation policy. These need to be + * done in tandem + * @arg obj_v> reference to variable inside gradient class + */ +template +struct reverse_mode_gradient_evaluation_policy +{ + template + void operator()(Objective&& obj_f, + ArgumentContainer& x, + FunctionEvaluationPolicy&& f_eval_pol, + RealType& obj_v, + std::vector& g) + { + // compute objective via eval policy that takes care of tape + rdiff::rvar v = f_eval_pol(obj_f, x); + v.backward(); + obj_v = v.item(); + g.resize(x.size()); + + // copy gradients into gradient vector + for (size_t i = 0; i < x.size(); ++i) { + g[i] = x[i].adjoint(); + } + } +}; +/****************************************************************** + * init policies + */ +template +struct tape_initializer_rvar +{ + template + void operator()(ArgumentContainer& x) const noexcept + { + static_assert(std::is_same>::value, + "ArgumentContainer::value_type must be rdiff::rvar"); + auto& tape = rdiff::get_active_tape(); + tape.add_checkpoint(); + } +}; + +template +struct random_uniform_initializer_rvar +{ + RealType low_, high_; + size_t seed_; + random_uniform_initializer_rvar(RealType low = 0, + RealType high = 1, + size_t seed = std::random_device{}()) + : low_(low) + , high_(high) + , seed_(seed) {}; + + template + void operator()(ArgumentContainer& x) const + { + static std::mt19937 gen{ std::random_device{}() }; + static std::uniform_real_distribution dist(0.0, 1.0); + for (auto& xi : x) { + xi = rdiff::rvar(static_cast(dist(gen))); + } + auto& tape = rdiff::get_active_tape(); + tape.add_checkpoint(); + } +}; + +template +struct costant_initializer_rvar +{ + RealType constant; + explicit costant_initializer_rvar(RealType v = 0) + : constant(v) {}; + template + void operator()(ArgumentContainer& x) const + { + for (auto& xi : x) { + xi = rdiff::rvar(constant); + } + auto& tape = rdiff::get_active_tape(); + tape.add_checkpoint(); + } +}; +} // namespace optimization +} // namespace math +} // namespace boost + +#endif diff --git a/include/boost/math/optimization/gradient_descent.hpp b/include/boost/math/optimization/gradient_descent.hpp new file mode 100644 index 000000000..68972e296 --- /dev/null +++ b/include/boost/math/optimization/gradient_descent.hpp @@ -0,0 +1,202 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_OPTIMIZATION_GRADIENT_DESCENT_HPP +#define BOOST_MATH_OPTIMIZATION_GRADIENT_DESCENT_HPP +#include +#include +#include + +namespace boost { +namespace math { +namespace optimization { + +template +struct gradient_descent_update_policy +{ + RealType lr_; + gradient_descent_update_policy(RealType lr) + : lr_(lr) {}; + + template::value>::type> + void operator()(ArgumentType& x, RealType& g) + { + x.get_value() -= lr_ * g; + } + template::value, + int>::type = 0> + void operator()(ArgumentType& x, RealType& g) const + { + x -= lr_ * g; + } +}; + +/** + * @brief> Gradient Descent Optimizer. + * + * This class implements a gradient descent optimization strategy using the + * policies provided for initialization, objective evaluation, and gradient + * computation. It inherits from `abstract_optimizer`, which provides the + * general optimization framework. + * + * @tparam> ArgumentContainer Type of the parameter container (e.g. + * std::vector). + * @tparam> RealType Floating-point type + * @tparam> Objective Objective function type (functor or callable). + * @tparam> InitializationPolicy Policy controlling initialization of + * differentiable variables. + * @tparam> ObjectiveEvalPolicy Policy defining how the objective is evaluated. + * @tparam> GradEvalPolicy Policy defining how the gradient is computed. + */ + +template +class gradient_descent + : public abstract_optimizer, + gradient_descent> +{ + using base_opt = abstract_optimizer, + gradient_descent>; + +public: + using base_opt::base_opt; + /** + * @brief Perform one optimization step. + * + * defaults to a regular update inside abstract optimizer + * x -= lr * grad(f) + */ + void step() { this->step_impl(); } +}; + +/** + * @brief Create a gradient descent optimizer with default reverse-mode autodiff + policies. + * + * make_gradient_descent(objective, x) + * constructs gradient descent with objective function, and parameters x + * + * learning rate set to 0.01 by default + * + * initialization strategy : use specified, gradient tape taken care of by + * optimizer + * function eval policy : rvar function eval policy, to be used with + * boost::math::differentiation::reverse_mode::rvar + * + * gradient eval policy : rvar gradient evaluation policy + * + * gradient descent update policy : + * basically x -= lr * grad(f); + * + * make_gradient_descent(objective, x, lr) + * custom learning rate +*/ + +template +auto +make_gradient_descent(Objective&& obj, + ArgumentContainer& x, + RealType lr = RealType{ 0.01 }) +{ + return gradient_descent, + tape_initializer_rvar, + reverse_mode_function_eval_policy, + reverse_mode_gradient_evaluation_policy>( + std::forward(obj), + x, + tape_initializer_rvar{}, + reverse_mode_function_eval_policy{}, + reverse_mode_gradient_evaluation_policy{}, + gradient_descent_update_policy(lr)); +} + +template +auto +make_gradient_descent(Objective&& obj, + ArgumentContainer& x, + RealType lr, + InitializationPolicy&& ip) +{ + return gradient_descent, + InitializationPolicy, + reverse_mode_function_eval_policy, + reverse_mode_gradient_evaluation_policy>( + std::forward(obj), + x, + std::forward(ip), + reverse_mode_function_eval_policy{}, + reverse_mode_gradient_evaluation_policy{}, + gradient_descent_update_policy(lr)); +} + +template +auto +make_gradient_descent(Objective&& obj, + ArgumentContainer& x, + RealType& lr, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep) +{ + return gradient_descent, + InitializationPolicy, + ObjectiveEvalPolicy, + GradEvalPolicy>( + std::forward(obj), + x, + std::forward(ip), + std::forward(oep), + std::forward(gep), + gradient_descent_update_policy{ lr }); +} + +} // namespace optimization +} // namespace math +} // namespace boost +#endif diff --git a/include/boost/math/optimization/gradient_optimizers.hpp b/include/boost/math/optimization/gradient_optimizers.hpp new file mode 100644 index 000000000..f9e6a8de4 --- /dev/null +++ b/include/boost/math/optimization/gradient_optimizers.hpp @@ -0,0 +1,18 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_OPTIMIZATION_GRADIENT_OPTIMIZERS_HPP +#define BOOST_MATH_OPTIMIZATION_GRADIENT_OPTIMIZERS_HPP +#include +#include +#include +#include + +namespace boost { +namespace math { +namespace optimization { +} // namespace optimization +} // namespace math +} // namespace boost +#endif diff --git a/include/boost/math/optimization/lbfgs.hpp b/include/boost/math/optimization/lbfgs.hpp new file mode 100644 index 000000000..5554b7721 --- /dev/null +++ b/include/boost/math/optimization/lbfgs.hpp @@ -0,0 +1,382 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_OPTIMIZATION_LBFGS_HPP +#define BOOST_MATH_OPTIMIZATION_LBFGS_HPP +#include +#include +#include +#include + +#include +#include + +namespace boost { +namespace math { +namespace optimization { + +/** @brief> Helper struct for L-BFGS + * + * stores state of L-BFGS optimizer + * @param> m = 10 -> history (how far back to look) + * @param> S - > x_k - x_{k-1} ( m states ) + * @param> Y - > g_k - g_{k-1} (m states) + * @param> rho - > 1/(y^T y) + * @param> g_prev, x_prev - > previous state of argument and gradient + * @param -> f_prev - > previous function value + * + * https://en.wikipedia.org/wiki/Limited-memory_BFGS + * + * Jorge Nocedal and Stephen J. Wright, + * Numerical Optimization, 2nd Edition, + * Springer, 2006. + * + * pages 176-180 + * algorithms 7.4/7.5 + * */ +template +struct lbfgs_optimizer_state +{ + size_t m = 10; // default history length + std::deque> S, Y; + std::deque rho; + std::vector g_prev, x_prev; + RealType f_prev = std::numeric_limits::quiet_NaN(); + const RealType EPS = std::numeric_limits::epsilon(); + + template + void update_state(ArgumentContainer& x, + std::vector& g_k, + RealType fk) + { + + // iteration 0 + if (g_prev.empty()) { + g_prev.assign(g_k.begin(), g_k.end()); + x_prev.resize(x.size()); + std::transform(x.begin(), x.end(), x_prev.begin(), [](const auto& xi) { + return static_cast(xi); + }); + f_prev = fk; + return; + } + + std::vector s_k(x.size()), y_k(g_k.size()); + for (size_t i = 0; i < x.size(); ++i) { + s_k[i] = static_cast(x[i]) - x_prev[i]; + y_k[i] = g_k[i] - g_prev[i]; + } + + RealType ys = dot(y_k, s_k); + RealType sn = sqrt(dot(s_k, s_k)); + RealType yn = sqrt(dot(y_k, y_k)); + + const RealType threshold = EPS * sn * yn; + if (ys > threshold && ys > RealType(0)) { // check if curvature if non-zero + if (S.size() == m) { // iteration > m + S.pop_front(); + Y.pop_front(); + rho.pop_front(); + } + S.push_back(std::move(s_k)); + Y.push_back(std::move(y_k)); + rho.push_back(RealType(1) / ys); + } + + g_prev.assign(g_k.begin(), g_k.end()); + // safely cast to realtype + std::transform(x.begin(), x.end(), x_prev.begin(), [](const auto& xi) { + return static_cast(xi); + }); + f_prev = fk; + } +}; + +/** @brief> helper update for l-bfgs + * x += alpha * search direction + * */ +template +struct lbfgs_update_policy +{ + template::value>::type> + void operator()(ArgumentType& x, RealType pk, RealType alpha) + { + x.get_value() += alpha * pk; + } + template::value, + int>::type = 0> + void operator()(ArgumentType& x, RealType pk, RealType alpha) + { + x += alpha * pk; + } +}; + +/** + * + * @brief Limited-memory BFGS (L-BFGS) optimizer + * + * The `lbfgs` class implements the Limited-memory BFGS optimization algorithm, + * a quasi-Newton method that approximates the inverse Hessian using a rolling + * window of the last `m` updates. It is suitable for medium- to large-scale + * optimization problems where full Hessian storage is infeasible. + * + * @tparam> ArgumentContainer: container type for parameters, e.g. + * std::vector + * @tparam> RealType scalar floating type (e.g. double, float) + * @tparam> Objective: objective function. must support "f(x)" evaluation + * @tparam> InitializationPolicy: policy for initializing x + * @tparam> ObjectiveEvalPolicy: policy for computing the objective value + * @tparam> GradEvalPolicy: policy for computing gradients + * @tparam> LineaSearchPolicy: e.g. Armijo, StrongWolfe + * + * https://en.wikipedia.org/wiki/Limited-memory_BFGS + */ + +template +class lbfgs + : public abstract_optimizer, + lbfgs> +{ + using base_opt = abstract_optimizer, + lbfgs>; + + const RealType EPS = std::numeric_limits::epsilon(); + lbfgs_optimizer_state state_; + LineSearchPolicy line_search_; + + std::vector compute_direction(const std::vector& gk) + { + const size_t n = gk.size(); + const size_t L = state_.S.size(); // since S changes when iter < m + + if (L == 0) { + std::vector p(n); + std::transform( + gk.begin(), gk.end(), p.begin(), [](RealType gi) { return -gi; }); + return p; + } + + std::vector q = gk; + std::vector alpha(L, RealType(0)); + for (size_t t = 0; t < L; ++t) { + const std::size_t i = L - 1 - t; // newest first + const RealType sTq = dot(state_.S[i], q); + alpha[i] = state_.rho[i] * sTq; + axpy(-alpha[i], state_.Y[i], q); + } + + const RealType sTy = dot(state_.S.back(), state_.Y.back()); + const RealType yTy = dot(state_.Y.back(), state_.Y.back()); + const RealType gamma = (yTy > RealType(0)) ? (sTy / yTy) : RealType(1); + + std::vector r = q; + scale(r, gamma); + + for (std::size_t i = 0; i < L; ++i) { + const RealType yTr = dot(state_.Y[i], r); + const RealType beta = state_.rho[i] * yTr; + axpy(alpha[i] - beta, state_.S[i], r); + } + scale(r, RealType{ -1 }); + return r; + } + +public: + using base_opt::base_opt; + lbfgs(Objective&& objective, + ArgumentContainer& x, + size_t m, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep, + lbfgs_update_policy&& up, + LineSearchPolicy&& lsp) + : base_opt(std::forward(objective), + x, + std::forward(ip), + std::forward(oep), + std::forward(gep), + std::forward>(up)) + , line_search_(lsp) + { + state_.m = m; + + state_.S.clear(); + state_.Y.clear(); + state_.rho.clear(); + state_.g_prev.clear(); + state_.f_prev = std::numeric_limits::quiet_NaN(); + } + + void step() + { + auto& x = this->arguments(); + auto& g = this->gradients(); + auto& obj = this->objective_value(); + auto& obj_eval = this->obj_eval_; + auto& grad_eval = this->grad_eval_; + auto& objective = this->objective_; + auto& update = this->update_; + + grad_eval(objective, x, obj_eval, obj, g); + state_.update_state(x, g, obj); + std::vector p = compute_direction(g); + RealType alpha = line_search_(objective, obj_eval, grad_eval, x, g, p, obj); + for (size_t i = 0; i < x.size(); ++i) { + update(x[i], p[i], alpha); + } + } +}; + +template +auto +make_lbfgs(Objective&& obj, ArgumentContainer& x, std::size_t m = 10) +{ + using RealType = typename argument_container_t::type; + return lbfgs, + tape_initializer_rvar, + reverse_mode_function_eval_policy, + reverse_mode_gradient_evaluation_policy, + strong_wolfe_line_search_policy>( + std::forward(obj), + x, + m, + tape_initializer_rvar{}, + reverse_mode_function_eval_policy{}, + reverse_mode_gradient_evaluation_policy{}, + lbfgs_update_policy{}, + strong_wolfe_line_search_policy{}); +} + +template +auto +make_lbfgs(Objective&& obj, + ArgumentContainer& x, + std::size_t m, + InitializationPolicy&& ip) +{ + using RealType = typename argument_container_t::type; + + return lbfgs, + InitializationPolicy, + reverse_mode_function_eval_policy, + reverse_mode_gradient_evaluation_policy, + strong_wolfe_line_search_policy>( + std::forward(obj), + x, + m, + std::forward(ip), + reverse_mode_function_eval_policy{}, + reverse_mode_gradient_evaluation_policy{}, + lbfgs_update_policy{}, + strong_wolfe_line_search_policy{}); +} + +template +auto +make_lbfgs(Objective&& obj, + ArgumentContainer& x, + std::size_t m, + InitializationPolicy&& ip, + LineSearchPolicy&& lsp) +{ + using RealType = typename argument_container_t::type; + + return lbfgs, + InitializationPolicy, + reverse_mode_function_eval_policy, + reverse_mode_gradient_evaluation_policy, + LineSearchPolicy>( + std::forward(obj), + x, + m, + std::forward(ip), + reverse_mode_function_eval_policy{}, + reverse_mode_gradient_evaluation_policy{}, + lbfgs_update_policy{}, + std::forward(lsp)); +} + +template +auto +make_lbfgs(Objective&& obj, + ArgumentContainer& x, + std::size_t m, + InitializationPolicy&& ip, + FunctionEvalPolicy&& fep, + GradientEvalPolicy&& gep, + LineSearchPolicy&& lsp) +{ + using RealType = typename argument_container_t::type; + return lbfgs, + InitializationPolicy, + FunctionEvalPolicy, + GradientEvalPolicy, + LineSearchPolicy>(std::forward(obj), + x, + m, + std::forward(ip), + std::forward(fep), + std::forward(gep), + lbfgs_update_policy{}, + std::forward(lsp)); +} + +} // namespace optimization +} // namespace math +} // namespace boost +#endif diff --git a/include/boost/math/optimization/minimizer.hpp b/include/boost/math/optimization/minimizer.hpp new file mode 100644 index 000000000..929c92b2f --- /dev/null +++ b/include/boost/math/optimization/minimizer.hpp @@ -0,0 +1,336 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_OPTIMIZATION_MINIMIZER_HPP +#define BOOST_MATH_OPTIMIZATION_MINIMIZER_HPP +#include +#include +#include +#include +namespace boost { +namespace math { +namespace optimization { +template +struct optimization_result +{ + size_t num_iter = 0; + RealType objective_value; + std::vector objective_history; + bool converged; +}; + +template +std::ostream& +operator<<(std::ostream& os, const optimization_result& r) +{ + os << "optimization_result {\n" + << " num_iter = " << r.num_iter << "\n" + << " objective_value = " << r.objective_value << "\n" + << " converged = " << std::boolalpha << r.converged << "\n" + << " objective_history = ["; + + for (std::size_t i = 0; i < r.objective_history.size(); ++i) { + os << r.objective_history[i]; + if (i + 1 < r.objective_history.size()) { + os << ", "; + } + } + os << "]\n}\n"; + return os; +} +/*****************************************************************************************/ +template +struct gradient_norm_convergence_policy +{ + RealType tol_; + explicit gradient_norm_convergence_policy(RealType tol) + : tol_(tol) + { + } + + template + bool operator()(const GradientContainer& g, RealType /*objective_v*/) const + { + return norm_2(g) < tol_; + } +}; + +template +struct objective_tol_convergence_policy +{ + RealType tol_; + mutable RealType last_value_; + mutable bool first_call_; + + explicit objective_tol_convergence_policy(RealType tol) + : tol_(tol) + , last_value_(0) + , first_call_(true) + { + } + + template + bool operator()(const GradientContainer&, RealType objective_v) const + { + if (first_call_) { + last_value_ = objective_v; + first_call_ = false; + return false; + } + RealType diff = abs(objective_v - last_value_); + last_value_ = objective_v; + return diff < tol_; + } +}; + +template +struct relative_objective_tol_policy +{ + RealType rel_tol_; + mutable RealType last_value_; + mutable bool first_call_; + + explicit relative_objective_tol_policy(RealType rel_tol) + : rel_tol_(rel_tol) + , last_value_(0) + , first_call_(true) + { + } + + template + bool operator()(const GradientContainer&, RealType objective_v) const + { + if (first_call_) { + last_value_ = objective_v; + first_call_ = false; + return false; + } + RealType denom = max(1, abs(last_value_)); + RealType rel_diff = abs(objective_v - last_value_) / denom; + last_value_ = objective_v; + return rel_diff < rel_tol_; + } +}; + +template +struct combined_convergence_policy +{ + Policy1 p1_; + Policy2 p2_; + + combined_convergence_policy(Policy1 p1, Policy2 p2) + : p1_(p1) + , p2_(p2) + { + } + + template + bool operator()(const GradientContainer& g, RealType obj) const + { + return p1_(g, obj) || p2_(g, obj); + } +}; + +/*****************************************************************************************/ +struct max_iter_termination_policy +{ + size_t max_iter_; + max_iter_termination_policy(size_t max_iter) + : max_iter_(max_iter) {}; + bool operator()(size_t iter) + { + if (iter < max_iter_) { + return false; + } + return true; + } +}; + +struct wallclock_termination_policy +{ + std::chrono::steady_clock::time_point start_; + std::chrono::milliseconds max_time_; + + explicit wallclock_termination_policy(std::chrono::milliseconds max_time) + : start_(std::chrono::steady_clock::now()) + , max_time_(max_time) + { + } + + bool operator()(size_t /*iter*/) const + { + return std::chrono::steady_clock::now() - start_ > max_time_; + } +}; + +/*****************************************************************************************/ +template +struct unconstrained_policy +{ + void operator()(ArgumentContainer&) {} +}; + +template +struct box_constraints +{ + RealType min_, max_; + box_constraints(RealType min, RealType max) + : min_(min) + , max_(max) {}; + void operator()(ArgumentContainer& x) + { + for (auto& xi : x) { + xi = (xi < min_) ? min_ : (max_ < xi) ? max_ : xi; + } + } +}; + +template +struct nonnegativity_constraint +{ + void operator()(ArgumentContainer& x) const + { + for (auto& xi : x) { + if (xi < RealType{ 0 }) + xi = RealType{ 0 }; + } + } +}; +template +struct l2_ball_constraint +{ + RealType radius_; + + explicit l2_ball_constraint(RealType radius) + : radius_(radius) + { + } + + void operator()(ArgumentContainer& x) const + { + RealType norm2v = norm_2(x); + if (norm2v > radius_) { + RealType scale = radius_ / norm2v; + for (auto& xi : x) + xi *= scale; + } + } +}; + +template +struct l1_ball_constraint +{ + RealType radius_; + + explicit l1_ball_constraint(RealType radius) + : radius_(radius) + { + } + + void operator()(ArgumentContainer& x) const + { + RealType norm1v = norm_1(x); + + if (norm1v > radius_) { + RealType scale = radius_ / norm1v; + for (auto& xi : x) + xi *= scale; + } + } +}; +template +struct simplex_constraint +{ + void operator()(ArgumentContainer& x) const + { + RealType sum = RealType{ 0 }; + for (auto& xi : x) { + if (xi < RealType{ 0 }) + xi = RealType{ 0 }; // clip negatives + sum += xi; + } + if (sum > RealType{ 0 }) { + for (auto& xi : x) + xi /= sum; + } + } +}; + +template +struct function_constraint +{ + using func_t = void (*)(ArgumentContainer&); + + func_t f_; + + explicit function_constraint(func_t f) + : f_(f) + { + } + + void operator()(ArgumentContainer& x) const { f_(x); } +}; +template +struct unit_sphere_constraint +{ + void operator()(ArgumentContainer& x) const + { + RealType norm = norm_2(x); + if (norm > RealType{ 0 }) { + for (auto& xi : x) + xi /= norm; + } + } +}; +/*****************************************************************************************/ + +template +auto +minimize_impl(Optimizer& opt, + ConstraintPolicy project, + ConvergencePolicy converged, + TerminationPolicy terminate, + bool history) +{ + optimization_result result; + size_t iter = 0; + do { + opt.step(); + project(opt.arguments()); + ++iter; + if (history) { + result.objective_history.push_back(opt.objective_value()); + } + + } while (!converged(opt.gradients(), opt.objective_value()) && + !terminate(iter)); + result.num_iter = iter; + result.objective_value = opt.objective_value(); + result.converged = converged(opt.gradients(), opt.objective_value()); + return result; +} +template, + class ConvergencePolicy = + gradient_norm_convergence_policy, + class TerminationPolicy = max_iter_termination_policy> +auto +minimize(Optimizer& opt, + ConstraintPolicy project = ConstraintPolicy{}, + ConvergencePolicy converged = + ConvergencePolicy{ + static_cast(1e-3) }, + TerminationPolicy terminate = TerminationPolicy(100000), + bool history = true) +{ + return minimize_impl(opt, project, converged, terminate, history); +} +} // namespace optimization +} // namespace math +} // namespace boost +#endif diff --git a/include/boost/math/optimization/nesterov.hpp b/include/boost/math/optimization/nesterov.hpp new file mode 100644 index 000000000..1c882f401 --- /dev/null +++ b/include/boost/math/optimization/nesterov.hpp @@ -0,0 +1,208 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_OPTIMIZATION_NESTEROV_HPP +#define BOOST_MATH_OPTIMIZATION_NESTEROV_HPP +#include +#include +#include +#include + +namespace boost { +namespace math { +namespace optimization { + +namespace rdiff = boost::math::differentiation::reverse_mode; + +/** + * @brief The nesterov_update_policy class + */ +template +struct nesterov_update_policy +{ + RealType lr_, mu_; + nesterov_update_policy(RealType lr, RealType mu) + : lr_(lr) + , mu_(mu) {}; + + template::value>::type> + void operator()(ArgumentType& x, RealType& g, RealType& v) + { + RealType v_prev = v; + v = mu_ * v - lr_ * g; + x.get_value() += -mu_ * v_prev + (static_cast(1) + mu_) * v; + } + template::value, + int>::type = 0> + void operator()(ArgumentType& x, RealType& g, RealType& v) const + { + const RealType v_prev = v; + v = mu_ * v - lr_ * g; + x += -mu_ * v_prev + (static_cast(1) + mu_) * v; + } + RealType lr() const noexcept { return lr_; } + RealType mu() const noexcept { return mu_; } +}; + +/** + * @brief The nesterov_accelerated_gradient class + * + * https://jlmelville.github.io/mize/nesterov.html + */ +template +class nesterov_accelerated_gradient + : public abstract_optimizer< + ArgumentContainer, + RealType, + Objective, + InitializationPolicy, + ObjectiveEvalPolicy, + GradEvalPolicy, + nesterov_update_policy, + nesterov_accelerated_gradient> +{ + using base_opt = + abstract_optimizer, + nesterov_accelerated_gradient>; + std::vector v_; + +public: + using base_opt::base_opt; + nesterov_accelerated_gradient(Objective&& objective, + ArgumentContainer& x, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep, + nesterov_update_policy&& up) + : base_opt(std::forward(objective), + x, + std::forward(ip), + std::forward(oep), + std::forward(gep), + std::forward>(up)) + , v_(x.size(), RealType(0)) + { + } + + void step() + { + auto& x = this->arguments(); + auto& g = this->gradients(); + auto& obj = this->objective_value(); + auto& obj_eval = this->obj_eval_; + auto& grad_eval = this->grad_eval_; + auto& objective = this->objective_; + auto& update = this->update_; + + grad_eval(objective, x, obj_eval, obj, g); + + for (size_t i = 0; i < x.size(); ++i) { + update(x[i], g[i], v_[i]); + } + } +}; +template +auto +make_nag(Objective&& obj, + ArgumentContainer& x, + RealType lr = RealType{ 0.01 }, + RealType mu = RealType{ 0.95 }) +{ + return nesterov_accelerated_gradient< + ArgumentContainer, + RealType, + std::decay_t, + tape_initializer_rvar, + reverse_mode_function_eval_policy, + reverse_mode_gradient_evaluation_policy>( + std::forward(obj), + x, + tape_initializer_rvar{}, + reverse_mode_function_eval_policy{}, + reverse_mode_gradient_evaluation_policy{}, + nesterov_update_policy(lr, mu)); +} +template +auto +make_nag(Objective&& obj, + ArgumentContainer& x, + RealType lr, + RealType mu, + InitializationPolicy&& ip) +{ + return nesterov_accelerated_gradient< + ArgumentContainer, + RealType, + std::decay_t, + InitializationPolicy, + reverse_mode_function_eval_policy, + reverse_mode_gradient_evaluation_policy>( + std::forward(obj), + x, + std::forward(ip), + reverse_mode_function_eval_policy{}, + reverse_mode_gradient_evaluation_policy{}, + nesterov_update_policy(lr, mu)); +} +template +auto +make_nag(Objective&& obj, + ArgumentContainer& x, + RealType lr, + RealType mu, + InitializationPolicy&& ip, + ObjectiveEvalPolicy&& oep, + GradEvalPolicy&& gep) +{ + return nesterov_accelerated_gradient, + InitializationPolicy, + ObjectiveEvalPolicy, + GradEvalPolicy>( + std::forward(obj), + x, + std::forward(ip), + std::forward(oep), + std::forward(gep), + nesterov_update_policy{ lr, mu }); +} +} // namespace optimization +} // namespace math +} // namespace boost +#endif diff --git a/include/boost/math/special_functions/detail/fp_traits.hpp b/include/boost/math/special_functions/detail/fp_traits.hpp index 051b84c1e..7cdb12b18 100644 --- a/include/boost/math/special_functions/detail/fp_traits.hpp +++ b/include/boost/math/special_functions/detail/fp_traits.hpp @@ -24,6 +24,7 @@ With these techniques, the code could be simplified. #include #include #include +#include #include #include #include @@ -270,7 +271,12 @@ template<> struct fp_traits_non_native // long double (64 bits) ------------------------------------------------------- #if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\ - || defined(BOOST_BORLANDC) || defined(__CODEGEAR__) || (defined(__APPLE__) && defined(__aarch64__)) || defined(_MSC_VER) + || defined(BOOST_BORLANDC) || defined(__CODEGEAR__) || (defined(__APPLE__) && defined(__aarch64__)) || defined(_MSC_VER)\ + || (defined(__GNUC__) && defined(__aarch64__) && defined(_WIN32))\ + || (defined(__GNUC__) && (defined(__arm__) || defined(__thumb__)))\ + || defined(__SYCL_DEVICE_ONLY__) || (LDBL_MANT_DIG == 53) + +static_assert(LDBL_MANT_DIG == 53, "Oops, assumption that long double is a 64-bit quantity is incorrect!!"); template<> struct fp_traits_non_native { @@ -305,6 +311,8 @@ private: // Intel extended double precision format (80 bits) +static_assert(LDBL_MANT_DIG == 64, "Oops, assumption that long double is an 80-bit quantity is incorrect!!"); + template<> struct fp_traits_non_native { @@ -356,6 +364,8 @@ struct fp_traits_non_native // PowerPC extended double precision format (128 bits) +static_assert(LDBL_MANT_DIG == 113, "Oops, assumption that long double is a 128-bit quantity is incorrect!!"); + template<> struct fp_traits_non_native { @@ -426,10 +436,12 @@ struct fp_traits_non_native // long double (>64 bits), All other processors -------------------------------- -#else +#elif (LDBL_MANT_DIG == 113) // IEEE extended double precision format with 15 exponent bits (128 bits) +static_assert(LDBL_MANT_DIG == 113, "Oops, assumption that long double is a 128-bit quantity is incorrect!!"); + template<> struct fp_traits_non_native { @@ -456,6 +468,10 @@ private: BOOST_MATH_STATIC constexpr int offset_ = BOOST_MATH_ENDIAN_BIG_BYTE ? 0 : 12; }; +#else + +// Nothing in here, we don't understand the format! + #endif //------------------------------------------------------------------------------ diff --git a/include/boost/math/special_functions/gamma.hpp b/include/boost/math/special_functions/gamma.hpp index 458dc40a3..a9c17da88 100644 --- a/include/boost/math/special_functions/gamma.hpp +++ b/include/boost/math/special_functions/gamma.hpp @@ -1290,7 +1290,6 @@ BOOST_MATH_GPU_ENABLED T incomplete_tgamma_large_x(const T& a, const T& x, const return result; } - // // Main incomplete gamma entry point, handles all four incomplete gamma's: // @@ -1813,6 +1812,46 @@ BOOST_MATH_GPU_ENABLED T lgamma_incomplete_imp(T a, T x, const Policy& pol) return log(gamma_q(a, x, pol)); } +// Calculate log of incomplete gamma function +template +BOOST_MATH_GPU_ENABLED T lgamma_incomplete_lower_imp(T a, T x, const Policy& pol) +{ + using namespace boost::math; // temporary until we're in the right namespace + + BOOST_MATH_STD_USING_CORE + + // Check for invalid inputs (a < 0 or x < 0) + constexpr auto function = "boost::math::lgamma_p<%1%>(%1%, %1%)"; + if(a <= 0) + return policies::raise_domain_error(function, "Argument a to the incomplete gamma function must be greater than zero (got a=%1%).", a, pol); + if(x < 0) + return policies::raise_domain_error(function, "Argument x to the incomplete gamma function must be >= 0 (got x=%1%).", x, pol); + + // Taken from conditions on Line 1709. There are also + // conditions on Line 1368, but didn't implement that one here. + // The second condition ensures floats do not return -inf for small + // values of x. + if (((a > 4 * x) && (a >= max_factorial::value)) || ((T(-0.4) / log(x) < a) && (x < T(1.0)))){ + return log(detail::lower_gamma_series(a, x, pol)) - log(a) + a * log(x) - x - lgamma(a, pol); + } + + // + // Can't do better than taking the log of P, but... + // + // Figure out whether we need P or Q, since if we calculate P and it's too close to unity + // we will lose precision in the result, selection logic here is extracted from gamma_incomplete_imp_final: + // + bool need_p = false; + if ((x < 1.1) && (x >= 0.5) && (x * 0.75f < a)) + need_p = true; + else if ((x < a) && (x >= 1.1)) + need_p = true; + + if (need_p) + return log(gamma_p(a, x, pol)); + return log1p(-gamma_q(a, x, pol), pol); +} + // // Ratios of two gamma functions: // @@ -2454,6 +2493,29 @@ BOOST_MATH_GPU_ENABLED inline tools::promote_args_t lgamma_q(T1 a, T2 z) { return lgamma_q(a, z, policies::policy<>()); } + +template +BOOST_MATH_GPU_ENABLED inline tools::promote_args_t lgamma_p(T1 a, T2 z, const Policy& /* pol */) +{ + typedef tools::promote_args_t result_type; + typedef typename policies::evaluation::type value_type; + typedef typename policies::normalise< + Policy, + policies::promote_float, + policies::promote_double, + policies::discrete_quantile<>, + policies::assert_undefined<> >::type forwarding_policy; + + return policies::checked_narrowing_cast( + detail::lgamma_incomplete_lower_imp(static_cast(a), + static_cast(z), forwarding_policy()), "lgamma_p<%1%>(%1%, %1%)"); +} + +template +BOOST_MATH_GPU_ENABLED inline tools::promote_args_t lgamma_p(T1 a, T2 z) +{ + return lgamma_p(a, z, policies::policy<>()); +} // // Regularised lower incomplete gamma: // diff --git a/include/boost/math/special_functions/math_fwd.hpp b/include/boost/math/special_functions/math_fwd.hpp index ca16fc8d9..6c8394ddf 100644 --- a/include/boost/math/special_functions/math_fwd.hpp +++ b/include/boost/math/special_functions/math_fwd.hpp @@ -567,6 +567,12 @@ namespace boost template BOOST_MATH_GPU_ENABLED tools::promote_args_t lgamma_q(RT1 a, RT2 z, const Policy&); + template + BOOST_MATH_GPU_ENABLED tools::promote_args_t lgamma_p(RT1 a, RT2 z); + + template + BOOST_MATH_GPU_ENABLED tools::promote_args_t lgamma_p(RT1 a, RT2 z, const Policy&); + template BOOST_MATH_GPU_ENABLED tools::promote_args_t gamma_p(RT1 a, RT2 z); @@ -1525,6 +1531,9 @@ namespace boost \ template \ BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t lgamma_q(RT1 a, RT2 z){ return boost::math::lgamma_q(a, z, Policy()); }\ +\ + template \ + BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t lgamma_p(RT1 a, RT2 z){ return boost::math::lgamma_p(a, z, Policy()); }\ \ template \ BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t gamma_p(RT1 a, RT2 z){ return boost::math::gamma_p(a, z, Policy()); }\ diff --git a/include/boost/math/tools/rational.hpp b/include/boost/math/tools/rational.hpp index 1079463d0..95ec97e37 100644 --- a/include/boost/math/tools/rational.hpp +++ b/include/boost/math/tools/rational.hpp @@ -178,7 +178,7 @@ BOOST_MATH_GPU_ENABLED U evaluate_polynomial(const T* poly, U const& z, boost::m namespace detail{ template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_polynomial_c_imp(const T* a, const V& val, const Tag*) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_polynomial_c_imp(const T* a, const V& val, const Tag*) BOOST_MATH_NOEXCEPT(V) { return evaluate_polynomial(a, val, Tag::value); } @@ -207,7 +207,7 @@ BOOST_MATH_GPU_ENABLED inline U evaluate_polynomial(const T* poly, U const& z, b // implementations above: // template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_polynomial(const T(&a)[N], const V& val) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_polynomial(const T(&a)[N], const V& val) BOOST_MATH_NOEXCEPT(V) { typedef boost::math::integral_constant(N)> tag_type; return detail::evaluate_polynomial_c_imp(static_cast(a), val, static_cast(nullptr)); @@ -215,7 +215,7 @@ BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_polynomial(const #ifndef BOOST_MATH_HAS_NVRTC template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_polynomial(const std::array& a, const V& val) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_polynomial(const std::array& a, const V& val) BOOST_MATH_NOEXCEPT(V) { typedef boost::math::integral_constant(N)> tag_type; return detail::evaluate_polynomial_c_imp(static_cast(a.data()), val, static_cast(nullptr)); @@ -231,14 +231,14 @@ BOOST_MATH_GPU_ENABLED inline U evaluate_even_polynomial(const T* poly, U z, boo } template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_even_polynomial(const T(&a)[N], const V& z) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_even_polynomial(const T(&a)[N], const V& z) BOOST_MATH_NOEXCEPT(V) { return evaluate_polynomial(a, V(z*z)); } #ifndef BOOST_MATH_HAS_NVRTC template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_even_polynomial(const std::array& a, const V& z) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_even_polynomial(const std::array& a, const V& z) BOOST_MATH_NOEXCEPT(V) { return evaluate_polynomial(a, V(z*z)); } @@ -253,7 +253,7 @@ BOOST_MATH_GPU_ENABLED inline U evaluate_odd_polynomial(const T* poly, U z, boos } template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_odd_polynomial(const T(&a)[N], const V& z) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_odd_polynomial(const T(&a)[N], const V& z) BOOST_MATH_NOEXCEPT(V) { typedef boost::math::integral_constant(N-1)> tag_type; return a[0] + z * detail::evaluate_polynomial_c_imp(static_cast(a) + 1, V(z*z), static_cast(nullptr)); @@ -261,7 +261,7 @@ BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_odd_polynomial(c #ifndef BOOST_MATH_HAS_NVRTC template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_odd_polynomial(const std::array& a, const V& z) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_odd_polynomial(const std::array& a, const V& z) BOOST_MATH_NOEXCEPT(V) { typedef boost::math::integral_constant(N-1)> tag_type; return a[0] + z * detail::evaluate_polynomial_c_imp(static_cast(a.data()) + 1, V(z*z), static_cast(nullptr)); @@ -274,7 +274,7 @@ BOOST_MATH_GPU_ENABLED V evaluate_rational(const T* num, const U* denom, const V namespace detail{ template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_rational_c_imp(const T* num, const U* denom, const V& z, const Tag*) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_rational_c_imp(const T* num, const U* denom, const V& z, const Tag*) BOOST_MATH_NOEXCEPT(V) { return boost::math::tools::evaluate_rational(num, denom, z, Tag::value); } @@ -322,14 +322,14 @@ BOOST_MATH_GPU_ENABLED V evaluate_rational(const T* num, const U* denom, const V } template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_rational(const T(&a)[N], const U(&b)[N], const V& z) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_rational(const T(&a)[N], const U(&b)[N], const V& z) BOOST_MATH_NOEXCEPT(V) { return detail::evaluate_rational_c_imp(a, b, z, static_cast(N)>*>(nullptr)); } #ifndef BOOST_MATH_HAS_NVRTC template -BOOST_MATH_GPU_ENABLED BOOST_MATH_GPU_ENABLED inline V evaluate_rational(const std::array& a, const std::array& b, const V& z) BOOST_MATH_NOEXCEPT(V) +BOOST_MATH_GPU_ENABLED inline V evaluate_rational(const std::array& a, const std::array& b, const V& z) BOOST_MATH_NOEXCEPT(V) { return detail::evaluate_rational_c_imp(a.data(), b.data(), z, static_cast(N)>*>(nullptr)); } diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 279d54759..c5bde0163 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -1368,6 +1368,13 @@ test-suite test_reverse_mode_autodiff [ run test_reverse_mode_autodiff_basic_math_ops.cpp /boost/test//boost_unit_test_framework : : : gcc-mingw:-Wa,-mbig-obj off msvc:/bigobj release ] [ run test_reverse_mode_autodiff_error_functions.cpp /boost/test//boost_unit_test_framework : : : gcc-mingw:-Wa,-mbig-obj off msvc:/bigobj release ] ; + +test-suite gradient_based_optimizers + : + [ run test_gradient_descent_optimizer.cpp /boost/test//boost_unit_test_framework : : : gcc-mingw:-Wa,-mbig-obj off msvc:/bigobj release ] + [ run test_nesterov_optimizer.cpp /boost/test//boost_unit_test_framework : : : gcc-mingw:-Wa,-mbig-obj off msvc:/bigobj release ] + [ run test_lbfgs.cpp /boost/test//boost_unit_test_framework : : : gcc-mingw:-Wa,-mbig-obj off msvc:/bigobj release ] + ; # BEGIN AUTODIFF LONG RUNNING TESTS test-suite autodiff-long-running-tests : @@ -2355,6 +2362,6 @@ explicit no_eh_tests ; # Some aliases which group blocks of tests for CI testing: alias github_ci_block_1 : special_fun float128_tests distribution_tests mp misc concepts ; -alias github_ci_block_2 : quadrature interpolators autodiff test_reverse_mode_autodiff ../example//examples ../tools ; +alias github_ci_block_2 : quadrature interpolators autodiff test_reverse_mode_autodiff gradient_based_optimizers ../example//examples ../tools ; explicit github_ci_block_1 ; explicit github_ci_block_2 ; diff --git a/test/compile_test/instantiate.hpp b/test/compile_test/instantiate.hpp index 1d186aff7..96c896486 100644 --- a/test/compile_test/instantiate.hpp +++ b/test/compile_test/instantiate.hpp @@ -264,6 +264,7 @@ void instantiate(RealType) boost::math::gamma_p(v1, v2); boost::math::gamma_q(v1, v2); boost::math::lgamma_q(v1, v2); + boost::math::lgamma_p(v1, v2); boost::math::gamma_p_inv(v1, v2); boost::math::gamma_q_inv(v1, v2); boost::math::gamma_p_inva(v1, v2); @@ -544,6 +545,7 @@ void instantiate(RealType) boost::math::gamma_p(v1 * 1, v2 + 0); boost::math::gamma_q(v1 * 1, v2 + 0); boost::math::lgamma_q(v1 * 1, v2 + 0); + boost::math::lgamma_p(v1 * 1, v2 + 0); boost::math::gamma_p_inv(v1 * 1, v2 + 0); boost::math::gamma_q_inv(v1 * 1, v2 + 0); boost::math::gamma_p_inva(v1 * 1, v2 + 0); @@ -796,6 +798,7 @@ void instantiate(RealType) boost::math::gamma_p(v1, v2, pol); boost::math::gamma_q(v1, v2, pol); boost::math::lgamma_q(v1, v2, pol); + boost::math::lgamma_p(v1, v2, pol); boost::math::gamma_p_inv(v1, v2, pol); boost::math::gamma_q_inv(v1, v2, pol); boost::math::gamma_p_inva(v1, v2, pol); @@ -1074,6 +1077,7 @@ void instantiate(RealType) test::gamma_p(v1, v2); test::gamma_q(v1, v2); test::lgamma_q(v1, v2); + test::lgamma_p(v1, v2); test::gamma_p_inv(v1, v2); test::gamma_q_inv(v1, v2); test::gamma_p_inva(v1, v2); @@ -1356,6 +1360,7 @@ void instantiate_mixed(RealType) boost::math::gamma_p(fr, lr); boost::math::gamma_q(i, s); boost::math::lgamma_q(i, s); + boost::math::lgamma_p(i, s); boost::math::gamma_q(fr, lr); boost::math::gamma_p_inv(i, fr); boost::math::gamma_q_inv(s, fr); @@ -1572,6 +1577,7 @@ void instantiate_mixed(RealType) boost::math::gamma_p(fr, lr, pol); boost::math::gamma_q(i, s, pol); boost::math::lgamma_q(i, s, pol); + boost::math::lgamma_p(i, s, pol); boost::math::gamma_q(fr, lr, pol); boost::math::gamma_p_inv(i, fr, pol); boost::math::gamma_q_inv(s, fr, pol); @@ -1784,8 +1790,10 @@ void instantiate_mixed(RealType) test::gamma_p(fr, lr); test::gamma_q(i, s); test::lgamma_q(i, s); + test::lgamma_p(i, s); test::gamma_q(fr, lr); test::lgamma_q(fr, lr); + test::lgamma_p(fr, lr); test::gamma_p_inv(i, fr); test::gamma_q_inv(s, fr); test::gamma_p_inva(i, lr); diff --git a/test/compile_test/sf_gamma_incl_test.cpp b/test/compile_test/sf_gamma_incl_test.cpp index 74ab85b2d..85045c857 100644 --- a/test/compile_test/sf_gamma_incl_test.cpp +++ b/test/compile_test/sf_gamma_incl_test.cpp @@ -45,6 +45,12 @@ void compile_and_link_test() check_result(boost::math::lgamma_q(l, l)); #endif +check_result(boost::math::lgamma_p(f, f)); +check_result(boost::math::lgamma_p(d, d)); +#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS + check_result(boost::math::lgamma_p(l, l)); +#endif + check_result(boost::math::gamma_p_inv(f, f)); check_result(boost::math::gamma_p_inv(d, d)); #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS diff --git a/test/cuda_jamfile b/test/cuda_jamfile index 47ced5f03..e4d7505da 100644 --- a/test/cuda_jamfile +++ b/test/cuda_jamfile @@ -373,6 +373,8 @@ run test_gamma_p_inv_double.cu ; run test_gamma_p_inv_float.cu ; run test_lgamma_q_double.cu ; run test_lgamma_q_float.cu ; +run test_lgamma_p_double.cu ; +run test_lgamma_p_float.cu ; run test_log1p_double.cu ; run test_log1p_float.cu ; diff --git a/test/test_functions_for_optimization.hpp b/test/test_functions_for_optimization.hpp index b091984f8..da989fc09 100644 --- a/test/test_functions_for_optimization.hpp +++ b/test/test_functions_for_optimization.hpp @@ -12,13 +12,35 @@ #include #include +/* simple n-d quadratic function */ +template +RealType +quadratic(std::vector& x) +{ + RealType res{ 0.0 }; + for (auto& item : x) { + res += item * item; + } + return res; +} + +template +RealType +quadratic_high_cond_2D(std::vector& x) +{ + return 1000 * x[0] * x[0] + x[1] * x[1]; +} + // Taken from: https://en.wikipedia.org/wiki/Test_functions_for_optimization -template Real ackley(std::array const &v) { - using std::sqrt; +template +Real +ackley(std::array const& v) +{ + using boost::math::constants::e; + using boost::math::constants::two_pi; using std::cos; using std::exp; - using boost::math::constants::two_pi; - using boost::math::constants::e; + using std::sqrt; Real x = v[0]; Real y = v[1]; Real arg1 = -sqrt((x * x + y * y) / 2) / 5; @@ -26,16 +48,21 @@ template Real ackley(std::array const &v) { return -20 * exp(arg1) - exp(arg2 / 2) + 20 + e(); } -template auto rosenbrock_saddle(std::array const &v) -> Real { - Real x { v[0] }; - Real y { v[1] }; +template +auto +rosenbrock_saddle(std::array const& v) -> Real +{ + Real x{ v[0] }; + Real y{ v[1] }; return static_cast(100 * (x * x - y) * (x * x - y) + (1 - x) * (1 - x)); } - -template Real rastrigin(std::vector const &v) { - using std::cos; +template +Real +rastrigin(std::vector const& v) +{ using boost::math::constants::two_pi; + using std::cos; auto A = static_cast(10); auto y = static_cast(10 * v.size()); for (auto x : v) { @@ -46,7 +73,9 @@ template Real rastrigin(std::vector const &v) { // Useful for testing return-type != scalar argument type, // and robustness to NaNs: -double sphere(std::vector const &v) { +double +sphere(std::vector const& v) +{ double r = 0.0; for (auto x : v) { double x_ = static_cast(x); @@ -59,23 +88,27 @@ double sphere(std::vector const &v) { } template -Real three_hump_camel(std::array const & v) { +Real +three_hump_camel(std::array const& v) +{ Real x = v[0]; Real y = v[1]; - auto xsq = x*x; - return 2*xsq - (1 + Real(1)/Real(20))*xsq*xsq + xsq*xsq*xsq/6 + x*y + y*y; + auto xsq = x * x; + return 2 * xsq - (1 + Real(1) / Real(20)) * xsq * xsq + xsq * xsq * xsq / 6 + + x * y + y * y; } // Minima occurs at (3, 1/2) with value 0: template -Real beale(std::array const & v) { +Real +beale(std::array const& v) +{ Real x = v[0]; Real y = v[1]; - Real t1 = Real(3)/Real(2) -x + x*y; - Real t2 = Real(9)/Real(4) -x + x*y*y; - Real t3 = Real(21)/Real(8) -x + x*y*y*y; - return t1*t1 + t2*t2 + t3*t3; + Real t1 = Real(3) / Real(2) - x + x * y; + Real t2 = Real(9) / Real(4) - x + x * y * y; + Real t3 = Real(21) / Real(8) - x + x * y * y * y; + return t1 * t1 + t2 * t2 + t3 * t3; } - #endif diff --git a/test/test_gradient_descent_optimizer.cpp b/test/test_gradient_descent_optimizer.cpp new file mode 100644 index 000000000..d44a89b98 --- /dev/null +++ b/test/test_gradient_descent_optimizer.cpp @@ -0,0 +1,339 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#include "test_autodiff_reverse.hpp" // reuse for some basic options +#include "test_functions_for_optimization.hpp" +#include +#include +#include +namespace rdiff = boost::math::differentiation::reverse_mode; +namespace bopt = boost::math::optimization; +BOOST_AUTO_TEST_SUITE(basic_gradient_descent) + +BOOST_AUTO_TEST_CASE_TEMPLATE(default_gd_test, T, all_float_types) +{ + size_t NITER = 2000; + size_t N = 15; + T lr = T{ 1e-2 }; + RandomSample rng{ T(-100), (100) }; + std::vector> x_ad; + T eps = T{ 1e-3 }; + for (size_t i = 0; i < N; ++i) { + x_ad.push_back(rng.next()); + } + auto gdopt = + bopt::make_gradient_descent(&quadratic>, x_ad, lr); + for (size_t i = 0; i < NITER; ++i) { + gdopt.step(); + } + for (auto& x : x_ad) { + BOOST_REQUIRE_SMALL(x.item(), eps); + } +} +BOOST_AUTO_TEST_CASE_TEMPLATE(test_minimize, T, all_float_types) +{ + size_t NITER = 2000; + size_t N = 15; + T lr = T{ 1e-2 }; + RandomSample rng{ T(-100), (100) }; + std::vector> x_ad; + T eps = T{ 1e-3 }; + for (size_t i = 0; i < N; ++i) { + x_ad.push_back(rng.next()); + } + auto gdopt = + bopt::make_gradient_descent(&quadratic>, x_ad, lr); + auto z = minimize(gdopt); + for (auto& x : x_ad) { + BOOST_REQUIRE_SMALL(x.item(), eps); + } +} +BOOST_AUTO_TEST_CASE_TEMPLATE(random_initializer_test, T, all_float_types) +{ + size_t N = 10; + T lr = T{ 1e-2 }; + std::vector> x(N); + + auto gdopt = + bopt::make_gradient_descent(&quadratic>, + x, + lr, + bopt::random_uniform_initializer_rvar( + T(-2.0), T(2.0), 1234)); + for (auto& xi : x) { + T v = xi.item(); + BOOST_TEST(v >= -2); + BOOST_TEST(v <= 2); + } + gdopt.step(); +} +BOOST_AUTO_TEST_CASE_TEMPLATE(const_initializer_test, T, all_float_types) +{ + size_t N = 10; + T lr = T{ 1e-2 }; + std::vector> x(N); + + auto gdopt = bopt::make_gradient_descent( + &quadratic>, + x, + lr, + bopt::costant_initializer_rvar(T{ 5.0 })); // all initialized to 5 + + for (auto& xi : x) { + T v = xi.item(); + BOOST_REQUIRE_CLOSE(v, T{ 5.0 }, T{ 1e-3 }); + } + gdopt.step(); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(box_constraint_test, T, all_float_types) +{ + size_t N = 5; + T lr = T{ 1e-2 }; + std::vector> x(N, T{ 10 }); + + auto gdopt = + bopt::make_gradient_descent(&quadratic>, x, lr); + + auto res = bopt::minimize( + gdopt, bopt::box_constraints>, T>(-1.0, 1.0)); + + for (auto& xi : x) { + BOOST_TEST(xi.item() >= -1.0); + BOOST_TEST(xi.item() <= 1.0); + } +} +BOOST_AUTO_TEST_CASE_TEMPLATE(max_iter_test, T, all_float_types) +{ + size_t N = 2; + T lr = T{ 1e-6 }; // very slow learning + std::vector> x = { T{ 5 }, T{ 5 } }; + + auto gdopt = + bopt::make_gradient_descent(&quadratic>, x, lr); + + size_t max_iter = 50; + auto res = + bopt::minimize(gdopt, + bopt::unconstrained_policy>>{}, + bopt::gradient_norm_convergence_policy(T{ 1e-20 }), + bopt::max_iter_termination_policy(max_iter)); + + BOOST_TEST(!res.converged); // should not converge with tiny lr + BOOST_REQUIRE_EQUAL(res.num_iter, max_iter); +} +BOOST_AUTO_TEST_CASE_TEMPLATE(history_tracking_test, T, all_float_types) +{ + size_t N = 3; + T lr = T{ 1e-2 }; + std::vector> x = { T{ 3 }, T{ -4 }, T{ 5 } }; + + auto gdopt = + bopt::make_gradient_descent(&quadratic>, x, lr); + + auto res = + bopt::minimize(gdopt, + bopt::unconstrained_policy>>{}, + bopt::gradient_norm_convergence_policy(T{ 1e-6 }), + bopt::max_iter_termination_policy(1000), + true); // enable history + + BOOST_TEST(!res.objective_history.empty()); + BOOST_TEST(res.objective_history.front() > res.objective_history.back()); +} +BOOST_AUTO_TEST_CASE_TEMPLATE(rosenbrock_test, T, all_float_types) +{ + std::array, 2> x = { T{ -1.2 }, T{ 1.0 } }; // bad start + T lr = T{ 1e-3 }; + + auto gdopt = + bopt::make_gradient_descent(&rosenbrock_saddle>, x, lr); + + auto res = bopt::minimize( + gdopt, + bopt::unconstrained_policy, 2>>{}, + bopt::gradient_norm_convergence_policy(T{ 1e-4 }), + bopt::max_iter_termination_policy(50000)); + BOOST_TEST(res.converged); + BOOST_REQUIRE_CLOSE(x[0].item(), T{ 1.0 }, T{ 1e-1 }); + BOOST_REQUIRE_CLOSE(x[1].item(), T{ 1.0 }, T{ 1e-1 }); +} +BOOST_AUTO_TEST_CASE_TEMPLATE(objective_tol_convergence_test, + T, + all_float_types) +{ + using policy_t = bopt::objective_tol_convergence_policy; + policy_t pol(1e-3); + std::vector dummy_grad; + + BOOST_TEST(!pol(dummy_grad, T{100.0})); + BOOST_TEST(!pol(dummy_grad, T{99.0})); + BOOST_TEST(pol(dummy_grad, T{99.0005})); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(relative_objective_tol_test, T, all_float_types) +{ + using policy_t = bopt::relative_objective_tol_policy; + policy_t pol(1e-3); + + std::vector dummy_grad; + BOOST_TEST(!pol(dummy_grad, T{1000.0})); + BOOST_TEST(!pol(dummy_grad, T{1010.0})); + BOOST_TEST(pol(dummy_grad, T{1010.5})); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(combined_policy_test, T, all_float_types) +{ + using pol_abs = bopt::objective_tol_convergence_policy; + using pol_rel = bopt::relative_objective_tol_policy; + using pol_comb = bopt::combined_convergence_policy; + + pol_abs abs_pol(1e-6); + pol_rel rel_pol(1e-3); + pol_comb comb(abs_pol, rel_pol); + + std::vector dummy_grad; + + BOOST_TEST(!comb(dummy_grad, T{100.0})); + BOOST_TEST(!comb(dummy_grad, T{110.0})); + BOOST_TEST(comb(dummy_grad, T{110.1})); + BOOST_TEST(comb(dummy_grad, T{110.1000001})); +} +BOOST_AUTO_TEST_CASE_TEMPLATE(nonnegativity_constraint_test, T, all_float_types) +{ + std::vector x = {T{1.0}, T{-2.0}, T{3.0}, T{-4.0}}; + + bopt::nonnegativity_constraint, T> proj; + proj(x); + + for (auto& xi : x) + BOOST_TEST(xi >= 0.0); + BOOST_TEST(x == std::vector({T{1.0}, T{0.0}, T{3.0}, T{0.0}})); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(l2_ball_constraint_test, T, all_float_types) +{ + std::vector x = {T{3.0}, T{4.0}}; // norm = 5 + bopt::l2_ball_constraint, T> proj(1.0); + proj(x); + + T norm = sqrt(x[0] * x[0] + x[1] * x[1]); + BOOST_TEST(abs(norm - T{1.0}) < T{1e-12}); // projected to unit circle +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(l1_ball_constraint_test, T, all_float_types) +{ + std::vector x = {T{3.0}, T{4.0}}; // L1 norm = 7 + + bopt::l1_ball_constraint, T> proj(2.0); + proj(x); + + T norm1 = abs(x[0]) + abs(x[1]); + BOOST_TEST(abs(norm1 - T{2.0}) < T{1e-12}); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(simplex_constraint_test, T, all_float_types) +{ + std::vector x = {T{-1.0}, T{2.0}, T{3.0}}; // has negative and sum != 1 + + bopt::simplex_constraint, T> proj; + proj(x); + + T sum = 0.0; + for (auto& xi : x) { + BOOST_TEST(xi >= 0.0); // all nonnegative + sum += xi; + } + BOOST_TEST(abs(sum - T{1.0}) < T{1e-12}); // normalized to sum=1 +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(unit_sphere_constraint_test, T, all_float_types) +{ + std::vector x = {T{0.3}, T{0.4}}; // norm = 0.5 + bopt::unit_sphere_constraint, T> proj; + proj(x); + + T norm = sqrt(x[0] * x[0] + x[1] * x[1]); + BOOST_TEST(abs(norm - T{1.0}) < T{1e-12}); // always projected to sphere +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(function_constraint_test, T, all_float_types) +{ + auto clip_to_half = [](std::vector& v) { + for (auto& xi : v) + if (xi > 0.5) + xi = 0.5; + }; + + bopt::function_constraint> proj(clip_to_half); + std::vector x = {T{0.2}, T{0.7}, T{1.5}}; + proj(x); + + BOOST_TEST(x == std::vector({T{0.2}, T{0.5}, T{0.5}})); +} + +template +struct no_init_policy +{ + void operator()(std::vector& x) const noexcept {} +}; + +template +struct analytic_objective_eval_pol +{ + template + RealType operator()(Objective&& objective, ArgumentContainer& x) + { + return objective(x); + } +}; + +template +struct analytic_gradient_eval_pol +{ + template + void operator()(Objective&& obj_f, + ArgumentContainer& x, + FunctionEvaluationPolicy&& f_eval_pol, + RealType& obj_v, + std::vector& grad_container) + { + RealType v = f_eval_pol(obj_f, x); + obj_v = v; + grad_container.resize(x.size()); + for (size_t i = 0; i < x.size(); ++i) { + grad_container[i] = 2 * x[i]; + } + } +}; + +BOOST_AUTO_TEST_CASE_TEMPLATE(analytic_derivative_policies, T, all_float_types) +{ + std::vector x; + size_t NITER = 2000; + size_t N = 15; + T lr = T{ 1e-2 }; + RandomSample rng{ T(-100), (100) }; + T eps = T{ 1e-3 }; + for (size_t i = 0; i < N; ++i) { + x.push_back(rng.next()); + } + + auto gdopt = bopt::make_gradient_descent(&quadratic, + x, + lr, + no_init_policy{}, + analytic_objective_eval_pol{}, + analytic_gradient_eval_pol{}); + + for (size_t i = 0; i < NITER; ++i) { + gdopt.step(); + } + for (auto& xi : x) { + BOOST_REQUIRE_SMALL(xi, eps); + } +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/test/test_igamma.hpp b/test/test_igamma.hpp index 88f0bca17..74256fed2 100644 --- a/test/test_igamma.hpp +++ b/test/test_igamma.hpp @@ -263,7 +263,19 @@ void test_spots(T, const char* name = nullptr) BOOST_CHECK_CLOSE(::boost::math::lgamma_q(static_cast(501.25), static_cast(2000)), static_cast(-810.2453406781655559126505101822969531699112391075198076300675402L), tolerance); BOOST_CHECK_CLOSE(::boost::math::lgamma_q(static_cast(20), static_cast(0.25)), static_cast(-2.946458104491857816330873290969917497748067639461638294404e-31L), tolerance); BOOST_CHECK_CLOSE(::boost::math::lgamma_q(static_cast(40), static_cast(0.75)), static_cast(-5.930604927955460343652485525435087275997461623988991819824e-54L), tolerance); -#if defined(__CYGWIN__) || defined(__MINGW32__) + + // + // Check that lgamma_q returns correct values with spot values calculated via wolframalpha log(P[a, x]) + // This is calculated using: N[Log[GammaRegularized[a,0, z]],64] + // + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(500), static_cast(10)), static_cast(-1470.017750815998931281954666549641187420649099004671023115157832L), tolerance); + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(100), static_cast(0.25)), static_cast(-502.6163334118978895536207514636026023439623265152862757105793000L), tolerance); + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(20), static_cast(10.25)), static_cast(-5.404004887981642339930593767572610169901594898478031307722239712L), tolerance); + // Small "a" produce larger errors + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(0.25), static_cast(100)), static_cast(-3.220751038854414755009496530271388459559061551701603447517040280e-46L), tolerance); + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(0.25), static_cast(10)), static_cast(-2.083032578160285760530530498275075010777428544413918699832758176e-6L), tolerance); + + #if defined(__CYGWIN__) || defined(__MINGW32__) T gcc_win_mul = 2; #else T gcc_win_mul = 1; @@ -287,6 +299,24 @@ void test_spots(T, const char* name = nullptr) BOOST_CHECK_CLOSE(::boost::math::lgamma_q(static_cast(1200), static_cast(1250.25)), static_cast(-2.591934862117586205519309712218581885256650074210410262843591453L), tolerance * ((std::numeric_limits::max_digits10 >= 36 || std::is_same::value) ? 750 : (std::is_same::value ? 1 : 50))); // Test fails on ARM64 and s390x long doubles and real_concept types unless tolerance is adjusted BOOST_CHECK_CLOSE(::boost::math::lgamma_q(static_cast(2200), static_cast(2249.75)), static_cast(-1.933779894897391651410597618307863427927461116308937004149240320L), tolerance * (std::is_floating_point::value ? 1 : 10)); BOOST_CHECK_CLOSE(::boost::math::lgamma_q(static_cast(2200), static_cast(2250.25)), static_cast(-1.950346484067948344620463026377077515919992808640737320057812268L), tolerance * (std::is_same::value ? 1 : (std::is_floating_point::value ? 100 : 200))); + + // Long double and real_concept types need increased precision + T real_concept_tol = 1; + if (std::is_same::value || std::is_same::value){ + real_concept_tol = 3; + } + // Pair of tests that bisect the crossover condition in our code at double and then quad precision + // Oddly, the crossover condition is smaller for quad precision. This is because max_factorial is 100 + // for boost::multiprecision::cpp_bin_float_quad and 170 for doubles. + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(169.75), static_cast(0.75)), static_cast(-754.8681912874632573100058312311927462406154378562940316233389406L), tolerance * real_concept_tol); + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(170.25), static_cast(0.75)), static_cast(-757.5814133895304434271729579978676692688834086380018151200693572L), tolerance * real_concept_tol); + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(99.75), static_cast(0.75)), static_cast(-392.0259615581237826290999388631292473247947826682978959914359465L), tolerance * real_concept_tol); + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(100.25), static_cast(0.75)), static_cast(-394.4749200332583219473980963811639065003421270272773619742710832L), tolerance * real_concept_tol); + + // Check large a, x values. Precision just isn't great here. + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(1450.25), static_cast(1500.75)), static_cast(-0.09812447528127799786140178403478691390753413399549580160096975713L), tolerance * (std::is_same::value ? 16 : 1)); + BOOST_CHECK_CLOSE(::boost::math::lgamma_p(static_cast(2000), static_cast(1900)), static_cast(-4.448523733381445722945397105917814000790587922314824687065050805L), tolerance * gcc_win_mul * (std::is_same::value ? 8 : 1)); + // // Coverage: // @@ -302,6 +332,10 @@ void test_spots(T, const char* name = nullptr) BOOST_CHECK_THROW(boost::math::lgamma_q(static_cast(1), static_cast(-2)), std::domain_error); BOOST_CHECK_THROW(boost::math::lgamma_q(static_cast(0), static_cast(2)), std::domain_error); + BOOST_CHECK_THROW(boost::math::lgamma_p(static_cast(-1), static_cast(2)), std::domain_error); + BOOST_CHECK_THROW(boost::math::lgamma_p(static_cast(1), static_cast(-2)), std::domain_error); + BOOST_CHECK_THROW(boost::math::lgamma_p(static_cast(0), static_cast(2)), std::domain_error); + BOOST_CHECK_THROW(boost::math::gamma_p_derivative(static_cast(-1), static_cast(2)), std::domain_error); BOOST_CHECK_THROW(boost::math::gamma_p_derivative(static_cast(1), static_cast(-2)), std::domain_error); BOOST_CHECK_THROW(boost::math::gamma_p_derivative(static_cast(0), static_cast(2)), std::domain_error); @@ -317,6 +351,10 @@ void test_spots(T, const char* name = nullptr) BOOST_CHECK((boost::math::isnan)(boost::math::lgamma_q(static_cast(1), static_cast(-2)))); BOOST_CHECK((boost::math::isnan)(boost::math::lgamma_q(static_cast(0), static_cast(2)))); + BOOST_CHECK((boost::math::isnan)(boost::math::lgamma_p(static_cast(-1), static_cast(2)))); + BOOST_CHECK((boost::math::isnan)(boost::math::lgamma_p(static_cast(1), static_cast(-2)))); + BOOST_CHECK((boost::math::isnan)(boost::math::lgamma_p(static_cast(0), static_cast(2)))); + BOOST_CHECK((boost::math::isnan)(boost::math::gamma_p_derivative(static_cast(-1), static_cast(2)))); BOOST_CHECK((boost::math::isnan)(boost::math::gamma_p_derivative(static_cast(1), static_cast(-2)))); BOOST_CHECK((boost::math::isnan)(boost::math::gamma_p_derivative(static_cast(0), static_cast(2)))); diff --git a/test/test_lbfgs.cpp b/test/test_lbfgs.cpp new file mode 100644 index 000000000..f89940ddc --- /dev/null +++ b/test/test_lbfgs.cpp @@ -0,0 +1,124 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#include "test_autodiff_reverse.hpp" +#include "test_functions_for_optimization.hpp" +#include +#include +#include +#include + +namespace rdiff = boost::math::differentiation::reverse_mode; +namespace bopt = boost::math::optimization; + +BOOST_AUTO_TEST_SUITE(basic_lbfgs) + +BOOST_AUTO_TEST_CASE(default_lbfgs_test) //, T, all_float_types) +{ + using T = double; + constexpr size_t NITER = 10; + constexpr size_t M = 10; + const T eps = T{1e-5}; + + RandomSample rng{T(-10), T(10)}; + std::array, 2> x; + x[0] = rng.next(); + x[1] = rng.next(); + + auto opt = bopt::make_lbfgs(&rosenbrock_saddle>, x, M); + auto constraint = bopt::unconstrained_policy,2>>{}; + auto convergence_policy = bopt::gradient_norm_convergence_policy(T{ 1e-20 }); + + auto result = bopt::minimize(opt, constraint, convergence_policy); + for (auto& xi : x) { + BOOST_REQUIRE_CLOSE(xi, T{1.0}, eps); + } +} + +// Custom initialization policy that zeros out the parameters +template +struct zero_init_policy +{ + void operator()(std::vector& x) const noexcept + { + std::fill(x.begin(), x.end(), RealType{0}); + } +}; + +template +struct analytic_objective_eval_pol +{ + template + RealType operator()(Objective&& objective, ArgumentContainer& x) + { + return objective(x); + } +}; +template +struct analytic_gradient_eval_pol +{ + template + void operator()(Objective&& obj_f, + ArgumentContainer& x, + FunctionEvaluationPolicy&& f_eval_pol, + RealType& obj_v, + std::vector& grad_container) + { + RealType v = f_eval_pol(obj_f, x); + obj_v = v; + grad_container.resize(x.size()); + for (size_t i = 0; i < x.size(); ++i) { + grad_container[i] = 2 * x[i]; + } + } +}; + +BOOST_AUTO_TEST_CASE_TEMPLATE(custom_init_lbfgs_test, T, all_float_types) +{ + constexpr size_t M = 8; + const T eps = T{1e-6}; + + RandomSample rng{T(-5), T(5)}; + std::array, 2> x; + x[0] = rng.next(); + x[1] = rng.next(); + + auto opt = bopt::make_lbfgs(&rosenbrock_saddle>, + x, + M, + bopt::costant_initializer_rvar(0.0)); + auto constraint = bopt::unconstrained_policy,2>>{}; + auto convergence_policy = bopt::gradient_norm_convergence_policy(T{ 1e-8 }); + auto result = minimize(opt, constraint, convergence_policy); + + for (auto& xi : x) { + BOOST_REQUIRE_CLOSE(xi, T{1.0}, eps); + } +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(analytic_lbfgs_test, T, all_float_types) +{ + constexpr size_t M = 10; + const T eps = T{1e-3}; + + RandomSample rng{T(-5), T(5)}; + std::vector x(3); + for (auto& xi : x) + xi = rng.next(); + + auto opt = bopt::make_lbfgs(&quadratic, // Objective + x, // Arguments + M, // History size + zero_init_policy{}, // Initialization + analytic_objective_eval_pol{}, // Function eval + analytic_gradient_eval_pol{}, // Gradient eval + bopt::armijo_line_search_policy{}); + + auto result = minimize(opt); + + for (auto& xi : x) { + BOOST_REQUIRE_SMALL(xi, eps); + } +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/test/test_lgamma_p_double.cu b/test/test_lgamma_p_double.cu new file mode 100644 index 000000000..5638e01a2 --- /dev/null +++ b/test/test_lgamma_p_double.cu @@ -0,0 +1,102 @@ + +// Copyright John Maddock 2016. +// Copyright Matt Borland 2024. +// 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) + +#define BOOST_MATH_PROMOTE_DOUBLE_POLICY false + +#include +#include +#include +#include +#include "cuda_managed_ptr.hpp" +#include "stopwatch.hpp" + +// For the CUDA runtime routines (prefixed with "cuda_") +#include + +typedef double float_type; + +/** + * CUDA Kernel Device code + * + */ +__global__ void cuda_test(const float_type *in, float_type *out, int numElements) +{ + using std::cos; + int i = blockDim.x * blockIdx.x + threadIdx.x; + + if (i < numElements) + { + out[i] = boost::math::lgamma_p(in[i], in[i]); + } +} + +/** + * Host main routine + */ +int main(void) +{ + // Error code to check return values for CUDA calls + cudaError_t err = cudaSuccess; + + // Print the vector length to be used, and compute its size + int numElements = 50000; + std::cout << "[Vector operation on " << numElements << " elements]" << std::endl; + + // Allocate the managed input vector A + cuda_managed_ptr input_vector(numElements); + + // Allocate the managed output vector C + cuda_managed_ptr output_vector(numElements); + + // Initialize the input vectors + for (int i = 0; i < numElements; ++i) + { + input_vector[i] = rand()/(float_type)RAND_MAX; + } + + // Launch the Vector Add CUDA Kernel + int threadsPerBlock = 1024; + int blocksPerGrid =(numElements + threadsPerBlock - 1) / threadsPerBlock; + std::cout << "CUDA kernel launch with " << blocksPerGrid << " blocks of " << threadsPerBlock << " threads" << std::endl; + + watch w; + + cuda_test<<>>(input_vector.get(), output_vector.get(), numElements); + cudaDeviceSynchronize(); + + std::cout << "CUDA kernal done in: " << w.elapsed() << "s" << std::endl; + + err = cudaGetLastError(); + + if (err != cudaSuccess) + { + std::cerr << "Failed to launch vectorAdd kernel (error code " << cudaGetErrorString(err) << ")!" << std::endl; + return EXIT_FAILURE; + } + + // Verify that the result vector is correct + std::vector results; + results.reserve(numElements); + w.reset(); + for(int i = 0; i < numElements; ++i) + results.push_back(boost::math::lgamma_p(input_vector[i], input_vector[i])); + double t = w.elapsed(); + // check the results + for(int i = 0; i < numElements; ++i) + { + if (boost::math::epsilon_difference(output_vector[i], results[i]) > 10) + { + std::cerr << "Result verification failed at element " << i << "!" << std::endl; + return EXIT_FAILURE; + } + } + + std::cout << "Test PASSED, normal calculation time: " << t << "s" << std::endl; + std::cout << "Done\n"; + + return 0; +} diff --git a/test/test_lgamma_p_float.cu b/test/test_lgamma_p_float.cu new file mode 100644 index 000000000..2c0dd91df --- /dev/null +++ b/test/test_lgamma_p_float.cu @@ -0,0 +1,102 @@ + +// Copyright John Maddock 2016. +// Copyright Matt Borland 2024. +// 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) + +#define BOOST_MATH_PROMOTE_DOUBLE_POLICY false + +#include +#include +#include +#include +#include "cuda_managed_ptr.hpp" +#include "stopwatch.hpp" + +// For the CUDA runtime routines (prefixed with "cuda_") +#include + +typedef float float_type; + +/** + * CUDA Kernel Device code + * + */ +__global__ void cuda_test(const float_type *in, float_type *out, int numElements) +{ + using std::cos; + int i = blockDim.x * blockIdx.x + threadIdx.x; + + if (i < numElements) + { + out[i] = boost::math::lgamma_p(in[i], in[i]); + } +} + +/** + * Host main routine + */ +int main(void) +{ + // Error code to check return values for CUDA calls + cudaError_t err = cudaSuccess; + + // Print the vector length to be used, and compute its size + int numElements = 50000; + std::cout << "[Vector operation on " << numElements << " elements]" << std::endl; + + // Allocate the managed input vector A + cuda_managed_ptr input_vector(numElements); + + // Allocate the managed output vector C + cuda_managed_ptr output_vector(numElements); + + // Initialize the input vectors + for (int i = 0; i < numElements; ++i) + { + input_vector[i] = rand()/(float_type)RAND_MAX; + } + + // Launch the Vector Add CUDA Kernel + int threadsPerBlock = 1024; + int blocksPerGrid =(numElements + threadsPerBlock - 1) / threadsPerBlock; + std::cout << "CUDA kernel launch with " << blocksPerGrid << " blocks of " << threadsPerBlock << " threads" << std::endl; + + watch w; + + cuda_test<<>>(input_vector.get(), output_vector.get(), numElements); + cudaDeviceSynchronize(); + + std::cout << "CUDA kernal done in: " << w.elapsed() << "s" << std::endl; + + err = cudaGetLastError(); + + if (err != cudaSuccess) + { + std::cerr << "Failed to launch vectorAdd kernel (error code " << cudaGetErrorString(err) << ")!" << std::endl; + return EXIT_FAILURE; + } + + // Verify that the result vector is correct + std::vector results; + results.reserve(numElements); + w.reset(); + for(int i = 0; i < numElements; ++i) + results.push_back(boost::math::lgamma_p(input_vector[i], input_vector[i])); + double t = w.elapsed(); + // check the results + for(int i = 0; i < numElements; ++i) + { + if (boost::math::epsilon_difference(output_vector[i], results[i]) > 10) + { + std::cerr << "Result verification failed at element " << i << "!" << std::endl; + return EXIT_FAILURE; + } + } + + std::cout << "Test PASSED, normal calculation time: " << t << "s" << std::endl; + std::cout << "Done\n"; + + return 0; +} diff --git a/test/test_nesterov_optimizer.cpp b/test/test_nesterov_optimizer.cpp new file mode 100644 index 000000000..bfda1de51 --- /dev/null +++ b/test/test_nesterov_optimizer.cpp @@ -0,0 +1,33 @@ +// Copyright Maksym Zhelyenzyakov 2025-2026. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +#include "test_autodiff_reverse.hpp" // reuse for some basic options +#include "test_functions_for_optimization.hpp" +#include +#include +#include +namespace rdiff = boost::math::differentiation::reverse_mode; +namespace bopt = boost::math::optimization; +BOOST_AUTO_TEST_SUITE(nesterov_descent) + +BOOST_AUTO_TEST_CASE_TEMPLATE(default_nesterov_test, T, all_float_types) +{ + T lr = T{ 1e-5 }; + T mu = T{ 0.95 }; + RandomSample rng{ T(-10), (10) }; + std::vector> x; + x.push_back(rng.next()); + x.push_back(rng.next()); + T eps = T{ 1e-8 }; + auto nag = + bopt::make_nag(&quadratic_high_cond_2D>, x, lr, mu); + auto constraint = bopt::unconstrained_policy>>{}; + auto convergence_policy = bopt::gradient_norm_convergence_policy(T{ 1e-8 }); + + auto z = minimize(nag, constraint, convergence_policy); + for (auto& xi : x) { + BOOST_REQUIRE_SMALL(xi.item(), eps); + } +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/test/test_reverse_mode_autodiff_flat_linear_allocator.cpp b/test/test_reverse_mode_autodiff_flat_linear_allocator.cpp index ef7d293d0..387a4f020 100644 --- a/test/test_reverse_mode_autodiff_flat_linear_allocator.cpp +++ b/test/test_reverse_mode_autodiff_flat_linear_allocator.cpp @@ -6,113 +6,129 @@ #include BOOST_AUTO_TEST_SUITE(test_flat_linear_allocator) -BOOST_AUTO_TEST_CASE_TEMPLATE(flat_linear_allocator_constructors, T, all_float_types) +BOOST_AUTO_TEST_CASE_TEMPLATE(flat_linear_allocator_constructors, + T, + all_float_types) { - size_t buffer_size = 16; - RandomSample rng{-1, 1}; - rdiff_detail::flat_linear_allocator float_allocator{}; - for (size_t i = 0; i < 2 * buffer_size - buffer_size / 2; i++) { - float_allocator.emplace_back(rng.next()); - } + size_t buffer_size = 16; + RandomSample rng{ -1, 1 }; + rdiff_detail::flat_linear_allocator float_allocator{}; + for (size_t i = 0; i < 2 * buffer_size - buffer_size / 2; i++) { + float_allocator.emplace_back(rng.next()); + } - BOOST_CHECK_EQUAL(float_allocator.size(), - static_cast(2 * buffer_size - buffer_size / 2)); - BOOST_CHECK_EQUAL(float_allocator.capacity(), static_cast(2 * buffer_size)); + BOOST_CHECK_EQUAL(float_allocator.size(), + static_cast(2 * buffer_size - buffer_size / 2)); + BOOST_CHECK_EQUAL(float_allocator.capacity(), + static_cast(2 * buffer_size)); - float_allocator.clear(); - BOOST_CHECK_EQUAL(float_allocator.size(), static_cast(0)); - BOOST_CHECK_EQUAL(float_allocator.capacity(), buffer_size); + float_allocator.clear(); + BOOST_CHECK_EQUAL(float_allocator.size(), static_cast(0)); + BOOST_CHECK_EQUAL(float_allocator.capacity(), buffer_size); - for (size_t i = 0; i < 2 * buffer_size - buffer_size / 2; i++) { - float_allocator.emplace_back(rng.next()); - } - float_allocator.reset(); - BOOST_CHECK_EQUAL(float_allocator.size(), static_cast(0)); - BOOST_CHECK_EQUAL(float_allocator.capacity(), 2 * buffer_size); + for (size_t i = 0; i < 2 * buffer_size - buffer_size / 2; i++) { + float_allocator.emplace_back(rng.next()); + } + float_allocator.reset(); + BOOST_CHECK_EQUAL(float_allocator.size(), static_cast(0)); + BOOST_CHECK_EQUAL(float_allocator.capacity(), 2 * buffer_size); - for (size_t i = 0; i < 2 * buffer_size - buffer_size / 2; i++) { - float_allocator.emplace_back(rng.next()); - } - T fill_value = T(0.25); - float_allocator.fill(fill_value); - for (size_t i = 0; i < float_allocator.size(); i++) { - BOOST_CHECK_EQUAL(float_allocator[i], fill_value); - } + for (size_t i = 0; i < 2 * buffer_size - buffer_size / 2; i++) { + float_allocator.emplace_back(rng.next()); + } + T fill_value = T(0.25); + float_allocator.fill(fill_value); + for (size_t i = 0; i < float_allocator.size(); i++) { + BOOST_CHECK_EQUAL(float_allocator[i], fill_value); + } } -BOOST_AUTO_TEST_CASE_TEMPLATE(flat_linear_allocator_test_emplace, T, all_float_types) +BOOST_AUTO_TEST_CASE_TEMPLATE(flat_linear_allocator_test_emplace, + T, + all_float_types) { - size_t buffer_size = 16; - RandomSample rng{-1, 1}; - rdiff_detail::flat_linear_allocator float_allocator{}; - std::vector test_vector; + size_t buffer_size = 16; + RandomSample rng{ -1, 1 }; + rdiff_detail::flat_linear_allocator float_allocator{}; + std::vector test_vector; - for (size_t i = 0; i < 2 * buffer_size - 1; i++) { - test_vector.push_back(rng.next()); - float_allocator.emplace_back(test_vector[i]); - } + for (size_t i = 0; i < 2 * buffer_size - 1; i++) { + test_vector.push_back(rng.next()); + float_allocator.emplace_back(test_vector[i]); + } - auto it1 = float_allocator.template emplace_back_n<4>(); - for (size_t i = 0; i < 4; i++) { - T literal = rng.next(); - test_vector.push_back(literal); - *(it1 + i) = literal; - } + auto it1 = float_allocator.template emplace_back_n<4>(); + for (size_t i = 0; i < 4; i++) { + T literal = rng.next(); + test_vector.push_back(literal); + *(it1 + i) = literal; + } - auto it2 = float_allocator.emplace_back_n(buffer_size); - for (size_t i = 0; i < buffer_size; i++) { - T literal = rng.next(); - test_vector.push_back(literal); - *(it2 + i) = literal; - } + auto it2 = float_allocator.emplace_back_n(buffer_size); + for (size_t i = 0; i < buffer_size; i++) { + T literal = rng.next(); + test_vector.push_back(literal); + *(it2 + i) = literal; + } - auto vit = test_vector.begin(); - auto alloc_it = float_allocator.begin(); - for (; vit != test_vector.end(); vit++, alloc_it++) { - BOOST_CHECK_EQUAL( - *vit, - *alloc_it); // should be ok to check floats like this since they are expected to be the same. - } + auto vit = test_vector.begin(); + auto alloc_it = float_allocator.begin(); + for (; vit != test_vector.end(); vit++, alloc_it++) { + BOOST_CHECK_EQUAL(*vit, + *alloc_it); // should be ok to check floats like this + // since they are expected to be the same. + } - for (size_t i = 0; i < test_vector.size(); i++) { - BOOST_CHECK_EQUAL(test_vector[i], float_allocator[i]); // check random access aswell; - } + for (size_t i = 0; i < test_vector.size(); i++) { + BOOST_CHECK_EQUAL(test_vector[i], + float_allocator[i]); // check random access aswell; + } - BOOST_CHECK_EQUAL(test_vector.size(), float_allocator.size()); -} -BOOST_AUTO_TEST_CASE_TEMPLATE(flat_linear_allocator_test_checkpointing, T, all_float_types) -{ - size_t buffer_size = 16; - RandomSample rng{-1, 1}; - rdiff_detail::flat_linear_allocator float_allocator{}; - std::vector test_vector; - std::vector checkpoint_indices{2, 11, 15, 16, 17, 28}; - std::vector expected_value_at_checkpoint; - - size_t ckp_id = 0; - for (size_t i = 0; i < 2 * buffer_size; i++) { - T literal = rng.next(); - float_allocator.emplace_back(literal); - if (ckp_id < checkpoint_indices.size() && i == checkpoint_indices[ckp_id]) { - float_allocator.add_checkpoint(); - expected_value_at_checkpoint.push_back(literal); - ++ckp_id; - } - } - for (size_t i = 0; i < checkpoint_indices.size(); i++) { - auto it = float_allocator.checkpoint_at(i); - BOOST_CHECK_EQUAL(*it, expected_value_at_checkpoint[i]); - } - - auto first_ckp = float_allocator.first_checkpoint(); - auto last_ckp = float_allocator.last_checkpoint(); - - BOOST_CHECK_EQUAL(*first_ckp, expected_value_at_checkpoint[0]); - BOOST_CHECK_EQUAL(*last_ckp, expected_value_at_checkpoint.back()); - - float_allocator.rewind_to_last_checkpoint(); - BOOST_CHECK_EQUAL(float_allocator.size(), checkpoint_indices.back()); - BOOST_CHECK_EQUAL(float_allocator.capacity(), 2 * buffer_size); + BOOST_CHECK_EQUAL(test_vector.size(), float_allocator.size()); } +BOOST_AUTO_TEST_CASE_TEMPLATE(flat_linear_allocator_test_checkpointing, + T, + all_float_types) +{ + constexpr size_t buffer_size = 16; + RandomSample rng{ -1, 1 }; + rdiff_detail::flat_linear_allocator float_allocator{}; + std::vector checkpoint_indices{ 2, 11, 15, 16, 17, 28 }; + std::vector expected_value_at_checkpoint; + + size_t ckp_id = 0; + for (size_t i = 0; i < 2 * buffer_size; ++i) { + T literal = rng.next(); + float_allocator.emplace_back(literal); + + if (ckp_id < checkpoint_indices.size() && + (i + 1) == checkpoint_indices[ckp_id]) { + float_allocator.add_checkpoint(); + expected_value_at_checkpoint.push_back(literal); + ++ckp_id; + } + } + + for (size_t i = 0; i < checkpoint_indices.size(); ++i) { + auto it = float_allocator.checkpoint_at(i); + BOOST_REQUIRE(it != float_allocator.begin()); + --it; + BOOST_CHECK_EQUAL(*it, expected_value_at_checkpoint[i]); + } + + auto first_ckp = float_allocator.first_checkpoint(); + BOOST_REQUIRE(first_ckp != float_allocator.begin()); + --first_ckp; + BOOST_CHECK_EQUAL(*first_ckp, expected_value_at_checkpoint.front()); + + auto last_ckp = float_allocator.last_checkpoint(); + BOOST_REQUIRE(last_ckp != float_allocator.begin()); + --last_ckp; + BOOST_CHECK_EQUAL(*last_ckp, expected_value_at_checkpoint.back()); + + float_allocator.rewind_to_last_checkpoint(); + BOOST_CHECK_EQUAL(float_allocator.size(), checkpoint_indices.back()); + BOOST_CHECK_EQUAL(float_allocator.capacity(), 2 * buffer_size); +} BOOST_AUTO_TEST_SUITE_END()