add mathematical function to string function for braille and block characters

This commit is contained in:
2019-11-15 16:05:54 +01:00
parent 0041abe8f3
commit 1de007a285
48 changed files with 6987 additions and 82 deletions

View File

@@ -174,6 +174,19 @@
<span class="sd"> :returns: arithmetic bounded sequence</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># example of seq(4, 0, -0.4)</span>
<span class="c1"># without round:</span>
<span class="c1"># [4.0, 3.6, 3.2, 2.8, 2.4, 2.0, 1.5999999999999996,</span>
<span class="c1"># 1.1999999999999997, 0.7999999999999998, 0.3999999999999999]</span>
<span class="c1"># with round:</span>
<span class="c1"># [4.0, 3.6, 3.2, 2.8, 2.4, 2.0, 1.6, 1.2, 0.8, 0.4]</span>
<span class="c1"># example of seq(4, 0, -0.41)</span>
<span class="c1"># without round:</span>
<span class="c1"># [4.0, 3.59, 3.18, 2.77, 2.3600000000000003,</span>
<span class="c1"># 1.9500000000000002, 1.54, 1.1300000000000003,</span>
<span class="c1"># 0.7200000000000002, 0.31000000000000005]</span>
<span class="c1"># with round:</span>
<span class="c1"># [4.0, 3.59, 3.18, 2.77, 2.36, 1.95, 1.54, 1.13, 0.72, 0.31]</span>
<span class="k">if</span> <span class="n">stop</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">seq</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
@@ -280,7 +293,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -209,7 +209,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -147,7 +147,7 @@
<span class="sd"> linear speed.</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`function_cosine_wave_degree`</span>
<span class="sd"> :meth:`cosine_wave`</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>
@@ -179,7 +179,7 @@
<span class="sd"> time t</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`function_sine_wave_degree`</span>
<span class="sd"> :meth:`sine_wave`</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>
@@ -285,6 +285,166 @@
<span class="n">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</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">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">d</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">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">theta_end</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="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span></div>
<div class="viewcode-block" id="to_str"><a class="viewcode-back" href="../function.html#function.to_str">[docs]</a><span class="k">def</span> <span class="nf">to_str</span><span class="p">(</span><span class="n">f</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">x_0</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">x_1</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">w</span><span class="o">=</span><span class="mi">80</span><span class="p">,</span> <span class="n">density</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">char_set</span><span class="o">=</span><span class="s2">&quot;line&quot;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent functions as string frame with a specific character set.</span>
<span class="sd"> which are normed to the range of [0, 1] to</span>
<span class="sd"> :param f: function or list of functions normed to the range of [0, 1]</span>
<span class="sd"> :type f: function or list</span>
<span class="sd"> :param h: number of chars in vertical direction</span>
<span class="sd"> :type h: int</span>
<span class="sd"> :param w: number of chars in horizontal direction</span>
<span class="sd"> :type w: int</span>
<span class="sd"> :param char_set: either &quot;braille&quot; or &quot;block&quot;. &quot;braille&quot; uses Unicode</span>
<span class="sd"> Characters in the Braille Patterns Block (fisrt index U+2800, last</span>
<span class="sd"> index U+28FF [CUDB]_) and the &quot;block&quot; uses part of the Unicode</span>
<span class="sd"> Characters in the Block Elements Block (fisrt index U+2580, last</span>
<span class="sd"> index U+259F [CUDB]_). Alias for braille is line and alias for</span>
<span class="sd"> block is histogram</span>
<span class="sd"> :type char_set: str</span>
<span class="sd"> Usage:</span>
<span class="sd"> * case dependent arguments</span>
<span class="sd"> * 1 quasi line plot (braille characters)</span>
<span class="sd"> f = lambda function (lambda x, t=0: ...)</span>
<span class="sd"> x_1 = max x value</span>
<span class="sd"> x_0 = min x value</span>
<span class="sd"> t = time (animation)</span>
<span class="sd"> * 2 histogram (block characters)</span>
<span class="sd"> f = lambda function (lambda x, t=0: ...)</span>
<span class="sd"> x_1 = max x value</span>
<span class="sd"> x_0 = min x value</span>
<span class="sd"> t = time (animation)</span>
<span class="sd"> chart=&quot;histogram&quot;</span>
<span class="sd"> * general arguments</span>
<span class="sd"> w = window width in number of chars</span>
<span class="sd"> density = number of data point per pixel (for line chart higher density makes thicker lines)</span>
<span class="sd"> chart = either &quot;line&quot; or &quot;histogram&quot;</span>
<span class="sd"> .. rubric:: Braille Patterns Block</span>
<span class="sd"> * Dots or pixels per character in vertical direction: 6</span>
<span class="sd"> * Dots or pixels per character in horizontal direction: 2</span>
<span class="sd"> First dot (bottom left) is the zero (0) position of the</span>
<span class="sd"> function. So, a function value of zero does not mean to have zero</span>
<span class="sd"> dots but one.</span>
<span class="sd"> Example of 3 columns and 3 rows (upside down view of &#39;normal&#39; braille/drawille position)</span>
<span class="sd"> ::</span>
<span class="sd"> | ^ y axis</span>
<span class="sd"> | |</span>
<span class="sd"> | ,_____,,_____,,_____,</span>
<span class="sd"> 7 + | * *|| * *|| * *|</span>
<span class="sd"> 6 + | * *|| * *|| * *|</span>
<span class="sd"> 5 + | * *|| * *|| * *|</span>
<span class="sd"> 4 + | * *|| * *|| * *|</span>
<span class="sd"> | ;=====;;=====;;=====;</span>
<span class="sd"> 3 + | * *|| * *|| * *|</span>
<span class="sd"> 2 + | * *|| * *|| * *|</span>
<span class="sd"> 1 + | * *|| * *|| * *|</span>
<span class="sd"> 0 + - | * *|| * *|| * *| ---&gt; x axis</span>
<span class="sd"> | ;=====;;=====;;=====;</span>
<span class="sd"> -1 + | * *|| * *|| * *|</span>
<span class="sd"> -2 + | * *|| * *|| * *|</span>
<span class="sd"> -3 + | * *|| * *|| * *|</span>
<span class="sd"> -4 + | * *|| * *|| * *|</span>
<span class="sd"> | `````````````````````</span>
<span class="sd"> | |</span>
<span class="sd"> `-----+--+---+--+---+--+-------------</span>
<span class="sd"> -2 -1 0 1 2 3</span>
<span class="sd"> .. rubric:: Block Elements Block</span>
<span class="sd"> * Dots or pixels per character in vertical direction: 8</span>
<span class="sd"> * Dots or pixels per character in horizontal direction: 1</span>
<span class="sd"> Example of 3 columns and 3 rows</span>
<span class="sd"> ::</span>
<span class="sd"> | ^ y axis</span>
<span class="sd"> | |</span>
<span class="sd"> | ,_____,,_____,,_____,</span>
<span class="sd"> 15 + | --- || --- || --- |</span>
<span class="sd"> 14 + | --- || --- || --- |</span>
<span class="sd"> 13 + | --- || --- || --- |</span>
<span class="sd"> 12 + | --- || --- || --- |</span>
<span class="sd"> 11 + | --- || --- || --- |</span>
<span class="sd"> 10 + | --- || --- || --- |</span>
<span class="sd"> 9 + | --- || --- || --- |</span>
<span class="sd"> 8 + | --- || --- || --- |</span>
<span class="sd"> | ;=====;;=====;;=====;</span>
<span class="sd"> 7 + | --- || --- || --- |</span>
<span class="sd"> 6 + | --- || --- || --- |</span>
<span class="sd"> 5 + | --- || --- || --- |</span>
<span class="sd"> 4 + | --- || --- || --- |</span>
<span class="sd"> 3 + | --- || --- || --- |</span>
<span class="sd"> 2 + | --- || --- || --- |</span>
<span class="sd"> 1 + | --- || --- || --- |</span>
<span class="sd"> 0 + - | --- || --- || --- | ---&gt; x axis</span>
<span class="sd"> | ;=====;;=====;;=====;</span>
<span class="sd"> -1 + | --- || --- || --- |</span>
<span class="sd"> -2 + | --- || --- || --- |</span>
<span class="sd"> -3 + | --- || --- || --- |</span>
<span class="sd"> -4 + | --- || --- || --- |</span>
<span class="sd"> -5 + | --- || --- || --- |</span>
<span class="sd"> -6 + | --- || --- || --- |</span>
<span class="sd"> -7 + | --- || --- || --- |</span>
<span class="sd"> -8 + | --- || --- || --- |</span>
<span class="sd"> | `````````````````````</span>
<span class="sd"> | |</span>
<span class="sd"> `------+------+------+---------------</span>
<span class="sd"> -1 0 1</span>
<span class="sd"> .. rubric:: References</span>
<span class="sd"> .. [CUDB] `Unicode Database - Blocks &lt;ftp://ftp.unicode.org/Public/UNIDATA/Blocks.txt&gt;`_</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`pylib.function.transformation`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># scale function to used chars and dots/pixel in y direction (4 for braille characters): from [0, 1] to [0, chars*4-1]</span>
<span class="c1"># negate the function because the y axis is pointing downwards: from [0, 1] to [-1, 0] or from [0, chars*4-1] to [-(chars*4-1), 0]</span>
<span class="c1"># and becasue of the negation shift the function by one dot/pixel, otherwise the function would need another char, because the 0 is on an another char on the &quot;positive side&quot;.</span>
<span class="c1"># devide the time by the number of dots/pixel in x direction (2 for braille characters)</span>
<span class="n">window_factor</span> <span class="o">=</span> <span class="n">w</span><span class="o">/</span><span class="p">(</span><span class="n">x_1</span><span class="o">-</span><span class="n">x_0</span><span class="p">)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;line&quot;</span><span class="p">,</span> <span class="s2">&quot;braille&quot;</span><span class="p">]:</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">4</span>
<span class="n">a</span> <span class="o">=</span> <span class="o">-</span><span class="p">(</span><span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">b</span> <span class="o">=</span> <span class="mi">1</span><span class="o">/</span><span class="n">pixels_horizontal</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">transformation</span><span class="p">(</span><span class="n">f</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="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">canvas</span> <span class="o">=</span> <span class="n">drawille</span><span class="o">.</span><span class="n">Canvas</span><span class="p">()</span>
<span class="c1"># divide step width of the sequence by 2 (double density, 2 dots/pixel per char)</span>
<span class="c1"># multiplicate x by 2 (2 dots/pixel per char)</span>
<span class="k">for</span> <span class="n">x_i</span> <span class="ow">in</span> <span class="n">seq</span><span class="p">(</span><span class="n">x_0</span><span class="o">*</span><span class="n">window_factor</span><span class="o">*</span><span class="n">pixels_horizontal</span><span class="p">,</span> <span class="n">x_1</span><span class="o">*</span><span class="n">window_factor</span><span class="o">*</span><span class="n">pixels_horizontal</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="n">density</span><span class="p">):</span>
<span class="n">canvas</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">f</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">t</span><span class="p">))</span>
<span class="c1">#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">canvas</span><span class="o">.</span><span class="n">frame</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;histogram&quot;</span><span class="p">,</span> <span class="s2">&quot;block&quot;</span><span class="p">]:</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">8</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="o">-</span><span class="mi">1</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">transformation</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">density</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">density</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1"># density max 1!</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">seq</span><span class="p">(</span><span class="n">x_0</span><span class="o">*</span><span class="n">window_factor</span><span class="p">,</span> <span class="n">x_1</span><span class="o">*</span><span class="n">window_factor</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="n">pixels_horizontal</span><span class="o">/</span><span class="n">density</span><span class="p">)</span>
<span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">drawblock</span><span class="o">.</span><span class="n">histogram</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">frame</span></div>
</pre></div>
</div>
@@ -339,7 +499,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -598,7 +598,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -173,7 +173,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -43,6 +43,17 @@
<li><a href="numerical/integration.html">numerical.integration</a></li>
<li><a href="numerical/ode.html">numerical.ode</a></li>
<li><a href="numerical/ode_model.html">numerical.ode_model</a></li>
<li><a href="pylib/data.html">pylib.data</a></li>
<li><a href="pylib/date.html">pylib.date</a></li>
<li><a href="pylib/function.html">pylib.function</a></li>
<li><a href="pylib/geometry.html">pylib.geometry</a></li>
<li><a href="pylib/geometry_plot.html">pylib.geometry_plot</a></li>
<li><a href="pylib/mathematics.html">pylib.mathematics</a></li>
<li><a href="pylib/numerical/fit.html">pylib.numerical.fit</a></li>
<li><a href="pylib/numerical/integration.html">pylib.numerical.integration</a></li>
<li><a href="pylib/numerical/ode.html">pylib.numerical.ode</a></li>
<li><a href="pylib/numerical/ode_model.html">pylib.numerical.ode_model</a></li>
<li><a href="pylib/time_of_day.html">pylib.time_of_day</a></li>
<li><a href="time_of_day.html">time_of_day</a></li>
</ul>
@@ -96,7 +107,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -104,7 +104,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -184,7 +184,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -238,7 +238,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -528,7 +528,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

View File

@@ -207,7 +207,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>

305
docs/build/html/_modules/pylib/data.html vendored Normal file
View File

@@ -0,0 +1,305 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.data &#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 pylib.data</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;Read and write data to or from file and manipulate data structures.</span>
<span class="sd">:Date: 2019-10-11</span>
<span class="sd">.. module:: data</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Handle data files and structures.</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>
<span class="kn">import</span> <span class="nn">pickle</span>
<div class="viewcode-block" id="read"><a class="viewcode-back" href="../../pylib.html#pylib.data.read">[docs]</a><span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">x_column</span><span class="p">,</span> <span class="n">y_column</span><span class="p">,</span> <span class="n">default</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="sd">&quot;&quot;&quot;Read ascii data file.</span>
<span class="sd"> :param filename: file to read</span>
<span class="sd"> :type filename: str</span>
<span class="sd"> :param x_column: column index for the x data (first column is 0)</span>
<span class="sd"> :type x_column: int</span>
<span class="sd"> :param y_column: column index for the y data (first column is 0)</span>
<span class="sd"> :type y_column: int</span>
<span class="sd"> :param default: return object if data loading fails</span>
<span class="sd"> :type default: object</span>
<span class="sd"> :param verbose: verbose information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> :returns: x and y</span>
<span class="sd"> :rtype: tuple(list, list)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">default</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">default</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="s1">&#39;check if data is available&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">[]</span>
<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="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>
<span class="k">except</span> <span class="ne">IOError</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="s1">&#39;data file not found&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span></div>
<div class="viewcode-block" id="write"><a class="viewcode-back" href="../../pylib.html#pylib.data.write">[docs]</a><span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Write ascii file.</span>
<span class="sd"> :param file_name: file to write</span>
<span class="sd"> :type file_name: str</span>
<span class="sd"> :param data: data to write</span>
<span class="sd"> :type data: str</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div>
<div class="viewcode-block" id="load"><a class="viewcode-back" href="../../pylib.html#pylib.data.load">[docs]</a><span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">default</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="sd">&quot;&quot;&quot;Load stored program objects from binary file.</span>
<span class="sd"> :param file_name: file to load</span>
<span class="sd"> :type file_name: str</span>
<span class="sd"> :param default: return object if data loading fails</span>
<span class="sd"> :type default: object</span>
<span class="sd"> :param verbose: verbose information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> :returns: loaded data</span>
<span class="sd"> :rtype: object</span>
<span class="sd"> &quot;&quot;&quot;</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="s1">&#39;check if data is available&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="nb">input</span><span class="p">:</span>
<span class="c1"># one load for every dump is needed to load all the data</span>
<span class="n">object_data</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">input</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="s1">&#39;found:&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">object_data</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="n">object_data</span> <span class="o">=</span> <span class="n">default</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="s1">&#39;no saved datas found&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">object_data</span></div>
<div class="viewcode-block" id="store"><a class="viewcode-back" href="../../pylib.html#pylib.data.store">[docs]</a><span class="k">def</span> <span class="nf">store</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">object_data</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Store program objects to binary file.</span>
<span class="sd"> :param file_name: file to store</span>
<span class="sd"> :type file_name: str</span>
<span class="sd"> :param object_data: data to store</span>
<span class="sd"> :type object_data: object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">output</span><span class="p">:</span>
<span class="c1"># every dump needs a load</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">object_data</span><span class="p">,</span> <span class="n">output</span><span class="p">,</span> <span class="n">pickle</span><span class="o">.</span><span class="n">HIGHEST_PROTOCOL</span><span class="p">)</span></div>
<div class="viewcode-block" id="fold_list"><a class="viewcode-back" href="../../pylib.html#pylib.data.fold_list">[docs]</a><span class="k">def</span> <span class="nf">fold_list</span><span class="p">(</span><span class="n">lst</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Convert one-dimensional kx1 array (list) to two-dimensional mxn</span>
<span class="sd"> array. m = k / n</span>
<span class="sd"> :param lst: list to convert</span>
<span class="sd"> :type lst: list</span>
<span class="sd"> :param n: length of the second dimenson</span>
<span class="sd"> :type n: int</span>
<span class="sd"> :returns: two-dimensional array (list of lists)</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">k</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lst</span><span class="p">)</span>
<span class="k">if</span> <span class="n">k</span> <span class="o">%</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">length</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
<span class="k">return</span> <span class="p">[</span><span class="n">lst</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="n">n</span><span class="p">:</span><span class="n">i</span><span class="o">*</span><span class="n">n</span><span class="o">+</span><span class="n">n</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">length</span><span class="p">)]</span></div>
<div class="viewcode-block" id="seq"><a class="viewcode-back" href="../../pylib.html#pylib.data.seq">[docs]</a><span class="k">def</span> <span class="nf">seq</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">stop</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Create an arithmetic bounded sequence.</span>
<span class="sd"> The sequence is one of the following;</span>
<span class="sd"> - empty :math:`\{\}=\emptyset`, if start and stop are the same</span>
<span class="sd"> - degenerate :math:`\{a\}`, if the sequence has only one element.</span>
<span class="sd"> - left-close and right-open :math:`[a, b)`</span>
<span class="sd"> :param start: start of the sequence, the lower bound. If only start</span>
<span class="sd"> is given than it is interpreted as stop and start will be 0.</span>
<span class="sd"> :type start: int or float</span>
<span class="sd"> :param stop: stop of sequence, the upper bound.</span>
<span class="sd"> :type stop: int or float</span>
<span class="sd"> :param step: step size, the common difference (constant difference</span>
<span class="sd"> between consecutive terms).</span>
<span class="sd"> :type step: int or float</span>
<span class="sd"> :returns: arithmetic bounded sequence</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># example of seq(4, 0, -0.4)</span>
<span class="c1"># without round:</span>
<span class="c1"># [4.0, 3.6, 3.2, 2.8, 2.4, 2.0, 1.5999999999999996,</span>
<span class="c1"># 1.1999999999999997, 0.7999999999999998, 0.3999999999999999]</span>
<span class="c1"># with round:</span>
<span class="c1"># [4.0, 3.6, 3.2, 2.8, 2.4, 2.0, 1.6, 1.2, 0.8, 0.4]</span>
<span class="c1"># example of seq(4, 0, -0.41)</span>
<span class="c1"># without round:</span>
<span class="c1"># [4.0, 3.59, 3.18, 2.77, 2.3600000000000003,</span>
<span class="c1"># 1.9500000000000002, 1.54, 1.1300000000000003,</span>
<span class="c1"># 0.7200000000000002, 0.31000000000000005]</span>
<span class="c1"># with round:</span>
<span class="c1"># [4.0, 3.59, 3.18, 2.77, 2.36, 1.95, 1.54, 1.13, 0.72, 0.31]</span>
<span class="k">if</span> <span class="n">stop</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">seq</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
<span class="n">start_str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
<span class="n">start_exp</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="s1">&#39;.&#39;</span> <span class="ow">in</span> <span class="n">start_str</span><span class="p">:</span>
<span class="n">start_exp</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">step_str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">step</span><span class="p">)</span>
<span class="n">step_exp</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="s1">&#39;.&#39;</span> <span class="ow">in</span> <span class="n">step_str</span><span class="p">:</span>
<span class="n">step_exp</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">step_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
<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="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>
<span class="k">return</span> <span class="n">lst</span></div>
<div class="viewcode-block" id="unique_ending"><a class="viewcode-back" href="../../pylib.html#pylib.data.unique_ending">[docs]</a><span class="k">def</span> <span class="nf">unique_ending</span><span class="p">(</span><span class="n">ids</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="sd">&quot;&quot;&quot;From id list get list with unique ending.</span>
<span class="sd"> :param ids: ids</span>
<span class="sd"> :type ids: list</span>
<span class="sd"> :param n: minumum chars or ints</span>
<span class="sd"> :type n: int</span>
<span class="sd"> :returns: unique ending of ids</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">ids</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">idi</span><span class="p">[</span><span class="o">-</span><span class="n">n</span><span class="p">:]</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
<span class="k">return</span> <span class="n">unique_ending</span><span class="p">(</span><span class="n">ids</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">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">x</span></div>
<div class="viewcode-block" id="get_id"><a class="viewcode-back" href="../../pylib.html#pylib.data.get_id">[docs]</a><span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">uide</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get full id from unique id ending.</span>
<span class="sd"> :param ids: ids</span>
<span class="sd"> :type ids: list</span>
<span class="sd"> :param uide: unique id ending</span>
<span class="sd"> :type uide: str</span>
<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"># 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>
</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

221
docs/build/html/_modules/pylib/date.html vendored Normal file
View File

@@ -0,0 +1,221 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.date &#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 pylib.date</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;Calculate spacial dates.</span>
<span class="sd">:Date: 2018-01-15</span>
<span class="sd">.. module:: date</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Special dates.</span>
<span class="sd"> </span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<div class="viewcode-block" id="gaußsche_osterformel"><a class="viewcode-back" href="../../pylib.html#pylib.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>
<span class="sd"> :param year: the year to calculate the Easter Sunday</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Easter Sunday as a day in march.</span>
<span class="sd"> :rtype: int</span>
<span class="sd"> </span>
<span class="sd"> :ivar X: Das Jahr / year</span>
<span class="sd"> :vartype X: int</span>
<span class="sd"> :ivar K(X): Die Säkularzahl</span>
<span class="sd"> :vartype K(X): int</span>
<span class="sd"> :ivar M(X): Die säkulare Mondschaltung</span>
<span class="sd"> :vartype M(X): int</span>
<span class="sd"> :ivar S(K): Die säkulare Sonnenschaltung</span>
<span class="sd"> :vartype S(K): int</span>
<span class="sd"> :ivar A(X): Den Mondparameter</span>
<span class="sd"> :vartype A(X): int</span>
<span class="sd"> :ivar D(A,M): Den Keim für den ersten Vollmond im Frühling</span>
<span class="sd"> :vartype D(A,M): int</span>
<span class="sd"> :ivar R(D,A): Die kalendarische Korrekturgröße</span>
<span class="sd"> :vartype R(D,A): int</span>
<span class="sd"> :ivar OG(D,R): Die Ostergrenze</span>
<span class="sd"> :vartype OG(D,R): int</span>
<span class="sd"> :ivar SZ(X,S): Den ersten Sonntag im März</span>
<span class="sd"> :vartype SZ(X,S): int</span>
<span class="sd"> :ivar OE(OG,SZ): Die Entfernung des Ostersonntags von der Ostergrenze (Osterentfernung in Tagen)</span>
<span class="sd"> :vartype OE(OG,SZ): int</span>
<span class="sd"> :ivar OS(OG,OE): Das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.)</span>
<span class="sd"> :vartype OS(OG,OE): int</span>
<span class="sd"> </span>
<span class="sd"> Algorithmus gilt für den Gregorianischen Kalender.</span>
<span class="sd"> source: https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">year</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">x</span> <span class="o">//</span> <span class="mi">100</span>
<span class="n">m</span> <span class="o">=</span> <span class="mi">15</span> <span class="o">+</span> <span class="p">(</span><span class="mi">3</span><span class="o">*</span><span class="n">k</span> <span class="o">+</span> <span class="mi">3</span><span class="p">)</span> <span class="o">//</span> <span class="mi">4</span> <span class="o">-</span> <span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">k</span> <span class="o">+</span> <span class="mi">13</span><span class="p">)</span> <span class="o">//</span> <span class="mi">25</span>
<span class="n">s</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">-</span> <span class="p">(</span><span class="mi">3</span><span class="o">*</span><span class="n">k</span> <span class="o">+</span> <span class="mi">3</span><span class="p">)</span> <span class="o">//</span> <span class="mi">4</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">x</span> <span class="o">%</span> <span class="mi">19</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="mi">19</span><span class="o">*</span><span class="n">a</span> <span class="o">+</span> <span class="n">m</span><span class="p">)</span> <span class="o">%</span> <span class="mi">30</span>
<span class="n">r</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span> <span class="o">+</span> <span class="n">a</span> <span class="o">//</span> <span class="mi">11</span><span class="p">)</span> <span class="o">//</span> <span class="mi">29</span>
<span class="n">og</span> <span class="o">=</span> <span class="mi">21</span> <span class="o">+</span> <span class="n">d</span> <span class="o">-</span> <span class="n">r</span>
<span class="n">sz</span> <span class="o">=</span> <span class="mi">7</span> <span class="o">-</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">x</span> <span class="o">//</span> <span class="mi">4</span> <span class="o">+</span> <span class="n">s</span><span class="p">)</span> <span class="o">%</span> <span class="mi">7</span>
<span class="n">oe</span> <span class="o">=</span> <span class="mi">7</span> <span class="o">-</span> <span class="p">(</span><span class="n">og</span> <span class="o">-</span> <span class="n">sz</span><span class="p">)</span> <span class="o">%</span> <span class="mi">7</span>
<span class="n">os</span> <span class="o">=</span> <span class="n">og</span> <span class="o">+</span> <span class="n">oe</span>
<span class="k">return</span> <span class="n">os</span></div>
<div class="viewcode-block" id="easter_sunday"><a class="viewcode-back" href="../../pylib.html#pylib.date.easter_sunday">[docs]</a><span class="k">def</span> <span class="nf">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Easter Sunday.</span>
<span class="sd"> :param year: the year to calculate the Easter Sunday</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Easter Sunday</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">march</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="n">year</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">march</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">gaußsche_osterformel</span><span class="p">(</span><span class="n">year</span><span class="p">))</span>
<span class="k">return</span> <span class="n">day</span></div>
<div class="viewcode-block" id="easter_friday"><a class="viewcode-back" href="../../pylib.html#pylib.date.easter_friday">[docs]</a><span class="k">def</span> <span class="nf">easter_friday</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Easter Friday.</span>
<span class="sd"> :param year: the year to calculate the Easter Friday</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Easter Friday</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=-</span><span class="mi">2</span><span class="p">)</span>
<span class="k">return</span> <span class="n">day</span></div>
<div class="viewcode-block" id="easter_monday"><a class="viewcode-back" href="../../pylib.html#pylib.date.easter_monday">[docs]</a><span class="k">def</span> <span class="nf">easter_monday</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Easter Monday.</span>
<span class="sd"> :param year: the year to calculate the Easter Monday</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Easter Monday</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=+</span><span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="n">day</span></div>
<div class="viewcode-block" id="ascension_of_jesus"><a class="viewcode-back" href="../../pylib.html#pylib.date.ascension_of_jesus">[docs]</a><span class="k">def</span> <span class="nf">ascension_of_jesus</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Ascension of Jesus.</span>
<span class="sd"> :param year: the year to calculate the ascension of Jesus</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of ascension of Jesus</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=+</span><span class="mi">39</span><span class="p">)</span>
<span class="k">return</span> <span class="n">day</span></div>
<div class="viewcode-block" id="pentecost"><a class="viewcode-back" href="../../pylib.html#pylib.date.pentecost">[docs]</a><span class="k">def</span> <span class="nf">pentecost</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Pentecost.</span>
<span class="sd"> :param year: the year to calculate the Pentecost</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Pentecost</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=+</span><span class="mi">49</span><span class="p">)</span>
<span class="k">return</span> <span class="n">day</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,511 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.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 pylib.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 equations.</span>
<span class="sd">:Date: 2019-11-04</span>
<span class="sd">.. module:: function</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Mathematical equations.</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>
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="k">import</span> <span class="n">lcm</span>
<div class="viewcode-block" id="transformation"><a class="viewcode-back" href="../../pylib.html#pylib.function.transformation">[docs]</a><span class="k">def</span> <span class="nf">transformation</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">scale_vertical</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">scale_horizontal</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">shift_horizontal</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shift_vertical</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Transform functions.</span>
<span class="sd"> :param f: function or list of functions</span>
<span class="sd"> :type f: function or list</span>
<span class="sd"> :param scale_vertical: &quot;a&quot; scale factor in vertical direction (default</span>
<span class="sd"> = 1)</span>
<span class="sd"> :type height: float</span>
<span class="sd"> :param scale_horizontal: &quot;b&quot; scale factor in horizontal direction</span>
<span class="sd"> (default = 1)</span>
<span class="sd"> :type height: float</span>
<span class="sd"> :param shift_horizontal: &quot;c&quot; shift factor in horizontal direction</span>
<span class="sd"> (default = 0)</span>
<span class="sd"> :type height: float</span>
<span class="sd"> :param shift_vertical: &quot;d&quot; shift factor in vertical direction (default</span>
<span class="sd"> = 0)</span>
<span class="sd"> :type height: float</span>
<span class="sd"> :returns: transformed function or list of transformed functions</span>
<span class="sd"> :rtype: function or list</span>
<span class="sd"> .. math::</span>
<span class="sd"> y = a \, f(b\,(x-c)) + d</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># shorter variables</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">scale_vertical</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">scale_horizontal</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">shift_horizontal</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">shift_vertical</span>
<span class="c1"># check if f is a function than put it in a list and return only</span>
<span class="c1"># the function, not the one element list</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="k">return</span> <span class="n">transformation</span><span class="p">(</span>
<span class="p">[</span><span class="n">f</span><span class="p">],</span> <span class="n">scale_vertical</span><span class="o">=</span><span class="n">a</span><span class="p">,</span> <span class="n">scale_horizontal</span><span class="o">=</span><span class="n">b</span><span class="p">,</span> <span class="n">shift_horizontal</span><span class="o">=</span><span class="n">c</span><span class="p">,</span> <span class="n">shift_vertical</span><span class="o">=</span><span class="n">d</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># otherwise assume list of functions</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">f</span><span class="p">:</span> <span class="c1"># if f is empty. End of the recursive fucntion</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="p">[</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="p">:</span> <span class="n">a</span><span class="o">*</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="n">b</span><span class="o">*</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="n">c</span><span class="p">),</span> <span class="n">t</span><span class="p">)</span><span class="o">+</span><span class="n">d</span><span class="p">]</span> <span class="o">+</span>\
<span class="n">transformation</span><span class="p">(</span>
<span class="n">f</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">scale_vertical</span><span class="o">=</span><span class="n">a</span><span class="p">,</span> <span class="n">scale_horizontal</span><span class="o">=</span><span class="n">b</span><span class="p">,</span> <span class="n">shift_horizontal</span><span class="o">=</span><span class="n">c</span><span class="p">,</span> <span class="n">shift_vertical</span><span class="o">=</span><span class="n">d</span><span class="p">)</span></div>
<div class="viewcode-block" id="sine_wave"><a class="viewcode-back" href="../../pylib.html#pylib.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"> :type degree: bool</span>
<span class="sd"> :results: sine wave function of spatial variable x and optional</span>
<span class="sd"> time t</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:`cosine_wave`</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="../../pylib.html#pylib.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"> :type degree: bool</span>
<span class="sd"> :results: sine wave function of spatial variable x and optional</span>
<span class="sd"> time t</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`sine_wave`</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>
<span class="c1">#</span>
<span class="c1"># Parametric equations</span>
<span class="c1"># roulette</span>
<span class="c1">#</span>
<div class="viewcode-block" id="hypotrochoid"><a class="viewcode-back" href="../../pylib.html#pylib.function.hypotrochoid">[docs]</a><span class="k">def</span> <span class="nf">hypotrochoid</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Hypotrochoid</span>
<span class="sd"> A point is attached with a distance d from the center of a circle</span>
<span class="sd"> of radius r. The circle is rolling around the inside of a fixed</span>
<span class="sd"> circle of radius R.</span>
<span class="sd"> :param R: radius of the fixed exterior circle</span>
<span class="sd"> :type R: float</span>
<span class="sd"> :param r: radius of the rolling circle inside of the fixed circle</span>
<span class="sd"> :typre r: float</span>
<span class="sd"> :param d: distance from the center of the interior circle</span>
<span class="sd"> :type d: float</span>
<span class="sd"> :results: functions for x of theta and y of theta</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. math::</span>
<span class="sd"> x(\theta) = (R - r)\cos\theta + d\cos\left(\frac{R-r}{r}\theta\right) \\</span>
<span class="sd"> y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\</span>
<span class="sd"> \theta = \left[0, 2\pi\frac{\mathrm{lcm}(r, R)}{R}\right]</span>
<span class="sd"> ::</span>
<span class="sd"> * * *</span>
<span class="sd"> * R *</span>
<span class="sd"> * *</span>
<span class="sd"> * * * *</span>
<span class="sd"> * * r **</span>
<span class="sd"> * * .... *</span>
<span class="sd"> * * d *</span>
<span class="sd"> * * **</span>
<span class="sd"> * * * *</span>
<span class="sd"> * *</span>
<span class="sd"> * *</span>
<span class="sd"> * * *</span>
<span class="sd"> &gt;&gt;&gt; x, y = hyotrochoid(20, 6, 6)[:1]</span>
<span class="sd"> &gt;&gt;&gt; x, y, theta_end = hyotrochoid(20, 6, 6)</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`mathematics.lcm`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">d</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">((</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</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">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">d</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">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">theta_end</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">lcm</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">R</span><span class="p">)</span><span class="o">/</span><span class="n">R</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span></div>
<div class="viewcode-block" id="epitrochoid"><a class="viewcode-back" href="../../pylib.html#pylib.function.epitrochoid">[docs]</a><span class="k">def</span> <span class="nf">epitrochoid</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Epitrochoid</span>
<span class="sd"> A point is attached with a distance d from the center of a circle</span>
<span class="sd"> of radius r. The circle is rolling around the outside of a fixed</span>
<span class="sd"> circle of radius R.</span>
<span class="sd"> :param R: radius of the fixed interior circle</span>
<span class="sd"> :type R: float</span>
<span class="sd"> :param r: radius of the rolling circle outside of the fixed circle</span>
<span class="sd"> :typre r: float</span>
<span class="sd"> :param d: distance from the center of the exterior circle</span>
<span class="sd"> :type d: float</span>
<span class="sd"> :results: functions for x of theta and y of theta</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. math::</span>
<span class="sd"> x(\theta) = (R + r)\cos\theta - d\cos\left(\frac{R+r}{r}\theta\right) \\</span>
<span class="sd"> y(\theta) = (R + r)\sin\theta - d\sin\left(\frac{R+r}{r}\theta\right) \\</span>
<span class="sd"> \theta = \left[0, 2\pi\right]</span>
<span class="sd"> ::</span>
<span class="sd"> * * *</span>
<span class="sd"> * R *</span>
<span class="sd"> * *</span>
<span class="sd"> * * * *</span>
<span class="sd"> * * * r *</span>
<span class="sd"> * ** .... *</span>
<span class="sd"> * ** d *</span>
<span class="sd"> * * * *</span>
<span class="sd"> * * * *</span>
<span class="sd"> * *</span>
<span class="sd"> * *</span>
<span class="sd"> * * *</span>
<span class="sd"> &gt;&gt;&gt; x, y = epitrochoid(3, 1, 0.5)[:1]</span>
<span class="sd"> &gt;&gt;&gt; x, y, theta_end = epitrochoid(3, 1, 0.5)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">d</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">((</span><span class="n">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</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">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">d</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">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">theta_end</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="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span></div>
<div class="viewcode-block" id="to_str"><a class="viewcode-back" href="../../pylib.html#pylib.function.to_str">[docs]</a><span class="k">def</span> <span class="nf">to_str</span><span class="p">(</span><span class="n">f</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">x_0</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">x_1</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">w</span><span class="o">=</span><span class="mi">80</span><span class="p">,</span> <span class="n">density</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">char_set</span><span class="o">=</span><span class="s2">&quot;line&quot;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent functions as string frame with a specific character set.</span>
<span class="sd"> which are normed to the range of [0, 1] to</span>
<span class="sd"> :param f: function or list of functions normed to the range of [0, 1]</span>
<span class="sd"> :type f: function or list</span>
<span class="sd"> :param h: number of chars in vertical direction</span>
<span class="sd"> :type h: int</span>
<span class="sd"> :param w: number of chars in horizontal direction</span>
<span class="sd"> :type w: int</span>
<span class="sd"> :param char_set: either &quot;braille&quot; or &quot;block&quot;. &quot;braille&quot; uses Unicode</span>
<span class="sd"> Characters in the Braille Patterns Block (fisrt index U+2800, last</span>
<span class="sd"> index U+28FF [CUDB]_) and the &quot;block&quot; uses part of the Unicode</span>
<span class="sd"> Characters in the Block Elements Block (fisrt index U+2580, last</span>
<span class="sd"> index U+259F [CUDB]_). Alias for braille is line and alias for</span>
<span class="sd"> block is histogram</span>
<span class="sd"> :type char_set: str</span>
<span class="sd"> Usage:</span>
<span class="sd"> * case dependent arguments</span>
<span class="sd"> * 1 quasi line plot (braille characters)</span>
<span class="sd"> f = lambda function (lambda x, t=0: ...)</span>
<span class="sd"> x_1 = max x value</span>
<span class="sd"> x_0 = min x value</span>
<span class="sd"> t = time (animation)</span>
<span class="sd"> * 2 histogram (block characters)</span>
<span class="sd"> f = lambda function (lambda x, t=0: ...)</span>
<span class="sd"> x_1 = max x value</span>
<span class="sd"> x_0 = min x value</span>
<span class="sd"> t = time (animation)</span>
<span class="sd"> chart=&quot;histogram&quot;</span>
<span class="sd"> * general arguments</span>
<span class="sd"> w = window width in number of chars</span>
<span class="sd"> density = number of data point per pixel (for line chart higher density makes thicker lines)</span>
<span class="sd"> chart = either &quot;line&quot; or &quot;histogram&quot;</span>
<span class="sd"> .. rubric:: Braille Patterns Block</span>
<span class="sd"> * Dots or pixels per character in vertical direction: 6</span>
<span class="sd"> * Dots or pixels per character in horizontal direction: 2</span>
<span class="sd"> First dot (bottom left) is the zero (0) position of the</span>
<span class="sd"> function. So, a function value of zero does not mean to have zero</span>
<span class="sd"> dots but one.</span>
<span class="sd"> Example of 3 columns and 3 rows (upside down view of &#39;normal&#39; braille/drawille position)</span>
<span class="sd"> ::</span>
<span class="sd"> | ^ y axis</span>
<span class="sd"> | |</span>
<span class="sd"> | ,_____,,_____,,_____,</span>
<span class="sd"> 7 + | * *|| * *|| * *|</span>
<span class="sd"> 6 + | * *|| * *|| * *|</span>
<span class="sd"> 5 + | * *|| * *|| * *|</span>
<span class="sd"> 4 + | * *|| * *|| * *|</span>
<span class="sd"> | ;=====;;=====;;=====;</span>
<span class="sd"> 3 + | * *|| * *|| * *|</span>
<span class="sd"> 2 + | * *|| * *|| * *|</span>
<span class="sd"> 1 + | * *|| * *|| * *|</span>
<span class="sd"> 0 + - | * *|| * *|| * *| ---&gt; x axis</span>
<span class="sd"> | ;=====;;=====;;=====;</span>
<span class="sd"> -1 + | * *|| * *|| * *|</span>
<span class="sd"> -2 + | * *|| * *|| * *|</span>
<span class="sd"> -3 + | * *|| * *|| * *|</span>
<span class="sd"> -4 + | * *|| * *|| * *|</span>
<span class="sd"> | `````````````````````</span>
<span class="sd"> | |</span>
<span class="sd"> `-----+--+---+--+---+--+-------------</span>
<span class="sd"> -2 -1 0 1 2 3</span>
<span class="sd"> .. rubric:: Block Elements Block</span>
<span class="sd"> * Dots or pixels per character in vertical direction: 8</span>
<span class="sd"> * Dots or pixels per character in horizontal direction: 1</span>
<span class="sd"> Example of 3 columns and 3 rows</span>
<span class="sd"> ::</span>
<span class="sd"> | ^ y axis</span>
<span class="sd"> | |</span>
<span class="sd"> | ,_____,,_____,,_____,</span>
<span class="sd"> 15 + | --- || --- || --- |</span>
<span class="sd"> 14 + | --- || --- || --- |</span>
<span class="sd"> 13 + | --- || --- || --- |</span>
<span class="sd"> 12 + | --- || --- || --- |</span>
<span class="sd"> 11 + | --- || --- || --- |</span>
<span class="sd"> 10 + | --- || --- || --- |</span>
<span class="sd"> 9 + | --- || --- || --- |</span>
<span class="sd"> 8 + | --- || --- || --- |</span>
<span class="sd"> | ;=====;;=====;;=====;</span>
<span class="sd"> 7 + | --- || --- || --- |</span>
<span class="sd"> 6 + | --- || --- || --- |</span>
<span class="sd"> 5 + | --- || --- || --- |</span>
<span class="sd"> 4 + | --- || --- || --- |</span>
<span class="sd"> 3 + | --- || --- || --- |</span>
<span class="sd"> 2 + | --- || --- || --- |</span>
<span class="sd"> 1 + | --- || --- || --- |</span>
<span class="sd"> 0 + - | --- || --- || --- | ---&gt; x axis</span>
<span class="sd"> | ;=====;;=====;;=====;</span>
<span class="sd"> -1 + | --- || --- || --- |</span>
<span class="sd"> -2 + | --- || --- || --- |</span>
<span class="sd"> -3 + | --- || --- || --- |</span>
<span class="sd"> -4 + | --- || --- || --- |</span>
<span class="sd"> -5 + | --- || --- || --- |</span>
<span class="sd"> -6 + | --- || --- || --- |</span>
<span class="sd"> -7 + | --- || --- || --- |</span>
<span class="sd"> -8 + | --- || --- || --- |</span>
<span class="sd"> | `````````````````````</span>
<span class="sd"> | |</span>
<span class="sd"> `------+------+------+---------------</span>
<span class="sd"> -1 0 1</span>
<span class="sd"> .. rubric:: References</span>
<span class="sd"> .. [CUDB] `Unicode Database - Blocks &lt;ftp://ftp.unicode.org/Public/UNIDATA/Blocks.txt&gt;`_</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`pylib.function.transformation`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># scale function to used chars and dots/pixel in y direction (4 for braille characters): from [0, 1] to [0, chars*4-1]</span>
<span class="c1"># negate the function because the y axis is pointing downwards: from [0, 1] to [-1, 0] or from [0, chars*4-1] to [-(chars*4-1), 0]</span>
<span class="c1"># and becasue of the negation shift the function by one dot/pixel, otherwise the function would need another char, because the 0 is on an another char on the &quot;positive side&quot;.</span>
<span class="c1"># devide the time by the number of dots/pixel in x direction (2 for braille characters)</span>
<span class="n">window_factor</span> <span class="o">=</span> <span class="n">w</span><span class="o">/</span><span class="p">(</span><span class="n">x_1</span><span class="o">-</span><span class="n">x_0</span><span class="p">)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;line&quot;</span><span class="p">,</span> <span class="s2">&quot;braille&quot;</span><span class="p">]:</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">4</span>
<span class="n">a</span> <span class="o">=</span> <span class="o">-</span><span class="p">(</span><span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">b</span> <span class="o">=</span> <span class="mi">1</span><span class="o">/</span><span class="n">pixels_horizontal</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">transformation</span><span class="p">(</span><span class="n">f</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="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">canvas</span> <span class="o">=</span> <span class="n">drawille</span><span class="o">.</span><span class="n">Canvas</span><span class="p">()</span>
<span class="c1"># divide step width of the sequence by 2 (double density, 2 dots/pixel per char)</span>
<span class="c1"># multiplicate x by 2 (2 dots/pixel per char)</span>
<span class="k">for</span> <span class="n">x_i</span> <span class="ow">in</span> <span class="n">seq</span><span class="p">(</span><span class="n">x_0</span><span class="o">*</span><span class="n">window_factor</span><span class="o">*</span><span class="n">pixels_horizontal</span><span class="p">,</span> <span class="n">x_1</span><span class="o">*</span><span class="n">window_factor</span><span class="o">*</span><span class="n">pixels_horizontal</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="n">density</span><span class="p">):</span>
<span class="n">canvas</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">f</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">t</span><span class="p">))</span>
<span class="c1">#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">canvas</span><span class="o">.</span><span class="n">frame</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;histogram&quot;</span><span class="p">,</span> <span class="s2">&quot;block&quot;</span><span class="p">]:</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">8</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="o">-</span><span class="mi">1</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">transformation</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">density</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">density</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1"># density max 1!</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">seq</span><span class="p">(</span><span class="n">x_0</span><span class="o">*</span><span class="n">window_factor</span><span class="p">,</span> <span class="n">x_1</span><span class="o">*</span><span class="n">window_factor</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="n">pixels_horizontal</span><span class="o">/</span><span class="n">density</span><span class="p">)</span>
<span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">drawblock</span><span class="o">.</span><span class="n">histogram</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">frame</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,610 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.geometry &#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 pylib.geometry</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;2D geometry objects.</span>
<span class="sd">:Date: 2019-08-28</span>
<span class="sd">.. module:: geometry</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Geometry objects.</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>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<div class="viewcode-block" id="distance"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.distance">[docs]</a><span class="k">def</span> <span class="nf">distance</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Distance between two points (or length of a straight line).</span>
<span class="sd"> :param point1: first point (first end point of straight line)</span>
<span class="sd"> :type point1: tuple</span>
<span class="sd"> :param point2: second point (second end point of straight line)</span>
<span class="sd"> :type point2: tuple</span>
<span class="sd"> :returns: distance between the two points</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">((</span><span class="n">point2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="n">point1</span><span class="p">[</span><span class="mi">0</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">point2</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">point1</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span></div>
<div class="viewcode-block" id="angle"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.angle">[docs]</a><span class="k">def</span> <span class="nf">angle</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Angle of point or between two points.</span>
<span class="sd"> :param point1: (first) point</span>
<span class="sd"> :type point1: tuple</span>
<span class="sd"> :param point2: second point (default = None)</span>
<span class="sd"> :type point2: tuple</span>
<span class="sd"> :returns: angle of point or between two points</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">point2</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="n">point1</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">point1</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="n">point2</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">point1</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">point2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="n">point1</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span></div>
<div class="viewcode-block" id="translate"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.translate">[docs]</a><span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="n">vec</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Translate a point or polygon by a given vector.</span>
<span class="sd"> :param vec: translation vector</span>
<span class="sd"> :type vec: tuple</span>
<span class="sd"> :param `*pts`: points to translate</span>
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`translate_xy`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">vx</span><span class="p">,</span> <span class="n">vy</span> <span class="o">=</span> <span class="n">vec</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">([(</span><span class="n">x</span><span class="o">+</span><span class="n">vx</span><span class="p">,</span> <span class="n">y</span><span class="o">+</span><span class="n">vy</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">])</span></div>
<div class="viewcode-block" id="translate_xy"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.translate_xy">[docs]</a><span class="k">def</span> <span class="nf">translate_xy</span><span class="p">(</span><span class="n">vec</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Translate a point or polygon by a given vector.</span>
<span class="sd"> :param vec: translation vector</span>
<span class="sd"> :type vec: tuple</span>
<span class="sd"> :param x: points to translate</span>
<span class="sd"> :type x: int or float or list</span>
<span class="sd"> :param y: points to translate</span>
<span class="sd"> :type y: int or float or list</span>
<span class="sd"> :returns: (x&#39;, y&#39;)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`translate`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">vx</span><span class="p">,</span> <span class="n">vy</span> <span class="o">=</span> <span class="n">vec</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="s2">&quot;__len__&quot;</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="s2">&quot;__len__&quot;</span><span class="p">):</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span>
<span class="n">xp</span> <span class="o">=</span> <span class="p">[</span><span class="n">xi</span><span class="o">+</span><span class="n">vx</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span>
<span class="n">yp</span> <span class="o">=</span> <span class="p">[</span><span class="n">yi</span><span class="o">+</span><span class="n">vy</span> <span class="k">for</span> <span class="n">yi</span> <span class="ow">in</span> <span class="n">y</span><span class="p">]</span>
<span class="c1"># no list if it is only one value</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">xp</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="n">xp</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">yp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">xp</span><span class="p">,</span> <span class="n">yp</span></div>
<div class="viewcode-block" id="rotate"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.rotate">[docs]</a><span class="k">def</span> <span class="nf">rotate</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotate a point or polygon counterclockwise by a given angle</span>
<span class="sd"> around a given origin. The angle should be given in radians.</span>
<span class="sd"> :param origin: the center of rotation</span>
<span class="sd"> :type origin: tuple</span>
<span class="sd"> :param angle: the rotation angle</span>
<span class="sd"> :type angle: int or float</span>
<span class="sd"> :param `*pts`: points to rotate</span>
<span class="sd"> :param `**kwargs`: options</span>
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`rotate_xy`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ox</span><span class="p">,</span> <span class="n">oy</span> <span class="o">=</span> <span class="n">origin</span>
<span class="c1"># add first point to the end</span>
<span class="k">if</span> <span class="s2">&quot;closed&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;closed&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">pts</span> <span class="o">+=</span> <span class="p">(</span><span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">],)</span>
<span class="n">result</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">([(</span><span class="n">ox</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">px</span> <span class="o">-</span> <span class="n">ox</span><span class="p">)</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">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">py</span> <span class="o">-</span> <span class="n">oy</span><span class="p">),</span>
<span class="n">oy</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">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">px</span> <span class="o">-</span> <span class="n">ox</span><span class="p">)</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">py</span> <span class="o">-</span> <span class="n">oy</span><span class="p">))</span>
<span class="k">for</span> <span class="p">(</span><span class="n">px</span><span class="p">,</span> <span class="n">py</span><span class="p">)</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">])</span>
<span class="c1"># no tuple in tuple if it is only one point</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">result</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="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="rotate_deg"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.rotate_deg">[docs]</a><span class="k">def</span> <span class="nf">rotate_deg</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotate a point or polygon counterclockwise by a given angle</span>
<span class="sd"> around a given origin. The angle should be given in degrees.</span>
<span class="sd"> :param origin: the center of rotation</span>
<span class="sd"> :type origin: tuple</span>
<span class="sd"> :param angle: the rotation angle</span>
<span class="sd"> :type angle: int or float</span>
<span class="sd"> :param `*pts`: points to rotate</span>
<span class="sd"> :param `**kwargs`: options</span>
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`rotate`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">rotate</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</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">180</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="rotate_xy"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.rotate_xy">[docs]</a><span class="k">def</span> <span class="nf">rotate_xy</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotate x and y coordinates counterclockwise by a given angle</span>
<span class="sd"> around a given origin. The angle should be given in radians.</span>
<span class="sd"> :param origin: the center of rotation</span>
<span class="sd"> :type origin: tuple</span>
<span class="sd"> :param angle: the rotation angle</span>
<span class="sd"> :type angle: int or float</span>
<span class="sd"> :param x: x coordinates</span>
<span class="sd"> :type x: int or float or list</span>
<span class="sd"> :param y: y coordinates</span>
<span class="sd"> :type y: int or float or list</span>
<span class="sd"> :param `**kwargs`: options</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`rotate`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ox</span><span class="p">,</span> <span class="n">oy</span> <span class="o">=</span> <span class="n">origin</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="s2">&quot;__len__&quot;</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="s2">&quot;__len__&quot;</span><span class="p">):</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span>
<span class="c1"># add first point to the end</span>
<span class="k">if</span> <span class="s2">&quot;closed&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;closed&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">x</span><span class="o">.</span><span class="n">append</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">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">x_result</span> <span class="o">=</span> <span class="p">[</span><span class="n">ox</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">xi</span> <span class="o">-</span> <span class="n">ox</span><span class="p">)</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">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">yi</span> <span class="o">-</span> <span class="n">oy</span><span class="p">)</span>
<span class="k">for</span> <span class="n">xi</span><span class="p">,</span> <span class="n">yi</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span>
<span class="n">y_result</span> <span class="o">=</span> <span class="p">[</span><span class="n">oy</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">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">xi</span> <span class="o">-</span> <span class="n">ox</span><span class="p">)</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">yi</span> <span class="o">-</span> <span class="n">oy</span><span class="p">)</span>
<span class="k">for</span> <span class="n">xi</span><span class="p">,</span> <span class="n">yi</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span>
<span class="c1"># no list if it is only one value</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x_result</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="n">x_result</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">y_result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">x_result</span><span class="p">,</span> <span class="n">y_result</span></div>
<div class="viewcode-block" id="rectangle"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.rectangle">[docs]</a><span class="k">def</span> <span class="nf">rectangle</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\</span>
<span class="sd"> :param width: the width of the rectangle</span>
<span class="sd"> :type width: int or float</span>
<span class="sd"> :param height: the height of the rectangle</span>
<span class="sd"> :type height: int or float</span>
<span class="sd"> :returns: (point1, point2, point3, point4)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">pt1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="n">pt2</span> <span class="o">=</span> <span class="p">(</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="n">pt3</span> <span class="o">=</span> <span class="p">(</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="n">pt4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="k">return</span> <span class="n">pt1</span><span class="p">,</span> <span class="n">pt2</span><span class="p">,</span> <span class="n">pt3</span><span class="p">,</span> <span class="n">pt4</span><span class="p">,</span> <span class="n">pt1</span></div>
<div class="viewcode-block" id="square"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.square">[docs]</a><span class="k">def</span> <span class="nf">square</span><span class="p">(</span><span class="n">width</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\</span>
<span class="sd"> :param width: the edge size of the square</span>
<span class="sd"> :type width: int or float</span>
<span class="sd"> :returns: (point1, point2, point3, point4)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`rectangle`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">rectangle</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span></div>
<div class="viewcode-block" id="lines"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.lines">[docs]</a><span class="k">def</span> <span class="nf">lines</span><span class="p">(</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Lines defined by a list of end points.</span>
<span class="sd"> :param pts: list of points in absolute global coordinate system. If</span>
<span class="sd"> keyword inc is given than the inc decides what the left and the</span>
<span class="sd"> right end point of the line is, otherwise it is assumed that the</span>
<span class="sd"> points build a solid line, that is lines between the given points</span>
<span class="sd"> in given order.</span>
<span class="sd"> :type pts: list</span>
<span class="sd"> :param `**kwargs`: options:</span>
<span class="sd"> * deformation -- list of points. Additional deformation</span>
<span class="sd"> (translation) at point.</span>
<span class="sd"> * factor -- factor of the deformation (default = 1).</span>
<span class="sd"> * inc -- the incidence table, a list of 2 element lists. The inc</span>
<span class="sd"> decides what the left and the right end point of the line is.</span>
<span class="sd"> * index_offset -- starting index of lists (default = 0).</span>
<span class="sd"> :returns: list of endpoints for each line;</span>
<span class="sd"> [((point1_x, point1_y), (point2_x, point2_y)),</span>
<span class="sd"> (p1, p2),</span>
<span class="sd"> ...]</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`~geometry_plot.plot_lines` of the :mod:`geometry_plot`</span>
<span class="sd"> module to plot the lines</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s1">&#39;index_offset&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="s1">&#39;deformation&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">if</span> <span class="s1">&#39;factor&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">pts</span> <span class="o">=</span> <span class="p">[(</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">])</span> <span class="k">for</span>
<span class="n">p</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">pts</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;deformation&#39;</span><span class="p">])]</span>
<span class="k">if</span> <span class="s1">&#39;inc&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[(</span><span class="n">pts</span><span class="p">[</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">]],</span>
<span class="n">pts</span><span class="p">[</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">]])</span> <span class="k">for</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;inc&#39;</span><span class="p">]]</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">pts</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">pts</span><span class="p">[</span><span class="mi">1</span><span class="p">:]))</span></div>
<div class="viewcode-block" id="cubics"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.cubics">[docs]</a><span class="k">def</span> <span class="nf">cubics</span><span class="p">(</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Cubic lines defined by a list of two end points. The deformation</span>
<span class="sd"> as displacement and rotation (radians) is defined element wise as</span>
<span class="sd"> keyword argument deformation or global node wise as</span>
<span class="sd"> global_deformation. The global coordinate system is xy. x in the</span>
<span class="sd"> right direction and y in the top direction.</span>
<span class="sd"> :param pts: list of points in absolute global coordinate system. If</span>
<span class="sd"> keyword inc is given than the inc decides what the left and the</span>
<span class="sd"> right end point of the line is, otherwise it is assumed that the</span>
<span class="sd"> points build a solid line, that is lines between the given points</span>
<span class="sd"> in given order.</span>
<span class="sd"> :type pts_rot: list</span>
<span class="sd"> :param `**kwargs`: options:</span>
<span class="sd"> * deformation -- list of deformation element wise. Additional</span>
<span class="sd"> deformation (translation and rotation in radians) at element</span>
<span class="sd"> left and right node.</span>
<span class="sd"> * rotation_plane -- rotation plane of the element wise</span>
<span class="sd"> deformation defined by a string; either &#39;xy&#39; or &#39;xz&#39; (default</span>
<span class="sd"> = &#39;xy&#39;). x in the right direction and y in the top direction</span>
<span class="sd"> or z in the bottom direction.</span>
<span class="sd"> * global_deformation -- list of deformation global node wise.</span>
<span class="sd"> Additional deformation (horizontal translation, vertical</span>
<span class="sd"> translation and rotation in radians) at node.</span>
<span class="sd"> * factor -- factor of the derformation (default = 1).</span>
<span class="sd"> * inc -- the incidence table, a list of 2 element lists. The inc</span>
<span class="sd"> decides what the left and the right end point of the line is.</span>
<span class="sd"> * index_offset -- starting index of lists (default = 0).</span>
<span class="sd"> :returns: list of endpoints for each line;</span>
<span class="sd"> [(((point1_x, point1_y) angle1), ((point2_x, point2_y), angle2),</span>
<span class="sd"> (p1, angle1, p2, angle2),</span>
<span class="sd"> ...]</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s1">&#39;index_offset&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="s1">&#39;deformation&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">or</span> <span class="s1">&#39;global_deformation&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">if</span> <span class="s1">&#39;factor&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="s1">&#39;inc&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">if</span> <span class="s1">&#39;global_deformation&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">lr</span> <span class="o">=</span> <span class="p">[(</span><span class="n">pts</span><span class="p">[</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">]],</span>
<span class="n">pts</span><span class="p">[</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">]])</span> <span class="k">for</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;inc&#39;</span><span class="p">]]</span>
<span class="n">ang</span> <span class="o">=</span> <span class="p">[</span><span class="n">angle</span><span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">lr</span><span class="p">]</span>
<span class="c1"># system deformation</span>
<span class="n">U</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;global_deformation&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="s1">&#39;rotation_plane&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="s1">&#39;xz&#39;</span> <span class="o">==</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;rotation_plane&#39;</span><span class="p">]:</span>
<span class="c1"># system deformation left X Z RY right X Z RY element wise</span>
<span class="c1"># Z downwards -&gt; convert to X Y RZ</span>
<span class="n">Ue</span> <span class="o">=</span> <span class="p">[[</span> <span class="n">U</span><span class="p">[(</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">0</span><span class="p">],</span>
<span class="o">-</span><span class="n">U</span><span class="p">[(</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">1</span><span class="p">],</span>
<span class="n">U</span><span class="p">[(</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">2</span><span class="p">],</span>
<span class="n">U</span><span class="p">[(</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">0</span><span class="p">],</span>
<span class="o">-</span><span class="n">U</span><span class="p">[(</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">1</span><span class="p">],</span>
<span class="n">U</span><span class="p">[(</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">2</span><span class="p">]]</span> <span class="k">for</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;inc&#39;</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># system deformation left X Y RZ right X Y RZ element wise</span>
<span class="n">Ue</span> <span class="o">=</span> <span class="p">[[</span><span class="n">U</span><span class="p">[(</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">0</span><span class="p">],</span>
<span class="n">U</span><span class="p">[(</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">1</span><span class="p">],</span>
<span class="n">U</span><span class="p">[(</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">2</span><span class="p">],</span>
<span class="n">U</span><span class="p">[(</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">0</span><span class="p">],</span>
<span class="n">U</span><span class="p">[(</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">1</span><span class="p">],</span>
<span class="n">U</span><span class="p">[(</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">])][</span><span class="mi">2</span><span class="p">]]</span> <span class="k">for</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;inc&#39;</span><span class="p">]]</span>
<span class="c1"># element deformation, X Y RZ to x r rz</span>
<span class="c1"># back transformation T^T = [[c, s, 0], [-s, c, 0], [0, 0, 1]]</span>
<span class="n">u</span> <span class="o">=</span> <span class="p">[[(</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angi</span><span class="p">)</span><span class="o">*</span><span class="n">Uei</span><span class="p">[</span><span class="mi">0</span><span class="p">]</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">angi</span><span class="p">)</span><span class="o">*</span><span class="n">Uei</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="p">(</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">angi</span><span class="p">)</span><span class="o">*</span><span class="n">Uei</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angi</span><span class="p">)</span><span class="o">*</span><span class="n">Uei</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="n">Uei</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="p">(</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angi</span><span class="p">)</span><span class="o">*</span><span class="n">Uei</span><span class="p">[</span><span class="mi">3</span><span class="p">]</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">angi</span><span class="p">)</span><span class="o">*</span><span class="n">Uei</span><span class="p">[</span><span class="mi">4</span><span class="p">])</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="p">(</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">angi</span><span class="p">)</span><span class="o">*</span><span class="n">Uei</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angi</span><span class="p">)</span><span class="o">*</span><span class="n">Uei</span><span class="p">[</span><span class="mi">4</span><span class="p">])</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="n">Uei</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">]]</span>
<span class="k">for</span> <span class="n">Uei</span><span class="p">,</span> <span class="n">angi</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">Ue</span><span class="p">,</span> <span class="n">ang</span><span class="p">)]</span>
<span class="k">else</span><span class="p">:</span> <span class="c1"># deformation</span>
<span class="c1"># the deformation is in element coordinate system, therefore the angle is needed</span>
<span class="k">if</span> <span class="s1">&#39;rotation_plane&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="s1">&#39;xz&#39;</span> <span class="o">==</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;rotation_plane&#39;</span><span class="p">]:</span>
<span class="n">u</span> <span class="o">=</span> <span class="p">[[</span> <span class="n">ue</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="o">-</span><span class="n">ue</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="n">ue</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="n">ue</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="o">-</span><span class="n">ue</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">],</span>
<span class="n">ue</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">]]</span> <span class="k">for</span> <span class="n">ue</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;deformation&#39;</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">u</span> <span class="o">=</span> <span class="p">[[</span><span class="n">ui</span><span class="o">*</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">ui</span> <span class="ow">in</span> <span class="n">ue</span><span class="p">]</span> <span class="k">for</span> <span class="n">ue</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;deformation&#39;</span><span class="p">]]</span>
<span class="k">return</span> <span class="p">[(</span><span class="n">pts</span><span class="p">[</span><span class="n">l</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">]],</span>
<span class="n">pts</span><span class="p">[</span><span class="n">r</span><span class="o">-</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;index_offset&#39;</span><span class="p">]],</span>
<span class="n">d</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">),</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;inc&#39;</span><span class="p">],</span> <span class="n">u</span><span class="p">)]</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">pts</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">pts</span><span class="p">[</span><span class="mi">1</span><span class="p">:]))</span></div>
<div class="viewcode-block" id="interpolate_hermite"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.interpolate_hermite">[docs]</a><span class="k">def</span> <span class="nf">interpolate_hermite</span><span class="p">(</span><span class="n">lvd</span><span class="p">,</span> <span class="n">lr</span><span class="p">,</span> <span class="n">rvd</span><span class="p">,</span> <span class="n">rr</span><span class="p">,</span> <span class="n">lhd</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">rhd</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">scale_x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">scale_y</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">samples</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Interpolate cubic line with hermite boundary conditions.</span>
<span class="sd"> :param lvd: left vertcal deflection</span>
<span class="sd"> :type lvd: int or float</span>
<span class="sd"> :param lr: left rotation</span>
<span class="sd"> :type lr: int or float</span>
<span class="sd"> :param rvd: right vertical deflection</span>
<span class="sd"> :type rvd: int or float</span>
<span class="sd"> :param rr: right rotation</span>
<span class="sd"> :type rr: int or float</span>
<span class="sd"> :param lhd: left horizontal deformation (default = 0)</span>
<span class="sd"> :type lhd: int or float</span>
<span class="sd"> :param rhd: right horizontal deformation (default = 0)</span>
<span class="sd"> :type rhd: int or float</span>
<span class="sd"> :param scale_x: length of element (default = 1)</span>
<span class="sd"> :type scale_x: int or float</span>
<span class="sd"> :param scale_y: factor of the deformation (default = 1).</span>
<span class="sd"> This does not change the length.</span>
<span class="sd"> :type scale_y: int or float</span>
<span class="sd"> :param samples: number of sampling points (default = 10)</span>
<span class="sd"> :type samples: int</span>
<span class="sd"> .. math::</span>
<span class="sd"> s = \frac{x - x_1}{L} \\</span>
<span class="sd"> x = s\,L + x_1</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">L</span> <span class="o">=</span> <span class="n">scale_x</span>
<span class="n">Lp</span> <span class="o">=</span> <span class="n">L</span> <span class="o">+</span> <span class="n">rhd</span> <span class="o">-</span> <span class="n">lhd</span>
<span class="c1"># x=[0,1] in non-dimensional coordinates</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</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="n">num</span><span class="o">=</span><span class="n">samples</span><span class="p">)</span>
<span class="n">N1</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">-</span> <span class="mi">3</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="mi">2</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">3</span>
<span class="n">N2</span> <span class="o">=</span> <span class="p">(</span> <span class="n">x</span> <span class="o">-</span> <span class="mi">2</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">x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="n">Lp</span>
<span class="n">N3</span> <span class="o">=</span> <span class="mi">3</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="mi">2</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">3</span>
<span class="n">N4</span> <span class="o">=</span> <span class="p">(</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">x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="n">Lp</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">x</span><span class="o">*</span><span class="n">Lp</span>
<span class="c1"># x=[0,L] in global coordinates</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">Lp</span><span class="p">,</span> <span class="n">num</span><span class="o">=</span><span class="n">samples</span><span class="p">)</span>
<span class="n">N1</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">-</span> <span class="mi">3</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">Lp</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">3</span><span class="o">/</span><span class="n">Lp</span><span class="o">**</span><span class="mi">3</span>
<span class="n">N2</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">x</span><span class="o">**</span><span class="mi">2</span><span class="o">/</span><span class="n">Lp</span> <span class="o">+</span> <span class="n">x</span><span class="o">**</span><span class="mi">3</span><span class="o">/</span><span class="n">Lp</span><span class="o">**</span><span class="mi">2</span>
<span class="n">N3</span> <span class="o">=</span> <span class="mi">3</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">Lp</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">3</span><span class="o">/</span><span class="n">Lp</span><span class="o">**</span><span class="mi">3</span>
<span class="n">N4</span> <span class="o">=</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">Lp</span> <span class="o">+</span> <span class="n">x</span><span class="o">**</span><span class="mi">3</span><span class="o">/</span><span class="n">Lp</span><span class="o">**</span><span class="mi">2</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">N1</span><span class="o">*</span><span class="n">lvd</span> <span class="o">+</span> <span class="n">N2</span><span class="o">*</span><span class="n">lr</span> <span class="o">+</span> <span class="n">N3</span><span class="o">*</span><span class="n">rvd</span> <span class="o">+</span> <span class="n">N4</span><span class="o">*</span><span class="n">rr</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="n">lhd</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">v</span><span class="o">*</span><span class="n">scale_y</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span></div>
<span class="c1">#</span>
<span class="c1"># matplotlib format, return lists for x and y</span>
<span class="c1">#</span>
<div class="viewcode-block" id="line"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.line">[docs]</a><span class="k">def</span> <span class="nf">line</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">samples</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Line defined by two end points.</span>
<span class="sd"> .. math::</span>
<span class="sd"> y = \\frac{y_2-y_1}{x_2-x_1}(x-x_1) + y_1</span>
<span class="sd"> :param point1: one end point</span>
<span class="sd"> :type point1: tuple</span>
<span class="sd"> :param point2: other end point</span>
<span class="sd"> :type point2: tuple</span>
<span class="sd"> :param samples: number of sampling points (default = 2)</span>
<span class="sd"> :type samples: int</span>
<span class="sd"> :returns: ((point1_x, point2_x), (points1_y, point2_y)) or</span>
<span class="sd"> ([sample_point1_x, sample_point2_x, ...],</span>
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; x, y = line((0, 0), (1, 0))</span>
<span class="sd"> &gt;&gt;&gt; print(x, y)</span>
<span class="sd"> ((0, 1), (0, 0))</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">p1x</span><span class="p">,</span> <span class="n">p1y</span> <span class="o">=</span> <span class="n">point1</span>
<span class="n">p2x</span><span class="p">,</span> <span class="n">p2y</span> <span class="o">=</span> <span class="n">point2</span>
<span class="n">denominator</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span> <span class="o">-</span> <span class="n">p2x</span><span class="p">)</span>
<span class="k">if</span> <span class="n">samples</span> <span class="o">&gt;</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">denominator</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">,</span> <span class="n">samples</span><span class="p">)</span>
<span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1y</span> <span class="o">-</span> <span class="n">p2y</span><span class="p">)</span> <span class="o">/</span> <span class="n">denominator</span>
<span class="n">b</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span><span class="p">)</span> <span class="o">/</span> <span class="n">denominator</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="o">*</span><span class="n">x</span> <span class="o">+</span> <span class="n">b</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
<span class="k">return</span> <span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">),</span> <span class="p">(</span><span class="n">p1y</span><span class="p">,</span> <span class="n">p2y</span><span class="p">)</span> <span class="c1"># matplotlib format</span></div>
<div class="viewcode-block" id="cubic"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.cubic">[docs]</a><span class="k">def</span> <span class="nf">cubic</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</span><span class="p">,</span> <span class="n">samples</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Cubic line defined by two end points and the rotation in radians</span>
<span class="sd"> at the points.</span>
<span class="sd"> :param point1: one end point</span>
<span class="sd"> :type point1: tuple</span>
<span class="sd"> :param angle1: the slope at the one end point</span>
<span class="sd"> :type angle1: int or float</span>
<span class="sd"> :param point2: other end point</span>
<span class="sd"> :type point2: tuple</span>
<span class="sd"> :param angle2: the slope at the other end point</span>
<span class="sd"> :type angle2: int or float</span>
<span class="sd"> :param samples: number of sampling points (default = 10)</span>
<span class="sd"> :type samples: int</span>
<span class="sd"> :returns: ([sample_point1_x, sample_point2_x, ...],</span>
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">p1x</span><span class="p">,</span> <span class="n">p1y</span> <span class="o">=</span> <span class="n">point1</span>
<span class="n">p2x</span><span class="p">,</span> <span class="n">p2y</span> <span class="o">=</span> <span class="n">point2</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">,</span> <span class="n">num</span><span class="o">=</span><span class="n">samples</span><span class="p">)</span>
<span class="n">p1ys</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="n">angle1</span><span class="p">)</span>
<span class="n">p2ys</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="n">angle2</span><span class="p">)</span>
<span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1y</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p2y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
<span class="n">b</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">6</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">+</span> <span class="mi">6</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1ys</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">3</span> <span class="o">+</span> <span class="n">b</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">c</span><span class="o">*</span><span class="n">x</span> <span class="o">+</span> <span class="n">d</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span></div>
<div class="viewcode-block" id="cubic_deg"><a class="viewcode-back" href="../../pylib.html#pylib.geometry.cubic_deg">[docs]</a><span class="k">def</span> <span class="nf">cubic_deg</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Cubic line defined by two end points and the roation in degree</span>
<span class="sd"> at the points.</span>
<span class="sd"> :param point1: one end point</span>
<span class="sd"> :type point1: tuple</span>
<span class="sd"> :param angle1: the slope at the one end point</span>
<span class="sd"> :type angle1: int or float</span>
<span class="sd"> :param point2: other end point</span>
<span class="sd"> :type point2: tuple</span>
<span class="sd"> :param angle2: the slope at the other end point</span>
<span class="sd"> :type angle2: int or float</span>
<span class="sd"> :returns: ([sample_point1_x, sample_point2_x, ...],</span>
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`cubic`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">cubic</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</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">180</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</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">180</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,185 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.geometry_plot &#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 pylib.geometry_plot</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;2D geometry plotter using matplotlib (pylab).</span>
<span class="sd">:Date: 2019-08-20</span>
<span class="sd">.. module:: geometry_plot</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Geometry plotting.</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>
<span class="kn">import</span> <span class="nn">pylab</span>
<span class="kn">from</span> <span class="nn">geometry</span> <span class="k">import</span> <span class="p">(</span>
<span class="n">distance</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">interpolate_hermite</span><span class="p">,</span> <span class="n">rotate_xy</span><span class="p">,</span> <span class="n">translate_xy</span>
<span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">style</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s1">&#39;dark_background&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;grid.color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;gray&#39;</span>
<span class="c1"># The kwargs are Line2D properties:</span>
<span class="c1"># https://matplotlib.org/3.1.1/_modules/matplotlib/lines.html#Line2D</span>
<span class="c1"># https://matplotlib.org/devdocs/_modules/matplotlib/lines.html#Line2D</span>
<span class="n">pylab_Line2D_properties</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;linewidth&#39;</span><span class="p">,</span> <span class="s1">&#39;linestyle&#39;</span><span class="p">,</span> <span class="s1">&#39;color&#39;</span><span class="p">,</span>
<span class="s1">&#39;marker&#39;</span><span class="p">,</span> <span class="s1">&#39;markersize&#39;</span><span class="p">,</span> <span class="s1">&#39;markeredgewidth&#39;</span><span class="p">,</span> <span class="s1">&#39;markeredgecolor&#39;</span><span class="p">,</span>
<span class="s1">&#39;markerfacecolor&#39;</span><span class="p">,</span> <span class="s1">&#39;markerfacecoloralt&#39;</span><span class="p">,</span>
<span class="s1">&#39;fillstyle&#39;</span><span class="p">,</span> <span class="s1">&#39;antialiased&#39;</span><span class="p">,</span>
<span class="s1">&#39;dash_capstyle&#39;</span><span class="p">,</span> <span class="s1">&#39;solid_capstyle&#39;</span><span class="p">,</span>
<span class="s1">&#39;dash_joinstyle&#39;</span><span class="p">,</span> <span class="s1">&#39;solid_joinstyle&#39;</span><span class="p">,</span>
<span class="s1">&#39;pickradius&#39;</span><span class="p">,</span> <span class="s1">&#39;drawstyle&#39;</span><span class="p">,</span> <span class="s1">&#39;markevery&#39;</span><span class="p">,</span>
<span class="p">]</span>
<div class="viewcode-block" id="plot_lines"><a class="viewcode-back" href="../../pylib.html#pylib.geometry_plot.plot_lines">[docs]</a><span class="k">def</span> <span class="nf">plot_lines</span><span class="p">(</span><span class="n">lns</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">if</span> <span class="s1">&#39;color&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="c1"># Colors from &quot;tab10&quot; colormap</span>
<span class="n">cmap</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">get_cmap</span><span class="p">(</span><span class="s2">&quot;tab10&quot;</span><span class="p">)</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">cmap</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Colors from color cycle</span>
<span class="n">cycle</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;axes.prop_cycle&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">by_key</span><span class="p">()[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># Colors from CN notation (same as the first 10 colors from the color cycle)</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;C0&quot;</span>
<span class="k">for</span> <span class="n">ln</span> <span class="ow">in</span> <span class="n">lns</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">line</span><span class="p">(</span><span class="o">*</span><span class="n">ln</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="plot_cubic_lines"><a class="viewcode-back" href="../../pylib.html#pylib.geometry_plot.plot_cubic_lines">[docs]</a><span class="k">def</span> <span class="nf">plot_cubic_lines</span><span class="p">(</span><span class="n">lns</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">if</span> <span class="s1">&#39;color&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="c1"># Colors from &quot;tab10&quot; colormap</span>
<span class="n">cmap</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">get_cmap</span><span class="p">(</span><span class="s2">&quot;tab10&quot;</span><span class="p">)</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">cmap</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Colors from color cycle</span>
<span class="n">cycle</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;axes.prop_cycle&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">by_key</span><span class="p">()[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># Colors from CN notation (same as the first 10 colors from the color cycle)</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;C0&quot;</span>
<span class="n">factor</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="s1">&#39;factor&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">factor</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;factor&#39;</span><span class="p">]</span>
<span class="n">samples</span> <span class="o">=</span> <span class="mi">10</span>
<span class="k">if</span> <span class="s1">&#39;samples&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">samples</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;samples&#39;</span><span class="p">]</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">pylab_Line2D_properties</span><span class="p">}</span>
<span class="k">for</span> <span class="n">ln</span> <span class="ow">in</span> <span class="n">lns</span><span class="p">:</span>
<span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">d</span> <span class="o">=</span> <span class="n">ln</span>
<span class="n">L</span> <span class="o">=</span> <span class="n">distance</span><span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">)</span>
<span class="n">ang</span> <span class="o">=</span> <span class="n">angle</span><span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">)</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">interpolate_hermite</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">d</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span>
<span class="n">scale_x</span><span class="o">=</span><span class="n">L</span><span class="p">,</span> <span class="n">scale_y</span><span class="o">=</span><span class="n">factor</span><span class="p">,</span> <span class="n">samples</span><span class="o">=</span><span class="n">samples</span><span class="p">)</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">rotate_xy</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">ang</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">translate_xy</span><span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,116 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.mathematics &#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 pylib.mathematics</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-30</span>
<span class="sd">.. module:: mathematics</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">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">gcd</span>
<div class="viewcode-block" id="lcm"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.lcm">[docs]</a><span class="k">def</span> <span class="nf">lcm</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="sd">&quot;&quot;&quot;Compute the lowest common multiple of a and b&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">a</span><span class="o">/</span><span class="n">gcd</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="o">*</span><span class="n">b</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,196 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.numerical.fit &#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 pylib.numerical.fit</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;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>
<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">from</span> <span class="nn">pylab</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">argmax</span><span class="p">,</span> <span class="n">gradient</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">linspace</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="k">import</span> <span class="n">curve_fit</span>
<div class="viewcode-block" id="gauss"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.fit.gauss">[docs]</a><span class="k">def</span> <span class="nf">gauss</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gauss distribution function.</span>
<span class="sd"> .. math::</span>
<span class="sd"> f(x)=ae^{-(x-b)^{2}/(2c^{2})}</span>
<span class="sd"> :param x: positions where the gauss function will be calculated</span>
<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"> * 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>
<span class="sd"> :type p: list</span>
<span class="sd"> :returns: gauss values at given positions x</span>
<span class="sd"> :rtype: numpy.ndarray</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="c1"># cast e. g. list to numpy array</span>
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="o">=</span> <span class="n">p</span>
<span class="k">return</span> <span class="n">a</span><span class="o">*</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="p">(</span><span class="mf">2.</span> <span class="o">*</span> <span class="n">c</span><span class="o">**</span><span class="mf">2.</span><span class="p">))</span> <span class="o">+</span> <span class="n">d</span></div>
<div class="viewcode-block" id="gauss_fit"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.fit.gauss_fit">[docs]</a><span class="k">def</span> <span class="nf">gauss_fit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">e</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">x_fit</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="sd">&quot;&quot;&quot;Fit Gauss distribution function to data.</span>
<span class="sd"> :param x: positions</span>
<span class="sd"> :type x: int or float or list or numpy.ndarray</span>
<span class="sd"> :param y: values</span>
<span class="sd"> :type y: int or float or list or numpy.ndarray</span>
<span class="sd"> :param e: error values (default = None)</span>
<span class="sd"> :type e: int or float or list or numpy.ndarray</span>
<span class="sd"> :param x_fit: positions of fitted function (default = None, if None then x</span>
<span class="sd"> is used)</span>
<span class="sd"> :type x_fit: int or float or list or numpy.ndarray</span>
<span class="sd"> :param verbose: verbose information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> :returns:</span>
<span class="sd"> * numpy.ndarray -- fitted values (y_fit)</span>
<span class="sd"> * numpy.ndarray -- parameters of gauss distribution function (popt:</span>
<span class="sd"> amplitude a, expected value :math:`\\mu`, standard deviation</span>
<span class="sd"> :math:`\\sigma`, vertical offset d)</span>
<span class="sd"> * numpy.float64 -- full width at half maximum (FWHM)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`gauss`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="c1"># cast e. g. list to numpy array</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="c1"># cast e. g. list to numpy array</span>
<span class="n">y_max</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
<span class="n">y_max_pos</span> <span class="o">=</span> <span class="n">argmax</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
<span class="n">x_y_max</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">y_max_pos</span><span class="p">]</span>
<span class="c1"># starting parameter</span>
<span class="n">p0</span> <span class="o">=</span> <span class="p">[</span><span class="n">y_max</span><span class="p">,</span> <span class="n">x_y_max</span><span class="p">,</span> <span class="o">.</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">[</span><span class="mi">0</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="s1">&#39;p0:&#39;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">p0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">e</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">popt</span><span class="p">,</span> <span class="n">pcov</span> <span class="o">=</span> <span class="n">curve_fit</span><span class="p">(</span><span class="n">gauss</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">p0</span><span class="o">=</span><span class="n">p0</span><span class="p">,</span> <span class="n">sigma</span><span class="o">=</span><span class="n">e</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">popt</span><span class="p">,</span> <span class="n">pcov</span> <span class="o">=</span> <span class="n">curve_fit</span><span class="p">(</span><span class="n">gauss</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">p0</span><span class="o">=</span><span class="n">p0</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="s1">&#39;popt:&#39;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">popt</span><span class="p">)</span>
<span class="c1">#print(pcov)</span>
<span class="n">FWHM</span> <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">log</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span><span class="o">*</span><span class="n">popt</span><span class="p">[</span><span class="mi">2</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="s1">&#39;FWHM&#39;</span><span class="p">,</span> <span class="n">FWHM</span><span class="p">)</span>
<span class="k">if</span> <span class="n">x_fit</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">x_fit</span> <span class="o">=</span> <span class="n">x</span>
<span class="n">y_fit</span> <span class="o">=</span> <span class="n">gauss</span><span class="p">(</span><span class="n">x_fit</span><span class="p">,</span> <span class="o">*</span><span class="n">popt</span><span class="p">)</span>
<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="k">pass</span>
</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,250 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.numerical.integration &#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 pylib.numerical.integration</h1><div class="highlight"><pre>
<span></span><span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Numerical integration, numerical quadrature.</span>
<span class="sd">de: numerische Integration, numerische Quadratur.</span>
<span class="sd">:Date: 2015-10-15</span>
<span class="sd">.. module:: integration</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Numerical integration.</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="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="../../../pylib.numerical.html#pylib.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="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>
<span class="sd"> de: Trapezregel, Simpsonregel (Thomas Simpson), Keplersche</span>
<span class="sd"> Fassregel (Johannes Kepler)</span>
<span class="sd"> :param f: function to integrate.</span>
<span class="sd"> :type f: function or list</span>
<span class="sd"> :param a: lower limit of integration (default = 0).</span>
<span class="sd"> :type a: float</span>
<span class="sd"> :param b: upper limit of integration (default = 1).</span>
<span class="sd"> :type b: float</span>
<span class="sd"> :param N: specify the number of subintervals.</span>
<span class="sd"> :type N: int</span>
<span class="sd"> :param x: variable of integration, necessary if f is a list</span>
<span class="sd"> (default = None).</span>
<span class="sd"> :type x: list</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> :returns: the definite integral as approximated by trapezoidal</span>
<span class="sd"> rule.</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> The trapezoidal rule approximates the integral by the area of a</span>
<span class="sd"> trapezoid with base h=b-a and sides equal to the values of the</span>
<span class="sd"> integrand at the two end points.</span>
<span class="sd"> .. math::</span>
<span class="sd"> f_n(x) = f(a)+\frac{f(b)-f(a)}{b-a}(x-a)</span>
<span class="sd"> .. math::</span>
<span class="sd"> I &amp;= \int\limits_a^b f(x) \,\mathrm{d}x \\</span>
<span class="sd"> I &amp;\approx \int\limits_a^b f_n(x) \,\mathrm{d}x \\</span>
<span class="sd"> &amp;= \int\limits_a^b</span>
<span class="sd"> \left( f(a)+\frac{f(b)-f(a)}{b-a}(x-a) \right)</span>
<span class="sd"> \mathrm{d}x \\</span>
<span class="sd"> &amp;= \left.\left( f(a)-a\frac{f(b)-f(a)}{b-a} \right)</span>
<span class="sd"> x \right\vert_a^b +</span>
<span class="sd"> \left. \frac{f(b)-f(a)}{b-a} \frac{x^2}{2}</span>
<span class="sd"> \right\vert_a^b \\</span>
<span class="sd"> &amp;= \frac{b-a}{2}\left[f(a)+f(b)\right]</span>
<span class="sd"> The composite trapezium rule. If the interval is divided into n</span>
<span class="sd"> segments (not necessarily equal)</span>
<span class="sd"> .. math::</span>
<span class="sd"> a = x_0 \leq x_1 \leq x_2 \leq \ldots \leq x_n = b</span>
<span class="sd"> .. math::</span>
<span class="sd"> I &amp;\approx \sum\limits_{i=0}^{n-1} \frac{1}{2} (x_{i+1}-x_i)</span>
<span class="sd"> \left[f(x_{i+1})+f(x_i)\right] \\</span>
<span class="sd"> Special Case (Equaliy spaced base points)</span>
<span class="sd"> .. math::</span>
<span class="sd"> x_{i+1}-x_i = h \quad \forall i</span>
<span class="sd"> .. math::</span>
<span class="sd"> I \approx h \left\{ \frac{1}{2} \left[f(x_0)+f(x_n)\right] +</span>
<span class="sd"> \sum\limits_{i=1}^{n-1} f(x_i) \right\}</span>
<span class="sd"> .. rubric:: Example</span>
<span class="sd"> .. math::</span>
<span class="sd"> I &amp;= \int\limits_a^b f(x) \,\mathrm{d}x \\</span>
<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"> 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"> numerical solution</span>
<span class="sd"> &gt;&gt;&gt; f = lambda(x): x**2</span>
<span class="sd"> &gt;&gt;&gt; trapez(f, 0, 1, 1)</span>
<span class="sd"> 0.5</span>
<span class="sd"> &gt;&gt;&gt; trapez(f, 0, 1, 10)</span>
<span class="sd"> 0.3350000000000001</span>
<span class="sd"> &gt;&gt;&gt; trapez(f, 0, 1, 100)</span>
<span class="sd"> 0.33335000000000004</span>
<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="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="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="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>
<span class="k">return</span> <span class="n">T</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">**</span><span class="mi">2</span>
<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="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="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>
</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,540 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.numerical.ode &#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 pylib.numerical.ode</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;Numerical solver of ordinary differential equations.</span>
<span class="sd">Solves the initial value problem for systems of first order</span>
<span class="sd">ordinary differential equations.</span>
<span class="sd">:Date: 2015-09-21</span>
<span class="sd">.. module:: ode</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Numerical solver.</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="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">isnan</span><span class="p">,</span> <span class="nb">sum</span><span class="p">,</span> <span class="n">zeros</span><span class="p">,</span> <span class="n">dot</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="k">import</span> <span class="n">norm</span><span class="p">,</span> <span class="n">inv</span>
<div class="viewcode-block" id="e1"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode.e1">[docs]</a><span class="k">def</span> <span class="nf">e1</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</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="sa">r</span><span class="sd">&quot;&quot;&quot;Explicit first-order method /</span>
<span class="sd"> (standard, or forward) Euler method /</span>
<span class="sd"> Runge-Kutta 1st order method.</span>
<span class="sd"> de:</span>
<span class="sd"> Euler&#39;sche Polygonzugverfahren / explizite Euler-Verfahren /</span>
<span class="sd"> Euler-Cauchy-Verfahren / Euler-vorwärts-Verfahren</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter,</span>
<span class="sd"> ...)</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> Approximate the solution of the initial value problem</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x} &amp;= f(t,x) \\</span>
<span class="sd"> x(t_0) &amp;= x_0</span>
<span class="sd"> Choose a value h for the size of every step and set</span>
<span class="sd"> .. math ::</span>
<span class="sd"> t_i = t_0 + i h ~,\quad i=1,2,\ldots,n</span>
<span class="sd"> The derivative of the solution is approximated as the forward</span>
<span class="sd"> difference equation</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x}_i = f(t_i, x_i) = \frac{x_{i+1} - x_i}{t_{i+1}-t_i}</span>
<span class="sd"> Therefore one step :math:`h` of the Euler method from</span>
<span class="sd"> :math:`t_i` to :math:`t_{i+1}` is</span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i+1} &amp;= x_i + (t_{i+1}-t_i) f(t_i, x_i) \\</span>
<span class="sd"> x_{i+1} &amp;= x_i + h f(t_i, x_i) \\</span>
<span class="sd"> Example 1:</span>
<span class="sd"> .. math ::</span>
<span class="sd"> m\ddot{u} + d\dot{u} + ku = f(t) \\</span>
<span class="sd"> \ddot{u} = m^{-1}(f(t) - d\dot{u} - ku) \\</span>
<span class="sd"> with</span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_1 &amp;= u &amp;\quad \dot{x}_1 = \dot{u} = x_2 \\</span>
<span class="sd"> x_2 &amp;= \dot{u} &amp;\quad \dot{x}_2 = \ddot{u} \\</span>
<span class="sd"> becomes</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x}_1 &amp;= x_2 \\</span>
<span class="sd"> \dot{x}_2 &amp;= m^{-1}(f(t) - d x_2 - k x_1) \\</span>
<span class="sd"> or</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x} &amp;= f(t,x) \\</span>
<span class="sd"> \begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &amp;=</span>
<span class="sd"> \begin{bmatrix} x_2 \\ m^{-1}(f(t) - d x_2 - k x_1)</span>
<span class="sd"> \end{bmatrix} \\</span>
<span class="sd"> &amp;=</span>
<span class="sd"> \begin{bmatrix} 0 \\ m^{-1} f(t) \end{bmatrix} +</span>
<span class="sd"> \begin{bmatrix} 0 &amp; 1 \\ -m^{-1} k &amp; -m^{-1} d \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}</span>
<span class="sd"> Example 2:</span>
<span class="sd"> .. math ::</span>
<span class="sd"> m(u)\ddot{u} + d(u,\dot{u})\dot{u} + k(u)u = f(t) \\</span>
<span class="sd"> \ddot{u} = m^{-1}(u)(f(t) - d(u,\dot{u})\dot{u} - k(u)u) \\</span>
<span class="sd"> with</span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_1 &amp;= u &amp;\quad \dot{x}_1 = \dot{u} = x_2 \\</span>
<span class="sd"> x_2 &amp;= \dot{u} &amp;\quad \dot{x}_2 = \ddot{u} \\</span>
<span class="sd"> becomes</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x}_1 &amp;= x_2 \\</span>
<span class="sd"> \dot{x}_2 &amp;=</span>
<span class="sd"> m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \\</span>
<span class="sd"> or</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x} &amp;= f(t,x) \\</span>
<span class="sd"> \begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &amp;=</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> x_2 \\ m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1)</span>
<span class="sd"> \end{bmatrix} \\</span>
<span class="sd"> &amp;=</span>
<span class="sd"> \begin{bmatrix} 0 \\ m^{-1}(x_1) f(t) \end{bmatrix} +</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 0 &amp; 1 \\ -m^{-1}(x_1) k(x_1) &amp; -m^{-1} d(x_1,x_2)</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}</span>
<span class="sd"> The Euler method is a first-order method, which means that the</span>
<span class="sd"> local error (error per step) is proportional to the square of</span>
<span class="sd"> the step size, and the global error (error at a given time) is</span>
<span class="sd"> proportional to the step size.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</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">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</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="s1">&#39;Numerical integration of ODE using explicit &#39;</span> <span class="o">+</span>
<span class="s1">&#39;first-order method (Euler / Runge-Kutta) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span></div>
<div class="viewcode-block" id="e2"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode.e2">[docs]</a><span class="k">def</span> <span class="nf">e2</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</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="sa">r</span><span class="sd">&quot;&quot;&quot;Explicit second-order method / Runge-Kutta 2nd order method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter,</span>
<span class="sd"> ...)</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">k_1</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">k_2</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="o">*</span><span class="n">k_1</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</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">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">k_2</span><span class="o">*</span><span class="n">Dt</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="s1">&#39;Numerical integration of ODE using explicit &#39;</span> <span class="o">+</span>
<span class="s1">&#39;2th-order method (Runge-Kutta) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span></div>
<div class="viewcode-block" id="e4"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode.e4">[docs]</a><span class="k">def</span> <span class="nf">e4</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</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="sa">r</span><span class="sd">&quot;&quot;&quot;Explicit fourth-order method / Runge-Kutta 4th order method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter,</span>
<span class="sd"> ...)</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">k_1</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">k_2</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="o">*</span><span class="n">k_1</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">k_3</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="o">*</span><span class="n">k_2</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">k_4</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">+</span><span class="n">k_3</span><span class="o">*</span><span class="n">Dt</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</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">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="mf">1.</span><span class="o">/</span><span class="mi">6</span><span class="o">*</span><span class="p">(</span><span class="n">k_1</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">k_2</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">k_3</span><span class="o">+</span><span class="n">k_4</span><span class="p">)</span><span class="o">*</span><span class="n">Dt</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="s1">&#39;Numerical integration of ODE using explicit &#39;</span> <span class="o">+</span>
<span class="s1">&#39;4th-order method (Runge-Kutta) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span></div>
<div class="viewcode-block" id="fpi"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode.fpi">[docs]</a><span class="k">def</span> <span class="nf">fpi</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">ti</span><span class="p">,</span> <span class="n">ti1</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</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="sa">r</span><span class="sd">&quot;&quot;&quot;Fixed-point iteration.</span>
<span class="sd"> </span>
<span class="sd"> :param f: the function to iterate :math:`f = \dot{x}(x,t)`</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param xi: initial condition :math:`x_i`</span>
<span class="sd"> :type xi: list</span>
<span class="sd"> :param ti: time :math:`t_i`</span>
<span class="sd"> :type ti: float</span>
<span class="sd"> :param ti1: time :math:`t_{i+1}`</span>
<span class="sd"> :type ti1: float</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter,</span>
<span class="sd"> ...)</span>
<span class="sd"> :param max_iterations: maximum number of iterations</span>
<span class="sd"> :type max_iterations: int</span>
<span class="sd"> :param tol: tolerance against residuum :math:`\varepsilon`</span>
<span class="sd"> (default = 1e-9)</span>
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> </span>
<span class="sd"> :returns: :math:`x_{i}`</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i,j=0} = x_{i}</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i,j+1} = x_i + \dot{x}(x_{i,j}, t_{i+1})\cdot(t_{i+1}-t_i)</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> \text{residuum} = \frac{\lVert x_{i,j+1}-x_{i,j}\rVert}</span>
<span class="sd"> {\lVert x_{i,j+1} \rVert} &lt; \varepsilon</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i} = x_{i,j=\text{end}}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">xij</span> <span class="o">=</span> <span class="n">xi</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">):</span>
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">xij</span><span class="p">,</span> <span class="n">ti1</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="n">xij1</span> <span class="o">=</span> <span class="n">xi</span> <span class="o">+</span> <span class="n">dxdt</span> <span class="o">*</span> <span class="p">(</span><span class="n">ti1</span><span class="o">-</span><span class="n">ti</span><span class="p">)</span>
<span class="n">residuum</span> <span class="o">=</span> <span class="n">norm</span><span class="p">(</span><span class="n">xij1</span><span class="o">-</span><span class="n">xij</span><span class="p">)</span><span class="o">/</span><span class="n">norm</span><span class="p">(</span><span class="n">xij1</span><span class="p">)</span>
<span class="n">xij</span> <span class="o">=</span> <span class="n">xij1</span>
<span class="k">if</span> <span class="n">residuum</span> <span class="o">&lt;</span> <span class="n">tol</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">j</span><span class="o">+</span><span class="mi">1</span> <span class="c1"># number beginning with 1 therefore + 1</span>
<span class="k">return</span> <span class="n">xij</span><span class="p">,</span> <span class="n">iterations</span></div>
<div class="viewcode-block" id="i1"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode.i1">[docs]</a><span class="k">def</span> <span class="nf">i1</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</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="sa">r</span><span class="sd">&quot;&quot;&quot;Implicite first-order method / backward Euler method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter,</span>
<span class="sd"> ...)</span>
<span class="sd"> :param max_iterations: maximum number of iterations</span>
<span class="sd"> :type max_iterations: int</span>
<span class="sd"> :param tol: tolerance against residuum (default = 1e-9)</span>
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> </span>
<span class="sd"> The backward Euler method has order one and is A-stable.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="c1"># x(i+1) = x(i) + f(x(i+1), t(i+1)), exact value of</span>
<span class="c1"># f(x(i+1), t(i+1)) is not available therefore using</span>
<span class="c1"># Newton-Raphson method</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span>
<span class="n">xi</span><span class="p">,</span> <span class="n">iteration</span> <span class="o">=</span> <span class="n">fpi</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="p">,</span>
<span class="n">tol</span><span class="p">,</span> <span class="n">verbose</span><span class="p">)</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xi</span>
<span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">iteration</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="s1">&#39;Numerical integration of ODE using implicite &#39;</span> <span class="o">+</span>
<span class="s1">&#39;first-order method (Euler) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">iterations</span></div>
<div class="viewcode-block" id="newmark_newtonraphson"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode.newmark_newtonraphson">[docs]</a><span class="k">def</span> <span class="nf">newmark_newtonraphson</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">xp0</span><span class="p">,</span> <span class="n">xpp0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=.</span><span class="mi">5</span><span class="p">,</span>
<span class="n">beta</span><span class="o">=.</span><span class="mi">25</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</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="sa">r</span><span class="sd">&quot;&quot;&quot;Newmark method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param xp0: initial condition</span>
<span class="sd"> :type xp0: list</span>
<span class="sd"> :param xpp0: initial condition</span>
<span class="sd"> :type xpp0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter,</span>
<span class="sd"> ...)</span>
<span class="sd"> :param gamma: newmark parameter for velocity (default = 0.5)</span>
<span class="sd"> :type gamma: float</span>
<span class="sd"> :param beta: newmark parameter for displacement (default = 0.25)</span>
<span class="sd"> :type beta: float</span>
<span class="sd"> :param max_iterations: maximum number of iterations</span>
<span class="sd"> :type max_iterations: int</span>
<span class="sd"> :param tol: tolerance against residuum (default = 1e-9)</span>
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">xp</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">xp0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">xpp</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">xpp0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="n">xp</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xp0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="n">xpp</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xpp0</span> <span class="c1"># Initial condition gives solution at first t</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xpi</span> <span class="o">=</span> <span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xppi</span> <span class="o">=</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xppi</span>
<span class="n">j</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">):</span> <span class="c1"># Fixed-point iteration</span>
<span class="c1">#dxdt = array(f(t[i+1], x1, p))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="c1">#x11 = x[i,:] + dxdt*Dt</span>
<span class="n">N</span><span class="p">,</span> <span class="n">dN</span><span class="p">,</span> <span class="n">dNp</span><span class="p">,</span> <span class="n">dNpp</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span>
<span class="n">xp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span> <span class="n">xpp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span>
<span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">)</span>
<span class="k">if</span> <span class="n">isnan</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">dN</span><span class="p">))</span> <span class="ow">or</span> <span class="n">isnan</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">dNp</span><span class="p">))</span> <span class="ow">or</span> <span class="n">isnan</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">dNpp</span><span class="p">)):</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;divergiert&#39;</span><span class="p">)</span>
<span class="k">break</span>
<span class="n">xpp11</span> <span class="o">=</span> <span class="n">xpp1</span> <span class="o">-</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">dNpp</span><span class="p">),</span> <span class="p">(</span><span class="n">N</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">dN</span><span class="p">,</span> <span class="p">(</span><span class="n">x1</span><span class="o">-</span><span class="n">xi</span><span class="p">))</span> <span class="o">+</span> \
<span class="n">dot</span><span class="p">(</span><span class="n">dNp</span><span class="p">,</span> <span class="p">(</span><span class="n">xp1</span><span class="o">-</span><span class="n">xpi</span><span class="p">))))</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">gamma</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">gamma</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="o">.</span><span class="mi">5</span><span class="o">-</span><span class="n">beta</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">beta</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">residuum</span> <span class="o">=</span> <span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="o">-</span><span class="n">xpp1</span><span class="p">)</span><span class="o">/</span><span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="p">)</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xpp11</span>
<span class="k">if</span> <span class="n">residuum</span> <span class="o">&lt;</span> <span class="n">tol</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span><span class="o">+</span><span class="mi">1</span>
<span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xpp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</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="s1">&#39;Numerical integration of ODE using explicite &#39;</span> <span class="o">+</span>
<span class="s1">&#39;newmark method was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">xpp</span><span class="p">,</span> <span class="n">iterations</span></div>
<span class="c1"># x = concatenate((x, xp, xpp), axis=1)</span>
<div class="viewcode-block" id="newmark_newtonraphson_rdk"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode.newmark_newtonraphson_rdk">[docs]</a><span class="k">def</span> <span class="nf">newmark_newtonraphson_rdk</span><span class="p">(</span><span class="n">fnm</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">xp0</span><span class="p">,</span> <span class="n">xpp0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=.</span><span class="mi">5</span><span class="p">,</span>
<span class="n">beta</span><span class="o">=.</span><span class="mi">25</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</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="sa">r</span><span class="sd">&quot;&quot;&quot;Newmark method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param xp0: initial condition</span>
<span class="sd"> :type xp0: list</span>
<span class="sd"> :param xpp0: initial condition</span>
<span class="sd"> :type xpp0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter,</span>
<span class="sd"> ...)</span>
<span class="sd"> :param gamma: newmark parameter for velocity (default = 0.5)</span>
<span class="sd"> :type gamma: float</span>
<span class="sd"> :param beta: newmark parameter for displacement (default = 0.25)</span>
<span class="sd"> :type beta: float</span>
<span class="sd"> :param max_iterations: maximum number of iterations</span>
<span class="sd"> :type max_iterations: int</span>
<span class="sd"> :param tol: tolerance against residuum (default = 1e-9)</span>
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">xp</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">xp0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">xpp</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">xpp0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="n">xp</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xp0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="n">xpp</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xpp0</span> <span class="c1"># Initial condition gives solution at first t</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span> <span class="o">=</span> <span class="n">fnm</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span>
<span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">)</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xpi</span> <span class="o">=</span> <span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xppi</span> <span class="o">=</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xppi</span>
<span class="n">j</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">):</span> <span class="c1"># Fixed-point iteration</span>
<span class="c1">#dxdt = array(f(t[i+1], x1, p))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="c1">#x11 = x[i,:] + dxdt*Dt</span>
<span class="n">r</span> <span class="o">=</span> <span class="p">(</span><span class="n">rmx</span><span class="o">+</span><span class="n">rdx</span><span class="o">+</span><span class="n">rkx</span><span class="p">)</span><span class="o">*</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span> <span class="o">+</span> <span class="n">rdxp</span><span class="o">*</span><span class="n">Dt</span><span class="o">/</span><span class="mi">2</span> <span class="o">+</span> <span class="n">rmxpp</span>
<span class="n">rp</span> <span class="o">=</span> <span class="n">f</span> <span class="o">-</span> <span class="p">(</span><span class="n">rm</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rmx</span><span class="p">,</span> <span class="p">(</span><span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span><span class="o">+</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="n">xppi</span><span class="p">))</span> <span class="o">-</span> \
<span class="n">dot</span><span class="p">(</span><span class="n">rmxpp</span><span class="p">,</span> <span class="n">xppi</span><span class="p">)</span> <span class="o">+</span> \
<span class="n">rd</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rdx</span><span class="p">,</span> <span class="p">(</span><span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span><span class="o">+</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="n">xppi</span><span class="p">))</span> <span class="o">+</span> \
<span class="n">dot</span><span class="p">(</span><span class="n">rdxp</span><span class="p">,</span> <span class="n">Dt</span><span class="o">/</span><span class="mi">2</span><span class="o">*</span><span class="n">xppi</span><span class="p">)</span> <span class="o">+</span> \
<span class="n">rk</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rkx</span><span class="p">,</span> <span class="p">(</span><span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span><span class="o">+</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="n">xppi</span><span class="p">))</span> <span class="p">)</span>
<span class="n">xpp11</span> <span class="o">=</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">r</span><span class="p">),</span> <span class="n">rp</span><span class="p">)</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">gamma</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">gamma</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="o">.</span><span class="mi">5</span><span class="o">-</span><span class="n">beta</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">beta</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">residuum</span> <span class="o">=</span> <span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="o">-</span><span class="n">xpp1</span><span class="p">)</span><span class="o">/</span><span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="p">)</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xpp11</span>
<span class="k">if</span> <span class="n">residuum</span> <span class="o">&lt;</span> <span class="n">tol</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span><span class="o">+</span><span class="mi">1</span>
<span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xpp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</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="s1">&#39;Numerical integration of ODE using explicite &#39;</span> <span class="o">+</span>
<span class="s1">&#39;newmark method was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">xpp</span><span class="p">,</span> <span class="n">iterations</span></div>
<span class="c1"># x = concatenate((x, xp, xpp), axis=1)</span>
</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,219 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.numerical.ode_model &#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 pylib.numerical.ode_model</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;Mathmatical models governed by ordinary differential equations.</span>
<span class="sd">Describes initial value problems as systems of first order ordinary differential</span>
<span class="sd">equations.</span>
<span class="sd">:Date: 2019-05-25</span>
<span class="sd">.. module:: ode_model</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Models of ordinary differential equations.</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="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span><span class="p">,</span> <span class="n">dot</span><span class="p">,</span> <span class="n">square</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="k">import</span> <span class="n">inv</span>
<div class="viewcode-block" id="disk"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode_model.disk">[docs]</a><span class="k">def</span> <span class="nf">disk</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>
<span class="sd"> :param x: values of the function</span>
<span class="sd"> :type x: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">qp1</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="n">qp2</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
<span class="n">qp3</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
<span class="n">M</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span> <span class="p">[</span><span class="mi">0</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="n">y</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span> \
<span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span> \
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">p</span><span class="p">[</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="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">p</span><span class="p">[</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="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])]])</span>
<span class="n">qp46</span> <span class="o">=</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">M</span><span class="p">),</span> <span class="n">y</span><span class="p">)</span>
<span class="n">qp4</span><span class="p">,</span> <span class="n">qp5</span><span class="p">,</span> <span class="n">qp6</span> <span class="o">=</span> <span class="n">qp46</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span> <span class="c1"># 2d array to 1d array to list</span>
<span class="k">return</span> <span class="n">qp1</span><span class="p">,</span> <span class="n">qp2</span><span class="p">,</span> <span class="n">qp3</span><span class="p">,</span> <span class="n">qp4</span><span class="p">,</span> <span class="n">qp5</span><span class="p">,</span> <span class="n">qp6</span></div>
<div class="viewcode-block" id="disk_nm"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode_model.disk_nm">[docs]</a><span class="k">def</span> <span class="nf">disk_nm</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>
<span class="sd"> :param xn: values of the function</span>
<span class="sd"> :type xn: list</span>
<span class="sd"> :param xpn: first derivative values of the function</span>
<span class="sd"> :type xpn: list</span>
<span class="sd"> :param xppn: second derivative values of the function</span>
<span class="sd"> :type xppn: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">N</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="n">dN</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">dNp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">dNpp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</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="k">return</span> <span class="n">N</span><span class="p">,</span> <span class="n">dN</span><span class="p">,</span> <span class="n">dNp</span><span class="p">,</span> <span class="n">dNpp</span></div>
<div class="viewcode-block" id="disk_nmmdk"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode_model.disk_nmmdk">[docs]</a><span class="k">def</span> <span class="nf">disk_nmmdk</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>
<span class="sd"> :param xn: values of the function</span>
<span class="sd"> :type xn: list</span>
<span class="sd"> :param xpn: derivative values of the function</span>
<span class="sd"> :type xpn: list</span>
<span class="sd"> :param xppn: second derivative values of the function</span>
<span class="sd"> :type xppn: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rm</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="n">rmx</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">rmxpp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</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="n">rd</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
<span class="n">rdx</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">rdxp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">rk</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">rkx</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</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">0</span><span class="p">],</span>
<span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="k">return</span> <span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="kc">True</span>
</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,253 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.time_of_day &#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 pylib.time_of_day</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;Calculate time.</span>
<span class="sd">:Date: 2019-06-01</span>
<span class="sd">.. module:: time_of_day</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Calculate time.</span>
<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">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="../../pylib.html#pylib.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>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: the time in seconds</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">time</span><span class="p">,</span> <span class="n">struct_time</span><span class="p">):</span>
<span class="n">time</span> <span class="o">=</span> <span class="n">mktime</span><span class="p">(</span><span class="n">time</span><span class="p">)</span>
<span class="k">return</span> <span class="n">time</span></div>
<div class="viewcode-block" id="seconds"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.seconds">[docs]</a><span class="k">def</span> <span class="nf">seconds</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The seconds of the time.</span>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: seconds, range [0, 60]</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">in_seconds</span><span class="p">(</span><span class="n">time</span><span class="p">)</span><span class="o">%</span><span class="mi">60</span></div>
<div class="viewcode-block" id="seconds_norm"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.seconds_norm">[docs]</a><span class="k">def</span> <span class="nf">seconds_norm</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The seconds normalized to 60 seconds.</span>
<span class="sd"> </span>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: the normalized seconds, range [0, 1]</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">seconds</span><span class="p">(</span><span class="n">time</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span></div>
<div class="viewcode-block" id="minutes"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.minutes">[docs]</a><span class="k">def</span> <span class="nf">minutes</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The minutes of the time.</span>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: minutes, range [0, 60]</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">in_seconds</span><span class="p">(</span><span class="n">time</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span><span class="o">%</span><span class="mi">60</span></div>
<div class="viewcode-block" id="minutes_norm"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.minutes_norm">[docs]</a><span class="k">def</span> <span class="nf">minutes_norm</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The minutes normalized to 60 minutes.</span>
<span class="sd"> </span>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: the normalized minutes, range [0, 1]</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">minutes</span><span class="p">(</span><span class="n">time</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span></div>
<div class="viewcode-block" id="hours"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.hours">[docs]</a><span class="k">def</span> <span class="nf">hours</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The hours of the time.</span>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: hours, range [0, 24]</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">in_seconds</span><span class="p">(</span><span class="n">time</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span><span class="o">/</span><span class="mi">60</span><span class="o">%</span><span class="mi">24</span></div>
<div class="viewcode-block" id="hours_norm"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.hours_norm">[docs]</a><span class="k">def</span> <span class="nf">hours_norm</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The hours normalized to 24 hours.</span>
<span class="sd"> </span>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: the normalized hours, range [0, 1]</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">hours</span><span class="p">(</span><span class="n">time</span><span class="p">)</span><span class="o">/</span><span class="mi">24</span></div>
<div class="viewcode-block" id="days"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.days">[docs]</a><span class="k">def</span> <span class="nf">days</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The days of the time (year).</span>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: hours, range [0, 365.2425]</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">in_seconds</span><span class="p">(</span><span class="n">time</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span><span class="o">/</span><span class="mi">60</span><span class="o">/</span><span class="mi">24</span><span class="o">%</span><span class="mf">365.2425</span></div>
<div class="viewcode-block" id="days_norm"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.days_norm">[docs]</a><span class="k">def</span> <span class="nf">days_norm</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The days normalized to 365.2425 (Gregorian, on average) days.</span>
<span class="sd"> </span>
<span class="sd"> :param time: the time in seconds</span>
<span class="sd"> :type time: float or `time.struct_time`</span>
<span class="sd"> </span>
<span class="sd"> :returns: the normalized days, range [0, 1]</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">days</span><span class="p">(</span><span class="n">time</span><span class="p">)</span><span class="o">/</span><span class="mf">365.2425</span></div>
<div class="viewcode-block" id="transform"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.transform">[docs]</a><span class="k">def</span> <span class="nf">transform</span><span class="p">(</span><span class="n">time_norm</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Transform normalized time value to new length.</span>
<span class="sd"> </span>
<span class="sd"> :param position_norm: the normalized time value to transform</span>
<span class="sd"> :type position_norm: float</span>
<span class="sd"> :param length: the transformation</span>
<span class="sd"> :type length: float</span>
<span class="sd"> :param offset: the offset (default = 0)</span>
<span class="sd"> :type offset: float</span>
<span class="sd"> </span>
<span class="sd"> :returns: the transformation value</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">time_norm</span><span class="o">*</span><span class="n">length</span> <span class="o">+</span> <span class="n">offset</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="kn">from</span> <span class="nn">time</span> <span class="k">import</span> <span class="n">time</span><span class="p">,</span> <span class="n">gmtime</span><span class="p">,</span> <span class="n">localtime</span>
<span class="c1"># time in seconds</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">time</span><span class="p">()</span>
<span class="nb">min</span> <span class="o">=</span> <span class="n">minutes</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
<span class="n">h</span> <span class="o">=</span> <span class="n">hours</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
<span class="n">min_norm</span> <span class="o">=</span> <span class="n">minutes_norm</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
<span class="n">h_norm</span> <span class="o">=</span> <span class="n">hours_norm</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;min &#39;</span><span class="p">,</span> <span class="nb">min</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;h &#39;</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;min_norm &#39;</span><span class="p">,</span> <span class="n">min_norm</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;h_norm &#39;</span><span class="p">,</span> <span class="n">h_norm</span><span class="p">)</span>
<span class="n">x_len</span> <span class="o">=</span> <span class="mi">30</span>
<span class="n">x_offset</span> <span class="o">=</span> <span class="o">-</span><span class="mi">8</span>
<span class="n">x_pos</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">min_norm</span><span class="p">,</span> <span class="n">x_len</span><span class="p">,</span> <span class="n">x_offset</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;m[-8,22] &#39;</span><span class="p">,</span> <span class="n">x_pos</span><span class="p">)</span>
<span class="n">y_len</span> <span class="o">=</span> <span class="mi">20</span>
<span class="n">y_offset</span> <span class="o">=</span> <span class="o">-</span><span class="mi">10</span>
<span class="n">y_pos</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="n">h_norm</span><span class="p">,</span> <span class="n">y_len</span><span class="p">,</span> <span class="n">y_offset</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;h[-10,10]&#39;</span><span class="p">,</span> <span class="n">y_pos</span><span class="p">)</span>
</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.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -241,7 +241,7 @@
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>