2
0
mirror of https://github.com/boostorg/math.git synced 2026-01-24 18:12:09 +00:00

220 Commits

Author SHA1 Message Date
Matt Borland
e1601f129a Complete CI test with standalone mode (#680) 2022-01-14 08:12:22 -08:00
jzmaddock
32a4b92b43 Update history and regenerate docs (part 2). 2021-11-05 19:21:25 +00:00
jzmaddock
e000cf5dd1 Update history and regenerate docs. 2021-11-05 17:53:09 +00:00
jzmaddock
4cfcee9717 Doc update:
correct hypergeometric equation (again).
Add section on standalone usage.
2021-06-28 19:51:30 +01:00
jzmaddock
d4de174bbb Prep for 1.77:
Rework hypergeometric distro equations.
Fix up Fibonacci docs.
Fix Fibonacci constexpr and noexcept usage and add to testing.
Regenerate docs.
2021-06-27 19:38:05 +01:00
pabristow
4382d2a7c6 More changes to hypergeometric distribution documentation. 2021-06-16 11:42:37 +01:00
jzmaddock
f69c712d79 Fix broken link to lambert_w graph.
Remove CircleCI asan tests.
2021-03-30 18:50:40 +01:00
Matt Borland
c2a1916716 Minor fixes from review [ci skip] 2021-03-27 10:01:57 +03:00
Matt Borland
9c243dbb49 Replace <boost/config> w <boost/math/tools/config> 2021-03-23 21:38:13 +03:00
Matt Borland
d6a04ab194 Remove all BOOST_MATH_STATIC_ASSERT_MSG 2021-03-16 22:42:09 +03:00
Matt Borland
fbadd8d653 remove boost.static_assert 2021-03-14 12:49:38 +03:00
Matt Borland
d59c734c5e Remove boost.assert 2021-03-14 12:22:26 +03:00
jzmaddock
96b48d30a4 Clean doc rebuild. 2021-02-28 11:43:37 +00:00
jzmaddock
0edc9ab19b Add release notes, regenerate docs. 2021-02-26 18:38:42 +00:00
jzmaddock
64154c2d4b Update history, regenerate docs.
Add some missing files.
[CI SKIP]
2020-10-19 18:19:34 +01:00
Evan Miller
18ed616376 Kolmogorov-Smirnov distribution (#422)
* Kolmogorov-Smirnov distribution #421

Add a new distribution, kolmogorov_smirnov_distribution, which takes a
parameter that represents the number of observations used in a
Kolmogorov-Smirnov test. (The K-S test is a popular test for comparing
two CDFs, but the test statistic is not implemented here.)

This implementation includes Kolmogorov's original 1st order Taylor
expansion. There is a literature on the distribution's other
mathematical properties (higher order terms and exact version); this
literature is summarized in the main header file for anyone who may
want to expand the implementation later.

The CDF is implemented using a Jacobi theta function, and the PDF is a
hand-rolled derivative of that function. Quantiles plug the CDF and PDF
into a Newton-Raphson iteration. The mean and variance have nice
closed-form expressions, and the mode uses a dumb run-time maximizer.

This commit includes graphs, a ULP plotter for the PDF, and the usual
compilation and numerical tests. The test file is on the small side, but
it integrates the distribution from zero to infinity, and covers the
quantiles pretty well. As of now the numerical tests only verify
self-consistency (e.g. distribution moments and CDF-quantile relations),
so there's room to add some external checks.

* Implement skewness for K-S distribution [CI SKIP]

The third moment integrates nicely with the help of Apery's constant
(zeta_three). Verify the result via quadrature.

* Implement kurtosis for the K-S distribution

Verify the result via quadrature.
2020-09-04 08:48:51 -04:00
Evan Miller
d7141cd353 Jacobi Theta functions (#394)
* Jacobi Theta functions

Implementations, tests, and ULP plotting programs are provided for the
four Jacobi Theta functions per #373. Twenty-four public C++ functions
are provided in all, covering various precision-preserving scenarios.

Documentation for collaborators is provided in the code comments. Proper
documentation for end users will be provided when the implementation and
APIs are finalized.

Some tests are failing; this implementation is meant to start a
conversation. The core dilemma faced by the author was that large values
of |q| resulted in slow convergence, and sometimes wildly inaccurate
results. Following the implementation note in DLMF 20.14, I added code
to switch over to the imaginary versions of the theta functions when |q|
> 0.85.  This restored accuracy such that all of the identity tests
passed for a loose-enough epsilon, but then lost precision to the point
that the Wolfram Alpha spot checks failed. It is the author's hope that
someone with floating-point experience can tame the exponential dragons
and squeeze the ULPs back down to a reasonable range when |q| is large.

When #392 is merged I will add more thorough value tests, although I
fully expect them to fail until the underlying precision issues are
resolved.

As a final note, the precision issues do not affect the z=0 case - the
ULP plots indicate these return values within 2 ULP across all valid
|q|. So that's a start.

* [CI SKIP] Jacobi theta: Add special-value tests and more

* Add tests covering z=0 special values from MathWorld

* Add missing real_concept header

* Replace M_PI and friends with constants::pi etc

* Use BOOST_MATH_STD_USING in more places

* Jacobi theta: Test two more of Watson's identities [CI SKIP]

See https://mathworld.wolfram.com/JacobiThetaFunctions.html

(Equations 48 and 49)

* Improve precision of Jacobi theta functions [CI SKIP]

Rewrite the private imaginary versions to use double-sided summations
following DLMF 20.13.4 and 20.13.5. This cuts down the worst of the
precision issues by a factor of 10, and gets more of the tests to pass.

I am confident enough in the code path to eliminate the compile-time
__JACOBI_THETA_USE_IMAGINARY flag. In fact the imaginary-z code paths
are now enabled for all |q| > 0.04, i.e. most legal values of q.

More extensive tests will be needed to illuminate any remaining
precision issues.

* Jacobi theta: Make changes suggested in #394 [CI SKIP]

* Add LICENSE notice to main file

* Document convergence criteria

* Eliminate eps*eps = 0 logic. This causes some disagreement with the
zero returned by Wolfram Alpha for z=0, q > 0.99 in the fourth function.
Mathematically, the fourth function is never exactly zero, so I don't
trust Wolfram here.

* Per code-review comments, remove multiplications by floating-point 2.

* Tweak the plotting programs to display their titles, and to uniformly
use `float` as their CoarseType and `long double` as their
`PreciseType`.

* Add quadrature tests to Jacobi theta functions [CI SKIP]

The quadrature tests revealed a problem in the m1 functions: they too
should switch to the _IMAGINARY logic for q > exp(-pi), or will suffer
from slow convergence. Fix them.

Also tighten tolerances for many tests from sqrt(eps) to 100 * eps.

* Test Jacobi thetas against elliptic functions and elliptic integrals [CI SKIP]

See:

* https://dlmf.nist.gov/22.2
* https://dlmf.nist.gov/20.9#i

* Test Jacobi Thetas against their Laplace transforms [CI SKIP]

See:

* https://dlmf.nist.gov/20.10#ii

I did find some disagreement, and dropped the negative sign from the
theta1 equation. DLMF's theta2 and theta3 Laplace transform equations do
not agree at all with the computed values - will need to investigate.

In the meantime, the two implemented equations agree to 4 EPS so I am
keeping them.

* Add a note on using log1p with Jacobi theta functions [CI SKIP]

See discussion:

* https://github.com/boostorg/math/pull/394#issuecomment-655871762

* Add random data tests to Jacobi Theta functions [CI SKIP]

Add a test data generator program for the Jacobi theta functions.
This program will produce data for the tau parameterization, so that
precision isn't lost during the log-transformation. This distinguishes
it from the Wolfram Alpha data, which is parameterized by q.

A few of these new random-data tests are failing, but not by obscene
margins (< 100 EPS). These failures will be addressed when the test
tolerances are finalized.

* Add small-tau tests and simplify Jacobi Theta code [CI SKIP]

Add tests for small tau (i.e. large q). The tests are failing with mean
~ 200 EPS and max ~ 800 EPS. These look like worst-case input, and
should be the focus of future accuracy improvements.

This commit also simplifies the _IMAGINARY code by abstracting all of
the loops into a single svelte function.

* Add user documentation for Jacobi Theta functions [CI SKIP]

* Add function graphs to Jacobi Theta docs [CI SKIP]

* Define Jacobi Theta test tolerances [CI SKIP]

* Add implementation note on Jacobi theta functions [CI SKIP]

* Consolidate Jacobi Theta ULPs plotting programs [CI SKIP]

* Fix q domain checking of jacobi_theta4 [CI SKIP]

* Add ULPs plots to Jacobi Theta docs [CI SKIP]

Also add the built HTML files for easy evaluation. A full rebuild is
needed for the new docs to appear in the indexes.

* Add missing Jacobi Theta ULPs plots [CI SKIP]

* Add LaTeX source for Jacobi Theta equations [CI SKIP]

* Remove unused Jacobi Theta PNG equations [CI SKIP]

* Add Jacobi Theta performance script [CI SKIP]

Provided by @NAThompson.

* Remove vestigial eps*eps check from jacobi_theta3 [CI SKIP]

* Update Jacobi Theta docs per code review comments [CI SKIP]

* Enable arg promotion for Jacobi Theta functions [CI SKIP]

Add Jacobi theta functions to the instantiation tests and fix up
everything needed to make them pass. This changes the function
signatures to use promote_args.

* Fix Jacobi Theta plotting script [CI SKIP]

This script broke when the promote_args API was added.

* Change Jacobi Theta convergence criterion [CI SKIP]

Compare the non-oscillating part of the delta to the previous one.
This avoids some headaches comparing the delta to the partial sum,
because the partial sum can be a small number due to the oscillating
component alternating signs.

Because successive terms involve either q^n^2 or exp(-(pi*n)^2),
convergence should still happen pretty quickly. Graphs have been updated
and tests still passs with no noticeable difference.
2020-08-15 18:51:47 -04:00
jzmaddock
cb98c2959d Integrate linux performance results,
Regenerate docs.
2020-04-04 09:27:17 +01:00
jzmaddock
9af885b5fb Update history, regenerate docs.
[CI SKIP]
2020-03-24 13:06:05 +00:00
Brian Wignall
56740d2257 Fix more typos, after another typochecker bug fix 2019-12-26 09:33:10 -05:00
Brian Wignall
8b277e3ff3 Fix more typos 2019-12-26 09:18:02 -05:00
Brian Wignall
e3a45bd10b Fix typos, after fixing bug in typochecker 2019-12-25 22:42:26 -05:00
Brian Wignall
3c976e5e09 Fix typos 2019-12-24 21:42:09 -05:00
Brian Wignall
df17d11299 Fix more typos, via latest version of typochecker tool 2019-12-20 10:41:42 -05:00
pabristow
e504da1b44 [CI SKIP]Docs rebuilt with Brian Wignall's typos corrected. 2019-12-18 13:00:23 +00:00
Brian Wignall
54770599d5 Fix more typos 2019-12-16 13:35:48 -05:00
Brian Wignall
ccff3fd1b3 Fix typos 2019-12-01 08:06:17 -05:00
pabristow
5aacc3e167 Add missing file big_seventh.cpp 2019-11-12 09:34:48 +00:00
jzmaddock
d87a27ae66 Update version number in docs.
[CI SKIP]
2019-10-26 11:03:35 +01:00
jzmaddock
a716b525ef Add some comments to math.css with regard to editing.
[CI SKIP]
2019-10-20 20:18:29 +01:00
jzmaddock
3934e61d7c Update history and regenerate docs.
Tweak some hypergeometric html file names for consistency.
[CI SKIP]
2019-10-20 20:08:19 +01:00
pabristow
e94d23b1f6 [CI SKIP]Some missing files that should be in the git index? 2019-08-30 12:46:58 +01:00
pabristow
c20af16366 [CI SKIP] Two Links changed from @boost: to boost.org for clean inspect.exe run. 2019-08-13 10:48:49 +01:00
pabristow
327c825dfa [CI SKIP] More cosmetic and link edits to get Inspect.exe passes except for links to [@boost: which shoudl work OK when built for the documentation. Ready to merge with develop, touch wood. 2019-08-12 17:53:50 +01:00
pabristow
d922852f3b [CI SKIP] Editorial/cosmetic changes complete, apart from getting up to date with develop and a last re-re-re-through! 2019-08-12 15:52:06 +01:00
pabristow
765b4e7148 [CI SKIP] Expressions and removal of many [space] after [greek] now wrong since Quickbook error has been fixed, but more remain and also emquad match instead of [: or [expression . Special functions done but distirbutions still to redo. 2019-08-12 14:06:25 +01:00
pabristow
43d00e16b7 [CI SKIP]Edotiral work part 2, up to sf/ellint_intro 2019-08-09 17:57:20 +01:00
pabristow
2bda67e466 [CI SKIP] corrected accent etc in refs hypergeometric.gbk 2019-08-09 16:35:25 +01:00
pabristow
6981dc12f9 [CI SKIP]Editorial work using changes in math.css, part one. 2019-08-09 13:22:33 +01:00
pabristow
44e3ed82fa [CI SKIP] typos in hypergeometrics and added a FAQ 2019-08-07 15:14:50 +01:00
pabristow
df5a6f5ac6 Many edits to provide equation indents, dozens of typos, and misc amendments, mainly cosmetic, and new index entries for better indexes 2019-08-06 15:33:22 +01:00
Nick
a7f4e62d1f Rebuild docs [CI SKIP] 2019-07-08 07:04:36 -04:00
pabristow
8585a32b36 [CI SKIP] fixed unexpected char 2 in output examples (was interpreteting slash in pi/(2e) as a Quickbook control char) by making it a verbatim block with ``s 2019-07-05 10:01:39 +01:00
Nick Thompson
5650fef94e Rebuild docs. [CI SKIP] 2019-06-30 10:11:22 -04:00
pabristow
02ff33c49a Several broken/missing links corrected, and lambert_w_errors_graph.cpp added. Passes local inspect.exe except on link to Boost.Test floating point that may work when built in situ. [CI SKIP] for now. 2019-05-30 16:55:15 +01:00
jzmaddock
004c0b0595 Docs: Update history and version number, regen docs.
[CI SKIP]
2019-03-04 19:17:21 +00:00
jzmaddock
3fcc5fa245 Regenerate docs.
[CI SKIP]
2019-02-27 18:36:34 +00:00
Katrin Leinweber
f3b9028d26 Hyperlink DOIs to preferred resolver 2019-02-06 19:10:00 +01:00
jzmaddock
c0f236e251 Merge branch 'develop' into catmull_rom
Fixed Conflicts:
	doc/Jamfile.v2

Corrected some doc formatting, and regenerated the docs.
2018-12-01 19:38:16 +00:00
jzmaddock
3d5c252c89 Documentation update
[CI SKIP]
2018-11-22 18:15:44 +00:00