source: sasview/_modules/sas/data_util/err1d.html @ a462c6a

gh-pages
Last change on this file since a462c6a was a462c6a, checked in by ajj, 9 years ago

Rebuild to fix index and modules docs

  • Property mode set to 100644
File size: 19.6 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>sas.data_util.err1d &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../../index.html" />
28    <link rel="up" title="Module code" href="../../index.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
42      </ul>
43    </div> 
44
45    <div class="document">
46      <div class="documentwrapper">
47        <div class="bodywrapper">
48          <div class="body">
49           
50  <h1>Source code for sas.data_util.err1d</h1><div class="highlight"><pre>
51<span class="c"># This program is public domain</span>
52<span class="sd">&quot;&quot;&quot;</span>
53<span class="sd">Error propogation algorithms for simple arithmetic</span>
54
55<span class="sd">Warning: like the underlying numpy library, the inplace operations</span>
56<span class="sd">may return values of the wrong type if some of the arguments are</span>
57<span class="sd">integers, so be sure to create them with floating point inputs.</span>
58<span class="sd">&quot;&quot;&quot;</span>
59<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span>  <span class="c"># Get true division</span>
60<span class="kn">import</span> <span class="nn">numpy</span>
61
62
63<div class="viewcode-block" id="div"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.div">[docs]</a><span class="k">def</span> <span class="nf">div</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">varY</span><span class="p">):</span>
64    <span class="sd">&quot;&quot;&quot;Division with error propagation&quot;&quot;&quot;</span>
65    <span class="c"># Direct algorithm:</span>
66    <span class="c">#   Z = X/Y</span>
67    <span class="c">#   varZ = (varX/X**2 + varY/Y**2) * Z**2</span>
68    <span class="c">#        = (varX + varY * Z**2) / Y**2</span>
69    <span class="c"># Indirect algorithm to minimize intermediates</span>
70    <span class="n">Z</span> <span class="o">=</span> <span class="n">X</span><span class="o">/</span><span class="n">Y</span>      <span class="c"># truediv =&gt; Z is a float</span>
71    <span class="n">varZ</span> <span class="o">=</span> <span class="n">Z</span><span class="o">**</span><span class="mi">2</span>  <span class="c"># Z is a float =&gt; varZ is a float</span>
72    <span class="n">varZ</span> <span class="o">*=</span> <span class="n">varY</span>
73    <span class="n">varZ</span> <span class="o">+=</span> <span class="n">varX</span>
74    <span class="n">T</span> <span class="o">=</span> <span class="n">Y</span><span class="o">**</span><span class="mi">2</span>     <span class="c"># Doesn&#39;t matter if T is float or int</span>
75    <span class="n">varZ</span> <span class="o">/=</span> <span class="n">T</span>
76    <span class="k">return</span> <span class="n">Z</span><span class="p">,</span> <span class="n">varZ</span>
77
78</div>
79<div class="viewcode-block" id="mul"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.mul">[docs]</a><span class="k">def</span> <span class="nf">mul</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">varY</span><span class="p">):</span>
80    <span class="sd">&quot;&quot;&quot;Multiplication with error propagation&quot;&quot;&quot;</span>
81    <span class="c"># Direct algorithm:</span>
82    <span class="n">Z</span> <span class="o">=</span> <span class="n">X</span> <span class="o">*</span> <span class="n">Y</span>
83    <span class="n">varZ</span> <span class="o">=</span> <span class="n">Y</span><span class="o">**</span><span class="mi">2</span> <span class="o">*</span> <span class="n">varX</span> <span class="o">+</span> <span class="n">X</span><span class="o">**</span><span class="mi">2</span> <span class="o">*</span> <span class="n">varY</span>
84    <span class="c"># Indirect algorithm won&#39;t ensure floating point results</span>
85    <span class="c">#   varZ = Y**2</span>
86    <span class="c">#   varZ *= varX</span>
87    <span class="c">#   Z = X**2   # Using Z to hold the temporary</span>
88    <span class="c">#   Z *= varY</span>
89    <span class="c">#   varZ += Z</span>
90    <span class="c">#   Z[:] = X</span>
91    <span class="c">#   Z *= Y</span>
92    <span class="k">return</span> <span class="n">Z</span><span class="p">,</span> <span class="n">varZ</span>
93
94</div>
95<div class="viewcode-block" id="sub"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.sub">[docs]</a><span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">varY</span><span class="p">):</span>
96    <span class="sd">&quot;&quot;&quot;Subtraction with error propagation&quot;&quot;&quot;</span>
97    <span class="n">Z</span> <span class="o">=</span> <span class="n">X</span> <span class="o">-</span> <span class="n">Y</span>
98    <span class="n">varZ</span> <span class="o">=</span> <span class="n">varX</span> <span class="o">+</span> <span class="n">varY</span>
99    <span class="k">return</span> <span class="n">Z</span><span class="p">,</span> <span class="n">varZ</span>
100
101</div>
102<div class="viewcode-block" id="add"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.add">[docs]</a><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">varY</span><span class="p">):</span>
103    <span class="sd">&quot;&quot;&quot;Addition with error propagation&quot;&quot;&quot;</span>
104    <span class="n">Z</span> <span class="o">=</span> <span class="n">X</span> <span class="o">+</span> <span class="n">Y</span>
105    <span class="n">varZ</span> <span class="o">=</span> <span class="n">varX</span> <span class="o">+</span> <span class="n">varY</span>
106    <span class="k">return</span> <span class="n">Z</span><span class="p">,</span> <span class="n">varZ</span>
107
108</div>
109<div class="viewcode-block" id="exp"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.exp">[docs]</a><span class="k">def</span> <span class="nf">exp</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">):</span>
110    <span class="sd">&quot;&quot;&quot;Exponentiation with error propagation&quot;&quot;&quot;</span>
111    <span class="n">Z</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>
112    <span class="n">varZ</span> <span class="o">=</span> <span class="n">varX</span> <span class="o">*</span> <span class="n">Z</span><span class="o">**</span><span class="mi">2</span>
113    <span class="k">return</span> <span class="n">Z</span><span class="p">,</span> <span class="n">varZ</span>
114
115</div>
116<div class="viewcode-block" id="log"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.log">[docs]</a><span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">):</span>
117    <span class="sd">&quot;&quot;&quot;Logarithm with error propagation&quot;&quot;&quot;</span>
118    <span class="n">Z</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>
119    <span class="n">varZ</span> <span class="o">=</span> <span class="n">varX</span> <span class="o">/</span> <span class="n">X</span><span class="o">**</span><span class="mi">2</span>
120    <span class="k">return</span> <span class="n">Z</span><span class="p">,</span> <span class="n">varZ</span>
121
122<span class="c"># Confirm this formula before using it</span>
123<span class="c"># def pow(X,varX, Y,varY):</span>
124<span class="c">#    Z = X**Y</span>
125<span class="c">#    varZ = (Y**2 * varX/X**2 + varY * numpy.log(X)**2) * Z**2</span>
126<span class="c">#    return Z,varZ</span>
127<span class="c">#</span>
128
129</div>
130<div class="viewcode-block" id="pow"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.pow">[docs]</a><span class="k">def</span> <span class="nf">pow</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
131    <span class="sd">&quot;&quot;&quot;X**n with error propagation&quot;&quot;&quot;</span>
132    <span class="c"># Direct algorithm</span>
133    <span class="c">#   Z = X**n</span>
134    <span class="c">#   varZ = n*n * varX/X**2 * Z**2</span>
135    <span class="c"># Indirect algorithm to minimize intermediates</span>
136    <span class="n">Z</span> <span class="o">=</span> <span class="n">X</span><span class="o">**</span><span class="n">n</span>
137    <span class="n">varZ</span> <span class="o">=</span> <span class="n">varX</span> <span class="o">/</span> <span class="n">X</span>
138    <span class="n">varZ</span> <span class="o">/=</span> <span class="n">X</span>
139    <span class="n">varZ</span> <span class="o">*=</span> <span class="n">Z</span>
140    <span class="n">varZ</span> <span class="o">*=</span> <span class="n">Z</span>
141    <span class="n">varZ</span> <span class="o">*=</span> <span class="n">n</span><span class="o">**</span><span class="mi">2</span>
142    <span class="k">return</span> <span class="n">Z</span><span class="p">,</span> <span class="n">varZ</span>
143
144</div>
145<div class="viewcode-block" id="div_inplace"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.div_inplace">[docs]</a><span class="k">def</span> <span class="nf">div_inplace</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">varY</span><span class="p">):</span>
146    <span class="sd">&quot;&quot;&quot;In-place division with error propagation&quot;&quot;&quot;</span>
147    <span class="c"># Z = X/Y</span>
148    <span class="c"># varZ = (varX + varY * (X/Y)**2) / Y**2 = (varX + varY * Z**2) / Y**2</span>
149    <span class="n">X</span> <span class="o">/=</span> <span class="n">Y</span>     <span class="c"># X now has Z = X/Y</span>
150    <span class="n">T</span> <span class="o">=</span> <span class="n">X</span><span class="o">**</span><span class="mi">2</span>   <span class="c"># create T with Z**2</span>
151    <span class="n">T</span> <span class="o">*=</span> <span class="n">varY</span>  <span class="c"># T now has varY * Z**2</span>
152    <span class="n">varX</span> <span class="o">+=</span> <span class="n">T</span>  <span class="c"># varX now has varX + varY*Z**2</span>
153    <span class="k">del</span> <span class="n">T</span>   <span class="c"># may want to use T[:] = Y for vectors</span>
154    <span class="n">T</span> <span class="o">=</span> <span class="n">Y</span>   <span class="c"># reuse T for Y</span>
155    <span class="n">T</span> <span class="o">**=</span> <span class="mi">2</span>     <span class="c"># T now has Y**2</span>
156    <span class="n">varX</span> <span class="o">/=</span> <span class="n">T</span>  <span class="c"># varX now has varZ</span>
157    <span class="k">return</span> <span class="n">X</span><span class="p">,</span> <span class="n">varX</span>
158
159</div>
160<div class="viewcode-block" id="mul_inplace"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.mul_inplace">[docs]</a><span class="k">def</span> <span class="nf">mul_inplace</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">varY</span><span class="p">):</span>
161    <span class="sd">&quot;&quot;&quot;In-place multiplication with error propagation&quot;&quot;&quot;</span>
162    <span class="c"># Z = X * Y</span>
163    <span class="c"># varZ = Y**2 * varX + X**2 * varY</span>
164    <span class="n">T</span> <span class="o">=</span> <span class="n">Y</span><span class="o">**</span><span class="mi">2</span>   <span class="c"># create T with Y**2</span>
165    <span class="n">varX</span> <span class="o">*=</span> <span class="n">T</span>  <span class="c"># varX now has Y**2 * varX</span>
166    <span class="k">del</span> <span class="n">T</span>   <span class="c"># may want to use T[:] = X for vectors</span>
167    <span class="n">T</span> <span class="o">=</span> <span class="n">X</span>   <span class="c"># reuse T for X**2 * varY</span>
168    <span class="n">T</span> <span class="o">**=</span><span class="mi">2</span>     <span class="c"># T now has X**2</span>
169    <span class="n">T</span> <span class="o">*=</span> <span class="n">varY</span>  <span class="c"># T now has X**2 * varY</span>
170    <span class="n">varX</span> <span class="o">+=</span> <span class="n">T</span>  <span class="c"># varX now has varZ</span>
171    <span class="n">X</span> <span class="o">*=</span> <span class="n">Y</span>     <span class="c"># X now has Z</span>
172    <span class="k">return</span> <span class="n">X</span><span class="p">,</span> <span class="n">varX</span>
173
174</div>
175<div class="viewcode-block" id="sub_inplace"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.sub_inplace">[docs]</a><span class="k">def</span> <span class="nf">sub_inplace</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">varY</span><span class="p">):</span>
176    <span class="sd">&quot;&quot;&quot;In-place subtraction with error propagation&quot;&quot;&quot;</span>
177    <span class="c"># Z = X - Y</span>
178    <span class="c"># varZ = varX + varY</span>
179    <span class="n">X</span> <span class="o">-=</span> <span class="n">Y</span>
180    <span class="n">varX</span> <span class="o">+=</span> <span class="n">varY</span>
181    <span class="k">return</span> <span class="n">X</span><span class="p">,</span> <span class="n">varX</span>
182
183</div>
184<div class="viewcode-block" id="add_inplace"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.add_inplace">[docs]</a><span class="k">def</span> <span class="nf">add_inplace</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">varY</span><span class="p">):</span>
185    <span class="sd">&quot;&quot;&quot;In-place addition with error propagation&quot;&quot;&quot;</span>
186    <span class="c"># Z = X + Y</span>
187    <span class="c"># varZ = varX + varY</span>
188    <span class="n">X</span> <span class="o">+=</span> <span class="n">Y</span>
189    <span class="n">varX</span> <span class="o">+=</span> <span class="n">varY</span>
190    <span class="k">return</span> <span class="n">X</span><span class="p">,</span> <span class="n">varX</span>
191
192</div>
193<div class="viewcode-block" id="pow_inplace"><a class="viewcode-back" href="../../../dev/api/sas.data_util.html#sas.data_util.err1d.pow_inplace">[docs]</a><span class="k">def</span> <span class="nf">pow_inplace</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">varX</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
194    <span class="sd">&quot;&quot;&quot;In-place X**n with error propagation&quot;&quot;&quot;</span>
195    <span class="c"># Direct algorithm</span>
196    <span class="c">#   Z = X**n</span>
197    <span class="c">#   varZ = abs(n) * varX/X**2 * Z**2</span>
198    <span class="c"># Indirect algorithm to minimize intermediates</span>
199    <span class="n">varX</span> <span class="o">/=</span> <span class="n">X</span>
200    <span class="n">varX</span> <span class="o">/=</span> <span class="n">X</span>     <span class="c"># varX now has varX/X**2</span>
201    <span class="n">X</span> <span class="o">**=</span> <span class="n">n</span>       <span class="c"># X now has Z = X**n</span>
202    <span class="n">varX</span> <span class="o">*=</span> <span class="n">X</span>
203    <span class="n">varX</span> <span class="o">*=</span> <span class="n">X</span>     <span class="c"># varX now has varX/X**2 * Z**2</span>
204    <span class="n">varX</span> <span class="o">*=</span> <span class="n">n</span><span class="o">**</span><span class="mi">2</span>  <span class="c"># varX now has varZ</span>
205    <span class="k">return</span> <span class="n">X</span><span class="p">,</span> <span class="n">varX</span></div>
206</pre></div>
207
208          </div>
209        </div>
210      </div>
211      <div class="sphinxsidebar">
212        <div class="sphinxsidebarwrapper">
213<div id="searchbox" style="display: none">
214  <h3>Quick search</h3>
215    <form class="search" action="../../../search.html" method="get">
216      <input type="text" name="q" />
217      <input type="submit" value="Go" />
218      <input type="hidden" name="check_keywords" value="yes" />
219      <input type="hidden" name="area" value="default" />
220    </form>
221    <p class="searchtip" style="font-size: 90%">
222    Enter search terms or a module, class or function name.
223    </p>
224</div>
225<script type="text/javascript">$('#searchbox').show(0);</script>
226        </div>
227      </div>
228      <div class="clearer"></div>
229    </div>
230    <div class="related">
231      <h3>Navigation</h3>
232      <ul>
233        <li class="right" style="margin-right: 10px">
234          <a href="../../../genindex.html" title="General Index"
235             >index</a></li>
236        <li class="right" >
237          <a href="../../../py-modindex.html" title="Python Module Index"
238             >modules</a> |</li>
239        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
240          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
241      </ul>
242    </div>
243    <div class="footer">
244        &copy; Copyright 2013, The SasView Project.
245      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
246    </div>
247  </body>
248</html>
Note: See TracBrowser for help on using the repository browser.