Mercurial > hg > de.mpg.mpiwg.itgroup.digilib.plugin
comparison libs/commons-math-2.1/docs/userguide/utilities.html @ 10:5f2c5fb36e93
commons-math-2.1 added
author | dwinter |
---|---|
date | Tue, 04 Jan 2011 10:00:53 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
9:e63a64652f4d | 10:5f2c5fb36e93 |
---|---|
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 <html xmlns="http://www.w3.org/1999/xhtml"> | |
14 <head> | |
15 <title>Math - The Commons Math User Guide - Utilites</title> | |
16 <style type="text/css" media="all"> | |
17 @import url("../css/maven-base.css"); | |
18 @import url("../css/maven-theme.css"); | |
19 @import url("../css/site.css"); | |
20 </style> | |
21 <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> | |
22 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> | |
23 </head> | |
24 <body class="composite"> | |
25 <div id="banner"> | |
26 <span id="bannerLeft"> | |
27 | |
28 Commons Math User Guide | |
29 | |
30 </span> | |
31 <div class="clear"> | |
32 <hr/> | |
33 </div> | |
34 </div> | |
35 <div id="breadcrumbs"> | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 <div class="xright"> | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 </div> | |
53 <div class="clear"> | |
54 <hr/> | |
55 </div> | |
56 </div> | |
57 <div id="leftColumn"> | |
58 <div id="navcolumn"> | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 <h5>User Guide</h5> | |
68 <ul> | |
69 | |
70 <li class="none"> | |
71 <a href="../userguide/index.html">Contents</a> | |
72 </li> | |
73 | |
74 <li class="none"> | |
75 <a href="../userguide/overview.html">Overview</a> | |
76 </li> | |
77 | |
78 <li class="none"> | |
79 <a href="../userguide/stat.html">Statistics</a> | |
80 </li> | |
81 | |
82 <li class="none"> | |
83 <a href="../userguide/random.html">Data Generation</a> | |
84 </li> | |
85 | |
86 <li class="none"> | |
87 <a href="../userguide/linear.html">Linear Algebra</a> | |
88 </li> | |
89 | |
90 <li class="none"> | |
91 <a href="../userguide/analysis.html">Numerical Analysis</a> | |
92 </li> | |
93 | |
94 <li class="none"> | |
95 <a href="../userguide/special.html">Special Functions</a> | |
96 </li> | |
97 | |
98 <li class="none"> | |
99 <strong>Utilities</strong> | |
100 </li> | |
101 | |
102 <li class="none"> | |
103 <a href="../userguide/complex.html">Complex Numbers</a> | |
104 </li> | |
105 | |
106 <li class="none"> | |
107 <a href="../userguide/distribution.html">Distributions</a> | |
108 </li> | |
109 | |
110 <li class="none"> | |
111 <a href="../userguide/fraction.html">Fractions</a> | |
112 </li> | |
113 | |
114 <li class="none"> | |
115 <a href="../userguide/transform.html">Transform Methods</a> | |
116 </li> | |
117 | |
118 <li class="none"> | |
119 <a href="../userguide/geometry.html">3D Geometry</a> | |
120 </li> | |
121 | |
122 <li class="none"> | |
123 <a href="../userguide/optimization.html">Optimization</a> | |
124 </li> | |
125 | |
126 <li class="none"> | |
127 <a href="../userguide/ode.html">Ordinary Differential Equations</a> | |
128 </li> | |
129 | |
130 <li class="none"> | |
131 <a href="../userguide/genetics.html">Genetic Algorithms</a> | |
132 </li> | |
133 </ul> | |
134 <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> | |
135 <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img> | |
136 </a> | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 </div> | |
146 </div> | |
147 <div id="bodyColumn"> | |
148 <div id="contentBox"> | |
149 <div class="section"><h2><a name="a6_Utilities"></a>6 Utilities</h2> | |
150 <div class="section"><h3><a name="a6.1_Overview"></a>6.1 Overview</h3> | |
151 <p> | |
152 The <a href="../apidocs/org/apache/commons/math/util/package-summary.html"> | |
153 org.apache.commons.math.util</a> package collects a group of array utilities, | |
154 value transformers, and numerical routines used by implementation classes in | |
155 commons-math. | |
156 </p> | |
157 </div> | |
158 <div class="section"><h3><a name="a6.2_Double_array_utilities"></a>6.2 Double array utilities</h3> | |
159 <p> | |
160 To maintain statistics based on a "rolling" window of values, a resizable | |
161 array implementation was developed and is provided for reuse in the | |
162 <code>util</code> package. The core functionality provided is described in | |
163 the documentation for the interface, | |
164 <a href="../apidocs/org/apache/commons/math/util/DoubleArray.html"> | |
165 org.apache.commons.math.util.DoubleArray.</a> This interface adds one | |
166 method, <code>addElementRolling(double)</code> to basic list accessors. | |
167 The <code>addElementRolling</code> method adds an element | |
168 (the actual parameter) to the end of the list and removes the first element | |
169 in the list. | |
170 </p> | |
171 <p> | |
172 The <a href="../apidocs/org/apache/commons/math/util/ResizableDoubleArray.html"> | |
173 org.apache.commons.math.util.ResizableDoubleArray</a> class provides a | |
174 configurable, array-backed implementation of the <code>DoubleArray</code> | |
175 interface. When <code>addElementRolling</code> is invoked, the underlying | |
176 array is expanded if necessary, the new element is added to the end of the | |
177 array and the "usable window" of the array is moved forward, so that | |
178 the first element is effectively discarded, what was the second becomes the | |
179 first, and so on. To efficiently manage storage, two maintenance | |
180 operations need to be periodically performed -- orphaned elements at the | |
181 beginning of the array need to be reclaimed and space for new elements at | |
182 the end needs to be created. Both of these operations are handled | |
183 automatically, with frequency / effect driven by the configuration | |
184 properties <code>expansionMode</code>, <code>expansionFactor</code> and | |
185 <code>contractionCriteria.</code> See | |
186 <a href="../apidocs/org/apache/commons/math/util/ResizableDoubleArray.html"> | |
187 ResizableDoubleArray</a> | |
188 for details. | |
189 </p> | |
190 </div> | |
191 <div class="section"><h3><a name="a6.3_intdouble_hash_map"></a>6.3 int/double hash map</h3> | |
192 <p> | |
193 The <a href="../apidocs/org/apache/commons/math/util/OpenIntToDoubleHashMap.html"> | |
194 org.apache.commons.math.util.OpenIntToDoubleHashMap</a> class provides a specialized | |
195 hash map implementation for int/double. This implementation has a much smaller memory | |
196 overhead than standard <code>java.util.HashMap</code> class. It uses open addressing | |
197 and primitive arrays, which greatly reduces the number of intermediate objects and | |
198 improve data locality. | |
199 </p> | |
200 </div> | |
201 <div class="section"><h3><a name="a6.4_Continued_Fractions"></a>6.4 Continued Fractions</h3> | |
202 <p> | |
203 The <a href="../apidocs/org/apache/commons/math/util/ContinuedFraction.html"> | |
204 org.apache.commons.math.util.ContinuedFraction</a> class provides a generic | |
205 way to create and evaluate continued fractions. The easiest way to create a | |
206 continued fraction is to subclass <code>ContinuedFraction</code> and | |
207 override the <code>getA</code> and <code>getB</code> methods which return | |
208 the continued fraction terms. The precise definition of these terms is | |
209 explained in <a href="http://mathworld.wolfram.com/ContinuedFraction.html" class="externalLink"> | |
210 Continued Fraction, equation (1)</a> from MathWorld. | |
211 </p> | |
212 <p> | |
213 As an example, the constant Pi could be computed using the continued fraction | |
214 defined at <a href="http://functions.wolfram.com/Constants/Pi/10/0002/" class="externalLink"> | |
215 http://functions.wolfram.com/Constants/Pi/10/0002/</a>. The following | |
216 anonymous class provides the implementation: | |
217 <div class="source"><pre>ContinuedFraction c = new ContinuedFraction() { | |
218 public double getA(int n, double x) { | |
219 switch(n) { | |
220 case 0: return 3.0; | |
221 default: return 6.0; | |
222 } | |
223 } | |
224 | |
225 public double getB(int n, double x) { | |
226 double y = (2.0 * n) - 1.0; | |
227 return y * y; | |
228 } | |
229 }</pre> | |
230 </div> | |
231 </p> | |
232 <p> | |
233 Then, to evalute Pi, simply call any of the <code>evalute</code> methods | |
234 (Note, the point of evalution in this example is meaningless since Pi is a | |
235 constant). | |
236 </p> | |
237 <p> | |
238 For a more practical use of continued fractions, consider the exponential | |
239 function with the continued fraction definition of | |
240 <a href="http://functions.wolfram.com/ElementaryFunctions/Exp/10/" class="externalLink"> | |
241 http://functions.wolfram.com/ElementaryFunctions/Exp/10/</a>. The | |
242 following anonymous class provides its implementation: | |
243 <div class="source"><pre>ContinuedFraction c = new ContinuedFraction() { | |
244 public double getA(int n, double x) { | |
245 if (n % 2 == 0) { | |
246 switch(n) { | |
247 case 0: return 1.0; | |
248 default: return 2.0; | |
249 } | |
250 } else { | |
251 return n; | |
252 } | |
253 } | |
254 | |
255 public double getB(int n, double x) { | |
256 if (n % 2 == 0) { | |
257 return -x; | |
258 } else { | |
259 return x; | |
260 } | |
261 } | |
262 }</pre> | |
263 </div> | |
264 </p> | |
265 <p> | |
266 Then, to evalute <i>e</i><sup>x</sup> for any value x, simply call any of the | |
267 <code>evalute</code> methods. | |
268 </p> | |
269 </div> | |
270 <div class="section"><h3><a name="a6.5_binomial_coefficients_factorials_and_other_common_math_functions"></a>6.5 binomial coefficients, factorials and other common math functions</h3> | |
271 <p> | |
272 A collection of reusable math functions is provided in the | |
273 <a href="../apidocs/org/apache/commons/math/util/MathUtils.html">MathUtils</a> | |
274 utility class. MathUtils currently includes methods to compute the following: <ul><li> | |
275 Binomial coeffiecients -- "n choose k" available as an (exact) long value, | |
276 <code>binomialCoefficient(int, int)</code> for small n, k; as a double, | |
277 <code>binomialCoefficientDouble(int, int)</code> for larger values; and in | |
278 a "super-sized" version, <code>binomialCoefficientLog(int, int)</code> | |
279 that returns the natural logarithm of the value.</li> | |
280 <li> | |
281 Factorials -- like binomial coefficients, these are available as exact long | |
282 values, <code>factorial(int)</code>; doubles, | |
283 <code>factorialDouble(int)</code>; or logs, <code>factorialLog(int)</code>. </li> | |
284 <li> | |
285 Hyperbolic sine and cosine functions -- | |
286 <code>cosh(double), sinh(double)</code></li> | |
287 <li> | |
288 sign (+1 if argument > 0, 0 if x = 0, and -1 if x < 0) and | |
289 indicator (+1.0 if argument >= 0 and -1.0 if argument < 0) functions | |
290 for variables of all primitive numeric types.</li> | |
291 <li> | |
292 a hash function, <code>hash(double),</code> returning a long-valued | |
293 hash code for a double value. | |
294 </li> | |
295 <li> | |
296 Convience methods to round floating-point number to arbitrary precision. | |
297 </li> | |
298 <li> | |
299 Least common multiple and greatest common denominator functions. | |
300 </li> | |
301 </ul> | |
302 </p> | |
303 </div> | |
304 </div> | |
305 | |
306 </div> | |
307 </div> | |
308 <div class="clear"> | |
309 <hr/> | |
310 </div> | |
311 <div id="footer"> | |
312 <div class="xright">© | |
313 2003-2010 | |
314 | |
315 | |
316 | |
317 | |
318 | |
319 | |
320 | |
321 | |
322 | |
323 </div> | |
324 <div class="clear"> | |
325 <hr/> | |
326 </div> | |
327 </div> | |
328 </body> | |
329 </html> |