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

1
.gitignore vendored
View File

@@ -6,4 +6,5 @@ __pycache__/
*.egg-info/
# Sphinx documentation
docs/build/.doctrees/
docs/build/doctrees/

View File

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

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>

View File

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

View File

@@ -6,7 +6,5 @@ src
data
date
fit
geometry
solver
solver_model
numerical

View File

@@ -0,0 +1,46 @@
numerical package
=================
Submodules
----------
numerical.fit module
--------------------
.. automodule:: numerical.fit
:members:
:undoc-members:
:show-inheritance:
numerical.integration module
----------------------------
.. automodule:: numerical.integration
:members:
:undoc-members:
:show-inheritance:
numerical.ode module
--------------------
.. automodule:: numerical.ode
:members:
:undoc-members:
:show-inheritance:
numerical.ode\_model module
---------------------------
.. automodule:: numerical.ode_model
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: numerical
:members:
:undoc-members:
:show-inheritance:

View File

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

View File

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

View File

@@ -310,7 +310,7 @@ div.hint {
}
div.seealso {
background-color: #3c3c3c;
background-color: #25272c;
border: 1px solid #2C2C2C;
}
@@ -439,14 +439,14 @@ ul, ol {
}
pre {
background: #EEE;
background: #25272c;
padding: 7px 30px;
margin: 15px 0px;
line-height: 1.3em;
}
div.viewcode-block:target {
background: #ffd;
background: #292b2e;
}
dl pre, blockquote pre, li pre {

View File

@@ -5,3 +5,9 @@
table.indextable tr.cap {
background-color: #333;
}
/* move doc link a bit up */
.viewcode-back {
float: right;
position: relative;
top: -1.5em;
}

View File

@@ -1,77 +1,78 @@
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #8f5902; font-style: italic } /* Comment */
.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
.highlight .g { color: #000000 } /* Generic */
.highlight .k { color: #004461; font-weight: bold } /* Keyword */
.highlight .l { color: #000000 } /* Literal */
.highlight .n { color: #000000 } /* Name */
.highlight .o { color: #582800 } /* Operator */
.highlight .x { color: #000000 } /* Other */
.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #8f5902 } /* Comment.Preproc */
.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
.highlight .gd { color: #a40000 } /* Generic.Deleted */
.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
.highlight .gr { color: #ef2929 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #745334 } /* Generic.Prompt */
.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
.highlight .ld { color: #000000 } /* Literal.Date */
.highlight .m { color: #990000 } /* Literal.Number */
.highlight .s { color: #4e9a06 } /* Literal.String */
.highlight .na { color: #c4a000 } /* Name.Attribute */
.highlight .nb { color: #004461 } /* Name.Builtin */
.highlight .nc { color: #000000 } /* Name.Class */
.highlight .no { color: #000000 } /* Name.Constant */
.highlight .nd { color: #888888 } /* Name.Decorator */
.highlight .ni { color: #ce5c00 } /* Name.Entity */
.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #000000 } /* Name.Function */
.highlight .nl { color: #f57900 } /* Name.Label */
.highlight .nn { color: #000000 } /* Name.Namespace */
.highlight .nx { color: #000000 } /* Name.Other */
.highlight .py { color: #000000 } /* Name.Property */
.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #000000 } /* Name.Variable */
.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
.highlight .mb { color: #990000 } /* Literal.Number.Bin */
.highlight .mf { color: #990000 } /* Literal.Number.Float */
.highlight .mh { color: #990000 } /* Literal.Number.Hex */
.highlight .mi { color: #990000 } /* Literal.Number.Integer */
.highlight .mo { color: #990000 } /* Literal.Number.Oct */
.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #000000 } /* Name.Function.Magic */
.highlight .vc { color: #000000 } /* Name.Variable.Class */
.highlight .vg { color: #000000 } /* Name.Variable.Global */
.highlight .vi { color: #000000 } /* Name.Variable.Instance */
.highlight .vm { color: #000000 } /* Name.Variable.Magic */
.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */
.highlight .hll { background-color: #073642 }
.highlight { background: #002b36; color: #839496 }
.highlight .c { color: #586e75; font-style: italic } /* Comment */
.highlight .err { color: #839496; background-color: #dc322f } /* Error */
.highlight .esc { color: #839496 } /* Escape */
.highlight .g { color: #839496 } /* Generic */
.highlight .k { color: #859900 } /* Keyword */
.highlight .l { color: #839496 } /* Literal */
.highlight .n { color: #839496 } /* Name */
.highlight .o { color: #586e75 } /* Operator */
.highlight .x { color: #839496 } /* Other */
.highlight .p { color: #839496 } /* Punctuation */
.highlight .ch { color: #586e75; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #586e75; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #d33682 } /* Comment.Preproc */
.highlight .cpf { color: #586e75 } /* Comment.PreprocFile */
.highlight .c1 { color: #586e75; font-style: italic } /* Comment.Single */
.highlight .cs { color: #586e75; font-style: italic } /* Comment.Special */
.highlight .gd { color: #dc322f } /* Generic.Deleted */
.highlight .ge { color: #839496; font-style: italic } /* Generic.Emph */
.highlight .gr { color: #dc322f } /* Generic.Error */
.highlight .gh { color: #839496; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #859900 } /* Generic.Inserted */
.highlight .go { color: #839496 } /* Generic.Output */
.highlight .gp { color: #839496 } /* Generic.Prompt */
.highlight .gs { color: #839496; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #839496; text-decoration: underline } /* Generic.Subheading */
.highlight .gt { color: #268bd2 } /* Generic.Traceback */
.highlight .kc { color: #2aa198 } /* Keyword.Constant */
.highlight .kd { color: #2aa198 } /* Keyword.Declaration */
.highlight .kn { color: #cb4b16 } /* Keyword.Namespace */
.highlight .kp { color: #859900 } /* Keyword.Pseudo */
.highlight .kr { color: #859900 } /* Keyword.Reserved */
.highlight .kt { color: #b58900 } /* Keyword.Type */
.highlight .ld { color: #839496 } /* Literal.Date */
.highlight .m { color: #2aa198 } /* Literal.Number */
.highlight .s { color: #2aa198 } /* Literal.String */
.highlight .na { color: #839496 } /* Name.Attribute */
.highlight .nb { color: #268bd2 } /* Name.Builtin */
.highlight .nc { color: #268bd2 } /* Name.Class */
.highlight .no { color: #268bd2 } /* Name.Constant */
.highlight .nd { color: #268bd2 } /* Name.Decorator */
.highlight .ni { color: #268bd2 } /* Name.Entity */
.highlight .ne { color: #268bd2 } /* Name.Exception */
.highlight .nf { color: #268bd2 } /* Name.Function */
.highlight .nl { color: #268bd2 } /* Name.Label */
.highlight .nn { color: #268bd2 } /* Name.Namespace */
.highlight .nx { color: #839496 } /* Name.Other */
.highlight .py { color: #839496 } /* Name.Property */
.highlight .nt { color: #268bd2 } /* Name.Tag */
.highlight .nv { color: #268bd2 } /* Name.Variable */
.highlight .ow { color: #859900 } /* Operator.Word */
.highlight .w { color: #839496 } /* Text.Whitespace */
.highlight .mb { color: #2aa198 } /* Literal.Number.Bin */
.highlight .mf { color: #2aa198 } /* Literal.Number.Float */
.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */
.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */
.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */
.highlight .sa { color: #2aa198 } /* Literal.String.Affix */
.highlight .sb { color: #2aa198 } /* Literal.String.Backtick */
.highlight .sc { color: #2aa198 } /* Literal.String.Char */
.highlight .dl { color: #2aa198 } /* Literal.String.Delimiter */
.highlight .sd { color: #586e75 } /* Literal.String.Doc */
.highlight .s2 { color: #2aa198 } /* Literal.String.Double */
.highlight .se { color: #2aa198 } /* Literal.String.Escape */
.highlight .sh { color: #2aa198 } /* Literal.String.Heredoc */
.highlight .si { color: #2aa198 } /* Literal.String.Interpol */
.highlight .sx { color: #2aa198 } /* Literal.String.Other */
.highlight .sr { color: #cb4b16 } /* Literal.String.Regex */
.highlight .s1 { color: #2aa198 } /* Literal.String.Single */
.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */
.highlight .bp { color: #268bd2 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #268bd2 } /* Name.Function.Magic */
.highlight .vc { color: #268bd2 } /* Name.Variable.Class */
.highlight .vg { color: #268bd2 } /* Name.Variable.Global */
.highlight .vi { color: #268bd2 } /* Name.Variable.Instance */
.highlight .vm { color: #268bd2 } /* Name.Variable.Magic */
.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */

View File

@@ -37,7 +37,7 @@
<p>Read and write data to or from file.</p>
<span class="target" id="module-data"></span><dl class="function">
<dt id="data.data_load">
<code class="descname">data_load</code><span class="sig-paren">(</span><em>file_name</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_load" title="Permalink to this definition"></a></dt>
<code class="descname">data_load</code><span class="sig-paren">(</span><em>file_name</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/data.html#data_load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#data.data_load" title="Permalink to this definition"></a></dt>
<dd><p>Load stored program objects from binary file.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -57,7 +57,7 @@
<dl class="function">
<dt id="data.data_read">
<code class="descname">data_read</code><span class="sig-paren">(</span><em>file_name</em>, <em>x_column</em>, <em>y_column</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_read" title="Permalink to this definition"></a></dt>
<code class="descname">data_read</code><span class="sig-paren">(</span><em>file_name</em>, <em>x_column</em>, <em>y_column</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/data.html#data_read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#data.data_read" title="Permalink to this definition"></a></dt>
<dd><p>Read ascii data file.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -78,7 +78,7 @@
<dl class="function">
<dt id="data.data_store">
<code class="descname">data_store</code><span class="sig-paren">(</span><em>file_name</em>, <em>object_data</em><span class="sig-paren">)</span><a class="headerlink" href="#data.data_store" title="Permalink to this definition"></a></dt>
<code class="descname">data_store</code><span class="sig-paren">(</span><em>file_name</em>, <em>object_data</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/data.html#data_store"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#data.data_store" title="Permalink to this definition"></a></dt>
<dd><p>Store program objects to binary file.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -92,7 +92,7 @@
<dl class="function">
<dt id="data.main">
<code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#data.main" title="Permalink to this definition"></a></dt>
<code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/data.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#data.main" title="Permalink to this definition"></a></dt>
<dd><p>Main function.</p>
</dd></dl>

View File

@@ -42,7 +42,7 @@
</dl>
<span class="target" id="module-date"></span><dl class="function">
<dt id="date.ascension_of_jesus">
<code class="descname">ascension_of_jesus</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.ascension_of_jesus" title="Permalink to this definition"></a></dt>
<code class="descname">ascension_of_jesus</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/date.html#ascension_of_jesus"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#date.ascension_of_jesus" title="Permalink to this definition"></a></dt>
<dd><p>Ascension of Jesus.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -59,7 +59,7 @@
<dl class="function">
<dt id="date.easter_friday">
<code class="descname">easter_friday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_friday" title="Permalink to this definition"></a></dt>
<code class="descname">easter_friday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/date.html#easter_friday"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#date.easter_friday" title="Permalink to this definition"></a></dt>
<dd><p>Easter Friday.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -76,7 +76,7 @@
<dl class="function">
<dt id="date.easter_monday">
<code class="descname">easter_monday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_monday" title="Permalink to this definition"></a></dt>
<code class="descname">easter_monday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/date.html#easter_monday"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#date.easter_monday" title="Permalink to this definition"></a></dt>
<dd><p>Easter Monday.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -93,7 +93,7 @@
<dl class="function">
<dt id="date.easter_sunday">
<code class="descname">easter_sunday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.easter_sunday" title="Permalink to this definition"></a></dt>
<code class="descname">easter_sunday</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/date.html#easter_sunday"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#date.easter_sunday" title="Permalink to this definition"></a></dt>
<dd><p>Easter Sunday.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -110,7 +110,7 @@
<dl class="function">
<dt id="date.gaußsche_osterformel">
<code class="descname">gaußsche_osterformel</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.gaußsche_osterformel" title="Permalink to this definition"></a></dt>
<code class="descname">gaußsche_osterformel</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/date.html#gaußsche_osterformel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#date.gaußsche_osterformel" title="Permalink to this definition"></a></dt>
<dd><p>Gaußsche Osterformel.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -144,7 +144,7 @@
<dl class="function">
<dt id="date.pentecost">
<code class="descname">pentecost</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="headerlink" href="#date.pentecost" title="Permalink to this definition"></a></dt>
<code class="descname">pentecost</code><span class="sig-paren">(</span><em>year</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/date.html#pentecost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#date.pentecost" title="Permalink to this definition"></a></dt>
<dd><p>Pentecost.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>

View File

@@ -1,173 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>fit module &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-fit">
<span id="fit-module"></span><h1>fit module<a class="headerlink" href="#module-fit" title="Permalink to this headline"></a></h1>
<p>Function and approximation.</p>
<span class="target" id="module-fit"></span><dl class="function">
<dt id="fit.gauss">
<code class="descname">gauss</code><span class="sig-paren">(</span><em>x</em>, <em>*p</em><span class="sig-paren">)</span><a class="headerlink" href="#fit.gauss" title="Permalink to this definition"></a></dt>
<dd><p>Gauss distribution function.</p>
<div class="math notranslate nohighlight">
\[f(x)=ae^{-(x-b)^{2}/(2c^{2})}\]</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions where the gauss function will be calculated</p></li>
<li><p><strong>p</strong> (<em>list</em>) <p>gauss parameters [a, b, c, d]:</p>
<ul>
<li><p>a amplitude (<span class="math notranslate nohighlight">\(\int y \,\mathrm{d}x=1 \Leftrightarrow a=1/(c\sqrt{2\pi})\)</span> )</p></li>
<li><p>b expected value <span class="math notranslate nohighlight">\(\mu\)</span> (position of maximum, default = 0)</p></li>
<li><p>c standard deviation <span class="math notranslate nohighlight">\(\sigma\)</span> (variance <span class="math notranslate nohighlight">\(\sigma^2=c^2\)</span>)</p></li>
<li><p>d vertical offset (default = 0)</p></li>
</ul>
</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>gauss values at given positions x</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>numpy.ndarray</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="fit.gauss_fit">
<code class="descname">gauss_fit</code><span class="sig-paren">(</span><em>x</em>, <em>y</em>, <em>e=None</em>, <em>x_fit=None</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#fit.gauss_fit" title="Permalink to this definition"></a></dt>
<dd><p>Fit Gauss distribution function to data.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions</p></li>
<li><p><strong>y</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) values</p></li>
<li><p><strong>e</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) error values (default = None)</p></li>
<li><p><strong>x_fit</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions of fitted function (default = None, if None then x
is used)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) verbose information (default = False)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>numpy.ndarray fitted values (y_fit)</p></li>
<li><p>numpy.ndarray parameters of gauss distribution function (popt:
amplitude a, expected value <span class="math notranslate nohighlight">\(\mu\)</span>, standard deviation
<span class="math notranslate nohighlight">\(\sigma\)</span>, vertical offset d)</p></li>
<li><p>numpy.float64 full width at half maximum (FWHM)</p></li>
</ul>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#fit.gauss" title="fit.gauss"><code class="xref py py-meth docutils literal notranslate"><span class="pre">gauss()</span></code></a></p>
</div>
</dd></dl>
<dl class="function">
<dt id="fit.main">
<code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fit.main" title="Permalink to this definition"></a></dt>
<dd><p>test function</p>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.0.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/fit.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -47,6 +47,7 @@
| <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a>
| <a href="#N"><strong>N</strong></a>
| <a href="#O"><strong>O</strong></a>
| <a href="#P"><strong>P</strong></a>
| <a href="#R"><strong>R</strong></a>
| <a href="#S"><strong>S</strong></a>
@@ -88,11 +89,13 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="date.html#module-date">date (module)</a>, <a href="date.html#module-date">[1]</a>
</li>
<li><a href="solver_model.html#solver_model.disk">disk() (in module solver_model)</a>
<li><a href="numerical.html#numerical.ode_model.disk">disk() (in module numerical.ode_model)</a>
</li>
<li><a href="solver_model.html#solver_model.disk_nm">disk_nm() (in module solver_model)</a>
<li><a href="numerical.html#numerical.ode_model.disk_nm">disk_nm() (in module numerical.ode_model)</a>
</li>
<li><a href="solver_model.html#solver_model.disk_nmmdk">disk_nmmdk() (in module solver_model)</a>
<li><a href="numerical.html#numerical.ode_model.disk_nmmdk">disk_nmmdk() (in module numerical.ode_model)</a>
</li>
<li><a href="numerical.html#numerical.ode.dxdt_Dt">dxdt_Dt() (in module numerical.ode)</a>
</li>
</ul></td>
</tr></table>
@@ -100,11 +103,11 @@
<h2 id="E">E</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#solver.e1">e1() (in module solver)</a>
<li><a href="numerical.html#numerical.ode.e1">e1() (in module numerical.ode)</a>
</li>
<li><a href="solver.html#solver.e2">e2() (in module solver)</a>
<li><a href="numerical.html#numerical.ode.e2">e2() (in module numerical.ode)</a>
</li>
<li><a href="solver.html#solver.e4">e4() (in module solver)</a>
<li><a href="numerical.html#numerical.ode.e4">e4() (in module numerical.ode)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
@@ -120,7 +123,11 @@
<h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="fit.html#module-fit">fit (module)</a>, <a href="fit.html#module-fit">[1]</a>
<li><a href="numerical.html#module-fit">fit (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#numerical.ode.fixed_point_iteration">fixed_point_iteration() (in module numerical.ode)</a>
</li>
</ul></td>
</tr></table>
@@ -128,9 +135,9 @@
<h2 id="G">G</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="fit.html#fit.gauss">gauss() (in module fit)</a>
<li><a href="numerical.html#numerical.fit.gauss">gauss() (in module numerical.fit)</a>
</li>
<li><a href="fit.html#fit.gauss_fit">gauss_fit() (in module fit)</a>
<li><a href="numerical.html#numerical.fit.gauss_fit">gauss_fit() (in module numerical.fit)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
@@ -144,7 +151,13 @@
<h2 id="I">I</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#solver.i1">i1() (in module solver)</a>
<li><a href="numerical.html#numerical.ode.i1">i1() (in module numerical.ode)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#numerical.ode.i1n">i1n() (in module numerical.ode)</a>
</li>
<li><a href="numerical.html#module-integration">integration (module)</a>
</li>
</ul></td>
</tr></table>
@@ -161,22 +174,40 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="data.html#data.main">main() (in module data)</a>
<ul>
<li><a href="fit.html#fit.main">(in module fit)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="N">N</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#solver.newmark_newtonraphson">newmark_newtonraphson() (in module solver)</a>
<li><a href="numerical.html#numerical.ode.newmark_newtonraphson">newmark_newtonraphson() (in module numerical.ode)</a>
</li>
<li><a href="numerical.html#numerical.ode.newmark_newtonraphson_rdk">newmark_newtonraphson_rdk() (in module numerical.ode)</a>
</li>
<li><a href="numerical.html#module-numerical">numerical (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#solver.newmark_newtonraphson_rdk">newmark_newtonraphson_rdk() (in module solver)</a>
<li><a href="numerical.html#module-numerical.fit">numerical.fit (module)</a>
</li>
<li><a href="numerical.html#module-numerical.integration">numerical.integration (module)</a>
</li>
<li><a href="numerical.html#module-numerical.ode">numerical.ode (module)</a>
</li>
<li><a href="numerical.html#module-numerical.ode_model">numerical.ode_model (module)</a>
</li>
</ul></td>
</tr></table>
<h2 id="O">O</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#module-ode">ode (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#module-ode_model">ode_model (module)</a>
</li>
</ul></td>
</tr></table>
@@ -210,12 +241,6 @@
<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver.html#module-solver">solver (module)</a>, <a href="solver.html#module-solver">[1]</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="solver_model.html#module-solver_model">solver_model (module)</a>, <a href="solver_model.html#module-solver_model">[1]</a>
</li>
<li><a href="geometry.html#geometry.square">square() (in module geometry)</a>
</li>
</ul></td>
@@ -225,6 +250,10 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="geometry.html#geometry.translate">translate() (in module geometry)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#numerical.integration.trapez">trapez() (in module numerical.integration)</a>
</li>
</ul></td>
</tr></table>

View File

@@ -42,7 +42,7 @@
</dl>
<span class="target" id="module-geometry"></span><dl class="function">
<dt id="geometry.cubic">
<code class="descname">cubic</code><span class="sig-paren">(</span><em>point1</em>, <em>angle1</em>, <em>point2</em>, <em>angle2</em>, <em>samples=50</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.cubic" title="Permalink to this definition"></a></dt>
<code class="descname">cubic</code><span class="sig-paren">(</span><em>point1</em>, <em>angle1</em>, <em>point2</em>, <em>angle2</em>, <em>samples=50</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#cubic"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.cubic" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
@@ -65,7 +65,7 @@
<dl class="function">
<dt id="geometry.cubic_deg">
<code class="descname">cubic_deg</code><span class="sig-paren">(</span><em>point1</em>, <em>angle1</em>, <em>point2</em>, <em>angle2</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.cubic_deg" title="Permalink to this definition"></a></dt>
<code class="descname">cubic_deg</code><span class="sig-paren">(</span><em>point1</em>, <em>angle1</em>, <em>point2</em>, <em>angle2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#cubic_deg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.cubic_deg" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
@@ -91,7 +91,7 @@
<dl class="function">
<dt id="geometry.line">
<code class="descname">line</code><span class="sig-paren">(</span><em>point1</em>, <em>point2</em>, <em>samples=2</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.line" title="Permalink to this definition"></a></dt>
<code class="descname">line</code><span class="sig-paren">(</span><em>point1</em>, <em>point2</em>, <em>samples=2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.line" title="Permalink to this definition"></a></dt>
<dd><div class="math notranslate nohighlight">
\[y = \frac{y_2-y_1}{x_2-x_1}(x-x_1) + y_1\]</div>
<dl class="field-list simple">
@@ -115,7 +115,7 @@
<dl class="function">
<dt id="geometry.points">
<code class="descname">points</code><span class="sig-paren">(</span><em>*pts</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.points" title="Permalink to this definition"></a></dt>
<code class="descname">points</code><span class="sig-paren">(</span><em>*pts</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#points"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.points" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>*pts</strong> points to rearrange</p>
@@ -131,7 +131,7 @@
<dl class="function">
<dt id="geometry.rectangle">
<code class="descname">rectangle</code><span class="sig-paren">(</span><em>width</em>, <em>height</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rectangle" title="Permalink to this definition"></a></dt>
<code class="descname">rectangle</code><span class="sig-paren">(</span><em>width</em>, <em>height</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#rectangle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.rectangle" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
@@ -150,7 +150,7 @@
<dl class="function">
<dt id="geometry.rotate">
<code class="descname">rotate</code><span class="sig-paren">(</span><em>origin</em>, <em>angle</em>, <em>*pts</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rotate" title="Permalink to this definition"></a></dt>
<code class="descname">rotate</code><span class="sig-paren">(</span><em>origin</em>, <em>angle</em>, <em>*pts</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#rotate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.rotate" title="Permalink to this definition"></a></dt>
<dd><p>Rotate a point or polygon counterclockwise by a given angle around a given
origin. The angle should be given in radians.</p>
<dl class="field-list simple">
@@ -173,7 +173,7 @@ origin. The angle should be given in radians.</p>
<dl class="function">
<dt id="geometry.rotate_deg">
<code class="descname">rotate_deg</code><span class="sig-paren">(</span><em>origin</em>, <em>angle</em>, <em>*pts</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.rotate_deg" title="Permalink to this definition"></a></dt>
<code class="descname">rotate_deg</code><span class="sig-paren">(</span><em>origin</em>, <em>angle</em>, <em>*pts</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#rotate_deg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.rotate_deg" title="Permalink to this definition"></a></dt>
<dd><p>Rotate a point or polygon counterclockwise by a given angle around a given
origin. The angle should be given in degrees.</p>
<dl class="field-list simple">
@@ -200,7 +200,7 @@ origin. The angle should be given in degrees.</p>
<dl class="function">
<dt id="geometry.square">
<code class="descname">square</code><span class="sig-paren">(</span><em>width</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.square" title="Permalink to this definition"></a></dt>
<code class="descname">square</code><span class="sig-paren">(</span><em>width</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#square"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.square" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>width</strong> (<em>int</em><em> or </em><em>float</em>) the edge size of the square</p>
@@ -220,7 +220,7 @@ origin. The angle should be given in degrees.</p>
<dl class="function">
<dt id="geometry.translate">
<code class="descname">translate</code><span class="sig-paren">(</span><em>vec</em>, <em>*pts</em><span class="sig-paren">)</span><a class="headerlink" href="#geometry.translate" title="Permalink to this definition"></a></dt>
<code class="descname">translate</code><span class="sig-paren">(</span><em>vec</em>, <em>*pts</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/geometry.html#translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#geometry.translate" title="Permalink to this definition"></a></dt>
<dd><p>Translate a point or polygon by a given vector.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>

View File

@@ -38,10 +38,16 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="data.html">data module</a></li>
<li class="toctree-l1"><a class="reference internal" href="date.html">date module</a></li>
<li class="toctree-l1"><a class="reference internal" href="fit.html">fit module</a></li>
<li class="toctree-l1"><a class="reference internal" href="geometry.html">geometry module</a></li>
<li class="toctree-l1"><a class="reference internal" href="solver.html">solver module</a></li>
<li class="toctree-l1"><a class="reference internal" href="solver_model.html">solver_model module</a></li>
<li class="toctree-l1"><a class="reference internal" href="numerical.html">numerical package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical.fit">numerical.fit module</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical.integration">numerical.integration module</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical.ode">numerical.ode module</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical.ode_model">numerical.ode_model module</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>

586
docs/build/html/numerical.html vendored Normal file
View File

@@ -0,0 +1,586 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>numerical package &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="numerical-package">
<h1>numerical package<a class="headerlink" href="#numerical-package" title="Permalink to this headline"></a></h1>
<div class="section" id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="module-numerical.fit">
<span id="numerical-fit-module"></span><h2>numerical.fit module<a class="headerlink" href="#module-numerical.fit" title="Permalink to this headline"></a></h2>
<p>Function and approximation.</p>
<span class="target" id="module-fit"></span><dl class="function">
<dt id="numerical.fit.gauss">
<code class="descname">gauss</code><span class="sig-paren">(</span><em>x</em>, <em>*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/fit.html#gauss"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.fit.gauss" title="Permalink to this definition"></a></dt>
<dd><p>Gauss distribution function.</p>
<div class="math notranslate nohighlight">
\[f(x)=ae^{-(x-b)^{2}/(2c^{2})}\]</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions where the gauss function will be calculated</p></li>
<li><p><strong>p</strong> (<em>list</em>) <p>gauss parameters [a, b, c, d]:</p>
<ul>
<li><p>a amplitude (<span class="math notranslate nohighlight">\(\int y \,\mathrm{d}x=1 \Leftrightarrow a=1/(c\sqrt{2\pi})\)</span> )</p></li>
<li><p>b expected value <span class="math notranslate nohighlight">\(\mu\)</span> (position of maximum, default = 0)</p></li>
<li><p>c standard deviation <span class="math notranslate nohighlight">\(\sigma\)</span> (variance <span class="math notranslate nohighlight">\(\sigma^2=c^2\)</span>)</p></li>
<li><p>d vertical offset (default = 0)</p></li>
</ul>
</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>gauss values at given positions x</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>numpy.ndarray</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="numerical.fit.gauss_fit">
<code class="descname">gauss_fit</code><span class="sig-paren">(</span><em>x</em>, <em>y</em>, <em>e=None</em>, <em>x_fit=None</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/fit.html#gauss_fit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.fit.gauss_fit" title="Permalink to this definition"></a></dt>
<dd><p>Fit Gauss distribution function to data.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions</p></li>
<li><p><strong>y</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) values</p></li>
<li><p><strong>e</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) error values (default = None)</p></li>
<li><p><strong>x_fit</strong> (<em>int</em><em> or </em><em>float</em><em> or </em><em>list</em><em> or </em><em>numpy.ndarray</em>) positions of fitted function (default = None, if None then x
is used)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) verbose information (default = False)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><ul class="simple">
<li><p>numpy.ndarray fitted values (y_fit)</p></li>
<li><p>numpy.ndarray parameters of gauss distribution function (popt:
amplitude a, expected value <span class="math notranslate nohighlight">\(\mu\)</span>, standard deviation
<span class="math notranslate nohighlight">\(\sigma\)</span>, vertical offset d)</p></li>
<li><p>numpy.float64 full width at half maximum (FWHM)</p></li>
</ul>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#numerical.fit.gauss" title="numerical.fit.gauss"><code class="xref py py-meth docutils literal notranslate"><span class="pre">gauss()</span></code></a></p>
</div>
</dd></dl>
</div>
<div class="section" id="module-numerical.integration">
<span id="numerical-integration-module"></span><h2>numerical.integration module<a class="headerlink" href="#module-numerical.integration" title="Permalink to this headline"></a></h2>
<p>Numerical integration, numerical quadrature.</p>
<p>de: numerische Integration, numerische Quadratur.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2015-10-15</p>
</dd>
</dl>
<span class="target" id="module-integration"></span><dl class="function">
<dt id="numerical.integration.trapez">
<code class="descname">trapez</code><span class="sig-paren">(</span><em>f</em>, <em>a=0</em>, <em>b=1</em>, <em>N=10</em>, <em>x=None</em>, <em>verbose=False</em>, <em>save_values=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/integration.html#trapez"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.integration.trapez" title="Permalink to this definition"></a></dt>
<dd><p>Integration of <span class="math notranslate nohighlight">\(f(x)\)</span> using the trapezoidal rule
(Simpsons rule, Keplers rule).</p>
<p>de: Trapezregel, Simpsonregel (Thomas Simpson), Keplersche
Fassregel (Johannes Kepler)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em><em> or </em><em>list</em>) function to integrate.</p></li>
<li><p><strong>a</strong> (<em>float</em>) lower limit of integration (default = 0).</p></li>
<li><p><strong>b</strong> (<em>float</em>) upper limit of integration (default = 1).</p></li>
<li><p><strong>N</strong> (<em>int</em>) specify the number of subintervals.</p></li>
<li><p><strong>x</strong> (<em>list</em>) variable of integration, necessary if f is a list
(default = None).</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>the definite integral as approximated by trapezoidal
rule.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>float</p>
</dd>
</dl>
<p>The trapezoidal rule approximates the integral by the area of a
trapezoid with base h=b-a and sides equal to the values of the
integrand at the two end points.</p>
<div class="math notranslate nohighlight">
\[f_n(x) = f(a)+\frac{f(b)-f(a)}{b-a}(x-a)\]</div>
<div class="math notranslate nohighlight">
\[\begin{split}I &amp;= \int\limits_a^b f(x) \,\mathrm{d}x \\
I &amp;\approx \int\limits_a^b f_n(x) \,\mathrm{d}x \\
&amp;= \int\limits_a^b
\left( f(a)+\frac{f(b)-f(a)}{b-a}(x-a) \right)
\mathrm{d}x \\
&amp;= \left.\left( f(a)-a\frac{f(b)-f(a)}{b-a} \right)
x \right\vert_a^b +
\left. \frac{f(b)-f(a)}{b-a} \frac{x^2}{2}
\right\vert_a^b \\
&amp;= \frac{b-a}{2}\left[f(a)+f(b)\right]\end{split}\]</div>
<p>The composite trapezium rule. If the interval is divided into n
segments (not necessarily equal)</p>
<div class="math notranslate nohighlight">
\[a = x_0 \leq x_1 \leq x_2 \leq \ldots \leq x_n = b\]</div>
<div class="math notranslate nohighlight">
\[\begin{split}I &amp;\approx \sum\limits_{i=0}^{n-1} \frac{1}{2} (x_{i+1}-x_i)
\left[f(x_{i+1})+f(x_i)\right] \\\end{split}\]</div>
<p>Special Case (Equaliy spaced base points)</p>
<div class="math notranslate nohighlight">
\[x_{i+1}-x_i = h \quad \forall i\]</div>
<div class="math notranslate nohighlight">
\[I \approx h \left\{ \frac{1}{2} \left[f(x_0)+f(x_n)\right] +
\sum\limits_{i=1}^{n-1} f(x_i) \right\}\]</div>
<p class="rubric">Example</p>
<div class="math notranslate nohighlight">
\[\begin{split}I &amp;= \int\limits_a^b f(x) \,\mathrm{d}x \\
f(x) &amp;= x^2 \\
a &amp;= 0 \\
b &amp;= 1\end{split}\]</div>
<p>analytical solution</p>
<div class="math notranslate nohighlight">
\[I = \int\limits_{0}^{1} x^2 \,\mathrm{d}x
= \left. \frac{1}{3} x^3 \right\vert_0^1
= \frac{1}{3}\]</div>
<p>numerical solution</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span><span class="p">(</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="gp">&gt;&gt;&gt; </span><span class="n">trapez</span><span class="p">(</span><span class="n">f</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">1</span><span class="p">)</span>
<span class="go">0.5</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">trapez</span><span class="p">(</span><span class="n">f</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">10</span><span class="p">)</span>
<span class="go">0.3350000000000001</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">trapez</span><span class="p">(</span><span class="n">f</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">100</span><span class="p">)</span>
<span class="go">0.33335000000000004</span>
</pre></div>
</div>
</dd></dl>
</div>
<div class="section" id="module-numerical.ode">
<span id="numerical-ode-module"></span><h2>numerical.ode module<a class="headerlink" href="#module-numerical.ode" title="Permalink to this headline"></a></h2>
<p>Numerical solver of ordinary differential equations.</p>
<p>Solves the initial value problem for systems of first order ordinary differential
equations.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2015-09-21</p>
</dd>
</dl>
<span class="target" id="module-ode"></span><dl class="function">
<dt id="numerical.ode.dxdt_Dt">
<code class="descname">dxdt_Dt</code><span class="sig-paren">(</span><em>f</em>, <em>x</em>, <em>t</em>, <em>Dt</em>, <em>*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#dxdt_Dt"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.dxdt_Dt" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) <span class="math notranslate nohighlight">\(f = \dot{x}\)</span></p></li>
<li><p><strong>Dt</strong> <span class="math notranslate nohighlight">\(\Delta{t}\)</span></p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><span class="math notranslate nohighlight">\(\Delta x = \dot{x} \Delta t\)</span></p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="numerical.ode.e1">
<code class="descname">e1</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#e1"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.e1" title="Permalink to this definition"></a></dt>
<dd><p>Explicit first-order method /
(standard, or forward) Euler method /
Runge-Kutta 1st order method.</p>
<p>de:
Eulersche Polygonzugverfahren / explizite Euler-Verfahren /
Euler-Cauchy-Verfahren / Euler-vorwärts-Verfahren</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
<p>Approximate the solution of the initial value problem</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x} &amp;= f(t,x) \\
x(t_0) &amp;= x_0\end{split}\]</div>
<p>Choose a value h for the size of every step and set</p>
<div class="math notranslate nohighlight">
\[t_i = t_0 + i h ~,\quad i=1,2,\ldots,n\]</div>
<p>The derivative of the solution is approximated as the forward difference
equation</p>
<div class="math notranslate nohighlight">
\[\dot{x}_i = f(t_i, x_i) = \frac{x_{i+1} - x_i}{t_{i+1}-t_i}\]</div>
<p>Therefore one step <span class="math notranslate nohighlight">\(h\)</span> of the Euler method from <span class="math notranslate nohighlight">\(t_i\)</span> to
<span class="math notranslate nohighlight">\(t_{i+1}\)</span> is</p>
<div class="math notranslate nohighlight">
\[\begin{split}x_{i+1} &amp;= x_i + (t_{i+1}-t_i) f(t_i, x_i) \\
x_{i+1} &amp;= x_i + h f(t_i, x_i) \\\end{split}\]</div>
<p>Example 1:</p>
<div class="math notranslate nohighlight">
\[\begin{split}m\ddot{u} + d\dot{u} + ku = f(t) \\
\ddot{u} = m^{-1}(f(t) - d\dot{u} - ku) \\\end{split}\]</div>
<p>with</p>
<div class="math notranslate nohighlight">
\[\begin{split}x_1 &amp;= u &amp;\quad \dot{x}_1 = \dot{u} = x_2 \\
x_2 &amp;= \dot{u} &amp;\quad \dot{x}_2 = \ddot{u} \\\end{split}\]</div>
<p>becomes</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x}_1 &amp;= x_2 \\
\dot{x}_2 &amp;= m^{-1}(f(t) - d x_2 - k x_1) \\\end{split}\]</div>
<p>or</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x} &amp;= f(t,x) \\
\begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &amp;=
\begin{bmatrix} x_2 \\ m^{-1}(f(t) - d x_2 - k x_1) \end{bmatrix} \\
&amp;=
\begin{bmatrix} 0 \\ m^{-1} f(t) \end{bmatrix} +
\begin{bmatrix} 0 &amp; 1 \\ -m^{-1} k &amp; -m^{-1} d \end{bmatrix}
\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}\end{split}\]</div>
<p>Example 2:</p>
<div class="math notranslate nohighlight">
\[\begin{split}m(u)\ddot{u} + d(u,\dot{u})\dot{u} + k(u)u = f(t) \\
\ddot{u} = m^{-1}(u)(f(t) - d(u,\dot{u})\dot{u} - k(u)u) \\\end{split}\]</div>
<p>with</p>
<div class="math notranslate nohighlight">
\[\begin{split}x_1 &amp;= u &amp;\quad \dot{x}_1 = \dot{u} = x_2 \\
x_2 &amp;= \dot{u} &amp;\quad \dot{x}_2 = \ddot{u} \\\end{split}\]</div>
<p>becomes</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x}_1 &amp;= x_2 \\
\dot{x}_2 &amp;= m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \\\end{split}\]</div>
<p>or</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x} &amp;= f(t,x) \\
\begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &amp;=
\begin{bmatrix} x_2 \\ m^{-1}(x_1)(f(t) - d(x_1,x_2) x_2 - k(x_1) x_1) \end{bmatrix} \\
&amp;=
\begin{bmatrix} 0 \\ m^{-1}(x_1) f(t) \end{bmatrix} +
\begin{bmatrix} 0 &amp; 1 \\ -m^{-1}(x_1) k(x_1) &amp; -m^{-1} d(x_1,x_2) \end{bmatrix}
\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}\end{split}\]</div>
<p>The Euler method is a first-order method,
which means that the local error (error per step) is proportional to the
square of the step size, and the global error (error at a given time) is
proportional to the step size.</p>
</dd></dl>
<dl class="function">
<dt id="numerical.ode.e2">
<code class="descname">e2</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#e2"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.e2" title="Permalink to this definition"></a></dt>
<dd><p>Explicit second-order method / Runge-Kutta 2nd order method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="numerical.ode.e4">
<code class="descname">e4</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#e4"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.e4" title="Permalink to this definition"></a></dt>
<dd><p>Explicit fourth-order method / Runge-Kutta 4th order method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="numerical.ode.fixed_point_iteration">
<code class="descname">fixed_point_iteration</code><span class="sig-paren">(</span><em>f</em>, <em>xi</em>, <em>t</em>, <em>max_iterations=1000</em>, <em>tol=1e-09</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#fixed_point_iteration"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.fixed_point_iteration" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to iterate <span class="math notranslate nohighlight">\(f = \Delta{x}(t)\)</span></p></li>
<li><p><strong>xi</strong> (<em>list</em>) initial condition <span class="math notranslate nohighlight">\(x_i\)</span></p></li>
<li><p><strong>t</strong> (<em>float</em>) time <span class="math notranslate nohighlight">\(t\)</span></p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>max_iterations</strong> (<em>int</em>) maximum number of iterations</p></li>
<li><p><strong>tol</strong> (<em>float</em>) tolerance against residuum (default = 1e-9)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><span class="math notranslate nohighlight">\(x_{i+1}\)</span></p>
</dd>
</dl>
<div class="math notranslate nohighlight">
\[x_{i+1} = x_i + \Delta x\]</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#numerical.ode.dxdt_Dt" title="numerical.ode.dxdt_Dt"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dxdt_Dt()</span></code></a> for <span class="math notranslate nohighlight">\(\Delta x\)</span></p>
</div>
</dd></dl>
<dl class="function">
<dt id="numerical.ode.i1">
<code class="descname">i1</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>max_iterations=1000</em>, <em>tol=1e-09</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#i1"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.i1" title="Permalink to this definition"></a></dt>
<dd><p>Implicite first-order method / backward Euler method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>max_iterations</strong> (<em>int</em>) maximum number of iterations</p></li>
<li><p><strong>tol</strong> (<em>float</em>) tolerance against residuum (default = 1e-9)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
<p>The backward Euler method has order one and is A-stable.</p>
</dd></dl>
<dl class="function">
<dt id="numerical.ode.i1n">
<code class="descname">i1n</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>t</em>, <em>*p</em>, <em>max_iterations=1000</em>, <em>tol=1e-09</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#i1n"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.i1n" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="numerical.ode.newmark_newtonraphson">
<code class="descname">newmark_newtonraphson</code><span class="sig-paren">(</span><em>f</em>, <em>x0</em>, <em>xp0</em>, <em>xpp0</em>, <em>t</em>, <em>*p</em>, <em>gamma=0.5</em>, <em>beta=0.25</em>, <em>max_iterations=1000</em>, <em>tol=1e-09</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#newmark_newtonraphson"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.newmark_newtonraphson" title="Permalink to this definition"></a></dt>
<dd><p>Newmark method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>xp0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>xpp0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>gamma</strong> (<em>float</em>) newmark parameter for velocity (default = 0.5)</p></li>
<li><p><strong>beta</strong> (<em>float</em>) newmark parameter for displacement (default = 0.25)</p></li>
<li><p><strong>max_iterations</strong> (<em>int</em>) maximum number of iterations</p></li>
<li><p><strong>tol</strong> (<em>float</em>) tolerance against residuum (default = 1e-9)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="numerical.ode.newmark_newtonraphson_rdk">
<code class="descname">newmark_newtonraphson_rdk</code><span class="sig-paren">(</span><em>fnm</em>, <em>x0</em>, <em>xp0</em>, <em>xpp0</em>, <em>t</em>, <em>*p</em>, <em>gamma=0.5</em>, <em>beta=0.25</em>, <em>maxIterations=1000</em>, <em>tol=1e-09</em>, <em>verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode.html#newmark_newtonraphson_rdk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode.newmark_newtonraphson_rdk" title="Permalink to this definition"></a></dt>
<dd><p>Newmark method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>f</strong> (<em>function</em>) the function to solve</p></li>
<li><p><strong>x0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>xp0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>xpp0</strong> (<em>list</em>) initial condition</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> parameters of the function (thickness, diameter, …)</p></li>
<li><p><strong>gamma</strong> (<em>float</em>) newmark parameter for velocity (default = 0.5)</p></li>
<li><p><strong>beta</strong> (<em>float</em>) newmark parameter for displacement (default = 0.25)</p></li>
<li><p><strong>max_iterations</strong> (<em>int</em>) maximum number of iterations</p></li>
<li><p><strong>tol</strong> (<em>float</em>) tolerance against residuum (default = 1e-9)</p></li>
<li><p><strong>verbose</strong> (<em>bool</em>) print information (default = False)</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="module-numerical.ode_model">
<span id="numerical-ode-model-module"></span><h2>numerical.ode_model module<a class="headerlink" href="#module-numerical.ode_model" title="Permalink to this headline"></a></h2>
<p>Mathmatical models governed by ordinary differential equations.</p>
<p>Describes initial value problems as systems of first order ordinary differential
equations.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-05-25</p>
</dd>
</dl>
<span class="target" id="module-ode_model"></span><dl class="function">
<dt id="numerical.ode_model.disk">
<code class="descname">disk</code><span class="sig-paren">(</span><em>x</em>, <em>t</em>, <em>*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode_model.html#disk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode_model.disk" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="numerical.ode_model.disk_nm">
<code class="descname">disk_nm</code><span class="sig-paren">(</span><em>xn</em>, <em>xpn</em>, <em>xppn</em>, <em>t</em>, <em>*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode_model.html#disk_nm"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode_model.disk_nm" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>xn</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>xpn</strong> (<em>list</em>) first derivative values of the function</p></li>
<li><p><strong>xppn</strong> (<em>list</em>) second derivative values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="numerical.ode_model.disk_nmmdk">
<code class="descname">disk_nmmdk</code><span class="sig-paren">(</span><em>xn</em>, <em>xpn</em>, <em>xppn</em>, <em>t</em>, <em>*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/numerical/ode_model.html#disk_nmmdk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#numerical.ode_model.disk_nmmdk" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>xn</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>xpn</strong> (<em>list</em>) derivative values of the function</p></li>
<li><p><strong>xppn</strong> (<em>list</em>) second derivative values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="module-numerical">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-numerical" title="Permalink to this headline"></a></h2>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.0.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/numerical.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -2,10 +2,6 @@
# Project: pylib
# Version:
# The remainder of this file is compressed using zlib.
xڥ<EFBFBD>Mr<EFBFBD> <10><>s
R<EFBFBD>VS<EFBFBD>++<2B> <20>T<EFBFBD>ʋ,)Zb~%<25><><EFBFBD><EFBFBD><EFBFBD><0F><><EFBFBD>$<24>A<1A><>xP<78><50>A<EFBFBD><41>^C<>Z<EFBFBD>yF<79>ӝ<EFBFBD>bP@<40><02><><EFBFBD><EFBFBD>m
5<EFBFBD>H<EFBFBD>;<07>U<><55>ȷ<EFBFBD><C8B7>^ZCn2E<32>:<3A>F<EFBFBD>[<07><59>F<EFBFBD>|7<><37><1B>3<EFBFBD>`0<>P<EFBFBD>ү<EFBFBD>.<2E><>t<EFBFBD>C<0F><>N
v<EFBFBD>Ƶ5[p<1C><><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><1F>ڨk<DAA8>Ӡ<EFBFBD><D3A0>z0x<><78><EFBFBD><EFBFBD><EFBFBD>u ϋ2<CF8B>XX<04> wa <0B><><EFBFBD><EFBFBD><EFBFBD>+<2B>[0X
ޝ<EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD>.|8H><3E>-UK<55>
<EFBFBD><EFBFBD>%J<1A><>{+<2B><>z<EFBFBD><01><>tjC
xڭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<14><><<3C>h<>! <0C><>4<14>0CA<43>Q<EFBFBD>cGD<17># <15>A<EFBFBD><41><EFBFBD>&< <09><>d<EFBFBD>d<EFBFBD>H<EFBFBD>4<EFBFBD>}<7D><><EFBFBD>f<EFBFBD><04><>L<EFBFBD>;mŬ<6D><C5AC>&"<18><><EFBFBD><EFBFBD>e2u<32>H<EFBFBD>Z<EFBFBD><5A><EFBFBD>*<2A>D<EFBFBD><44><EFBFBD>p/<2F>!<21>LQ<4C><0E>Q<EFBFBD><51><EFBFBD>mV3inQpY
<T
<EFBFBD> 9 N<><1D><17><19>=C<><43><07><1D><14>P<EFBFBD>kkZp<5A><70><EFBFBD><EFBFBD>Ϳ!<21><02>Q7X<37>AݖM`<<3C> <20>':H_<48><5F><EFBFBD><1A><>L]5s<04><><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>=<3D>7<EFBFBD>_<EFBFBD>P<EFBFBD><50>q*`<60><>(i<><69><EFBFBD><EFBFBD>4<1E>y<07>33<33><33><10><><EFBFBD><EFBFBD>l<EFBFBD>ۊƯ3s

View File

@@ -46,7 +46,9 @@
<a href="#cap-d"><strong>d</strong></a> |
<a href="#cap-f"><strong>f</strong></a> |
<a href="#cap-g"><strong>g</strong></a> |
<a href="#cap-s"><strong>s</strong></a>
<a href="#cap-i"><strong>i</strong></a> |
<a href="#cap-n"><strong>n</strong></a> |
<a href="#cap-o"><strong>o</strong></a>
</div>
<table class="indextable modindextable">
@@ -69,7 +71,7 @@
<tr>
<td></td>
<td>
<a href="fit.html#module-fit"><code class="xref">fit</code></a> <em>(*nix, Windows)</em></td><td>
<a href="numerical.html#module-fit"><code class="xref">fit</code></a> <em>(*nix, Windows)</em></td><td>
<em>Function and approximation.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-g"><td></td><td>
@@ -80,18 +82,61 @@
<a href="geometry.html#module-geometry"><code class="xref">geometry</code></a> <em>(*nix, Windows)</em></td><td>
<em>Geometry objects.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-s"><td></td><td>
<strong>s</strong></td><td></td></tr>
<tr class="cap" id="cap-i"><td></td><td>
<strong>i</strong></td><td></td></tr>
<tr>
<td></td>
<td>
<a href="solver.html#module-solver"><code class="xref">solver</code></a> <em>(*nix, Windows)</em></td><td>
<a href="numerical.html#module-integration"><code class="xref">integration</code></a> <em>(*nix, Windows)</em></td><td>
<em>Numerical integration.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-n"><td></td><td>
<strong>n</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
<td>
<a href="numerical.html#module-numerical"><code class="xref">numerical</code></a></td><td>
<em></em></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-2" style="display: none" alt="-" /></td>
<td>
<code class="xref">numerical</code></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
<a href="numerical.html#module-numerical.fit"><code class="xref">numerical.fit</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
<a href="numerical.html#module-numerical.integration"><code class="xref">numerical.integration</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
<a href="numerical.html#module-numerical.ode"><code class="xref">numerical.ode</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
<a href="numerical.html#module-numerical.ode_model"><code class="xref">numerical.ode_model</code></a></td><td>
<em></em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-o"><td></td><td>
<strong>o</strong></td><td></td></tr>
<tr>
<td></td>
<td>
<a href="numerical.html#module-ode"><code class="xref">ode</code></a> <em>(*nix, Windows)</em></td><td>
<em>Numerical solver.</em></td></tr>
<tr>
<td></td>
<td>
<a href="solver_model.html#module-solver_model"><code class="xref">solver_model</code></a> <em>(*nix, Windows)</em></td><td>
<em>Mechanical models.</em></td></tr>
<a href="numerical.html#module-ode_model"><code class="xref">ode_model</code></a> <em>(*nix, Windows)</em></td><td>
<em>Models of ordinary differential equations.</em></td></tr>
</table>

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

@@ -5,3 +5,9 @@
table.indextable tr.cap {
background-color: #333;
}
/* move doc link a bit up */
.viewcode-back {
float: right;
position: relative;
top: -1.5em;
}

View File

@@ -34,7 +34,8 @@ release = '2019.5.19'
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc'
'sphinx.ext.autodoc',
'sphinx.ext.viewcode',
]
# Add any paths that contain templates here, relative to this directory.
@@ -52,6 +53,7 @@ exclude_patterns = []
# a list of builtin themes.
#
html_theme = 'alabaster'
pygments_style = 'solarized-dark'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
@@ -66,6 +68,8 @@ html_theme_options = {
'base_bg': '#292b2e',
'base_text': '#b2b2b2',
'body_text': '#b2b2b2',
'viewcode_target_bg': '#292b2e',
'pre_bg': '#25272c',
'code_text': '#b2b2b2',
'code_hover': 'transparent',
'sidebar_text': '#b2b2b2',
@@ -76,6 +80,6 @@ html_theme_options = {
'highlight_bg': '#444F65',
'xref_bg': 'transparent',
'xref_border': 'transparent',
'seealso_bg': '#3c3c3c',
'seealso_bg': '#25272c',
'seealso_border': '#2C2C2C',
}

View File

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

View File

@@ -6,7 +6,5 @@ src
data
date
fit
geometry
solver
solver_model
numerical

46
docs/source/numerical.rst Normal file
View File

@@ -0,0 +1,46 @@
numerical package
=================
Submodules
----------
numerical.fit module
--------------------
.. automodule:: numerical.fit
:members:
:undoc-members:
:show-inheritance:
numerical.integration module
----------------------------
.. automodule:: numerical.integration
:members:
:undoc-members:
:show-inheritance:
numerical.ode module
--------------------
.. automodule:: numerical.ode
:members:
:undoc-members:
:show-inheritance:
numerical.ode\_model module
---------------------------
.. automodule:: numerical.ode_model
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: numerical
:members:
:undoc-members:
:show-inheritance:

View File

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

View File

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

View File

@@ -33,6 +33,7 @@ def data_read(file_name, x_column, y_column):
#print(filds)
x.append(float(fields[x_column]))
y.append(float(fields[y_column]))
file.close()
return x, y
def data_load(file_name, verbose=False):

View File

View File

@@ -9,9 +9,8 @@
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from __future__ import print_function
from pylab import array, argmax, subplot, plot, title, xlim, show, gradient, exp, sqrt, log, linspace
from pylab import array, argmax, gradient, exp, sqrt, log, linspace
from scipy.optimize import curve_fit
from data import *
def gauss(x, *p):
"""Gauss distribution function.
@@ -92,33 +91,5 @@ def gauss_fit(x, y, e=None, x_fit=None, verbose=False):
return y_fit, popt, FWHM
def main():
"""test function"""
file_name = "../tests/test_fit.dat"
x, y = data_read(file_name, 3, 2)
subplot(2,2,1)
plot(x, y, '.-')
subplot(2,2,2)
dx = x[1] - x[0]
dydx = gradient(y, dx) # central differences
x_fit = linspace(x[0], x[-1], 150 if len(x) < 50 else len(x)*3)
y_fit, popt, FWHM = gauss_fit(list(reversed(x)), list(reversed(dydx)), x_fit=x_fit, verbose=True) # x must increase!
plot(x, dydx, '.-')
plot(x_fit, y_fit, 'r:')
title('FWHM: %f' % FWHM)
subplot(2,2,3)
plot(x, y, '.-')
xlim(popt[1]-2*FWHM, popt[1]+2*FWHM)
subplot(2,2,4)
plot(x, dydx, '.-')
plot(x_fit, y_fit, 'r:')
xlim(popt[1]-2*FWHM, popt[1]+2*FWHM)
show()
if __name__ == "__main__":
main()
True

View File

@@ -0,0 +1,151 @@
# -*- coding: utf-8 -*-
"""Numerical integration, numerical quadrature.
de: numerische Integration, numerische Quadratur.
:Date: 2015-10-15
.. module:: integration
:platform: *nix, Windows
:synopsis: Numerical integration.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from __future__ import division
from numpy import linspace, trapz, zeros
def trapez(f, a=0, b=1, N=10, x=None, verbose=False,
save_values=False):
r"""
Integration of :math:`f(x)` using the trapezoidal rule
(Simpson's rule, Kepler's rule).
de: Trapezregel, Simpsonregel (Thomas Simpson), Keplersche
Fassregel (Johannes Kepler)
:param f: function to integrate.
:type f: function or list
:param a: lower limit of integration (default = 0).
:type a: float
:param b: upper limit of integration (default = 1).
:type b: float
:param N: specify the number of subintervals.
:type N: int
:param x: variable of integration, necessary if f is a list
(default = None).
:type x: list
:param verbose: print information (default = False)
:type verbose: bool
:returns: the definite integral as approximated by trapezoidal
rule.
:rtype: float
The trapezoidal rule approximates the integral by the area of a
trapezoid with base h=b-a and sides equal to the values of the
integrand at the two end points.
.. math::
f_n(x) = f(a)+\frac{f(b)-f(a)}{b-a}(x-a)
.. math::
I &= \int\limits_a^b f(x) \,\mathrm{d}x \\
I &\approx \int\limits_a^b f_n(x) \,\mathrm{d}x \\
&= \int\limits_a^b
\left( f(a)+\frac{f(b)-f(a)}{b-a}(x-a) \right)
\mathrm{d}x \\
&= \left.\left( f(a)-a\frac{f(b)-f(a)}{b-a} \right)
x \right\vert_a^b +
\left. \frac{f(b)-f(a)}{b-a} \frac{x^2}{2}
\right\vert_a^b \\
&= \frac{b-a}{2}\left[f(a)+f(b)\right]
The composite trapezium rule. If the interval is divided into n
segments (not necessarily equal)
.. math::
a = x_0 \leq x_1 \leq x_2 \leq \ldots \leq x_n = b
.. math::
I &\approx \sum\limits_{i=0}^{n-1} \frac{1}{2} (x_{i+1}-x_i)
\left[f(x_{i+1})+f(x_i)\right] \\
Special Case (Equaliy spaced base points)
.. math::
x_{i+1}-x_i = h \quad \forall i
.. math::
I \approx h \left\{ \frac{1}{2} \left[f(x_0)+f(x_n)\right] +
\sum\limits_{i=1}^{n-1} f(x_i) \right\}
.. rubric:: Example
.. math::
I &= \int\limits_a^b f(x) \,\mathrm{d}x \\
f(x) &= x^2 \\
a &= 0 \\
b &= 1
analytical solution
.. math::
I = \int\limits_{0}^{1} x^2 \,\mathrm{d}x
= \left. \frac{1}{3} x^3 \right\vert_0^1
= \frac{1}{3}
numerical solution
>>> f = lambda(x): x**2
>>> trapez(f, 0, 1, 1)
0.5
>>> trapez(f, 0, 1, 10)
0.3350000000000001
>>> trapez(f, 0, 1, 100)
0.33335000000000004
"""
N = int(N)
# f is function or list
if hasattr(f, '__call__'):
# h width of each subinterval
h = (b-a)/N
# x variable of integration
x = linspace(a, b, N+1)
if save_values:
# ff contribution from the points
ff = zeros((N+1))
for n in linspace(0, N, N+1):
ff[n] = f(x[n])
T = (ff[0]/2.+sum(ff[1:N])+ff[N]/2.)*h
else:
TL = f(x[0])
TR = f(x[N])
TI = 0
for n in range(1, N):
TI = TI + f(x[n])
T = (TL/2.+TI+TR/2.)*h
else:
N = len(f)-1
T = 0
for n in range(N):
T = T + (x[n+1]-x[n])/2*(f[n+1]+f[n])
if verbose:
print(T)
return T
if __name__ == '__main__':
func = lambda x: x**2
trapez(func, 0, 1, 1e6, verbose=True)
#print(trapz(func, linspace(0,1,10)))
trapez([0,1,4,9], x=[0,1,2,3], verbose=True)
#print(trapz([0,1,4,9]))
trapez([2,2], x=[-1,1], verbose=True)
trapez([-1,1,1,-1], x=[-1,-1,1,1], verbose=True)

View File

@@ -7,7 +7,7 @@ equations.
:Date: 2015-09-21
.. module:: solver
.. module:: ode
:platform: *nix, Windows
:synopsis: Numerical solver.
@@ -48,7 +48,14 @@ def e1(f, x0, t, *p, verbose=False):
.. math ::
t_i = t_0 + i h ~,\quad i=1,2,\ldots,n
One step :math:`h` of the Euler method from :math:`t_i` to :math:`t_{i+1}` is
The derivative of the solution is approximated as the forward difference
equation
.. math ::
\dot{x}_i = f(t_i, x_i) = \frac{x_{i+1} - x_i}{t_{i+1}-t_i}
Therefore one step :math:`h` of the Euler method from :math:`t_i` to
:math:`t_{i+1}` is
.. math ::
x_{i+1} &= x_i + (t_{i+1}-t_i) f(t_i, x_i) \\
@@ -76,7 +83,7 @@ def e1(f, x0, t, *p, verbose=False):
.. math ::
\dot{x} &= f(t,x) \\
\begin{bmatrix} \dot{x}_1 \\ \dot{x}_1 \end{bmatrix} &=
\begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} &=
\begin{bmatrix} x_2 \\ m^{-1}(f(t) - d x_2 - k x_1) \end{bmatrix} \\
&=
\begin{bmatrix} 0 \\ m^{-1} f(t) \end{bmatrix} +
@@ -118,8 +125,8 @@ def e1(f, x0, t, *p, verbose=False):
proportional to the step size.
"""
x = zeros((len(t), len(x0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
for i in range(len(t)-1):
x[0,:] = x0 # Initial condition gives solution at first t
for i in range(len(t)-1): # Calculation loop
Dt = t[i+1]-t[i]
dxdt = array(f(x[i,:], t[i], *p))
x[i+1,:] = x[i,:] + dxdt*Dt # Approximate solution at next value of x
@@ -140,13 +147,13 @@ def e2(f, x0, t, *p, verbose=False):
:param verbose: print information (default = False)
:type verbose: bool
"""
x = zeros((len(t), len(x0)))
x[0,:] = x0 # initial condition
for i in range(len(t)-1): # calculation loop
x = zeros((len(t), len(x0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at first t
for i in range(len(t)-1): # Calculation loop
Dt = t[i+1]-t[i]
k_1 = array(f(x[i,:], t[i], *p))
k_2 = array(f(x[i,:]+0.5*Dt*k_1, t[i]+0.5*Dt, *p))
x[i+1,:] = x[i,:] + k_2*Dt # main equation
x[i+1,:] = x[i,:] + k_2*Dt # Approximate solution at next value of x
if verbose:
print('Numerical integration of ODE using explicit 2th-order method (Runge-Kutta) was successful.')
return x
@@ -165,18 +172,76 @@ def e4(f, x0, t, *p, verbose=False):
:type verbose: bool
"""
x = zeros((len(t), len(x0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
for i in range(len(t)-1): # calculation loop
x[0,:] = x0 # Initial condition
for i in range(len(t)-1): # Calculation loop
Dt = t[i+1]-t[i]
k_1 = array(f(x[i,:], t[i], *p))
k_2 = array(f(x[i,:]+0.5*Dt*k_1, t[i]+0.5*Dt, *p))
k_3 = array(f(x[i,:]+0.5*Dt*k_2, t[i]+0.5*Dt, *p))
k_4 = array(f(x[i,:]+k_3*Dt, t[i]+Dt, *p))
x[i+1,:] = x[i,:] + 1./6*(k_1+2*k_2+2*k_3+k_4)*Dt # main equation
x[i+1,:] = x[i,:] + 1./6*(k_1+2*k_2+2*k_3+k_4)*Dt # Approximate solution at next value of x
if verbose:
print('Numerical integration of ODE using explicit 4th-order method (Runge-Kutta) was successful.')
return x
def dxdt_Dt(f, x, t, Dt, *p):
r"""
:param f: :math:`f = \dot{x}`
:type f: function
:param Dt: :math:`\Delta{t}`
:returns: :math:`\Delta x = \dot{x} \Delta t`
"""
return array(dxdt(x, t, *p)) * Dt
def fixed_point_iteration(f, xi, t, max_iterations=1000, tol=1e-9, verbose=False):
r"""
:param f: the function to iterate :math:`f = \Delta{x}(t)`
:type f: function
:param xi: initial condition :math:`x_i`
:type xi: list
:param t: time :math:`t`
:type t: float
:param `*p`: parameters of the function (thickness, diameter, ...)
:param max_iterations: maximum number of iterations
:type max_iterations: int
:param tol: tolerance against residuum (default = 1e-9)
:type tol: float
:param verbose: print information (default = False)
:type verbose: bool
:returns: :math:`x_{i+1}`
.. math ::
x_{i+1} = x_i + \Delta x
.. seealso::
:meth:`dxdt_Dt` for :math:`\Delta x`
"""
xi = x0
for j in range(max_iterations): # Fixed-point iteration
Dx = array(f(xi, t, *p))
xi1 = x0 + Dx # Approximate solution at next value of x
residuum = norm(xi1-xi)/norm(xi1)
xi = xi1
if residuum < tol:
break
iterations = j+1 # number beginning with 1 therefore + 1
return xi, iterations
def i1n(f, x0, t, *p, max_iterations=1000, tol=1e-9, verbose=False):
iterations = zeros((len(t), 1))
x = zeros((len(t), len(x0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at first t
for i in range(len(t)-1):
Dt = t[i+1]-t[i]
xi = x[i,:]
Dx = dxdt_Dt(f, xi, t[i+1], Dt, *p)
x[i+1,:], iterations[i] = fixed_point_iteration(Dx, xi, t, max_iterations, tol, verbose)
if verbose:
print('Numerical integration of ODE using implicite first-order method (Euler) was successful.')
return x, iterations
def i1(f, x0, t, *p, max_iterations=1000, tol=1e-9, verbose=False):
r"""Implicite first-order method / backward Euler method.
@@ -198,19 +263,21 @@ def i1(f, x0, t, *p, max_iterations=1000, tol=1e-9, verbose=False):
"""
iterations = zeros((len(t), 1))
x = zeros((len(t), len(x0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
x[0,:] = x0 # Initial condition gives solution at first t
for i in range(len(t)-1):
Dt = t[i+1]-t[i]
x1 = x[i,:]
for j in range(max_iterations): # fixed-point iteration
dxdt = array(f(x1, t[i+1], *p))
x11 = x[i,:] + dxdt*Dt # Approximate solution at next value of x
residuum = norm(x11-x1)/norm(x11)
x1 = x11
xi = x[i,:]
# x(i+1) = x(i) + f(x(i+1), t(i+1)), exact value of f(x(i+1), t(i+1)) is not
# available therefor using Newton-Raphson method
for j in range(max_iterations): # Fixed-point iteration
dxdt = array(f(xi, t[i+1], *p))
xi1 = x[i,:] + dxdt*Dt # Approximate solution at next value of x
residuum = norm(xi1-xi)/norm(xi1)
xi = xi1
if residuum < tol:
break
iterations[i] = j+1
x[i+1,:] = x1
x[i+1,:] = xi
if verbose:
print('Numerical integration of ODE using implicite first-order method (Euler) was successful.')
return x, iterations
@@ -244,9 +311,9 @@ def newmark_newtonraphson(f, x0, xp0, xpp0, t, *p, gamma=.5, beta=.25, max_itera
x = zeros((len(t), len(x0))) # Preallocate array
xp = zeros((len(t), len(xp0))) # Preallocate array
xpp = zeros((len(t), len(xpp0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
xp[0,:] = xp0 # Initial condition gives solution at t=0.
xpp[0,:] = xpp0 # Initial condition gives solution at t=0.
x[0,:] = x0 # Initial condition gives solution at first t
xp[0,:] = xp0 # Initial condition gives solution at first t
xpp[0,:] = xpp0 # Initial condition gives solution at first t
for i in range(len(t)-1):
Dt = t[i+1]-t[i]
@@ -257,7 +324,7 @@ def newmark_newtonraphson(f, x0, xp0, xpp0, t, *p, gamma=.5, beta=.25, max_itera
xp1 = xpi
xpp1 = xppi
j = 0
for j in range(max_iterations): # fixed-point iteration
for j in range(max_iterations): # Fixed-point iteration
#dxdt = array(f(t[i+1], x1, p))
#x11 = x[i,:] + dxdt*Dt # Approximate solution at next value of x
@@ -315,9 +382,9 @@ def newmark_newtonraphson_rdk(fnm, x0, xp0, xpp0, t, *p, gamma=.5, beta=.25, max
x = zeros((len(t), len(x0))) # Preallocate array
xp = zeros((len(t), len(xp0))) # Preallocate array
xpp = zeros((len(t), len(xpp0))) # Preallocate array
x[0,:] = x0 # Initial condition gives solution at t=0.
xp[0,:] = xp0 # Initial condition gives solution at t=0.
xpp[0,:] = xpp0 # Initial condition gives solution at t=0.
x[0,:] = x0 # Initial condition gives solution at first t
xp[0,:] = xp0 # Initial condition gives solution at first t
xpp[0,:] = xpp0 # Initial condition gives solution at first t
for i in range(len(t)-1):
Dt = t[i+1]-t[i]
@@ -330,7 +397,7 @@ def newmark_newtonraphson_rdk(fnm, x0, xp0, xpp0, t, *p, gamma=.5, beta=.25, max
xp1 = xpi
xpp1 = xppi
j = 0
for j in range(maxIterations): # fixed-point iteration
for j in range(maxIterations): # Fixed-point iteration
#dxdt = array(f(t[i+1], x1, p))
#x11 = x[i,:] + dxdt*Dt # Approximate solution at next value of x

View File

@@ -7,9 +7,9 @@ equations.
:Date: 2019-05-25
.. module:: solver_model
.. module:: ode_model
:platform: *nix, Windows
:synopsis: Mechanical models.
:synopsis: Models of ordinary differential equations.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
@@ -117,4 +117,4 @@ def disk_nmmdk(xn, xpn, xppn, t, *p):
return rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f
if __name__ == '__main__':
0
True

View File

@@ -1,15 +1,53 @@
"""Test of fit module.
:Date: 2019-05-29
.. module:: test_fit
:platform: *nix, Windows
:synopsis: Test of fit module.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
import unittest
import os
import sys
from pylab import array, argmax, subplot, plot, title, xlim, show, gradient, linspace
sys.path.insert(0, os.path.abspath('../src'))
import fit
from data import data_read
from numerical.fit import gauss_fit
class TestFit(unittest.TestCase):
def test_property(self):
self.assertEqual()
def test_gauss(self):
"""test function"""
file_name = "test_fit.dat"
x, y = data_read(file_name, 3, 2)
subplot(2,2,1)
plot(x, y, '.-')
subplot(2,2,2)
dx = x[1] - x[0]
dydx = gradient(y, dx) # central differences
x_fit = linspace(x[0], x[-1], 150 if len(x) < 50 else len(x)*3)
y_fit, popt, FWHM = gauss_fit(list(reversed(x)), list(reversed(dydx)), x_fit=x_fit, verbose=True) # x must increase!
plot(x, dydx, '.-')
plot(x_fit, y_fit, 'r:')
title('FWHM: %f' % FWHM)
subplot(2,2,3)
plot(x, y, '.-')
xlim(popt[1]-2*FWHM, popt[1]+2*FWHM)
subplot(2,2,4)
plot(x, dydx, '.-')
plot(x_fit, y_fit, 'r:')
xlim(popt[1]-2*FWHM, popt[1]+2*FWHM)
show()
self.assertEqual(FWHM, 0.12975107355013618)
if __name__ == '__main__':

View File

@@ -1,30 +1,28 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Numerical solver.
"""Test of numerical solver.
:Date: 2019-05-25
.. module:: solver
.. module:: test_ode
:platform: *nix, Windows
:synopsis: Numerical solver.
:synopsis: Test of numerical solver.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from __future__ import division, print_function
import unittest
import math
from numpy import linspace, allclose
from numpy import linspace, allclose, sqrt, square, concatenate
from numpy.linalg import inv
from matplotlib.pyplot import figure, subplots, plot, show
import os
import sys
sys.path.insert(0, os.path.abspath('../src'))
import solver
import solver_model
#### Post processing
from matplotlib.pyplot import figure, subplots, plot, show
from numpy import sqrt, square, concatenate
from numerical.ode import (e1, e2, e4, i1, newmark_newtonraphson,
newmark_newtonraphson_rdk)
from numerical.ode_model import disk, disk_nm, disk_nmmdk
def plotx1rphi(x, t, title):
"""Plot plane rotation (x, y, phi)
@@ -54,12 +52,12 @@ def plotx1rphi(x, t, title):
if max(xp3) < 2:
ax2.set_ylim([0,2])
f = solver_model.disk
fnm = solver_model.disk_nm
fnmmdk = solver_model.disk_nmmdk
f = disk
fnm = disk_nm
fnmmdk = disk_nmmdk
class TestSolver(unittest.TestCase):
class TestODE(unittest.TestCase):
Dt = .01 # Delta t
tend = .1 # t_end
@@ -70,20 +68,22 @@ class TestSolver(unittest.TestCase):
p = .01, .002, .015 # parameter of the model
def test_e1(self):
xe1 = solver.e1(f, self.x0, self.t, *self.p)
#plotx1rphi(xe1, self.t, ("Euler (Runge-Kutta 1th order), increments: %d" % self.nt))
xe1 = e1(f, self.x0, self.t, *self.p)
#plotx1rphi(xe1, self.t, ("Euler (Runge-Kutta 1th order),
# increments: %d" % self.nt))
#show()
self.assertTrue(allclose(xe1[:, 5],
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009, 0.00105, 0.0012,
0.00135, 0.0015 ]))
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009,
0.00105, 0.0012, 0.00135, 0.0015 ]))
Dt_2 = Dt/5.
nt_2 = math.ceil(tend/Dt_2)
t_2 = linspace(0., tend, nt_2+1)
def test_e1_2(self):
xe1_2 = solver.e1(f, self.x0, self.t_2, *self.p)
#plotx1rphi(xe1_2, self.t_2, ("Euler (Runge-Kutta 1th order), increments: %d" % self.nt_2))
xe1_2 = e1(f, self.x0, self.t_2, *self.p)
#plotx1rphi(xe1_2, self.t_2, ("Euler (Runge-Kutta 1th order),
# increments: %d" % self.nt_2))
#show()
self.assertTrue(allclose(xe1_2[:, 5],
[0.00000000e+00, 3.00000000e-05, 6.00000000e-05, 8.99999998e-05,
@@ -105,40 +105,45 @@ class TestSolver(unittest.TestCase):
tol = 1e-9 # against residuum
def test_e2(self):
xe2 = solver.e2(f, self.x0, self.t, *self.p)
#plotx1rphi(xe2, self.t, ("Runge-Kutta 2th order, increments: %d" % self.nt))
xe2 = e2(f, self.x0, self.t, *self.p)
#plotx1rphi(xe2, self.t, ("Runge-Kutta 2th order,
# increments: %d" % self.nt))
#show()
self.assertTrue(allclose(xe2[:, 5],
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009, 0.00105, 0.0012,
0.00135, 0.0015 ]))
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009,
0.00105, 0.0012, 0.00135, 0.0015 ]))
def test_e4(self):
xe4 = solver.e4(f, self.x0, self.t, *self.p)
#plotx1rphi(xe4, self.t, ("Runge-Kutta 4th order, increments: %d" % self.nt))
xe4 = e4(f, self.x0, self.t, *self.p)
#plotx1rphi(xe4, self.t, ("Runge-Kutta 4th order,
# increments: %d" % self.nt))
#show()
self.assertTrue(allclose(xe4[:, 5],
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009, 0.00105, 0.0012,
0.00135, 0.0015 ]))
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009,
0.00105, 0.0012, 0.00135, 0.0015 ]))
def test_i1(self):
xi1, iterations = solver.i1(f, self.x0, self.t, *self.p, self.maxIterations, self.tol)
#plotx1rphi(xi1, self.t, ("Backward Euler, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
xi1, iterations = i1(f, self.x0, self.t, *self.p,
self.maxIterations, self.tol)
#plotx1rphi(xi1, self.t, ("Backward Euler, increments: %d,
# iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(xi1[:, 5],
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009, 0.00105, 0.0012,
0.00135, 0.0015 ]))
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009,
0.00105, 0.0012, 0.00135, 0.0015 ]))
gamma = .5 # newmark parameter for velocity
beta = .25 # newmark parameter for displacement
def test_nm(self):
xnm, xpnm, xppnm, iterations = solver.newmark_newtonraphson(fnm,
xnm, xpnm, xppnm, iterations = newmark_newtonraphson(fnm,
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
self.gamma, self.beta, 1, self.tol)
#print(xnm)
#print(xpnm)
x = concatenate((xnm, xpnm), axis=1)
#plotx1rphi(x, self.t, ("Newmark, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#plotx1rphi(x, self.t, ("Newmark, increments: %d,
# iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(x[:, 5],
[0.00000000e+00, 7.49999925e-05, 2.24999951e-04, 3.74999839e-04,
@@ -147,13 +152,14 @@ class TestSolver(unittest.TestCase):
))
def test_nm_2(self):
xnm, xpnm, xppnm, iterations = solver.newmark_newtonraphson(fnm,
xnm, xpnm, xppnm, iterations = newmark_newtonraphson(fnm,
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
self.gamma, self.beta, self.maxIterations, self.tol)
#print(xnm)
#print(xpnm)
x = concatenate((xnm, xpnm), axis=1)
#plotx1rphi(x, self.t, ("Newmark, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#plotx1rphi(x, self.t, ("Newmark, increments: %d,
# iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(x[:, 5],
[0.00000000e+00, 7.49999925e-05, 2.24999951e-04, 3.74999839e-04,
@@ -162,13 +168,14 @@ class TestSolver(unittest.TestCase):
))
def test_nmmdk(self):
xnm, xpnm, xppnm, iterations = solver.newmark_newtonraphson_rdk(fnmmdk,
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
xnm, xpnm, xppnm, iterations = newmark_newtonraphson_rdk(
fnmmdk, (0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
self.gamma, self.beta, 1, self.tol)
#print(xnm)
#print(xpnm)
x = concatenate((xnm, xpnm), axis=1)
#plotx1rphi(x, self.t, ("Newmark, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#plotx1rphi(x, self.t, ("Newmark, increments: %d,
# iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(x[:, 5],
[0.00000000e+00, 7.49999963e-05, 2.24999974e-04, 3.74999906e-04,
@@ -177,13 +184,14 @@ class TestSolver(unittest.TestCase):
))
def test_nmmdk_2(self):
xnm, xpnm, xppnm, iterations = solver.newmark_newtonraphson_rdk(fnmmdk,
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
xnm, xpnm, xppnm, iterations = newmark_newtonraphson_rdk(
fnmmdk, (0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
self.gamma, self.beta, 100, self.tol)
#print(xnm)
#print(xpnm)
x = concatenate((xnm, xpnm), axis=1)
#plotx1rphi(x, self.t, ("Newmark, increments: %d, iterations: %d" % (self.nt, sum(iterations))))
#plotx1rphi(x, self.t, ("Newmark, increments: %d,
# iterations: %d" % (self.nt, sum(iterations))))
#show()
self.assertTrue(allclose(x[:, 5],
[0.00000000e+00, 7.49999963e-05, 2.24999974e-04, 3.74999906e-04,
@@ -192,7 +200,7 @@ class TestSolver(unittest.TestCase):
))
#from scipy.integrate import odeint
#xode = odeint(solver_model.disk, x0, t, p, printmessg=True)
#xode = odeint(disk, x0, t, p, printmessg=True)
#plotx1rphi(xode, t, ("ODE, Inkremente: %d" % nt))
#show()