add mathematical functions module

update docs and clean up code
This commit is contained in:
2019-10-27 15:02:44 +01:00
parent b474188d1a
commit b566c643db
21 changed files with 592 additions and 71 deletions

View File

@@ -45,7 +45,6 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">pickle</span>
@@ -79,7 +78,6 @@
<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">file</span><span class="p">:</span>
<span class="n">fields</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;\s+&#39;</span><span class="p">,</span> <span class="n">row</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="c1">#print(filds)</span>
<span class="n">x</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">fields</span><span class="p">[</span><span class="n">x_column</span><span class="p">]))</span>
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">fields</span><span class="p">[</span><span class="n">y_column</span><span class="p">]))</span>
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
@@ -192,7 +190,6 @@
<span class="n">exponent</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">start_exp</span><span class="p">,</span> <span class="n">step_exp</span><span class="p">)</span> <span class="c1"># no stop because it is an open bound</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">((</span><span class="n">stop</span> <span class="o">-</span> <span class="n">start</span><span class="p">)</span><span class="o">/</span><span class="nb">float</span><span class="p">(</span><span class="n">step</span><span class="p">)))</span>
<span class="c1">#n = int((stop - start)/float(step)) # in py3 math.ceil returns int</span>
<span class="n">lst</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">lst</span> <span class="o">=</span> <span class="p">[</span><span class="nb">round</span><span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">step</span><span class="o">*</span><span class="n">i</span><span class="p">,</span> <span class="n">exponent</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">)]</span>
@@ -227,7 +224,7 @@
<span class="sd"> :returns: full id</span>
<span class="sd"> :rtype: str or int</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># we know it is a unique ending</span>
<span class="c1"># take first element, because we know it is a unique ending</span>
<span class="k">return</span> <span class="p">[</span><span class="n">idi</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span> <span class="k">if</span> <span class="n">idi</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">uide</span><span class="p">)][</span><span class="mi">0</span><span class="p">]</span></div>
</pre></div>

View File

@@ -45,7 +45,6 @@
<span class="sd"> </span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
<div class="viewcode-block" id="gaußsche_osterformel"><a class="viewcode-back" href="../date.html#date.gaußsche_osterformel">[docs]</a><span class="k">def</span> <span class="nf">gaußsche_osterformel</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gaußsche Osterformel.</span>

199
docs/build/html/_modules/function.html vendored Normal file
View File

@@ -0,0 +1,199 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>function &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for function</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Mathematical functions.</span>
<span class="sd">:Date: 2019-10-27</span>
<span class="sd">.. module:: function</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Mathematical functions.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<div class="viewcode-block" id="sine_wave"><a class="viewcode-back" href="../function.html#function.sine_wave">[docs]</a><span class="k">def</span> <span class="nf">sine_wave</span><span class="p">(</span><span class="n">A</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">f</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">phi</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">D</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">degree</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;A sine wave or sinusoid is a mathematical curve that describes a</span>
<span class="sd"> smooth periodic oscillation.</span>
<span class="sd"> :param A: amplitude</span>
<span class="sd"> :type A: float or int</span>
<span class="sd"> :param k: (angular) wave number</span>
<span class="sd"> :type k: float or int</span>
<span class="sd"> :param f: ordinary frequency</span>
<span class="sd"> :type f: float or int</span>
<span class="sd"> :param phi: phase</span>
<span class="sd"> :type phi: float or int</span>
<span class="sd"> :param D: non-zero center amplitude</span>
<span class="sd"> :type D: float or int</span>
<span class="sd"> :param degree: boolean to switch between radians and degree. If</span>
<span class="sd"> False phi is interpreted in radians and if True then phi is</span>
<span class="sd"> interpreted in degrees.</span>
<span class="sd"> In general, the function is:</span>
<span class="sd"> .. math::</span>
<span class="sd"> y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D \\</span>
<span class="sd"> y(x,t) = A\sin(kx + \omega t + \varphi) + D</span>
<span class="sd"> where:</span>
<span class="sd"> * A, amplitude, the peak deviation of the function from zero.</span>
<span class="sd"> * f, ordinary frequency, the number of oscillations (cycles) that</span>
<span class="sd"> occur each second of time.</span>
<span class="sd"> * ω = 2πf, angular frequency, the rate of change of the function</span>
<span class="sd"> argument in units of radians per second. If ω &lt; 0 the wave is</span>
<span class="sd"> moving to the right, if ω &gt; 0 the wave is moving to the left.</span>
<span class="sd"> * φ, phase, specifies (in radians) where in its cycle the</span>
<span class="sd"> oscillation is at t = 0.</span>
<span class="sd"> * x, spatial variable that represents the position on the</span>
<span class="sd"> dimension on which the wave propagates.</span>
<span class="sd"> * k, characteristic parameter called wave number (or angular wave</span>
<span class="sd"> number), which represents the proportionality between the</span>
<span class="sd"> angular frequency ω and the linear speed (speed of propagation)</span>
<span class="sd"> ν.</span>
<span class="sd"> * D, non-zero center amplitude.</span>
<span class="sd"> The wavenumber is related to the angular frequency by:</span>
<span class="sd"> .. math::</span>
<span class="sd"> k={\omega \over v}={2\pi f \over v}={2\pi \over \lambda }</span>
<span class="sd"> where λ (lambda) is the wavelength, f is the frequency, and v is the</span>
<span class="sd"> linear speed.</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`function_cosine_wave_degree`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">degree</span><span class="p">:</span>
<span class="n">phi</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">radians</span><span class="p">(</span><span class="n">phi</span><span class="p">)</span>
<span class="k">return</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="mi">0</span><span class="p">:</span> <span class="n">A</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">k</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">math</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="n">f</span><span class="o">*</span><span class="n">t</span> <span class="o">+</span> <span class="n">phi</span><span class="p">)</span> <span class="o">+</span> <span class="n">D</span></div>
<div class="viewcode-block" id="cosine_wave"><a class="viewcode-back" href="../function.html#function.cosine_wave">[docs]</a><span class="k">def</span> <span class="nf">cosine_wave</span><span class="p">(</span><span class="n">A</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">f</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">phi</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">D</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">degree</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;A cosine wave is said to be sinusoidal, because,</span>
<span class="sd"> :math:`\cos(x) = \sin(x + \pi/2)`, which is also a sine wave with a</span>
<span class="sd"> phase-shift of π/2 radians. Because of this head start, it is often</span>
<span class="sd"> said that the cosine function leads the sine function or the sine</span>
<span class="sd"> lags the cosine.</span>
<span class="sd"> :param A: amplitude</span>
<span class="sd"> :type A: float or int</span>
<span class="sd"> :param k: (angular) wave number</span>
<span class="sd"> :type k: float or int</span>
<span class="sd"> :param f: ordinary frequency</span>
<span class="sd"> :type f: float or int</span>
<span class="sd"> :param phi: phase</span>
<span class="sd"> :type phi: float or int</span>
<span class="sd"> :param D: non-zero center amplitude</span>
<span class="sd"> :type D: float or int</span>
<span class="sd"> :param degree: boolean to switch between radians and degree. If</span>
<span class="sd"> False phi is interpreted in radians and if True then phi is</span>
<span class="sd"> interpreted in degrees.</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`function_sine_wave_degree`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">degree</span><span class="p">:</span>
<span class="n">phi</span> <span class="o">=</span> <span class="n">phi</span> <span class="o">+</span> <span class="mi">90</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">phi</span> <span class="o">=</span> <span class="n">phi</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span>
<span class="k">return</span> <span class="n">sine_wave</span><span class="p">(</span><span class="n">A</span><span class="o">=</span><span class="n">A</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="n">k</span><span class="p">,</span> <span class="n">f</span><span class="o">=</span><span class="n">f</span><span class="p">,</span> <span class="n">phi</span><span class="o">=</span><span class="n">phi</span><span class="p">,</span> <span class="n">D</span><span class="o">=</span><span class="n">D</span><span class="p">,</span> <span class="n">degree</span><span class="o">=</span><span class="n">degree</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -35,6 +35,7 @@
<h1>All modules for which code is available</h1>
<ul><li><a href="data.html">data</a></li>
<li><a href="date.html">date</a></li>
<li><a href="function.html">function</a></li>
<li><a href="geometry.html">geometry</a></li>
<li><a href="geometry_plot.html">geometry_plot</a></li>
<li><a href="numerical/fit.html">numerical.fit</a></li>

View File

@@ -37,6 +37,8 @@
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Function and approximation.</span>
<span class="sd">:Date: 2019-10-15</span>
<span class="sd">.. module:: fit</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Function and approximation.</span>
@@ -57,7 +59,7 @@
<span class="sd"> :type x: int or float or list or numpy.ndarray</span>
<span class="sd"> :param p: gauss parameters [a, b, c, d]:</span>
<span class="sd"> * a -- amplitude (:math:`\int y \\,\\mathrm{d}x=1 \Leftrightarrow a=1/(c\\sqrt{2\\pi})` )</span>
<span class="sd"> * a -- amplitude (:math:`\\int y \\,\\mathrm{d}x=1 \\Leftrightarrow a=1/(c\\sqrt{2\\pi})` )</span>
<span class="sd"> * b -- expected value :math:`\\mu` (position of maximum, default = 0)</span>
<span class="sd"> * c -- standard deviation :math:`\\sigma` (variance :math:`\\sigma^2=c^2`)</span>
<span class="sd"> * d -- vertical offset (default = 0)</span>
@@ -127,7 +129,7 @@
<span class="k">return</span> <span class="n">y_fit</span><span class="p">,</span> <span class="n">popt</span><span class="p">,</span> <span class="n">FWHM</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
<span class="kc">True</span>
<span class="k">pass</span>
</pre></div>
</div>

View File

@@ -51,7 +51,7 @@
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">linspace</span><span class="p">,</span> <span class="n">trapz</span><span class="p">,</span> <span class="n">zeros</span>
<div class="viewcode-block" id="trapez"><a class="viewcode-back" href="../../numerical.html#numerical.integration.trapez">[docs]</a><span class="k">def</span> <span class="nf">trapez</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">N</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">save_values</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="n">save_values</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Integration of :math:`f(x)` using the trapezoidal rule</span>
<span class="sd"> (Simpson&#39;s rule, Kepler&#39;s rule).</span>
@@ -122,14 +122,14 @@
<span class="sd"> f(x) &amp;= x^2 \\</span>
<span class="sd"> a &amp;= 0 \\</span>
<span class="sd"> b &amp;= 1</span>
<span class="sd"> </span>
<span class="sd"> analytical solution</span>
<span class="sd"> .. math::</span>
<span class="sd"> I = \int\limits_{0}^{1} x^2 \,\mathrm{d}x</span>
<span class="sd"> = \left. \frac{1}{3} x^3 \right\vert_0^1</span>
<span class="sd"> = \frac{1}{3}</span>
<span class="sd"> </span>
<span class="sd"> numerical solution</span>
<span class="sd"> &gt;&gt;&gt; f = lambda(x): x**2</span>
@@ -142,30 +142,30 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">N</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
<span class="c1"># f is function or list</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">&#39;__call__&#39;</span><span class="p">):</span>
<span class="c1"># h width of each subinterval</span>
<span class="n">h</span> <span class="o">=</span> <span class="p">(</span><span class="n">b</span><span class="o">-</span><span class="n">a</span><span class="p">)</span><span class="o">/</span><span class="n">N</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="c1"># h width of each subinterval</span>
<span class="n">h</span> <span class="o">=</span> <span class="p">(</span><span class="n">b</span><span class="o">-</span><span class="n">a</span><span class="p">)</span><span class="o">/</span><span class="n">N</span>
<span class="c1"># x variable of integration</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">linspace</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">save_values</span><span class="p">:</span>
<span class="c1"># ff contribution from the points</span>
<span class="n">ff</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">N</span><span class="p">,</span> <span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="n">ff</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="n">T</span> <span class="o">=</span> <span class="p">(</span><span class="n">ff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">/</span><span class="mf">2.</span><span class="o">+</span><span class="nb">sum</span><span class="p">(</span><span class="n">ff</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">N</span><span class="p">])</span><span class="o">+</span><span class="n">ff</span><span class="p">[</span><span class="n">N</span><span class="p">]</span><span class="o">/</span><span class="mf">2.</span><span class="p">)</span><span class="o">*</span><span class="n">h</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">TL</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">TR</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">N</span><span class="p">])</span>
<span class="n">TI</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">N</span><span class="p">):</span>
<span class="n">TI</span> <span class="o">=</span> <span class="n">TI</span> <span class="o">+</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="n">T</span> <span class="o">=</span> <span class="p">(</span><span class="n">TL</span><span class="o">/</span><span class="mf">2.</span><span class="o">+</span><span class="n">TI</span><span class="o">+</span><span class="n">TR</span><span class="o">/</span><span class="mf">2.</span><span class="p">)</span><span class="o">*</span><span class="n">h</span>
<span class="c1"># x variable of integration</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">linspace</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">save_values</span><span class="p">:</span>
<span class="c1"># ff contribution from the points</span>
<span class="n">ff</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">N</span><span class="p">,</span> <span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="n">ff</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="n">T</span> <span class="o">=</span> <span class="p">(</span><span class="n">ff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">/</span><span class="mf">2.</span><span class="o">+</span><span class="nb">sum</span><span class="p">(</span><span class="n">ff</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">N</span><span class="p">])</span><span class="o">+</span><span class="n">ff</span><span class="p">[</span><span class="n">N</span><span class="p">]</span><span class="o">/</span><span class="mf">2.</span><span class="p">)</span><span class="o">*</span><span class="n">h</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">TL</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">TR</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">N</span><span class="p">])</span>
<span class="n">TI</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">N</span><span class="p">):</span>
<span class="n">TI</span> <span class="o">=</span> <span class="n">TI</span> <span class="o">+</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="n">T</span> <span class="o">=</span> <span class="p">(</span><span class="n">TL</span><span class="o">/</span><span class="mf">2.</span><span class="o">+</span><span class="n">TI</span><span class="o">+</span><span class="n">TR</span><span class="o">/</span><span class="mf">2.</span><span class="p">)</span><span class="o">*</span><span class="n">h</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">N</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span>
<span class="n">T</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span><span class="p">):</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">T</span> <span class="o">+</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">f</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="n">N</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span>
<span class="n">T</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span><span class="p">):</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">T</span> <span class="o">+</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">f</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">T</span><span class="p">)</span>
@@ -178,12 +178,12 @@
<span class="n">trapez</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">1e6</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1">#print(trapz(func, linspace(0,1,10)))</span>
<span class="n">trapez</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">9</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">trapez</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">9</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1">#print(trapz([0,1,4,9]))</span>
<span class="n">trapez</span><span class="p">([</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">trapez</span><span class="p">([</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">trapez</span><span class="p">([</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">trapez</span><span class="p">([</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>
</div>

View File

@@ -45,10 +45,8 @@
<span class="sd"> </span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="k">import</span> <span class="n">struct_time</span><span class="p">,</span> <span class="n">mktime</span>
<div class="viewcode-block" id="in_seconds"><a class="viewcode-back" href="../time_of_day.html#time_of_day.in_seconds">[docs]</a><span class="k">def</span> <span class="nf">in_seconds</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;If time is `time.struct_time` convert to float seconds.</span>

View File

@@ -0,0 +1,7 @@
function module
===============
.. automodule:: function
:members:
:undoc-members:
:show-inheritance:

View File

@@ -6,6 +6,7 @@ pylib
data
date
function
geometry
geometry_plot
numerical

190
docs/build/html/function.html vendored Normal file
View File

@@ -0,0 +1,190 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>function module &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-function">
<span id="function-module"></span><h1>function module<a class="headerlink" href="#module-function" title="Permalink to this headline"></a></h1>
<p>Mathematical functions.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-10-27</p>
</dd>
</dl>
<span class="target" id="module-function"></span><dl class="function">
<dt id="function.cosine_wave">
<code class="sig-name descname">cosine_wave</code><span class="sig-paren">(</span><em class="sig-param">A=1</em>, <em class="sig-param">k=1</em>, <em class="sig-param">f=1</em>, <em class="sig-param">phi=0</em>, <em class="sig-param">D=0</em>, <em class="sig-param">degree=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/function.html#cosine_wave"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#function.cosine_wave" title="Permalink to this definition"></a></dt>
<dd><p>A cosine wave is said to be sinusoidal, because,
<span class="math notranslate nohighlight">\(\cos(x) = \sin(x + \pi/2)\)</span>, which is also a sine wave with a
phase-shift of π/2 radians. Because of this head start, it is often
said that the cosine function leads the sine function or the sine
lags the cosine.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>A</strong> (<em>float</em><em> or </em><em>int</em>) amplitude</p></li>
<li><p><strong>k</strong> (<em>float</em><em> or </em><em>int</em>) (angular) wave number</p></li>
<li><p><strong>f</strong> (<em>float</em><em> or </em><em>int</em>) ordinary frequency</p></li>
<li><p><strong>phi</strong> (<em>float</em><em> or </em><em>int</em>) phase</p></li>
<li><p><strong>D</strong> (<em>float</em><em> or </em><em>int</em>) non-zero center amplitude</p></li>
<li><p><strong>degree</strong> boolean to switch between radians and degree. If
False phi is interpreted in radians and if True then phi is
interpreted in degrees.</p></li>
</ul>
</dd>
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">function_sine_wave_degree()</span></code></p>
</div>
</dd></dl>
<dl class="function">
<dt id="function.sine_wave">
<code class="sig-name descname">sine_wave</code><span class="sig-paren">(</span><em class="sig-param">A=1</em>, <em class="sig-param">k=1</em>, <em class="sig-param">f=1</em>, <em class="sig-param">phi=0</em>, <em class="sig-param">D=0</em>, <em class="sig-param">degree=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/function.html#sine_wave"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#function.sine_wave" title="Permalink to this definition"></a></dt>
<dd><p>A sine wave or sinusoid is a mathematical curve that describes a
smooth periodic oscillation.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>A</strong> (<em>float</em><em> or </em><em>int</em>) amplitude</p></li>
<li><p><strong>k</strong> (<em>float</em><em> or </em><em>int</em>) (angular) wave number</p></li>
<li><p><strong>f</strong> (<em>float</em><em> or </em><em>int</em>) ordinary frequency</p></li>
<li><p><strong>phi</strong> (<em>float</em><em> or </em><em>int</em>) phase</p></li>
<li><p><strong>D</strong> (<em>float</em><em> or </em><em>int</em>) non-zero center amplitude</p></li>
<li><p><strong>degree</strong> boolean to switch between radians and degree. If
False phi is interpreted in radians and if True then phi is
interpreted in degrees.</p></li>
</ul>
</dd>
</dl>
<p>In general, the function is:</p>
<div class="math notranslate nohighlight">
\[\begin{split}y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D \\
y(x,t) = A\sin(kx + \omega t + \varphi) + D\end{split}\]</div>
<p>where:</p>
<blockquote>
<div><ul class="simple">
<li><p>A, amplitude, the peak deviation of the function from zero.</p></li>
<li><p>f, ordinary frequency, the number of oscillations (cycles) that
occur each second of time.</p></li>
<li><p>ω = 2πf, angular frequency, the rate of change of the function
argument in units of radians per second. If ω &lt; 0 the wave is
moving to the right, if ω &gt; 0 the wave is moving to the left.</p></li>
<li><p>φ, phase, specifies (in radians) where in its cycle the
oscillation is at t = 0.</p></li>
<li><p>x, spatial variable that represents the position on the
dimension on which the wave propagates.</p></li>
<li><p>k, characteristic parameter called wave number (or angular wave
number), which represents the proportionality between the
angular frequency ω and the linear speed (speed of propagation)
ν.</p></li>
<li><p>D, non-zero center amplitude.</p></li>
</ul>
</div></blockquote>
<p>The wavenumber is related to the angular frequency by:</p>
<div class="math notranslate nohighlight">
\[k={\omega \over v}={2\pi f \over v}={2\pi \over \lambda }\]</div>
<p>where λ (lambda) is the wavelength, f is the frequency, and v is the
linear speed.</p>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">function_cosine_wave_degree()</span></code></p>
</div>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/function.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -72,6 +72,8 @@
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="function.html#function.cosine_wave">cosine_wave() (in module function)</a>
</li>
<li><a href="geometry.html#geometry.cubic">cubic() (in module geometry)</a>
</li>
</ul></td>
@@ -132,11 +134,13 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#module-fit">fit (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="data.html#data.fold_list">fold_list() (in module data)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#numerical.ode.fpi">fpi() (in module numerical.ode)</a>
</li>
<li><a href="function.html#module-function">function (module)</a>, <a href="function.html#module-function">[1]</a>
</li>
</ul></td>
</tr></table>
@@ -287,10 +291,12 @@
<li><a href="time_of_day.html#time_of_day.seconds">seconds() (in module time_of_day)</a>
</li>
<li><a href="time_of_day.html#time_of_day.seconds_norm">seconds_norm() (in module time_of_day)</a>
</li>
<li><a href="data.html#data.seq">seq() (in module data)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="data.html#data.seq">seq() (in module data)</a>
<li><a href="function.html#function.sine_wave">sine_wave() (in module function)</a>
</li>
<li><a href="geometry.html#geometry.square">square() (in module geometry)</a>
</li>

View File

@@ -38,6 +38,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="data.html">data module</a></li>
<li class="toctree-l1"><a class="reference internal" href="date.html">date module</a></li>
<li class="toctree-l1"><a class="reference internal" href="function.html">function module</a></li>
<li class="toctree-l1"><a class="reference internal" href="geometry.html">geometry module</a></li>
<li class="toctree-l1"><a class="reference internal" href="geometry_plot.html">geometry_plot module</a></li>
<li class="toctree-l1"><a class="reference internal" href="numerical.html">numerical package</a><ul>

View File

@@ -40,6 +40,11 @@
<div class="section" id="module-numerical.fit">
<span id="numerical-fit-module"></span><h2>numerical.fit module<a class="headerlink" href="#module-numerical.fit" title="Permalink to this headline"></a></h2>
<p>Function and approximation.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-10-15</p>
</dd>
</dl>
<span class="target" id="module-fit"></span><dl class="function">
<dt id="numerical.fit.gauss">
<code class="sig-name descname">gauss</code><span class="sig-paren">(</span><em class="sig-param">x</em>, <em class="sig-param">*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/fit.html#gauss"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.fit.gauss" title="Permalink to this definition"></a></dt>

Binary file not shown.

View File

@@ -74,6 +74,11 @@
<td>
<a href="numerical.html#module-fit"><code class="xref">fit</code></a> <em>(*nix, Windows)</em></td><td>
<em>Function and approximation.</em></td></tr>
<tr>
<td></td>
<td>
<a href="function.html#module-function"><code class="xref">function</code></a> <em>(*nix, Windows)</em></td><td>
<em>Mathematical functions.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-g"><td></td><td>
<strong>g</strong></td><td></td></tr>

File diff suppressed because one or more lines are too long

7
docs/source/function.rst Normal file
View File

@@ -0,0 +1,7 @@
function module
===============
.. automodule:: function
:members:
:undoc-members:
:show-inheritance:

View File

@@ -6,6 +6,7 @@ pylib
data
date
function
geometry
geometry_plot
numerical

100
pylib/function.py Normal file
View File

@@ -0,0 +1,100 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Mathematical functions.
:Date: 2019-10-27
.. module:: function
:platform: *nix, Windows
:synopsis: Mathematical functions.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
import math
def sine_wave(A=1, k=1, f=1, phi=0, D=0, degree=False):
r"""A sine wave or sinusoid is a mathematical curve that describes a
smooth periodic oscillation.
:param A: amplitude
:type A: float or int
:param k: (angular) wave number
:type k: float or int
:param f: ordinary frequency
:type f: float or int
:param phi: phase
:type phi: float or int
:param D: non-zero center amplitude
:type D: float or int
:param degree: boolean to switch between radians and degree. If
False phi is interpreted in radians and if True then phi is
interpreted in degrees.
In general, the function is:
.. math::
y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D \\
y(x,t) = A\sin(kx + \omega t + \varphi) + D
where:
* A, amplitude, the peak deviation of the function from zero.
* f, ordinary frequency, the number of oscillations (cycles) that
occur each second of time.
* ω = 2πf, angular frequency, the rate of change of the function
argument in units of radians per second. If ω < 0 the wave is
moving to the right, if ω > 0 the wave is moving to the left.
* φ, phase, specifies (in radians) where in its cycle the
oscillation is at t = 0.
* x, spatial variable that represents the position on the
dimension on which the wave propagates.
* k, characteristic parameter called wave number (or angular wave
number), which represents the proportionality between the
angular frequency ω and the linear speed (speed of propagation)
ν.
* D, non-zero center amplitude.
The wavenumber is related to the angular frequency by:
.. math::
k={\omega \over v}={2\pi f \over v}={2\pi \over \lambda }
where λ (lambda) is the wavelength, f is the frequency, and v is the
linear speed.
.. seealso::
:meth:`function_cosine_wave_degree`
"""
if degree:
phi = math.radians(phi)
return lambda x, t=0: A*math.sin(k*x + 2*math.pi*f*t + phi) + D
def cosine_wave(A=1, k=1, f=1, phi=0, D=0, degree=False):
r"""A cosine wave is said to be sinusoidal, because,
:math:`\cos(x) = \sin(x + \pi/2)`, which is also a sine wave with a
phase-shift of π/2 radians. Because of this head start, it is often
said that the cosine function leads the sine function or the sine
lags the cosine.
:param A: amplitude
:type A: float or int
:param k: (angular) wave number
:type k: float or int
:param f: ordinary frequency
:type f: float or int
:param phi: phase
:type phi: float or int
:param D: non-zero center amplitude
:type D: float or int
:param degree: boolean to switch between radians and degree. If
False phi is interpreted in radians and if True then phi is
interpreted in degrees.
.. seealso::
:meth:`function_sine_wave_degree`
"""
if degree:
phi = phi + 90
else:
phi = phi + math.pi/2
return sine_wave(A=A, k=k, f=f, phi=phi, D=D, degree=degree)

View File

@@ -2,6 +2,8 @@
# -*- coding: utf-8 -*-
"""Function and approximation.
:Date: 2019-10-15
.. module:: fit
:platform: *nix, Windows
:synopsis: Function and approximation.
@@ -22,7 +24,7 @@ def gauss(x, *p):
:type x: int or float or list or numpy.ndarray
:param p: gauss parameters [a, b, c, d]:
* a -- amplitude (:math:`\int y \\,\\mathrm{d}x=1 \Leftrightarrow a=1/(c\\sqrt{2\\pi})` )
* a -- amplitude (:math:`\\int y \\,\\mathrm{d}x=1 \\Leftrightarrow a=1/(c\\sqrt{2\\pi})` )
* b -- expected value :math:`\\mu` (position of maximum, default = 0)
* c -- standard deviation :math:`\\sigma` (variance :math:`\\sigma^2=c^2`)
* d -- vertical offset (default = 0)
@@ -92,4 +94,4 @@ def gauss_fit(x, y, e=None, x_fit=None, verbose=False):
return y_fit, popt, FWHM
if __name__ == "__main__":
True
pass

View File

@@ -16,7 +16,7 @@ from __future__ import division
from numpy import linspace, trapz, zeros
def trapez(f, a=0, b=1, N=10, x=None, verbose=False,
save_values=False):
save_values=False):
r"""
Integration of :math:`f(x)` using the trapezoidal rule
(Simpson's rule, Kepler's rule).
@@ -107,30 +107,30 @@ def trapez(f, a=0, b=1, N=10, x=None, verbose=False,
"""
N = int(N)
# f is function or list
if hasattr(f, '__call__'):
# h width of each subinterval
h = (b-a)/N
if callable(f):
# h width of each subinterval
h = (b-a)/N
# x variable of integration
x = linspace(a, b, N+1)
if save_values:
# ff contribution from the points
ff = zeros((N+1))
for n in linspace(0, N, N+1):
ff[n] = f(x[n])
T = (ff[0]/2.+sum(ff[1:N])+ff[N]/2.)*h
else:
TL = f(x[0])
TR = f(x[N])
TI = 0
for n in range(1, N):
TI = TI + f(x[n])
T = (TL/2.+TI+TR/2.)*h
# x variable of integration
x = linspace(a, b, N+1)
if save_values:
# ff contribution from the points
ff = zeros((N+1))
for n in linspace(0, N, N+1):
ff[n] = f(x[n])
T = (ff[0]/2.+sum(ff[1:N])+ff[N]/2.)*h
else:
TL = f(x[0])
TR = f(x[N])
TI = 0
for n in range(1, N):
TI = TI + f(x[n])
T = (TL/2.+TI+TR/2.)*h
else:
N = len(f)-1
T = 0
for n in range(N):
T = T + (x[n+1]-x[n])/2*(f[n+1]+f[n])
N = len(f)-1
T = 0
for n in range(N):
T = T + (x[n+1]-x[n])/2*(f[n+1]+f[n])
if verbose:
print(T)
@@ -143,9 +143,9 @@ if __name__ == '__main__':
trapez(func, 0, 1, 1e6, verbose=True)
#print(trapz(func, linspace(0,1,10)))
trapez([0,1,4,9], x=[0,1,2,3], verbose=True)
trapez([0, 1, 4, 9], x=[0, 1, 2, 3], verbose=True)
#print(trapz([0,1,4,9]))
trapez([2,2], x=[-1,1], verbose=True)
trapez([2, 2], x=[-1, 1], verbose=True)
trapez([-1,1,1,-1], x=[-1,-1,1,1], verbose=True)
trapez([-1, 1, 1, -1], x=[-1, -1, 1, 1], verbose=True)