add ode solver, tests and update docs

This commit is contained in:
2019-05-26 21:54:58 +02:00
parent 184e80269b
commit d0873a36da
33 changed files with 1821 additions and 396 deletions

View File

@@ -1,4 +1,4 @@
# Sphinx build info version 1 # Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 09cf9ce4470e7ee74b6ce2abe5e4453a config: 94375f4299332632f508e2242b7c30d8
tags: 645f666f9bcd5a90fca523b33c5a78b7 tags: 645f666f9bcd5a90fca523b33c5a78b7

View File

@@ -8,3 +8,5 @@ src
date date
fit fit
geometry geometry
solver
solver_model

View File

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

View File

@@ -0,0 +1,7 @@
solver\_model module
====================
.. automodule:: solver_model
:members:
:undoc-members:
:show-inheritance:

View File

@@ -1,46 +0,0 @@
src package
===========
Submodules
----------
src.data module
---------------
.. automodule:: src.data
:members:
:undoc-members:
:show-inheritance:
src.date module
---------------
.. automodule:: src.date
:members:
:undoc-members:
:show-inheritance:
src.fit module
--------------
.. automodule:: src.fit
:members:
:undoc-members:
:show-inheritance:
src.geometry module
-------------------
.. automodule:: src.geometry
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: src
:members:
:undoc-members:
:show-inheritance:

View File

@@ -310,8 +310,8 @@ div.hint {
} }
div.seealso { div.seealso {
background-color: #EEE; background-color: #3c3c3c;
border: 1px solid #CCC; border: 1px solid #2C2C2C;
} }
div.topic { div.topic {

View File

@@ -13,6 +13,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@@ -33,28 +34,67 @@
<div class="section" id="module-data"> <div class="section" id="module-data">
<span id="data-module"></span><h1>data module<a class="headerlink" href="#module-data" title="Permalink to this headline"></a></h1> <span id="data-module"></span><h1>data module<a class="headerlink" href="#module-data" title="Permalink to this headline"></a></h1>
<dl class="function"> <p>Read and write data to or from file.</p>
<span class="target" id="module-data"></span><dl class="function">
<dt id="data.data_load"> <dt id="data.data_load">
<code class="descname">data_load</code><span class="sig-paren">(</span><em>file_name</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_load" title="Permalink to this definition"></a></dt> <code class="descname">data_load</code><span class="sig-paren">(</span><em>file_name</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_load" title="Permalink to this definition"></a></dt>
<dd><p>load stored program objects from binary file</p> <dd><p>Load stored program objects from binary file.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>file_name</strong> (<em>str</em>) file to load</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) verbose information (default = False)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>loaded data</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>object</p>
</dd>
</dl>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="data.data_read"> <dt id="data.data_read">
<code class="descname">data_read</code><span class="sig-paren">(</span><em>file_name</em>, <em>x_column</em>, <em>y_column</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_read" title="Permalink to this definition"></a></dt> <code class="descname">data_read</code><span class="sig-paren">(</span><em>file_name</em>, <em>x_column</em>, <em>y_column</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_read" title="Permalink to this definition"></a></dt>
<dd><p>read ascii data file</p> <dd><p>Read ascii data file.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>filename</strong> (<em>str</em>) file to read</p></li>
<li><p><strong>x_column</strong> (<em>int</em>) column index for the x data (first column is 0)</p></li>
<li><p><strong>y_column</strong> (<em>int</em>) column index for the y data (first column is 0)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>x and y</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple(list, list)</p>
</dd>
</dl>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="data.data_store"> <dt id="data.data_store">
<code class="descname">data_store</code><span class="sig-paren">(</span><em>file_name</em>, <em>object_data</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_store" title="Permalink to this definition"></a></dt> <code class="descname">data_store</code><span class="sig-paren">(</span><em>file_name</em>, <em>object_data</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_store" title="Permalink to this definition"></a></dt>
<dd><p>store program objects to binary file</p> <dd><p>Store program objects to binary file.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>file_name</strong> (<em>str</em>) file to store</p></li>
<li><p><strong>object_data</strong> (<em>object</em>) data to store</p></li>
</ul>
</dd>
</dl>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="data.main"> <dt id="data.main">
<code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#data.main" title="Permalink to this definition"></a></dt> <code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#data.main" title="Permalink to this definition"></a></dt>
<dd></dd></dl> <dd><p>Main function.</p>
</dd></dl>
</div> </div>

View File

@@ -13,6 +13,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@@ -33,15 +34,25 @@
<div class="section" id="module-date"> <div class="section" id="module-date">
<span id="date-module"></span><h1>date module<a class="headerlink" href="#module-date" title="Permalink to this headline"></a></h1> <span id="date-module"></span><h1>date module<a class="headerlink" href="#module-date" title="Permalink to this headline"></a></h1>
<p>Created on Mon Jan 15 21:52:34 2018</p> <p>Calculate spacial dates.</p>
<p>&#64;author: Daniel Weschke</p> <dl class="field-list simple">
<dl class="function"> <dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2018-01-15</p>
</dd>
</dl>
<span class="target" id="module-date"></span><dl class="function">
<dt id="date.ascension_of_jesus"> <dt id="date.ascension_of_jesus">
<code class="descname">ascension_of_jesus</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.ascension_of_jesus" title="Permalink to this definition"></a></dt> <code class="descname">ascension_of_jesus</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.ascension_of_jesus" title="Permalink to this definition"></a></dt>
<dd><p>Ascension of Jesus.</p> <dd><p>Ascension of Jesus.</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p>datetime.date the day of ascension of Jesus</p> <dd class="field-odd"><p><strong>year</strong> (<em>int</em>) the year to calculate the ascension of Jesus</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>the day of ascension of Jesus</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>datetime.date</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
@@ -51,8 +62,14 @@
<code class="descname">easter_friday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_friday" title="Permalink to this definition"></a></dt> <code class="descname">easter_friday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_friday" title="Permalink to this definition"></a></dt>
<dd><p>Easter Friday.</p> <dd><p>Easter Friday.</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p>datetime.date the day of Easter Friday</p> <dd class="field-odd"><p><strong>year</strong> (<em>int</em>) the year to calculate the Easter Friday</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>the day of Easter Friday</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>datetime.date</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
@@ -62,8 +79,14 @@
<code class="descname">easter_monday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_monday" title="Permalink to this definition"></a></dt> <code class="descname">easter_monday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_monday" title="Permalink to this definition"></a></dt>
<dd><p>Easter Monday.</p> <dd><p>Easter Monday.</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p>datetime.date the day of Easter Monday</p> <dd class="field-odd"><p><strong>year</strong> (<em>int</em>) the year to calculate the Easter Monday</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>the day of Easter Monday</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>datetime.date</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
@@ -73,8 +96,14 @@
<code class="descname">easter_sunday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_sunday" title="Permalink to this definition"></a></dt> <code class="descname">easter_sunday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_sunday" title="Permalink to this definition"></a></dt>
<dd><p>Easter Sunday.</p> <dd><p>Easter Sunday.</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p>datetime.date the day of Easter Sunday</p> <dd class="field-odd"><p><strong>year</strong> (<em>int</em>) the year to calculate the Easter Sunday</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>the day of Easter Sunday</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>datetime.date</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
@@ -84,24 +113,32 @@
<code class="descname">gaußsche_osterformel</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.gaußsche_osterformel" title="Permalink to this definition"></a></dt> <code class="descname">gaußsche_osterformel</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.gaußsche_osterformel" title="Permalink to this definition"></a></dt>
<dd><p>Gaußsche Osterformel.</p> <dd><p>Gaußsche Osterformel.</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p>int the day of Easter Sunday as a day in march.</p> <dd class="field-odd"><p><strong>year</strong> (<em>int</em>) the year to calculate the Easter Sunday</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>the day of Easter Sunday as a day in march.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>int</p>
</dd>
<dt class="field-even">Variables</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>X</strong> (<em>int</em>) Das Jahr / year</p></li>
<li><p><strong>K</strong><strong>(</strong><strong>X</strong><strong>)</strong> (<em>int</em>) Die Säkularzahl</p></li>
<li><p><strong>M</strong><strong>(</strong><strong>X</strong><strong>)</strong> (<em>int</em>) Die säkulare Mondschaltung</p></li>
<li><p><strong>S</strong><strong>(</strong><strong>K</strong><strong>)</strong> (<em>int</em>) Die säkulare Sonnenschaltung</p></li>
<li><p><strong>A</strong><strong>(</strong><strong>X</strong><strong>)</strong> (<em>int</em>) Den Mondparameter</p></li>
<li><p><strong>D</strong><strong>(</strong><strong>A</strong><strong>,</strong><strong>M</strong><strong>)</strong> (<em>int</em>) Den Keim für den ersten Vollmond im Frühling</p></li>
<li><p><strong>R</strong><strong>(</strong><strong>D</strong><strong>,</strong><strong>A</strong><strong>)</strong> (<em>int</em>) Die kalendarische Korrekturgröße</p></li>
<li><p><strong>OG</strong><strong>(</strong><strong>D</strong><strong>,</strong><strong>R</strong><strong>)</strong> (<em>int</em>) Die Ostergrenze</p></li>
<li><p><strong>SZ</strong><strong>(</strong><strong>X</strong><strong>,</strong><strong>S</strong><strong>)</strong> (<em>int</em>) Den ersten Sonntag im März</p></li>
<li><p><strong>OE</strong><strong>(</strong><strong>OG</strong><strong>,</strong><strong>SZ</strong><strong>)</strong> (<em>int</em>) Die Entfernung des Ostersonntags von der Ostergrenze (Osterentfernung in Tagen)</p></li>
<li><p><strong>OS</strong><strong>(</strong><strong>OG</strong><strong>,</strong><strong>OE</strong><strong>)</strong> (<em>int</em>) Das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.)</p></li>
</ul>
</dd> </dd>
</dl> </dl>
<p>Algorithmus gilt für den Gregorianischen Kalender.</p> <p>Algorithmus gilt für den Gregorianischen Kalender.</p>
<ul class="simple">
<li><p>X Das Jahr / year</p></li>
<li><p>K(X) Die Säkularzahl</p></li>
<li><p>M(K) Die säkulare Mondschaltung</p></li>
<li><p>S(K) Die säkulare Sonnenschaltung</p></li>
<li><p>A(X) Den Mondparameter</p></li>
<li><p>D(A,M) Den Keim für den ersten Vollmond im Frühling</p></li>
<li><p>R(D,A) Die kalendarische Korrekturgröße</p></li>
<li><p>OG(D,R) Die Ostergrenze</p></li>
<li><p>SZ(X,S) Den ersten Sonntag im März</p></li>
<li><p>OE(OG,SZ) Die Entfernung des Ostersonntags von der Ostergrenze (Osterentfernung in Tagen)</p></li>
<li><p>OS(OG,OE) Das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.)</p></li>
</ul>
<p>source: <a class="reference external" href="https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel">https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel</a></p> <p>source: <a class="reference external" href="https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel">https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel</a></p>
</dd></dl> </dd></dl>
@@ -110,8 +147,14 @@
<code class="descname">pentecost</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.pentecost" title="Permalink to this definition"></a></dt> <code class="descname">pentecost</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.pentecost" title="Permalink to this definition"></a></dt>
<dd><p>Pentecost.</p> <dd><p>Pentecost.</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Returns</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p>datetime.date the day of Pentecost</p> <dd class="field-odd"><p><strong>year</strong> (<em>int</em>) the year to calculate the Pentecost</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>the day of Pentecost</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>datetime.date</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>

View File

@@ -13,6 +13,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@@ -33,26 +34,32 @@
<div class="section" id="module-fit"> <div class="section" id="module-fit">
<span id="fit-module"></span><h1>fit module<a class="headerlink" href="#module-fit" title="Permalink to this headline"></a></h1> <span id="fit-module"></span><h1>fit module<a class="headerlink" href="#module-fit" title="Permalink to this headline"></a></h1>
<dl class="function"> <p>Function and approximation.</p>
<span class="target" id="module-fit"></span><dl class="function">
<dt id="fit.gauss"> <dt id="fit.gauss">
<code class="descname">gauss</code><span class="sig-paren">(</span><em>x</em>, <em>*p</em><span class="sig-paren">)</span><a class="headerlink" href="#fit.gauss" title="Permalink to this definition"></a></dt> <code class="descname">gauss</code><span class="sig-paren">(</span><em>x</em>, <em>*p</em><span class="sig-paren">)</span><a class="headerlink" href="#fit.gauss" title="Permalink to this definition"></a></dt>
<dd><p>Gauss distribution function.</p> <dd><p>Gauss distribution function.</p>
<div class="math notranslate nohighlight">
\[f(x)=ae^{-(x-b)^{2}/(2c^{2})}\]</div>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> positions where the gauss function will be calculated</p></li> <li><p><strong>x</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions where the gauss function will be calculated</p></li>
<li><p><strong>p</strong> <p>gauss parameters [a, b, c, d]:</p> <li><p><strong>p</strong> (<em>list</em>) <p>gauss parameters [a, b, c, d]:</p>
<ul> <ul>
<li><p>a amplitude (integral = 1 if a = 1/(c*sqrt(2*pi)))</p></li> <li><p>a amplitude (<span class="math notranslate nohighlight">\(\int y \,\mathrm{d}x=1 \Leftrightarrow a=1/(c\sqrt{2\pi})\)</span> )</p></li>
<li><p>b expected value mu (position of maximum, default = 0)</p></li> <li><p>b expected value <span class="math notranslate nohighlight">\(\mu\)</span> (position of maximum, default = 0)</p></li>
<li><p>c standard deviation sigma (variance sigma**2 = c**2)</p></li> <li><p>c standard deviation <span class="math notranslate nohighlight">\(\sigma\)</span> (variance <span class="math notranslate nohighlight">\(\sigma^2=c^2\)</span>)</p></li>
<li><p>d vertical offset (default = 0)</p></li> <li><p>d vertical offset (default = 0)</p></li>
</ul> </ul>
</p></li> </p></li>
</ul> </ul>
</dd> </dd>
<dt class="field-even">Returns</dt> <dt class="field-even">Returns</dt>
<dd class="field-even"><p>array gauss values at given positions x</p> <dd class="field-even"><p>gauss values at given positions x</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>numpy.ndarray</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
@@ -64,22 +71,32 @@
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple"> <dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> positions</p></li> <li><p><strong>x</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions</p></li>
<li><p><strong>y</strong> values</p></li> <li><p><strong>y</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) values</p></li>
<li><p><strong>e</strong> error values</p></li> <li><p><strong>e</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) error values (default = None)</p></li>
<li><p><strong>x_fit</strong> positions of fitted function (default steps is 3*len(x) but min 150)</p></li> <li><p><strong>x_fit</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions of fitted function (default = None, if None then x
is used)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) verbose information (default = False)</p></li>
</ul> </ul>
</dd> </dd>
<dt class="field-even">Returns</dt> <dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple"> <dd class="field-even"><p><ul class="simple">
<li><p>y_fit values</p></li> <li><p>numpy.ndarray fitted values (y_fit)</p></li>
<li><p>popt parameters of gauss distribution function (amplitude a, expected <li><p>numpy.ndarray parameters of gauss distribution function (popt:
value mu, standard deviation sigma, vertical offset d)</p></li> amplitude a, expected value <span class="math notranslate nohighlight">\(\mu\)</span>, standard deviation
<li><p>FWHM full width at half maximum</p></li> <span class="math notranslate nohighlight">\(\sigma\)</span>, vertical offset d)</p></li>
<li><p>numpy.float64 full width at half maximum (FWHM)</p></li>
</ul> </ul>
</p> </p>
</dd> </dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl> </dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#fit.gauss" title="fit.gauss"><code class="xref py py-meth docutils literal notranslate"><span class="pre">gauss()</span></code></a></p>
</div>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">

View File

@@ -14,6 +14,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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="#" /> <link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@@ -42,8 +43,10 @@
| <a href="#E"><strong>E</strong></a> | <a href="#E"><strong>E</strong></a>
| <a href="#F"><strong>F</strong></a> | <a href="#F"><strong>F</strong></a>
| <a href="#G"><strong>G</strong></a> | <a href="#G"><strong>G</strong></a>
| <a href="#I"><strong>I</strong></a>
| <a href="#L"><strong>L</strong></a> | <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a> | <a href="#M"><strong>M</strong></a>
| <a href="#N"><strong>N</strong></a>
| <a href="#P"><strong>P</strong></a> | <a href="#P"><strong>P</strong></a>
| <a href="#R"><strong>R</strong></a> | <a href="#R"><strong>R</strong></a>
| <a href="#S"><strong>S</strong></a> | <a href="#S"><strong>S</strong></a>
@@ -73,17 +76,23 @@
<h2 id="D">D</h2> <h2 id="D">D</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="data.html#module-data">data (module)</a> <li><a href="data.html#module-data">data (module)</a>, <a href="data.html#module-data">[1]</a>
</li> </li>
<li><a href="data.html#data.data_load">data_load() (in module data)</a> <li><a href="data.html#data.data_load">data_load() (in module data)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="data.html#data.data_read">data_read() (in module data)</a> <li><a href="data.html#data.data_read">data_read() (in module data)</a>
</li> </li>
<li><a href="data.html#data.data_store">data_store() (in module data)</a> <li><a href="data.html#data.data_store">data_store() (in module data)</a>
</li> </li>
<li><a href="date.html#module-date">date (module)</a> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="date.html#module-date">date (module)</a>, <a href="date.html#module-date">[1]</a>
</li>
<li><a href="solver_model.html#solver_model.disk">disk() (in module solver_model)</a>
</li>
<li><a href="solver_model.html#solver_model.disk_nm">disk_nm() (in module solver_model)</a>
</li>
<li><a href="solver_model.html#solver_model.disk_nmmdk">disk_nmmdk() (in module solver_model)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
@@ -91,10 +100,16 @@
<h2 id="E">E</h2> <h2 id="E">E</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="date.html#date.easter_friday">easter_friday() (in module date)</a> <li><a href="solver.html#solver.e1">e1() (in module solver)</a>
</li>
<li><a href="solver.html#solver.e2">e2() (in module solver)</a>
</li>
<li><a href="solver.html#solver.e4">e4() (in module solver)</a>
</li> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="date.html#date.easter_friday">easter_friday() (in module date)</a>
</li>
<li><a href="date.html#date.easter_monday">easter_monday() (in module date)</a> <li><a href="date.html#date.easter_monday">easter_monday() (in module date)</a>
</li> </li>
<li><a href="date.html#date.easter_sunday">easter_sunday() (in module date)</a> <li><a href="date.html#date.easter_sunday">easter_sunday() (in module date)</a>
@@ -105,7 +120,7 @@
<h2 id="F">F</h2> <h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="fit.html#module-fit">fit (module)</a> <li><a href="fit.html#module-fit">fit (module)</a>, <a href="fit.html#module-fit">[1]</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
@@ -121,7 +136,15 @@
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="date.html#date.gaußsche_osterformel">gaußsche_osterformel() (in module date)</a> <li><a href="date.html#date.gaußsche_osterformel">gaußsche_osterformel() (in module date)</a>
</li> </li>
<li><a href="geometry.html#module-geometry">geometry (module)</a> <li><a href="geometry.html#module-geometry">geometry (module)</a>, <a href="geometry.html#module-geometry">[1]</a>
</li>
</ul></td>
</tr></table>
<h2 id="I">I</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#solver.i1">i1() (in module solver)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>
@@ -146,6 +169,18 @@
</ul></td> </ul></td>
</tr></table> </tr></table>
<h2 id="N">N</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#solver.newmark_newtonraphson">newmark_newtonraphson() (in module solver)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#solver.newmark_newtonraphson_rdk">newmark_newtonraphson_rdk() (in module solver)</a>
</li>
</ul></td>
</tr></table>
<h2 id="P">P</h2> <h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
@@ -175,6 +210,12 @@
<h2 id="S">S</h2> <h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#module-solver">solver (module)</a>, <a href="solver.html#module-solver">[1]</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver_model.html#module-solver_model">solver_model (module)</a>, <a href="solver_model.html#module-solver_model">[1]</a>
</li>
<li><a href="geometry.html#geometry.square">square() (in module geometry)</a> <li><a href="geometry.html#geometry.square">square() (in module geometry)</a>
</li> </li>
</ul></td> </ul></td>

View File

@@ -13,6 +13,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@@ -33,32 +34,81 @@
<div class="section" id="module-geometry"> <div class="section" id="module-geometry">
<span id="geometry-module"></span><h1>geometry module<a class="headerlink" href="#module-geometry" title="Permalink to this headline"></a></h1> <span id="geometry-module"></span><h1>geometry module<a class="headerlink" href="#module-geometry" title="Permalink to this headline"></a></h1>
<p>2D</p> <p>2D geometry objects.</p>
<p>&#64;date: 2019-03-21 <dl class="field-list simple">
&#64;author: Daniel Weschke</p> <dt class="field-odd">Date</dt>
<dl class="function"> <dd class="field-odd"><p>2019-03-21</p>
</dd>
</dl>
<span class="target" id="module-geometry"></span><dl class="function">
<dt id="geometry.cubic"> <dt id="geometry.cubic">
<code class="descname">cubic</code><span class="sig-paren">(</span><em>point1</em>, <em>angle1</em>, <em>point2</em>, <em>angle2</em>, <em>samples=50</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.cubic" title="Permalink to this definition"></a></dt> <code class="descname">cubic</code><span class="sig-paren">(</span><em>point1</em>, <em>angle1</em>, <em>point2</em>, <em>angle2</em>, <em>samples=50</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.cubic" title="Permalink to this definition"></a></dt>
<dd><p>returns <dd><dl class="field-list simple">
([sample_point1_x, sample_point2_x, …], [sample_points1_y, sample_point2_y, …])</p> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>point1</strong> (<em>tuple</em>) one end point</p></li>
<li><p><strong>angle1</strong> (<em>int</em><em> or </em><em>float</em>) the slope at the one end point</p></li>
<li><p><strong>point2</strong> (<em>tuple</em>) other end point</p></li>
<li><p><strong>angle2</strong> (<em>int</em><em> or </em><em>float</em>) the slope at the other end point</p></li>
<li><p><strong>samples</strong> (<em>int</em>) number of sampling points</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>([sample_point1_x, sample_point2_x, …],
[sample_points1_y, sample_point2_y, …])</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="geometry.cubic_deg"> <dt id="geometry.cubic_deg">
<code class="descname">cubic_deg</code><span class="sig-paren">(</span><em>point1</em>, <em>angle1</em>, <em>point2</em>, <em>angle2</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.cubic_deg" title="Permalink to this definition"></a></dt> <code class="descname">cubic_deg</code><span class="sig-paren">(</span><em>point1</em>, <em>angle1</em>, <em>point2</em>, <em>angle2</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.cubic_deg" title="Permalink to this definition"></a></dt>
<dd><p>returns <dd><dl class="field-list simple">
([sample_point1_x, sample_point2_x, …], [sample_points1_y, sample_point2_y, …])</p> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>point1</strong> (<em>tuple</em>) one end point</p></li>
<li><p><strong>angle1</strong> (<em>int</em><em> or </em><em>float</em>) the slope at the one end point</p></li>
<li><p><strong>point2</strong> (<em>tuple</em>) other end point</p></li>
<li><p><strong>angle2</strong> (<em>int</em><em> or </em><em>float</em>) the slope at the other end point</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>([sample_point1_x, sample_point2_x, …],
[sample_points1_y, sample_point2_y, …])</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#geometry.cubic" title="geometry.cubic"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cubic()</span></code></a></p>
</div>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="geometry.line"> <dt id="geometry.line">
<code class="descname">line</code><span class="sig-paren">(</span><em>point1</em>, <em>point2</em>, <em>samples=2</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.line" title="Permalink to this definition"></a></dt> <code class="descname">line</code><span class="sig-paren">(</span><em>point1</em>, <em>point2</em>, <em>samples=2</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.line" title="Permalink to this definition"></a></dt>
<dd><p>samples: number of sampling points</p> <dd><div class="math notranslate nohighlight">
<p>y = (y2-y1)/(x2-x1)*(x-x1) + y1</p> \[y = \frac{y_2-y_1}{x_2-x_1}(x-x_1) + y_1\]</div>
<dl class="simple"> <dl class="field-list simple">
<dt>returns</dt><dd><p>((point1_x, point2_x), (points1_y, point2_y)) <dt class="field-odd">Parameters</dt>
or <dd class="field-odd"><ul class="simple">
([sample_point1_x, sample_point2_x, …], [sample_points1_y, sample_point2_y, …])</p> <li><p><strong>point1</strong> (<em>tuple</em>) one end point</p></li>
<li><p><strong>point2</strong> (<em>tuple</em>) other end point</p></li>
<li><p><strong>samples</strong> (<em>int</em>) number of sampling points</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>((point1_x, point2_x), (points1_y, point2_y)) or
([sample_point1_x, sample_point2_x, …],
[sample_points1_y, sample_point2_y, …])</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
@@ -66,26 +116,57 @@ or
<dl class="function"> <dl class="function">
<dt id="geometry.points"> <dt id="geometry.points">
<code class="descname">points</code><span class="sig-paren">(</span><em>*pts</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.points" title="Permalink to this definition"></a></dt> <code class="descname">points</code><span class="sig-paren">(</span><em>*pts</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.points" title="Permalink to this definition"></a></dt>
<dd><p>returns <dd><dl class="field-list simple">
((point1_x, point2_x), (point1_y, point2_y), …)</p> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>*pts</strong> points to rearrange</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>((point1_x, point2_x), (point1_y, point2_y), …)</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="geometry.rectangle"> <dt id="geometry.rectangle">
<code class="descname">rectangle</code><span class="sig-paren">(</span><em>width</em>, <em>height</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rectangle" title="Permalink to this definition"></a></dt> <code class="descname">rectangle</code><span class="sig-paren">(</span><em>width</em>, <em>height</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rectangle" title="Permalink to this definition"></a></dt>
<dd><p>returns <dd><dl class="field-list simple">
(point1, point2, point3, point4)</p> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>width</strong> (<em>int</em><em> or </em><em>float</em>) the width of the rectangle</p></li>
<li><p><strong>height</strong> (<em>int</em><em> or </em><em>float</em>) the height of the rectangle</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>(point1, point2, point3, point4)</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="geometry.rotate"> <dt id="geometry.rotate">
<code class="descname">rotate</code><span class="sig-paren">(</span><em>origin</em>, <em>angle</em>, <em>*pts</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rotate" title="Permalink to this definition"></a></dt> <code class="descname">rotate</code><span class="sig-paren">(</span><em>origin</em>, <em>angle</em>, <em>*pts</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rotate" title="Permalink to this definition"></a></dt>
<dd><p>Rotate a point or polygon counterclockwise by a given angle around a given origin.</p> <dd><p>Rotate a point or polygon counterclockwise by a given angle around a given
<p>The angle should be given in radians.</p> origin. The angle should be given in radians.</p>
<dl class="simple"> <dl class="field-list simple">
<dt>returns</dt><dd><p>(point_x, point_y) <dt class="field-odd">Parameters</dt>
or <dd class="field-odd"><ul class="simple">
(point1, point2, …)</p> <li><p><strong>origin</strong> (<em>tuple</em>) the center of rotation</p></li>
<li><p><strong>angle</strong> (<em>int</em><em> or </em><em>float</em>) the rotation angle</p></li>
<li><p><strong>*pts</strong> points to rotate</p></li>
<li><p><strong>**kwargs</strong> options</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>(point_x, point_y) or (point1, point2, …)</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>
@@ -93,31 +174,66 @@ or
<dl class="function"> <dl class="function">
<dt id="geometry.rotate_deg"> <dt id="geometry.rotate_deg">
<code class="descname">rotate_deg</code><span class="sig-paren">(</span><em>origin</em>, <em>angle</em>, <em>*pts</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rotate_deg" title="Permalink to this definition"></a></dt> <code class="descname">rotate_deg</code><span class="sig-paren">(</span><em>origin</em>, <em>angle</em>, <em>*pts</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rotate_deg" title="Permalink to this definition"></a></dt>
<dd><p>Rotate a point or polygon counterclockwise by a given angle around a given origin.</p> <dd><p>Rotate a point or polygon counterclockwise by a given angle around a given
<p>The angle should be given in degrees.</p> origin. The angle should be given in degrees.</p>
<dl class="simple"> <dl class="field-list simple">
<dt>returns</dt><dd><p>(point_x, point_y) <dt class="field-odd">Parameters</dt>
or <dd class="field-odd"><ul class="simple">
(point1, point2, …)</p> <li><p><strong>origin</strong> (<em>tuple</em>) the center of rotation</p></li>
<li><p><strong>angle</strong> (<em>int</em><em> or </em><em>float</em>) the rotation angle</p></li>
<li><p><strong>*pts</strong> points to rotate</p></li>
<li><p><strong>**kwargs</strong> options</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>(point_x, point_y) or (point1, point2, …)</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd> </dd>
</dl> </dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#geometry.rotate" title="geometry.rotate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">rotate()</span></code></a></p>
</div>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="geometry.square"> <dt id="geometry.square">
<code class="descname">square</code><span class="sig-paren">(</span><em>width</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.square" title="Permalink to this definition"></a></dt> <code class="descname">square</code><span class="sig-paren">(</span><em>width</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.square" title="Permalink to this definition"></a></dt>
<dd><p>returns <dd><dl class="field-list simple">
(point1, point2, point3, point4)</p> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>width</strong> (<em>int</em><em> or </em><em>float</em>) the edge size of the square</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>(point1, point2, point3, point4)</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#geometry.rectangle" title="geometry.rectangle"><code class="xref py py-meth docutils literal notranslate"><span class="pre">rectangle()</span></code></a></p>
</div>
</dd></dl> </dd></dl>
<dl class="function"> <dl class="function">
<dt id="geometry.translate"> <dt id="geometry.translate">
<code class="descname">translate</code><span class="sig-paren">(</span><em>vec</em>, <em>*pts</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.translate" title="Permalink to this definition"></a></dt> <code class="descname">translate</code><span class="sig-paren">(</span><em>vec</em>, <em>*pts</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.translate" title="Permalink to this definition"></a></dt>
<dd><p>Translate a point or polygon by a given vector.</p> <dd><p>Translate a point or polygon by a given vector.</p>
<dl class="simple"> <dl class="field-list simple">
<dt>returns</dt><dd><p>(point_x, point_y) <dt class="field-odd">Parameters</dt>
or <dd class="field-odd"><ul class="simple">
(point1, point2, …)</p> <li><p><strong>vec</strong> (<em>tuple</em>) translation vector</p></li>
<li><p><strong>*pts</strong> points to translate</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>(point_x, point_y) or (point1, point2, …)</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd> </dd>
</dl> </dl>
</dd></dl> </dd></dl>

View File

@@ -13,6 +13,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />

View File

@@ -13,6 +13,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@@ -39,6 +40,8 @@
<li class="toctree-l1"><a class="reference internal" href="date.html">date module</a></li> <li class="toctree-l1"><a class="reference internal" href="date.html">date module</a></li>
<li class="toctree-l1"><a class="reference internal" href="fit.html">fit module</a></li> <li class="toctree-l1"><a class="reference internal" href="fit.html">fit module</a></li>
<li class="toctree-l1"><a class="reference internal" href="geometry.html">geometry module</a></li> <li class="toctree-l1"><a class="reference internal" href="geometry.html">geometry module</a></li>
<li class="toctree-l1"><a class="reference internal" href="solver.html">solver module</a></li>
<li class="toctree-l1"><a class="reference internal" href="solver_model.html">solver_model module</a></li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@@ -2,9 +2,10 @@
# Project: pylib # Project: pylib
# Version: # Version:
# The remainder of this file is compressed using zlib. # The remainder of this file is compressed using zlib.
xڕ<EFBFBD>AN<EFBFBD>0E<>9<EFBFBD>lS<6C><53>7`<60><>Ăe4<65>'<27><><EFBFBD><EFBFBD>ǑȎk<C88E><6B>0܄<30>`<60>I7U<37>l"{<7B><><EFBFBD><EFBFBD><EFBFBD>#<23>k<>mmD<6D><44><EFBFBD>3<EFBFBD><03><><EFBFBD><EFBFBD>m <0C>w,<2C><0E><>)<29><11><><EFBFBD><EFBFBD>I<EFBFBD><49><EFBFBD>$#E-.F<><19><><EFBFBD><1A><>F<EFBFBD><46>m<EFBFBD><6D>mp<03>Q<EFBFBD>)LY<4C>!<21>4W<34>Ty<54>@mQZ)<29>[<5B><>F<EFBFBD><46><EFBFBD>]<5D>W<EFBFBD><57><EFBFBD><10>caB^il<69><6C>zZ<7A><5A>!<21>)<17>R<EFBFBD><52><EFBFBD>~?kc<6B>y<74>M<EFBFBD><4D><EFBFBD><EFBFBD><04><><EFBFBD> S<><53><EFBFBD><EFBFBD>.<2E>6g<><67><03><>$?<3F>M<EFBFBD><4D>x!<21>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD>tc<74>v<EFBFBD><76><EFBFBD><EFBFBD><1D>J<EFBFBD>(a<><61>Ga xڥ<EFBFBD>Mr<EFBFBD> <10><>s
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>т]Q<><59><D0A4> R<EFBFBD>VS<EFBFBD>++<2B> <20>T<EFBFBD>ʋ,)Zb~%<25><><EFBFBD><EFBFBD><EFBFBD><0F><><EFBFBD>$<24>A<1A><>xP<78><50>A<EFBFBD><41>^C<>Z<EFBFBD>yF<79>ӝ<EFBFBD>bP@<40><02><><EFBFBD><EFBFBD>m
C<EFBFBD>ȉ<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>!?<3F>X<EFBFBD><58>q<EFBFBD>S 5<EFBFBD>H<EFBFBD>;<07>U<><55>ȷ<EFBFBD><C8B7>^ZCn2E<32>:<3A>F<EFBFBD>[<07><59>F<EFBFBD>|7<><37><1B>3<EFBFBD>`0<>P<EFBFBD>ү<EFBFBD>.<2E><>t<EFBFBD>C<0F><>N
G v<EFBFBD>Ƶ5[p<1C><><EFBFBD>
*<<3C> 4<><34><EFBFBD><18> <EFBFBD><EFBFBD><EFBFBD><1F>ڨk<DAA8>Ӡ<EFBFBD><D3A0>z0x<><78><EFBFBD><EFBFBD><EFBFBD>u ϋ2<CF8B>XX<04> wa <0B><><EFBFBD><EFBFBD><EFBFBD>+<2B>[0X
<EFBFBD><EFBFBD>?<0F><><EFBFBD><1F><؊ш?<3F><><EFBFBD>N<13><>n<EFBFBD>> ޝ<EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD>.|8H><3E>-UK<55>
<EFBFBD><EFBFBD>%J<1A><>{+<2B><>z<EFBFBD><01><>tjC

View File

@@ -13,6 +13,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
@@ -44,7 +45,8 @@
<div class="modindex-jumpbox"> <div class="modindex-jumpbox">
<a href="#cap-d"><strong>d</strong></a> | <a href="#cap-d"><strong>d</strong></a> |
<a href="#cap-f"><strong>f</strong></a> | <a href="#cap-f"><strong>f</strong></a> |
<a href="#cap-g"><strong>g</strong></a> <a href="#cap-g"><strong>g</strong></a> |
<a href="#cap-s"><strong>s</strong></a>
</div> </div>
<table class="indextable modindextable"> <table class="indextable modindextable">
@@ -54,29 +56,42 @@
<tr> <tr>
<td></td> <td></td>
<td> <td>
<a href="data.html#module-data"><code class="xref">data</code></a></td><td> <a href="data.html#module-data"><code class="xref">data</code></a> <em>(*nix, Windows)</em></td><td>
<em></em></td></tr> <em>Handle data files.</em></td></tr>
<tr> <tr>
<td></td> <td></td>
<td> <td>
<a href="date.html#module-date"><code class="xref">date</code></a></td><td> <a href="date.html#module-date"><code class="xref">date</code></a> <em>(*nix, Windows)</em></td><td>
<em></em></td></tr> <em>Special dates.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr> <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-f"><td></td><td> <tr class="cap" id="cap-f"><td></td><td>
<strong>f</strong></td><td></td></tr> <strong>f</strong></td><td></td></tr>
<tr> <tr>
<td></td> <td></td>
<td> <td>
<a href="fit.html#module-fit"><code class="xref">fit</code></a></td><td> <a href="fit.html#module-fit"><code class="xref">fit</code></a> <em>(*nix, Windows)</em></td><td>
<em></em></td></tr> <em>Function and approximation.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr> <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-g"><td></td><td> <tr class="cap" id="cap-g"><td></td><td>
<strong>g</strong></td><td></td></tr> <strong>g</strong></td><td></td></tr>
<tr> <tr>
<td></td> <td></td>
<td> <td>
<a href="geometry.html#module-geometry"><code class="xref">geometry</code></a></td><td> <a href="geometry.html#module-geometry"><code class="xref">geometry</code></a> <em>(*nix, Windows)</em></td><td>
<em></em></td></tr> <em>Geometry objects.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-s"><td></td><td>
<strong>s</strong></td><td></td></tr>
<tr>
<td></td>
<td>
<a href="solver.html#module-solver"><code class="xref">solver</code></a> <em>(*nix, Windows)</em></td><td>
<em>Numerical solver.</em></td></tr>
<tr>
<td></td>
<td>
<a href="solver_model.html#module-solver_model"><code class="xref">solver_model</code></a> <em>(*nix, Windows)</em></td><td>
<em>Mechanical models.</em></td></tr>
</table> </table>

View File

@@ -14,6 +14,7 @@
<script type="text/javascript" src="_static/underscore.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/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.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>
<script type="text/javascript" src="_static/searchtools.js"></script> <script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="index" title="Index" href="genindex.html" /> <link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" /> <link rel="search" title="Search" href="#" />

View File

@@ -1 +1 @@
Search.setIndex({docnames:["data","date","fit","geometry","index","modules","src"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["data.rst","date.rst","fit.rst","geometry.rst","index.rst","modules.rst","src.rst"],objects:{"":{data:[0,0,0,"-"],date:[1,0,0,"-"],fit:[2,0,0,"-"],geometry:[3,0,0,"-"]},data:{data_load:[0,1,1,""],data_read:[0,1,1,""],data_store:[0,1,1,""],main:[0,1,1,""]},date:{"gau\u00dfsche_osterformel":[1,1,1,""],ascension_of_jesus:[1,1,1,""],easter_friday:[1,1,1,""],easter_monday:[1,1,1,""],easter_sunday:[1,1,1,""],pentecost:[1,1,1,""]},fit:{gauss:[2,1,1,""],gauss_fit:[2,1,1,""],main:[2,1,1,""]},geometry:{cubic:[3,1,1,""],cubic_deg:[3,1,1,""],line:[3,1,1,""],points:[3,1,1,""],rectangle:[3,1,1,""],rotate:[3,1,1,""],rotate_deg:[3,1,1,""],square:[3,1,1,""],translate:[3,1,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"9fsche_osterformel":1,"default":2,"f\u00fcr":1,"fr\u00fchling":1,"function":2,"gau\u00dfsch":1,"gau\u00dfsche_osterformel":1,"int":1,"korrekturgr\u00f6\u00df":1,"m\u00e4rz":1,"m\u00e4rzdatum":1,"return":[1,2,3],"s\u00e4kular":1,"s\u00e4kularzahl":1,Das:1,The:3,algorithmu:1,als:1,amplitud:2,angl:3,angle1:3,angle2:3,april:1,around:3,arrai:2,ascens:1,ascension_of_jesu:1,ascii:0,author:[1,3],binari:0,calcul:2,counterclockwis:3,creat:1,cubic:3,cubic_deg:3,dai:1,daniel:[1,3],data:[2,5],data_load:0,data_read:0,data_stor:0,date:[3,5],datetim:1,datum:1,degre:3,den:1,der:1,des:1,deviat:2,die:1,distribut:2,easter:1,easter_fridai:1,easter_mondai:1,easter_sundai:1,entfernung:1,error:2,ersten:1,expect:2,fals:[0,2],file:0,file_nam:0,fit:5,frac:[],fridai:1,from:0,full:2,fwhm:2,gau:1,gauss:2,gauss_fit:2,geometri:5,gilt:1,given:[2,3],gregorianischen:1,half:2,height:3,http:1,index:4,integr:2,jahr:1,jan:1,jesu:1,kalend:1,kalendarisch:1,keim:1,kwarg:3,len:2,line:3,load:0,main:[0,2],march:1,maximum:2,min:2,modul:[4,5],mon:1,mondai:1,mondparamet:1,mondschaltung:1,none:2,number:3,object:0,object_data:0,offset:2,org:1,origin:3,osterentfernung:1,osterformel:1,ostergrenz:1,ostersonntag:1,page:4,paramet:2,pentecost:1,point1:3,point1_i:3,point1_x:3,point2:3,point2_i:3,point2_x:3,point3:3,point4:3,point:3,point_i:3,point_x:3,points1_i:3,polygon:3,popt:2,posit:2,program:0,pts:3,rac:[],radian:3,read:0,rectangl:3,rotat:3,rotate_deg:3,sampl:3,sample_point1_x:3,sample_point2_i:3,sample_point2_x:3,sample_points1_i:3,search:4,should:3,sigma:2,sonnenschaltung:1,sonntag:1,sourc:1,sqrt:2,squar:3,standard:2,step:2,store:0,sum_:[],sundai:1,tagen:1,test:2,translat:3,usw:1,valu:2,varianc:2,vec:3,vector:3,verbos:[0,2],vertic:2,vollmond:1,von:1,weschk:[1,3],where:2,width:[2,3],wiki:1,wikipedia:1,x_column:0,x_fit:2,y_column:0,y_fit:2,year:1},titles:["data module","date module","fit module","geometry module","Welcome to pylib\u2019s documentation!","src","src package"],titleterms:{content:6,data:[0,6],date:[1,6],document:4,fit:[2,6],geometri:[3,6],indic:4,modul:[0,1,2,3,6],packag:6,pylib:4,src:[5,6],submodul:6,tabl:4,welcom:4}}) Search.setIndex({docnames:["data","date","fit","geometry","index","modules","solver","solver_model"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["data.rst","date.rst","fit.rst","geometry.rst","index.rst","modules.rst","solver.rst","solver_model.rst"],objects:{"":{data:[0,0,0,"-"],date:[1,0,0,"-"],fit:[2,0,0,"-"],geometry:[3,0,0,"-"],solver:[6,0,0,"-"],solver_model:[7,0,0,"-"]},data:{data_load:[0,1,1,""],data_read:[0,1,1,""],data_store:[0,1,1,""],main:[0,1,1,""]},date:{"gau\u00dfsche_osterformel":[1,1,1,""],ascension_of_jesus:[1,1,1,""],easter_friday:[1,1,1,""],easter_monday:[1,1,1,""],easter_sunday:[1,1,1,""],pentecost:[1,1,1,""]},fit:{gauss:[2,1,1,""],gauss_fit:[2,1,1,""],main:[2,1,1,""]},geometry:{cubic:[3,1,1,""],cubic_deg:[3,1,1,""],line:[3,1,1,""],points:[3,1,1,""],rectangle:[3,1,1,""],rotate:[3,1,1,""],rotate_deg:[3,1,1,""],square:[3,1,1,""],translate:[3,1,1,""]},solver:{e1:[6,1,1,""],e2:[6,1,1,""],e4:[6,1,1,""],i1:[6,1,1,""],newmark_newtonraphson:[6,1,1,""],newmark_newtonraphson_rdk:[6,1,1,""]},solver_model:{disk:[7,1,1,""],disk_nm:[7,1,1,""],disk_nmmdk:[7,1,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"1st":6,"1th":[],"2nd":6,"4th":6,"9fsche_osterformel":1,"default":[0,2,6],"f\u00fcr":1,"float":[2,3,6],"fr\u00fchling":1,"function":[0,2,6,7],"gau\u00dfsch":1,"gau\u00dfsche_osterformel":1,"int":[0,1,2,3,6],"korrekturgr\u00f6\u00df":1,"m\u00e4rz":1,"m\u00e4rzdatum":1,"return":[0,1,2,3],"s\u00e4kular":1,"s\u00e4kularzahl":1,"vorw\u00e4rt":6,Das:1,One:6,The:[3,6],against:6,algorithmu:1,als:1,amplitud:2,angl:3,angle1:3,angle2:3,approxim:[2,6],april:1,around:3,ascens:1,ascension_of_jesu:1,ascii:0,backward:6,becom:6,begin:6,beta:6,binari:0,bmatrix:6,bool:[0,2,6],calcul:[1,2],cauchi:6,center:3,choos:6,column:0,condit:6,counterclockwis:3,cubic:3,cubic_deg:3,dai:1,data:[2,5],data_load:0,data_read:0,data_stor:0,date:[3,5,6,7],datetim:1,datum:1,ddot:6,degre:3,den:1,der:1,deriv:7,des:1,describ:7,deviat:2,diamet:[6,7],die:1,differenti:[6,7],disk:7,disk_nm:7,disk_nmmdk:7,displac:6,distribut:2,dot:6,easter:1,easter_fridai:1,easter_mondai:1,easter_sundai:1,eccentr:7,edg:3,end:[3,6],entfernung:1,equat:[6,7],error:[2,6],ersten:1,euler:6,everi:6,exampl:6,expect:2,explicit:6,explizit:6,fals:[0,2,6],file:0,file_nam:0,filenam:0,first:[0,6,7],fit:5,float64:2,fnm:6,forward:6,fourth:6,frac:3,fridai:1,from:[0,6],full:2,fwhm:2,gamma:6,gau:1,gauss:2,gauss_fit:2,geometri:5,gilt:1,given:[2,3,6],global:6,govern:7,gregorianischen:1,half:2,has:6,height:3,http:1,implicit:6,index:[0,4],inform:[0,2,6],initi:[6,7],iter:6,jahr:1,jesu:1,kalend:1,kalendarisch:1,keim:1,kutta:6,kwarg:3,ldot:6,leftrightarrow:2,line:3,list:[0,2,6,7],load:0,local:6,main:[0,2],march:1,mathmat:7,mathrm:2,max_iter:6,maximum:[2,6],maxiter:6,mean:6,mechan:[],method:6,model:7,modul:[4,5],mondai:1,mondparamet:1,mondschaltung:1,ndarrai:2,newmark:6,newmark_newtonraphson:6,newmark_newtonraphson_rdk:6,none:2,number:[3,6],numer:6,numpi:2,object:[0,3],object_data:0,ode1back:[],offset:2,one:[3,6],option:3,order:[6,7],ordinari:[6,7],org:1,origin:3,osterentfernung:1,osterformel:1,ostergrenz:1,ostersonntag:1,other:3,page:4,param:[],paramet:[0,1,2,3,6,7],pentecost:1,per:6,point1:3,point1_i:3,point1_x:3,point2:3,point2_i:3,point2_x:3,point3:3,point4:3,point:3,point_i:3,point_x:3,points1_i:3,polygon:3,polygonzugverfahren:6,popt:2,posit:2,print:6,printmessg:[],problem:[6,7],program:0,proport:6,pts:3,quad:6,radian:3,read:0,rearrang:3,rectangl:3,residuum:6,rk2:[],rk4:[],rotat:[3,7],rotate_deg:3,rung:6,sampl:3,sample_point1_x:3,sample_point2_i:3,sample_point2_x:3,sample_points1_i:3,sche:6,search:4,second:[6,7],set:6,should:3,sigma:2,size:[3,6],slope:3,solut:6,solv:6,solver:5,solver_model:5,sonnenschaltung:1,sonntag:1,sourc:1,spacial:1,sqrt:2,squar:[3,6],stabl:6,standard:[2,6],step:6,store:0,str:0,sundai:1,system:[6,7],t_0:6,t_i:6,tagen:1,test:2,thick:6,time:[6,7],tol:6,toler:6,torqu:7,translat:3,tupl:[0,2,3],type:[0,1,2,3],used:2,usw:1,valu:[2,6,7],variabl:1,varianc:2,vec:3,vector:3,veloc:6,verbos:[0,2,6],verfahren:6,vertic:2,vollmond:1,von:1,where:2,which:6,width:[2,3],wiki:1,wikipedia:1,write:0,x_0:6,x_1:[3,6],x_2:[3,6],x_column:0,x_fit:2,x_i:6,xp0:6,xpn:7,xpp0:6,xppn:7,y_1:3,y_2:3,y_column:0,y_fit:2,year:1},titles:["data module","date module","fit module","geometry module","Welcome to pylib\u2019s documentation!","src","solver module","solver_model module"],titleterms:{data:0,date:1,document:4,fit:2,geometri:3,indic:4,modul:[0,1,2,3,6,7],pylib:4,solver:6,solver_model:7,src:5,tabl:4,welcom:4}})

289
docs/build/html/solver.html vendored Normal file
View File

@@ -0,0 +1,289 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>solver module &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-solver">
<span id="solver-module"></span><h1>solver module<a class="headerlink" href="#module-solver" title="Permalink to this headline"></a></h1>
<p>Numerical solver of ordinary differential equations.</p>
<p>Solves the initial value problem for systems of first order ordinary differential
equations.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2015-09-21</p>
</dd>
</dl>
<span class="target" id="module-solver"></span><dl class="function">
<dt id="solver.e1">
<code class="descname">e1</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#solver.e1" title="Permalink to this definition"></a></dt>
<dd><p>Explicit first-order method /
(standard, or forward) Euler method /
Runge-Kutta 1st order method.</p>
<p>de:
Eulersche Polygonzugverfahren / explizite Euler-Verfahren /
Euler-Cauchy-Verfahren / Euler-vorwärts-Verfahren</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
<p>Approximate the solution of the initial value problem</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x} &amp;= f(t,x) \\
x(t_0) &amp;= x_0\end{split}\]</div>
<p>Choose a value h for the size of every step and set</p>
<div class="math notranslate nohighlight">
\[t_i = t_0 + i h ~,\quad i=1,2,\ldots,n\]</div>
<p>One step <span class="math notranslate nohighlight">\(h\)</span> of the Euler method from <span class="math notranslate nohighlight">\(t_i\)</span> to <span class="math notranslate nohighlight">\(t_{i+1}\)</span> is</p>
<div class="math notranslate nohighlight">
\[\begin{split}x_{i+1} &amp;= x_i + (t_{i+1}-t_i) f(t_i, x_i) \\
x_{i+1} &amp;= x_i + h f(t_i, x_i) \\\end{split}\]</div>
<p>Example 1:</p>
<div class="math notranslate nohighlight">
\[\begin{split}m\ddot{u} + d\dot{u} + ku = f(t) \\
\ddot{u} = m^{-1}(f(t) - d\dot{u} - ku) \\\end{split}\]</div>
<p>with</p>
<div class="math notranslate nohighlight">
\[\begin{split}x_1 &amp;= u &amp;\quad \dot{x}_1 = \dot{u} = x_2 \\
x_2 &amp;= \dot{u} &amp;\quad \dot{x}_2 = \ddot{u} \\\end{split}\]</div>
<p>becomes</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x}_1 &amp;= x_2 \\
\dot{x}_2 &amp;= m^{-1}(f(t) - d x_2 - k x_1) \\\end{split}\]</div>
<p>or</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x} &amp;= f(t,x) \\
\begin{bmatrix} \dot{x}_1 \\ \dot{x}_1 \end{bmatrix} &amp;=
\begin{bmatrix} x_2 \\ m^{-1}(f(t) - d x_2 - k x_1) \end{bmatrix} \\
&amp;=
\begin{bmatrix} 0 \\ m^{-1} f(t) \end{bmatrix} +
\begin{bmatrix} 0 &amp; 1 \\ -m^{-1} k &amp; -m^{-1} d \end{bmatrix}
\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}\end{split}\]</div>
<p>Example 2:</p>
<div class="math notranslate nohighlight">
\[\begin{split}m(u)\ddot{u} + d(u,\dot{u})\dot{u} + k(u)u = f(t) \\
\ddot{u} = m^{-1}(u)(f(t) - d(u,\dot{u})\dot{u} - k(u)u) \\\end{split}\]</div>
<p>with</p>
<div class="math notranslate nohighlight">
\[\begin{split}x_1 &amp;= u &amp;\quad \dot{x}_1 = \dot{u} = x_2 \\
x_2 &amp;= \dot{u} &amp;\quad \dot{x}_2 = \ddot{u} \\\end{split}\]</div>
<p>becomes</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x}_1 &amp;= x_2 \\
\dot{x}_2 &amp;= m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \\\end{split}\]</div>
<p>or</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x} &amp;= f(t,x) \\
\begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &amp;=
\begin{bmatrix} x_2 \\ m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \end{bmatrix} \\
&amp;=
\begin{bmatrix} 0 \\ m^{-1}(x_1) f(t) \end{bmatrix} +
\begin{bmatrix} 0 &amp; 1 \\ -m^{-1}(x_1) k(x_1) &amp; -m^{-1} d(x_1,x_2) \end{bmatrix}
\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}\end{split}\]</div>
<p>The Euler method is a first-order method,
which means that the local error (error per step) is proportional to the
square of the step size, and the global error (error at a given time) is
proportional to the step size.</p>
</dd></dl>
<dl class="function">
<dt id="solver.e2">
<code class="descname">e2</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#solver.e2" title="Permalink to this definition"></a></dt>
<dd><p>Explicit second-order method / Runge-Kutta 2nd order method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="solver.e4">
<code class="descname">e4</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#solver.e4" title="Permalink to this definition"></a></dt>
<dd><p>Explicit fourth-order method / Runge-Kutta 4th order method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="solver.i1">
<code class="descname">i1</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>max_iterations=1000</em>, <em>tol=1e-09</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#solver.i1" title="Permalink to this definition"></a></dt>
<dd><p>Implicite first-order method / backward Euler method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>max_iterations</strong> (<em>int</em>) maximum number of iterations</p></li>
<li><p><strong>tol</strong> (<em>float</em>) tolerance against residuum (default = 1e-9)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
<p>The backward Euler method has order one and is A-stable.</p>
</dd></dl>
<dl class="function">
<dt id="solver.newmark_newtonraphson">
<code class="descname">newmark_newtonraphson</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>xp0</em>, <em>xpp0</em>, <em>t</em>, <em>*p</em>, <em>gamma=0.5</em>, <em>beta=0.25</em>, <em>max_iterations=1000</em>, <em>tol=1e-09</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#solver.newmark_newtonraphson" title="Permalink to this definition"></a></dt>
<dd><p>Newmark method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>xp0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>xpp0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>gamma</strong> (<em>float</em>) newmark parameter for velocity (default = 0.5)</p></li>
<li><p><strong>beta</strong> (<em>float</em>) newmark parameter for displacement (default = 0.25)</p></li>
<li><p><strong>max_iterations</strong> (<em>int</em>) maximum number of iterations</p></li>
<li><p><strong>tol</strong> (<em>float</em>) tolerance against residuum (default = 1e-9)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="solver.newmark_newtonraphson_rdk">
<code class="descname">newmark_newtonraphson_rdk</code><span class="sig-paren">(</span><em>fnm</em>, <em>x0</em>, <em>xp0</em>, <em>xpp0</em>, <em>t</em>, <em>*p</em>, <em>gamma=0.5</em>, <em>beta=0.25</em>, <em>maxIterations=1000</em>, <em>tol=1e-09</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#solver.newmark_newtonraphson_rdk" title="Permalink to this definition"></a></dt>
<dd><p>Newmark method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>xp0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>xpp0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>gamma</strong> (<em>float</em>) newmark parameter for velocity (default = 0.5)</p></li>
<li><p><strong>beta</strong> (<em>float</em>) newmark parameter for displacement (default = 0.25)</p></li>
<li><p><strong>max_iterations</strong> (<em>int</em>) maximum number of iterations</p></li>
<li><p><strong>tol</strong> (<em>float</em>) tolerance against residuum (default = 1e-9)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<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.0.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/solver.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

177
docs/build/html/solver_model.html vendored Normal file
View File

@@ -0,0 +1,177 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>solver_model module &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-solver_model">
<span id="solver-model-module"></span><h1>solver_model module<a class="headerlink" href="#module-solver_model" title="Permalink to this headline"></a></h1>
<p>Mathmatical models governed by ordinary differential equations.</p>
<p>Describes initial value problems as systems of first order ordinary differential
equations.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-05-25</p>
</dd>
</dl>
<span class="target" id="module-solver_model"></span><dl class="function">
<dt id="solver_model.disk">
<code class="descname">disk</code><span class="sig-paren">(</span><em>x</em>, <em>t</em>, <em>*p</em><span class="sig-paren">)</span><a class="headerlink" href="#solver_model.disk" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="solver_model.disk_nm">
<code class="descname">disk_nm</code><span class="sig-paren">(</span><em>xn</em>, <em>xpn</em>, <em>xppn</em>, <em>t</em>, <em>*p</em><span class="sig-paren">)</span><a class="headerlink" href="#solver_model.disk_nm" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>xn</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>xpn</strong> (<em>list</em>) first derivative values of the function</p></li>
<li><p><strong>xppn</strong> (<em>list</em>) second derivative values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="solver_model.disk_nmmdk">
<code class="descname">disk_nmmdk</code><span class="sig-paren">(</span><em>xn</em>, <em>xpn</em>, <em>xppn</em>, <em>t</em>, <em>*p</em><span class="sig-paren">)</span><a class="headerlink" href="#solver_model.disk_nmmdk" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>xn</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>xpn</strong> (<em>list</em>) derivative values of the function</p></li>
<li><p><strong>xppn</strong> (<em>list</em>) second derivative values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<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.0.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/solver_model.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -1,119 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>src package &#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>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="src-package">
<h1>src package<a class="headerlink" href="#src-package" title="Permalink to this headline"></a></h1>
<div class="section" id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="src-data-module">
<h2>src.data module<a class="headerlink" href="#src-data-module" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="src-date-module">
<h2>src.date module<a class="headerlink" href="#src-date-module" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="src-fit-module">
<h2>src.fit module<a class="headerlink" href="#src-fit-module" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="src-geometry-module">
<h2>src.geometry module<a class="headerlink" href="#src-geometry-module" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="module-contents">
<h2>Module contents<a class="headerlink" href="#module-contents" title="Permalink to this headline"></a></h2>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<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.0.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/src.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -76,4 +76,6 @@ html_theme_options = {
'highlight_bg': '#444F65', 'highlight_bg': '#444F65',
'xref_bg': 'transparent', 'xref_bg': 'transparent',
'xref_border': 'transparent', 'xref_border': 'transparent',
'seealso_bg': '#3c3c3c',
'seealso_border': '#2C2C2C',
} }

View File

@@ -8,3 +8,5 @@ src
date date
fit fit
geometry geometry
solver
solver_model

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

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

View File

@@ -0,0 +1,7 @@
solver\_model module
====================
.. automodule:: solver_model
:members:
:undoc-members:
:show-inheritance:

View File

@@ -1,46 +0,0 @@
src package
===========
Submodules
----------
src.data module
---------------
.. automodule:: src.data
:members:
:undoc-members:
:show-inheritance:
src.date module
---------------
.. automodule:: src.date
:members:
:undoc-members:
:show-inheritance:
src.fit module
--------------
.. automodule:: src.fit
:members:
:undoc-members:
:show-inheritance:
src.geometry module
-------------------
.. automodule:: src.geometry
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: src
:members:
:undoc-members:
:show-inheritance:

View File

@@ -1,8 +1,29 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Read and write data to or from file.
.. module:: data
:platform: *nix, Windows
:synopsis: Handle data files.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from __future__ import print_function from __future__ import print_function
import pickle import pickle
def data_read(file_name, x_column, y_column): def data_read(file_name, x_column, y_column):
"""read ascii data file""" """Read ascii data file.
:param filename: file to read
:type filename: str
:param x_column: column index for the x data (first column is 0)
:type x_column: int
:param y_column: column index for the y data (first column is 0)
:type y_column: int
:returns: x and y
:rtype: tuple(list, list)
"""
import re import re
file = open(file_name) file = open(file_name)
x = [] x = []
@@ -15,7 +36,16 @@ def data_read(file_name, x_column, y_column):
return x, y return x, y
def data_load(file_name, verbose=False): def data_load(file_name, verbose=False):
"""load stored program objects from binary file""" """Load stored program objects from binary file.
:param file_name: file to load
:type file_name: str
:param verbose: verbose information (default = False)
:type verbose: bool
:returns: loaded data
:rtype: object
"""
if verbose: if verbose:
print('check if data is available') print('check if data is available')
try: try:
@@ -31,11 +61,18 @@ def data_load(file_name, verbose=False):
return object_data return object_data
def data_store(file_name, object_data): def data_store(file_name, object_data):
"""store program objects to binary file""" """Store program objects to binary file.
:param file_name: file to store
:type file_name: str
:param object_data: data to store
:type object_data: object
"""
with open(file_name, 'wb') as output: with open(file_name, 'wb') as output:
pickle.dump(object_data, output, pickle.HIGHEST_PROTOCOL) # every dump needs a load pickle.dump(object_data, output, pickle.HIGHEST_PROTOCOL) # every dump needs a load
def main(): def main():
"""Main function."""
file_name = "slit_test_scan.dat" file_name = "slit_test_scan.dat"
x, y = data_read(file_name, 3, 2) x, y = data_read(file_name, 3, 2)
print(x) print(x)

View File

@@ -1,31 +1,51 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """Calculate spacial dates.
Created on Mon Jan 15 21:52:34 2018
@author: Daniel Weschke :Date: 2018-01-15
.. module:: date
:platform: *nix, Windows
:synopsis: Special dates.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
""" """
from __future__ import division, print_function, unicode_literals from __future__ import division, print_function, unicode_literals
def gaußsche_osterformel(year): def gaußsche_osterformel(year):
"""Gaußsche Osterformel. """Gaußsche Osterformel.
:param year: the year to calculate the Easter Sunday
:type year: int
:returns: int -- the day of Easter Sunday as a day in march. :returns: the day of Easter Sunday as a day in march.
:rtype: int
:ivar X: Das Jahr / year
:vartype X: int
:ivar K(X): Die Säkularzahl
:vartype K(X): int
:ivar M(X): Die säkulare Mondschaltung
:vartype M(X): int
:ivar S(K): Die säkulare Sonnenschaltung
:vartype S(K): int
:ivar A(X): Den Mondparameter
:vartype A(X): int
:ivar D(A,M): Den Keim für den ersten Vollmond im Frühling
:vartype D(A,M): int
:ivar R(D,A): Die kalendarische Korrekturgröße
:vartype R(D,A): int
:ivar OG(D,R): Die Ostergrenze
:vartype OG(D,R): int
:ivar SZ(X,S): Den ersten Sonntag im März
:vartype SZ(X,S): int
:ivar OE(OG,SZ): Die Entfernung des Ostersonntags von der Ostergrenze (Osterentfernung in Tagen)
:vartype OE(OG,SZ): int
:ivar OS(OG,OE): Das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.)
:vartype OS(OG,OE): int
Algorithmus gilt für den Gregorianischen Kalender. Algorithmus gilt für den Gregorianischen Kalender.
* X -- Das Jahr / year
* K(X) -- Die Säkularzahl
* M(K) -- Die säkulare Mondschaltung
* S(K) -- Die säkulare Sonnenschaltung
* A(X) -- Den Mondparameter
* D(A,M) -- Den Keim für den ersten Vollmond im Frühling
* R(D,A) -- Die kalendarische Korrekturgröße
* OG(D,R) -- Die Ostergrenze
* SZ(X,S) -- Den ersten Sonntag im März
* OE(OG,SZ) -- Die Entfernung des Ostersonntags von der Ostergrenze (Osterentfernung in Tagen)
* OS(OG,OE) -- Das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.)
source: https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel source: https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel
""" """
x = year x = year
@@ -43,8 +63,12 @@ def gaußsche_osterformel(year):
def easter_sunday(year): def easter_sunday(year):
"""Easter Sunday. """Easter Sunday.
:param year: the year to calculate the Easter Sunday
:type year: int
:returns: datetime.date -- the day of Easter Sunday""" :returns: the day of Easter Sunday
:rtype: datetime.date"""
import datetime import datetime
march = datetime.date(year, 3, 1) march = datetime.date(year, 3, 1)
day = march + datetime.timedelta(days=gaußsche_osterformel(year)) day = march + datetime.timedelta(days=gaußsche_osterformel(year))
@@ -52,32 +76,48 @@ def easter_sunday(year):
def easter_friday(year): def easter_friday(year):
"""Easter Friday. """Easter Friday.
:param year: the year to calculate the Easter Friday
:type year: int
:returns: datetime.date -- the day of Easter Friday""" :returns: the day of Easter Friday
:rtype: datetime.date"""
import datetime import datetime
day = easter_sunday(year) + datetime.timedelta(days=-2) day = easter_sunday(year) + datetime.timedelta(days=-2)
return day return day
def easter_monday(year): def easter_monday(year):
"""Easter Monday. """Easter Monday.
:param year: the year to calculate the Easter Monday
:type year: int
:returns: datetime.date -- the day of Easter Monday""" :returns: the day of Easter Monday
:rtype: datetime.date"""
import datetime import datetime
day = easter_sunday(year) + datetime.timedelta(days=+1) day = easter_sunday(year) + datetime.timedelta(days=+1)
return day return day
def ascension_of_jesus(year): def ascension_of_jesus(year):
"""Ascension of Jesus. """Ascension of Jesus.
:param year: the year to calculate the ascension of Jesus
:type year: int
:returns: datetime.date -- the day of ascension of Jesus""" :returns: the day of ascension of Jesus
:rtype: datetime.date"""
import datetime import datetime
day = easter_sunday(year) + datetime.timedelta(days=+39) day = easter_sunday(year) + datetime.timedelta(days=+39)
return day return day
def pentecost(year): def pentecost(year):
"""Pentecost. """Pentecost.
:param year: the year to calculate the Pentecost
:type year: int
:returns: datetime.date -- the day of Pentecost""" :returns: the day of Pentecost
:rtype: datetime.date"""
import datetime import datetime
day = easter_sunday(year) + datetime.timedelta(days=+49) day = easter_sunday(year) + datetime.timedelta(days=+49)
return day return day

View File

@@ -1,3 +1,13 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Function and approximation.
.. module:: fit
:platform: *nix, Windows
:synopsis: Function and approximation.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from __future__ import print_function from __future__ import print_function
from pylab import array, argmax, subplot, plot, title, xlim, show, gradient, exp, sqrt, log, linspace from pylab import array, argmax, subplot, plot, title, xlim, show, gradient, exp, sqrt, log, linspace
from scipy.optimize import curve_fit from scipy.optimize import curve_fit
@@ -6,15 +16,21 @@ from data import *
def gauss(x, *p): def gauss(x, *p):
"""Gauss distribution function. """Gauss distribution function.
.. math::
f(x)=ae^{-(x-b)^{2}/(2c^{2})}
:param x: positions where the gauss function will be calculated :param x: positions where the gauss function will be calculated
:type x: int or float or list or numpy.ndarray
:param p: gauss parameters [a, b, c, d]: :param p: gauss parameters [a, b, c, d]:
* a -- amplitude (integral = 1 if a = 1/(c*sqrt(2*pi))) * a -- amplitude (:math:`\int y \\,\\mathrm{d}x=1 \Leftrightarrow a=1/(c\\sqrt{2\\pi})` )
* b -- expected value mu (position of maximum, default = 0) * b -- expected value :math:`\\mu` (position of maximum, default = 0)
* c -- standard deviation sigma (variance sigma**2 = c**2) * c -- standard deviation :math:`\\sigma` (variance :math:`\\sigma^2=c^2`)
* d -- vertical offset (default = 0) * d -- vertical offset (default = 0)
:type p: list
:returns: array -- gauss values at given positions x :returns: gauss values at given positions x
:rtype: numpy.ndarray
""" """
x = array(x) # cast e. g. list to numpy array x = array(x) # cast e. g. list to numpy array
a, b, c, d = p a, b, c, d = p
@@ -24,15 +40,27 @@ def gauss_fit(x, y, e=None, x_fit=None, verbose=False):
"""Fit Gauss distribution function to data. """Fit Gauss distribution function to data.
:param x: positions :param x: positions
:type x: int or float or list or numpy.ndarray
:param y: values :param y: values
:param e: error values :type y: int or float or list or numpy.ndarray
:param x_fit: positions of fitted function (default steps is 3*len(x) but min 150) :param e: error values (default = None)
:type e: int or float or list or numpy.ndarray
:param x_fit: positions of fitted function (default = None, if None then x
is used)
:type x_fit: int or float or list or numpy.ndarray
:param verbose: verbose information (default = False)
:type verbose: bool
:returns: :returns:
* y_fit -- values * numpy.ndarray -- fitted values (y_fit)
* popt -- parameters of gauss distribution function (amplitude a, expected * numpy.ndarray -- parameters of gauss distribution function (popt:
value mu, standard deviation sigma, vertical offset d) amplitude a, expected value :math:`\\mu`, standard deviation
* FWHM -- full width at half maximum :math:`\\sigma`, vertical offset d)
* numpy.float64 -- full width at half maximum (FWHM)
:rtype: tuple
.. seealso::
:meth:`gauss`
""" """
x = array(x) # cast e. g. list to numpy array x = array(x) # cast e. g. list to numpy array
y = array(y) # cast e. g. list to numpy array y = array(y) # cast e. g. list to numpy array

View File

@@ -1,37 +1,46 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """2D geometry objects.
2D
@date: 2019-03-21 :Date: 2019-03-21
@author: Daniel Weschke
.. module:: geometry
:platform: *nix, Windows
:synopsis: Geometry objects.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
""" """
import math import math
import numpy as np import numpy as np
def translate(vec, *pts): def translate(vec, *pts):
"""\ """Translate a point or polygon by a given vector.
Translate a point or polygon by a given vector.
returns :param vec: translation vector
(point_x, point_y) :type vec: tuple
or :param `*pts`: points to translate
(point1, point2, ...)
:returns: (point_x, point_y) or (point1, point2, ...)
:rtype: tuple
""" """
vx, vy = vec vx, vy = vec
return tuple([(x+vx, y+vy) for (x, y) in pts]) return tuple([(x+vx, y+vy) for (x, y) in pts])
def rotate(origin, angle, *pts, **kwargs): def rotate(origin, angle, *pts, **kwargs):
"""\ """Rotate a point or polygon counterclockwise by a given angle around a given
Rotate a point or polygon counterclockwise by a given angle around a given origin. origin. The angle should be given in radians.
The angle should be given in radians. :param origin: the center of rotation
:type origin: tuple
:param angle: the rotation angle
:type angle: int or float
:param `*pts`: points to rotate
:param `**kwargs`: options
returns :returns: (point_x, point_y) or (point1, point2, ...)
(point_x, point_y) :rtype: tuple
or
(point1, point2, ...)
""" """
ox, oy = origin ox, oy = origin
@@ -50,23 +59,34 @@ def rotate(origin, angle, *pts, **kwargs):
def rotate_deg(origin, angle, *pts, **kwargs): def rotate_deg(origin, angle, *pts, **kwargs):
"""\ """Rotate a point or polygon counterclockwise by a given angle around a given
Rotate a point or polygon counterclockwise by a given angle around a given origin. origin. The angle should be given in degrees.
The angle should be given in degrees. :param origin: the center of rotation
:type origin: tuple
:param angle: the rotation angle
:type angle: int or float
:param `*pts`: points to rotate
:param `**kwargs`: options
returns :returns: (point_x, point_y) or (point1, point2, ...)
(point_x, point_y) :rtype: tuple
or
(point1, point2, ...) .. seealso::
:meth:`rotate`
""" """
return rotate(origin, angle*math.pi/180, *pts, **kwargs) return rotate(origin, angle*math.pi/180, *pts, **kwargs)
def rectangle(width, height): def rectangle(width, height):
"""\ """\
returns :param width: the width of the rectangle
(point1, point2, point3, point4) :type width: int or float
:param height: the height of the rectangle
:type height: int or float
:returns: (point1, point2, point3, point4)
:rtype: tuple
""" """
pt1 = (-width/2, -height/2) pt1 = (-width/2, -height/2)
pt2 = (width/2, -height/2) pt2 = (width/2, -height/2)
@@ -77,8 +97,14 @@ def rectangle(width, height):
def square(width): def square(width):
"""\ """\
returns :param width: the edge size of the square
(point1, point2, point3, point4) :type width: int or float
:returns: (point1, point2, point3, point4)
:rtype: tuple
.. seealso::
:meth:`rectangle`
""" """
return rectangle(width, width) return rectangle(width, width)
@@ -89,22 +115,30 @@ def square(width):
def points(*pts): def points(*pts):
"""\ """\
returns :param `*pts`: points to rearrange
((point1_x, point2_x), (point1_y, point2_y), ...)
:returns: ((point1_x, point2_x), (point1_y, point2_y), ...)
:rtype: tuple
""" """
return zip(*pts) return zip(*pts)
def line(point1, point2, samples=2): def line(point1, point2, samples=2):
"""\ """\
samples: number of sampling points .. math::
y = \\frac{y_2-y_1}{x_2-x_1}(x-x_1) + y_1
:param point1: one end point
:type point1: tuple
:param point2: other end point
:type point2: tuple
:param samples: number of sampling points
:type samples: int
y = (y2-y1)/(x2-x1)*(x-x1) + y1 :returns: ((point1_x, point2_x), (points1_y, point2_y)) or
([sample_point1_x, sample_point2_x, ...],
returns [sample_points1_y, sample_point2_y, ...])
((point1_x, point2_x), (points1_y, point2_y)) :rtype: tuple
or
([sample_point1_x, sample_point2_x, ...], [sample_points1_y, sample_point2_y, ...])
""" """
p1x, p1y = point1 p1x, p1y = point1
p2x, p2y = point2 p2x, p2y = point2
@@ -122,8 +156,20 @@ def line(point1, point2, samples=2):
def cubic(point1, angle1, point2, angle2, samples=50): def cubic(point1, angle1, point2, angle2, samples=50):
"""\ """\
returns :param point1: one end point
([sample_point1_x, sample_point2_x, ...], [sample_points1_y, sample_point2_y, ...]) :type point1: tuple
:param angle1: the slope at the one end point
:type angle1: int or float
:param point2: other end point
:type point2: tuple
:param angle2: the slope at the other end point
:type angle2: int or float
:param samples: number of sampling points
:type samples: int
:returns: ([sample_point1_x, sample_point2_x, ...],
[sample_points1_y, sample_point2_y, ...])
:rtype: tuple
""" """
p1x, p1y = point1 p1x, p1y = point1
p2x, p2y = point2 p2x, p2y = point2
@@ -142,7 +188,20 @@ def cubic(point1, angle1, point2, angle2, samples=50):
def cubic_deg(point1, angle1, point2, angle2): def cubic_deg(point1, angle1, point2, angle2):
"""\ """\
returns :param point1: one end point
([sample_point1_x, sample_point2_x, ...], [sample_points1_y, sample_point2_y, ...]) :type point1: tuple
:param angle1: the slope at the one end point
:type angle1: int or float
:param point2: other end point
:type point2: tuple
:param angle2: the slope at the other end point
:type angle2: int or float
:returns: ([sample_point1_x, sample_point2_x, ...],
[sample_points1_y, sample_point2_y, ...])
:rtype: tuple
.. seealso::
:meth:`cubic`
""" """
return cubic(point1, angle1 * math.pi/180, point2, angle2 * math.pi/180) return cubic(point1, angle1 * math.pi/180, point2, angle2 * math.pi/180)

357
src/solver.py Normal file
View File

@@ -0,0 +1,357 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Numerical solver of ordinary differential equations.
Solves the initial value problem for systems of first order ordinary differential
equations.
:Date: 2015-09-21
.. module:: solver
:platform: *nix, Windows
:synopsis: Numerical solver.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from __future__ import division, print_function
from numpy import array, isnan, sum, zeros, dot
from numpy.linalg import norm, inv
def e1(f, x0, t, *p, verbose=False):
r"""Explicit first-order method /
(standard, or forward) Euler method /
Runge-Kutta 1st order method.
de:
Euler'sche Polygonzugverfahren / explizite Euler-Verfahren /
Euler-Cauchy-Verfahren / Euler-vorwärts-Verfahren
:param f: the function to solve
:type f: function
:param x0: initial condition
:type x0: list
:param t: time
:type t: list
:param `*p`: parameters of the function (thickness, diameter, ...)
:param verbose: print information (default = False)
:type verbose: bool
Approximate the solution of the initial value problem
.. math ::
\dot{x} &= f(t,x) \\
x(t_0) &= x_0
Choose a value h for the size of every step and set
.. math ::
t_i = t_0 + i h ~,\quad i=1,2,\ldots,n
One step :math:`h` of the Euler method from :math:`t_i` to :math:`t_{i+1}` is
.. math ::
x_{i+1} &= x_i + (t_{i+1}-t_i) f(t_i, x_i) \\
x_{i+1} &= x_i + h f(t_i, x_i) \\
Example 1:
.. math ::
m\ddot{u} + d\dot{u} + ku = f(t) \\
\ddot{u} = m^{-1}(f(t) - d\dot{u} - ku) \\
with
.. math ::
x_1 &= u &\quad \dot{x}_1 = \dot{u} = x_2 \\
x_2 &= \dot{u} &\quad \dot{x}_2 = \ddot{u} \\
becomes
.. math ::
\dot{x}_1 &= x_2 \\
\dot{x}_2 &= m^{-1}(f(t) - d x_2 - k x_1) \\
or
.. math ::
\dot{x} &= f(t,x) \\
\begin{bmatrix} \dot{x}_1 \\ \dot{x}_1 \end{bmatrix} &=
\begin{bmatrix} x_2 \\ m^{-1}(f(t) - d x_2 - k x_1) \end{bmatrix} \\
&=
\begin{bmatrix} 0 \\ m^{-1} f(t) \end{bmatrix} +
\begin{bmatrix} 0 & 1 \\ -m^{-1} k & -m^{-1} d \end{bmatrix}
\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}
Example 2:
.. math ::
m(u)\ddot{u} + d(u,\dot{u})\dot{u} + k(u)u = f(t) \\
\ddot{u} = m^{-1}(u)(f(t) - d(u,\dot{u})\dot{u} - k(u)u) \\
with
.. math ::
x_1 &= u &\quad \dot{x}_1 = \dot{u} = x_2 \\
x_2 &= \dot{u} &\quad \dot{x}_2 = \ddot{u} \\
becomes
.. math ::
\dot{x}_1 &= x_2 \\
\dot{x}_2 &= m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \\
or
.. math ::
\dot{x} &= f(t,x) \\
\begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &=
\begin{bmatrix} x_2 \\ m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \end{bmatrix} \\
&=
\begin{bmatrix} 0 \\ m^{-1}(x_1) f(t) \end{bmatrix} +
\begin{bmatrix} 0 & 1 \\ -m^{-1}(x_1) k(x_1) & -m^{-1} d(x_1,x_2) \end{bmatrix}
\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}
The Euler method is a first-order method,
which means that the local error (error per step) is proportional to the
square of the step size, and the global error (error at a given time) is
proportional to the step size.
"""
x = zeros((len(t), len(x0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
for i in range(len(t)-1):
Dt = t[i+1]-t[i]
dxdt = array(f(x[i,:], t[i], *p))
x[i+1,:] = x[i,:] + dxdt*Dt # Approximate solution at next value of x
if verbose:
print('Numerical integration of ODE using explicit first-order method (Euler / Runge-Kutta) was successful.')
return x
def e2(f, x0, t, *p, verbose=False):
r"""Explicit second-order method / Runge-Kutta 2nd order method.
:param f: the function to solve
:type f: function
:param x0: initial condition
:type x0: list
:param t: time
:type t: list
:param `*p`: parameters of the function (thickness, diameter, ...)
:param verbose: print information (default = False)
:type verbose: bool
"""
x = zeros((len(t), len(x0)))
x[0,:] = x0 # initial condition
for i in range(len(t)-1): # calculation loop
Dt = t[i+1]-t[i]
k_1 = array(f(x[i,:], t[i], *p))
k_2 = array(f(x[i,:]+0.5*Dt*k_1, t[i]+0.5*Dt, *p))
x[i+1,:] = x[i,:] + k_2*Dt # main equation
if verbose:
print('Numerical integration of ODE using explicit 2th-order method (Runge-Kutta) was successful.')
return x
def e4(f, x0, t, *p, verbose=False):
r"""Explicit fourth-order method / Runge-Kutta 4th order method.
:param f: the function to solve
:type f: function
:param x0: initial condition
:type x0: list
:param t: time
:type t: list
:param `*p`: parameters of the function (thickness, diameter, ...)
:param verbose: print information (default = False)
:type verbose: bool
"""
x = zeros((len(t), len(x0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
for i in range(len(t)-1): # calculation loop
Dt = t[i+1]-t[i]
k_1 = array(f(x[i,:], t[i], *p))
k_2 = array(f(x[i,:]+0.5*Dt*k_1, t[i]+0.5*Dt, *p))
k_3 = array(f(x[i,:]+0.5*Dt*k_2, t[i]+0.5*Dt, *p))
k_4 = array(f(x[i,:]+k_3*Dt, t[i]+Dt, *p))
x[i+1,:] = x[i,:] + 1./6*(k_1+2*k_2+2*k_3+k_4)*Dt # main equation
if verbose:
print('Numerical integration of ODE using explicit 4th-order method (Runge-Kutta) was successful.')
return x
def i1(f, x0, t, *p, max_iterations=1000, tol=1e-9, verbose=False):
r"""Implicite first-order method / backward Euler method.
:param f: the function to solve
:type f: function
:param x0: initial condition
:type x0: list
:param t: time
:type t: list
:param `*p`: parameters of the function (thickness, diameter, ...)
:param max_iterations: maximum number of iterations
:type max_iterations: int
:param tol: tolerance against residuum (default = 1e-9)
:type tol: float
:param verbose: print information (default = False)
:type verbose: bool
The backward Euler method has order one and is A-stable.
"""
iterations = zeros((len(t), 1))
x = zeros((len(t), len(x0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
for i in range(len(t)-1):
Dt = t[i+1]-t[i]
x1 = x[i,:]
for j in range(max_iterations): # fixed-point iteration
dxdt = array(f(x1, t[i+1], *p))
x11 = x[i,:] + dxdt*Dt # Approximate solution at next value of x
residuum = norm(x11-x1)/norm(x11)
x1 = x11
if residuum < tol:
break
iterations[i] = j+1
x[i+1,:] = x1
if verbose:
print('Numerical integration of ODE using implicite first-order method (Euler) was successful.')
return x, iterations
def newmark_newtonraphson(f, x0, xp0, xpp0, t, *p, gamma=.5, beta=.25, max_iterations=1000, tol=1e-9, verbose=False):
r"""Newmark method.
:param f: the function to solve
:type f: function
:param x0: initial condition
:type x0: list
:param xp0: initial condition
:type xp0: list
:param xpp0: initial condition
:type xpp0: list
:param t: time
:type t: list
:param `*p`: parameters of the function (thickness, diameter, ...)
:param gamma: newmark parameter for velocity (default = 0.5)
:type gamma: float
:param beta: newmark parameter for displacement (default = 0.25)
:type beta: float
:param max_iterations: maximum number of iterations
:type max_iterations: int
:param tol: tolerance against residuum (default = 1e-9)
:type tol: float
:param verbose: print information (default = False)
:type verbose: bool
"""
iterations = zeros((len(t), 1))
x = zeros((len(t), len(x0))) # Preallocate array
xp = zeros((len(t), len(xp0))) # Preallocate array
xpp = zeros((len(t), len(xpp0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
xp[0,:] = xp0 # Initial condition gives solution at t=0.
xpp[0,:] = xpp0 # Initial condition gives solution at t=0.
for i in range(len(t)-1):
Dt = t[i+1]-t[i]
xi = x[i,:].reshape(3,1)
xpi = xp[i,:].reshape(3,1)
xppi = xpp[i,:].reshape(3,1)
x1 = xi
xp1 = xpi
xpp1 = xppi
j = 0
for j in range(max_iterations): # fixed-point iteration
#dxdt = array(f(t[i+1], x1, p))
#x11 = x[i,:] + dxdt*Dt # Approximate solution at next value of x
N, dN, dNp, dNpp = f(x1.reshape(-1,).tolist(),
xp1.reshape(-1,).tolist(), xpp1.reshape(-1,).tolist(),
t[i], *p)
if isnan(sum(dN)) or isnan(sum(dNp)) or isnan(sum(dNpp)):
print('divergiert')
break
xpp11 = xpp1 - dot(inv(dNpp), (N + dot(dN, (x1-xi)) + dot(dNp, (xp1-xpi))))
xp1 = xpi + Dt*( (1-gamma)*xppi + gamma*xpp11 )
x1 = xi + Dt*xpi + Dt**2*( (.5-beta)*xppi + beta*xpp11 )
residuum = norm(xpp11-xpp1)/norm(xpp11)
xpp1 = xpp11
if residuum < tol:
break
iterations[i] = j+1
xpp[i+1,:] = xpp1.reshape(-1,).tolist()
xp[i+1,:] = xp1.reshape(-1,).tolist()
x[i+1,:] = x1.reshape(-1,).tolist()
if verbose:
print('Numerical integration of ODE using explicite newmark method was successful.')
return x, xp, xpp, iterations
# x = concatenate((x, xp, xpp), axis=1)
def newmark_newtonraphson_rdk(fnm, x0, xp0, xpp0, t, *p, gamma=.5, beta=.25, maxIterations=1000, tol=1e-9, verbose=False):
r"""Newmark method.
:param f: the function to solve
:type f: function
:param x0: initial condition
:type x0: list
:param xp0: initial condition
:type xp0: list
:param xpp0: initial condition
:type xpp0: list
:param t: time
:type t: list
:param `*p`: parameters of the function (thickness, diameter, ...)
:param gamma: newmark parameter for velocity (default = 0.5)
:type gamma: float
:param beta: newmark parameter for displacement (default = 0.25)
:type beta: float
:param max_iterations: maximum number of iterations
:type max_iterations: int
:param tol: tolerance against residuum (default = 1e-9)
:type tol: float
:param verbose: print information (default = False)
:type verbose: bool
"""
iterations = zeros((len(t), 1))
x = zeros((len(t), len(x0))) # Preallocate array
xp = zeros((len(t), len(xp0))) # Preallocate array
xpp = zeros((len(t), len(xpp0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
xp[0,:] = xp0 # Initial condition gives solution at t=0.
xpp[0,:] = xpp0 # Initial condition gives solution at t=0.
for i in range(len(t)-1):
Dt = t[i+1]-t[i]
rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f = fnm(x[i,:], xp[i,:], xpp[i,:], t[i], *p)
xi = x[i,:].reshape(3,1)
xpi = xp[i,:].reshape(3,1)
xppi = xpp[i,:].reshape(3,1)
x1 = xi
xp1 = xpi
xpp1 = xppi
j = 0
for j in range(maxIterations): # fixed-point iteration
#dxdt = array(f(t[i+1], x1, p))
#x11 = x[i,:] + dxdt*Dt # Approximate solution at next value of x
r = (rmx+rdx+rkx)*Dt**2./4 + rdxp*Dt/2 + rmxpp
rp = f - (rm + dot(rmx, (Dt*xpi+Dt**2./4*xppi)) - dot(rmxpp, xppi) + \
rd + dot(rdx, (Dt*xpi+Dt**2./4*xppi)) + dot(rdxp, Dt/2*xppi) + \
rk + dot(rkx, (Dt*xpi+Dt**2./4*xppi)) )
xpp11 = dot(inv(r), rp)
xp1 = xpi + Dt*( (1-gamma)*xppi + gamma*xpp11 )
x1 = xi + Dt*xpi + Dt**2*( (.5-beta)*xppi + beta*xpp11 )
residuum = norm(xpp11-xpp1)/norm(xpp11)
xpp1 = xpp11
if residuum < tol:
break
iterations[i] = j+1
xpp[i+1,:] = xpp1.reshape(-1,).tolist()
xp[i+1,:] = xp1.reshape(-1,).tolist()
x[i+1,:] = x1.reshape(-1,).tolist()
if verbose:
print('Numerical integration of ODE using explicite newmark method was successful.')
return x, xp, xpp, iterations
# x = concatenate((x, xp, xpp), axis=1)

120
src/solver_model.py Normal file
View File

@@ -0,0 +1,120 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Mathmatical models governed by ordinary differential equations.
Describes initial value problems as systems of first order ordinary differential
equations.
:Date: 2019-05-25
.. module:: solver_model
:platform: *nix, Windows
:synopsis: Mechanical models.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from __future__ import division, print_function
from numpy import array, cos, sin, dot, square
from numpy.linalg import inv
def disk(x, t, *p):
"""Rotation of an eccentric disk.
:param x: values of the function
:type x: list
:param t: time
:type t: list
:param `*p`: parameters of the function
* diameter
* eccentricity
* torque
"""
qp1 = x[3]
qp2 = x[4]
qp3 = x[5]
M = array([[1, 0, cos(x[2])], [0, 1, -sin(x[2])], [0, 0, 1]])
y = array([[-2*p[0]*x[3]+sin(x[2])*x[5]**2-2*p[0]*cos(x[2])*x[5]-x[0]], \
[-2*p[0]*x[4]+cos(x[2])*x[5]**2-2*p[0]*sin(x[2])*x[5]-x[1]], \
[p[2]-p[1]*x[1]*sin(x[2])+p[1]*x[0]*cos(x[2])]])
qp46 = dot(inv(M), y)
qp4, qp5, qp6 = qp46.reshape(-1,).tolist() # 2d array to 1d array to list
return qp1, qp2, qp3, qp4, qp5, qp6
def disk_nm(xn, xpn, xppn, t, *p):
"""Rotation of an eccentric disk.
:param xn: values of the function
:type xn: list
:param xpn: first derivative values of the function
:type xpn: list
:param xppn: second derivative values of the function
:type xppn: list
:param t: time
:type t: list
:param `*p`: parameters of the function
* diameter
* eccentricity
* torque
"""
N = array([[xppn[0]+cos(xn[2])*xppn[2]+2*p[0]*xpn[0]+2*p[0]*cos(xn[2])*xpn[2]-sin(xn[2])*square(xpn[2])+xn[0]],
[xppn[1]-sin(xn[2])*xppn[2]+2*p[0]*xpn[1]-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])+xn[1]],
[xppn[2]+p[1]*(-cos(xn[2])*xn[0]+sin(xn[2])*xn[1])-p[2]]])
dN = array([[1, 0, -sin(xn[2]*xppn[2])-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
[0, 1, -cos(xn[2]*xppn[2])-2*p[0]*cos(xn[2])*xpn[2]+sin(xn[2])*square(xpn[2])],
[-p[1]*cos(xn[2]), p[1]*cos(xn[2]), p[1]*(sin(xn[2])*xn[0]+cos(xn[2])*xn[1])]])
dNp = array([[2*p[0], 0, 2*p[0]*cos(xn[2])-2*sin(xn[2])*xpn[2]],
[0, 2*p[0], -2*p[0]*sin(xn[2])-2*cos(xn[2])*xpn[2]],
[0, 0, 0]])
dNpp = array([[1, 0, cos(xn[2])],
[0, 1, -sin(xn[2])],
[0, 0, 1]])
return N, dN, dNp, dNpp
def disk_nmmdk(xn, xpn, xppn, t, *p):
"""Rotation of an eccentric disk.
:param xn: values of the function
:type xn: list
:param xpn: derivative values of the function
:type xpn: list
:param xppn: second derivative values of the function
:type xppn: list
:param t: time
:type t: list
:param `*p`: parameters of the function
* diameter
* eccentricity
* torque
"""
rm = array([[xppn[0]+cos(xn[2])*xppn[2]],
[xppn[1]-sin(xn[2])*xppn[2]],
[xppn[2]]])
rmx = array([[0, 0, -sin(xn[2]*xppn[2])],
[0, 0, -cos(xn[2]*xppn[2])],
[0, 0, 0]])
rmxpp = array([[1, 0, cos(xn[2])],
[0, 1, -sin(xn[2])],
[0, 0, 1]])
rd = array([[2*p[0]*xpn[0]+2*p[0]*cos(xn[2])*xpn[2]-sin(xn[2])*square(xpn[2])],
[2*p[0]*xpn[1]-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
[0]])
rdx = array([[0, 0, -2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
[0, 0, -2*p[0]*cos(xn[2])*xpn[2]+sin(xn[2])*square(xpn[2])],
[0, 0, 0]])
rdxp = array([[2*p[0], 0, 2*p[0]*cos(xn[2])-2*sin(xn[2])*xpn[2]],
[0, 2*p[0], -2*p[0]*sin(xn[2])-2*cos(xn[2])*xpn[2]],
[0, 0, 0]])
rk = array([[xn[0]],
[xn[1]],
[p[1]*(-cos(xn[2])*xn[0]+sin(xn[2])*xn[1])]])
rkx = array([[ 1, 0, 0],
[ 0, 1, 0],
[-p[1]*cos(xn[2]), p[1]*cos(xn[2]), p[1]*(sin(xn[2])*xn[0]+cos(xn[2])*xn[1])]])
f = array([[0], [0], [p[2]]])
return rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f
if __name__ == '__main__':
0

16
tests/test_fit.py Normal file
View File

@@ -0,0 +1,16 @@
import unittest
import os
import sys
sys.path.insert(0, os.path.abspath('../src'))
import fit
class TestFit(unittest.TestCase):
def test_property(self):
self.assertEqual()
if __name__ == '__main__':
unittest.main()

201
tests/test_solver.py Normal file
View File

@@ -0,0 +1,201 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Numerical solver.
:Date: 2019-05-25
.. module:: solver
:platform: *nix, Windows
:synopsis: Numerical solver.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from __future__ import division, print_function
import unittest
import math
from numpy import linspace, allclose
from numpy.linalg import inv
import os
import sys
sys.path.insert(0, os.path.abspath('../src'))
import solver
import solver_model
#### Post processing
from matplotlib.pyplot import figure, subplots, plot, show
from numpy import sqrt, square, concatenate
def plotx1rphi(x, t, title):
"""Plot plane rotation (x, y, phi)
"""
x1 = x[:, 0]
x2 = x[:, 1]
x3 = x[:, 2]
xp1 = x[:, 3]
xp2 = x[:, 4]
xp3 = x[:, 5]
fig, ax1 = subplots()
ax1.set_title(title)
ax1.plot(t, x1, 'b-')
#ax1.plot(t, x3, 'b-')
ax1.set_xlabel('time t in s')
# Make the y-axis label and tick labels match the line color.
ax1.set_ylabel('x_1', color='b')
for tl in ax1.get_yticklabels():
tl.set_color('b')
envelope = sqrt(square(x1)+square(x2))
ax1.plot(t, envelope, 'b--', t, -envelope, 'b--')
ax2 = ax1.twinx()
ax2.plot(t, xp3, 'r')
ax2.set_ylabel('phi', color='r')
for tl in ax2.get_yticklabels():
tl.set_color('r')
if max(xp3) < 2:
ax2.set_ylim([0,2])
f = solver_model.disk
fnm = solver_model.disk_nm
fnmmdk = solver_model.disk_nmmdk
class TestSolver(unittest.TestCase):
Dt = .01 # Delta t
tend = .1 # t_end
#tend = 300
nt = math.ceil(tend/Dt) # number of timesteps
t = linspace(0., tend, nt+1) # time vector
x0 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 # initial conditions
p = .01, .002, .015 # parameter of the model
def test_e1(self):
xe1 = solver.e1(f, self.x0, self.t, *self.p)
#plotx1rphi(xe1, self.t, ("Euler (Runge-Kutta 1th order), increments: %d" % self.nt))
#show()
self.assertTrue(allclose(xe1[:, 5],
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009, 0.00105, 0.0012,
0.00135, 0.0015 ]))
Dt_2 = Dt/5.
nt_2 = math.ceil(tend/Dt_2)
t_2 = linspace(0., tend, nt_2+1)
def test_e1_2(self):
xe1_2 = solver.e1(f, self.x0, self.t_2, *self.p)
#plotx1rphi(xe1_2, self.t_2, ("Euler (Runge-Kutta 1th order), increments: %d" % self.nt_2))
#show()
self.assertTrue(allclose(xe1_2[:, 5],
[0.00000000e+00, 3.00000000e-05, 6.00000000e-05, 8.99999998e-05,
1.19999999e-04, 1.49999998e-04, 1.79999995e-04, 2.09999992e-04,
2.39999987e-04, 2.69999980e-04, 2.99999971e-04, 3.29999960e-04,
3.59999947e-04, 3.89999931e-04, 4.19999913e-04, 4.49999891e-04,
4.79999866e-04, 5.09999837e-04, 5.39999804e-04, 5.69999767e-04,
5.99999726e-04, 6.29999681e-04, 6.59999630e-04, 6.89999575e-04,
7.19999514e-04, 7.49999448e-04, 7.79999376e-04, 8.09999298e-04,
8.39999214e-04, 8.69999123e-04, 8.99999026e-04, 9.29998921e-04,
9.59998810e-04, 9.89998691e-04, 1.01999856e-03, 1.04999843e-03,
1.07999829e-03, 1.10999814e-03, 1.13999798e-03, 1.16999781e-03,
1.19999763e-03, 1.22999744e-03, 1.25999725e-03, 1.28999704e-03,
1.31999682e-03, 1.34999660e-03, 1.37999636e-03, 1.40999611e-03,
1.43999585e-03, 1.46999558e-03, 1.49999530e-03]
))
maxIterations = 1000
tol = 1e-9 # against residuum
def test_e2(self):
xe2 = solver.e2(f, self.x0, self.t, *self.p)
#plotx1rphi(xe2, self.t, ("Runge-Kutta 2th order, increments: %d" % self.nt))
#show()
self.assertTrue(allclose(xe2[:, 5],
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009, 0.00105, 0.0012,
0.00135, 0.0015 ]))
def test_e4(self):
xe4 = solver.e4(f, self.x0, self.t, *self.p)
#plotx1rphi(xe4, self.t, ("Runge-Kutta 4th order, increments: %d" % self.nt))
#show()
self.assertTrue(allclose(xe4[:, 5],
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009, 0.00105, 0.0012,
0.00135, 0.0015 ]))
def test_i1(self):
xi1, iterations = solver.i1(f, self.x0, self.t, *self.p, self.maxIterations, self.tol)
#plotx1rphi(xi1, self.t, ("Backward Euler, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(xi1[:, 5],
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009, 0.00105, 0.0012,
0.00135, 0.0015 ]))
gamma = .5 # newmark parameter for velocity
beta = .25 # newmark parameter for displacement
def test_nm(self):
xnm, xpnm, xppnm, iterations = solver.newmark_newtonraphson(fnm,
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
self.gamma, self.beta, 1, self.tol)
#print(xnm)
#print(xpnm)
x = concatenate((xnm, xpnm), axis=1)
#plotx1rphi(x, self.t, ("Newmark, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(x[:, 5],
[0.00000000e+00, 7.49999925e-05, 2.24999951e-04, 3.74999839e-04,
5.24999621e-04, 6.74999269e-04, 8.24998752e-04, 9.74998039e-04,
1.12499710e-03, 1.27499591e-03, 1.42499444e-03]
))
def test_nm_2(self):
xnm, xpnm, xppnm, iterations = solver.newmark_newtonraphson(fnm,
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
self.gamma, self.beta, self.maxIterations, self.tol)
#print(xnm)
#print(xpnm)
x = concatenate((xnm, xpnm), axis=1)
#plotx1rphi(x, self.t, ("Newmark, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(x[:, 5],
[0.00000000e+00, 7.49999925e-05, 2.24999951e-04, 3.74999839e-04,
5.24999621e-04, 6.74999269e-04, 8.24998752e-04, 9.74998039e-04,
1.12499710e-03, 1.27499591e-03, 1.42499444e-03]
))
def test_nmmdk(self):
xnm, xpnm, xppnm, iterations = solver.newmark_newtonraphson_rdk(fnmmdk,
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
self.gamma, self.beta, 1, self.tol)
#print(xnm)
#print(xpnm)
x = concatenate((xnm, xpnm), axis=1)
#plotx1rphi(x, self.t, ("Newmark, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(x[:, 5],
[0.00000000e+00, 7.49999963e-05, 2.24999974e-04, 3.74999906e-04,
5.24999764e-04, 6.74999516e-04, 8.24999134e-04, 9.74998586e-04,
1.12499784e-03, 1.27499688e-03, 1.42499566e-03]
))
def test_nmmdk_2(self):
xnm, xpnm, xppnm, iterations = solver.newmark_newtonraphson_rdk(fnmmdk,
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
self.gamma, self.beta, 100, self.tol)
#print(xnm)
#print(xpnm)
x = concatenate((xnm, xpnm), axis=1)
#plotx1rphi(x, self.t, ("Newmark, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(x[:, 5],
[0.00000000e+00, 7.49999963e-05, 2.24999974e-04, 3.74999906e-04,
5.24999764e-04, 6.74999516e-04, 8.24999134e-04, 9.74998586e-04,
1.12499784e-03, 1.27499688e-03, 1.42499566e-03]
))
#from scipy.integrate import odeint
#xode = odeint(solver_model.disk, x0, t, p, printmessg=True)
#plotx1rphi(xode, t, ("ODE, Inkremente: %d" % nt))
#show()
if __name__ == '__main__':
unittest.main()