diff --git a/doc/test/HTML4_symbols.qbk b/doc/test/HTML4_symbols.qbk new file mode 100644 index 0000000000..2af7241ff2 --- /dev/null +++ b/doc/test/HTML4_symbols.qbk @@ -0,0 +1,253 @@ +[/ File Latin1_symbols.qbk +Copyright 2006-2007 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). +] + + +[/ Symbols and Greek letters (about 120) from HTML4 ] +[/ File HTML4_symbols.qbk] +[/ See http://www.htmlhelp.com/reference/html40/entities/symbols.html] +[/ All (except 2 angle brackets) show OK on Firefox 2.0] + +[/ Also some miscellaneous math charaters added to this list - see the end.] + +[/ To use, enclose the template name in square brackets.] + +[template fnof[]'''ƒ'''] [/ � Latin small f with hook = function = florin] +[template Alpha[]'''Α'''] [/ ? Greek capital letter alpha] +[template Beta[]'''Β'''] [/ ? Greek capital letter beta] +[template Gamma[]'''Γ'''] [/ G Greek capital letter gamma] +[template Delta[]'''Δ'''] [/ ? Greek capital letter delta] +[template Epsilon[]'''Ε'''] [/ ? Greek capital letter epsilon] +[template Zeta[]'''Ζ'''] [/ ? Greek capital letter zeta] +[template Eta[]'''Η'''] [/ ? Greek capital letter eta] +[template Theta[]'''Θ'''] [/ T Greek capital letter theta] +[template Iota[]'''Ι'''] [/ ? Greek capital letter iota] +[template Kappa[]'''Κ'''] [/ ? Greek capital letter kappa] +[template Lambda[]'''Λ'''] [/ ? Greek capital letter lambda] +[template Mu[]'''Μ'''] [/ ? Greek capital letter mu] +[template Nu[]'''Ν'''] [/ ? Greek capital letter nu] +[template Xi[]'''Ξ'''] [/ ? Greek capital letter xi] +[template Omicron[]'''Ο'''] [/ ? Greek capital letter omicron] +[template Pi[]'''Π'''] [/ ? Greek capital letter pi] +[template Rho[]'''Ρ'''] [/ ? Greek capital letter rho] +[template Sigma[]'''Σ'''] [/ S Greek capital letter sigma] +[template Tau[]'''Τ'''] [/ ? Greek capital letter tau] +[template Upsilon[]'''Υ'''] [/ ? Greek capital letter upsilon] +[template Phi[]'''Φ'''] [/ F Greek capital letter phi] +[template Chi[]'''Χ'''] [/ ? Greek capital letter chi] +[template Psi[]'''Ψ'''] [/ ? Greek capital letter psi] +[template Omega[]'''Ω'''] [/ O Greek capital letter omega] +[template alpha[]'''α'''] [/ a Greek small letter alpha] +[template beta[]'''β'''] [/ � Greek small letter beta] +[template gamma[]'''γ'''] [/ ? Greek small letter gamma] +[template delta[]'''δ'''] [/ d Greek small letter delta] +[template epsilon[]'''ε'''] [/ e Greek small letter epsilon] +[template zeta[]'''ζ'''] [/ ? Greek small letter zeta] +[template eta[]'''η'''] [/ ? Greek small letter eta] +[template theta[]'''θ'''] [/ ? Greek small letter theta] +[template iota[]'''ι'''] [/ ? Greek small letter iota] +[template kappa[]'''κ'''] [/ ? Greek small letter kappa] +[template lambda[]'''λ'''] [/ ? Greek small letter lambda] +[template mu[]'''μ'''] [/ � Greek small letter mu] +[template nu[]'''ν'''] [/ ? Greek small letter nu] +[template xi[]'''ξ'''] [/ ? Greek small letter xi] +[template omicron[]'''ο'''] [/ ? Greek small letter omicron] +[template pi[]'''π'''] [/ p Greek small letter pi] +[template rho[]'''ρ'''] [/ ? Greek small letter rho] +[template sigmaf[]'''ς'''] [/ ? Greek small letter final sigma] +[template sigma[]'''σ'''] [/ s Greek small letter sigma] +[template tau[]'''τ'''] [/ t Greek small letter tau] +[template upsilon[]'''υ'''] [/ ? Greek small letter upsilon] +[template phi[]'''φ'''] [/ f Greek small letter phi] +[template chi[]'''χ'''] [/ ? Greek small letter chi] +[template psi[]'''ψ'''] [/ ? Greek small letter psi] +[template omega[]'''ω'''] [/ ? Greek small letter omega] +[template thetasym[]'''ϑ'''] [/ ? Greek small letter theta symbol] +[template upsih[]'''ϒ'''] [/ ? Greek upsilon with hook symbol] +[template piv[]'''ϖ'''] [/ ? Greek pi symbol] +[template bull[]'''•'''] [/ � bullet = black small circle] +[template hellip[]'''…'''] [/ � horizontal ellipsis = three dot leader] +[template prime[]'''′'''] [/ ' prime = minutes = feet] +[template Prime[]'''″'''] [/ ? double prime = seconds = inches] +[template oline[]'''‾'''] [/ ? overline = spacing overscore] +[template frasl[]'''⁄'''] [/ / fraction slash] +[template weierp[]'''℘'''] [/ P script capital P = power set = Weierstrass p] +[template image[]'''ℑ'''] [/ I blackletter capital I = imaginary part] +[template real[]'''ℜ'''] [/ R blackletter capital R = real part symbol] +[template trade[]'''™'''] [/ � trade mark sign] +[template alefsym[]'''ℵ'''] [/ ? alef symbol = first transfinite cardinal] +[template larr[]'''←'''] [/ ? leftwards arrow] +[template uarr[]'''↑'''] [/ ? upwards arrow] +[template rarr[]'''→'''] [/ ? rightwards arrow] +[template darr[]'''↓'''] [/ ? downwards arrow] +[template harr[]'''↔'''] [/ ? left right arrow] +[template crarr[]'''↵'''] [/ ? downwards arrow with corner leftwards = CR] +[template lArr[]'''⇐'''] [/ ? leftwards double arrow] +[template uArr[]'''⇑'''] [/ ? upwards double arrow] +[template rArr[]'''⇒'''] [/ ? rightwards double arrow] +[template dArr[]'''⇓'''] [/ ? downwards double arrow] +[template hArr[]'''⇔'''] [/ ? left right double arrow] +[template forall[]'''∀'''] [/ ? for all] +[template part[]'''∂'''] [/ ? partial differential] +[template exist[]'''∃'''] [/ ? there exists] +[template empty[]'''∅'''] [/ � empty set = null set = diameter] +[template nabla[]'''∇'''] [/ ? nabla = backward difference] +[template isin[]'''∈'''] [/ ? element of] +[template notin[]'''∉'''] [/ ? not an element of] +[template ni[]'''∋'''] [/ ? contains as member] +[template prod[]'''∏'''] [/ ? n-ary product = product sign] +[template sum[]'''∑'''] [/ ? n-ary sumation] +[template minus[]'''−'''] [/ - minus sign] +[template lowast[]'''∗'''] [/ * asterisk operator] +[template radic[]'''√'''] [/ v square root = radical sign] +[template prop[]'''∝'''] [/ ? proportional to] +[template infin[]'''∞'''] [/ 8 infinity] +[template ang[]'''∠'''] [/ ? angle] +[template and[]'''∧'''] [/ ? logical and = wedge] +[template or[]'''∨'''] [/ ? logical or = vee] +[template cap[]'''∩'''] [/ n intersection = cap] +[template cup[]'''∪'''] [/ ? union = cup] +[template int[]'''∫'''] [/ ? integral] +[template there4[]'''∴'''] [/ ? therefore] +[template sim[]'''∼'''] [/ ~ tilde operator = varies with = similar to] +[template cong[]'''≅'''] [/ ? approximately equal to] +[template asymp[]'''≈'''] [/ � almost equal to = asymptotic to] +[template ne[]'''≠'''] [/ ? not equal to] +[template equiv[]'''≡'''] [/ = identical to] +[template le[]'''≤'''] [/ = less-than or equal to] +[template ge[]'''≥'''] [/ = greater-than or equal to] +[template subset[]'''⊂'''] [/ ? subset of] +[template superset[]'''⊃'''] [/ ? superset of] +[template nsubset[]'''⊄'''] [/ ? not a subset of] +[template sube[]'''⊆'''] [/ ? subset of or equal to] +[template supe[]'''⊇'''] [/ ? superset of or equal to] +[template oplus[]'''⊕'''] [/ ? circled plus = direct sum] +[template otimes[]'''⊗'''] [/ ? circled times = vector product] +[template perp[]'''⊥'''] [/ ? up tack = orthogonal to = perpendicular] +[template sdot[]'''⋅'''] [/ � dot operator] +[template lceil[]'''⌈'''] [/ ? left ceiling = APL upstile] +[template rceil[]'''⌉'''] [/ ? right ceiling] +[template lfloor[]'''⌊'''] [/ ? left floor = APL downstile] +[template rfloor[]'''⌋'''] [/ ? right floor] +[template lang[]'''〈'''] [/ < left-pointing angle bracket = bra (Firefox shows ?)] +[template rang[]'''〉'''] [/ > right-pointing angle bracket = ket (Firefox shows ?)] +[template loz[]'''◊'''] [/ ? lozenge] +[template spades[]'''♠'''] [/ ? black spade suit] +[template clubs[]'''♣'''] [/ ? black club suit = shamrock] +[template hearts[]'''♥'''] [/ ? black heart suit = valentine] +[template diams[]'''♦'''] [/ ? black diamond suit] + +[/ Other symbols, not in the HTML4 list:] +[template space[]''' '''] +[template plusminus[]'''±'''] [/ ? plus or minus sign] + + +[/ Symbols and accented letters from Latin-1] +[/ File Latin1_symbols.qbk] +[/ http://www.htmlhelp.com/reference/html40/entities/latin1.html ] +[/ based on table Copyright 1998-2006 Liam Quinn.] +[/ Glyphs of the characters ] +[/ are available at the Unicode Consortium . ] + +[template nbsp[]''' '''] [/ no-break space = non-breaking space] +[template iexcl[]'''¡'''] [/ inverted exclamation mark ] +[template cent[]'''¢'''] [/ cent sign ] +[template pound[]'''£'''] [/ pound sign ] +[template curren[]'''¤'''] [/ currency sign ] +[template yen[]'''¥'''] [/ yen sign = yuan sign ] +[template brvbar[]'''¦'''] [/ broken vertical bar ] +[template sectsign[]'''§'''] [/ section sign ] +[template uml[]'''¨'''] [/ diaeresis ] +[template copy[]'''©'''] [/ copyright ] +[template ordf[]'''ª'''] [/ feminine ordinal indicator ] +[template laquo[]'''«'''] [/ left-pointing double angle quotation mark = left pointing guillemet ] +[template not[]'''¬'''] [/ not sign ] +[template shy[]'''­'''] [/ soft hyphen = discretionary hyphen ] +[template reg[]'''®'''] [/ registered sign = registered trade mark sign ] +[template macron[]'''¯'''] [/ macron = spacing macron = overline = APL overbar ] +[template deg[]'''°'''] [/ degree sign ] +[template plusmn[]'''±'''] [/ plus-minus sign = plus-or-minus sign ] +[template sup2[]'''²'''] [/ superscript two = superscript digit two = squared ] +[template cubed[]'''³'''] [/ superscript three = superscript digit three = cubed ] +[template acute[]'''´'''] [/ acute accent = spacing acute ] +[template micro[]'''µ'''] [/ micro sign ] +[template para[]'''¶'''] [/ pilcrow sign = paragraph sign ] +[template middot[]'''·'''] [/ middle dot = Georgian comma = Greek middle dot ] +[template cedil[]'''¸'''] [/ cedilla = spacing cedilla ] +[template sup1[]'''¹'''] [/ superscript one = superscript digit one ] +[template ordm[]'''º'''] [/ masculine ordinal indicator ] +[template raquo[]'''»'''] [/ right-pointing double angle quotation mark = right pointing guillemet ] +[template frac14[]'''¼'''] [/ vulgar fraction one quarter = fraction one quarter ] +[template frac12[]'''½'''] [/ vulgar fraction one half = fraction one half ] +[template frac34[]'''¾'''] [/vulgar fraction three quarters = fraction three quarters ] +[template iquest[]'''¿'''] [/ inverted question mark = turned question mark ] +[template Agrave[]'''À'''] [/ Latin capital letter A with grave = Latin capital letter A grave ] +[template Aacute[]'''Á'''] [/ Latin capital letter A with acute = Latin capital letter A acute ] +[template Acirc[]'''Â'''] [/ Latin capital letter A with circumflex ] +[template Atilde[]'''Ã'''] [/Latin capital letter A with tilde ] +[template Auml[]'''Ä'''] [/ Latin capital letter A with diaeresis ] +[template Aring[]'''Å'''] [/ Latin capital letter A with ring above = Latin capital letter A ring ] +[template AElig[]'''Æ'''] [/ Latin capital letter AE = Latin capital ligature AE ] +[template Ccedil[]'''Ç'''] [/ Latin capital letter C with cedilla ] +[template Egrave[]'''È'''] [/ Latin capital letter E with grave ] +[template Eacute[]'''É'''] [/ Latin capital letter E with acute ] +[template Ecirc[]'''Ê'''] [/ Latin capital letter E with circumflex ] +[template Euml[]'''Ë'''] [/ Latin capital letter E with diaeresis ] +[template Igrave[]'''Ì'''] [/ Latin capital letter I with grave ] +[template Iacute[]'''Í'''] [/ Latin capital letter I with acute ] +[template Icirc[]'''Î'''] [/ Latin capital letter I with circumflex ] +[template Iuml[]'''Ï'''] [/ Latin capital letter I with diaeresis ] +[template ETH[]'''Ð'''] [/ Latin capital letter ETH ] +[template Ntilde[]'''Ñ'''] [/ Latin capital letter N with tilde ] +[template Ograve[]'''Ò'''] [/ Latin capital letter O with grave] +[template Oacute[]'''Ó'''] [/ Latin capital letter O with acute ] +[template Ocirc[]'''Ô'''] [/ Latin capital letter O with circumflex ] +[template Otilde[]'''Õ'''] [/ Latin capital letter O with tilde ] +[template Ouml[]'''Ö'''] [/ Latin capital letter O with diaeresis ] +[template times[]'''×'''] [/ multiplication sign ] +[template Oslash[]'''Ø'''] [/ Latin capital letter O with stroke = Latin capital letter O slash ] +[template Ugrave[]'''Ù'''] [/ Latin capital letter U with grave ] +[template Uacute[]'''Ú'''] [/ Latin capital letter U with acute ] +[template Ucirc[]'''Û'''] [/ Latin capital letter U with circumflex ] +[template Uuml[]'''Ü'''] [/ Latin capital letter U with diaeresis ] +[template Yacute[]'''Ý'''] [/ Latin capital letter Y with acute ] +[template THORN[]'''Þ'''] [/ Latin capital letter THORN ] +[template szlig[]'''ß'''] [/ Latin small letter sharp s = ess-zed ] +[template agrave[]'''à'''] [/ Latin small letter a with grave = Latin small letter a grave ] +[template aacute[]'''á'''] [/ Latin small letter a with acute ] +[template acirc[]'''â'''] [/ Latin small letter a with circumflex ] +[template atilde[]'''ã'''] [/ Latin small letter a with tilde ] +[template auml[]'''ä'''] [/ Latin small letter a with diaeresis ] +[template aring[]'''å'''] [/ Latin small letter a with ring above = Latin small letter a ring ] +[template aelig[]'''æ'''] [/ Latin small letter ae = Latin small ligature ae ] +[template ccedil[]'''ç'''] [/ Latin small letter c with cedilla ] +[template egrave[]'''è'''] [/ Latin small letter e with grave ] +[template eacute[]'''é'''] [/ Latin small letter e with acute ] +[template ecirc[]'''ê'''] [/ Latin small letter e with circumflex ] +[template euml[]'''ë'''] [/ Latin small letter e with diaeresis ] +[template igrave[]'''ì'''] [/ Latin small letter i with grave ] +[template iacute[]'''í'''] [/ Latin small letter i with acute ] +[template icirc[]'''î'''] [/ Latin small letter i with circumflex ] +[template iuml[]'''ï'''] [/ Latin small letter i with diaeresis ] +[template eth[]'''ð'''] [/ Latin small letter eth ] +[template ntilde[]'''ñ'''] [/ Latin small letter n with tilde ] +[template ograve[]'''ò'''] [/Latin small letter o with grave ] +[template oacute[]'''ó'''] [/ Latin small letter o with acute ] +[template ocirc[]'''ô'''] [/ Latin small letter o with circumflex ] +[template otilde[]'''õ'''] [/ Latin small letter o with tilde ] +[template ouml[]'''ö'''] [/ Latin small letter o with diaeresis ] +[template divide[]'''÷'''] [/ division sign ] +[template oslash[]'''ø'''] [/ Latin small letter o with stroke = Latin small letter o slash ] +[template ugrave[]'''ù'''] [/ Latin small letter u with grave ] +[template uacute[]'''ú'''] [/ Latin small letter u with acute ] +[template ucirc[]'''û'''] [/ Latin small letter u with circumflex ] +[template uuml[]'''ü'''] [/ Latin small letter u with diaeresis ] +[template yacute[]'''ý'''] [/ Latin small letter y with acute ] +[template thorn[]'''þ'''] [/ Latin small letter thorn ] +[template yuml[]'''ÿ'''] [/ Latin small letter y with diaeresis ] + + + diff --git a/doc/test/Jamfile.v2 b/doc/test/Jamfile.v2 index 8ff927c4d0..8a0640eb7f 100644 --- a/doc/test/Jamfile.v2 +++ b/doc/test/Jamfile.v2 @@ -1,2 +1,47 @@ -# Distributed under the Boost Software License, Version 1.0. -# See http://www.boost.org/LICENSE_1_0.txt) +# Copyright John Maddock 2008. 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) + +using quickbook ; + +xml test : test.qbk ; +boostbook standalone + : + test + : + # HTML options first: + #====================================================================== + + toc.max.depth=2 + toc.section.depth=2 + chunk.section.depth=1 + boost.root=../../.. + boost.libraries=../../../libs/libraries.htm + navig.graphics=1 + html.stylesheet=../../../doc/html/boostbook.css + + + # PDF Options: + #====================================================================== + + # TOC Generation: this is needed for FOP-0.9 and later: + # fop1.extensions=1 + xep.extensions=1 + # TOC generation: this is needed for FOP 0.2, but must not be set to + # zero for FOP-0.9! + fop.extensions=0 + # No indent on body text: + body.start.indent=0pt + # Margin size: + page.margin.inner=0.5in + # Margin size: + page.margin.outer=0.5in + # Yes, we want graphics for admonishments: + admon.graphics=1 + # Set this one for PDF generation *only*: + # default pnd graphics are awful in PDF form, + # better use SVG's instead: + #admon.graphics.extension=".svg" + ; + + diff --git a/doc/test/html/images/beta_dist_kurtosis.png b/doc/test/html/images/beta_dist_kurtosis.png new file mode 100644 index 0000000000..1be258bfde Binary files /dev/null and b/doc/test/html/images/beta_dist_kurtosis.png differ diff --git a/doc/test/html/images/digamma3.png b/doc/test/html/images/digamma3.png new file mode 100644 index 0000000000..bf4b81f607 Binary files /dev/null and b/doc/test/html/images/digamma3.png differ diff --git a/doc/test/html/images/doctest.png b/doc/test/html/images/doctest.png new file mode 100644 index 0000000000..6d58193b31 Binary files /dev/null and b/doc/test/html/images/doctest.png differ diff --git a/doc/test/html/images/open_clipart_library_logo.svg b/doc/test/html/images/open_clipart_library_logo.svg new file mode 100644 index 0000000000..9a4521f3a5 --- /dev/null +++ b/doc/test/html/images/open_clipart_library_logo.svg @@ -0,0 +1,143 @@ + + + + + + + + image/svg+xml + + Open Clip Art Logo + 10-01-2004 + + + Andreas Nilsson + + + + + + Jon Phillips, Tobias Jakobs + + + This is one version of the official Open Clip Art Library logo. + logo, open clip art library logo, logotype + + + + + + + + + + + + + + + + + + + diff --git a/doc/test/html/images/remez-2.png b/doc/test/html/images/remez-2.png new file mode 100644 index 0000000000..e9bfbd9108 Binary files /dev/null and b/doc/test/html/images/remez-2.png differ diff --git a/doc/test/html/images/remez-3.png b/doc/test/html/images/remez-3.png new file mode 100644 index 0000000000..6493527d56 Binary files /dev/null and b/doc/test/html/images/remez-3.png differ diff --git a/doc/test/html/images/remez-4.png b/doc/test/html/images/remez-4.png new file mode 100644 index 0000000000..6733bac9b9 Binary files /dev/null and b/doc/test/html/images/remez-4.png differ diff --git a/doc/test/html/images/remez-5.png b/doc/test/html/images/remez-5.png new file mode 100644 index 0000000000..80727614f8 Binary files /dev/null and b/doc/test/html/images/remez-5.png differ diff --git a/doc/test/remez.qbk b/doc/test/remez.qbk new file mode 100644 index 0000000000..3a72b12da2 --- /dev/null +++ b/doc/test/remez.qbk @@ -0,0 +1,372 @@ +[section:remez Sample Article (The Remez Method)] + +The [@http://en.wikipedia.org/wiki/Remez_algorithm Remez algorithm] +is a methodology for locating the minimax rational approximation +to a function. This short article gives a brief overview of the method, but +it should not be regarded as a thorough theoretical treatment, for that you +should consult your favorite textbook. + +Imagine that you want to approximate some function f(x) by way of a rational +function R(x), where R(x) may be either a polynomial P(x) or a ratio of two +polynomials P(x)/Q(x) (a rational function). Initially we'll concentrate on the +polynomial case, as it's by far the easier to deal with, later we'll extend +to the full rational function case. + +We want to find the "best" rational approximation, where +"best" is defined to be the approximation that has the least deviation +from f(x). We can measure the deviation by way of an error function: + +E[sub abs](x) = f(x) - R(x) + +which is expressed in terms of absolute error, but we can equally use +relative error: + +E[sub rel](x) = (f(x) - R(x)) / |f(x)| + +And indeed in general we can scale the error function in any way we want, it +makes no difference to the maths, although the two forms above cover almost +every practical case that you're likely to encounter. + +The minimax rational function R(x) is then defined to be the function that +yields the smallest maximal value of the error function. Chebyshev showed +that there is a unique minimax solution for R(x) that has the following +properties: + +* If R(x) is a polynomial of degree N, then there are N+2 unknowns: +the N+1 coefficients of the polynomial, and maximal value of the error +function. +* The error function has N+1 roots, and N+2 extrema (minima and maxima). +* The extrema alternate in sign, and all have the same magnitude. + +That means that if we know the location of the extrema of the error function +then we can write N+2 simultaneous equations: + +R(x[sub i]) + (-1)[super i]E = f(x[sub i]) + +where E is the maximal error term, and x[sub i] are the abscissa values of the +N+2 extrema of the error function. It is then trivial to solve the simultaneous +equations to obtain the polynomial coefficients and the error term. + +['Unfortunately we don't know where the extrema of the error function are located!] + +[h4 The Remez Method] + +The Remez method is an iterative technique which, given a broad range of +assumptions, will converge on the extrema of the error function, and therefore +the minimax solution. + +In the following discussion we'll use a concrete example to illustrate +the Remez method: an approximation to the function e[super x][space] over +the range \[-1, 1\]. + +Before we can begin the Remez method, we must obtain an initial value +for the location of the extrema of the error function. We could "guess" +these, but a much closer first approximation can be obtained by first +constructing an interpolated polynomial approximation to f(x). + +In order to obtain the N+1 coefficients of the interpolated polynomial +we need N+1 points (x[sub 0]...x[sub N]): with our interpolated form +passing through each of those points +that yields N+1 simultaneous equations: + +f(x[sub i]) = P(x[sub i]) = c[sub 0] + c[sub 1]x[sub i] ... + c[sub N]x[sub i][super N] + +Which can be solved for the coefficients c[sub 0]...c[sub N] in P(x). + +Obviously this is not a minimax solution, indeed our only guarantee is that f(x) and +P(x) touch at N+1 locations, away from those points the error may be arbitrarily +large. However, we would clearly like this initial approximation to be as close to +f(x) as possible, and it turns out that using the zeros of an orthogonal polynomial +as the initial interpolation points is a good choice. In our example we'll use the +zeros of a Chebyshev polynomial as these are particularly easy to calculate, +interpolating for a polynomial of degree 4, and measuring /relative error/ +we get the following error function: + +[$images/remez-2.png] + +Which has a peak relative error of 1.2x10[super -3]. + +While this is a pretty good approximation already, judging by the +shape of the error function we can clearly do better. Before starting +on the Remez method propper, we have one more step to perform: locate +all the extrema of the error function, and store +these locations as our initial ['Chebyshev control points]. + +[note +In the simple case of a polynomial approximation, by interpolating through +the roots of a Chebyshev polynomial we have in fact created a ['Chebyshev +approximation] to the function: in terms of /absolute error/ +this is the best a priori choice for the interpolated form we can +achieve, and typically is very close to the minimax solution. + +However, if we want to optimise for /relative error/, or if the approximation +is a rational function, then the initial Chebyshev solution can be quite far +from the ideal minimax solution. + +A more technical discussion of the theory involved can be found in this +[@http://math.fullerton.edu/mathews/n2003/ChebyshevPolyMod.html online course].] + +[h4 Remez Step 1] + +The first step in the Remez method, given our current set of +N+2 Chebyshev control points x[sub i], is to solve the N+2 simultaneous +equations: + +P(x[sub i]) + (-1)[super i]E = f(x[sub i]) + +To obtain the error term E, and the coefficients of the polynomial P(x). + +This gives us a new approximation to f(x) that has the same error /E/ at +each of the control points, and whose error function ['alternates in sign] +at the control points. This is still not necessarily the minimax +solution though: since the control points may not be at the extrema of the error +function. After this first step here's what our approximation's error +function looks like: + +[$images/remez-3.png] + +Clearly this is still not the minimax solution since the control points +are not located at the extrema, but the maximum relative error has now +dropped to 5.6x10[super -4]. + +[h4 Remez Step 2] + +The second step is to locate the extrema of the new approximation, which we do +in two stages: first, since the error function changes sign at each +control point, we must have N+1 roots of the error function located between +each pair of N+2 control points. Once these roots are found by standard root finding +techniques, we know that N extrema are bracketed between each pair of +roots, plus two more between the endpoints of the range and the first and last roots. +The N+2 extrema can then be found using standard function minimisation techniques. + +We now have a choice: multi-point exchange, or single point exchange. + +In single point exchange, we move the control point nearest to the largest extrema to +the absissa value of the extrema. + +In multi-point exchange we swap all the current control points, for the locations +of the extrema. + +In our example we perform multi-point exchange. + +[h4 Iteration] + +The Remez method then performs steps 1 and 2 above iteratively until the control +points are located at the extrema of the error function: this is then +the minimax solution. + +For our current example, two more iterations converges on a minimax +solution with a peak relative error of +5x10[super -4] and an error function that looks like: + +[$images/remez-4.png] + +[h4 Rational Approximations] + +If we wish to extend the Remez method to a rational approximation of the form + +f(x) = R(x) = P(x) / Q(x) + +where P(x) and Q(x) are polynomials, then we proceed as before, except that now +we have N+M+2 unknowns if P(x) is of order N and Q(x) is of order M. This assumes +that Q(x) is normalised so that it's leading coefficient is 1, giving +N+M+1 polynomial coefficients in total, plus the error term E. + +The simultaneous equations to be solved are now: + +P(x[sub i]) / Q(x[sub i]) + (-1)[super i]E = f(x[sub i]) + +Evaluated at the N+M+2 control points x[sub i]. + +Unfortunately these equations are non-linear in the error term E: we can only +solve them if we know E, and yet E is one of the unknowns! + +The method usually adopted to solve these equations is an iterative one: we guess the +value of E, solve the equations to obtain a new value for E (as well as the polynomial +coefficients), then use the new value of E as the next guess. The method is +repeated until E converges on a stable value. + +These complications extend the running time required for the development +of rational approximations quite considerably. It is often desirable +to obtain a rational rather than polynomial approximation none the less: +rational approximations will often match more difficult to approximate +functions, to greater accuracy, and with greater efficiency, than their +polynomial alternatives. For example, if we takes our previous example +of an approximation to e[super x], we obtained 5x10[super -4] accuracy +with an order 4 polynomial. If we move two of the unknowns into the denominator +to give a pair of order 2 polynomials, and re-minimise, then the peak relative error drops +to 8.7x10[super -5]. That's a 5 fold increase in accuracy, for the same number +of terms overall. + +[h4 Practical Considerations] + +Most treatises on approximation theory stop at this point. However, from +a practical point of view, most of the work involves finding the right +approximating form, and then persuading the Remez method to converge +on a solution. + +So far we have used a direct approximation: + +f(x) = R(x) + +But this will converge to a useful approximation only if f(x) is smooth. In +addition round-off errors when evaluating the rational form mean that this +will never get closer than within a few epsilon of machine precision. +Therefore this form of direct approximation is often reserved for situations +where we want efficiency, rather than accuracy. + +The first step in improving the situation is generally to split f(x) into +a dominant part that we can compute accurately by another method, and a +slowly changing remainder which can be approximated by a rational approximation. +We might be tempted to write: + +f(x) = g(x) + R(x) + +where g(x) is the dominant part of f(x), but if f(x)\/g(x) is approximately +constant over the interval of interest then: + +f(x) = g(x)(c + R(x)) + +Will yield a much better solution: here /c/ is a constant that is the approximate +value of f(x)\/g(x) and R(x) is typically tiny compared to /c/. In this situation +if R(x) is optimised for absolute error, then as long as its error is small compared +to the constant /c/, that error will effectively get wiped out when R(x) is added to +/c/. + +The difficult part is obviously finding the right g(x) to extract from your +function: often the asymptotic behaviour of the function will give a clue, so +for example the function __erfc becomes proportional to +e[super -x[super 2]]\/x as x becomes large. Therefore using: + +erfc(z) = (C + R(x)) e[super -x[super 2]]/x + +as the approximating form seems like an obvious thing to try, and does indeed +yield a useful approximation. + +However, the difficulty then becomes one of converging the minimax solution. +Unfortunately, it is known that for some functions the Remez method can lead +to divergent behaviour, even when the initial starting approximation is quite good. +Furthermore, it is not uncommon for the solution obtained in the first Remez step +above to be a bad one: the equations to be solved are generally "stiff", often +very close to being singular, and assuming a solution is found at all, round-off +errors and a rapidly changing error function, can lead to a situation where the +error function does not in fact change sign at each control point as required. +If this occurs, it is fatal to the Remez method. It is also possible to +obtain solutions that are perfectly valid mathematically, but which are +quite useless computationally: either because there is an unavoidable amount +of roundoff error in the computation of the rational function, or because +the denominator has one or more roots over the interval of the approximation. +In the latter case while the approximation may have the correct limiting value at +the roots, the approximation is nonetheless useless. + +Assuming that the approximation does not have any fatal errors, and that the only +issue is converging adequately on the minimax solution, the aim is to +get as close as possible to the minimax solution before beginning the Remez method. +Using the zeros of a Chebyshev polynomial for the initial interpolation is a +good start, but may not be ideal when dealing with relative errors and\/or +rational (rather than polynomial) approximations. One approach is to skew +the initial interpolation points to one end: for example if we raise the +roots of the Chebyshev polynomial to a positive power greater than 1 +then the roots will be skewed towards the middle of the \[-1,1\] interval, +while a positive power less than one +will skew them towards either end. More usefully, if we initially rescale the +points over \[0,1\] and then raise to a positive power, we can skew them to the left +or right. Returning to our example of e[super x][space] over \[-1,1\], the initial +interpolated form was some way from the minimax solution: + +[$images/remez-2.png] + +However, if we first skew the interpolation points to the left (rescale them +to \[0, 1\], raise to the power 1.3, and then rescale back to \[-1,1\]) we +reduce the error from 1.3x10[super -3][space]to 6x10[super -4]: + +[$images/remez-5.png] + +It's clearly still not ideal, but it is only a few percent away from +our desired minimax solution (5x10[super -4]). + +[h4 Remez Method Checklist] + +The following lists some of the things to check if the Remez method goes wrong, +it is by no means an exhaustive list, but is provided in the hopes that it will +prove useful. + +* Is the function smooth enough? Can it be better separated into +a rapidly changing part, and an asymptotic part? +* Does the function being approximated have any "blips" in it? Check +for problems as the function changes computation method, or +if a root, or an infinity has been divided out. The telltale +sign is if there is a narrow region where the Remez method will +not converge. +* Check you have enough accuracy in your calculations: remember that +the Remez method works on the difference between the approximation +and the function being approximated: so you must have more digits of +precision available than the precision of the approximation +being constructed. So for example at double precision, you +shouldn't expect to be able to get better than a float precision +approximation. +* Try skewing the initial interpolated approximation to minimise the +error before you begin the Remez steps. +* If the approximation won't converge or is ill-conditioned from one starting +location, try starting from a different location. +* If a rational function won't converge, one can minimise a polynomial +(which presents no problems), then rotate one term from the numerator to +the denominator and minimise again. In theory one can continue moving +terms one at a time from numerator to denominator, and then re-minimising, +retaining the last set of control points at each stage. +* Try using a smaller interval. It may also be possible to optimise over +one (small) interval, rescale the control points over a larger interval, +and then re-minimise. +* Keep absissa values small: use a change of variable to keep the abscissa +over, say \[0, b\], for some smallish value /b/. + +[h4 References] + +The original references for the Remez Method and it's extension +to rational functions are unfortunately in Russian: + +Remez, E.Ya., ['Fundamentals of numerical methods for Chebyshev approximations], +"Naukova Dumka", Kiev, 1969. + +Remez, E.Ya., Gavrilyuk, V.T., ['Computer development of certain approaches +to the approximate construction of solutions of Chebyshev problems +nonlinearly depending on parameters], Ukr. Mat. Zh. 12 (1960), 324-338. + +Gavrilyuk, V.T., ['Generalization of the first polynomial algorithm of +E.Ya.Remez for the problem of constructing rational-fractional +Chebyshev approximations], Ukr. Mat. Zh. 16 (1961), 575-585. + +Some English language sources include: + +Fraser, W., Hart, J.F., ['On the computation of rational approximations +to continuous functions], Comm. of the ACM 5 (1962), 401-403, 414. + +Ralston, A., ['Rational Chebyshev approximation by Remes' algorithms], +Numer.Math. 7 (1965), no. 4, 322-330. + +A. Ralston, ['Rational Chebyshev approximation, Mathematical +Methods for Digital Computers v. 2] (Ralston A., Wilf H., eds.), +Wiley, New York, 1967, pp. 264-284. + +Hart, J.F. e.a., ['Computer approximations], Wiley, New York a.o., 1968. + +Cody, W.J., Fraser, W., Hart, J.F., ['Rational Chebyshev approximation +using linear equations], Numer.Math. 12 (1968), 242-251. + +Cody, W.J., ['A survey of practical rational and polynomial +approximation of functions], SIAM Review 12 (1970), no. 3, 400-423. + +Barrar, R.B., Loeb, H.J., ['On the Remez algorithm for non-linear +families], Numer.Math. 15 (1970), 382-391. + +Dunham, Ch.B., ['Convergence of the Fraser-Hart algorithm for rational +Chebyshev approximation], Math. Comp. 29 (1975), no. 132, 1078-1082. + +G. L. Litvinov, ['Approximate construction of rational +approximations and the effect of error autocorrection], +Russian Journal of Mathematical Physics, vol.1, No. 3, 1994. + +[endsect][/section:remez The Remez Method] + + + diff --git a/doc/test/stub.cpp b/doc/test/stub.cpp new file mode 100644 index 0000000000..48e76d0860 --- /dev/null +++ b/doc/test/stub.cpp @@ -0,0 +1,69 @@ +/*============================================================================= + Copyright (c) 2006 Joel de Guzman + http://spirit.sourceforge.net/ + + Use, modification and distribution is 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) +=============================================================================*/ +#include + +//[ bar +//` This is the [*/bar/] function +std::string bar() +{ + // return 'em, bar man! + return "bar"; +} +//] + +//[ foo +/*` This is the [*['foo]] function. */ +std::string foo() +{ + // return 'em, foo man! + return "foo"; +} +//] + +//[ foo_bar +std::string foo_bar() /*< The /Mythical/ FooBar. + See [@http://en.wikipedia.org/wiki/Foobar Foobar for details] >*/ +{ + return "foo-bar"; /*< return 'em, foo-bar man! >*/ +} +//] + +//[ class_ +class x +{ +public: + + /*<< Constructor >>*/ + x() : n(0) + { + } + + /*<< Destructor >>*/ + ~x() + { + } + + /*<< Get the `n` member variable >>*/ + int get() const + { + return n; /*<- this will be ignored by quickbook ->*/ + } + + /*<< Set the `n` member variable >>*/ + void set(int n_) + { + n = n_; + } +//<- this will be ignored by quickbook +private: + + int n; +//-> +}; +//] diff --git a/doc/test/test.qbk b/doc/test/test.qbk new file mode 100644 index 0000000000..aed41c5af0 --- /dev/null +++ b/doc/test/test.qbk @@ -0,0 +1,596 @@ +[article Document To Test Formatting + [quickbook 1.4] + [copyright 2007 John Maddock, Joel de Guzman, Eric Niebler and Matias Capeletto] + [purpose Test Formatting Document] + [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 [Maddock, John], [de Guzman, Joel], [Niebler, Eric], [Capeletto, Matias] ] + [category math] + [/last-revision $Date: 2007-05-07 10:21:52 +0100 (Mon, 07 May 2007) $] +] + +[include HTML4_symbols.qbk] + +[/ Some composite templates] +[template super[x]''''''[x]''''''] +[template sub[x]''''''[x]''''''] +[template floor[x]'''⌊'''[x]'''⌋'''] +[template floorlr[x][lfloor][x][rfloor]] +[template ceil[x] '''⌈'''[x]'''⌉'''] + +[section Introduction] + +This document is purely a test case to test out HTML and PDF generation and style. + +This is some body text. + + int main() + { + double d = 2.345; + return d; + } + +We can count in Greek too: [alpha], [beta], [gamma]. + +Try some superscrips and subscripts: x[super 2], x[sub i][super 3], [alpha][super 2], +[beta][super [alpha]], [floor x], [floor [alpha]], [ceil a]. + +[endsect] + +[section Code Blocks] + +[section Embedded code] + +These should be syntax highlighted: + + #include + + int main() + { + // Sample code + std::cout << "Hello, World\n"; + return 0; + } + +[endsect] + +[section Imported code and callouts] + +[import stub.cpp] + +Here's some code with left-placed callouts: + +[class_] + +And again with callouts placed exactly where we put them: + +[foo_bar] + +[endsect] + +[section Larger example] + +Now let's include a larger example, this may span several pages +and should not be chopped off half way through... some FO processors +get this wrong! + + namespace boost{ + + template + class sub_match; + + typedef sub_match csub_match; + typedef sub_match wcsub_match; + typedef sub_match ssub_match; + typedef sub_match wssub_match; + + template + class sub_match : public std::pair + { + public: + typedef typename iterator_traits::value_type value_type; + typedef typename iterator_traits::difference_type difference_type; + typedef BidirectionalIterator iterator; + + bool matched; + + difference_type length()const; + operator basic_string()const; + basic_string str()const; + + int compare(const sub_match& s)const; + int compare(const basic_string& s)const; + int compare(const value_type* s)const; + #ifdef BOOST_REGEX_MATCH_EXTRA + typedef implementation-private capture_sequence_type; + const capture_sequence_type& captures()const; + #endif + }; + // + // comparisons to another sub_match: + // + template + bool operator == (const sub_match& lhs, + const sub_match& rhs); + template + bool operator != (const sub_match& lhs, + const sub_match& rhs); + template + bool operator < (const sub_match& lhs, + const sub_match& rhs); + template + bool operator <= (const sub_match& lhs, + const sub_match& rhs); + template + bool operator >= (const sub_match& lhs, + const sub_match& rhs); + template + bool operator > (const sub_match& lhs, + const sub_match& rhs); + + + // + // comparisons to a basic_string: + // + template + bool operator == (const std::basic_string::value_type, + traits, + Allocator>& lhs, + const sub_match& rhs); + template + bool operator != (const std::basic_string::value_type, + traits, + Allocator>& lhs, + const sub_match& rhs); + template + bool operator < (const std::basic_string::value_type, + traits, + Allocator>& lhs, + const sub_match& rhs); + template + bool operator > (const std::basic_string::value_type, + traits, + Allocator>& lhs, + const sub_match& rhs); + template + bool operator >= (const std::basic_string::value_type, + traits, + Allocator>& lhs, + const sub_match& rhs); + template + bool operator <= (const std::basic_string::value_type, + traits, + Allocator>& lhs, + const sub_match& rhs); + + template + bool operator == (const sub_match& lhs, + const std::basic_string::value_type, + traits, + Allocator>& rhs); + template + bool operator != (const sub_match& lhs, + const std::basic_string::value_type, + traits, + Allocator>& rhs); + template + bool operator < (const sub_match& lhs, + const std::basic_string::value_type, + traits, + Allocator>& rhs); + template + bool operator > (const sub_match& lhs, + const std::basic_string::value_type, + traits, + Allocator>& rhs); + template + bool operator >= (const sub_match& lhs, + const std::basic_string::value_type, + traits, + Allocator>& rhs); + template + bool operator <= (const sub_match& lhs, + const std::basic_string::value_type, + traits, + Allocator>& rhs); + + // + // comparisons to a pointer to a character array: + // + template + bool operator == (typename iterator_traits::value_type const* lhs, + const sub_match& rhs); + template + bool operator != (typename iterator_traits::value_type const* lhs, + const sub_match& rhs); + template + bool operator < (typename iterator_traits::value_type const* lhs, + const sub_match& rhs); + template + bool operator > (typename iterator_traits::value_type const* lhs, + const sub_match& rhs); + template + bool operator >= (typename iterator_traits::value_type const* lhs, + const sub_match& rhs); + template + bool operator <= (typename iterator_traits::value_type const* lhs, + const sub_match& rhs); + + template + bool operator == (const sub_match& lhs, + typename iterator_traits::value_type const* rhs); + template + bool operator != (const sub_match& lhs, + typename iterator_traits::value_type const* rhs); + template + bool operator < ]``(const sub_match& lhs, + typename iterator_traits::value_type const* rhs); + template + bool operator > (const sub_match& lhs, + typename iterator_traits::value_type const* rhs); + template + bool operator >= (const sub_match& lhs, + typename iterator_traits::value_type const* rhs); + template + bool operator <= (const sub_match& lhs, + typename iterator_traits::value_type const* rhs); + + // + // comparisons to a single character: + // + template + bool operator == (typename iterator_traits::value_type const& lhs, + const sub_match& rhs); + template + bool operator != (typename iterator_traits::value_type const& lhs, + const sub_match& rhs); + template + bool operator < (typename iterator_traits::value_type const& lhs, + const sub_match& rhs); + template + bool operator > (typename iterator_traits::value_type const& lhs, + const sub_match& rhs); + template + bool operator >= (typename iterator_traits::value_type const& lhs, + const sub_match& rhs); + template + bool operator <= (typename iterator_traits::value_type const& lhs, + const sub_match& rhs); + + template + bool operator == (const sub_match& lhs, + typename iterator_traits::value_type const& rhs); + template + bool operator != (const sub_match& lhs, + typename iterator_traits::value_type const& rhs); + template + bool operator < (const sub_match& lhs, + typename iterator_traits::value_type const& rhs); + template + bool operator > (const sub_match& lhs, + typename iterator_traits::value_type const& rhs); + template + bool operator >= (const sub_match& lhs, + typename iterator_traits::value_type const& rhs); + template + bool operator <= (const sub_match& lhs, + typename iterator_traits::value_type const& rhs); + // + // addition operators: + // + template + std::basic_string::value_type, traits, Allocator> + operator + (const std::basic_string::value_type, + traits, + Allocator>& s, + const sub_match& m); + template + std::basic_string::value_type, traits, Allocator> + operator + (const sub_match& m, + const std::basic_string::value_type, + traits, + Allocator>& s); + template + std::basic_string::value_type> + operator + (typename iterator_traits::value_type const* s, + const sub_match& m); + template + std::basic_string::value_type> + operator + (const sub_match& m, + typename iterator_traits::value_type const * s); + template + std::basic_string::value_type> + operator + (typename iterator_traits::value_type const& s, + const sub_match& m); + template + std::basic_string::value_type> + operator + (const sub_match& m, + typename iterator_traits::value_type const& s); + template + std::basic_string::value_type> + operator + (const sub_match& m1, + const sub_match& m2); + + // + // stream inserter: + // + template + basic_ostream& + operator << (basic_ostream& os, + const sub_match& m); + + } // namespace boost + +[endsect] + +[endsect] + +[section Basic Formatting] + +[section Font Styles] + +Here we go with some inline formatting: +['italic], [*bold], [_underline], [^teletype], [-strikethrough], +we can combine styles as well: ['[*bold italic]], [_[^teletype with underline]]. + +[endsect] + +[section Replaceable Text] + +Text that is intended to be user-replaceable is [~rendered like this]. + +[endsect] + +[section Quotations] + +Here we go: ["A question that sometimes drives me hazy: am I or are the others crazy?]--Einstein + +Note the proper left and right quote marks. Also, while you can simply use ordinary quote marks like "quoted", our quotation, above, will generate correct DocBook quotations (e.g. quoted). + +Like all phrase elements, quotations may be nested. Example: + +["Here's the rule for bargains: ["Do other men, for they would do you.] That's +the true business precept.] + +[endsect] + +[section Inline Code] + +This text has inlined code `int main() { return 0; }` in it. +The code should be syntax highlighted. + +[endsect] + +[section Links] + +Try this: [@http://www.boost.org this is [*boost's] website....] it should +be visible as a link. + +[endsect] + +[section Footnotes] + +Here's one [footnote A sample footnote]. + +And here's another [footnote Another sample footnote]. + +[endsect] + +[section Blockquote] + +Lets indent the next paragraph: + +[:Here we go!!!] + +[endsect] + +[section Headings] + +Now try rendering some heading styles: + +[h1 Heading 1] + +[h2 Heading 2] + +[h3 Heading 3] + +[h4 Heading 4] + +[h5 Heading 5] + +[h6 Heading 6] + +[endsect] + +[endsect] + +[section Blurbs] + +[section Preformatted text] + +Here's some sample program output: + +[pre +'''F test for equal standard deviations +____________________________________ + +Sample 1: +Number of Observations = 240 +Sample Standard Deviation = 65.549 + +Sample 2: +Number of Observations = 240 +Sample Standard Deviation = 61.854 + +Test Statistic = 1.123 + +CDF of test statistic: = 8.148e-001 +Upper Critical Value at alpha: = 1.238e+000 +Upper Critical Value at alpha/2: = 1.289e+000 +Lower Critical Value at alpha: = 8.080e-001 +Lower Critical Value at alpha/2: = 7.756e-001 + +Results for Alternative Hypothesis and alpha = 0.0500 + +Alternative Hypothesis Conclusion +Standard deviations are unequal (two sided test) REJECTED +Standard deviation 1 is less than standard deviation 2 REJECTED +Standard deviation 1 is greater than standard deviation 2 REJECTED''' +] + +[endsect] + +[section Admonishments] + +There are four admonishments supported by Docbook XML: + +[note This is a note] + +[tip This is a tip] + +[important This is important] + +[caution This is a caution] + +[warning This is a warning + +They can contain more than one paragraph. +] + +[endsect] + +[section Blurbs] + +[blurb [*An eye catching advertisement or note...] + +These should be rendered in a manner similar to admonishments. + +They can contain more than one paragraph. +] + +[endsect] + +[endsect] + +[section Lists and Tables] + +[section Lists] + +A numbered list: + +# One +# Two +# Three + # Three.a + # Three.b + # Three.c +# Four + # Four.a + # Four.a.i + # Four.a.ii +# Five + +An unordered list: + +* First +* Second +* Third + +A mixture of the two: + +# 1 + * 1.a + # 1.a.1 + # 1.a.2 + * 1.b +# 2 + * 2.a + * 2.b + # 2.b.1 + # 2.b.2 + * 2.b.2.a + * 2.b.2.b + + +[endsect] + +[section Variable Lists] + +[variablelist A Variable List + [[term 1] [The definition of term 1]] + [[term 2] [The definition of term 2]] + [[term 3] [The definition of term 3]] +] + +[endsect] + +[section Tables] + +Here's a big table with code and other tricky things: + +[table Notes on the Implementation of the Beta Distribution +[[Function][Implementation Notes]] +[[pdf] + [f(x;[alpha],[beta]) = x[super[alpha] - 1] (1 - x)[super[beta] -1] / B([alpha], [beta]) + + Implemented using ibeta_derivative(a, b, x).]] + +[[cdf][Using the incomplete beta function ibeta(a, b, x)]] +[[cdf complement][ibetac(a, b, x)]] +[[quantile][Using the inverse incomplete beta function ibeta_inv(a, b, p)]] +[[quantile from the complement][ibetac_inv(a, b, q)]] +[[mean][`a/(a+b)`]] +[[variance][`a * b / (a+b)^2 * (a + b + 1)`]] +[[mode][`(a-1) / (a + b + 2)`]] +[[skewness][`2 (b-a) sqrt(a+b+1)/(a+b+2) * sqrt(a * b)`]] +[[kurtosis excess][ [$../beta_dist_kurtosis.png] ]] +[[kurtosis][`kurtosis + 3`]] +[[parameter estimation][ ]] +[[alpha + + from mean and variance][`mean * (( (mean * (1 - mean)) / variance)- 1)`]] +[[beta + + from mean and variance][`(1 - mean) * (((mean * (1 - mean)) /variance)-1)`]] +[[The member functions `estimate_alpha` and `estimate_beta` + + from cdf and probability x + + and *either* `alpha` or `beta`] + [Implemented in terms of the inverse incomplete beta functions + +ibeta_inva, and ibeta_invb respectively.]] +[[`estimate_alpha`][`ibeta_inva(beta, x, probability)`]] +[[`estimate_beta`][`ibeta_invb(alpha, x, probability)`]] +] + +[endsect] + +[endsect] + +[section Images] + +These are tricky enough that they warrent their own section. + +Let's start with a PNG file that's set to 120dpi, it should render at +a sensible size in both html and PDF forms. It should print OK too! + +[$images/digamma3.png] + +Now try again with a sample SVG image: + +[$images/open_clipart_library_logo.svg] + + +[endsect] + +[include test_HTML4_symbols.qbk] + +[include remez.qbk] + + + + diff --git a/doc/test/test_HTML4_symbols.qbk b/doc/test/test_HTML4_symbols.qbk new file mode 100644 index 0000000000..9dc271ee1f --- /dev/null +++ b/doc/test/test_HTML4_symbols.qbk @@ -0,0 +1,253 @@ +[section:test test HTML4 symbols] +[/ Examples of using all the Greek and Math symbols defined in HTML4_symbols.qbk] +[/ See http://www.htmlhelp.com/reference/html40/entities/symbols.html] + +[/ Also some miscellaneous math charaters added to this list - see the end.] + +[/ To use, enclose the template name in square brackets.] + +[section test Greek and Math symbols] + +[fnof], +[Alpha], +[Beta], +[Gamma], +[Delta], +[Epsilon], +[Zeta], +[Eta], +[Theta], +[Iota], +[Kappa], +[Lambda], +[Mu], +[Nu], +[Xi], +[Omicron], +[Pi], +[Rho], +[Sigma], +[Tau], +[Upsilon], +[Phi], +[Chi], +[Psi], +[Omega], +[alpha], +[beta], +[gamma], +[delta], +[epsilon], +[zeta], +[eta], +[theta], +[iota], +[kappa], +[lambda], +[mu], +[nu], +[xi], +[omicron], +[pi], +[rho], +[sigmaf], +[sigma], +[tau], +[upsilon], +[phi], +[chi], +[psi], +[omega], +[thetasym], +[upsih], +[piv], +[bull], +[hellip], +[prime], +[Prime], +[oline], +[frasl], +[weierp], +[image], +[real], +[trade], +[alefsym], +[larr], +[uarr], +[rarr], +[darr], +[harr], +[crarr], +[lArr], +[uArr], +[rArr], +[dArr], +[hArr], +[forall], +[part], +[exist], +[empty], +[nabla], +[isin], +[notin], +[ni], +[prod], +[sum], +[minus], +[lowast], +[radic], +[prop], +[infin], +[ang], +[and], +[or], +[cap], +[cup], +[int], +[there4], +[sim], +[cong], +[asymp], +[ne], +[equiv], +[le], +[ge], +[subset], +[superset], +[nsubset], +[sube], +[supe], +[oplus], +[otimes], +[perp], +[sdot], +[lceil], +[rceil], +[lfloor], +[rfloor], +[lang], +[rang], +[loz], +[spades], +[clubs], +[hearts], +[diams] + +[endsect] + +[section test Latin1 symbols] +[/ Examples of using all the symbols defined in Latin1_symbols.qbk] +[/ http://www.htmlhelp.com/reference/html40/entities/latin1.html ] + +[/ To use, enclose the template name in square brackets.] + +[nbsp], +[iexcl], +[cent], +[pound], +[curren], +[yen], +[brvbar], +[sectsign], +[uml], +[copy], +[ordf], +[laquo], +[not], +[shy], +[reg], +[macron], +[deg], +[plusmn], +[sup2], +[cubed], +[acute], +[micro], +[para], +[middot], +[cedil], +[sup1], +[ordm], +[raquo], +[frac14], +[frac12], +[frac34], +[iquest], +[Agrave], +[Aacute], +[Acirc], +[Atilde], +[Auml], +[Aring], +[AElig], +[Ccedil], +[Egrave], +[Eacute], +[Ecirc], +[Euml], +[Igrave], +[Iacute], +[Icirc], +[Iuml], +[ETH], +[Ntilde], +[Ograve], +[Oacute], +[Ocirc], +[Otilde], +[Ouml], +[times], +[Oslash], +[Ugrave], +[Uacute], +[Ucirc], +[Uuml], +[Yacute], +[THORN], +[szlig], +[agrave], +[aacute], +[acirc], +[atilde], +[auml], +[aring], +[aelig], +[ccedil], +[egrave], +[eacute], +[ecirc], +[euml], +[igrave], +[iacute], +[icirc], +[iuml], +[eth], +[ntilde], +[ograve], +[oacute], +[ocirc], +[otilde], +[ouml], +[divide], +[oslash], +[ugrave], +[uacute], +[ucirc], +[uuml], +[yacute], +[thorn], +[yuml], + +[endsect] + + +[endsect] + +[/ testsymbols.qbk + Copyright 2006 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). +] + +