summaryrefslogtreecommitdiff
path: root/doc/html/boost/accumulators/impl/immediate_roll_idp66209616.html
blob: 986345eb24ccf07b1ed6020867b1dfb586dc8928 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Struct template immediate_rolling_variance_impl</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../../../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
<link rel="up" href="../../../accumulators/reference.html#header.boost.accumulators.statistics.rolling_variance_hpp" title="Header &lt;boost/accumulators/statistics/rolling_variance.hpp&gt;">
<link rel="prev" href="lazy_rolling_variance_impl.html" title="Struct template lazy_rolling_variance_impl">
<link rel="next" href="../tag/lazy_rolling_variance.html" title="Struct lazy_rolling_variance">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="lazy_rolling_variance_impl.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../../accumulators/reference.html#header.boost.accumulators.statistics.rolling_variance_hpp"><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="../tag/lazy_rolling_variance.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="refentry">
<a name="boost.accumulators.impl.immediate_roll_idp66209616"></a><div class="titlepage"></div>
<div class="refnamediv">
<h2><span class="refentrytitle">Struct template immediate_rolling_variance_impl</span></h2>
<p>boost::accumulators::impl::immediate_rolling_variance_impl &#8212; Iterative calculation of the rolling variance. </p>
</div>
<h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2>
<div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis"><span class="comment">// In header: &lt;<a class="link" href="../../../accumulators/reference.html#header.boost.accumulators.statistics.rolling_variance_hpp" title="Header &lt;boost/accumulators/statistics/rolling_variance.hpp&gt;">boost/accumulators/statistics/rolling_variance.hpp</a>&gt;

</span><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Sample<span class="special">&gt;</span> 
<span class="keyword">struct</span> <a class="link" href="immediate_roll_idp66209616.html" title="Struct template immediate_rolling_variance_impl">immediate_rolling_variance_impl</a> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">accumulator_base</span> <span class="special">{</span>
  <span class="comment">// types</span>
  <span class="keyword">typedef</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special">&lt;</span> <span class="identifier">Sample</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="special">&gt;</span><span class="special">::</span><span class="identifier">result_type</span> <a name="boost.accumulators.impl.immediate_roll_idp66209616.result_type"></a><span class="identifier">result_type</span><span class="special">;</span>

  <span class="comment">// <a class="link" href="immediate_roll_idp66209616.html#boost.accumulators.impl.immediate_roll_idp66209616construct-copy-destruct">construct/copy/destruct</a></span>
  <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Args<span class="special">&gt;</span> <a class="link" href="immediate_roll_idp66209616.html#idp66255856-bb"><span class="identifier">immediate_rolling_variance_impl</span></a><span class="special">(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="special">)</span><span class="special">;</span>

  <span class="comment">// <a class="link" href="immediate_roll_idp66209616.html#idp66250096-bb">public member functions</a></span>
  <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Args<span class="special">&gt;</span> <span class="keyword">void</span> <a class="link" href="immediate_roll_idp66209616.html#idp66250656-bb"><span class="keyword">operator</span><span class="special">(</span><span class="special">)</span></a><span class="special">(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="special">)</span><span class="special">;</span>
  <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Args<span class="special">&gt;</span> <span class="identifier">result_type</span> <a class="link" href="immediate_roll_idp66209616.html#idp66253040-bb"><span class="identifier">result</span></a><span class="special">(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">// <a class="link" href="immediate_roll_idp66209616.html#idp66257680-bb">private member functions</a></span>
  <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> T<span class="special">&gt;</span> 
    <span class="keyword">void</span> <a class="link" href="immediate_roll_idp66209616.html#idp66258256-bb"><span class="identifier">prevent_underflow</span></a><span class="special">(</span><span class="identifier">T</span> <span class="special">&amp;</span><span class="special">,</span> 
                           <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_arithmetic</span><span class="special">&lt;</span> <span class="identifier">T</span> <span class="special">&gt;</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&gt;</span><span class="special">::</span><span class="identifier">type</span> <span class="special">*</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="special">;</span>
  <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> T<span class="special">&gt;</span> 
    <span class="keyword">void</span> <a class="link" href="immediate_roll_idp66209616.html#idp66261664-bb"><span class="identifier">prevent_underflow</span></a><span class="special">(</span><span class="identifier">T</span> <span class="special">&amp;</span><span class="special">,</span> 
                           <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">disable_if</span><span class="special">&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_arithmetic</span><span class="special">&lt;</span> <span class="identifier">T</span> <span class="special">&gt;</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&gt;</span><span class="special">::</span><span class="identifier">type</span> <span class="special">*</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="special">;</span>
<span class="special">}</span><span class="special">;</span></pre></div>
<div class="refsect1">
<a name="idp105025472"></a><h2>Description</h2>
<p>Iterative calculation of sample variance <span class="inlinemediaobject"><img src="../../../images/accumulators//form_61.png"></span> is done as follows, see also <a href="http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance" target="_top">http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance</a>. For a rolling window of size <span class="inlinemediaobject"><img src="../../../images/accumulators//form_70.png"></span>, for the first <span class="inlinemediaobject"><img src="../../../images/accumulators//form_70.png"></span> samples, the variance is computed according to the formula </p>
<div class="equation">
<a name="idp105034224"></a><p class="title"><b>Equation&#160;1.9.&#160;</b></p>
<div class="equation-contents"><div class="mediaobject" align="center"><img src="../../../images/accumulators//form_75.png" align="middle"></div></div>
</div>
<p><br class="equation-break"> where the sum of squares <span class="inlinemediaobject"><img src="../../../images/accumulators//form_76.png"></span> can be recursively computed as: </p>
<div class="equation">
<a name="idp105039616"></a><p class="title"><b>Equation&#160;1.10.&#160;</b></p>
<div class="equation-contents"><div class="mediaobject" align="center"><img src="../../../images/accumulators//form_77.png" align="middle"></div></div>
</div>
<p><br class="equation-break"> and the estimate of the sample mean as: </p>
<div class="equation">
<a name="idp105042624"></a><p class="title"><b>Equation&#160;1.11.&#160;</b></p>
<div class="equation-contents"><div class="mediaobject" align="center"><img src="../../../images/accumulators//form_78.png" align="middle"></div></div>
</div>
<p><br class="equation-break"> For further samples, when the rolling window is fully filled with data, one has to take into account that the oldest sample <span class="inlinemediaobject"><img src="../../../images/accumulators//form_79.png"></span> is dropped from the window. The sample variance over the window now becomes: </p>
<div class="equation">
<a name="idp105048192"></a><p class="title"><b>Equation&#160;1.12.&#160;</b></p>
<div class="equation-contents"><div class="mediaobject" align="center"><img src="../../../images/accumulators//form_80.png" align="middle"></div></div>
</div>
<p><br class="equation-break"> where the sum of squares <span class="inlinemediaobject"><img src="../../../images/accumulators//form_76.png"></span> now equals: </p>
<div class="equation">
<a name="idp105053600"></a><p class="title"><b>Equation&#160;1.13.&#160;</b></p>
<div class="equation-contents"><div class="mediaobject" align="center"><img src="../../../images/accumulators//form_81.png" align="middle"></div></div>
</div>
<p><br class="equation-break"> and the estimated mean is: </p>
<div class="equation">
<a name="idp105056688"></a><p class="title"><b>Equation&#160;1.14.&#160;</b></p>
<div class="equation-contents"><div class="mediaobject" align="center"><img src="../../../images/accumulators//form_82.png" align="middle"></div></div>
</div>
<p><br class="equation-break"></p>
<p>Note that the sample variance is not defined for <span class="inlinemediaobject"><img src="../../../images/accumulators//form_63.png"></span>. </p>
<div class="refsect2">
<a name="idp105062208"></a><h3>
<a name="boost.accumulators.impl.immediate_roll_idp66209616construct-copy-destruct"></a><code class="computeroutput">immediate_rolling_variance_impl</code> 
        public
       construct/copy/destruct</h3>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Args<span class="special">&gt;</span> <a name="idp66255856-bb"></a><span class="identifier">immediate_rolling_variance_impl</span><span class="special">(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&amp;</span> args<span class="special">)</span><span class="special">;</span></pre></li></ol></div>
</div>
<div class="refsect2">
<a name="idp105072960"></a><h3>
<a name="idp66250096-bb"></a><code class="computeroutput">immediate_rolling_variance_impl</code> public member functions</h3>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem"><pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Args<span class="special">&gt;</span> <span class="keyword">void</span> <a name="idp66250656-bb"></a><span class="keyword">operator</span><span class="special">(</span><span class="special">)</span><span class="special">(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&amp;</span> args<span class="special">)</span><span class="special">;</span></pre></li>
<li class="listitem"><pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Args<span class="special">&gt;</span> <span class="identifier">result_type</span> <a name="idp66253040-bb"></a><span class="identifier">result</span><span class="special">(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&amp;</span> args<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre></li>
</ol></div>
</div>
<div class="refsect2">
<a name="idp105094768"></a><h3>
<a name="idp66257680-bb"></a><code class="computeroutput">immediate_rolling_variance_impl</code> private member functions</h3>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem"><pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> T<span class="special">&gt;</span> 
  <span class="keyword">void</span> <a name="idp66258256-bb"></a><span class="identifier">prevent_underflow</span><span class="special">(</span><span class="identifier">T</span> <span class="special">&amp;</span> non_negative_number<span class="special">,</span> 
                         <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_arithmetic</span><span class="special">&lt;</span> <span class="identifier">T</span> <span class="special">&gt;</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&gt;</span><span class="special">::</span><span class="identifier">type</span> <span class="special">*</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="special">;</span></pre></li>
<li class="listitem"><pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> T<span class="special">&gt;</span> 
  <span class="keyword">void</span> <a name="idp66261664-bb"></a><span class="identifier">prevent_underflow</span><span class="special">(</span><span class="identifier">T</span> <span class="special">&amp;</span> non_arithmetic_quantity<span class="special">,</span> 
                         <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">disable_if</span><span class="special">&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_arithmetic</span><span class="special">&lt;</span> <span class="identifier">T</span> <span class="special">&gt;</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&gt;</span><span class="special">::</span><span class="identifier">type</span> <span class="special">*</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span><span class="special">;</span></pre></li>
</ol></div>
</div>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2006 Eric Niebler<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        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>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="lazy_rolling_variance_impl.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../../accumulators/reference.html#header.boost.accumulators.statistics.rolling_variance_hpp"><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="../tag/lazy_rolling_variance.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>