• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Uniform Distribution</title>
5<link rel="stylesheet" href="../../../math.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../../../index.html" title="Math Toolkit 2.12.0">
8<link rel="up" href="../dists.html" title="Distributions">
9<link rel="prev" href="triangular_dist.html" title="Triangular Distribution">
10<link rel="next" href="weibull_dist.html" title="Weibull Distribution">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="triangular_dist.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dists.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="weibull_dist.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h4 class="title">
27<a name="math_toolkit.dist_ref.dists.uniform_dist"></a><a class="link" href="uniform_dist.html" title="Uniform Distribution">Uniform Distribution</a>
28</h4></div></div></div>
29<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">uniform</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
30<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span>
31 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">RealType</span> <span class="special">=</span> <span class="keyword">double</span><span class="special">,</span>
32           <span class="keyword">class</span> <a class="link" href="../../../policy.html" title="Chapter 21. Policies: Controlling Precision, Error Handling etc">Policy</a>   <span class="special">=</span> <a class="link" href="../../pol_ref/pol_ref_ref.html" title="Policy Class Reference">policies::policy&lt;&gt;</a> <span class="special">&gt;</span>
33 <span class="keyword">class</span> <span class="identifier">uniform_distribution</span><span class="special">;</span>
34
35 <span class="keyword">typedef</span> <span class="identifier">uniform_distribution</span><span class="special">&lt;&gt;</span> <span class="identifier">uniform</span><span class="special">;</span>
36
37 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">RealType</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../../policy.html" title="Chapter 21. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&gt;</span>
38 <span class="keyword">class</span> <span class="identifier">uniform_distribution</span>
39 <span class="special">{</span>
40 <span class="keyword">public</span><span class="special">:</span>
41    <span class="keyword">typedef</span> <span class="identifier">RealType</span> <span class="identifier">value_type</span><span class="special">;</span>
42
43    <span class="identifier">uniform_distribution</span><span class="special">(</span><span class="identifier">RealType</span> <span class="identifier">lower</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">RealType</span> <span class="identifier">upper</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> <span class="comment">// Constructor.</span>
44       <span class="special">:</span> <span class="identifier">m_lower</span><span class="special">(</span><span class="identifier">lower</span><span class="special">),</span> <span class="identifier">m_upper</span><span class="special">(</span><span class="identifier">upper</span><span class="special">)</span> <span class="comment">// Default is standard uniform distribution.</span>
45    <span class="comment">// Accessor functions.</span>
46    <span class="identifier">RealType</span> <span class="identifier">lower</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
47    <span class="identifier">RealType</span> <span class="identifier">upper</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
48 <span class="special">};</span> <span class="comment">// class uniform_distribution</span>
49
50<span class="special">}}</span> <span class="comment">// namespaces</span>
51</pre>
52<p>
53          The uniform distribution, also known as a rectangular distribution, is
54          a probability distribution that has constant probability.
55        </p>
56<p>
57          The <a href="http://en.wikipedia.org/wiki/Uniform_distribution_%28continuous%29" target="_top">continuous
58          uniform distribution</a> is a distribution with the <a href="http://en.wikipedia.org/wiki/Probability_density_function" target="_top">probability
59          density function</a>:
60        </p>
61<div class="blockquote"><blockquote class="blockquote"><p>
62            <span class="serif_italic">f(x) =1 / (upper - lower)   for lower &lt;
63            x &lt; upper</span>
64          </p></blockquote></div>
65<div class="blockquote"><blockquote class="blockquote"><p>
66            <span class="serif_italic">f(x) =zero   for x &lt; lower or x &gt; upper</span>
67          </p></blockquote></div>
68<p>
69          and in this implementation:
70        </p>
71<div class="blockquote"><blockquote class="blockquote"><p>
72            <span class="serif_italic">1 / (upper - lower)   for x = lower or x =
73            upper</span>
74          </p></blockquote></div>
75<p>
76          The choice of <span class="emphasis"><em>x = lower</em></span> or <span class="emphasis"><em>x = upper</em></span>
77          is made because statistical use of this distribution judged is most likely:
78          the method of maximum likelihood uses this definition.
79        </p>
80<p>
81          There is also a <a href="http://en.wikipedia.org/wiki/Discrete_uniform_distribution" target="_top"><span class="bold"><strong>discrete</strong></span> uniform distribution</a>.
82        </p>
83<p>
84          Parameters lower and upper can be any finite value.
85        </p>
86<p>
87          The <a href="http://en.wikipedia.org/wiki/Random_variate" target="_top">random variate</a>
88          <span class="emphasis"><em>x</em></span> must also be finite, and is supported <span class="emphasis"><em>lower
89          &lt;= x &lt;= upper</em></span>.
90        </p>
91<p>
92          The lower parameter is also called the <a href="http://www.itl.nist.gov/div898/handbook/eda/section3/eda364.htm" target="_top">location
93          parameter</a>, <a href="http://en.wikipedia.org/wiki/Location_parameter" target="_top">that
94          is where the origin of a plot will lie</a>, and (upper - lower) is
95          also called the <a href="http://en.wikipedia.org/wiki/Scale_parameter" target="_top">scale
96          parameter</a>.
97        </p>
98<p>
99          The following graph illustrates how the <a href="http://en.wikipedia.org/wiki/Probability_density_function" target="_top">probability
100          density function PDF</a> varies with the shape parameter:
101        </p>
102<div class="blockquote"><blockquote class="blockquote"><p>
103            <span class="inlinemediaobject"><img src="../../../../graphs/uniform_pdf.svg" align="middle"></span>
104
105          </p></blockquote></div>
106<p>
107          Likewise for the CDF:
108        </p>
109<div class="blockquote"><blockquote class="blockquote"><p>
110            <span class="inlinemediaobject"><img src="../../../../graphs/uniform_cdf.svg" align="middle"></span>
111
112          </p></blockquote></div>
113<h5>
114<a name="math_toolkit.dist_ref.dists.uniform_dist.h0"></a>
115          <span class="phrase"><a name="math_toolkit.dist_ref.dists.uniform_dist.member_functions"></a></span><a class="link" href="uniform_dist.html#math_toolkit.dist_ref.dists.uniform_dist.member_functions">Member
116          Functions</a>
117        </h5>
118<pre class="programlisting"><span class="identifier">uniform_distribution</span><span class="special">(</span><span class="identifier">RealType</span> <span class="identifier">lower</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">RealType</span> <span class="identifier">upper</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span>
119</pre>
120<p>
121          Constructs a <a href="http://en.wikipedia.org/wiki/uniform_distribution" target="_top">uniform
122          distribution</a> with lower <span class="emphasis"><em>lower</em></span> (a) and upper
123          <span class="emphasis"><em>upper</em></span> (b).
124        </p>
125<p>
126          Requires that the <span class="emphasis"><em>lower</em></span> and <span class="emphasis"><em>upper</em></span>
127          parameters are both finite; otherwise if infinity or NaN then calls <a class="link" href="../../error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a>.
128        </p>
129<pre class="programlisting"><span class="identifier">RealType</span> <span class="identifier">lower</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
130</pre>
131<p>
132          Returns the <span class="emphasis"><em>lower</em></span> parameter of this distribution.
133        </p>
134<pre class="programlisting"><span class="identifier">RealType</span> <span class="identifier">upper</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
135</pre>
136<p>
137          Returns the <span class="emphasis"><em>upper</em></span> parameter of this distribution.
138        </p>
139<h5>
140<a name="math_toolkit.dist_ref.dists.uniform_dist.h1"></a>
141          <span class="phrase"><a name="math_toolkit.dist_ref.dists.uniform_dist.non_member_accessors"></a></span><a class="link" href="uniform_dist.html#math_toolkit.dist_ref.dists.uniform_dist.non_member_accessors">Non-member
142          Accessors</a>
143        </h5>
144<p>
145          All the <a class="link" href="../nmp.html" title="Non-Member Properties">usual non-member accessor
146          functions</a> that are generic to all distributions are supported:
147          <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.cdf">Cumulative Distribution Function</a>,
148          <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.pdf">Probability Density Function</a>,
149          <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.quantile">Quantile</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.hazard">Hazard Function</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.chf">Cumulative Hazard Function</a>,
150          <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.mean">mean</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.median">median</a>,
151          <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.mode">mode</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.variance">variance</a>,
152          <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.sd">standard deviation</a>,
153          <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.skewness">skewness</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.kurtosis">kurtosis</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.kurtosis_excess">kurtosis_excess</a>,
154          <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.range">range</a> and <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.support">support</a>.
155        </p>
156<p>
157          The domain of the random variable is any finite value, but the supported
158          range is only <span class="emphasis"><em>lower</em></span> &lt;= x &lt;= <span class="emphasis"><em>upper</em></span>.
159        </p>
160<h5>
161<a name="math_toolkit.dist_ref.dists.uniform_dist.h2"></a>
162          <span class="phrase"><a name="math_toolkit.dist_ref.dists.uniform_dist.accuracy"></a></span><a class="link" href="uniform_dist.html#math_toolkit.dist_ref.dists.uniform_dist.accuracy">Accuracy</a>
163        </h5>
164<p>
165          The uniform distribution is implemented with simple arithmetic operators
166          and so should have errors within an epsilon or two.
167        </p>
168<h5>
169<a name="math_toolkit.dist_ref.dists.uniform_dist.h3"></a>
170          <span class="phrase"><a name="math_toolkit.dist_ref.dists.uniform_dist.implementation"></a></span><a class="link" href="uniform_dist.html#math_toolkit.dist_ref.dists.uniform_dist.implementation">Implementation</a>
171        </h5>
172<p>
173          In the following table a is the <span class="emphasis"><em>lower</em></span> parameter of
174          the distribution, b is the <span class="emphasis"><em>upper</em></span> parameter, <span class="emphasis"><em>x</em></span>
175          is the random variate, <span class="emphasis"><em>p</em></span> is the probability and <span class="emphasis"><em>q
176          = 1-p</em></span>.
177        </p>
178<div class="informaltable"><table class="table">
179<colgroup>
180<col>
181<col>
182</colgroup>
183<thead><tr>
184<th>
185                  <p>
186                    Function
187                  </p>
188                </th>
189<th>
190                  <p>
191                    Implementation Notes
192                  </p>
193                </th>
194</tr></thead>
195<tbody>
196<tr>
197<td>
198                  <p>
199                    pdf
200                  </p>
201                </td>
202<td>
203                  <p>
204                    Using the relation: pdf = 0 for x &lt; a, 1 / (b - a) for a &lt;=
205                    x &lt;= b, 0 for x &gt; b
206                  </p>
207                </td>
208</tr>
209<tr>
210<td>
211                  <p>
212                    cdf
213                  </p>
214                </td>
215<td>
216                  <p>
217                    Using the relation: cdf = 0 for x &lt; a, (x - a) / (b - a) for
218                    a &lt;= x &lt;= b, 1 for x &gt; b
219                  </p>
220                </td>
221</tr>
222<tr>
223<td>
224                  <p>
225                    cdf complement
226                  </p>
227                </td>
228<td>
229                  <p>
230                    Using the relation: q = 1 - p, (b - x) / (b - a)
231                  </p>
232                </td>
233</tr>
234<tr>
235<td>
236                  <p>
237                    quantile
238                  </p>
239                </td>
240<td>
241                  <p>
242                    Using the relation: x = p * (b - a) + a;
243                  </p>
244                </td>
245</tr>
246<tr>
247<td>
248                  <p>
249                    quantile from the complement
250                  </p>
251                </td>
252<td>
253                  <p>
254                    x = -q * (b - a) + b
255                  </p>
256                </td>
257</tr>
258<tr>
259<td>
260                  <p>
261                    mean
262                  </p>
263                </td>
264<td>
265                  <p>
266                    (a + b) / 2
267                  </p>
268                </td>
269</tr>
270<tr>
271<td>
272                  <p>
273                    variance
274                  </p>
275                </td>
276<td>
277                  <p>
278                    (b - a) <sup>2</sup> / 12
279                  </p>
280                </td>
281</tr>
282<tr>
283<td>
284                  <p>
285                    mode
286                  </p>
287                </td>
288<td>
289                  <p>
290                    any value in [a, b] but a is chosen. (Would NaN be better?)
291                  </p>
292                </td>
293</tr>
294<tr>
295<td>
296                  <p>
297                    skewness
298                  </p>
299                </td>
300<td>
301                  <p>
302                    0
303                  </p>
304                </td>
305</tr>
306<tr>
307<td>
308                  <p>
309                    kurtosis excess
310                  </p>
311                </td>
312<td>
313                  <p>
314                    -6/5 = -1.2 exactly. (kurtosis - 3)
315                  </p>
316                </td>
317</tr>
318<tr>
319<td>
320                  <p>
321                    kurtosis
322                  </p>
323                </td>
324<td>
325                  <p>
326                    9/5
327                  </p>
328                </td>
329</tr>
330</tbody>
331</table></div>
332<h5>
333<a name="math_toolkit.dist_ref.dists.uniform_dist.h4"></a>
334          <span class="phrase"><a name="math_toolkit.dist_ref.dists.uniform_dist.references"></a></span><a class="link" href="uniform_dist.html#math_toolkit.dist_ref.dists.uniform_dist.references">References</a>
335        </h5>
336<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
337<li class="listitem">
338              <a href="http://en.wikipedia.org/wiki/Uniform_distribution_%28continuous%29" target="_top">Wikipedia
339              continuous uniform distribution</a>
340            </li>
341<li class="listitem">
342              <a href="http://mathworld.wolfram.com/UniformDistribution.html" target="_top">Weisstein,
343              Weisstein, Eric W. "Uniform Distribution." From MathWorld--A
344              Wolfram Web Resource.</a>
345            </li>
346<li class="listitem">
347              <a href="http://www.itl.nist.gov/div898/handbook/eda/section3/eda3662.htm" target="_top">http://www.itl.nist.gov/div898/handbook/eda/section3/eda3662.htm</a>
348            </li>
349</ul></div>
350</div>
351<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
352<td align="left"></td>
353<td align="right"><div class="copyright-footer">Copyright © 2006-2019 Nikhar
354      Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos,
355      Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan
356      Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg,
357      Daryle Walker and Xiaogang Zhang<p>
358        Distributed under the Boost Software License, Version 1.0. (See accompanying
359        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
360      </p>
361</div></td>
362</tr></table>
363<hr>
364<div class="spirit-nav">
365<a accesskey="p" href="triangular_dist.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dists.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="weibull_dist.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
366</div>
367</body>
368</html>
369