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 &quot;rolling&quot; 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 &quot;usable window&quot; 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 -- &quot;n choose k&quot; 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 &quot;super-sized&quot; 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 &gt; 0, 0 if x = 0, and -1 if x &lt; 0) and
289 indicator (+1.0 if argument &gt;= 0 and -1.0 if argument &lt; 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">&#169;
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>