1 [/ math.qbk 2 Copyright 2006 Hubert Holin and John Maddock. 3 Distributed under the Boost Software License, Version 1.0. 4 (See accompanying file LICENSE_1_0.txt or copy at 5 http://www.boost.org/LICENSE_1_0.txt). 6 ] 7 8 [def __form1 [^\[0;+'''∞'''\[]] 9 [def __form2 [^\]-'''∞''';+1\[]] 10 [def __form3 [^\]-'''∞''';-1\[]] 11 [def __form4 [^\]+1;+'''∞'''\[]] 12 [def __form5 [^\[-1;-1+'''ε'''\[]] 13 [def __form6 '''ε'''] 14 [def __form7 [^\]+1-'''ε''';+1\]]] 15 16 [def __effects [*Effects: ]] 17 [def __formula [*Formula: ]] 18 [def __exm1 '''<code>e<superscript>x</superscript> - 1</code>'''] 19 [def __ex '''<code>e<superscript>x</superscript></code>'''] 20 [def __te '''2ε'''] 21 22 [section:inv_hyper Inverse Hyperbolic Functions] 23 24 [section:inv_hyper_over Inverse Hyperbolic Functions Overview] 25 26 The exponential function is defined, for all objects for which this makes sense, 27 as the power series 28 [equation special_functions_blurb1] 29 with ['[^n! = 1x2x3x4x5...xn]] (and ['[^0! = 1]] by definition) being the factorial of ['[^n]]. 30 In particular, the exponential function is well defined for real numbers, 31 complex number, quaternions, octonions, and matrices of complex numbers, 32 among others. 33 34 [: ['[*Graph of exp on R]] ] 35 36 [: [$../graphs/exp_on_r.png] ] 37 38 [: ['[*Real and Imaginary parts of exp on C]]] 39 [: [$../graphs/im_exp_on_c.png]] 40 41 The hyperbolic functions are defined as power series which 42 can be computed (for reals, complex, quaternions and octonions) as: 43 44 Hyperbolic cosine: [equation special_functions_blurb5] 45 46 Hyperbolic sine: [equation special_functions_blurb6] 47 48 Hyperbolic tangent: [equation special_functions_blurb7] 49 50 [: ['[*Trigonometric functions on R (cos: purple; sin: red; tan: blue)]]] 51 [: [$../graphs/trigonometric.png]] 52 53 [: ['[*Hyperbolic functions on r (cosh: purple; sinh: red; tanh: blue)]]] 54 [: [$../graphs/hyperbolic.png]] 55 56 The hyperbolic sine is one to one on the set of real numbers, 57 with range the full set of reals, while the hyperbolic tangent is 58 also one to one on the set of real numbers but with range __form1, and 59 therefore both have inverses. 60 61 The hyperbolic cosine is one to one from __form2 onto __form3 (and from __form4 onto __form3). 62 63 The inverse function we use here is defined on __form3 with range __form2. 64 65 The inverse of the hyperbolic tangent is called the Argument hyperbolic tangent, 66 and can be computed as [equation special_functions_blurb15] 67 68 The inverse of the hyperbolic sine is called the Argument hyperbolic sine, 69 and can be computed (for __form5) as [equation special_functions_blurb17] 70 71 The inverse of the hyperbolic cosine is called the Argument hyperbolic cosine, 72 and can be computed as [equation special_functions_blurb18] 73 74 [endsect] [/section:inv_hyper_over Inverse Hyperbolic Functions Overview] 75 76 [section:acosh acosh] 77 78 `` 79 #include <boost/math/special_functions/acosh.hpp> 80 `` 81 82 template<class T> 83 ``__sf_result`` acosh(const T x); 84 85 template<class T, class ``__Policy``> 86 ``__sf_result`` acosh(const T x, const ``__Policy``&); 87 88 Computes the reciprocal of (the restriction to the range of __form1) 89 [link math_toolkit.inv_hyper.inv_hyper_over 90 the hyperbolic cosine function], at x. Values returned are positive. 91 92 If x is in the range __form2 then returns the result of __domain_error. 93 94 The return type of this function is computed using the __arg_promotion_rules: 95 the return type is `double` when T is an integer type, and T otherwise. 96 97 [optional_policy] 98 99 [graph acosh] 100 101 [h4 Accuracy] 102 103 Generally accuracy is to within 1 or 2 __epsilon across all supported platforms. 104 105 [h4 Testing] 106 107 This function is tested using a combination of random test values designed to give 108 full function coverage computed at high precision using the "naive" formula: 109 110 [equation acosh1] 111 112 along with a selection of sanity check values 113 computed using functions.wolfram.com to at least 50 decimal digits. 114 115 [h4 Implementation] 116 117 For sufficiently large x, we can use the 118 [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/06/01/06/01/0001/ 119 approximation]: 120 121 [equation acosh2] 122 123 For x sufficiently close to 1 we can use the 124 [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/06/01/04/01/0001/ 125 approximation]: 126 127 [equation acosh4] 128 129 Otherwise for x close to 1 we can use the following rearrangement of the 130 primary definition to preserve accuracy: 131 132 [equation acosh3] 133 134 Otherwise the 135 [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/02/ 136 primary definition] is used: 137 138 [equation acosh1] 139 140 [endsect] [/section:acosh acosh] 141 142 [section:asinh asinh] 143 144 `` 145 #include <boost/math/special_functions/asinh.hpp> 146 `` 147 148 template<class T> 149 ``__sf_result`` asinh(const T x); 150 151 template<class T, class ``__Policy``> 152 ``__sf_result`` asinh(const T x, const ``__Policy``&); 153 154 Computes the reciprocal of 155 [link math_toolkit.inv_hyper.inv_hyper_over 156 the hyperbolic sine function]. 157 158 The return type of this function is computed using the __arg_promotion_rules: 159 the return type is `double` when T is an integer type, and T otherwise. 160 161 [graph asinh] 162 163 [optional_policy] 164 165 [h4 Accuracy] 166 167 Generally accuracy is to within 1 or 2 __epsilon across all supported platforms. 168 169 [h4 Testing] 170 171 This function is tested using a combination of random test values designed to give 172 full function coverage computed at high precision using the "naive" formula: 173 174 [equation asinh1] 175 176 along with a selection of sanity check values 177 computed using functions.wolfram.com to at least 50 decimal digits. 178 179 [h4 Implementation] 180 181 For sufficiently large x we can use the 182 [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/06/01/06/01/0001/ 183 approximation]: 184 185 [equation asinh2] 186 187 While for very small x we can use the 188 [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/06/01/03/01/0001/ 189 approximation]: 190 191 [equation asinh3] 192 193 For 0.5 > x > [epsilon] the following rearrangement of the primary definition is used: 194 195 [equation asinh4] 196 197 Otherwise evaluation is via the 198 [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/02/ 199 primary definition]: 200 201 [equation asinh4] 202 203 [endsect] [/section:asinh asinh] 204 205 [section:atanh atanh] 206 207 `` 208 #include <boost/math/special_functions/atanh.hpp> 209 `` 210 211 template<class T> 212 ``__sf_result`` atanh(const T x); 213 214 template<class T, class ``__Policy``> 215 ``__sf_result`` atanh(const T x, const ``__Policy``&); 216 217 Computes the reciprocal of 218 [link math_toolkit.inv_hyper.inv_hyper_over 219 the hyperbolic tangent function], at x. 220 221 [optional_policy] 222 223 If x is in the range 224 __form3 225 or in the range 226 __form4 227 then returns the result of __domain_error. 228 229 If x is in the range 230 __form5, 231 then the result of -__overflow_error is returned, with 232 __form6 233 denoting `std::numeric_limits<T>::epsilon()`. 234 235 If x is in the range 236 __form7, 237 then the result of __overflow_error is returned, with 238 __form6 239 denoting 240 `std::numeric_limits<T>::epsilon()`. 241 242 The return type of this function is computed using the __arg_promotion_rules: 243 the return type is `double` when T is an integer type, and T otherwise. 244 245 [graph atanh] 246 247 [h4 Accuracy] 248 249 Generally accuracy is to within 1 or 2 __epsilon across all supported platforms. 250 251 [h4 Testing] 252 253 This function is tested using a combination of random test values designed to give 254 full function coverage computed at high precision using the "naive" formula: 255 256 [equation atanh1] 257 258 along with a selection of sanity check values 259 computed using functions.wolfram.com to at least 50 decimal digits. 260 261 [h4 Implementation] 262 263 For sufficiently small x we can use the 264 [@http://functions.wolfram.com/ElementaryFunctions/ArcTanh/06/01/03/01/ approximation]: 265 266 [equation atanh2] 267 268 Otherwise the 269 [@http://functions.wolfram.com/ElementaryFunctions/ArcTanh/02/ primary definition]: 270 271 [equation atanh1] 272 273 or its equivalent form: 274 275 [equation atanh3] 276 277 is used. 278 279 [endsect] [/section:atanh atanh] 280 281 [endsect] [/section:inv_hyper Inverse Hyperbolic Functions] 282 283