diff --git a/doc/sf_and_dist/airy.qbk b/doc/sf_and_dist/airy.qbk new file mode 100644 index 000000000..c08c16c11 --- /dev/null +++ b/doc/sf_and_dist/airy.qbk @@ -0,0 +1,224 @@ +[/ +Copyright (c) 2012 John Maddock +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:airy Airy Functions] + +[section:ai Airy Ai Function] + +[heading Synopsis] + +`` + #include +`` + + namespace boost { namespace math { + + template + ``__sf_result`` airy_ai(T x); + + template + ``__sf_result`` airy_ai(T x, const Policy&); + + }} // namespaces + +[heading Description] + +The function __airy_ai calculates the Airy function Ai which is the first solution +to the differential equation: + +[equation airy] + +See Weisstein, Eric W. "Airy Functions." From MathWorld--A Wolfram Web Resource. +[@http://mathworld.wolfram.com/AiryFunctions.html]; + + +[optional_policy] + +The following graph illustrates how this function changes as /x/ changes: for negative /x/ +the function is cyclic, while for positive /x/ the value tends to zero: + +[graph airy_ai] + +[heading Accuracy] + +This function is implemented entirely in terms of the Bessel functions +__cyl_bessel_j and __cyl_bessel_k - refer to those functions for detailed accuracy information. + +In general though, the relative error is low (less than 100 [epsilon]) for /x > 0/ while +only the absolute error is low for /x < 0/. + +[heading Testing] + +Since this function is implemented in terms of other special functions, there are only a few +basic sanity checks, using test values from [@http://functions.wolfram.com/ Wolfram Airy Functions]. + +[heading Implementation] + +This function is implemented in terms of the Bessel functions using the relations: + +[equation airy_ai] + +[endsect] + +[section:bi Airy Bi Function] + +[heading Synopsis] + +`` + #include +`` + + namespace boost { namespace math { + + template + ``__sf_result`` airy_bi(T x); + + template + ``__sf_result`` airy_bi(T x, const Policy&); + + }} // namespaces + +[heading Description] + +The function __airy_bi calculates the Airy function Bi which is the second solution to the differential equation: + +[equation airy] + +[optional_policy] + +The following graph illustrates how this function changes as /x/ changes: for negative /x/ +the function is cyclic, while for positive /x/ the value tends to infinity: + +[graph airy_bi] + +[heading Accuracy] + +This function is implemented entirely in terms of the Bessel functions +__cyl_bessel_i and __cyl_bessel_j - refer to those functions for detailed accuracy information. + +In general though, the relative error is low (less than 100 [epsilon]) for /x > 0/ while +only the absolute error is low for /x < 0/. + +[heading Testing] + +Since this function is implemented in terms of other special functions, there are only a few +basic sanity checks, using test values from [@http://functions.wolfram.com functions.wolfram.com]. + +[heading Implementation] + +This function is implemented in terms of the Bessel functions using the relations: + +[equation airy_bi] + +[endsect] + +[section:aip Airy Ai' Function] + +[heading Synopsis] + +`` + #include +`` + + namespace boost { namespace math { + + template + ``__sf_result`` airy_ai_prime(T x); + + template + ``__sf_result`` airy_ai_prime(T x, const Policy&); + + }} // namespaces + +[heading Description] + +The function __airy_ai_prime calculates the Airy function Ai' which is the derivative of the first solution to the differential equation: + +[equation airy] + +[optional_policy] + +The following graph illustrates how this function changes as /x/ changes: for negative /x/ +the function is cyclic, while for positive /x/ the value tends to zero: + +[graph airy_aip] + +[heading Accuracy] + +This function is implemented entirely in terms of the Bessel functions +__cyl_bessel_j and __cyl_bessel_k - refer to those functions for detailed accuracy information. + +In general though, the relative error is low (less than 100 [epsilon]) for /x > 0/ while +only the absolute error is low for /x < 0/. + +[heading Testing] + +Since this function is implemented in terms of other special functions, there are only a few +basic sanity checks, using test values from [@http://functions.wolfram.com functions.wolfram.com]. + +[heading Implementation] + +This function is implemented in terms of the Bessel functions using the relations: + +[equation airy_aip] + +[endsect] + +[section:bip Airy Bi' Function] + +[heading Synopsis] + +`` + #include +`` + + namespace boost { namespace math { + + template + ``__sf_result`` airy_bi_prime(T x); + + template + ``__sf_result`` airy_bi_prime(T x, const Policy&); + + }} // namespaces + +[heading Description] + +The function __airy_bi_prime calculates the Airy function Bi' which is the derivative of the second solution to the differential equation: + +[equation airy] + +[optional_policy] + +The following graph illustrates how this function changes as /x/ changes: for negative /x/ +the function is cyclic, while for positive /x/ the value tends to infinity: + +[graph airy_bi] + +[heading Accuracy] + +This function is implemented entirely in terms of the Bessel functions +__cyl_bessel_i and __cyl_bessel_j - refer to those functions for detailed accuracy information. + +In general though, the relative error is low (less than 100 [epsilon]) for /x > 0/ while +only the absolute error is low for /x < 0/. + +[heading Testing] + +Since this function is implemented in terms of other special functions, there are only a few +basic sanity checks, using test values from [@http://functions.wolfram.com functions.wolfram.com]. + +[heading Implementation] + +This function is implemented in terms of the Bessel functions using the relations: + +[equation airy_bip] + +[endsect] + +[endsect] + diff --git a/doc/sf_and_dist/constants.qbk b/doc/sf_and_dist/constants.qbk index 27377934a..7de44d7e2 100644 --- a/doc/sf_and_dist/constants.qbk +++ b/doc/sf_and_dist/constants.qbk @@ -34,26 +34,27 @@ see [link math_toolkit.constants.tutorial.templ use in template code]. [section:non_templ Use in non-template code] When using the math constants at your chosen fixed precision in non-template code, -you can simply add a `using` declaration, for example, `using boost::math::double_constants`, +you can simply add a `using namespace` declaration, for example, +`using namespace boost::math::double_constants`, to make the constants of the correct precision for your code -visible in the current scope, and then use each constant ['as a simple variable]: +visible in the current scope, and then use each constant ['as a simple variable - sans brackets]: - #include + #include double area(double r) { - using boost::math::double_constants; + using namespace boost::math::double_constants; return pi * r * r; } Had our function been written as taking a `float` rather than a `double`, we could have written instead: - #include + #include float area(float r) { - using boost::math::float_constants; + using namespace boost::math::float_constants; return pi * r * r; } @@ -62,6 +63,8 @@ are available in the namespace `boost::math::long_double_constants`. You can see the full list of available constants at [link math_toolkit.constants.constants]. +Some examples of using constants are at [@../../../example/constants_eg1.cpp constants_eg1]. + [endsect] [section:templ Use in template code] @@ -71,7 +74,7 @@ we use a constant of the correct precision for our template parameters. We can do this by calling the function-template versions, `pi()`, of the constants like this: - #include + #include template Real area(Real r) @@ -139,7 +142,7 @@ You can also avoid this by being explicit about the type of `Area`. The syntax for using the function-call constants with user-defined types is the same as it is in the template class, which is to say we use: - #include + #include boost::math::constants::pi(); @@ -652,7 +655,7 @@ This class is used in Boost.Math and an option when using big_number projects to [h5 GMP and MPFR] -[@gmplib.org GMP] and [@http://www.mpfr.org/ MPFR] have also been used to compute constants, +[@http://gmplib.org GMP] and [@http://www.mpfr.org/ MPFR] have also been used to compute constants, but are licensed under the [@http://www.gnu.org/copyleft/lesser.html Lesser GPL license] and are [*not licensed for commercial use]. @@ -704,7 +707,13 @@ Some physical constants may be available in Boost.Units. [endsect] [/section:FAQ FAQ] -[endsect] - +[endsect] [/section:constants Mathematical Constants] + +[/ + Copyright 2012 John Maddock and Paul A. Bristow. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] diff --git a/doc/sf_and_dist/credits.qbk b/doc/sf_and_dist/credits.qbk index fa747ca36..76fa9e0c0 100644 --- a/doc/sf_and_dist/credits.qbk +++ b/doc/sf_and_dist/credits.qbk @@ -26,19 +26,19 @@ Johan R'''å'''de wrote the optimised floating-point classification and manipulation code, and nonfinite facets to permit C99 output of infinities and NaNs. (nonfinite facets were not added until Boost 1.47 but had been in use with Boost.Spirit). This library was based on a suggestion from Robert Ramey, author of Boost.Serialization. -Paul A. Bristow expressed the need for better handling of +Paul A. Bristow expressed the need for better handling of [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2022.pdf Input & Output of NaN and infinity for the C++ Standard Library] and suggested following the C99 format. -Antony Polukhin improved lexical cast avoiding stringstream so that +Antony Polukhin improved lexical cast avoiding stringstream so that it was no longer necessary to use a globale C99 facet to handle nonfinites. H'''å'''kan Ard'''ö''', Boris Gubenko, John Maddock, Markus Sch'''ö'''pflin -and Olivier Verdier tested the floating-point library and -Martin Bonner, Peter Dimov and John Maddock provided valuable advice. +and Olivier Verdier tested the floating-point library and +Martin Bonner, Peter Dimov and John Maddock provided valuable advice. Gautam Sewani coded the logistic distribution as part of a Google Summer of Code project 2008. @@ -46,7 +46,8 @@ M. A. (Thijs) van den Berg coded the Laplace distribution. (Thijs has also threatened to implement some multivariate distributions). Thomas Mang requested the inverse gamma in chi squared distributions -for Bayesian applications and helped in their implementation. +for Bayesian applications and helped in their implementation, +and provided a nice example of their use. Professor Nico Temme for advice on the inverse incomplete beta function. @@ -60,22 +61,17 @@ We are grateful to Joel Guzman for helping us stress-test his program used to generate the html and pdf versions of this document, adding several new features en route. -Thanks to Mark Coleman and Georgi Boshnakov for spot test values -from __Mathematica, and of course, -to Eric Weissten for nurturing __Mathworld, an invaluable resource. - -The Skew-normal distribution and Owen's t function were written by Benjamin Sobotta. - Plots of the functions and distributions were prepared in [@http://www.w3.org/ W3C] standard [@http://www.svg.org/ Scalable Vector Graphic (SVG)] format using a program created by Jacob Voytko during a [@http://code.google.com/soc/2007/ Google Summer of Code (2007)]. -Since browser support for rendering SVG is still not universal -(Microsoft Internet Explorer, even IE 8 beta, still lacks native SVG support +From 2012, the latest versions of all Internet Browsers have support +for rendering SVG (with varying quality). Older versions, especially +(Microsoft Internet Explorer (before IE 9) lack native SVG support but can be made to work with -[@http://www.adobe.com/svg/viewer/install/ Adobe's free SVG viewer] plugin), -so the SVG files were batch converted to JPEG using +[@http://www.adobe.com/svg/viewer/install/ Adobe's free SVG viewer] plugin). +The SVG files can be converted to JPEG or PNG using [@http://www.inkscape.org/ Inkscape]. We are also indebted to Matthias Schabel for managing the formal Boost-review @@ -83,10 +79,21 @@ of this library, and to all the reviewers - including Guillaume Melquiond, Arnaldur Gylfason, John Phillips, Stephan Tolksdorf and Jeff Garland - for their many helpful comments. +Thanks to Mark Coleman and Georgi Boshnakov for spot test values +from __Mathematica, and of course, +to Eric Weissten for nurturing __Mathworld, an invaluable resource. + +The Skew-normal distribution and Owen's t function were written by Benjamin Sobotta. + +We thank Thomas Mang for persuading us to allow t distributions +to have infinite degrees of freedom +and contributing to some long discussions about how to improve accuracy +for large non-centrality and/or large degrees of freedom. + [endsect] [/section:credits Credits and Acknowledgements] [/ - Copyright 2006, 2007, 2008, 2009, 2010 John Maddock and Paul A. Bristow. + Copyright 2006, 2007, 2008, 2009, 2010, 2012 John Maddock and Paul A. Bristow. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). diff --git a/doc/sf_and_dist/dist_tutorial.qbk b/doc/sf_and_dist/dist_tutorial.qbk index 521eb0d50..361492717 100644 --- a/doc/sf_and_dist/dist_tutorial.qbk +++ b/doc/sf_and_dist/dist_tutorial.qbk @@ -1,4 +1,5 @@ [/ def names all end in distrib to avoid clashes with names of functions] + [def __binomial_distrib [link math_toolkit.dist.dist_ref.dists.binomial_dist Binomial Distribution]] [def __chi_squared_distrib [link math_toolkit.dist.dist_ref.dists.chi_squared_dist Chi Squared Distribution]] [def __normal_distrib [link math_toolkit.dist.dist_ref.dists.normal_dist Normal Distribution]] diff --git a/doc/sf_and_dist/distributions/bernoulli.qbk b/doc/sf_and_dist/distributions/bernoulli.qbk index d22af07a1..fc08b5cb4 100644 --- a/doc/sf_and_dist/distributions/bernoulli.qbk +++ b/doc/sf_and_dist/distributions/bernoulli.qbk @@ -105,7 +105,7 @@ the binomial distribution with a single trial should be used, for example: [h4 References] * [@http://en.wikipedia.org/wiki/Bernoulli_distribution Wikpedia Bernoulli distribution] -* [@ Weisstein, Eric W. "Bernoulli Distribution." From MathWorld--A Wolfram Web Resource.] +* [@http://mathworld.wolfram.com/BernoulliDistribution.html Weisstein, Eric W. "Bernoulli Distribution." From MathWorld--A Wolfram Web Resource.] [endsect][/section:bernoulli_dist bernoulli] diff --git a/doc/sf_and_dist/distributions/binomial.qbk b/doc/sf_and_dist/distributions/binomial.qbk index d12094319..9b31a3750 100644 --- a/doc/sf_and_dist/distributions/binomial.qbk +++ b/doc/sf_and_dist/distributions/binomial.qbk @@ -58,7 +58,7 @@ The class type `binomial_distribution` represents a it is used when there are exactly two mutually exclusive outcomes of a trial. These outcomes are labelled "success" and "failure". The -[@ binomial distribution] is used to obtain +__binomial_distrib is used to obtain the probability of observing k successes in N trials, with the probability of success on a single trial denoted by p. The binomial distribution assumes that p is fixed for all trials. @@ -394,7 +394,7 @@ There are also various special cases: refer to the code for details. ]] * [@http://en.wikipedia.org/wiki/Beta_distribution Wikipedia binomial distribution]. * [@http://www.itl.nist.gov/div898/handbook/eda/section3/eda366i.htm NIST Explorary Data Analysis]. -[endsect][/section:binomial_dist Binomial] +[endsect] [/section:binomial_dist Binomial] [/ binomial.qbk Copyright 2006 John Maddock and Paul A. Bristow. diff --git a/doc/sf_and_dist/distributions/nc_t.qbk b/doc/sf_and_dist/distributions/nc_t.qbk index bfee6490f..68707c014 100644 --- a/doc/sf_and_dist/distributions/nc_t.qbk +++ b/doc/sf_and_dist/distributions/nc_t.qbk @@ -2,9 +2,9 @@ ``#include `` - namespace boost{ namespace math{ + namespace boost{ namespace math{ - template class non_central_t_distribution; @@ -23,18 +23,18 @@ // Accessor to degrees_of_freedom parameter v: RealType degrees_of_freedom()const; - // Accessor to non-centrality parameter lambda: + // Accessor to non-centrality parameter delta: RealType non_centrality()const; }; - + }} // namespaces - + The noncentral T distribution is a generalization of the __students_t_distrib. -Let X have a normal distribution with mean [delta] and variance 1, and let +Let X have a normal distribution with mean [delta] and variance 1, and let [nu] S[super 2] have -a chi-squared distribution with degrees of freedom [nu]. Assume that +a chi-squared distribution with degrees of freedom [nu]. Assume that X and S[super 2] are independent. The -distribution of t[sub [nu]]([delta])=X/S is called a +distribution of t[sub [nu]]([delta])=X/S is called a noncentral t distribution with degrees of freedom [nu] and noncentrality parameter [delta]. @@ -45,25 +45,26 @@ This gives the following PDF: where [sub 1]F[sub 1](a;b;x) is a confluent hypergeometric function. The following graph illustrates how the distribution changes -for different values of [delta]: +for different values of [nu] and [delta]: [graph nc_t_pdf] +[graph nc_t_cdf] [h4 Member Functions] - non_central_t_distribution(RealType v, RealType lambda); - + non_central_t_distribution(RealType v, RealType delta); + Constructs a non-central t distribution with degrees of freedom parameter /v/ and non-centrality parameter /delta/. -Requires v > 0 and finite delta, otherwise calls __domain_error. +Requires /v/ > 0 (including positive infinity) and finite /delta/, otherwise calls __domain_error. RealType degrees_of_freedom()const; - + Returns the parameter /v/ from which this object was constructed. RealType non_centrality()const; - + Returns the non-centrality parameter /delta/ from which this object was constructed. [h4 Non-member Accessors] @@ -76,18 +77,16 @@ The domain of the random variable is \[-[infin], +[infin]\]. [h4 Accuracy] The following table shows the peak errors -(in units of [@http://en.wikipedia.org/wiki/Machine_epsilon epsilon]) +(in units of [@http://en.wikipedia.org/wiki/Machine_epsilon epsilon]) found on various platforms with various floating-point types. Unless otherwise specified, any floating-point type that is narrower than the one shown will have __zero_error. [table Errors In CDF of the Noncentral T Distribution -[[Significand Size] [Platform and Compiler] [[nu],[delta] < 600]] +[[Significand Size (bits)] [Platform and Compiler] [[nu], [delta] < 600]] [[53] [Win32, Visual C++ 8] [Peak=120 Mean=26 ] ] [[64] [RedHat Linux IA32, gcc-4.1.1] [Peak=121 Mean=26] ] - [[64] [Redhat Linux IA64, gcc-3.4.4] [Peak=122 Mean=25] ] - [[113] [HPUX IA64, aCC A.06.06] [Peak=115 Mean=24] ] ] @@ -96,25 +95,37 @@ than the one shown will have __zero_error. increases rapidly for [delta] > 500, likewise the accuracy decreases rapidly for very large [delta].] -Accuracy for the quantile and PDF functions should be broadly similar, -note however that the /mode/ is determined numerically and can not -in principal be more accurate than the square root of machine epsilon. +Accuracy for the quantile and PDF functions should be broadly similar. +The /mode/ is determined numerically and cannot +in principal be more accurate than the square root of +floating-point type FPT epsilon, accessed using `boost::math::tools::epsilon()`. +For 64-bit `double`, epsilon is about 1e-16, so the fractional accuracy is limited to 1e-8. [h4 Tests] -There are two sets of tests of this distribution: basic sanity checks -compare this implementation to the test values given in +There are two sets of tests of this distribution: + +Basic sanity checks compare this implementation to the test values given in "Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient." -Denise Benton, K. Krishnamoorthy, +Denise Benton, K. Krishnamoorthy, Computational Statistics & Data Analysis 43 (2003) 249-267. -While accuracy checks use test data computed with this + +Accuracy checks use test data computed with this implementation and arbitary precision interval arithmetic: this test data is believed to be accurate to at least 50 decimal places. +The cases of large (or infinite) [nu] and/or large [delta] has received special +treatment to avoid catastrophic loss of accuracy. +New tests have been added to confirm the improvement achieved. + +From Boost 1.52, degrees of freedom [nu] can be +[infin] +when the normal distribution located at [delta] +(equivalent to the central Student's t distribution) +is used in place for accuracy and speed. [h4 Implementation] @@ -124,7 +135,7 @@ described in distributions: noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient." -Denise Benton, K. Krishnamoorthy, +Denise Benton, K. Krishnamoorthy, Computational Statistics & Data Analysis 43 (2003) 249-267. This uses the following formula for the CDF: @@ -150,7 +161,7 @@ From this we can easily show that: and therefore we have a means to compute either the probability or its complement directly without the risk of cancellation error. The crossover criterion for choosing whether to calculate the CDF or -its complement is the same as for the +its complement is the same as for the __non_central_beta_distrib. The PDF can be computed by a very similar method using: @@ -159,7 +170,30 @@ The PDF can be computed by a very similar method using: Where I[sub x][super '](a,b) is the derivative of the incomplete beta function. -The quantile is calculated via the usual +For both the PDF and CDF we switch to approximating the distribution by a +Student's t distribution centred on [delta] when [nu] is very large. +The crossover location appears to be when [delta]/(4[nu]) < [epsilon], +this location was estimated by inspection of equation 2.6 in +"A Comparison of Approximations To Percentiles of the +Noncentral t-Distribution". H. Sahai and M. M. Ojeda, +Revista Investigacion Operacional Vol 21, No 2, 2000, page 123. + +Equation 2.6 is a Fisher-Cornish expansion by Eeden and Johnson. +The second term includes the ratio [delta]/(4[nu]), +so when this term become negligible, this and following terms can be ignored, +leaving just Student's t distribution centred on [delta]. + +This was also confirmed by experimental testing. + +See also + +* "Some Approximations to the Percentage Points of the Noncentral +t-Distribution". C. van Eeden. International Statistical Review, 29, 4-31. + +* "Continuous Univariate Distributions". N.L. Johnson, S. Kotz and +N. Balkrishnan. 1995. John Wiley and Sons New York. + +The quantile is calculated via the usual [link math_toolkit.toolkit.internals1.roots2 derivative-free root-finding techniques], with the initial guess taken as the quantile of a normal approximation @@ -169,13 +203,13 @@ There is no closed form for the mode, so this is computed via functional maximisation of the PDF. The remaining functions (mean, variance etc) are implemented -using the formulas given in -Weisstein, Eric W. "Noncentral Student's t-Distribution." -From MathWorld--A Wolfram Web Resource. +using the formulas given in +Weisstein, Eric W. "Noncentral Student's t-Distribution." +From MathWorld--A Wolfram Web Resource. [@http://mathworld.wolfram.com/NoncentralStudentst-Distribution.html http://mathworld.wolfram.com/NoncentralStudentst-Distribution.html] -and in the -[@http://reference.wolfram.com/mathematica/ref/NoncentralStudentTDistribution.html +and in the +[@http://reference.wolfram.com/mathematica/ref/NoncentralStudentTDistribution.html Mathematica documentation]. Some analytic properties of noncentral distributions @@ -184,10 +218,12 @@ are surveyed and summarized by: Andrea van Aubel & Wolfgang Gawronski, Applied Mathematics and Computation, 141 (2003) 3-12. + + [endsect] [/section:nc_t_dist] [/ nc_t.qbk - Copyright 2008 John Maddock and Paul A. Bristow. + Copyright 2008, 2012 John Maddock and Paul A. Bristow. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). diff --git a/doc/sf_and_dist/distributions/students_t.qbk b/doc/sf_and_dist/distributions/students_t.qbk index 80dce1a70..ec48c0a3d 100644 --- a/doc/sf_and_dist/distributions/students_t.qbk +++ b/doc/sf_and_dist/distributions/students_t.qbk @@ -2,12 +2,12 @@ ``#include `` - namespace boost{ namespace math{ - - template class students_t_distribution; - + typedef students_t_distribution<> students_t; template @@ -15,13 +15,13 @@ { typedef RealType value_type; typedef Policy policy_type; - + // Construct: students_t_distribution(const RealType& v); - + // Accessor: RealType degrees_of_freedom()const; - + // degrees of freedom estimation: static RealType find_degrees_of_freedom( RealType difference_from_mean, @@ -30,20 +30,21 @@ RealType sd, RealType hint = 100); }; - + }} // namespaces - -A statistical distribution published by William Gosset in 1908. -His employer, Guinness Breweries, required him to publish under a -pseudonym, so he chose "Student". Given N independent measurements, let + +A statistical distribution published by William Gosset in 1908. +His employer, Guinness Breweries, required him to publish under a +pseudonym (possibly to hide that they were using statistics), +so he chose "Student". Given N independent measurements, let [equation students_t_dist] -where /M/ is the population mean,[' ''' μ '''] is the sample mean, and /s/ is the +where /M/ is the population mean,[' ''' μ '''] is the sample mean, and /s/ is the sample variance. -Student's t-distribution is defined as the distribution of the random -variable t which is - very loosely - the "best" that we can do not +Student's t-distribution is defined as the distribution of the random +variable t which is - very loosely - the "best" that we can do not knowing the true standard deviation of the sample. It has the PDF: [equation students_t_ref1] @@ -60,15 +61,15 @@ illustrates how the PDF varies with the degrees of freedom [nu]: [h4 Member Functions] students_t_distribution(const RealType& v); - + Constructs a Student's t-distribution with /v/ degrees of freedom. -Requires v > 0, otherwise calls __domain_error. Note that -non-integral degrees of freedom are supported, and -meaningful under certain circumstances. +Requires /v/ > 0, otherwise calls __domain_error. Note that +non-integral degrees of freedom are supported, +and are meaningful under certain circumstances. RealType degrees_of_freedom()const; - + Returns the number of degrees of freedom of this distribution. static RealType find_degrees_of_freedom( @@ -79,15 +80,15 @@ Returns the number of degrees of freedom of this distribution. RealType hint = 100); Returns the number of degrees of freedom required to observe a significant -result in the Student's t test when the mean differs from the "true" +result in the Student's t test when the mean differs from the "true" mean by /difference_from_mean/. [variablelist [[difference_from_mean][The difference between the true mean and the sample mean that we wish to show is significant.]] -[[alpha][The maximum acceptable probability of rejecting the null hypothesis +[[alpha][The maximum acceptable probability of rejecting the null hypothesis when it is in fact true.]] -[[beta][The maximum acceptable probability of failing to reject the null hypothesis +[[beta][The maximum acceptable probability of failing to reject the null hypothesis when it is in fact false.]] [[sd][The sample standard deviation.]] [[hint][A hint for the location to start looking for the result, a good choice for this @@ -98,10 +99,10 @@ mean by /difference_from_mean/. Remember that for a two-sided test, you must divide alpha by two before calling this function.] -For more information on this function see the -[@http://www.itl.nist.gov/div898/handbook/prc/section2/prc222.htm +For more information on this function see the +[@http://www.itl.nist.gov/div898/handbook/prc/section2/prc222.htm NIST Engineering Statistics Handbook]. - + [h4 Non-member Accessors] All the [link math_toolkit.dist.dist_ref.nmp usual non-member accessor functions] that are generic to all @@ -116,14 +117,14 @@ distribution. [h4 Accuracy] -The normal distribution is implemented in terms of the +The normal distribution is implemented in terms of the [link math_toolkit.special.sf_beta.ibeta_function incomplete beta function] and [link math_toolkit.special.sf_beta.ibeta_inv_function its inverses], refer to accuracy data on those functions for more information. [h4 Implementation] -In the following table /v/ is the degrees of freedom of the distribution, +In the following table /v/ is the degrees of freedom of the distribution, /t/ is the random variate, /p/ is the probability and /q = 1-p/. [table @@ -152,18 +153,26 @@ y = 1 - x The quantities /x/ and /y/ are both returned by __ibeta_inv without the subtraction implied above.]] [[quantile from the complement][Using the relation: t = -quantile(q)]] -[[mean][0]] -[[variance][v \/ (v - 2)]] [[mode][0]] -[[skewness][0]] -[[kurtosis][3 * (v - 2) \/ (v - 4)]] -[[kurtosis excess][6 \/ (df - 4)]] +[[mean][0]] +[[variance][if (v > 2) v \/ (v - 2) else NaN]] +[[skewness][if (v > 3) 0 else NaN ]] +[[kurtosis][if (v > 4) 3 * (v - 2) \/ (v - 4) else NaN]] +[[kurtosis excess][if (v > 4) 6 \/ (df - 4) else NaN]] ] -[endsect][/section:students_t_dist Students t] +If the moment index /k/ is less than /v/, then the moment is undefined. +Evaluating the moment will throw a __domain_error unless ignored by a policy, +when it will return `std::numeric_limits<>::quiet_NaN();` + +(For simplicity, we have not implemented the return of infinity in some cases +as suggested by [@http://en.wikipedia.org/wiki/Student%27s_t-distribution Wikipedia Student's t]. +See also [@https://svn.boost.org/trac/boost/ticket/7177].) + +[endsect] [/section:students_t_dist Students t] [/ students_t.qbk - Copyright 2006 John Maddock and Paul A. Bristow. + Copyright 2006, 2012 John Maddock and Paul A. Bristow. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). diff --git a/doc/sf_and_dist/equations/airy.mml b/doc/sf_and_dist/equations/airy.mml new file mode 100644 index 000000000..0b1550e81 --- /dev/null +++ b/doc/sf_and_dist/equations/airy.mml @@ -0,0 +1,76 @@ + +]> + +airy + + + + + + + + + + 2 + + w + + + + + z + 2 + + + + = + z + w + + ; + + w + = + A + i + + + z + + + , + B + i + + + z + + + , + A + i + + + z + + + + ± + + + 2 + π + + + 3 + + + + + + + + + diff --git a/doc/sf_and_dist/equations/airy.png b/doc/sf_and_dist/equations/airy.png new file mode 100644 index 000000000..7dbdb201c Binary files /dev/null and b/doc/sf_and_dist/equations/airy.png differ diff --git a/doc/sf_and_dist/equations/airy.svg b/doc/sf_and_dist/equations/airy.svg new file mode 100644 index 000000000..3ec9815b4 --- /dev/null +++ b/doc/sf_and_dist/equations/airy.svg @@ -0,0 +1,2 @@ + +d2wdz2=zw;w=Ai(z),Bi(z),Ai(ze±2Ï€i3) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/airy_ai.mml b/doc/sf_and_dist/equations/airy_ai.mml new file mode 100644 index 000000000..078ef689b --- /dev/null +++ b/doc/sf_and_dist/equations/airy_ai.mml @@ -0,0 +1,187 @@ + +]> + +airy_ai + + + + + + + + + A + i + + + 0 + + + + + = + + + + 1 + + + 3 + + + 2 + 3 + + + + Γ + + + + 2 + 3 + + + + + + + + + + A + i + + + z + + + + + = + + + + π + + + 1 + + + + + + z + 3 + + + + + K + + ± + + + 1 + 3 + + + + + + + ζ + + + + + ; + + + ζ + = + + 2 + 3 + + + z + + + 2 + 3 + + + + + + + + A + i + + + + z + + + + + = + + + + + + + + z + + + 3 + + + + + + + J + + + 1 + 3 + + + + + + ζ + + + + + + J + + + + 1 + 3 + + + + + + ζ + + + + + + + + + + + diff --git a/doc/sf_and_dist/equations/airy_ai.png b/doc/sf_and_dist/equations/airy_ai.png new file mode 100644 index 000000000..2ec87ac56 Binary files /dev/null and b/doc/sf_and_dist/equations/airy_ai.png differ diff --git a/doc/sf_and_dist/equations/airy_ai.svg b/doc/sf_and_dist/equations/airy_ai.svg new file mode 100644 index 000000000..fdb08f67c --- /dev/null +++ b/doc/sf_and_dist/equations/airy_ai.svg @@ -0,0 +1,2 @@ + +Ai(0)=1323Γ(23)Ai(z)=π−1z3K±13(ζ);ζ=23z23Ai(−z)=(z3)(J13(ζ)+J−13(ζ)) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/airy_aip.mml b/doc/sf_and_dist/equations/airy_aip.mml new file mode 100644 index 000000000..a10c64c64 --- /dev/null +++ b/doc/sf_and_dist/equations/airy_aip.mml @@ -0,0 +1,179 @@ + +]> + +airy_aip + + + + + + + + + A + i + + + + 0 + + + + + = + + + + + + 1 + + + 3 + + + 1 + 3 + + + + Γ + + + + 1 + 3 + + + + + + + + + + + A + i + + + + z + + + + + = + + + + z + + π + + 3 + + + + + K + + + ± + + 2 + 3 + + + + + + + ζ + + + + + ; + + + ζ + = + + 2 + 3 + + + z + + + 2 + 3 + + + + + + + + A + i + + + + + z + + + + + = + + + + z + 3 + + + + + J + + + 2 + 3 + + + + + + ζ + + + + + J + + + + 2 + 3 + + + + + + ζ + + + + + + + + + + + diff --git a/doc/sf_and_dist/equations/airy_aip.png b/doc/sf_and_dist/equations/airy_aip.png new file mode 100644 index 000000000..8b9921932 Binary files /dev/null and b/doc/sf_and_dist/equations/airy_aip.png differ diff --git a/doc/sf_and_dist/equations/airy_aip.svg b/doc/sf_and_dist/equations/airy_aip.svg new file mode 100644 index 000000000..f55c76657 --- /dev/null +++ b/doc/sf_and_dist/equations/airy_aip.svg @@ -0,0 +1,2 @@ + +Ai′(0)=−1313Γ(13)Ai′(z)=zÏ€3K±23(ζ);ζ=23z23Ai′(−z)=z3(J23(ζ)−J−23(ζ)) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/airy_bi.mml b/doc/sf_and_dist/equations/airy_bi.mml new file mode 100644 index 000000000..228a20536 --- /dev/null +++ b/doc/sf_and_dist/equations/airy_bi.mml @@ -0,0 +1,195 @@ + +]> + +airy_bi + + + + + + + + + B + i + + + 0 + + + + + = + + + + 1 + + + 3 + + + 1 + 6 + + + + Γ + + + + 2 + 3 + + + + + + + + + + B + i + + + z + + + + + = + + + + + + z + 3 + + + + + + + I + + + + 1 + 3 + + + + + + + ζ + + + + + + I + + + + 1 + 3 + + + + + + ζ + + + + + + + ; + + + ζ + = + + 2 + 3 + + + z + + + 2 + 3 + + + + + + + + B + i + + + + z + + + + + = + + + + + + z + 3 + + + + + + + J + + + + 1 + 3 + + + + + + ζ + + + + + J + + + 1 + 3 + + + + + + ζ + + + + + + + + + + + diff --git a/doc/sf_and_dist/equations/airy_bi.png b/doc/sf_and_dist/equations/airy_bi.png new file mode 100644 index 000000000..13281d667 Binary files /dev/null and b/doc/sf_and_dist/equations/airy_bi.png differ diff --git a/doc/sf_and_dist/equations/airy_bi.svg b/doc/sf_and_dist/equations/airy_bi.svg new file mode 100644 index 000000000..44e6efcae --- /dev/null +++ b/doc/sf_and_dist/equations/airy_bi.svg @@ -0,0 +1,2 @@ + +Bi(0)=1316Γ(23)Bi(z)=z3(I13(ζ)+I−13(ζ));ζ=23z23Bi(−z)=z3(J−13(ζ)−J13(ζ)) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/airy_bip.mml b/doc/sf_and_dist/equations/airy_bip.mml new file mode 100644 index 000000000..0e6c69d5a --- /dev/null +++ b/doc/sf_and_dist/equations/airy_bip.mml @@ -0,0 +1,195 @@ + +]> + +airy_bip + + + + + + + + + B + i + + + + 0 + + + + + = + + + + + + 3 + + + 1 + 6 + + + + + Γ + + + + 1 + 3 + + + + + + + + + + + B + i + + + + z + + + + + = + + + + z + + 3 + + + + + + I + + + + 2 + 3 + + + + + + + ζ + + + + + + I + + + + 2 + 3 + + + + + + ζ + + + + + + + ; + + + ζ + = + + 2 + 3 + + + z + + + 2 + 3 + + + + + + + + B + i + + + + + z + + + + + = + + + + z + + 3 + + + + + + J + + + + 2 + 3 + + + + + + ζ + + + + + + J + + + 2 + 3 + + + + + + ζ + + + + + + + + + + + diff --git a/doc/sf_and_dist/equations/airy_bip.png b/doc/sf_and_dist/equations/airy_bip.png new file mode 100644 index 000000000..98a9f0bdf Binary files /dev/null and b/doc/sf_and_dist/equations/airy_bip.png differ diff --git a/doc/sf_and_dist/equations/airy_bip.svg b/doc/sf_and_dist/equations/airy_bip.svg new file mode 100644 index 000000000..311e43a55 --- /dev/null +++ b/doc/sf_and_dist/equations/airy_bip.svg @@ -0,0 +1,2 @@ + +Bi′(0)=316Γ(13)Bi′(z)=z3(I23(ζ)+I−23(ζ));ζ=23z23Bi′(−z)=z3(J−23(ζ)+J23(ζ)) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/jacobi1.mml b/doc/sf_and_dist/equations/jacobi1.mml new file mode 100644 index 000000000..9683446c2 --- /dev/null +++ b/doc/sf_and_dist/equations/jacobi1.mml @@ -0,0 +1,51 @@ + +]> + +jacobi1 + + + + + + u + + = + + + + + 0 + + φ + + + + d + φ + + + + + + 1 + + + k + 2 + + + sin + 2 + + φ + + + + + + + + + diff --git a/doc/sf_and_dist/equations/jacobi1.png b/doc/sf_and_dist/equations/jacobi1.png new file mode 100644 index 000000000..f844e7e47 Binary files /dev/null and b/doc/sf_and_dist/equations/jacobi1.png differ diff --git a/doc/sf_and_dist/equations/jacobi1.svg b/doc/sf_and_dist/equations/jacobi1.svg new file mode 100644 index 000000000..b18fc9313 --- /dev/null +++ b/doc/sf_and_dist/equations/jacobi1.svg @@ -0,0 +1,2 @@ + +u=∫0φdφ(1−k2sin2φ) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/jacobi2.mml b/doc/sf_and_dist/equations/jacobi2.mml new file mode 100644 index 000000000..3da0d10f2 --- /dev/null +++ b/doc/sf_and_dist/equations/jacobi2.mml @@ -0,0 +1,92 @@ + +]> + +jacobi2 + + + + + + + + + s + n + + + u + , + k + + + + + = + + + sin + φ + + + + + c + n + + + u + , + k + + + + + = + + + cos + φ + + + + + d + n + + + u + , + k + + + + + = + + + + + + 1 + + + k + 2 + + + sin + 2 + + φ + + + + + + + + + + diff --git a/doc/sf_and_dist/equations/jacobi2.png b/doc/sf_and_dist/equations/jacobi2.png new file mode 100644 index 000000000..51631b535 Binary files /dev/null and b/doc/sf_and_dist/equations/jacobi2.png differ diff --git a/doc/sf_and_dist/equations/jacobi2.svg b/doc/sf_and_dist/equations/jacobi2.svg new file mode 100644 index 000000000..00aa8a21a --- /dev/null +++ b/doc/sf_and_dist/equations/jacobi2.svg @@ -0,0 +1,2 @@ + +sn(u,k)=sinφcn(u,k)=cosφdn(u,k)=(1−k2sin2φ) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/jacobi3.mml b/doc/sf_and_dist/equations/jacobi3.mml new file mode 100644 index 000000000..98571da48 --- /dev/null +++ b/doc/sf_and_dist/equations/jacobi3.mml @@ -0,0 +1,135 @@ + +]> + +jacobi3 + + + + + + + + + μ + + + = + + + + 1 + + + k + 2 + + + + + + + + ν + + + = + + + u + k + + + + + s + n + + + u + , + k + + + + + = + + + + + s + n + + + ν + , + μ + + + + k + + + + + + c + n + + + u + , + k + + + + + = + + + d + n + + + ν + , + μ + + + + + + + d + n + + + u + , + k + + + + + = + + + c + n + + + ν + , + k + + + + + + + + + + diff --git a/doc/sf_and_dist/equations/jacobi3.png b/doc/sf_and_dist/equations/jacobi3.png new file mode 100644 index 000000000..5046a70f5 Binary files /dev/null and b/doc/sf_and_dist/equations/jacobi3.png differ diff --git a/doc/sf_and_dist/equations/jacobi3.svg b/doc/sf_and_dist/equations/jacobi3.svg new file mode 100644 index 000000000..6364d08aa --- /dev/null +++ b/doc/sf_and_dist/equations/jacobi3.svg @@ -0,0 +1,2 @@ + +μ=1k2ν=uksn(u,k)=sn(ν,μ)kcn(u,k)=dn(ν,μ)dn(u,k)=cn(ν,k) \ No newline at end of file diff --git a/doc/sf_and_dist/equations/jacobi4.mml b/doc/sf_and_dist/equations/jacobi4.mml new file mode 100644 index 000000000..ca8fdde17 --- /dev/null +++ b/doc/sf_and_dist/equations/jacobi4.mml @@ -0,0 +1,170 @@ + +]> + +jacobi4 + + + + + + + + + s + n + + + u + , + k + + + + + + + + sin + + + u + + + + + 1 + 4 + + + k + 2 + + + + u + + sin + + + u + + + cos + + + u + + + + + cos + + + u + + + + + + + c + n + + + u + , + k + + + + + + + + cos + + + u + + + + + + 1 + 4 + + + k + 2 + + + + u + + sin + + + u + + + cos + + + u + + + + + sin + + + u + + + + + + + d + n + + + u + , + k + + + + + + + + 1 + + + 1 + 2 + + + k + 2 + + sin + + + 2 + + + + u + + + + + + + + + + diff --git a/doc/sf_and_dist/equations/jacobi4.png b/doc/sf_and_dist/equations/jacobi4.png new file mode 100644 index 000000000..27449013a Binary files /dev/null and b/doc/sf_and_dist/equations/jacobi4.png differ diff --git a/doc/sf_and_dist/equations/jacobi4.svg b/doc/sf_and_dist/equations/jacobi4.svg new file mode 100644 index 000000000..923088789 --- /dev/null +++ b/doc/sf_and_dist/equations/jacobi4.svg @@ -0,0 +1,2 @@ + +sn(u,k)≈sin(u)−14k2(u−sin(u)cos(u))cos(u)cn(u,k)≈cos(u)+14k2(u−sin(u)cos(u))sin(u)dn(u,k)≈1−12k2sin2(u) \ No newline at end of file diff --git a/doc/sf_and_dist/error_handling.qbk b/doc/sf_and_dist/error_handling.qbk index 73f1a653a..b3001063e 100644 --- a/doc/sf_and_dist/error_handling.qbk +++ b/doc/sf_and_dist/error_handling.qbk @@ -9,6 +9,9 @@ Handling of errors by this library is split into two orthogonal parts: * What kind of error has been raised? * What should be done when the error is raised? +[warning The default error actions are to throw an exception with an informative error message. +If you do not try to catch the exception, you will not see the message!] + The kinds of errors that can be raised are: [variablelist @@ -153,6 +156,8 @@ this library. It was felt that: rather than following C-compatible behaviour and setting `::errno`. * Numeric underflow and denormalised results were not considered to be fatal errors in most cases, so it was felt that these should be ignored. +* If there is more than one error, +only the first detected will be reported in the throw message. [heading Finding More Information] @@ -390,7 +395,7 @@ listed above on [link overflow_error overflow], [endsect][/section:error_handling Error Handling] [/ - Copyright 2006 - 2010 John Maddock and Paul A. Bristow. + Copyright 2006 - 2012 John Maddock and Paul A. Bristow. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). diff --git a/doc/sf_and_dist/float_next.qbk b/doc/sf_and_dist/float_next.qbk index 5c3d16db0..4276d9ce3 100644 --- a/doc/sf_and_dist/float_next.qbk +++ b/doc/sf_and_dist/float_next.qbk @@ -49,6 +49,12 @@ Returns the next representable value after /x/ in the direction of /y/. If a __domain_error. If there is no such value in the direction of /y/ then returns an __overflow_error. +[warning The template parameter FTP must be a floating-point type. +An integer type, for example, will produce an unhelpful error message.] + +[tip Nearly always, you just want the next or prior representable value, +so instead use `float_next` or `float_prior` below.] + [h4 Examples - nextafter] The two representations using a 32-bit float either side of unity are: @@ -88,7 +94,7 @@ returns an __overflow_error. Has the same effect as - nextafter(val, std::numeric_limits::max()); + nextafter(val, (std::numeric_limits::max)()); [endsect] [/section:float_next Finding the Next Greater Representable Value (float_prior)] @@ -117,7 +123,7 @@ returns an __overflow_error. Has the same effect as - nextafter(val, -std::numeric_limits::max()); // Note most negative value -max. + nextafter(val, -(std::numeric_limits::max)()); // Note most negative value -max. [endsect] [/section:float_prior Finding the Next Smaller Representable Value (float_prior)] diff --git a/doc/sf_and_dist/graphs/airy_ai.png b/doc/sf_and_dist/graphs/airy_ai.png new file mode 100644 index 000000000..e7334d278 Binary files /dev/null and b/doc/sf_and_dist/graphs/airy_ai.png differ diff --git a/doc/sf_and_dist/graphs/airy_ai.svg b/doc/sf_and_dist/graphs/airy_ai.svg new file mode 100644 index 000000000..b8e8e2bf6 --- /dev/null +++ b/doc/sf_and_dist/graphs/airy_ai.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +10 +20 +0 +-10 +-20 + +0 +0.1 +0.2 +0.3 +0.4 +0.5 +0 +-0.1 +-0.2 +-0.3 +-0.4 + +airy_ai(z) + +z + + + + +Ai + + + diff --git a/doc/sf_and_dist/graphs/airy_aip.png b/doc/sf_and_dist/graphs/airy_aip.png new file mode 100644 index 000000000..a7e6eb3e8 Binary files /dev/null and b/doc/sf_and_dist/graphs/airy_aip.png differ diff --git a/doc/sf_and_dist/graphs/airy_aip.svg b/doc/sf_and_dist/graphs/airy_aip.svg new file mode 100644 index 000000000..cef75dc24 --- /dev/null +++ b/doc/sf_and_dist/graphs/airy_aip.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +10 +20 +0 +-10 +-20 + +0 +0.5 +1 +0 +-0.5 +-1 + +airy_ai_prime(z) + +z + + + + +Ai' + + + diff --git a/doc/sf_and_dist/graphs/airy_bi.png b/doc/sf_and_dist/graphs/airy_bi.png new file mode 100644 index 000000000..969774c15 Binary files /dev/null and b/doc/sf_and_dist/graphs/airy_bi.png differ diff --git a/doc/sf_and_dist/graphs/airy_bi.svg b/doc/sf_and_dist/graphs/airy_bi.svg new file mode 100644 index 000000000..079840f9c --- /dev/null +++ b/doc/sf_and_dist/graphs/airy_bi.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +0 +-5 +-10 +-15 +-20 + +0 +5 +10 +0 + +airy_bi(z) + +z + + + + +Bi + + + diff --git a/doc/sf_and_dist/graphs/airy_bip.png b/doc/sf_and_dist/graphs/airy_bip.png new file mode 100644 index 000000000..3c029e582 Binary files /dev/null and b/doc/sf_and_dist/graphs/airy_bip.png differ diff --git a/doc/sf_and_dist/graphs/airy_bip.svg b/doc/sf_and_dist/graphs/airy_bip.svg new file mode 100644 index 000000000..eca86ee13 --- /dev/null +++ b/doc/sf_and_dist/graphs/airy_bip.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +0 +-5 +-10 +-15 +-20 + +0 +5 +10 +15 +20 +0 + +airy_bi_prime(z) + +z + + + + +Bi' + + + diff --git a/doc/sf_and_dist/graphs/dist_graphs.cpp b/doc/sf_and_dist/graphs/dist_graphs.cpp index 535108d65..c5d960192 100644 --- a/doc/sf_and_dist/graphs/dist_graphs.cpp +++ b/doc/sf_and_dist/graphs/dist_graphs.cpp @@ -391,8 +391,19 @@ int main() nc_t_plotter.add(boost::math::non_central_t(10, 0), "v=10, δ=0"); nc_t_plotter.add(boost::math::non_central_t(10, 5), "v=10, δ=5"); nc_t_plotter.add(boost::math::non_central_t(10, 10), "v=10, δ=10"); + nc_t_plotter.add(boost::math::non_central_t(std::numeric_limits::infinity(), 15), "v=inf, δ=15"); nc_t_plotter.plot("Non Central T PDF", "nc_t_pdf.svg"); + distribution_plotter + nc_t_CDF_plotter(false); + nc_t_CDF_plotter.add(boost::math::non_central_t(10, -10), "v=10, δ=-10"); + nc_t_CDF_plotter.add(boost::math::non_central_t(10, -5), "v=10, δ=-5"); + nc_t_CDF_plotter.add(boost::math::non_central_t(10, 0), "v=10, δ=0"); + nc_t_CDF_plotter.add(boost::math::non_central_t(10, 5), "v=10, δ=5"); + nc_t_CDF_plotter.add(boost::math::non_central_t(10, 10), "v=10, δ=10"); + nc_t_CDF_plotter.add(boost::math::non_central_t(std::numeric_limits::infinity(), 15), "v=inf, δ=15"); + nc_t_CDF_plotter.plot("Non Central T CDF", "nc_t_cdf.svg"); + distribution_plotter > beta_plotter; beta_plotter.add(boost::math::beta_distribution<>(0.5, 0.5), "alpha=0.5, beta=0.5"); diff --git a/doc/sf_and_dist/graphs/jacobi_cd.png b/doc/sf_and_dist/graphs/jacobi_cd.png new file mode 100644 index 000000000..4d37b50a3 Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_cd.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_cd.svg b/doc/sf_and_dist/graphs/jacobi_cd.svg new file mode 100644 index 000000000..fb36f1075 --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_cd.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +5 +10 +0 +-5 +-10 + +0 +0.5 +1 +0 +-0.5 + +jacobi_cd(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic cd + + + diff --git a/doc/sf_and_dist/graphs/jacobi_cn.png b/doc/sf_and_dist/graphs/jacobi_cn.png new file mode 100644 index 000000000..a5ba5fa1d Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_cn.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_cn.svg b/doc/sf_and_dist/graphs/jacobi_cn.svg new file mode 100644 index 000000000..86d84d850 --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_cn.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +5 +10 +0 +-5 +-10 + +0 +0.5 +1 +0 +-0.5 + +jacobi_cn(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic cn + + + diff --git a/doc/sf_and_dist/graphs/jacobi_cs.png b/doc/sf_and_dist/graphs/jacobi_cs.png new file mode 100644 index 000000000..ac542bf04 Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_cs.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_cs.svg b/doc/sf_and_dist/graphs/jacobi_cs.svg new file mode 100644 index 000000000..e6ea01301 --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_cs.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0.5 +1 +1.5 +2 +2.5 +3 + +0 +5 +10 +0 +-5 + +jacobi_cs(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic cs + + + diff --git a/doc/sf_and_dist/graphs/jacobi_dc.png b/doc/sf_and_dist/graphs/jacobi_dc.png new file mode 100644 index 000000000..45f9e15cc Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_dc.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_dc.svg b/doc/sf_and_dist/graphs/jacobi_dc.svg new file mode 100644 index 000000000..0668ab03f --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_dc.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +5 +10 +0 +-5 +-10 + +0 +50 +0 +-50 +-100 + +jacobi_dc(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic dc + + + diff --git a/doc/sf_and_dist/graphs/jacobi_dn.png b/doc/sf_and_dist/graphs/jacobi_dn.png new file mode 100644 index 000000000..b3eb7bfcb Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_dn.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_dn.svg b/doc/sf_and_dist/graphs/jacobi_dn.svg new file mode 100644 index 000000000..2715c2de2 --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_dn.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +5 +10 +0 +-5 +-10 + +0.1 +0.2 +0.3 +0.4 +0.5 +0.6 +0.7 +0.8 +0.9 +1 + +jacobi_dn(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic dn + + + diff --git a/doc/sf_and_dist/graphs/jacobi_ds.png b/doc/sf_and_dist/graphs/jacobi_ds.png new file mode 100644 index 000000000..d0996cbd7 Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_ds.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_ds.svg b/doc/sf_and_dist/graphs/jacobi_ds.svg new file mode 100644 index 000000000..4db06920c --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_ds.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0.5 +1 +1.5 +2 +2.5 +3 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 + +jacobi_ds(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic ds + + + diff --git a/doc/sf_and_dist/graphs/jacobi_nc.png b/doc/sf_and_dist/graphs/jacobi_nc.png new file mode 100644 index 000000000..775184bfb Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_nc.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_nc.svg b/doc/sf_and_dist/graphs/jacobi_nc.svg new file mode 100644 index 000000000..1f850bf4c --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_nc.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +1 +2 +3 +4 +5 +0 +-1 +-2 +-3 +-4 +-5 + +0 +100 +0 +-100 +-200 +-300 + +jacobi_nc(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic nc + + + diff --git a/doc/sf_and_dist/graphs/jacobi_nd.png b/doc/sf_and_dist/graphs/jacobi_nd.png new file mode 100644 index 000000000..dd0712b9f Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_nd.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_nd.svg b/doc/sf_and_dist/graphs/jacobi_nd.svg new file mode 100644 index 000000000..64ea5ad16 --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_nd.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +1 +2 +0 +-1 +-2 + +1 +1.5 +2 +2.5 +3 +3.5 + +jacobi_nd(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic nd + + + diff --git a/doc/sf_and_dist/graphs/jacobi_ns.png b/doc/sf_and_dist/graphs/jacobi_ns.png new file mode 100644 index 000000000..9d2b99318 Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_ns.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_ns.svg b/doc/sf_and_dist/graphs/jacobi_ns.svg new file mode 100644 index 000000000..2c65a2e34 --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_ns.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +2 +3 +4 + +0 +0 +-500 +-1e3 +-1.5e3 +-2e3 + +jacobi_ns(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic ns + + + diff --git a/doc/sf_and_dist/graphs/jacobi_sc.png b/doc/sf_and_dist/graphs/jacobi_sc.png new file mode 100644 index 000000000..29c1a7f26 Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_sc.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_sc.svg b/doc/sf_and_dist/graphs/jacobi_sc.svg new file mode 100644 index 000000000..7f7ab88ae --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_sc.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +1 +2 +3 +4 +5 +0 +-1 +-2 +-3 +-4 +-5 + +0 +100 +200 +300 +0 +-100 +-200 +-300 + +jacobi_sc(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic sc + + + diff --git a/doc/sf_and_dist/graphs/jacobi_sd.png b/doc/sf_and_dist/graphs/jacobi_sd.png new file mode 100644 index 000000000..c3c794363 Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_sd.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_sd.svg b/doc/sf_and_dist/graphs/jacobi_sd.svg new file mode 100644 index 000000000..2a147cbb9 --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_sd.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +1 +2 +0 +-1 +-2 + +0 +5 +0 +-5 + +jacobi_sd(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic sd + + + diff --git a/doc/sf_and_dist/graphs/jacobi_sn.png b/doc/sf_and_dist/graphs/jacobi_sn.png new file mode 100644 index 000000000..297f85846 Binary files /dev/null and b/doc/sf_and_dist/graphs/jacobi_sn.png differ diff --git a/doc/sf_and_dist/graphs/jacobi_sn.svg b/doc/sf_and_dist/graphs/jacobi_sn.svg new file mode 100644 index 000000000..383f5c285 --- /dev/null +++ b/doc/sf_and_dist/graphs/jacobi_sn.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +5 +10 +0 +-5 +-10 + +0 +0.5 +1 +0 +-0.5 + +jacobi_sn(k, u) + +k + + + + + + + + + + + + + + + +k=0 +k=0.5 +k=0.75 +k=0.95 +k=1 + +Jacobi Elliptic sn + + + diff --git a/doc/sf_and_dist/graphs/nc_t_cdf.png b/doc/sf_and_dist/graphs/nc_t_cdf.png new file mode 100644 index 000000000..689165e08 Binary files /dev/null and b/doc/sf_and_dist/graphs/nc_t_cdf.png differ diff --git a/doc/sf_and_dist/graphs/nc_t_cdf.svg b/doc/sf_and_dist/graphs/nc_t_cdf.svg new file mode 100644 index 000000000..e6f47a65b --- /dev/null +++ b/doc/sf_and_dist/graphs/nc_t_cdf.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + +0 +10 +0 +-10 + +0 +0.1 +0.2 +0.3 +0.4 +0.5 +0.6 +0.7 +0.8 +0.9 +1 +1.1 +0 + +Probability + +Random Variable + + + + + + + + + + + + + + + + + +v=10, δ=-10 +v=10, δ=-5 +v=10, δ=0 +v=10, δ=5 +v=10, δ=10 +v=inf, δ=15 + +Non Central T CDF + + + diff --git a/doc/sf_and_dist/graphs/nc_t_pdf.svg b/doc/sf_and_dist/graphs/nc_t_pdf.svg index f209e2372..8b30c39bc 100644 --- a/doc/sf_and_dist/graphs/nc_t_pdf.svg +++ b/doc/sf_and_dist/graphs/nc_t_pdf.svg @@ -21,9 +21,9 @@ xmlns ="http://www.w3.org/2000/svg" - + - + 0 @@ -32,35 +32,38 @@ xmlns ="http://www.w3.org/2000/svg" -10 0 -0.1 -0.2 -0.3 -0.4 +0.1 +0.2 +0.3 +0.4 0 Probability Random Variable - - - - - + + + + + + - + + v=10, δ=-10 v=10, δ=-5 v=10, δ=0 v=10, δ=5 -v=10, δ=10 +v=10, δ=10 +v=inf, δ=15 Non Central T PDF diff --git a/doc/sf_and_dist/graphs/sf_graphs.cpp b/doc/sf_and_dist/graphs/sf_graphs.cpp index d672149be..9bae8db8e 100644 --- a/doc/sf_and_dist/graphs/sf_graphs.cpp +++ b/doc/sf_and_dist/graphs/sf_graphs.cpp @@ -248,7 +248,7 @@ int main() double (*f2i)(int, double); double (*f3)(double, double, double); double (*f4)(double, double, double, double); - + f = boost::math::zeta; plot.add(f, 1 + find_end_point(f, 0.1, 40.0, false, 1.0), 10, ""); plot.add(f, -20, 1 + find_end_point(f, -0.1, -40.0, false, 1.0), ""); @@ -568,6 +568,134 @@ int main() -0.5, 4, true, 1) + 1, "n=0.75 φ=π/2"); plot.plot("Elliptic Of the Third Kind", "ellint_3.svg", "k", "ellint_3(k, n, phi)"); + f2 = boost::math::jacobi_sn; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -10, 10, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -10, 10, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -10, 10, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -10, 10, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -10, 10, "k=1"); + plot.plot("Jacobi Elliptic sn", "jacobi_sn.svg", "k", "jacobi_sn(k, u)"); + + f2 = boost::math::jacobi_cn; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -10, 10, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -10, 10, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -10, 10, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -10, 10, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -10, 10, "k=1"); + plot.plot("Jacobi Elliptic cn", "jacobi_cn.svg", "k", "jacobi_cn(k, u)"); + + f2 = boost::math::jacobi_dn; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -10, 10, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -10, 10, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -10, 10, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -10, 10, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -10, 10, "k=1"); + plot.plot("Jacobi Elliptic dn", "jacobi_dn.svg", "k", "jacobi_dn(k, u)"); + + f2 = boost::math::jacobi_cd; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -10, 10, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -10, 10, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -10, 10, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -10, 10, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -10, 10, "k=1"); + plot.plot("Jacobi Elliptic cd", "jacobi_cd.svg", "k", "jacobi_cd(k, u)"); + + f2 = boost::math::jacobi_cs; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), 0.1, 3, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), 0.1, 3, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), 0.1, 3, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), 0.1, 3, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), 0.1, 3, "k=1"); + plot.plot("Jacobi Elliptic cs", "jacobi_cs.svg", "k", "jacobi_cs(k, u)"); + + f2 = boost::math::jacobi_dc; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -10, 10, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -10, 10, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -10, 10, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -10, 10, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -10, 10, "k=1"); + plot.plot("Jacobi Elliptic dc", "jacobi_dc.svg", "k", "jacobi_dc(k, u)"); + + f2 = boost::math::jacobi_ds; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), 0.1, 3, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), 0.1, 3, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), 0.1, 3, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), 0.1, 3, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), 0.1, 3, "k=1"); + plot.plot("Jacobi Elliptic ds", "jacobi_ds.svg", "k", "jacobi_ds(k, u)"); + + f2 = boost::math::jacobi_nc; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -5, 5, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -5, 5, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -5, 5, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -5, 5, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -5, 5, "k=1"); + plot.plot("Jacobi Elliptic nc", "jacobi_nc.svg", "k", "jacobi_nc(k, u)"); + + f2 = boost::math::jacobi_ns; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), 0.1, 4, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), 0.1, 4, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), 0.1, 4, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), 0.1, 4, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), 0.1, 4, "k=1"); + plot.plot("Jacobi Elliptic ns", "jacobi_ns.svg", "k", "jacobi_ns(k, u)"); + + f2 = boost::math::jacobi_nd; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -2, 2, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -2, 2, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -2, 2, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -2, 2, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -2, 2, "k=1"); + plot.plot("Jacobi Elliptic nd", "jacobi_nd.svg", "k", "jacobi_nd(k, u)"); + + f2 = boost::math::jacobi_sc; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -5, 5, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -5, 5, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -5, 5, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -5, 5, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -5, 5, "k=1"); + plot.plot("Jacobi Elliptic sc", "jacobi_sc.svg", "k", "jacobi_sc(k, u)"); + + f2 = boost::math::jacobi_sd; + plot.clear(); + plot.add(boost::bind(f2, 0, _1), -2.5, 2.5, "k=0"); + plot.add(boost::bind(f2, 0.5, _1), -2.5, 2.5, "k=0.5"); + plot.add(boost::bind(f2, 0.75, _1), -2.5, 2.5, "k=0.75"); + plot.add(boost::bind(f2, 0.95, _1), -2.5, 2.5, "k=0.95"); + plot.add(boost::bind(f2, 1, _1), -2.5, 2.5, "k=1"); + plot.plot("Jacobi Elliptic sd", "jacobi_sd.svg", "k", "jacobi_sd(k, u)"); + + f = boost::math::airy_ai; + plot.clear(); + plot.add(f, -20, 20, ""); + plot.plot("Ai", "airy_ai.svg", "z", "airy_ai(z)"); + + f = boost::math::airy_bi; + plot.clear(); + plot.add(f, -20, 3, ""); + plot.plot("Bi", "airy_bi.svg", "z", "airy_bi(z)"); + + f = boost::math::airy_ai_prime; + plot.clear(); + plot.add(f, -20, 20, ""); + plot.plot("Ai'", "airy_aip.svg", "z", "airy_ai_prime(z)"); + + f = boost::math::airy_bi_prime; + plot.clear(); + plot.add(f, -20, 3, ""); + plot.plot("Bi'", "airy_bip.svg", "z", "airy_bi_prime(z)"); + return 0; } diff --git a/doc/sf_and_dist/html/index.html b/doc/sf_and_dist/html/index.html index f0094e8cc..c72d38638 100644 --- a/doc/sf_and_dist/html/index.html +++ b/doc/sf_and_dist/html/index.html @@ -3,7 +3,7 @@ Math Toolkit - + @@ -52,8 +52,9 @@ Benjamin Sobotta -
+
- +

Last revised: May 14, 2012 at 18:06:46 GMT

Last revised: August 23, 2012 at 13:30:39 GMT


diff --git a/doc/sf_and_dist/html/index/s13.html b/doc/sf_and_dist/html/index/s13.html index b73f963b6..331fdd014 100644 --- a/doc/sf_and_dist/html/index/s13.html +++ b/doc/sf_and_dist/html/index/s13.html @@ -3,7 +3,7 @@ Function Index - + @@ -22,19 +22,19 @@
PrevUpHomeNext
-
+

-Function Index

-

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

-
+Function Index
+

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

+
A
-