]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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>'''[space]] | |
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 funtion 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. The hyperbolic cosine is one to one from __form2 | |
60 | onto __form3 (and from __form4 onto __form3); the inverse function we use | |
61 | here is defined on __form3 with range __form2. | |
62 | ||
63 | The inverse of the hyperbolic tangent is called the Argument hyperbolic tangent, | |
64 | and can be computed as [equation special_functions_blurb15]. | |
65 | ||
66 | The inverse of the hyperbolic sine is called the Argument hyperbolic sine, | |
67 | and can be computed (for __form5) as [equation special_functions_blurb17]. | |
68 | ||
69 | The inverse of the hyperbolic cosine is called the Argument hyperbolic cosine, | |
70 | and can be computed as [equation special_functions_blurb18]. | |
71 | ||
72 | [endsect] | |
73 | ||
74 | [section:acosh acosh] | |
75 | ||
76 | `` | |
77 | #include <boost/math/special_functions/acosh.hpp> | |
78 | `` | |
79 | ||
80 | template<class T> | |
81 | ``__sf_result`` acosh(const T x); | |
82 | ||
83 | template<class T, class ``__Policy``> | |
84 | ``__sf_result`` acosh(const T x, const ``__Policy``&); | |
85 | ||
86 | Computes the reciprocal of (the restriction to the range of __form1) | |
87 | [link math_toolkit.inv_hyper.inv_hyper_over | |
88 | the hyperbolic cosine function], at x. Values returned are positive. | |
89 | ||
90 | If x is in the range __form2 then returns the result of __domain_error. | |
91 | ||
92 | The return type of this function is computed using the __arg_promotion_rules: | |
93 | the return type is `double` when T is an integer type, and T otherwise. | |
94 | ||
95 | [optional_policy] | |
96 | ||
97 | [graph acosh] | |
98 | ||
99 | [h4 Accuracy] | |
100 | ||
101 | Generally accuracy is to within 1 or 2 epsilon across all supported platforms. | |
102 | ||
103 | [h4 Testing] | |
104 | ||
105 | This function is tested using a combination of random test values designed to give | |
106 | full function coverage computed at high precision using the "naive" formula: | |
107 | ||
108 | [equation acosh1] | |
109 | ||
110 | along with a selection of sanity check values | |
111 | computed using functions.wolfram.com to at least 50 decimal digits. | |
112 | ||
113 | [h4 Implementation] | |
114 | ||
115 | For sufficiently large x, we can use the | |
116 | [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/06/01/06/01/0001/ | |
117 | approximation]: | |
118 | ||
119 | [equation acosh2] | |
120 | ||
121 | For x sufficiently close to 1 we can use the | |
122 | [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/06/01/04/01/0001/ | |
123 | approximation]: | |
124 | ||
125 | [equation acosh4] | |
126 | ||
127 | Otherwise for x close to 1 we can use the following rearrangement of the | |
128 | primary definition to preserve accuracy: | |
129 | ||
130 | [equation acosh3] | |
131 | ||
132 | Otherwise the | |
133 | [@http://functions.wolfram.com/ElementaryFunctions/ArcCosh/02/ | |
134 | primary definition] is used: | |
135 | ||
136 | [equation acosh1] | |
137 | ||
138 | [endsect] | |
139 | ||
140 | [section:asinh asinh] | |
141 | ||
142 | `` | |
143 | #include <boost/math/special_functions/asinh.hpp> | |
144 | `` | |
145 | ||
146 | template<class T> | |
147 | ``__sf_result`` asinh(const T x); | |
148 | ||
149 | template<class T, class ``__Policy``> | |
150 | ``__sf_result`` asinh(const T x, const ``__Policy``&); | |
151 | ||
152 | Computes the reciprocal of | |
153 | [link math_toolkit.inv_hyper.inv_hyper_over | |
154 | the hyperbolic sine function]. | |
155 | ||
156 | The return type of this function is computed using the __arg_promotion_rules: | |
157 | the return type is `double` when T is an integer type, and T otherwise. | |
158 | ||
159 | [graph asinh] | |
160 | ||
161 | [optional_policy] | |
162 | ||
163 | [h4 Accuracy] | |
164 | ||
165 | Generally accuracy is to within 1 or 2 epsilon across all supported platforms. | |
166 | ||
167 | [h4 Testing] | |
168 | ||
169 | This function is tested using a combination of random test values designed to give | |
170 | full function coverage computed at high precision using the "naive" formula: | |
171 | ||
172 | [equation asinh1] | |
173 | ||
174 | along with a selection of sanity check values | |
175 | computed using functions.wolfram.com to at least 50 decimal digits. | |
176 | ||
177 | [h4 Implementation] | |
178 | ||
179 | For sufficiently large x we can use the | |
180 | [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/06/01/06/01/0001/ | |
181 | approximation]: | |
182 | ||
183 | [equation asinh2] | |
184 | ||
185 | While for very small x we can use the | |
186 | [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/06/01/03/01/0001/ | |
187 | approximation]: | |
188 | ||
189 | [equation asinh3] | |
190 | ||
191 | For 0.5 > x > [epsilon] the following rearrangement of the primary definition is used: | |
192 | ||
193 | [equation asinh4] | |
194 | ||
195 | Otherwise evalution is via the | |
196 | [@http://functions.wolfram.com/ElementaryFunctions/ArcSinh/02/ | |
197 | primary definition]: | |
198 | ||
199 | [equation asinh4] | |
200 | ||
201 | [endsect] | |
202 | ||
203 | [section:atanh atanh] | |
204 | ||
205 | `` | |
206 | #include <boost/math/special_functions/atanh.hpp> | |
207 | `` | |
208 | ||
209 | template<class T> | |
210 | ``__sf_result`` atanh(const T x); | |
211 | ||
212 | template<class T, class ``__Policy``> | |
213 | ``__sf_result`` atanh(const T x, const ``__Policy``&); | |
214 | ||
215 | Computes the reciprocal of | |
216 | [link math_toolkit.inv_hyper.inv_hyper_over | |
217 | the hyperbolic tangent function], at x. | |
218 | ||
219 | [optional_policy] | |
220 | ||
221 | If x is in the range | |
222 | __form3 | |
223 | or in the range | |
224 | __form4 | |
225 | then returns the result of __domain_error. | |
226 | ||
227 | If x is in the range | |
228 | __form5, | |
229 | then the result of -__overflow_error is returned, with | |
230 | __form6[space] | |
231 | denoting numeric_limits<T>::epsilon(). | |
232 | ||
233 | If x is in the range | |
234 | __form7, | |
235 | then the result of __overflow_error is returned, with | |
236 | __form6[space] | |
237 | denoting | |
238 | numeric_limits<T>::epsilon(). | |
239 | ||
240 | The return type of this function is computed using the __arg_promotion_rules: | |
241 | the return type is `double` when T is an integer type, and T otherwise. | |
242 | ||
243 | [graph atanh] | |
244 | ||
245 | [h4 Accuracy] | |
246 | ||
247 | Generally accuracy is to within 1 or 2 epsilon across all supported platforms. | |
248 | ||
249 | [h4 Testing] | |
250 | ||
251 | This function is tested using a combination of random test values designed to give | |
252 | full function coverage computed at high precision using the "naive" formula: | |
253 | ||
254 | [equation atanh1] | |
255 | ||
256 | along with a selection of sanity check values | |
257 | computed using functions.wolfram.com to at least 50 decimal digits. | |
258 | ||
259 | [h4 Implementation] | |
260 | ||
261 | For sufficiently small x we can use the | |
262 | [@http://functions.wolfram.com/ElementaryFunctions/ArcTanh/06/01/03/01/ approximation]: | |
263 | ||
264 | [equation atanh2] | |
265 | ||
266 | Otherwise the | |
267 | [@http://functions.wolfram.com/ElementaryFunctions/ArcTanh/02/ primary definition]: | |
268 | ||
269 | [equation atanh1] | |
270 | ||
271 | or its equivalent form: | |
272 | ||
273 | [equation atanh3] | |
274 | ||
275 | is used. | |
276 | ||
277 | [endsect] | |
278 | ||
279 | [endsect] |