From b6d3c5c91bd9714de3bca098eb4c1648f83231e0 Mon Sep 17 00:00:00 2001
From: svoboj68 <svoboj68@fjfi.cvut.cz>
Date: Tue, 15 Feb 2022 17:18:42 +0100
Subject: [PATCH 1/4] WIP: pridan ntb s teorii k chybam

---
 README.md   |   5 +-
 chyby.ipynb | 267 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 271 insertions(+), 1 deletion(-)
 create mode 100644 chyby.ipynb

diff --git a/README.md b/README.md
index 4f932b6..04f44c2 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@ Výukový nastroj pro použití programovacího jazyka python při zpracování
 Využívá interaktviní prostředí pro python [jupyter notebook](https://jupyter.readthedocs.io/en/latest/install/notebook-classic.html).  
 Bývá součástí distribucí python jako například [annaconda](https://www.anaconda.com/products/individual).
 
-Obsah:
+Tutorialy:
  - základy práce s proměnnými v pythonu [prace_s_daty](prace_s_daty.ipynb)
     - indexování
     - načítání z txt
@@ -21,6 +21,9 @@ Obsah:
  - odvození vzorce pro chybu nepřímého měření pomoci symbolického počítání [symbolics](symbolics.ipynb)
  - vykreslení dvourozměrných dat [2D_grafy](2D_grafy.ipynb)
 
+Teorie:
+ - Chyby a rozdelovaci funkce [chyby](chyby.ipynb)
+
 Příklady:
  - [Extrapolace](Extrapolace.ipynb)
  - [Hobit](Hobit.ipynb)
diff --git a/chyby.ipynb b/chyby.ipynb
new file mode 100644
index 0000000..a5c0682
--- /dev/null
+++ b/chyby.ipynb
@@ -0,0 +1,267 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# NEDOKONCENO, muze obsahovat chyby"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Chyby statisticke, systematicke a rozdelovaci funkce"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "pri mereni se prirozene vykytuji chyby, tyto chyby se nedaji zcela ostranit a jejich vliv na mereni muze byt ruzny. Chyby delime na statisticke, systematicke a hrube, podle jejich puvodu pripadne vlivu na mereni\n",
+    "statisticke jsou nahodile nahodne se vyskytujici\n",
+    "systematicke jsou dane pouzitymi pristroji nebo metodou\n",
+    "hrube chyby jsou zpusobeny lidskym faktorem pripadne selhanim mericich pristroju\n",
+    "kazda  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "import numpy as np"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# TODO remove\n",
+    "np.random.seed(931031)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Rozdelovaci funkce\n",
+    "pokud se vyskytuje nekonecne mnoho malych nahodnych vlivu -> pravdepodobnost namereni urcite hodnoty se ridi normalnim rozdelenim.\n",
+    "\n",
+    "pravdepodobnost namereni hodnoty $p(x)$\n",
+    "$$ p(x) = \\frac{1}{\\sigma\\sqrt{2\\pi}} \\mathrm{e}^{ -\\frac{1}{2} \\left( \\frac{x - \\mu}{ \\sigma} \\right)^2 }$$\n",
+    "kde $\\mu$ je prumer a $\\sigma$ je rozptyl"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "mu = 100\n",
+    "sigma = 10"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "x = np.linspace(-4*sigma, 4*sigma, 101)\n",
+    "y = 1 / (sigma * (2 * np.pi)**0.5 ) * np.exp(-0.5 * x/sigma * x/sigma)\n",
+    "\n",
+    "plt.figure(dpi=100)\n",
+    "plt.plot(x+mu, y, label=r'$ \\frac{1}{10 \\sqrt{2\\pi}} \\mathrm{e}^{ -\\frac{1}{2} \\left( \\frac{x - 100}{10} \\right)^2} $')\n",
+    "plt.axvline(mu, c='k', lw=1, ls='--')\n",
+    "plt.xlabel('x [-]')\n",
+    "plt.ylabel('p(x) [-]')\n",
+    "plt.legend()\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# generovani 10000 vzorku s rozdelenim vyse\n",
+    "n = 10000\n",
+    "d1 = np.random.normal(mu, sigma, n)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# chybove intervaly\n",
+    "interval1 = (d1 < mu + sigma) * (d1 > mu - sigma)\n",
+    "interval2 = (d1 < mu + 2 * sigma) * (d1 > mu - 2 * sigma)\n",
+    "interval3 = (d1 < mu + 3 * sigma) * (d1 > mu - 3 * sigma)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# pravdepodobnosti s jakymi se vyskytuji vygenerovane hodnoty v chybovych intervalech\n",
+    "interval1.sum() / n, interval2.sum() / n, interval3.sum() / n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "67% hodnot v intervalu $\\pm\\sigma$, 99,7% hodnot v intervalu $\\pm 3 \\sigma$, s velkou pravdepodobnosti hodnoty mimo tento interval jsou dusledkem hrube chyby, lze je tedy vyradit ze zpracovani mereni"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.figure()\n",
+    "plt.hist(d1, bins=np.linspace(60, 140, 17), density=True)\n",
+    "plt.plot(x+mu, y, label='rozdelovaci fuknce')\n",
+    "plt.axvline(mu, c='k', label='$\\mu$')\n",
+    "plt.axvline(mu-sigma, ls='--', c='k')\n",
+    "plt.axvline(mu+sigma, ls='--', c='k', label='$\\mu\\pm\\sigma$')\n",
+    "plt.axvline(mu-3*sigma, ls='--', c='r')\n",
+    "plt.axvline(mu+3*sigma, ls='--', c='r', label='$\\mu\\pm 3\\sigma$')\n",
+    "plt.legend()\n",
+    "plt.xlabel('x [-]')\n",
+    "plt.ylabel('Pravdepodobnost [-]')\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Statisticka chyba\n",
+    " - nelze ji zcela odstranit\n",
+    " - dobre popsana teorii\n",
+    " - jeji vliv lze zmensit opakovanim mereni"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 10, 20 a 100 mereni s rozdelenim stejnym jako u prikladu vyse\n",
+    "d10 = np.random.normal(mu, sigma, 10)\n",
+    "d20 = np.random.normal(mu, sigma, 20)\n",
+    "d100 = np.random.normal(mu, sigma, 100)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.hist([d10, d20, d100], density=True)\n",
+    "plt.plot(x+mu, y, c='k', label='rozdelovaci fuknce')\n",
+    "\n",
+    "# vyplneni legendy\n",
+    "plt.plot([], ls='', marker='s', c='C0', label='10')\n",
+    "plt.plot([], ls='', marker='s', c='C1', label='20')\n",
+    "plt.plot([], ls='', marker='s', c='C2', label='100')\n",
+    "\n",
+    "plt.legend()\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.plot(d10, 'x')\n",
+    "plt.axhline(mu, c='k', label='prumer rozdelovaci funkce')\n",
+    "plt.axhline(d10.mean(), ls='--', label='prumer vzorku')\n",
+    "plt.xlabel('Index [-]')\n",
+    "plt.xticks(range(10))\n",
+    "plt.ylabel('x [-]')\n",
+    "plt.legend()\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "mask = np.ones_like(d10, dtype=bool)\n",
+    "mask[1] = 0\n",
+    "d10[mask].std() / (d10[mask].size - 1)**.5 , d10[mask].mean() - mu"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Systematicka chyba"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# spatne zkalibrovany pristroj posune merene hodnoty o konstantu\n",
+    "posun = d1 + 10"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.hist([d1, posun], bins=25)\n",
+    "plt.show()"
+   ]
+  }
+ ],
+ "metadata": {
+  "interpreter": {
+   "hash": "b3ba2566441a7c06988d0923437866b63cedc61552a5af99d1f4fb67d367b25f"
+  },
+  "kernelspec": {
+   "display_name": "Python 3.8.3 64-bit ('base': conda)",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.3"
+  },
+  "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
-- 
GitLab


From 0799965be0c0305613986ed656682841bc7a573a Mon Sep 17 00:00:00 2001
From: svoboj68 <svoboj68@fjfi.cvut.cz>
Date: Mon, 4 Apr 2022 09:09:55 +0200
Subject: [PATCH 2/4] Pridany zakladni definice a notebook

---
 definice.py     |  30 +++++++++++++
 spousteni.ipynb | 112 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 142 insertions(+)
 create mode 100644 definice.py
 create mode 100644 spousteni.ipynb

diff --git a/definice.py b/definice.py
new file mode 100644
index 0000000..622aa9d
--- /dev/null
+++ b/definice.py
@@ -0,0 +1,30 @@
+import numpy as np
+
+
+def sem(pole):
+    """standard error of mea"""
+    return pole.std() / np.sqrt(pole.size-1)
+
+
+def sem_annotated(pole: np.ndarray) -> float:
+    """
+    Spocita chybu prumeru
+
+    Funguje uplne stejne jako sem, akorat jsou zaneseny typy parametru a vystupu
+
+    Parameters
+    ----------
+    pole : np.ndarray
+        hodnoty 
+
+    Returns
+    -------
+    float
+        chyba prumeru
+    """
+    return pole.std() / np.sqrt(pole.size-1)
+
+
+def foo():
+    print('bar')
+    return
diff --git a/spousteni.ipynb b/spousteni.ipynb
new file mode 100644
index 0000000..f5e6da9
--- /dev/null
+++ b/spousteni.ipynb
@@ -0,0 +1,112 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Spouštění skriptů uvnitř ipython notebooku"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import os"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(os.getcwd())  # vypise pracovni adresar"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# pokud je pracovni slozkou prakpy, lze soubor definice.py spustit primo prikazem\n",
+    "%run definice.py\n",
+    "# pokud ne, je potreba zadat cestu k souboru, napr.\n",
+    "# %run c:\\Users\\student\\prakpy\\definice.py  # windows\n",
+    "# %run /home/student/prakpy/definice.py  # unix"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%run /cesta/k/souboru/definice.py"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "foo()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "np.random.seed(15022022)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a = np.random.normal(10, 2, size=10)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a.mean(), sem(a), sem_annotated(a)"
+   ]
+  }
+ ],
+ "metadata": {
+  "interpreter": {
+   "hash": "b3ba2566441a7c06988d0923437866b63cedc61552a5af99d1f4fb67d367b25f"
+  },
+  "kernelspec": {
+   "display_name": "Python 3.8.3 ('base')",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.3"
+  },
+  "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
-- 
GitLab


From 1408d7a5b07d7d75d8c970703867b8a7b3c341d7 Mon Sep 17 00:00:00 2001
From: svoboj68 <svoboj68@fjfi.cvut.cz>
Date: Tue, 7 Jun 2022 18:26:23 +0200
Subject: [PATCH 3/4] Pridana numericka integrace

---
 README.md      |   4 ++
 numerika.ipynb | 127 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 131 insertions(+)
 create mode 100644 numerika.ipynb

diff --git a/README.md b/README.md
index 04f44c2..99cc64e 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,7 @@ Využívá interaktviní prostředí pro python [jupyter notebook](https://jupyt
 Bývá součástí distribucí python jako například [annaconda](https://www.anaconda.com/products/individual).
 
 Tutorialy:
+**********
  - základy práce s proměnnými v pythonu [prace_s_daty](prace_s_daty.ipynb)
     - indexování
     - načítání z txt
@@ -20,11 +21,14 @@ Tutorialy:
  - prokládání dat [fity](fity.ipynb)
  - odvození vzorce pro chybu nepřímého měření pomoci symbolického počítání [symbolics](symbolics.ipynb)
  - vykreslení dvourozměrných dat [2D_grafy](2D_grafy.ipynb)
+ - numerická integrace dat [numerika](numerika.ipynb)
 
 Teorie:
+******
  - Chyby a rozdelovaci funkce [chyby](chyby.ipynb)
 
 Příklady:
+*********
  - [Extrapolace](Extrapolace.ipynb)
  - [Hobit](Hobit.ipynb)
 
diff --git a/numerika.ipynb b/numerika.ipynb
new file mode 100644
index 0000000..37fa57c
--- /dev/null
+++ b/numerika.ipynb
@@ -0,0 +1,127 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Numerická integrace\n",
+    "Numerická integrace dat (rozpracováno)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "import numpy as np\n",
+    "from scipy.integrate import trapz, cumtrapz"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "x = np.linspace(0, np.pi, 200)\n",
+    "y = np.sin(x)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.figure()\n",
+    "plt.plot(x, y, '.', ms=1, label='sin')\n",
+    "plt.legend()\n",
+    "plt.xlabel('x [-]')\n",
+    "plt.ylabel('y [-]')\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "pocatek = 0\n",
+    "y_integral = cumtrapz(y, x, initial=0)  # postupná integrace a počáteční podmínka\n",
+    "y_integrated = trapz(y, x)  # plocha pod křivkou\n",
+    "\n",
+    "plt.figure()\n",
+    "plt.plot(x, y_integral, '.', ms=1, label=r'$\\int\\sin(x) \\,\\mathrm{d} x$')\n",
+    "plt.plot(x, -np.cos(x), label=r'$-\\cos (x)$')  # referenční funkce, analyticky určený integrál\n",
+    "plt.text(2, 0, r'$\\int_0^\\pi sin(x) \\,\\mathrm{{d}} x = {:.3f}$'.format(y_integrated))  # vloženi textu do grafu\n",
+    "plt.legend()\n",
+    "plt.xlabel('x [-]')\n",
+    "plt.ylabel('y [-]')\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "delta = 0.1  # konstantní posunuti dat (systematická chyba)\n",
+    "y_offset = np.sin(x) + delta\n",
+    "\n",
+    "plt.figure()\n",
+    "plt.plot(x, y, '.', ms=1, label=r'$\\sin(x)$')\n",
+    "plt.plot(x, y_offset, '.', ms=1, label=r'$\\sin(x) + \\Delta$')\n",
+    "plt.legend()\n",
+    "plt.xlabel('x [-]')\n",
+    "plt.ylabel('y [-]')\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "y_int_offset = cumtrapz(y_offset, x, initial=pocatek)  # integrace posunutých dat\n",
+    "\n",
+    "plt.figure()\n",
+    "plt.plot(x, y_integral, '.', ms=1, label=r'$\\int \\sin(x) \\,\\mathrm{d}x$')\n",
+    "plt.plot(x, y_int_offset, '.', ms=1, label=r'$\\int ( \\sin(x) + \\Delta ) \\,\\mathrm{d}x$')\n",
+    "plt.legend()\n",
+    "plt.xlabel('x [-]')\n",
+    "plt.ylabel('y [-]')\n",
+    "plt.show()"
+   ]
+  }
+ ],
+ "metadata": {
+  "interpreter": {
+   "hash": "ad2bdc8ecc057115af97d19610ffacc2b4e99fae6737bb82f5d7fb13d2f2c186"
+  },
+  "kernelspec": {
+   "display_name": "Python 3.8.3 ('base')",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.3"
+  },
+  "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
-- 
GitLab


From 924702b3a7443b856b7f30458436ae0d6d45b5a8 Mon Sep 17 00:00:00 2001
From: svoboj68 <svoboj68@fjfi.cvut.cz>
Date: Thu, 18 Aug 2022 15:16:14 +0200
Subject: [PATCH 4/4] Pridana numericka derivace a komentare

---
 numerika.ipynb | 108 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 103 insertions(+), 5 deletions(-)

diff --git a/numerika.ipynb b/numerika.ipynb
index 37fa57c..412be62 100644
--- a/numerika.ipynb
+++ b/numerika.ipynb
@@ -4,8 +4,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Numerická integrace\n",
-    "Numerická integrace dat (rozpracováno)"
+    "# Numerické zpracování signálů"
    ]
   },
   {
@@ -19,6 +18,16 @@
     "from scipy.integrate import trapz, cumtrapz"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Vytvoříme rozsah od 0 do $\\pi$ a jako signál zvolíme funkci sinus, u které je triviální určit primitivní funkci a derivaci.\n",
+    "\n",
+    " - $\\int \\sin(x) \\mathrm{d}x = - \\cos(x) + c $\n",
+    " - $\\frac{\\mathrm{d}}{\\mathrm{d}x} \\sin(x) = \\cos(x)$"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -43,6 +52,13 @@
     "plt.show()"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Integrace"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -50,13 +66,14 @@
    "outputs": [],
    "source": [
     "pocatek = 0\n",
-    "y_integral = cumtrapz(y, x, initial=0)  # postupná integrace a počáteční podmínka\n",
-    "y_integrated = trapz(y, x)  # plocha pod křivkou\n",
+    "y_integral = cumtrapz(y, x, initial=pocatek)  # postupná (kumulativní) numerická integrace a počáteční podmínka\n",
+    "y_integrated = trapz(y, x)  # určitý numerický integrál ~ plocha pod křivkou\n",
     "\n",
     "plt.figure()\n",
     "plt.plot(x, y_integral, '.', ms=1, label=r'$\\int\\sin(x) \\,\\mathrm{d} x$')\n",
     "plt.plot(x, -np.cos(x), label=r'$-\\cos (x)$')  # referenční funkce, analyticky určený integrál\n",
     "plt.text(2, 0, r'$\\int_0^\\pi sin(x) \\,\\mathrm{{d}} x = {:.3f}$'.format(y_integrated))  # vloženi textu do grafu\n",
+    "plt.axhline(y_integrated, lw=1, color='k')\n",
     "plt.legend()\n",
     "plt.xlabel('x [-]')\n",
     "plt.ylabel('y [-]')\n",
@@ -69,7 +86,30 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "delta = 0.1  # konstantní posunuti dat (systematická chyba)\n",
+    "print('numerická integrace:', y_integrated)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "$\\int_0^\\pi \\sin(x) \\,\\mathrm{{d}} x = [\\cos(x)]_0^\\pi = \\cos(0) - \\cos(\\pi) = 1 - (-1) = 2$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Posunutí dat"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "delta = 0.1  # konstantní posunuti dat (systematická chyba, offset na osciloskopu)\n",
     "y_offset = np.sin(x) + delta\n",
     "\n",
     "plt.figure()\n",
@@ -97,6 +137,64 @@
     "plt.ylabel('y [-]')\n",
     "plt.show()"
    ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Derivace"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "dx = np.diff(x)  # rozdíly mezi hodnotami nezávisle proměnné\n",
+    "dydx = np.gradient(y, x)  # derivace\n",
+    "\n",
+    "plt.figure()\n",
+    "plt.plot(x, dydx, '.', ms=1, label=r'$\\frac{\\mathrm{d} y}{\\mathrm{d} x}$')\n",
+    "plt.plot(x, np.cos(x), label=r'$\\cos (x)$', alpha=.5)\n",
+    "plt.legend()\n",
+    "plt.xlabel('x [-]')\n",
+    "plt.ylabel('y [-]')\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(x.size, dx.size)  # počet členů se derivací zmenší"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Posunutí dat"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "dydx_offset = np.gradient(y_offset, x)\n",
+    "\n",
+    "plt.figure()\n",
+    "plt.plot(x, dydx_offset, '.', ms=1, label=r'$\\frac{\\mathrm{d}}{\\mathrm{d} x} (y + \\Delta)$')\n",
+    "plt.plot(x, np.cos(x), label=r'$\\cos (x)$', alpha=.5)\n",
+    "plt.legend()\n",
+    "plt.xlabel('x [-]')\n",
+    "plt.ylabel('y [-]')\n",
+    "plt.show()"
+   ]
   }
  ],
  "metadata": {
-- 
GitLab