{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hausaufgabe Blatt 3\n",
    "## Gleichförmig beschleunigte, geradlinige Bewegung - Revisited\n",
    "\n",
    "In dieser Aufgabe werden wir die Bahnkurve eines gleichförmig beschleunigten Objektes in einer Dimension berechnen und dieses mal auch visualisieren. Die Position $x$ zum Zeitpunkt $t$ ist, wie auf dem Blatt 2, gegeben durch folgende Gleichung:\n",
    "\\begin{equation*}\n",
    "x\\!\\left( t \\right) = x_0 + v_0 t + \\frac{1}{2} a t^2 \n",
    "\\end{equation*}\n",
    "wobei $x_0$ und $v_0$ die Anfangsposition und -geschwindigkeit sind und $a$ die konstante Beschleunigung, die auf das Objekt wirkt. \n",
    "\n",
    "## 1. Numpy Arrays: Linspace\n",
    "Anstelle, dass wir die Einträge in numpy arrays \"per Hand\" definieren, können wir eine nützliche Funktion verwenden. \n",
    "\n",
    "**a)** \n",
    "Machen Sie sich mit der nachstehenden Zelle vertraut. Verstehen Sie die Syntax?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-11-01T10:22:27.227336Z",
     "start_time": "2019-11-01T10:22:27.100666Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.   0.25 0.5  0.75 1.  ]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np # Laden der Numpy Bibliothek \n",
    "\n",
    "x = np.linspace(0, 1, 5) # Definieren von x\n",
    "\n",
    "print(x) # Ausgabe x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**b)** Erstellen sie ein numpy array für die Zeit `t` indem sie `np.linspace()` korrekt verwenden. Dabei soll gelten $t_0 = 0$ und $t_N = 5$ mit der Anzahl der Einträge $N = 50$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**c)** Benutzen Sie die in ha2 Aufgabe 2 definierte Funktion `printBahnkurve()` um sich nun die Bahnkurve für das gerade erstellte array `t` ausgeben zu lassen. Verwenden Sie die Werte $x_0=3$ und $v_0=10$ wie auf Blatt 2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Return\n",
    "\n",
    "Bisher hat unsere definierte Funktion lediglich einen `print()` Befehl ausgeführt. Wir wollen nun, dass unsere Funktion einen Wert zurück gibt. Dadurch kann der Wert in einer Variablen gespeichert und somit weiterverarbeitet werden. Dazu verwenden wir das `return` Statement. \n",
    "\n",
    "**d)** Betrachten Sie die folgenden zwei Funktionen. Beschreiben Sie kurz (1-2 Sätze), was hier geschieht. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-11-01T10:22:27.233313Z",
     "start_time": "2019-11-01T10:22:27.230416Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2 4\n"
     ]
    }
   ],
   "source": [
    "def identity(x): # definiere Funktion\n",
    "    return x # definiere Ausgabe\n",
    "\n",
    "def square(x):# definiere Funktion\n",
    "    return x**2 # definiere Ausgabe\n",
    "\n",
    "id2 = identity(2) # definiere id2 über Zugriff auf identity\n",
    "square2 = square(2)# definiere id2 über Zugriff auf square\n",
    "\n",
    "print(id2, square2) # Ausgabe der Werte"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**e)** Schreiben Sie eine neue Funktion, indem Sie den `print()` Befehl in der Funktion `printBahnkurve()` durch das `return` Statement ersetzen. Wählen Sie einen geeigneten Namen für die neue Funktion. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualisierung\n",
    "Da Sie nun dazu in der Lage sind, viele Datenpunkte zu erzeugen, wollen wir als nächsten Schritt die berechnete Bahnkurve in einem plot mithilfe von `matplotlib.pyplot` visualisieren. `Matplotlib` ist eine beliebte und sehr vielseitige plot Bibliothek, die es uns ermöglicht Daten zu visualisieren. Wer einen Eindruck davon gewinnen möchte, was alles mit `matplotlib` möglich ist, kann ja mal [hier](https://matplotlib.org/3.1.1/gallery/index.html) vorbeischauen!\n",
    "\n",
    "Wir haben folgendes Grundgerüst vorbereitet, in dem die Funktion $f(x) = x^2$ beispielhaft geplottet wird."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-11-01T10:22:42.277126Z",
     "start_time": "2019-11-01T10:22:42.160402Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 34380 characters]",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt # lade matplotlib als Bibliothek\n",
    "import numpy as np\n",
    "x = np.linspace(-2, 2, 170) # definiere x\n",
    "xQuadrat = x**2 # berechen x^2\n",
    "\n",
    "# ### Anfang Grundgerüst ( mit # kann man Kommentare schreiben )\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "ax.set_title(\"Parabel\")  # Titel\n",
    "ax.set_xlabel(\"X-Werte\") # x-Achsenbeschriftrung\n",
    "ax.set_ylabel(\"y-Werte\") # y-Achsenbeschriftung\n",
    "\n",
    "ax.plot(x, xQuadrat)  # x-Wert hier: x, y Wert hier: xQuadrat\n",
    "\n",
    "plt.show()\n",
    "\n",
    "# ### Ende Grundgerüst"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**a)** Machen Sie sich mit dem Grundgerüst vertraut, indem Sie \n",
    " - `x` mit Werten Ihrer Wahl erweitern\n",
    " - einen geeigneten Titel\n",
    " - geeignete x- und y- Achsenbeschriftung wählen.\n",
    " \n",
    "Möchte man mehrere Kurven in einem Diagramm darstellen, so muss `ax.plot()` lediglich erneut aufgerufen werden. \n",
    "Dabei ist es nützlich diese Kurven in einer Legende zu unterscheiden:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-11-01T10:22:27.961375Z",
     "start_time": "2019-11-01T10:22:27.514251Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 34704 characters]",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "\n",
    "ax.set_title(\"Mehrfachplot\") # Titel\n",
    "ax.set_xlabel(\"X\") #x-Achsenbeschriftung\n",
    "ax.set_ylabel(\"Y\") # y-Achsenbeschriftung\n",
    "\n",
    "ax.plot(x, xQuadrat, label=\"$x^2$\")  # label: Eintrag Legende, versteht auch LaTex!\n",
    "ax.plot(x, x**4, label=\"$x^4$\") # label\n",
    "\n",
    "ax.legend()  # Zeige Legende\n",
    "plt.show()  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**b)** Kopieren Sie das Grundgerüst und ersetzen sie die x-Werte durch das oben definierte array `t` und die y-Werte durch die errechnete Bahnkurve. Wählen Sie auch hier einen geeigneten Titel und Achsenbeschriftungen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-11-01T10:21:24.775267Z",
     "start_time": "2019-11-01T10:21:24.689518Z"
    }
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**c)** Variieren Sie nun die Anfangsgeschwindigkeit. Erstellen Sie zwei Kurven mit verschiedenen Bedingungen (z.B. $v_0 = 10$ und $v_0=20$). Vergleichen Sie die Kurven miteinander, indem Sie diese in einem Diagramm darstellen. Benutzen Sie angemessene Beschriftungen!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-11-01T10:21:24.776711Z",
     "start_time": "2019-11-01T10:21:24.023Z"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.11.9"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autoclose": true,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
