add function integration, tests and docs

This commit is contained in:
2019-05-30 22:38:37 +02:00
parent d0873a36da
commit 6aec598889
45 changed files with 3861 additions and 1541 deletions

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

@@ -0,0 +1,179 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>data &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for data</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Read and write data to or from file.</span>
<span class="sd">.. module:: data</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Handle data files.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<div class="viewcode-block" id="data_read"><a class="viewcode-back" href="../data.html#data.data_read">[docs]</a><span class="k">def</span> <span class="nf">data_read</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">x_column</span><span class="p">,</span> <span class="n">y_column</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Read ascii data file.</span>
<span class="sd"> :param filename: file to read</span>
<span class="sd"> :type filename: str</span>
<span class="sd"> :param x_column: column index for the x data (first column is 0)</span>
<span class="sd"> :type x_column: int</span>
<span class="sd"> :param y_column: column index for the y data (first column is 0)</span>
<span class="sd"> :type y_column: int</span>
<span class="sd"> :returns: x and y</span>
<span class="sd"> :rtype: tuple(list, list)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">file</span><span class="p">:</span>
<span class="n">fields</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;\s+&#39;</span><span class="p">,</span> <span class="n">row</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="c1">#print(filds)</span>
<span class="n">x</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">fields</span><span class="p">[</span><span class="n">x_column</span><span class="p">]))</span>
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">fields</span><span class="p">[</span><span class="n">y_column</span><span class="p">]))</span>
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span></div>
<div class="viewcode-block" id="data_load"><a class="viewcode-back" href="../data.html#data.data_load">[docs]</a><span class="k">def</span> <span class="nf">data_load</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Load stored program objects from binary file.</span>
<span class="sd"> :param file_name: file to load</span>
<span class="sd"> :type file_name: str</span>
<span class="sd"> :param verbose: verbose information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> :returns: loaded data</span>
<span class="sd"> :rtype: object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;check if data is available&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="nb">input</span><span class="p">:</span>
<span class="n">object_data</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">input</span><span class="p">)</span> <span class="c1"># one load for every dump is needed to load all the data</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;found:&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">object_data</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
<span class="n">object_data</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;no saved datas found&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">object_data</span></div>
<div class="viewcode-block" id="data_store"><a class="viewcode-back" href="../data.html#data.data_store">[docs]</a><span class="k">def</span> <span class="nf">data_store</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">object_data</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Store program objects to binary file.</span>
<span class="sd"> :param file_name: file to store</span>
<span class="sd"> :type file_name: str</span>
<span class="sd"> :param object_data: data to store</span>
<span class="sd"> :type object_data: object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">output</span><span class="p">:</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">object_data</span><span class="p">,</span> <span class="n">output</span><span class="p">,</span> <span class="n">pickle</span><span class="o">.</span><span class="n">HIGHEST_PROTOCOL</span><span class="p">)</span> <span class="c1"># every dump needs a load</span></div>
<div class="viewcode-block" id="main"><a class="viewcode-back" href="../data.html#data.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;Main function.&quot;&quot;&quot;</span>
<span class="n">file_name</span> <span class="o">=</span> <span class="s2">&quot;slit_test_scan.dat&quot;</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">data_read</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">y</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>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>
</div>
</body>
</html>

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

@@ -0,0 +1,222 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>date &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for date</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Calculate spacial dates.</span>
<span class="sd">:Date: 2018-01-15</span>
<span class="sd">.. module:: date</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Special dates.</span>
<span class="sd"> </span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
<div class="viewcode-block" id="gaußsche_osterformel"><a class="viewcode-back" href="../date.html#date.gaußsche_osterformel">[docs]</a><span class="k">def</span> <span class="nf">gaußsche_osterformel</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gaußsche Osterformel.</span>
<span class="sd"> :param year: the year to calculate the Easter Sunday</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Easter Sunday as a day in march.</span>
<span class="sd"> :rtype: int</span>
<span class="sd"> </span>
<span class="sd"> :ivar X: Das Jahr / year</span>
<span class="sd"> :vartype X: int</span>
<span class="sd"> :ivar K(X): Die Säkularzahl</span>
<span class="sd"> :vartype K(X): int</span>
<span class="sd"> :ivar M(X): Die säkulare Mondschaltung</span>
<span class="sd"> :vartype M(X): int</span>
<span class="sd"> :ivar S(K): Die säkulare Sonnenschaltung</span>
<span class="sd"> :vartype S(K): int</span>
<span class="sd"> :ivar A(X): Den Mondparameter</span>
<span class="sd"> :vartype A(X): int</span>
<span class="sd"> :ivar D(A,M): Den Keim für den ersten Vollmond im Frühling</span>
<span class="sd"> :vartype D(A,M): int</span>
<span class="sd"> :ivar R(D,A): Die kalendarische Korrekturgröße</span>
<span class="sd"> :vartype R(D,A): int</span>
<span class="sd"> :ivar OG(D,R): Die Ostergrenze</span>
<span class="sd"> :vartype OG(D,R): int</span>
<span class="sd"> :ivar SZ(X,S): Den ersten Sonntag im März</span>
<span class="sd"> :vartype SZ(X,S): int</span>
<span class="sd"> :ivar OE(OG,SZ): Die Entfernung des Ostersonntags von der Ostergrenze (Osterentfernung in Tagen)</span>
<span class="sd"> :vartype OE(OG,SZ): int</span>
<span class="sd"> :ivar OS(OG,OE): Das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.)</span>
<span class="sd"> :vartype OS(OG,OE): int</span>
<span class="sd"> </span>
<span class="sd"> Algorithmus gilt für den Gregorianischen Kalender.</span>
<span class="sd"> source: https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">year</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">x</span> <span class="o">//</span> <span class="mi">100</span>
<span class="n">m</span> <span class="o">=</span> <span class="mi">15</span> <span class="o">+</span> <span class="p">(</span><span class="mi">3</span><span class="o">*</span><span class="n">k</span> <span class="o">+</span> <span class="mi">3</span><span class="p">)</span> <span class="o">//</span> <span class="mi">4</span> <span class="o">-</span> <span class="p">(</span><span class="mi">8</span><span class="o">*</span><span class="n">k</span> <span class="o">+</span> <span class="mi">13</span><span class="p">)</span> <span class="o">//</span> <span class="mi">25</span>
<span class="n">s</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">-</span> <span class="p">(</span><span class="mi">3</span><span class="o">*</span><span class="n">k</span> <span class="o">+</span> <span class="mi">3</span><span class="p">)</span> <span class="o">//</span> <span class="mi">4</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">x</span> <span class="o">%</span> <span class="mi">19</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="mi">19</span><span class="o">*</span><span class="n">a</span> <span class="o">+</span> <span class="n">m</span><span class="p">)</span> <span class="o">%</span> <span class="mi">30</span>
<span class="n">r</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span> <span class="o">+</span> <span class="n">a</span> <span class="o">//</span> <span class="mi">11</span><span class="p">)</span> <span class="o">//</span> <span class="mi">29</span>
<span class="n">og</span> <span class="o">=</span> <span class="mi">21</span> <span class="o">+</span> <span class="n">d</span> <span class="o">-</span> <span class="n">r</span>
<span class="n">sz</span> <span class="o">=</span> <span class="mi">7</span> <span class="o">-</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">x</span> <span class="o">//</span> <span class="mi">4</span> <span class="o">+</span> <span class="n">s</span><span class="p">)</span> <span class="o">%</span> <span class="mi">7</span>
<span class="n">oe</span> <span class="o">=</span> <span class="mi">7</span> <span class="o">-</span> <span class="p">(</span><span class="n">og</span> <span class="o">-</span> <span class="n">sz</span><span class="p">)</span> <span class="o">%</span> <span class="mi">7</span>
<span class="n">os</span> <span class="o">=</span> <span class="n">og</span> <span class="o">+</span> <span class="n">oe</span>
<span class="k">return</span> <span class="n">os</span></div>
<div class="viewcode-block" id="easter_sunday"><a class="viewcode-back" href="../date.html#date.easter_sunday">[docs]</a><span class="k">def</span> <span class="nf">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Easter Sunday.</span>
<span class="sd"> :param year: the year to calculate the Easter Sunday</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Easter Sunday</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">march</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">(</span><span class="n">year</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">march</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">gaußsche_osterformel</span><span class="p">(</span><span class="n">year</span><span class="p">))</span>
<span class="k">return</span> <span class="n">day</span></div>
<div class="viewcode-block" id="easter_friday"><a class="viewcode-back" href="../date.html#date.easter_friday">[docs]</a><span class="k">def</span> <span class="nf">easter_friday</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Easter Friday.</span>
<span class="sd"> :param year: the year to calculate the Easter Friday</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Easter Friday</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=-</span><span class="mi">2</span><span class="p">)</span>
<span class="k">return</span> <span class="n">day</span></div>
<div class="viewcode-block" id="easter_monday"><a class="viewcode-back" href="../date.html#date.easter_monday">[docs]</a><span class="k">def</span> <span class="nf">easter_monday</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Easter Monday.</span>
<span class="sd"> :param year: the year to calculate the Easter Monday</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Easter Monday</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=+</span><span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="n">day</span></div>
<div class="viewcode-block" id="ascension_of_jesus"><a class="viewcode-back" href="../date.html#date.ascension_of_jesus">[docs]</a><span class="k">def</span> <span class="nf">ascension_of_jesus</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Ascension of Jesus.</span>
<span class="sd"> :param year: the year to calculate the ascension of Jesus</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of ascension of Jesus</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=+</span><span class="mi">39</span><span class="p">)</span>
<span class="k">return</span> <span class="n">day</span></div>
<div class="viewcode-block" id="pentecost"><a class="viewcode-back" href="../date.html#date.pentecost">[docs]</a><span class="k">def</span> <span class="nf">pentecost</span><span class="p">(</span><span class="n">year</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Pentecost.</span>
<span class="sd"> :param year: the year to calculate the Pentecost</span>
<span class="sd"> :type year: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: the day of Pentecost</span>
<span class="sd"> :rtype: datetime.date&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">day</span> <span class="o">=</span> <span class="n">easter_sunday</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=+</span><span class="mi">49</span><span class="p">)</span>
<span class="k">return</span> <span class="n">day</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>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>
</div>
</body>
</html>

306
docs/build/html/_modules/geometry.html vendored Normal file
View File

@@ -0,0 +1,306 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>geometry &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for geometry</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;2D geometry objects.</span>
<span class="sd">:Date: 2019-03-21</span>
<span class="sd">.. module:: geometry</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Geometry objects.</span>
<span class="sd"> </span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<div class="viewcode-block" id="translate"><a class="viewcode-back" href="../geometry.html#geometry.translate">[docs]</a><span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="n">vec</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Translate a point or polygon by a given vector.</span>
<span class="sd"> :param vec: translation vector</span>
<span class="sd"> :type vec: tuple</span>
<span class="sd"> :param `*pts`: points to translate</span>
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">vx</span><span class="p">,</span> <span class="n">vy</span> <span class="o">=</span> <span class="n">vec</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">([(</span><span class="n">x</span><span class="o">+</span><span class="n">vx</span><span class="p">,</span> <span class="n">y</span><span class="o">+</span><span class="n">vy</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">])</span></div>
<div class="viewcode-block" id="rotate"><a class="viewcode-back" href="../geometry.html#geometry.rotate">[docs]</a><span class="k">def</span> <span class="nf">rotate</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotate a point or polygon counterclockwise by a given angle around a given</span>
<span class="sd"> origin. The angle should be given in radians.</span>
<span class="sd"> :param origin: the center of rotation</span>
<span class="sd"> :type origin: tuple</span>
<span class="sd"> :param angle: the rotation angle</span>
<span class="sd"> :type angle: int or float</span>
<span class="sd"> :param `*pts`: points to rotate</span>
<span class="sd"> :param `**kwargs`: options</span>
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ox</span><span class="p">,</span> <span class="n">oy</span> <span class="o">=</span> <span class="n">origin</span>
<span class="c1"># add first point to the end</span>
<span class="k">if</span> <span class="n">kwargs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;closed&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;closed&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">pts</span> <span class="o">+=</span> <span class="p">(</span><span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">],)</span>
<span class="n">result</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">([(</span><span class="n">ox</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">px</span> <span class="o">-</span> <span class="n">ox</span><span class="p">)</span> <span class="o">-</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">py</span> <span class="o">-</span> <span class="n">oy</span><span class="p">),</span>
<span class="n">oy</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">px</span> <span class="o">-</span> <span class="n">ox</span><span class="p">)</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">py</span> <span class="o">-</span> <span class="n">oy</span><span class="p">))</span>
<span class="k">for</span> <span class="p">(</span><span class="n">px</span><span class="p">,</span> <span class="n">py</span><span class="p">)</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">])</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="rotate_deg"><a class="viewcode-back" href="../geometry.html#geometry.rotate_deg">[docs]</a><span class="k">def</span> <span class="nf">rotate_deg</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotate a point or polygon counterclockwise by a given angle around a given</span>
<span class="sd"> origin. The angle should be given in degrees.</span>
<span class="sd"> :param origin: the center of rotation</span>
<span class="sd"> :type origin: tuple</span>
<span class="sd"> :param angle: the rotation angle</span>
<span class="sd"> :type angle: int or float</span>
<span class="sd"> :param `*pts`: points to rotate</span>
<span class="sd"> :param `**kwargs`: options</span>
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`rotate`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">rotate</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="rectangle"><a class="viewcode-back" href="../geometry.html#geometry.rectangle">[docs]</a><span class="k">def</span> <span class="nf">rectangle</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\</span>
<span class="sd"> :param width: the width of the rectangle</span>
<span class="sd"> :type width: int or float</span>
<span class="sd"> :param height: the height of the rectangle</span>
<span class="sd"> :type height: int or float</span>
<span class="sd"> </span>
<span class="sd"> :returns: (point1, point2, point3, point4)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">pt1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="n">pt2</span> <span class="o">=</span> <span class="p">(</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="n">pt3</span> <span class="o">=</span> <span class="p">(</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="n">pt4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="k">return</span> <span class="n">pt1</span><span class="p">,</span> <span class="n">pt2</span><span class="p">,</span> <span class="n">pt3</span><span class="p">,</span> <span class="n">pt4</span><span class="p">,</span> <span class="n">pt1</span></div>
<div class="viewcode-block" id="square"><a class="viewcode-back" href="../geometry.html#geometry.square">[docs]</a><span class="k">def</span> <span class="nf">square</span><span class="p">(</span><span class="n">width</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\</span>
<span class="sd"> :param width: the edge size of the square</span>
<span class="sd"> :type width: int or float</span>
<span class="sd"> </span>
<span class="sd"> :returns: (point1, point2, point3, point4)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`rectangle`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">rectangle</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span></div>
<span class="c1">#</span>
<span class="c1"># matplotlib format, return lists for x and y</span>
<span class="c1">#</span>
<div class="viewcode-block" id="points"><a class="viewcode-back" href="../geometry.html#geometry.points">[docs]</a><span class="k">def</span> <span class="nf">points</span><span class="p">(</span><span class="o">*</span><span class="n">pts</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\</span>
<span class="sd"> :param `*pts`: points to rearrange</span>
<span class="sd"> </span>
<span class="sd"> :returns: ((point1_x, point2_x), (point1_y, point2_y), ...)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">pts</span><span class="p">)</span></div>
<div class="viewcode-block" id="line"><a class="viewcode-back" href="../geometry.html#geometry.line">[docs]</a><span class="k">def</span> <span class="nf">line</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">samples</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\</span>
<span class="sd"> .. math::</span>
<span class="sd"> y = \\frac{y_2-y_1}{x_2-x_1}(x-x_1) + y_1</span>
<span class="sd"> </span>
<span class="sd"> :param point1: one end point</span>
<span class="sd"> :type point1: tuple</span>
<span class="sd"> :param point2: other end point</span>
<span class="sd"> :type point2: tuple</span>
<span class="sd"> :param samples: number of sampling points</span>
<span class="sd"> :type samples: int</span>
<span class="sd"> :returns: ((point1_x, point2_x), (points1_y, point2_y)) or</span>
<span class="sd"> ([sample_point1_x, sample_point2_x, ...],</span>
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">p1x</span><span class="p">,</span> <span class="n">p1y</span> <span class="o">=</span> <span class="n">point1</span>
<span class="n">p2x</span><span class="p">,</span> <span class="n">p2y</span> <span class="o">=</span> <span class="n">point2</span>
<span class="n">denominator</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span> <span class="o">-</span> <span class="n">p2x</span><span class="p">)</span>
<span class="k">if</span> <span class="n">samples</span> <span class="o">&gt;</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">denominator</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">)</span>
<span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1y</span> <span class="o">-</span> <span class="n">p2y</span><span class="p">)</span> <span class="o">/</span> <span class="n">denominator</span>
<span class="n">b</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span><span class="p">)</span> <span class="o">/</span> <span class="n">denominator</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="o">*</span><span class="n">x</span> <span class="o">+</span> <span class="n">b</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
<span class="k">return</span> <span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">),</span> <span class="p">(</span><span class="n">p1y</span><span class="p">,</span> <span class="n">p2y</span><span class="p">)</span> <span class="c1"># matplotlib format</span></div>
<div class="viewcode-block" id="cubic"><a class="viewcode-back" href="../geometry.html#geometry.cubic">[docs]</a><span class="k">def</span> <span class="nf">cubic</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</span><span class="p">,</span> <span class="n">samples</span><span class="o">=</span><span class="mi">50</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\</span>
<span class="sd"> :param point1: one end point</span>
<span class="sd"> :type point1: tuple</span>
<span class="sd"> :param angle1: the slope at the one end point</span>
<span class="sd"> :type angle1: int or float</span>
<span class="sd"> :param point2: other end point</span>
<span class="sd"> :type point2: tuple</span>
<span class="sd"> :param angle2: the slope at the other end point</span>
<span class="sd"> :type angle2: int or float</span>
<span class="sd"> :param samples: number of sampling points</span>
<span class="sd"> :type samples: int</span>
<span class="sd"> </span>
<span class="sd"> :returns: ([sample_point1_x, sample_point2_x, ...],</span>
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">p1x</span><span class="p">,</span> <span class="n">p1y</span> <span class="o">=</span> <span class="n">point1</span>
<span class="n">p2x</span><span class="p">,</span> <span class="n">p2y</span> <span class="o">=</span> <span class="n">point2</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">,</span> <span class="n">num</span><span class="o">=</span><span class="n">samples</span><span class="p">)</span>
<span class="n">p1ys</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="n">angle1</span><span class="p">)</span>
<span class="n">p2ys</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="n">angle2</span><span class="p">)</span>
<span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1y</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p2y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
<span class="n">b</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">6</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">+</span> <span class="mi">6</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1ys</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">3</span> <span class="o">+</span> <span class="n">b</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">c</span><span class="o">*</span><span class="n">x</span> <span class="o">+</span> <span class="n">d</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span></div>
<div class="viewcode-block" id="cubic_deg"><a class="viewcode-back" href="../geometry.html#geometry.cubic_deg">[docs]</a><span class="k">def</span> <span class="nf">cubic_deg</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\</span>
<span class="sd"> :param point1: one end point</span>
<span class="sd"> :type point1: tuple</span>
<span class="sd"> :param angle1: the slope at the one end point</span>
<span class="sd"> :type angle1: int or float</span>
<span class="sd"> :param point2: other end point</span>
<span class="sd"> :type point2: tuple</span>
<span class="sd"> :param angle2: the slope at the other end point</span>
<span class="sd"> :type angle2: int or float</span>
<span class="sd"> </span>
<span class="sd"> :returns: ([sample_point1_x, sample_point2_x, ...],</span>
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`cubic`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">cubic</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>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>
</div>
</body>
</html>

104
docs/build/html/_modules/index.html vendored Normal file
View File

@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Overview: module code &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>All modules for which code is available</h1>
<ul><li><a href="data.html">data</a></li>
<li><a href="date.html">date</a></li>
<li><a href="geometry.html">geometry</a></li>
<li><a href="numerical/fit.html">numerical.fit</a></li>
<li><a href="numerical/integration.html">numerical.integration</a></li>
<li><a href="numerical/ode.html">numerical.ode</a></li>
<li><a href="numerical/ode_model.html">numerical.ode_model</a></li>
</ul>
</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>
</div>
</body>
</html>

View File

@@ -0,0 +1,194 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>numerical.fit &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for numerical.fit</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Function and approximation.</span>
<span class="sd">.. module:: fit</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Function and approximation.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">pylab</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">argmax</span><span class="p">,</span> <span class="n">gradient</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">linspace</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="k">import</span> <span class="n">curve_fit</span>
<div class="viewcode-block" id="gauss"><a class="viewcode-back" href="../../numerical.html#numerical.fit.gauss">[docs]</a><span class="k">def</span> <span class="nf">gauss</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gauss distribution function.</span>
<span class="sd"> .. math::</span>
<span class="sd"> f(x)=ae^{-(x-b)^{2}/(2c^{2})}</span>
<span class="sd"> :param x: positions where the gauss function will be calculated</span>
<span class="sd"> :type x: int or float or list or numpy.ndarray</span>
<span class="sd"> :param p: gauss parameters [a, b, c, d]:</span>
<span class="sd"> * a -- amplitude (:math:`\int y \\,\\mathrm{d}x=1 \Leftrightarrow a=1/(c\\sqrt{2\\pi})` )</span>
<span class="sd"> * b -- expected value :math:`\\mu` (position of maximum, default = 0)</span>
<span class="sd"> * c -- standard deviation :math:`\\sigma` (variance :math:`\\sigma^2=c^2`)</span>
<span class="sd"> * d -- vertical offset (default = 0)</span>
<span class="sd"> :type p: list</span>
<span class="sd"> :returns: gauss values at given positions x</span>
<span class="sd"> :rtype: numpy.ndarray</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="c1"># cast e. g. list to numpy array</span>
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="o">=</span> <span class="n">p</span>
<span class="k">return</span> <span class="n">a</span><span class="o">*</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="p">(</span><span class="mf">2.</span> <span class="o">*</span> <span class="n">c</span><span class="o">**</span><span class="mf">2.</span><span class="p">))</span> <span class="o">+</span> <span class="n">d</span></div>
<div class="viewcode-block" id="gauss_fit"><a class="viewcode-back" href="../../numerical.html#numerical.fit.gauss_fit">[docs]</a><span class="k">def</span> <span class="nf">gauss_fit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">e</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">x_fit</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Fit Gauss distribution function to data.</span>
<span class="sd"> :param x: positions</span>
<span class="sd"> :type x: int or float or list or numpy.ndarray</span>
<span class="sd"> :param y: values</span>
<span class="sd"> :type y: int or float or list or numpy.ndarray</span>
<span class="sd"> :param e: error values (default = None)</span>
<span class="sd"> :type e: int or float or list or numpy.ndarray</span>
<span class="sd"> :param x_fit: positions of fitted function (default = None, if None then x</span>
<span class="sd"> is used)</span>
<span class="sd"> :type x_fit: int or float or list or numpy.ndarray</span>
<span class="sd"> :param verbose: verbose information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> :returns:</span>
<span class="sd"> * numpy.ndarray -- fitted values (y_fit)</span>
<span class="sd"> * numpy.ndarray -- parameters of gauss distribution function (popt:</span>
<span class="sd"> amplitude a, expected value :math:`\\mu`, standard deviation</span>
<span class="sd"> :math:`\\sigma`, vertical offset d)</span>
<span class="sd"> * numpy.float64 -- full width at half maximum (FWHM)</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`gauss`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="c1"># cast e. g. list to numpy array</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="c1"># cast e. g. list to numpy array</span>
<span class="n">y_max</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
<span class="n">y_max_pos</span> <span class="o">=</span> <span class="n">argmax</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
<span class="n">x_y_max</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">y_max_pos</span><span class="p">]</span>
<span class="c1"># starting parameter</span>
<span class="n">p0</span> <span class="o">=</span> <span class="p">[</span><span class="n">y_max</span><span class="p">,</span> <span class="n">x_y_max</span><span class="p">,</span> <span class="o">.</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;p0:&#39;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">p0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">e</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">popt</span><span class="p">,</span> <span class="n">pcov</span> <span class="o">=</span> <span class="n">curve_fit</span><span class="p">(</span><span class="n">gauss</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">p0</span><span class="o">=</span><span class="n">p0</span><span class="p">,</span> <span class="n">sigma</span><span class="o">=</span><span class="n">e</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">popt</span><span class="p">,</span> <span class="n">pcov</span> <span class="o">=</span> <span class="n">curve_fit</span><span class="p">(</span><span class="n">gauss</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">p0</span><span class="o">=</span><span class="n">p0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;popt:&#39;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">popt</span><span class="p">)</span>
<span class="c1">#print(pcov)</span>
<span class="n">FWHM</span> <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">log</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span><span class="o">*</span><span class="n">popt</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;FWHM&#39;</span><span class="p">,</span> <span class="n">FWHM</span><span class="p">)</span>
<span class="k">if</span> <span class="n">x_fit</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">x_fit</span> <span class="o">=</span> <span class="n">x</span>
<span class="n">y_fit</span> <span class="o">=</span> <span class="n">gauss</span><span class="p">(</span><span class="n">x_fit</span><span class="p">,</span> <span class="o">*</span><span class="n">popt</span><span class="p">)</span>
<span class="k">return</span> <span class="n">y_fit</span><span class="p">,</span> <span class="n">popt</span><span class="p">,</span> <span class="n">FWHM</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
<span class="kc">True</span>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../../index.html">Documentation overview</a><ul>
<li><a href="../index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>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>
</div>
</body>
</html>

View File

@@ -0,0 +1,250 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>numerical.integration &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for numerical.integration</h1><div class="highlight"><pre>
<span></span><span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Numerical integration, numerical quadrature.</span>
<span class="sd">de: numerische Integration, numerische Quadratur.</span>
<span class="sd">:Date: 2015-10-15</span>
<span class="sd">.. module:: integration</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Numerical integration.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">linspace</span><span class="p">,</span> <span class="n">trapz</span><span class="p">,</span> <span class="n">zeros</span>
<div class="viewcode-block" id="trapez"><a class="viewcode-back" href="../../numerical.html#numerical.integration.trapez">[docs]</a><span class="k">def</span> <span class="nf">trapez</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">N</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">save_values</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Integration of :math:`f(x)` using the trapezoidal rule</span>
<span class="sd"> (Simpson&#39;s rule, Kepler&#39;s rule).</span>
<span class="sd"> de: Trapezregel, Simpsonregel (Thomas Simpson), Keplersche</span>
<span class="sd"> Fassregel (Johannes Kepler)</span>
<span class="sd"> :param f: function to integrate.</span>
<span class="sd"> :type f: function or list</span>
<span class="sd"> :param a: lower limit of integration (default = 0).</span>
<span class="sd"> :type a: float</span>
<span class="sd"> :param b: upper limit of integration (default = 1).</span>
<span class="sd"> :type b: float</span>
<span class="sd"> :param N: specify the number of subintervals.</span>
<span class="sd"> :type N: int</span>
<span class="sd"> :param x: variable of integration, necessary if f is a list</span>
<span class="sd"> (default = None).</span>
<span class="sd"> :type x: list</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> :returns: the definite integral as approximated by trapezoidal</span>
<span class="sd"> rule.</span>
<span class="sd"> :rtype: float</span>
<span class="sd"> The trapezoidal rule approximates the integral by the area of a</span>
<span class="sd"> trapezoid with base h=b-a and sides equal to the values of the</span>
<span class="sd"> integrand at the two end points.</span>
<span class="sd"> .. math::</span>
<span class="sd"> f_n(x) = f(a)+\frac{f(b)-f(a)}{b-a}(x-a)</span>
<span class="sd"> .. math::</span>
<span class="sd"> I &amp;= \int\limits_a^b f(x) \,\mathrm{d}x \\</span>
<span class="sd"> I &amp;\approx \int\limits_a^b f_n(x) \,\mathrm{d}x \\</span>
<span class="sd"> &amp;= \int\limits_a^b</span>
<span class="sd"> \left( f(a)+\frac{f(b)-f(a)}{b-a}(x-a) \right)</span>
<span class="sd"> \mathrm{d}x \\</span>
<span class="sd"> &amp;= \left.\left( f(a)-a\frac{f(b)-f(a)}{b-a} \right)</span>
<span class="sd"> x \right\vert_a^b +</span>
<span class="sd"> \left. \frac{f(b)-f(a)}{b-a} \frac{x^2}{2}</span>
<span class="sd"> \right\vert_a^b \\</span>
<span class="sd"> &amp;= \frac{b-a}{2}\left[f(a)+f(b)\right]</span>
<span class="sd"> The composite trapezium rule. If the interval is divided into n</span>
<span class="sd"> segments (not necessarily equal)</span>
<span class="sd"> .. math::</span>
<span class="sd"> a = x_0 \leq x_1 \leq x_2 \leq \ldots \leq x_n = b</span>
<span class="sd"> .. math::</span>
<span class="sd"> I &amp;\approx \sum\limits_{i=0}^{n-1} \frac{1}{2} (x_{i+1}-x_i)</span>
<span class="sd"> \left[f(x_{i+1})+f(x_i)\right] \\</span>
<span class="sd"> Special Case (Equaliy spaced base points)</span>
<span class="sd"> .. math::</span>
<span class="sd"> x_{i+1}-x_i = h \quad \forall i</span>
<span class="sd"> .. math::</span>
<span class="sd"> I \approx h \left\{ \frac{1}{2} \left[f(x_0)+f(x_n)\right] +</span>
<span class="sd"> \sum\limits_{i=1}^{n-1} f(x_i) \right\}</span>
<span class="sd"> .. rubric:: Example</span>
<span class="sd"> .. math::</span>
<span class="sd"> I &amp;= \int\limits_a^b f(x) \,\mathrm{d}x \\</span>
<span class="sd"> f(x) &amp;= x^2 \\</span>
<span class="sd"> a &amp;= 0 \\</span>
<span class="sd"> b &amp;= 1</span>
<span class="sd"> </span>
<span class="sd"> analytical solution</span>
<span class="sd"> .. math::</span>
<span class="sd"> I = \int\limits_{0}^{1} x^2 \,\mathrm{d}x</span>
<span class="sd"> = \left. \frac{1}{3} x^3 \right\vert_0^1</span>
<span class="sd"> = \frac{1}{3}</span>
<span class="sd"> </span>
<span class="sd"> numerical solution</span>
<span class="sd"> &gt;&gt;&gt; f = lambda(x): x**2</span>
<span class="sd"> &gt;&gt;&gt; trapez(f, 0, 1, 1)</span>
<span class="sd"> 0.5</span>
<span class="sd"> &gt;&gt;&gt; trapez(f, 0, 1, 10)</span>
<span class="sd"> 0.3350000000000001</span>
<span class="sd"> &gt;&gt;&gt; trapez(f, 0, 1, 100)</span>
<span class="sd"> 0.33335000000000004</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">N</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
<span class="c1"># f is function or list</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">&#39;__call__&#39;</span><span class="p">):</span>
<span class="c1"># h width of each subinterval</span>
<span class="n">h</span> <span class="o">=</span> <span class="p">(</span><span class="n">b</span><span class="o">-</span><span class="n">a</span><span class="p">)</span><span class="o">/</span><span class="n">N</span>
<span class="c1"># x variable of integration</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">linspace</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">save_values</span><span class="p">:</span>
<span class="c1"># ff contribution from the points</span>
<span class="n">ff</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">N</span><span class="p">,</span> <span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="n">ff</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="n">T</span> <span class="o">=</span> <span class="p">(</span><span class="n">ff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">/</span><span class="mf">2.</span><span class="o">+</span><span class="nb">sum</span><span class="p">(</span><span class="n">ff</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">N</span><span class="p">])</span><span class="o">+</span><span class="n">ff</span><span class="p">[</span><span class="n">N</span><span class="p">]</span><span class="o">/</span><span class="mf">2.</span><span class="p">)</span><span class="o">*</span><span class="n">h</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">TL</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">TR</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">N</span><span class="p">])</span>
<span class="n">TI</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">N</span><span class="p">):</span>
<span class="n">TI</span> <span class="o">=</span> <span class="n">TI</span> <span class="o">+</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="n">T</span> <span class="o">=</span> <span class="p">(</span><span class="n">TL</span><span class="o">/</span><span class="mf">2.</span><span class="o">+</span><span class="n">TI</span><span class="o">+</span><span class="n">TR</span><span class="o">/</span><span class="mf">2.</span><span class="p">)</span><span class="o">*</span><span class="n">h</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">N</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span>
<span class="n">T</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span><span class="p">):</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">T</span> <span class="o">+</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">f</span><span class="p">[</span><span class="n">n</span><span class="p">])</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">T</span><span class="p">)</span>
<span class="k">return</span> <span class="n">T</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">**</span><span class="mi">2</span>
<span class="n">trapez</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">1e6</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1">#print(trapz(func, linspace(0,1,10)))</span>
<span class="n">trapez</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">9</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1">#print(trapz([0,1,4,9]))</span>
<span class="n">trapez</span><span class="p">([</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">trapez</span><span class="p">([</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../../index.html">Documentation overview</a><ul>
<li><a href="../index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>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>
</div>
</body>
</html>

View File

@@ -0,0 +1,523 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>numerical.ode &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for numerical.ode</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Numerical solver of ordinary differential equations.</span>
<span class="sd">Solves the initial value problem for systems of first order ordinary differential</span>
<span class="sd">equations.</span>
<span class="sd">:Date: 2015-09-21</span>
<span class="sd">.. module:: ode</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Numerical solver.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">isnan</span><span class="p">,</span> <span class="nb">sum</span><span class="p">,</span> <span class="n">zeros</span><span class="p">,</span> <span class="n">dot</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="k">import</span> <span class="n">norm</span><span class="p">,</span> <span class="n">inv</span>
<div class="viewcode-block" id="e1"><a class="viewcode-back" href="../../numerical.html#numerical.ode.e1">[docs]</a><span class="k">def</span> <span class="nf">e1</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Explicit first-order method /</span>
<span class="sd"> (standard, or forward) Euler method /</span>
<span class="sd"> Runge-Kutta 1st order method.</span>
<span class="sd"> de:</span>
<span class="sd"> Euler&#39;sche Polygonzugverfahren / explizite Euler-Verfahren /</span>
<span class="sd"> Euler-Cauchy-Verfahren / Euler-vorwärts-Verfahren</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter, ...)</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> Approximate the solution of the initial value problem</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x} &amp;= f(t,x) \\</span>
<span class="sd"> x(t_0) &amp;= x_0</span>
<span class="sd"> Choose a value h for the size of every step and set</span>
<span class="sd"> .. math ::</span>
<span class="sd"> t_i = t_0 + i h ~,\quad i=1,2,\ldots,n</span>
<span class="sd"> The derivative of the solution is approximated as the forward difference</span>
<span class="sd"> equation</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x}_i = f(t_i, x_i) = \frac{x_{i+1} - x_i}{t_{i+1}-t_i}</span>
<span class="sd"> Therefore one step :math:`h` of the Euler method from :math:`t_i` to</span>
<span class="sd"> :math:`t_{i+1}` is</span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i+1} &amp;= x_i + (t_{i+1}-t_i) f(t_i, x_i) \\</span>
<span class="sd"> x_{i+1} &amp;= x_i + h f(t_i, x_i) \\</span>
<span class="sd"> Example 1:</span>
<span class="sd"> .. math ::</span>
<span class="sd"> m\ddot{u} + d\dot{u} + ku = f(t) \\</span>
<span class="sd"> \ddot{u} = m^{-1}(f(t) - d\dot{u} - ku) \\</span>
<span class="sd"> with</span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_1 &amp;= u &amp;\quad \dot{x}_1 = \dot{u} = x_2 \\</span>
<span class="sd"> x_2 &amp;= \dot{u} &amp;\quad \dot{x}_2 = \ddot{u} \\</span>
<span class="sd"> becomes</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x}_1 &amp;= x_2 \\</span>
<span class="sd"> \dot{x}_2 &amp;= m^{-1}(f(t) - d x_2 - k x_1) \\</span>
<span class="sd"> or</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x} &amp;= f(t,x) \\</span>
<span class="sd"> \begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &amp;=</span>
<span class="sd"> \begin{bmatrix} x_2 \\ m^{-1}(f(t) - d x_2 - k x_1) \end{bmatrix} \\</span>
<span class="sd"> &amp;=</span>
<span class="sd"> \begin{bmatrix} 0 \\ m^{-1} f(t) \end{bmatrix} +</span>
<span class="sd"> \begin{bmatrix} 0 &amp; 1 \\ -m^{-1} k &amp; -m^{-1} d \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}</span>
<span class="sd"> Example 2:</span>
<span class="sd"> .. math ::</span>
<span class="sd"> m(u)\ddot{u} + d(u,\dot{u})\dot{u} + k(u)u = f(t) \\</span>
<span class="sd"> \ddot{u} = m^{-1}(u)(f(t) - d(u,\dot{u})\dot{u} - k(u)u) \\</span>
<span class="sd"> with</span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_1 &amp;= u &amp;\quad \dot{x}_1 = \dot{u} = x_2 \\</span>
<span class="sd"> x_2 &amp;= \dot{u} &amp;\quad \dot{x}_2 = \ddot{u} \\</span>
<span class="sd"> becomes</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x}_1 &amp;= x_2 \\</span>
<span class="sd"> \dot{x}_2 &amp;= m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \\</span>
<span class="sd"> or</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x} &amp;= f(t,x) \\</span>
<span class="sd"> \begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &amp;=</span>
<span class="sd"> \begin{bmatrix} x_2 \\ m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \end{bmatrix} \\</span>
<span class="sd"> &amp;=</span>
<span class="sd"> \begin{bmatrix} 0 \\ m^{-1}(x_1) f(t) \end{bmatrix} +</span>
<span class="sd"> \begin{bmatrix} 0 &amp; 1 \\ -m^{-1}(x_1) k(x_1) &amp; -m^{-1} d(x_1,x_2) \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}</span>
<span class="sd"> The Euler method is a first-order method,</span>
<span class="sd"> which means that the local error (error per step) is proportional to the</span>
<span class="sd"> square of the step size, and the global error (error at a given time) is</span>
<span class="sd"> proportional to the step size.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</span> <span class="c1"># Approximate solution at next value of x</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Numerical integration of ODE using explicit first-order method (Euler / Runge-Kutta) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span></div>
<div class="viewcode-block" id="e2"><a class="viewcode-back" href="../../numerical.html#numerical.ode.e2">[docs]</a><span class="k">def</span> <span class="nf">e2</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Explicit second-order method / Runge-Kutta 2nd order method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter, ...)</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">k_1</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">k_2</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="o">*</span><span class="n">k_1</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">k_2</span><span class="o">*</span><span class="n">Dt</span> <span class="c1"># Approximate solution at next value of x</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Numerical integration of ODE using explicit 2th-order method (Runge-Kutta) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span></div>
<div class="viewcode-block" id="e4"><a class="viewcode-back" href="../../numerical.html#numerical.ode.e4">[docs]</a><span class="k">def</span> <span class="nf">e4</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Explicit fourth-order method / Runge-Kutta 4th order method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter, ...)</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">k_1</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">k_2</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="o">*</span><span class="n">k_1</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">k_3</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="o">*</span><span class="n">k_2</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="mf">0.5</span><span class="o">*</span><span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">k_4</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">+</span><span class="n">k_3</span><span class="o">*</span><span class="n">Dt</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="mf">1.</span><span class="o">/</span><span class="mi">6</span><span class="o">*</span><span class="p">(</span><span class="n">k_1</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">k_2</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">k_3</span><span class="o">+</span><span class="n">k_4</span><span class="p">)</span><span class="o">*</span><span class="n">Dt</span> <span class="c1"># Approximate solution at next value of x</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Numerical integration of ODE using explicit 4th-order method (Runge-Kutta) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span></div>
<div class="viewcode-block" id="dxdt_Dt"><a class="viewcode-back" href="../../numerical.html#numerical.ode.dxdt_Dt">[docs]</a><span class="k">def</span> <span class="nf">dxdt_Dt</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> :param f: :math:`f = \dot{x}`</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param Dt: :math:`\Delta{t}`</span>
<span class="sd"> </span>
<span class="sd"> :returns: :math:`\Delta x = \dot{x} \Delta t`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">array</span><span class="p">(</span><span class="n">dxdt</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span> <span class="o">*</span> <span class="n">Dt</span></div>
<div class="viewcode-block" id="fixed_point_iteration"><a class="viewcode-back" href="../../numerical.html#numerical.ode.fixed_point_iteration">[docs]</a><span class="k">def</span> <span class="nf">fixed_point_iteration</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> :param f: the function to iterate :math:`f = \Delta{x}(t)`</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param xi: initial condition :math:`x_i`</span>
<span class="sd"> :type xi: list</span>
<span class="sd"> :param t: time :math:`t`</span>
<span class="sd"> :type t: float</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter, ...)</span>
<span class="sd"> :param max_iterations: maximum number of iterations</span>
<span class="sd"> :type max_iterations: int</span>
<span class="sd"> :param tol: tolerance against residuum (default = 1e-9)</span>
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> </span>
<span class="sd"> :returns: :math:`x_{i+1}`</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i+1} = x_i + \Delta x</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`dxdt_Dt` for :math:`\Delta x`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x0</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">):</span> <span class="c1"># Fixed-point iteration</span>
<span class="n">Dx</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">xi1</span> <span class="o">=</span> <span class="n">x0</span> <span class="o">+</span> <span class="n">Dx</span> <span class="c1"># Approximate solution at next value of x</span>
<span class="n">residuum</span> <span class="o">=</span> <span class="n">norm</span><span class="p">(</span><span class="n">xi1</span><span class="o">-</span><span class="n">xi</span><span class="p">)</span><span class="o">/</span><span class="n">norm</span><span class="p">(</span><span class="n">xi1</span><span class="p">)</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">xi1</span>
<span class="k">if</span> <span class="n">residuum</span> <span class="o">&lt;</span> <span class="n">tol</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">j</span><span class="o">+</span><span class="mi">1</span> <span class="c1"># number beginning with 1 therefore + 1</span>
<span class="k">return</span> <span class="n">xi</span><span class="p">,</span> <span class="n">iterations</span></div>
<div class="viewcode-block" id="i1n"><a class="viewcode-back" href="../../numerical.html#numerical.ode.i1n">[docs]</a><span class="k">def</span> <span class="nf">i1n</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span>
<span class="n">Dx</span> <span class="o">=</span> <span class="n">dxdt_Dt</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="n">Dt</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">)</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:],</span> <span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">fixed_point_iteration</span><span class="p">(</span><span class="n">Dx</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">max_iterations</span><span class="p">,</span> <span class="n">tol</span><span class="p">,</span> <span class="n">verbose</span><span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Numerical integration of ODE using implicite first-order method (Euler) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">iterations</span></div>
<div class="viewcode-block" id="i1"><a class="viewcode-back" href="../../numerical.html#numerical.ode.i1">[docs]</a><span class="k">def</span> <span class="nf">i1</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Implicite first-order method / backward Euler method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter, ...)</span>
<span class="sd"> :param max_iterations: maximum number of iterations</span>
<span class="sd"> :type max_iterations: int</span>
<span class="sd"> :param tol: tolerance against residuum (default = 1e-9)</span>
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> </span>
<span class="sd"> The backward Euler method has order one and is A-stable.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span>
<span class="c1"># x(i+1) = x(i) + f(x(i+1), t(i+1)), exact value of f(x(i+1), t(i+1)) is not</span>
<span class="c1"># available therefor using Newton-Raphson method</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">):</span> <span class="c1"># Fixed-point iteration</span>
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="n">xi1</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</span> <span class="c1"># Approximate solution at next value of x</span>
<span class="n">residuum</span> <span class="o">=</span> <span class="n">norm</span><span class="p">(</span><span class="n">xi1</span><span class="o">-</span><span class="n">xi</span><span class="p">)</span><span class="o">/</span><span class="n">norm</span><span class="p">(</span><span class="n">xi1</span><span class="p">)</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">xi1</span>
<span class="k">if</span> <span class="n">residuum</span> <span class="o">&lt;</span> <span class="n">tol</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span><span class="o">+</span><span class="mi">1</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xi</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Numerical integration of ODE using implicite first-order method (Euler) was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">iterations</span></div>
<div class="viewcode-block" id="newmark_newtonraphson"><a class="viewcode-back" href="../../numerical.html#numerical.ode.newmark_newtonraphson">[docs]</a><span class="k">def</span> <span class="nf">newmark_newtonraphson</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">xp0</span><span class="p">,</span> <span class="n">xpp0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=.</span><span class="mi">5</span><span class="p">,</span> <span class="n">beta</span><span class="o">=.</span><span class="mi">25</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Newmark method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param xp0: initial condition</span>
<span class="sd"> :type xp0: list</span>
<span class="sd"> :param xpp0: initial condition</span>
<span class="sd"> :type xpp0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter, ...)</span>
<span class="sd"> :param gamma: newmark parameter for velocity (default = 0.5)</span>
<span class="sd"> :type gamma: float</span>
<span class="sd"> :param beta: newmark parameter for displacement (default = 0.25)</span>
<span class="sd"> :type beta: float</span>
<span class="sd"> :param max_iterations: maximum number of iterations</span>
<span class="sd"> :type max_iterations: int</span>
<span class="sd"> :param tol: tolerance against residuum (default = 1e-9)</span>
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">xp</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">xp0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">xpp</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">xpp0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="n">xp</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xp0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="n">xpp</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xpp0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xpi</span> <span class="o">=</span> <span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xppi</span> <span class="o">=</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xppi</span>
<span class="n">j</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">):</span> <span class="c1"># Fixed-point iteration</span>
<span class="c1">#dxdt = array(f(t[i+1], x1, p))</span>
<span class="c1">#x11 = x[i,:] + dxdt*Dt # Approximate solution at next value of x</span>
<span class="n">N</span><span class="p">,</span> <span class="n">dN</span><span class="p">,</span> <span class="n">dNp</span><span class="p">,</span> <span class="n">dNpp</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span>
<span class="n">xp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span> <span class="n">xpp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span>
<span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">)</span>
<span class="k">if</span> <span class="n">isnan</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">dN</span><span class="p">))</span> <span class="ow">or</span> <span class="n">isnan</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">dNp</span><span class="p">))</span> <span class="ow">or</span> <span class="n">isnan</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">dNpp</span><span class="p">)):</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;divergiert&#39;</span><span class="p">)</span>
<span class="k">break</span>
<span class="n">xpp11</span> <span class="o">=</span> <span class="n">xpp1</span> <span class="o">-</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">dNpp</span><span class="p">),</span> <span class="p">(</span><span class="n">N</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">dN</span><span class="p">,</span> <span class="p">(</span><span class="n">x1</span><span class="o">-</span><span class="n">xi</span><span class="p">))</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">dNp</span><span class="p">,</span> <span class="p">(</span><span class="n">xp1</span><span class="o">-</span><span class="n">xpi</span><span class="p">))))</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">gamma</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">gamma</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="o">.</span><span class="mi">5</span><span class="o">-</span><span class="n">beta</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">beta</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">residuum</span> <span class="o">=</span> <span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="o">-</span><span class="n">xpp1</span><span class="p">)</span><span class="o">/</span><span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="p">)</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xpp11</span>
<span class="k">if</span> <span class="n">residuum</span> <span class="o">&lt;</span> <span class="n">tol</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span><span class="o">+</span><span class="mi">1</span>
<span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xpp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Numerical integration of ODE using explicite newmark method was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">xpp</span><span class="p">,</span> <span class="n">iterations</span></div>
<span class="c1"># x = concatenate((x, xp, xpp), axis=1)</span>
<div class="viewcode-block" id="newmark_newtonraphson_rdk"><a class="viewcode-back" href="../../numerical.html#numerical.ode.newmark_newtonraphson_rdk">[docs]</a><span class="k">def</span> <span class="nf">newmark_newtonraphson_rdk</span><span class="p">(</span><span class="n">fnm</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">xp0</span><span class="p">,</span> <span class="n">xpp0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=.</span><span class="mi">5</span><span class="p">,</span> <span class="n">beta</span><span class="o">=.</span><span class="mi">25</span><span class="p">,</span> <span class="n">maxIterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Newmark method.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
<span class="sd"> :type x0: list</span>
<span class="sd"> :param xp0: initial condition</span>
<span class="sd"> :type xp0: list</span>
<span class="sd"> :param xpp0: initial condition</span>
<span class="sd"> :type xpp0: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function (thickness, diameter, ...)</span>
<span class="sd"> :param gamma: newmark parameter for velocity (default = 0.5)</span>
<span class="sd"> :type gamma: float</span>
<span class="sd"> :param beta: newmark parameter for displacement (default = 0.25)</span>
<span class="sd"> :type beta: float</span>
<span class="sd"> :param max_iterations: maximum number of iterations</span>
<span class="sd"> :type max_iterations: int</span>
<span class="sd"> :param tol: tolerance against residuum (default = 1e-9)</span>
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">xp</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">xp0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">xpp</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">xpp0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="n">xp</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xp0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="n">xpp</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xpp0</span> <span class="c1"># Initial condition gives solution at first t</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span> <span class="o">=</span> <span class="n">fnm</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">)</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xpi</span> <span class="o">=</span> <span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xppi</span> <span class="o">=</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xppi</span>
<span class="n">j</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">maxIterations</span><span class="p">):</span> <span class="c1"># Fixed-point iteration</span>
<span class="c1">#dxdt = array(f(t[i+1], x1, p))</span>
<span class="c1">#x11 = x[i,:] + dxdt*Dt # Approximate solution at next value of x</span>
<span class="n">r</span> <span class="o">=</span> <span class="p">(</span><span class="n">rmx</span><span class="o">+</span><span class="n">rdx</span><span class="o">+</span><span class="n">rkx</span><span class="p">)</span><span class="o">*</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span> <span class="o">+</span> <span class="n">rdxp</span><span class="o">*</span><span class="n">Dt</span><span class="o">/</span><span class="mi">2</span> <span class="o">+</span> <span class="n">rmxpp</span>
<span class="n">rp</span> <span class="o">=</span> <span class="n">f</span> <span class="o">-</span> <span class="p">(</span><span class="n">rm</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rmx</span><span class="p">,</span> <span class="p">(</span><span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span><span class="o">+</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="n">xppi</span><span class="p">))</span> <span class="o">-</span> <span class="n">dot</span><span class="p">(</span><span class="n">rmxpp</span><span class="p">,</span> <span class="n">xppi</span><span class="p">)</span> <span class="o">+</span> \
<span class="n">rd</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rdx</span><span class="p">,</span> <span class="p">(</span><span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span><span class="o">+</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="n">xppi</span><span class="p">))</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rdxp</span><span class="p">,</span> <span class="n">Dt</span><span class="o">/</span><span class="mi">2</span><span class="o">*</span><span class="n">xppi</span><span class="p">)</span> <span class="o">+</span> \
<span class="n">rk</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rkx</span><span class="p">,</span> <span class="p">(</span><span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span><span class="o">+</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="n">xppi</span><span class="p">))</span> <span class="p">)</span>
<span class="n">xpp11</span> <span class="o">=</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">r</span><span class="p">),</span> <span class="n">rp</span><span class="p">)</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">gamma</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">gamma</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="o">.</span><span class="mi">5</span><span class="o">-</span><span class="n">beta</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">beta</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">residuum</span> <span class="o">=</span> <span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="o">-</span><span class="n">xpp1</span><span class="p">)</span><span class="o">/</span><span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="p">)</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xpp11</span>
<span class="k">if</span> <span class="n">residuum</span> <span class="o">&lt;</span> <span class="n">tol</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span><span class="o">+</span><span class="mi">1</span>
<span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xpp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xp1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x1</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Numerical integration of ODE using explicite newmark method was successful.&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">xpp</span><span class="p">,</span> <span class="n">iterations</span></div>
<span class="c1"># x = concatenate((x, xp, xpp), axis=1)</span>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../../index.html">Documentation overview</a><ul>
<li><a href="../index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>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>
</div>
</body>
</html>

View File

@@ -0,0 +1,219 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>numerical.ode_model &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for numerical.ode_model</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Mathmatical models governed by ordinary differential equations.</span>
<span class="sd">Describes initial value problems as systems of first order ordinary differential</span>
<span class="sd">equations.</span>
<span class="sd">:Date: 2019-05-25</span>
<span class="sd">.. module:: ode_model</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Models of ordinary differential equations.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span><span class="p">,</span> <span class="n">dot</span><span class="p">,</span> <span class="n">square</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="k">import</span> <span class="n">inv</span>
<div class="viewcode-block" id="disk"><a class="viewcode-back" href="../../numerical.html#numerical.ode_model.disk">[docs]</a><span class="k">def</span> <span class="nf">disk</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>
<span class="sd"> :param x: values of the function</span>
<span class="sd"> :type x: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">qp1</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="n">qp2</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
<span class="n">qp3</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
<span class="n">M</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span> \
<span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span> \
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])]])</span>
<span class="n">qp46</span> <span class="o">=</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">M</span><span class="p">),</span> <span class="n">y</span><span class="p">)</span>
<span class="n">qp4</span><span class="p">,</span> <span class="n">qp5</span><span class="p">,</span> <span class="n">qp6</span> <span class="o">=</span> <span class="n">qp46</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span> <span class="c1"># 2d array to 1d array to list</span>
<span class="k">return</span> <span class="n">qp1</span><span class="p">,</span> <span class="n">qp2</span><span class="p">,</span> <span class="n">qp3</span><span class="p">,</span> <span class="n">qp4</span><span class="p">,</span> <span class="n">qp5</span><span class="p">,</span> <span class="n">qp6</span></div>
<div class="viewcode-block" id="disk_nm"><a class="viewcode-back" href="../../numerical.html#numerical.ode_model.disk_nm">[docs]</a><span class="k">def</span> <span class="nf">disk_nm</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>
<span class="sd"> :param xn: values of the function</span>
<span class="sd"> :type xn: list</span>
<span class="sd"> :param xpn: first derivative values of the function</span>
<span class="sd"> :type xpn: list</span>
<span class="sd"> :param xppn: second derivative values of the function</span>
<span class="sd"> :type xppn: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">N</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="n">dN</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">dNp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">dNpp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">N</span><span class="p">,</span> <span class="n">dN</span><span class="p">,</span> <span class="n">dNp</span><span class="p">,</span> <span class="n">dNpp</span></div>
<div class="viewcode-block" id="disk_nmmdk"><a class="viewcode-back" href="../../numerical.html#numerical.ode_model.disk_nmmdk">[docs]</a><span class="k">def</span> <span class="nf">disk_nmmdk</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>
<span class="sd"> :param xn: values of the function</span>
<span class="sd"> :type xn: list</span>
<span class="sd"> :param xpn: derivative values of the function</span>
<span class="sd"> :type xpn: list</span>
<span class="sd"> :param xppn: second derivative values of the function</span>
<span class="sd"> :type xppn: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rm</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="n">rmx</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">rmxpp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="n">rd</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
<span class="n">rdx</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">rdxp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
<span class="n">rk</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">rkx</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="k">return</span> <span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="kc">True</span>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../../index.html">Documentation overview</a><ul>
<li><a href="../index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>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>
</div>
</body>
</html>