diff --git a/chapter_01/example_1.ipynb b/chapter_01/example_1.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..85837ee340e8a41c86fd50f4e9db231b2dd15c47 --- /dev/null +++ b/chapter_01/example_1.ipynb @@ -0,0 +1,338 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 244, + "metadata": {}, + "outputs": [], + "source": [ + "# SymPy\n", + "import sympy\n", + "# Numpy\n", + "import numpy\n", + "# Pyplot\n", + "import matplotlib.pyplot as pyplot\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Für eine gegebene konstanten Beschleunigung $a = a_0$ sind die Funktionen für die Geschwindigkeit $v(t)$ sowie für die zurückgelegte Strecke $x(t)$ gesucht. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole aus der Aufgabenstellung" + ] + }, + { + "cell_type": "code", + "execution_count": 245, + "metadata": {}, + "outputs": [], + "source": [ + "# Konstante Beschleunigung\n", + "a_0 = sympy.Symbol('a_0')\n", + "# Anfangswerte\n", + "v_0 = sympy.Symbol('v_0')\n", + "x_0 = sympy.Symbol('x_0')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Weitere Symbole zur Lösung der Aufgabe" + ] + }, + { + "cell_type": "code", + "execution_count": 246, + "metadata": {}, + "outputs": [], + "source": [ + "# Zeitvariable\n", + "t = sympy.Symbol('t')\n", + "# Integrationskonstanten\n", + "C_1, C_2 = sympy.symbols('C_1, C_2')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Beschleunigung $a(t)$" + ] + }, + { + "cell_type": "code", + "execution_count": 247, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle a(t) = a_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "a = a_0\n", + "\n", + "# Beschleunigung ausgeben\n", + "tm_utils.display_latex('a(t) = ', a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Geschwindigkeit $v(t)$" + ] + }, + { + "cell_type": "code", + "execution_count": 248, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle v(t) = C_{1} + a_{0} t$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle v(t) = a_{0} t + v_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Geschwindigkeit durch unbestimmte Integration bestimmen\n", + "v = sympy.integrate(a, t) + C_1\n", + "\n", + "# Geschwindigkeit mit allgemeiner Vorschrift ausgeben\n", + "tm_utils.display_latex('v(t) = ', v)\n", + "\n", + "# Anfangsbedingung\n", + "IC1 = sympy.Equality(v.subs(t, 0), v_0)\n", + "C_1_result = sympy.solve(IC1, C_1)[0]\n", + "\n", + "# Integrationskonstante einsetzen\n", + "v = v.subs(C_1, C_1_result)\n", + "\n", + "# Geschwindigkeit mit eingesetzter Integrationskonstante ausgeben\n", + "tm_utils.display_latex('v(t) = ', v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Strecke $x(t)$" + ] + }, + { + "cell_type": "code", + "execution_count": 249, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle x(t) = C_{2} + \\frac{a_{0} t^{2}}{2} + t v_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle x(t) = \\frac{a_{0} t^{2}}{2} + t v_{0} + x_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Strecke durch unbestimmte Integration bestimmen\n", + "x = sympy.integrate(v, t) + C_2\n", + "\n", + "# Strecke mit allgemeiner Vorschrift ausgeben\n", + "tm_utils.display_latex('x(t) = ', x)\n", + "\n", + "# Anfangsbedingung\n", + "IC2 = sympy.Equality(x.subs(t, 0), x_0)\n", + "C_2_result = sympy.solve(IC2, C_2)[0]\n", + "\n", + "# Integrationskonstante einsetzen\n", + "x = x.subs(C_2, C_2_result)\n", + "\n", + "# Strecke mit eingesetzter Integrationskonstante ausgeben\n", + "tm_utils.display_latex('x(t) = ', x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Graph der Funktionen $a(t)$, $v(t)$ und $x(t)$" + ] + }, + { + "cell_type": "code", + "execution_count": 250, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 0, 'Zeit $t$ in Sekunden')" + ] + }, + "execution_count": 250, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 864x720 with 3 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Figure erstellen\n", + "fig = pyplot.figure(figsize=(12, 10))\n", + "# Achsen erstellen\n", + "ax_a, ax_v, ax_x = fig.subplots(3, 1, sharex=True)\n", + "\n", + "# Beschleunigung a_0 = 2.0 m/s^2\n", + "# Anfangsgeschwindigkeit: v_0 = 0.0 m/s (ruhend)\n", + "# Anfangsstrecke: x_0 = 0.0m\n", + "subs = { a_0: 2.0, v_0: 0.0, x_0: 0.0}\n", + "\n", + "# Array mit Zeitschritten (bis zu 10s)\n", + "t_max = 10\n", + "t_values = numpy.linspace(0, t_max, num=100)\n", + "\n", + "# Arrays mit Werten für a(t), v(t) sowie x(t)\n", + "a_values = tm_utils.eval_expr(a.subs(subs), t, t_values)\n", + "v_values = tm_utils.eval_expr(v.subs(subs), t, t_values)\n", + "x_values = tm_utils.eval_expr(x.subs(subs), t, t_values)\n", + "\n", + "ax_a.plot(t_values, a_values)\n", + "ax_v.plot(t_values, v_values)\n", + "ax_x.plot(t_values, x_values)\n", + "\n", + "# Einstellungen für die Achsen\n", + "ax_a.grid(True, 'both', 'both') \n", + "ax_v.grid(True, 'both', 'both') \n", + "ax_x.grid(True, 'both', 'both') \n", + "\n", + "ax_a.set_xlim(0, t_max) # Zeitachse von 0 bis t_max\n", + "ax_v.set_xlim(0, t_max) # Zeitachse von 0 bis t_max\n", + "ax_x.set_xlim(0, t_max) # Zeitachse von 0 bis t_max\n", + "\n", + "ax_v.set_ylim(0) # y-Achse beginnt bei 0\n", + "ax_x.set_ylim(0) # y-Achse beginnt bei 0\n", + "\n", + "ax_a.set_ylabel(\"$a(t)$ in $m/s^2$\")\n", + "ax_v.set_ylabel(\"$v(t)$ in $m/s$\")\n", + "ax_x.set_ylabel(\"$x(t)$ in $m$\")\n", + "ax_x.set_xlabel(\"Zeit $t$ in Sekunden\")" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.2 64-bit", + "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.10.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_01/example_4.ipynb b/chapter_01/example_4.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..e885256031d1081a4c2d3dc93fbf0ceeaaeb9e66 --- /dev/null +++ b/chapter_01/example_4.ipynb @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": {}, + "outputs": [], + "source": [ + "# SymPy\n", + "import sympy\n", + "# Numpy\n", + "import numpy\n", + "# Pyplot\n", + "import matplotlib.pyplot as pyplot\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Für den freien Fall mit Luftwiderstand gilt für die Beschleunigung $a(v) = kv^2 - g$. Gesucht ist die Funktion $v(t)$ als Lösung der Differentialgleichung." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole aus der Aufgabenstellung" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "metadata": {}, + "outputs": [], + "source": [ + "# Konstanten für den Luftwiderstand (Abhängigkeit von Querschnitt und Luftdichte)\n", + "k = sympy.Symbol('k', positive=True, nonzero=True, real=True)\n", + "# Erdbeschleunigung\n", + "g = sympy.Symbol('g', positive=True, nonzero=True, real=True)\n", + "\n", + "# Konstante Beschleunigung\n", + "a_0 = sympy.Symbol('a_0')\n", + "# Anfangswerte\n", + "v_0 = sympy.Symbol('v_0')\n", + "x_0 = sympy.Symbol('x_0')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Weitere Symbole zur Lösung der Aufgabe" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "metadata": {}, + "outputs": [], + "source": [ + "# Zeitvariable\n", + "t = sympy.Symbol('t', positive=True, nonzero=True, real=True)\n", + "\n", + "# Funktion für die Geschwindigkeit v(t)\n", + "v = sympy.Function('v')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Beschleunigung $a(v)$" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{d t} v{\\left(t \\right)} = - g + k v^{2}{\\left(t \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Differentialgleichung der Beschleunigung dv/dt = kv^2 - g\n", + "ODE = sympy.Equality(v(t).diff(t), k*v(t)**2 - g)\n", + "\n", + "# Differentialgleichung der Beschleunigung ausgeben\n", + "tm_utils.display_latex(ODE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Geschwindigkeit $v(t)$" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\int\\limits^{v{\\left(t \\right)}} \\frac{1}{- y^{2} k + g}\\, dy = C_{1} + \\int \\left(-1\\right)\\, dt$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "('separable',\n", + " '1st_exact',\n", + " '1st_rational_riccati',\n", + " '1st_power_series',\n", + " 'lie_group',\n", + " 'separable_Integral',\n", + " '1st_exact_Integral')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle - \\frac{\\log{\\left(- \\frac{\\sqrt{g}}{\\sqrt{k}} + v{\\left(t \\right)} \\right)}}{2 \\sqrt{g} \\sqrt{k}} + \\frac{\\log{\\left(\\frac{\\sqrt{g}}{\\sqrt{k}} + v{\\left(t \\right)} \\right)}}{2 \\sqrt{g} \\sqrt{k}} = C_{1} - t$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle [\\frac{\\sqrt{g}}{\\sqrt{k} \\tanh{\\left(\\sqrt{g} \\sqrt{k} \\left(C_{1} - t\\right) \\right)}}]$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Geschwindigkeit v(t) als Lösung der Differentialgleichung bestimmen\n", + "v_result = sympy.dsolve(ODE, hint=\"separable_Integral\")\n", + "\n", + "tm_utils.display_latex(v_result)\n", + "display(sympy.classify_ode(ODE))\n", + "\n", + "x = v_result.doit()\n", + "tm_utils.display_latex(x)\n", + "\n", + "tm_utils.display_latex(sympy.solve(x, v(t)))\n", + "\n", + "C_1 = sympy.Symbol('C_1')\n", + "\n", + "# Anfangsbedingung: v(0) = 0\n", + "IC = sympy.Equality(v_result.rhs.subs(t, 0), 0)\n", + "C_1_result = sympy.solve(IC, C_1)\n", + "\n", + "display(C_1_result)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.2 64-bit", + "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.10.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_02/example_14.ipynb b/chapter_02/example_14.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f3fb33ac395f65869ef488f62507ad2b00118fb4 --- /dev/null +++ b/chapter_02/example_14.ipynb @@ -0,0 +1,640 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 14" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lösung des Beispiels 14 aus der Vorlesung mithilfe von Python." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 296, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_14_task.png\" width=\"920px\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Gesucht sind die Bewegungsgleichungen $\\ddot{x}(t)$, $\\ddot{y}(t)$, $\\ddot{z}(t)$, die Wurfbahn $z(x)$, die Wurfweite $x_W$, die Wurfzeit $t_W$ sowie die maximale Wurfhöhe $z_h$ für die dreidimensionale Betrachtung des freien Falls eines punktförmigen Körpers ohne Luftwiderstand. \n", + "Gegeben ist die Masse $m$, die Anfangsgeschwindigkeit $v_0$ unter dem Winkel $\\alpha$ zwischen $x$-Achse und Wurfbahn sowie die Erdbeschleunigung $g$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole aus der Aufgabenstellung" + ] + }, + { + "cell_type": "code", + "execution_count": 297, + "metadata": {}, + "outputs": [], + "source": [ + "# Punktmasse\n", + "m = sympy.Symbol('m')\n", + "# Anfangsgeschwindigkeit und zugehöriger Winkel\n", + "v_0 = sympy.Symbol('v_0')\n", + "alpha = sympy.Symbol(r'\\alpha')\n", + "# Erdbeschleunigung\n", + "g = sympy.Symbol('g')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 298, + "metadata": {}, + "outputs": [], + "source": [ + "# Zeit\n", + "t = sympy.Symbol('t')\n", + "# Koordinaten\n", + "x = sympy.Function('x')\n", + "y = sympy.Function('y')\n", + "z = sympy.Function('z')\n", + "\n", + "# Wurfweite\n", + "x_W = sympy.Symbol('x_W')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Bewegungsgleichungen" + ] + }, + { + "cell_type": "code", + "execution_count": 299, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle m \\frac{d^{2}}{d t^{2}} x{\\left(t \\right)} = 0 \\qquad m \\frac{d^{2}}{d t^{2}} y{\\left(t \\right)} = 0 \\qquad m \\frac{d^{2}}{d t^{2}} z{\\left(t \\right)} = - g m$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Bewegungsgleichungen in die einzelnen Koordinatenrichtungen\n", + "F_x = sympy.Equality(m * x(t).diff(t, 2), 0)\n", + "F_y = sympy.Equality(m * y(t).diff(t, 2), 0)\n", + "F_z = sympy.Equality(m * z(t).diff(t, 2), -m*g)\n", + "\n", + "# Bewegungsgleichungen ausgeben\n", + "tm_utils.display_latex(F_x, r\"\\qquad\", F_y, r\"\\qquad\", F_z)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Beschleunigung, Geschwindigkeit und Strecke" + ] + }, + { + "cell_type": "code", + "execution_count": 300, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d^{2}}{d t^{2}} x{\\left(t \\right)} = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d^{2}}{d t^{2}} y{\\left(t \\right)} = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d^{2}}{d t^{2}} z{\\left(t \\right)} = - g$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Beschleunigung in die einzelnen Koordinatenrichtungen (als dict)\n", + "a = sympy.solve([F_x, F_y, F_z], [x(t).diff(t, 2), y(t).diff(t, 2), z(t).diff(t, 2)])\n", + "\n", + "# Beschleunigungen ausgeben\n", + "for a_symbol, a_value in a.items():\n", + " tm_utils.display_latex(a_symbol, \" = \", a_value)" + ] + }, + { + "cell_type": "code", + "execution_count": 301, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{d t} x{\\left(t \\right)} = C_{1}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{d t} y{\\left(t \\right)} = C_{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{d t} z{\\left(t \\right)} = C_{3} - g t$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Integrationskonstanten\n", + "C = sympy.symbols('C_1:4')\n", + "\n", + "# Geschwindigkeit in die einzelnen Koordinatenrichtungen durch\n", + "# Integration berechnen\n", + "v = {}\n", + "for (a_symbol, a_value), C_i in zip(a.items(), C):\n", + " # Für jeden Beschleunigungsterm in a die Geschwindigkeit bestimmen\n", + " # und in v eintragen\n", + " v[a_symbol.integrate(t)] = a_value.integrate(t) + C_i\n", + "\n", + "\n", + "# Geschwindigkeitsanteile in Koordinatenrichtungen ausgeben\n", + "for v_symbol, v_value in v.items():\n", + " tm_utils.display_latex(v_symbol, \" = \", v_value)" + ] + }, + { + "cell_type": "code", + "execution_count": 302, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle C_{1} = v_{0} \\cos{\\left(\\alpha \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle C_{2} = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle C_{3} = v_{0} \\sin{\\left(\\alpha \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Anfangsgeschwindigkeit auf einzelne Koordinatenrichtungen aufgeteilt\n", + "v_x_0 = sympy.Equality(v[x(t).diff(t)].subs(t, 0), v_0 * sympy.cos(alpha))\n", + "v_y_0 = sympy.Equality(v[y(t).diff(t)].subs(t, 0), 0)\n", + "v_z_0 = sympy.Equality(v[z(t).diff(t)].subs(t, 0), v_0 * sympy.sin(alpha))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(v_x_0)\n", + "tm_utils.display_latex(v_y_0)\n", + "tm_utils.display_latex(v_z_0)" + ] + }, + { + "cell_type": "code", + "execution_count": 303, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{d t} x{\\left(t \\right)} = v_{0} \\cos{\\left(\\alpha \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{d t} y{\\left(t \\right)} = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{d t} z{\\left(t \\right)} = - g t + v_{0} \\sin{\\left(\\alpha \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Integrationskonstanten bestimmen\n", + "C_results = sympy.solve([v_x_0, v_y_0, v_z_0], C)\n", + "\n", + "# ... in Geschwindigkeitsanteile substituieren\n", + "for v_symbol, v_value in v.items():\n", + " v[v_symbol] = v_value.subs(C_results)\n", + "\n", + "# Geschwindigkeitsanteile in Koordinatenrichtungen ausgeben\n", + "for v_symbol, v_value in v.items():\n", + " tm_utils.display_latex(v_symbol, \" = \", v_value)" + ] + }, + { + "cell_type": "code", + "execution_count": 304, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle x{\\left(t \\right)} = t v_{0} \\cos{\\left(\\alpha \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle y{\\left(t \\right)} = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle z{\\left(t \\right)} = - \\frac{g t^{2}}{2} + t v_{0} \\sin{\\left(\\alpha \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Position bestimmen (Anfangsposition im Ursprung daher ohne \n", + "# Integrationskonstante direkt)\n", + "s = {}\n", + "for v_symbol, v_value in v.items():\n", + " s[v_symbol.integrate(t)] = v_value.integrate(t)\n", + "\n", + "# Positionsanteile in die einzelnen Koordinatenrichtungen ausgeben\n", + "for s_symbol, s_value in s.items():\n", + " tm_utils.display_latex(s_symbol, \" = \", s_value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Wurfbahn" + ] + }, + { + "cell_type": "code", + "execution_count": 305, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle t = \\frac{x{\\left(t \\right)}}{v_{0} \\cos{\\left(\\alpha \\right)}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Gleichung x(t) nach t umformen\n", + "t_result = sympy.solve([sympy.Equality(x(t), s[x(t)])], [t, x(t)])[t]\n", + "\n", + "# t ausgeben\n", + "tm_utils.display_latex(\"t = \", t_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 306, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle z{\\left(x{\\left(t \\right)} \\right)} = - \\frac{g x^{2}{\\left(t \\right)}}{2 v_{0}^{2} \\cos^{2}{\\left(\\alpha \\right)}} + x{\\left(t \\right)} \\tan{\\left(\\alpha \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# t in z(t) einsetzen, sodass z = z(x)\n", + "z_x = sympy.Equality(z(x(t)), s[z(t)].subs(t, t_result)).simplify()\n", + "\n", + "# Wurfbahn ausgeben\n", + "tm_utils.display_latex(z_x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Wurfweite" + ] + }, + { + "cell_type": "code", + "execution_count": 307, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - \\frac{g x_{W}^{2}}{2 v_{0}^{2} \\cos^{2}{\\left(\\alpha \\right)}} + x_{W} \\tan{\\left(\\alpha \\right)} = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Bedingung z(x_W) = 0\n", + "constraint = sympy.Equality(z_x.rhs.subs(x(t), x_W), 0)\n", + "\n", + "# Bedingung ausgeben\n", + "tm_utils.display_latex(constraint)" + ] + }, + { + "cell_type": "code", + "execution_count": 308, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle x_W = \\frac{v_{0}^{2} \\sin{\\left(2 \\alpha \\right)}}{g}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# ANMERKUNG: Quadratische Gleichung liefert zwei Lösungen.\n", + "# Wir wählen die größere (hier Index 1), da erste Lösung\n", + "# der Ursprung (also der Startpunkt) ist.\n", + "x_W_result = sympy.solve(constraint, x_W)[1]\n", + "\n", + "# Wurfweite ausgeben\n", + "tm_utils.display_latex(\"x_W = \", x_W_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Wurfzeit" + ] + }, + { + "cell_type": "code", + "execution_count": 309, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle t_W = t(x_W) = \\frac{2 v_{0} \\sin{\\left(\\alpha \\right)}}{g}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Wurfweite in Umkehrfunktion t(x) einsetzen\n", + "tm_utils.display_latex(\"t_W = t(x_W) = \", t_result.subs(x(t), x_W_result).simplify())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Wurfhöhe" + ] + }, + { + "cell_type": "code", + "execution_count": 310, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle z_h = \\frac{v_{0}^{2} \\sin^{2}{\\left(\\alpha \\right)}}{2 g}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Ableitung dz/dz bestimmen\n", + "dz_dx = z_x.rhs.diff(x(t))\n", + "\n", + "# Bedingung dz/dx = 0 (Scheitelpunkt)\n", + "x_h = sympy.solve([sympy.Equality(dz_dx, 0)], [x(t)])[x(t)]\n", + "z_h = z_x.rhs.subs(x(t), x_h).simplify()\n", + "\n", + "# Wurfhöhe ausgeben\n", + "tm_utils.display_latex(\"z_h = \", z_h)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.2 64-bit", + "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.10.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_02/example_15.ipynb b/chapter_02/example_15.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..040333e2f4c7bb18e608682a19e9e9996bc1cd70 --- /dev/null +++ b/chapter_02/example_15.ipynb @@ -0,0 +1,505 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 15" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lösung des Beispiels 15 aus der Vorlesung mithilfe von Python." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 357, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# Numpy\n", + "import numpy\n", + "# Scipy\n", + "from scipy import integrate\n", + "# PyPlot\n", + "from matplotlib import pyplot\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_15_task.png\" width=\"891px\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Gesucht sind die Bewegungsgleichungen $\\ddot{x}(t)$, $\\ddot{y}(t)$, $\\ddot{z}(t)$, die Wurfbahn $z(x)$ für die dreidimensionale Betrachtung des freien Falls eines punktförmigen Körpers mit Luftwiderstand $F_W = kv^2$. \n", + "Gegeben ist die Masse $m$, die Anfangsgeschwindigkeit $v_0$ unter dem Winkel $\\alpha$ zwischen $x$-Achse und Wurfbahn, die Luftwiderstandskonstante $k$ sowie die Erdbeschleunigung $g$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole aus der Aufgabenstellung" + ] + }, + { + "cell_type": "code", + "execution_count": 358, + "metadata": {}, + "outputs": [], + "source": [ + "# Punktmasse\n", + "m = sympy.Symbol('m')\n", + "# Anfangsgeschwindigkeit und zugehöriger Winkel\n", + "v_0 = sympy.Symbol('v_0')\n", + "alpha = sympy.Symbol(r'\\alpha')\n", + "# Erdbeschleunigung\n", + "g = sympy.Symbol('g')\n", + "# Luftwiderstandskonstante\n", + "k = sympy.Symbol('k')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 359, + "metadata": {}, + "outputs": [], + "source": [ + "# Zeit\n", + "t = sympy.Symbol('t')\n", + "# Koordinaten\n", + "x = sympy.Function('x')\n", + "y = sympy.Function('y')\n", + "z = sympy.Function('z')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Bewegungsgleichungen" + ] + }, + { + "cell_type": "code", + "execution_count": 360, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\vec{e_t} = \\left( \\frac{\\frac{d}{d t} x{\\left(t \\right)}}{\\sqrt{\\left(\\frac{d}{d t} x{\\left(t \\right)}\\right)^{2} + \\left(\\frac{d}{d t} z{\\left(t \\right)}\\right)^{2}}} , 0, \\frac{\\frac{d}{d t} z{\\left(t \\right)}}{\\sqrt{\\left(\\frac{d}{d t} x{\\left(t \\right)}\\right)^{2} + \\left(\\frac{d}{d t} z{\\left(t \\right)}\\right)^{2}}} \\right)^T$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Tangentialvektor an die Flugbahn\n", + "e_t_x = x(t).diff(t)\n", + "e_t_z = z(t).diff(t)\n", + "\n", + "# Tangentialvektor an Flugbahn als Einheitsvektor normieren\n", + "l_e_t = sympy.sqrt(e_t_x**2 + e_t_z**2)\n", + "e_t_x /= l_e_t\n", + "e_t_z /= l_e_t\n", + "\n", + "# Tangentialvektor ausgeben\n", + "tm_utils.display_latex(r\"\\vec{e_t} = \\left(\", e_t_x, \", 0, \", e_t_z, r\"\\right)^T\")" + ] + }, + { + "cell_type": "code", + "execution_count": 361, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle m \\frac{d^{2}}{d t^{2}} x{\\left(t \\right)} = - k \\sqrt{\\left(\\frac{d}{d t} x{\\left(t \\right)}\\right)^{2} + \\left(\\frac{d}{d t} z{\\left(t \\right)}\\right)^{2}} \\frac{d}{d t} x{\\left(t \\right)} \\qquad m \\frac{d^{2}}{d t^{2}} y{\\left(t \\right)} = 0 \\qquad m \\frac{d^{2}}{d t^{2}} z{\\left(t \\right)} = - g m - k \\sqrt{\\left(\\frac{d}{d t} x{\\left(t \\right)}\\right)^{2} + \\left(\\frac{d}{d t} z{\\left(t \\right)}\\right)^{2}} \\frac{d}{d t} z{\\left(t \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Geschwindigkeit für Luftwiderstand\n", + "v_squared = l_e_t**2\n", + "\n", + "# Bewegungsgleichungen in die einzelnen Koordinatenrichtungen\n", + "F_x = sympy.Equality(m * x(t).diff(t, 2), -k * v_squared * e_t_x)\n", + "F_y = sympy.Equality(m * y(t).diff(t, 2), 0)\n", + "F_z = sympy.Equality(m * z(t).diff(t, 2), -k * v_squared * e_t_z - m * g)\n", + "\n", + "# Bewegungsgleichungen ausgeben\n", + "tm_utils.display_latex(F_x, r\"\\qquad\", F_y, r\"\\qquad\", F_z)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Flugbahn" + ] + }, + { + "cell_type": "code", + "execution_count": 362, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{q_1} = q_{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{q_2} = - k q_{2} \\sqrt{q_{2}^{2} + q_{4}^{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{q_3} = q_{4}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{q_4} = - g m - k q_{4} \\sqrt{q_{2}^{2} + q_{4}^{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Nichtlineares gekoppeltes Differentialgleichungsystem 2. Ordnung in\n", + "# Differentialgleichungsystem 2. Ordnung überführen\n", + "# ANMERKUNG: y-Richtung wird für Lösung vernachlässigt\n", + "q_1, q_2, q_3, q_4 = sympy.symbols('q_1:5')\n", + "subs = {x(t): q_1, x(t).diff(t): q_2, z(t): q_3, z(t).diff(t): q_4}\n", + "\n", + "# Gleichungen\n", + "q_dot = [q_2, F_x.rhs.subs(subs), q_4, F_z.rhs.subs(subs)]\n", + "\n", + "# Gleichungen ausgeben\n", + "tm_utils.display_latex(\"\\dot{q_1} = \", q_dot[0])\n", + "tm_utils.display_latex(\"\\dot{q_2} = \", q_dot[1])\n", + "tm_utils.display_latex(\"\\dot{q_3} = \", q_dot[2])\n", + "tm_utils.display_latex(\"\\dot{q_4} = \", q_dot[3])" + ] + }, + { + "cell_type": "code", + "execution_count": 363, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{q_1} = q_{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{q_2} = - 0.1 q_{2} \\sqrt{q_{2}^{2} + q_{4}^{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{q_3} = q_{4}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{q_4} = - 0.1 q_{4} \\sqrt{q_{2}^{2} + q_{4}^{2}} - 9.81$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Numerische Lösung mit m = 1kg, k = 0.1Ns/m, alpha=60°, v_0 = 10m/s\n", + "# sowie g = 9.81m/s^2\n", + "subs = {m: 1, k:0.1, alpha:sympy.pi/3, v_0: 10, g: 9.81}\n", + "\n", + "# Zahlenwerte einsetzen\n", + "for i, _ in enumerate(q_dot):\n", + " q_dot[i] = q_dot[i].subs(subs)\n", + "\n", + "# Gleichungen ausgeben\n", + "tm_utils.display_latex(\"\\dot{q_1} = \", q_dot[0])\n", + "tm_utils.display_latex(\"\\dot{q_2} = \", q_dot[1])\n", + "tm_utils.display_latex(\"\\dot{q_3} = \", q_dot[2])\n", + "tm_utils.display_latex(\"\\dot{q_4} = \", q_dot[3])" + ] + }, + { + "cell_type": "code", + "execution_count": 364, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle q_1(0) = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle q_2(0) = 5.0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle q_3(0) = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle q_4(0) = 8.66025$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Anfangswerte\n", + "ivs = (0, (v_0 * sympy.cos(alpha)).evalf(6, subs), 0, (v_0 * sympy.sin(alpha)).evalf(6, subs))\n", + "\n", + "# Anfangswerte ausgeben\n", + "tm_utils.display_latex(\"q_1(0) = \", ivs[0])\n", + "tm_utils.display_latex(\"q_2(0) = \", ivs[1])\n", + "tm_utils.display_latex(\"q_3(0) = \", ivs[2])\n", + "tm_utils.display_latex(\"q_4(0) = \", ivs[3])" + ] + }, + { + "cell_type": "code", + "execution_count": 365, + "metadata": {}, + "outputs": [], + "source": [ + "# Rechte Seite f(t, q) des Differentialgleichungssystems in Python definieren\n", + "def f(t, q):\n", + " subs = {q_1: q[0], q_2: q[1], q_3: q[2], q_4: q[3]}\n", + " return (\n", + " q_dot[0].evalf(9, subs),\n", + " q_dot[1].evalf(9, subs),\n", + " q_dot[2].evalf(9, subs),\n", + " q_dot[3].evalf(9, subs))\n", + "\n", + "# Lösung bis Zeitschritt t_max\n", + "t_min = 0\n", + "t_max = 2\n", + "t_steps = 100\n", + "# Zeitschritte zur numerischen Bestimmung des Differentialsgleichungsystems\n", + "t_eval = numpy.linspace(t_min, t_max, t_steps)\n", + "\n", + "# Differentialgleichungssystem numerisch mit SciPy lösen\n", + "results = integrate.solve_ivp(f, (t_min, t_max), ivs, t_eval=t_eval)" + ] + }, + { + "cell_type": "code", + "execution_count": 366, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, '$z(t)$ in $m$')" + ] + }, + "execution_count": 366, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 864x720 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Flugbahn plotten\n", + "\n", + "# Figure erstellen\n", + "fig = pyplot.figure(figsize=(12, 10))\n", + "# Achsen erstellen\n", + "ax = fig.subplots(1, 1)\n", + "\n", + "x_values = results[\"y\"][0]\n", + "z_values = results[\"y\"][2]\n", + "\n", + "ax.plot(x_values, z_values)\n", + "\n", + "# Einstellungen für die Achsen\n", + "ax.grid(True, 'both', 'both') \n", + "\n", + "ax.set_xlim(0) # x-Achse beginnt bei 0\n", + "ax.set_ylim(0) # y-Achse beginnt bei 0\n", + "# ANMERKUNG: Lösung wird bis t_max berechnet, dies führt dazu, dass die Masse\n", + "# noch weiter unter die x-Achse fällt mit zunehmender Dauer des Falles da keine\n", + "# Nebenbedinung für y>0 eingebaut ist.\n", + "\n", + "ax.set_xlabel(\"$x(t)$ in $m$\")\n", + "ax.set_ylabel(\"$z(t)$ in $m$\")" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.2 64-bit", + "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.10.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_02/example_16.ipynb b/chapter_02/example_16.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c04aa2f9a9cc3c32851657f7bd5c3724536987a5 --- /dev/null +++ b/chapter_02/example_16.ipynb @@ -0,0 +1,233 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lösung des Beispiels 16 aus der Vorlesung mithilfe von Python." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_16_task.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Gesucht ist die auftretende Zwangskraft in Abhängigkeit des Freiheitsgrades $\\varphi$ und der zugehörige Maximalwert." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Freikörperbild" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_16_fkb.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Allgemein\n", + "m = sympy.Symbol(\"m\", positive=True, nonzero=True)\n", + "g = sympy.Symbol(\"g\", positive=True, nonzero=True)\n", + "R = sympy.Symbol(\"R\", positive=True, nonzero=True)\n", + "\n", + "# Eingeprägte Kräfte\n", + "N = sympy.Symbol(\"N\")\n", + "# Zwangskräfte\n", + "G = m * g\n", + "\n", + "# Beschleunigungen\n", + "a_t = sympy.Symbol(\"a_t\")\n", + "a_n = sympy.Symbol(\"a_n\")\n", + "\n", + "# Zeit\n", + "t = sympy.Symbol(\"t\")\n", + "\n", + "# Freieheitsgrad\n", + "phi = sympy.Function(r\"\\varphi\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dynamisches Kräftegleichgewicht" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\swarrow: \\quad a_{t} m = g m \\cos{\\left(\\varphi{\\left(t \\right)} \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\nwarrow: \\quad a_{n} m = N - g m \\sin{\\left(\\varphi{\\left(t \\right)} \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Dynamisches Kräftegleichgewicht in tangentiale Richtung \n", + "# und in Richtung der Normalen\n", + "sum_F_t = sympy.Equality(m * a_t, G * sympy.cos(phi(t)))\n", + "sum_F_n = sympy.Equality(m * a_n, N - G * sympy.sin(phi(t)))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\swarrow: \\quad\", sum_F_t)\n", + "tm_utils.display_latex(r\"\\nwarrow: \\quad\", sum_F_n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Kinematik" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle a_{t} = R \\frac{d^{2}}{d t^{2}} \\varphi{\\left(t \\right)}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle a_{n} = R \\left(\\frac{d}{d t} \\varphi{\\left(t \\right)}\\right)^{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Kreisbewegung mit konstantem Radius\n", + "kinematik_t = sympy.Equality(a_t, R * phi(t).diff(t, 2))\n", + "kinematik_n = sympy.Equality(a_n, R * phi(t).diff(t)**2)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(kinematik_t)\n", + "tm_utils.display_latex(kinematik_n)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.2 64-bit", + "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.10.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_02/example_29.ipynb b/chapter_02/example_29.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..8b1cbfd8b880e56a830c62841e355bdcf3c3ea2c --- /dev/null +++ b/chapter_02/example_29.ipynb @@ -0,0 +1,661 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 29" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lösung des Beispiels 29 aus der Vorlesung mithilfe von Python." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_29_task.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [], + "source": [ + "# Anfangsgeschwindigkeit oberer Klotz\n", + "v_0 = sympy.Symbol('v_0')\n", + "\n", + "# Massen\n", + "m = sympy.Symbol('m')\n", + "M = 5 * m\n", + "\n", + "# Erdbeschleunigung\n", + "g = sympy.Symbol(\"g\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Lösung über Impulserhaltung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Es gilt die Impulserhaltung des Gesamtsystems $p = \\bar{p}$ zwischen vor dem Aufrutschen und nach dem Aufrutschen." + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle v_1 = v_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle v_2 = 0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Anfangsgeschwindigkeit der beiden Klötze\n", + "# ANMERKUNG: Kleiner Klotz mit Index 1 und großer Klotz mit Index 2\n", + "v_1 = v_0\n", + "v_2 = 0\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"v_1 = \", v_1)\n", + "tm_utils.display_latex(\"v_2 = \", v_2)" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle m_1 = m$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle m_2 = 5 m$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massen\n", + "m_1 = m\n", + "m_2 = M\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"m_1 = \", m_1)\n", + "tm_utils.display_latex(\"m_2 = \", m_2)" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle p = m v_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Impuls vor dem Aufrutschen\n", + "p = m_1 * v_1 + m_2 * v_2\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"p = \", p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nach dem Aufrutschen und Einwirken der Reibungskraft bewegen sich beide Klötze mit der selben Geschwindigkeit.\n", + "In diesem Punkt tritt keine Relativgeschwindigkeit mehr auf und somit auch keine Reibungskraft." + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": {}, + "outputs": [], + "source": [ + "# Geschwindigkeit der Klötze nach dem Stoß (v_bar_1 = v_bar_2)\n", + "v_bar_1 = sympy.Symbol(r\"\\bar{v}_1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\bar{p} = 6 \\bar{v}_1 m$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Impuls nach dem Aufrutschen\n", + "p_bar = (m_1 + m_2) * v_bar_1\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\bar{p} = \", p_bar)" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\bar{v}_1 = \\frac{v_{0}}{6}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Gleichsetzen und v_bar_1 ermitteln\n", + "eq = sympy.Equality(p, p_bar)\n", + "\n", + "v_bar_1_result = sympy.solve(eq, v_bar_1)[0]\n", + "\n", + "# Geschwindigkeit der beiden Klötze nach dem Aufrutschen ausgeben\n", + "tm_utils.display_latex(r\"\\bar{v}_1 = \", v_bar_1_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Lösung über Widerstandskraft" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Kleinerer Klotz (oberer Klotz) wird mit Index 1 bezeichnet. Für den größeren (unteren) Klotz wird der Index 2 verwendet." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Freikörperbild" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_29_fkb.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": {}, + "outputs": [], + "source": [ + "# Kräfte\n", + "N = sympy.Symbol(\"N\")\n", + "R = sympy.Symbol(\"R\")\n", + "K = sympy.Symbol(\"K\")\n", + "\n", + "# Reibungskonstante\n", + "mu = sympy.Symbol(r\"\\mu\")\n", + "\n", + "# Zeit\n", + "t = sympy.Symbol(\"t\")\n", + "\n", + "# Freiheitsgrade\n", + "x_1 = sympy.Function(\"x_1\")\n", + "x_2 = sympy.Function(\"x_2\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Dynamisches Kräftegleichgewicht" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\rightarrow: \\quad m \\frac{d^{2}}{d t^{2}} \\operatorname{x_{1}}{\\left(t \\right)} = - R$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\uparrow: \\quad 0 = N - g m$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Oberer Klotz\n", + "sum_F_H_1 = sympy.Equality(m_1 * x_1(t).diff(t, 2), -R)\n", + "sum_F_V_1 = sympy.Equality(0, N - m_1 * g)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\rightarrow: \\quad\", sum_F_H_1)\n", + "tm_utils.display_latex(r\"\\uparrow: \\quad\", sum_F_V_1)" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\rightarrow: \\quad 5 m \\frac{d^{2}}{d t^{2}} \\operatorname{x_{2}}{\\left(t \\right)} = R$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\uparrow: \\quad 0 = K - N - 5 g m$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# Unterer Klotz\n", + "sum_F_H_2 = sympy.Equality(m_2 * x_2(t).diff(t, 2), R)\n", + "sum_F_V_2 = sympy.Equality(0, K - N - m_2 * g)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\rightarrow: \\quad\", sum_F_H_2)\n", + "tm_utils.display_latex(r\"\\uparrow: \\quad\", sum_F_V_2)" + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle R = N \\mu$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# Reibgesetz\n", + "friction = sympy.Equality(R, mu * N)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(friction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Bewegungsgleichungen" + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\ddot{x}_1(t) = - \\mu g$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\ddot{x}_2(t) = \\frac{\\mu g}{5}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Gleichungssystem nach den zwei Beschleunigungen in x-Richtung auflösen\n", + "results = sympy.solve(\n", + " [sum_F_H_1, sum_F_V_1, sum_F_H_2, sum_F_V_2, friction],\n", + " [R, N, K, x_1(t).diff(t, 2), x_2(t).diff(t, 2)])\n", + "results\n", + "xdd_1_result = results[x_1(t).diff(t, 2)]\n", + "xdd_2_result = results[x_2(t).diff(t, 2)]\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\ddot{x}_1(t) = \", xdd_1_result)\n", + "tm_utils.display_latex(r\"\\ddot{x}_2(t) = \", xdd_2_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Geschwindigkeiten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Da die Beschleunigungen konstant sind und die Anfangsgeschwindigkeiten bekannt, folgt:" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{x}_1(t) = - \\mu g t + v_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\dot{x}_2(t) = \\frac{\\mu g t}{5}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xd_1_result = sympy.integrate(xdd_1_result, t) + v_1\n", + "xd_2_result = sympy.integrate(xdd_2_result, t) + v_2\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\dot{x}_1(t) = \", xd_1_result)\n", + "tm_utils.display_latex(r\"\\dot{x}_2(t) = \", xd_2_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 176, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - \\mu g t + v_{0} = \\frac{\\mu g t}{5}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Geschwindigkeiten gleichsetzen (keine Relativgeschwindigkeit mehr)\n", + "eq = sympy.Equality(xd_1_result, xd_2_result)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(eq)" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle t^* = \\frac{5 v_{0}}{6 \\mu g}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Zeitpunkt t für Beendigung des Rutschvorgangs bestimmen\n", + "t_result = sympy.solve(eq, t)[0]\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"t^* = \", t_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Endgeschwindigkeit" + ] + }, + { + "cell_type": "code", + "execution_count": 178, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\bar{v}_1 = \\bar{v}_2 = \\frac{v_{0}}{6}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Geschwindigkeit nach dem Aufrutschen durch Einsetzen von t* bestimmen\n", + "v_bar_1 = xd_1_result.subs({t: t_result})\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\bar{v}_1 = \\bar{v}_2 = \", v_bar_1)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.2 64-bit", + "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.10.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_02/example_32.ipynb b/chapter_02/example_32.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..04410102cd64c2e0e421086f77bf6a5f5686317a --- /dev/null +++ b/chapter_02/example_32.ipynb @@ -0,0 +1,345 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 32" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_32_task.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Gegeben: $m_1 = m_2 = 40.000$ kg, $c_1 = c_2 = 1.000$ kN/m, $v_0 = 0,5$ m/s \n", + "Gesucht: maximale Federkraft $F_{12}$, maximale Zusammenpressung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [], + "source": [ + "# Fahrzeugmassen\n", + "m_1, m_2 = sympy.symbols(\"m_1 m_2\", positive=True, nonzero=True)\n", + "# Federkonstanten\n", + "c_1, c_2 = sympy.symbols(\"c_1 c_2\", positive=True, nonzero=True)\n", + "# Ausgangsgeschwindigkeit\n", + "v_0 = sympy.Symbol(\"v_0\")\n", + "# Geschwindigkeit bei maximaler Zusammenpressung (plastisch)\n", + "v_S = sympy.Symbol(\"v_S\")\n", + "# Federkraft\n", + "F_12 = sympy.Symbol(\"F_{12}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Impulssatz" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle m_{1} v_{0} = v_{S} \\left(m_{1} + m_{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "impact = sympy.Equality(m_1 * v_0 + m_2 * 0, (m_1 + m_2) * v_S)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(impact)" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle v_S = \\frac{m_{1} v_{0}}{m_{1} + m_{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Auflösen nach Geschwindigkeit bei maximaler Zusammenpressung\n", + "v_S_result = sympy.solve(impact, v_S)[0]\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"v_S = \", v_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Energiesatz" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{m_{1} v_{0}^{2}}{2} = \\frac{F_{12}^{2} \\cdot \\left(\\frac{1}{c_{2}} + \\frac{1}{c_{1}}\\right)}{2} + v_{S}^{2} \\left(\\frac{m_{1}}{2} + \\frac{m_{2}}{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "energy_conservation = sympy.Equality(sympy.Rational(1, 2) * m_1 * v_0**2, sympy.Rational(1, 2) * (m_1 + m_2) * v_S**2 + sympy.Rational(1, 2) * F_12**2 * (1/c_1 + 1/c_2))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(energy_conservation)" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{m_{1} v_{0}^{2}}{2} = \\frac{F_{12}^{2} \\cdot \\left(\\frac{1}{c_{2}} + \\frac{1}{c_{1}}\\right)}{2} + \\frac{m_{1}^{2} v_{0}^{2} \\left(\\frac{m_{1}}{2} + \\frac{m_{2}}{2}\\right)}{\\left(m_{1} + m_{2}\\right)^{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Geschwindigkeit v_S aus Impulserhaltungssatz einsetzen\n", + "energy_conservation = energy_conservation.subs({v_S: v_S_result})\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(energy_conservation)" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle F_{12} = - \\frac{\\sqrt{c_{1}} \\sqrt{c_{2}} \\sqrt{m_{1}} \\sqrt{m_{2}} v_{0}}{\\sqrt{c_{1} + c_{2}} \\sqrt{m_{1} + m_{2}}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Auflösen nach Federkraft F_12\n", + "F_12_result = sympy.solve(energy_conservation, F_12)[0]\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"F_{12} = \", F_12_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zahlenbeispiel" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle v_S = 0.25$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle F_{12} = -50000.0$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Dictionary mit Zahlenwerten\n", + "subs = {\n", + " m_1: 40_000,\n", + " m_2: 40_000,\n", + " c_1: 1_000_000,\n", + " c_2: 1_000_000,\n", + " v_0: 0.5\n", + "}\n", + "\n", + "# ... einsetzen\n", + "v_S_result = v_S_result.subs(subs).evalf()\n", + "F_12_result = F_12_result.subs(subs).evalf()\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"v_S = \", v_S_result)\n", + "tm_utils.display_latex(\"F_{12} = \", F_12_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle x_1 = -0.05$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Maximale Zusammenpressung\n", + "x_1_result = F_12 / c_1\n", + "\n", + "# ... einsetzen\n", + "x_1_result = x_1_result.subs(subs | {F_12: F_12_result}).evalf()\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"x_1 = \", x_1_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Anmerkung: Die Zahlenwerte für $F_{12}$ sowie $x_1$ sind negativ, da die Federn auf Druck beansprucht werden." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.5 64-bit", + "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.10.6" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_02/figures/example_14_task.png b/chapter_02/figures/example_14_task.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f61f2a89052d3281482a3de32a6227aa6876c8 Binary files /dev/null and b/chapter_02/figures/example_14_task.png differ diff --git a/chapter_02/figures/example_15_task.png b/chapter_02/figures/example_15_task.png new file mode 100644 index 0000000000000000000000000000000000000000..adc96cb61f34ff334daf03061be130ac8c2b900d Binary files /dev/null and b/chapter_02/figures/example_15_task.png differ diff --git a/chapter_02/figures/example_16_fkb.png b/chapter_02/figures/example_16_fkb.png new file mode 100644 index 0000000000000000000000000000000000000000..3944c498bf35fc3210da942eaef74849ee255c64 Binary files /dev/null and b/chapter_02/figures/example_16_fkb.png differ diff --git a/chapter_02/figures/example_16_task.png b/chapter_02/figures/example_16_task.png new file mode 100644 index 0000000000000000000000000000000000000000..62301df202ddcaad81955d6fa82b07b65f3ad5e5 Binary files /dev/null and b/chapter_02/figures/example_16_task.png differ diff --git a/chapter_02/figures/example_29_fkb.png b/chapter_02/figures/example_29_fkb.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed9409f67c803af21f765b3c6b73d4dbd6bb44e Binary files /dev/null and b/chapter_02/figures/example_29_fkb.png differ diff --git a/chapter_02/figures/example_29_task.png b/chapter_02/figures/example_29_task.png new file mode 100644 index 0000000000000000000000000000000000000000..3147d1a617a619f85ebe9b87a88e938b7256bdb6 Binary files /dev/null and b/chapter_02/figures/example_29_task.png differ diff --git a/chapter_02/figures/example_32_task.png b/chapter_02/figures/example_32_task.png new file mode 100644 index 0000000000000000000000000000000000000000..38fa0f19c3912cd6aa0a83e164716635c61709b7 Binary files /dev/null and b/chapter_02/figures/example_32_task.png differ diff --git a/chapter_03/.ipynb_checkpoints/example_38-checkpoint.ipynb b/chapter_03/.ipynb_checkpoints/example_38-checkpoint.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..1508bf2d71ee5331e1cba0d01892abfd73b0b9fd --- /dev/null +++ b/chapter_03/.ipynb_checkpoints/example_38-checkpoint.ipynb @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 38" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_38_task.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gegeben: Dicke $t$, Winkel $\\alpha$, Äußerer Radius $R$, Dichte $\\rho$ \n", + "gesucht: Massenträgheitsmoment $\\Theta_A$ sowie $\\Theta_S$ um die Achse durch den Schwerpunkt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Skizze zur Problemlösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_38_sketch.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometrie\n", + "alpha = sympy.Symbol(r\"\\alpha\", positive=True, nonzero=True)\n", + "t = sympy.Symbol(\"t\", positive=True, nonzero=True)\n", + "R = sympy.Symbol(\"R\", positive=True, nonzero=True)\n", + "\n", + "# Materialeigenschaften\n", + "rho = sympy.Symbol(r\"\\rho\", positive=True, nonzero=True)\n", + "\n", + "# Laufkoordinate\n", + "r = sympy.Symbol(\"r\", positive=True, nonzero=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Infinitesimales Massenstück $dm$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Es gilt für ein Element des Kreisausschnitt mit konstanter Dicke $t$ für das infinitesimale Massenelement $dm = \\rho t dA = 2 \\alpha \\rho t r dr $" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_A$ bezogen auf Achse A" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A = \\frac{R^{4} \\alpha \\rho t}{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Theta_A = 2 * alpha * rho * t * sympy.integrate(r**3, (r, 0, R))\n", + "\n", + "# .. ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A = \", Theta_A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_S$ bezogen auf Achse durch den Schwerpunkt" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle m = R^{2} \\alpha \\rho t$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Gesamtmasse m aus Integration von dm berechnen\n", + "m = 2 * alpha * rho * t * sympy.integrate(r, (r, 0, R))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"m = \", m)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle r_S = \\frac{2 R \\sin{\\left(\\alpha \\right)}}{3 \\alpha}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Schwerpunktsabstand zu Koordinatenursprung\n", + "r_S = sympy.Rational(2, 3) * R * sympy.sin(alpha) / alpha \n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"r_S = \", r_S)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{R^{4} \\alpha \\rho t}{2} - \\frac{4 R^{4} \\rho t \\sin^{2}{\\left(\\alpha \\right)}}{9 \\alpha}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Satz von Steiner zur Berechnung des Massenträgheitsmomentes anwenden\n", + "Theta_S = Theta_A - r_S**2 * m\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "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.10.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_03/.ipynb_checkpoints/example_39-checkpoint.ipynb b/chapter_03/.ipynb_checkpoints/example_39-checkpoint.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..45302bab11b7634702b6917bed75eabd6eec918d --- /dev/null +++ b/chapter_03/.ipynb_checkpoints/example_39-checkpoint.ipynb @@ -0,0 +1,397 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 39" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# Numpy\n", + "import numpy\n", + "# Pyplot \n", + "import matplotlib.pyplot as pyplot\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_39_task.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gegeben: Länge $l$, Querschnitt $A$, Dichte $\\rho$ \n", + "gesucht: Massenträgheitsmoment $\\Theta_A$ sowie $\\Theta_S$ um die Achse durch den Schwerpunkt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Skizze zur Problemlösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_39_sketch.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometrie\n", + "A = sympy.Symbol(\"A\", positive=True, nonzero=True)\n", + "l = sympy.Symbol(\"l\", positive=True, nonzero=True)\n", + "\n", + "# Materialeigenschaften\n", + "rho = sympy.Symbol(r\"\\rho\", positive=True, nonzero=True)\n", + "\n", + "# Laufkoordinate\n", + "r = sympy.Symbol(\"r\", positive=True, nonzero=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Infinitesimales Massenstück $dm$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Es gilt für ein Element des Kreisausschnitt mit konstanter Dicke $t$ für das infinitesimale Massenelement $dm = \\rho dV = \\rho A dr = \\rho A dr$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Gesamtmasse $m$" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle m = A \\rho l$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Gesamtmasse m aus Integration von dm berechnen\n", + "m_result = rho * A * sympy.integrate(1, (r, 0, l))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"m = \", m_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_A$ bezogen auf Achse A" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A = \\frac{A \\rho l^{3}}{3}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Theta_A_result = rho * A * sympy.integrate(r**2, (r, 0, l))\n", + "\n", + "# .. ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A = \", Theta_A_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A = \\frac{l^{2} m}{3}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "m = sympy.Symbol(\"m\", positive=True, nonzero=True)\n", + "\n", + "# Masse m einsetzen\n", + "Theta_A_result = Theta_A_result.subs({m_result: m})\n", + "\n", + "# Massenträgheitsmoment Theta_A ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A = \", Theta_A_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_S$ bezogen auf Achse durch den Schwerpunkt" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle r_S = \\frac{l}{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Schwerpunktsabstand zu Koordinatenursprung\n", + "r_S_result = sympy.Rational(1, 2) * l\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"r_S = \", r_S)" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{l^{2} m}{12}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Satz von Steiner zur Berechnung des Massenträgheitsmomentes anwenden\n", + "Theta_S_result = Theta_A_result - r_S_result**2 * m\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Grafische Darstellung " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wenn der Punkt A variabel gewählt wird, lässt sich grafisch darstellen, dass das geringste Massenträgheitsmoment um die Schwerpunktsachse auftritt. \n", + "Hierzu wird die Koordinate $x$ eingeführt, die den Abstand vom oberen Stabende zum Punkt A definiert. Der Integrationsbereich muss in Abhängigkeit von $x$ angepasst werden." + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A(x) = A \\rho \\left(\\frac{x^{3}}{3} + \\frac{\\left(l - x\\right)^{3}}{3}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Abstand x von oberem Stabende zum neuen Drehpunkt A\n", + "x = sympy.Symbol(\"x\", positive=True, nonzero=True)\n", + "\n", + "Theta_A_result = rho * A * sympy.integrate(r**2, (r, -x, l-x))\n", + "\n", + "# Formel für Massengträgheitsmoment ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A(x) = \", Theta_A_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.lines.Line2D at 0x7f66dd7b4760>" + ] + }, + "execution_count": 211, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 864x720 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# Figure erstellen\n", + "fig = pyplot.figure(figsize=(12, 10))\n", + "# Achsen erstellen\n", + "ax = fig.subplots(1, 1)\n", + "\n", + "# Dichte: rho = 7850 kg/m^3 (Stahl)\n", + "# Querschnittsfläche: A = 1dm^2 = 1/100 m^2\n", + "# Länge: l = 1.0m\n", + "subs = { rho: 7850.0, A: 0.01, l: 1.0}\n", + "\n", + "# Werte für den Abstand zur Drehachse vom oberen Stabende gesehen\n", + "x_max = subs[l]\n", + "x_values = numpy.linspace(0, x_max, num=100)\n", + "\n", + "# Massenträgheitsmomentwerte\n", + "Theta_values = tm_utils.eval_expr(Theta_A_result.subs(subs), x, x_values)\n", + "\n", + "ax.plot(x_values, Theta_values)\n", + "\n", + "# Einstellungen für die Achsen\n", + "ax.grid(True, 'both', 'both') \n", + "\n", + "ax.set_xlim(0, x_max) # x von 0 bis x_max\n", + "ax.set_ylim(0) # y-Achse beginnt bei 0\n", + "\n", + "ax.set_ylabel(r\"$\\Theta(x)$ in $kg\\.m^2$\")\n", + "ax.set_xlabel(\"Abstand $x$ in m\")\n", + "\n", + "# Markierung des Schwerpunktsabstandes\n", + "ax.axvline(0.5, color=\"red\", linestyle=\"dashed\")" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "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.10.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_03/.ipynb_checkpoints/example_40-checkpoint.ipynb b/chapter_03/.ipynb_checkpoints/example_40-checkpoint.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..442e930369a1a2023ca0ecbd8ac2619a34303282 --- /dev/null +++ b/chapter_03/.ipynb_checkpoints/example_40-checkpoint.ipynb @@ -0,0 +1,228 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 40" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_40_task.png\"/>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gesucht: Massenträgheitsmoment der Kreisscheibe bezüglich Schwerpunktsachse $\\Theta_S$ sowie das Massenträgheitsmoment $\\Theta_A$ bezüglich einer Achse durch den Punkt \n", + "gegeben: $m$, $R$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometrie\n", + "R = sympy.Symbol(\"R\", real=True, positive=True, nonzero=True)\n", + "\n", + "# Materialeigenschaften\n", + "rho = sympy.Symbol(r\"\\rho\", real=True, positive=True, nonzero=True)\n", + "\n", + "# Masse\n", + "m = sympy.Symbol(\"m\", real=True, positive=True, nonzero=True)\n", + "\n", + "# Laufkoordinate\n", + "r = sympy.Symbol(\"r\", real=True, positive=True, nonzero=True)\n", + "phi = sympy.Symbol(r\"\\varphi\", real=True, positive=True, nonzero=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# Kreisscheibendicke \n", + "# es gilt: m = rho * V = rho * pi * R^2 * t <=> t = m / (rho * pi * R^2)\n", + "t = m / (rho * sympy.pi * R**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_S$ durch Schwerpunktsachse durch Integration in Polarkoordinaten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Es gilt in Polarkoordinaten: $dm = \\rho \\cdot t \\cdot rd\\varphi dr$" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{R^{2} m}{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massenträgheitsmoment durch Schwerpunktsachse ()\n", + "Theta_S_result = rho * t * sympy.integrate( sympy.integrate(r**2 * r, (r, 0, R)), (phi, 0, 2 * sympy.pi))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_A$ durch Achse bezüglich Punkt A durch Integration in Polarkoordinaten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_40_sketch.png\">" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle |z| = \\sqrt{r^{2} \\sin^{2}{\\left(\\varphi \\right)} + \\left(R + r \\cos{\\left(\\varphi \\right)}\\right)^{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Abstand z\n", + "z = sympy.sqrt((R + r * sympy.cos(phi))**2 + (r*sympy.sin(phi))**2)\n", + "\n", + "# Abstandsformel ausgeben\n", + "tm_utils.display_latex(\"|z| = \", z)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A = \\frac{3 R^{2} m}{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massenträgheitsmoment durch Schwerpunktsachse ()\n", + "Theta_A_result = rho * t * sympy.integrate( sympy.integrate(z**2 * r, (r, 0, R)), (phi, 0, 2 * sympy.pi))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A = \", Theta_A_result)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "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.10.9" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_03/.ipynb_checkpoints/example_41-checkpoint.ipynb b/chapter_03/.ipynb_checkpoints/example_41-checkpoint.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..783a7b90f4b0d18c6ea97241d6648d1515f42585 --- /dev/null +++ b/chapter_03/.ipynb_checkpoints/example_41-checkpoint.ipynb @@ -0,0 +1,370 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 41" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_41_task.png\"/>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gesucht: Massenträgheitsmoment der Kugel $\\Theta_S$ bezüglich Schwerpunktsachse\n", + "gegeben: $m$, $R$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Skizze" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_41_sketch.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometrie\n", + "R = sympy.Symbol(\"R\", positive=True, nonzero=True)\n", + "\n", + "# Materialeigenschaften\n", + "rho = sympy.Symbol(r\"\\rho\", positive=True, nonzero=True)\n", + "\n", + "# Masse\n", + "m = sympy.Symbol(\"m\", positive=True, nonzero=True)\n", + "dm = sympy.Symbol(r\"\\mathrm{d}m\", positive=True, nonzero=True)\n", + "\n", + "# Laufkoordinate\n", + "z = sympy.Symbol(\"z\", positive=True, nonzero=True)\n", + "dz = sympy.Symbol(\"dz\", positive=True, nonzero=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_S$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aus der Geometrie folgt der Zusammenhang für den Radius r, der infinitesimal dünnen Kreisscheibe:" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle r = \\sqrt{R^{2} - z^{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# r = r(z)\n", + "r_result = sympy.sqrt(R**2 - z**2)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"r = \", r_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aus Beispiel 40 ist bekannt, dass für eine Kreisscheibe das Massenträgheitsmoment $\\frac 12 mr^2$ gilt. \n", + "Daraus folgt für das infinitesimale Massenträgheitsmoment, der infinitesimal dünnen, in der Skizze dargestellten Kreisscheibe: $\\mathrm{d}\\Theta_S = \\frac 12 r^2 \\mathrm{d}m$" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\mathrm{d}\\Theta_S = \\mathrm{d}m \\left(\\frac{R^{2}}{2} - \\frac{z^{2}}{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Infinitesimales Massenträgheitsmoment der infinitesimal dünnen Kreisscheibe\n", + "dTheta_S_result = sympy.Rational(1, 2) * r_result**2 * dm\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\mathrm{d}\\Theta_S = \", dTheta_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Die Masse $\\mathrm{d}m$ der infinitesimal dünnen Kreisscheibe beträgt:" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\mathrm{d}m = \\pi \\rho dz \\left(R^{2} - z^{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Masse dm\n", + "dm_result = rho * sympy.pi * r_result**2 * dz\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\mathrm{d}m = \", dm_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\mathrm{d}\\Theta_S = \\pi \\rho dz \\left(\\frac{R^{2}}{2} - \\frac{z^{2}}{2}\\right) \\left(R^{2} - z^{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Infinitesimales Massenträgheitsmoment der infinitesimal dünnen Kreisscheibe\n", + "dTheta_S_result = dTheta_S_result.subs({dm: dm_result})\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\mathrm{d}\\Theta_S = \", dTheta_S_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{\\mathrm{d}\\Theta_S}{\\mathrm{d}z} = \\pi \\rho \\left(\\frac{R^{2}}{2} - \\frac{z^{2}}{2}\\right) \\left(R^{2} - z^{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# dTheta_S / dz ausgeben\n", + "tm_utils.display_latex(r\"\\frac{\\mathrm{d}\\Theta_S}{\\mathrm{d}z} = \", (dTheta_S_result / dz))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wir integrieren:\n", + "$$\n", + " \\Theta_S = \\int \\mathrm{d}\\Theta_S = \\int \\frac 12 r^2 \\mathrm{d}m = \\frac 12 \\rho \\pi \\int\\limits_{-R}^{R} r^4 \\mathrm{d}z\n", + "$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{8 \\pi R^{5} \\rho}{15}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massenträgheitsmoment durch Schwerpunktsachse ()\n", + "Theta_S_result = sympy.Rational(1, 2) * rho * sympy.pi * sympy.integrate(r_result**4, (z, -R, R))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle V = \\frac{4 \\pi R^{3}}{3}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + " # mit dem Kugelvolumen\n", + " V_result = sympy.Rational(4, 3) * sympy.pi * R**3\n", + "\n", + " # ... ausgeben\n", + " tm_utils.display_latex(\"V = \", V_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{2 R^{2} m}{5}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massenträgheitsmoment auf Masse bezogen\n", + "Theta_S_result = Theta_S_result.subs({V_result: m / rho}) \n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S_result)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "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.10.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_03/.ipynb_checkpoints/example_43-checkpoint.ipynb b/chapter_03/.ipynb_checkpoints/example_43-checkpoint.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..99145a986d31816cc1f821b7be588509b0c71f4b --- /dev/null +++ b/chapter_03/.ipynb_checkpoints/example_43-checkpoint.ipynb @@ -0,0 +1,391 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 43" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# Technische Mechanik\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_43_task.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gegeben: $a$, $l$, $F$, $\\mu$, $\\Theta_A$, $\\omega_0$ \n", + "gesucht: Umdrehungen $n_S$ bis zum Stillstand der Rolle $A$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Freikörperbild" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_43_fkb.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": {}, + "outputs": [], + "source": [ + "# Stab \n", + "l = sympy.Symbol(\"l\", positive=True, nonzero=True)\n", + "a = sympy.Symbol(\"a\", positive=True, nonzero=True)\n", + "\n", + "# Rolle\n", + "r = sympy.Symbol(\"r\", positive=True, nonzero=True)\n", + "omega_0 = sympy.Symbol(r\"\\omega_0\")\n", + "\n", + "# Massenträgheitsmomente\n", + "Theta_A = sympy.Symbol(r\"\\Theta_A\", positive=True, nonzero=True)\n", + "\n", + "# Reibungskoeffizienten\n", + "mu = sympy.Symbol(r\"\\mu\", positive=True, nonzero=True)\n", + "\n", + "# Kräfte\n", + "F = sympy.Symbol(\"F\")\n", + "N = sympy.Symbol(\"N\")\n", + "R_result = mu * N\n", + "\n", + "# Zeit\n", + "t = sympy.Symbol(\"t\", positive=True)\n", + "\n", + "# Freiheitsgrad\n", + "phi = sympy.Function(r\"\\varphi\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Drehmomentengleichgewicht" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\overset{\\curvearrowleft}{B}:\\quad 0 = F l - N a$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sum_M__B_cw = sympy.Equality(0, F * l - N * a) # Statisches Gleichgewicht\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\overset{\\curvearrowleft}{B}:\\quad\", sum_M__B_cw)" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\overset{\\curvearrowleft}{A}:\\quad \\Theta_{A} \\frac{d^{2}}{d t^{2}} \\varphi{\\left(t \\right)} = - N \\mu r$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sum_M__A_cw = sympy.Equality(Theta_A * phi(t).diff(t, 2), -R_result * r)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\overset{\\curvearrowleft}{A}:\\quad\", sum_M__A_cw)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Winkelbeschleunigung bestimmen" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{dt^2}\\varphi(t) = - \\frac{F \\mu l r}{\\Theta_{A} a}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "results = sympy.solve([sum_M__A_cw, sum_M__B_cw], [N, phi(t).diff(t, 2)])\n", + "\n", + "# Winkelbeschleunigung der Rolle\n", + "dphi_dt2_result = results[phi(t).diff(t, 2)]\n", + "\n", + "# Winkelbeschleunigung der Rolle ausgeben\n", + "tm_utils.display_latex(r\"\\frac{d}{dt^2}\\varphi(t) = \", dphi_dt2_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Winkelgeschwindigkeit bestimmen" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{dt}\\varphi(t) = - \\frac{F \\mu l r t}{\\Theta_{A} a} + \\omega_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dphi_dt_result = sympy.integrate(dphi_dt2_result, t) + omega_0\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\frac{d}{dt}\\varphi(t) = \", dphi_dt_result)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Winkel bestimmen" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\varphi{\\left(t \\right)} = - \\frac{F \\mu l r t^{2}}{2 \\Theta_{A} a} + \\omega_{0} t$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "phi_result = sympy.integrate(dphi_dt_result, t)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(phi(t), \" = \", phi_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zeit bis zum Stillstand" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle t_S = \\frac{\\Theta_{A} \\omega_{0} a}{F \\mu l r}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "t_S = sympy.Symbol(\"t_S\")\n", + "t_S_result = sympy.solve(sympy.Equality(dphi_dt_result, 0), t)[0]\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"t_S = \", t_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zurückgelegter Winkel bis zum Stillstand" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\varphi{\\left(t_{S} \\right)} = \\frac{\\Theta_{A} \\omega_{0}^{2} a}{2 F \\mu l r}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "phi_S_result = phi_result.subs({t: t_S_result})\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(phi(t_S), \" = \", phi_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zurückgelegte Umdrehungen bis zum Stillstand" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle n_S = \\frac{\\Theta_{A} \\omega_{0}^{2} a}{4 \\pi F \\mu l r}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Zurückgelegte Umdrehungen bis zum Stillstand der Rolle\n", + "n_S_result = phi_S_result / (2 * sympy.pi)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"n_S = \", n_S_result)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "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.10.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter_03/example_38.ipynb b/chapter_03/example_38.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c70874d54d762959b259eeb57d622c18311f87d4 --- /dev/null +++ b/chapter_03/example_38.ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 38" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_38_task.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gegeben: Dicke $t$, Winkel $\\alpha$, Äußerer Radius $R$, Dichte $\\rho$ \n", + "gesucht: Massenträgheitsmoment $\\Theta_A$ sowie $\\Theta_S$ um die Achse durch den Schwerpunkt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Skizze zur Problemlösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_38_sketch.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometrie\n", + "alpha = sympy.Symbol(r\"\\alpha\", positive=True, nonzero=True)\n", + "t = sympy.Symbol(\"t\", positive=True, nonzero=True)\n", + "R = sympy.Symbol(\"R\", positive=True, nonzero=True)\n", + "\n", + "# Materialeigenschaften\n", + "rho = sympy.Symbol(r\"\\rho\", positive=True, nonzero=True)\n", + "\n", + "# Laufkoordinate\n", + "r = sympy.Symbol(\"r\", positive=True, nonzero=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Infinitesimales Massenstück $dm$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Es gilt für ein Element des Kreisausschnitt mit konstanter Dicke $t$ für das infinitesimale Massenelement $dm = \\rho t dA = 2 \\alpha \\rho t r dr $" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_A$ bezogen auf Achse A" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A = \\frac{R^{4} \\alpha \\rho t}{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Theta_A = 2 * alpha * rho * t * sympy.integrate(r**3, (r, 0, R))\n", + "\n", + "# .. ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A = \", Theta_A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_S$ bezogen auf Achse durch den Schwerpunkt" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle m = R^{2} \\alpha \\rho t$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Gesamtmasse m aus Integration von dm berechnen\n", + "m = 2 * alpha * rho * t * sympy.integrate(r, (r, 0, R))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"m = \", m)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle r_S = \\frac{2 R \\sin{\\left(\\alpha \\right)}}{3 \\alpha}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Schwerpunktsabstand zu Koordinatenursprung\n", + "r_S = sympy.Rational(2, 3) * R * sympy.sin(alpha) / alpha \n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"r_S = \", r_S)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{R^{4} \\alpha \\rho t}{2} - \\frac{4 R^{4} \\rho t \\sin^{2}{\\left(\\alpha \\right)}}{9 \\alpha}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Satz von Steiner zur Berechnung des Massenträgheitsmomentes anwenden\n", + "Theta_S = Theta_A - r_S**2 * m\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "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.7.16" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/chapter_03/example_39.ipynb b/chapter_03/example_39.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..7c90abd2940a55dbfca7b69eae06710e012c2114 --- /dev/null +++ b/chapter_03/example_39.ipynb @@ -0,0 +1,396 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 39" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# Numpy\n", + "import numpy\n", + "# Pyplot \n", + "import matplotlib.pyplot as pyplot\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_39_task.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gegeben: Länge $l$, Querschnitt $A$, Dichte $\\rho$ \n", + "gesucht: Massenträgheitsmoment $\\Theta_A$ sowie $\\Theta_S$ um die Achse durch den Schwerpunkt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Skizze zur Problemlösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_39_sketch.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometrie\n", + "A = sympy.Symbol(\"A\", positive=True, nonzero=True)\n", + "l = sympy.Symbol(\"l\", positive=True, nonzero=True)\n", + "\n", + "# Materialeigenschaften\n", + "rho = sympy.Symbol(r\"\\rho\", positive=True, nonzero=True)\n", + "\n", + "# Laufkoordinate\n", + "r = sympy.Symbol(\"r\", positive=True, nonzero=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Infinitesimales Massenstück $dm$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Es gilt für ein Element des Kreisausschnitt mit konstanter Dicke $t$ für das infinitesimale Massenelement $dm = \\rho dV = \\rho A dr = \\rho A dr$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Gesamtmasse $m$" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle m = A \\rho l$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Gesamtmasse m aus Integration von dm berechnen\n", + "m_result = rho * A * sympy.integrate(1, (r, 0, l))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"m = \", m_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_A$ bezogen auf Achse A" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A = \\frac{A \\rho l^{3}}{3}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Theta_A_result = rho * A * sympy.integrate(r**2, (r, 0, l))\n", + "\n", + "# .. ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A = \", Theta_A_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A = \\frac{l^{2} m}{3}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "m = sympy.Symbol(\"m\", positive=True, nonzero=True)\n", + "\n", + "# Masse m einsetzen\n", + "Theta_A_result = Theta_A_result.subs({m_result: m})\n", + "\n", + "# Massenträgheitsmoment Theta_A ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A = \", Theta_A_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_S$ bezogen auf Achse durch den Schwerpunkt" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle r_S = \\frac{l}{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Schwerpunktsabstand zu Koordinatenursprung\n", + "r_S_result = sympy.Rational(1, 2) * l\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"r_S = \", r_S)" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{l^{2} m}{12}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Satz von Steiner zur Berechnung des Massenträgheitsmomentes anwenden\n", + "Theta_S_result = Theta_A_result - r_S_result**2 * m\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Grafische Darstellung " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wenn der Punkt A variabel gewählt wird, lässt sich grafisch darstellen, dass das geringste Massenträgheitsmoment um die Schwerpunktsachse auftritt. \n", + "Hierzu wird die Koordinate $x$ eingeführt, die den Abstand vom oberen Stabende zum Punkt A definiert. Der Integrationsbereich muss in Abhängigkeit von $x$ angepasst werden." + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A(x) = A \\rho \\left(\\frac{x^{3}}{3} + \\frac{\\left(l - x\\right)^{3}}{3}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Abstand x von oberem Stabende zum neuen Drehpunkt A\n", + "x = sympy.Symbol(\"x\", positive=True, nonzero=True)\n", + "\n", + "Theta_A_result = rho * A * sympy.integrate(r**2, (r, -x, l-x))\n", + "\n", + "# Formel für Massengträgheitsmoment ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A(x) = \", Theta_A_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.lines.Line2D at 0x7f66dd7b4760>" + ] + }, + "execution_count": 211, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 864x720 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# Figure erstellen\n", + "fig = pyplot.figure(figsize=(12, 10))\n", + "# Achsen erstellen\n", + "ax = fig.subplots(1, 1)\n", + "\n", + "# Dichte: rho = 7850 kg/m^3 (Stahl)\n", + "# Querschnittsfläche: A = 1dm^2 = 1/100 m^2\n", + "# Länge: l = 1.0m\n", + "subs = { rho: 7850.0, A: 0.01, l: 1.0}\n", + "\n", + "# Werte für den Abstand zur Drehachse vom oberen Stabende gesehen\n", + "x_max = subs[l]\n", + "x_values = numpy.linspace(0, x_max, num=100)\n", + "\n", + "# Massenträgheitsmomentwerte\n", + "Theta_values = tm_utils.eval_expr(Theta_A_result.subs(subs), x, x_values)\n", + "\n", + "ax.plot(x_values, Theta_values)\n", + "\n", + "# Einstellungen für die Achsen\n", + "ax.grid(True, 'both', 'both') \n", + "\n", + "ax.set_xlim(0, x_max) # x von 0 bis x_max\n", + "ax.set_ylim(0) # y-Achse beginnt bei 0\n", + "\n", + "ax.set_ylabel(r\"$\\Theta(x)$ in $kg\\.m^2$\")\n", + "ax.set_xlabel(\"Abstand $x$ in m\")\n", + "\n", + "# Markierung des Schwerpunktsabstandes\n", + "ax.axvline(0.5, color=\"red\", linestyle=\"dashed\")" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "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.7.16" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/chapter_03/example_40.ipynb b/chapter_03/example_40.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..022dd4dba5eae5066e86a3a497183ee6c1c4856d --- /dev/null +++ b/chapter_03/example_40.ipynb @@ -0,0 +1,227 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 40" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_40_task.png\"/>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gesucht: Massenträgheitsmoment der Kreisscheibe bezüglich Schwerpunktsachse $\\Theta_S$ sowie das Massenträgheitsmoment $\\Theta_A$ bezüglich einer Achse durch den Punkt \n", + "gegeben: $m$, $R$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometrie\n", + "R = sympy.Symbol(\"R\", real=True, positive=True, nonzero=True)\n", + "\n", + "# Materialeigenschaften\n", + "rho = sympy.Symbol(r\"\\rho\", real=True, positive=True, nonzero=True)\n", + "\n", + "# Masse\n", + "m = sympy.Symbol(\"m\", real=True, positive=True, nonzero=True)\n", + "\n", + "# Laufkoordinate\n", + "r = sympy.Symbol(\"r\", real=True, positive=True, nonzero=True)\n", + "phi = sympy.Symbol(r\"\\varphi\", real=True, positive=True, nonzero=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# Kreisscheibendicke \n", + "# es gilt: m = rho * V = rho * pi * R^2 * t <=> t = m / (rho * pi * R^2)\n", + "t = m / (rho * sympy.pi * R**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_S$ durch Schwerpunktsachse durch Integration in Polarkoordinaten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Es gilt in Polarkoordinaten: $dm = \\rho \\cdot t \\cdot rd\\varphi dr$" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{R^{2} m}{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massenträgheitsmoment durch Schwerpunktsachse ()\n", + "Theta_S_result = rho * t * sympy.integrate( sympy.integrate(r**2 * r, (r, 0, R)), (phi, 0, 2 * sympy.pi))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_A$ durch Achse bezüglich Punkt A durch Integration in Polarkoordinaten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_40_sketch.png\">" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle |z| = \\sqrt{r^{2} \\sin^{2}{\\left(\\varphi \\right)} + \\left(R + r \\cos{\\left(\\varphi \\right)}\\right)^{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Abstand z\n", + "z = sympy.sqrt((R + r * sympy.cos(phi))**2 + (r*sympy.sin(phi))**2)\n", + "\n", + "# Abstandsformel ausgeben\n", + "tm_utils.display_latex(\"|z| = \", z)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_A = \\frac{3 R^{2} m}{2}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massenträgheitsmoment durch Schwerpunktsachse ()\n", + "Theta_A_result = rho * t * sympy.integrate( sympy.integrate(z**2 * r, (r, 0, R)), (phi, 0, 2 * sympy.pi))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_A = \", Theta_A_result)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "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.7.16" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/chapter_03/example_41.ipynb b/chapter_03/example_41.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..6d059eb837ea7fbb75fb1374a9ef79681fb8421f --- /dev/null +++ b/chapter_03/example_41.ipynb @@ -0,0 +1,369 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 41" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# tm_utils\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_41_task.png\"/>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gesucht: Massenträgheitsmoment der Kugel $\\Theta_S$ bezüglich Schwerpunktsachse\n", + "gegeben: $m$, $R$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Skizze" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_41_sketch.png\">" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometrie\n", + "R = sympy.Symbol(\"R\", positive=True, nonzero=True)\n", + "\n", + "# Materialeigenschaften\n", + "rho = sympy.Symbol(r\"\\rho\", positive=True, nonzero=True)\n", + "\n", + "# Masse\n", + "m = sympy.Symbol(\"m\", positive=True, nonzero=True)\n", + "dm = sympy.Symbol(r\"\\mathrm{d}m\", positive=True, nonzero=True)\n", + "\n", + "# Laufkoordinate\n", + "z = sympy.Symbol(\"z\", positive=True, nonzero=True)\n", + "dz = sympy.Symbol(\"dz\", positive=True, nonzero=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Massenträgheitsmoment $\\Theta_S$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aus der Geometrie folgt der Zusammenhang für den Radius r, der infinitesimal dünnen Kreisscheibe:" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle r = \\sqrt{R^{2} - z^{2}}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# r = r(z)\n", + "r_result = sympy.sqrt(R**2 - z**2)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"r = \", r_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aus Beispiel 40 ist bekannt, dass für eine Kreisscheibe das Massenträgheitsmoment $\\frac 12 mr^2$ gilt. \n", + "Daraus folgt für das infinitesimale Massenträgheitsmoment, der infinitesimal dünnen, in der Skizze dargestellten Kreisscheibe: $\\mathrm{d}\\Theta_S = \\frac 12 r^2 \\mathrm{d}m$" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\mathrm{d}\\Theta_S = \\mathrm{d}m \\left(\\frac{R^{2}}{2} - \\frac{z^{2}}{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Infinitesimales Massenträgheitsmoment der infinitesimal dünnen Kreisscheibe\n", + "dTheta_S_result = sympy.Rational(1, 2) * r_result**2 * dm\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\mathrm{d}\\Theta_S = \", dTheta_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Die Masse $\\mathrm{d}m$ der infinitesimal dünnen Kreisscheibe beträgt:" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\mathrm{d}m = \\pi \\rho dz \\left(R^{2} - z^{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Masse dm\n", + "dm_result = rho * sympy.pi * r_result**2 * dz\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\mathrm{d}m = \", dm_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\mathrm{d}\\Theta_S = \\pi \\rho dz \\left(\\frac{R^{2}}{2} - \\frac{z^{2}}{2}\\right) \\left(R^{2} - z^{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Infinitesimales Massenträgheitsmoment der infinitesimal dünnen Kreisscheibe\n", + "dTheta_S_result = dTheta_S_result.subs({dm: dm_result})\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\mathrm{d}\\Theta_S = \", dTheta_S_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{\\mathrm{d}\\Theta_S}{\\mathrm{d}z} = \\pi \\rho \\left(\\frac{R^{2}}{2} - \\frac{z^{2}}{2}\\right) \\left(R^{2} - z^{2}\\right)$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# dTheta_S / dz ausgeben\n", + "tm_utils.display_latex(r\"\\frac{\\mathrm{d}\\Theta_S}{\\mathrm{d}z} = \", (dTheta_S_result / dz))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wir integrieren:\n", + "$$\n", + " \\Theta_S = \\int \\mathrm{d}\\Theta_S = \\int \\frac 12 r^2 \\mathrm{d}m = \\frac 12 \\rho \\pi \\int\\limits_{-R}^{R} r^4 \\mathrm{d}z\n", + "$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{8 \\pi R^{5} \\rho}{15}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massenträgheitsmoment durch Schwerpunktsachse ()\n", + "Theta_S_result = sympy.Rational(1, 2) * rho * sympy.pi * sympy.integrate(r_result**4, (z, -R, R))\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle V = \\frac{4 \\pi R^{3}}{3}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + " # mit dem Kugelvolumen\n", + " V_result = sympy.Rational(4, 3) * sympy.pi * R**3\n", + "\n", + " # ... ausgeben\n", + " tm_utils.display_latex(\"V = \", V_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\Theta_S = \\frac{2 R^{2} m}{5}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Massenträgheitsmoment auf Masse bezogen\n", + "Theta_S_result = Theta_S_result.subs({V_result: m / rho}) \n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\Theta_S = \", Theta_S_result)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "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.7.16" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/chapter_03/example_43.ipynb b/chapter_03/example_43.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..e831832d849db6f6b69120b78f447822734804dc --- /dev/null +++ b/chapter_03/example_43.ipynb @@ -0,0 +1,390 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Beispiel 43" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Präambel" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": {}, + "outputs": [], + "source": [ + "# Sympy\n", + "import sympy\n", + "# Technische Mechanik\n", + "import tm_utils" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabenstellung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_43_task.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "gegeben: $a$, $l$, $F$, $\\mu$, $\\Theta_A$, $\\omega_0$ \n", + "gesucht: Umdrehungen $n_S$ bis zum Stillstand der Rolle $A$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lösung" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Freikörperbild" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"./figures/example_43_fkb.png\" />" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Symbole" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": {}, + "outputs": [], + "source": [ + "# Stab \n", + "l = sympy.Symbol(\"l\", positive=True, nonzero=True)\n", + "a = sympy.Symbol(\"a\", positive=True, nonzero=True)\n", + "\n", + "# Rolle\n", + "r = sympy.Symbol(\"r\", positive=True, nonzero=True)\n", + "omega_0 = sympy.Symbol(r\"\\omega_0\")\n", + "\n", + "# Massenträgheitsmomente\n", + "Theta_A = sympy.Symbol(r\"\\Theta_A\", positive=True, nonzero=True)\n", + "\n", + "# Reibungskoeffizienten\n", + "mu = sympy.Symbol(r\"\\mu\", positive=True, nonzero=True)\n", + "\n", + "# Kräfte\n", + "F = sympy.Symbol(\"F\")\n", + "N = sympy.Symbol(\"N\")\n", + "R_result = mu * N\n", + "\n", + "# Zeit\n", + "t = sympy.Symbol(\"t\", positive=True)\n", + "\n", + "# Freiheitsgrad\n", + "phi = sympy.Function(r\"\\varphi\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Drehmomentengleichgewicht" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\overset{\\curvearrowleft}{B}:\\quad 0 = F l - N a$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sum_M__B_cw = sympy.Equality(0, F * l - N * a) # Statisches Gleichgewicht\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\overset{\\curvearrowleft}{B}:\\quad\", sum_M__B_cw)" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\overset{\\curvearrowleft}{A}:\\quad \\Theta_{A} \\frac{d^{2}}{d t^{2}} \\varphi{\\left(t \\right)} = - N \\mu r$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sum_M__A_cw = sympy.Equality(Theta_A * phi(t).diff(t, 2), -R_result * r)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\overset{\\curvearrowleft}{A}:\\quad\", sum_M__A_cw)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Winkelbeschleunigung bestimmen" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{dt^2}\\varphi(t) = - \\frac{F \\mu l r}{\\Theta_{A} a}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "results = sympy.solve([sum_M__A_cw, sum_M__B_cw], [N, phi(t).diff(t, 2)])\n", + "\n", + "# Winkelbeschleunigung der Rolle\n", + "dphi_dt2_result = results[phi(t).diff(t, 2)]\n", + "\n", + "# Winkelbeschleunigung der Rolle ausgeben\n", + "tm_utils.display_latex(r\"\\frac{d}{dt^2}\\varphi(t) = \", dphi_dt2_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Winkelgeschwindigkeit bestimmen" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{d}{dt}\\varphi(t) = - \\frac{F \\mu l r t}{\\Theta_{A} a} + \\omega_{0}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dphi_dt_result = sympy.integrate(dphi_dt2_result, t) + omega_0\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(r\"\\frac{d}{dt}\\varphi(t) = \", dphi_dt_result)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Winkel bestimmen" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\varphi{\\left(t \\right)} = - \\frac{F \\mu l r t^{2}}{2 \\Theta_{A} a} + \\omega_{0} t$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "phi_result = sympy.integrate(dphi_dt_result, t)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(phi(t), \" = \", phi_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zeit bis zum Stillstand" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle t_S = \\frac{\\Theta_{A} \\omega_{0} a}{F \\mu l r}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "t_S = sympy.Symbol(\"t_S\")\n", + "t_S_result = sympy.solve(sympy.Equality(dphi_dt_result, 0), t)[0]\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"t_S = \", t_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zurückgelegter Winkel bis zum Stillstand" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\varphi{\\left(t_{S} \\right)} = \\frac{\\Theta_{A} \\omega_{0}^{2} a}{2 F \\mu l r}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "phi_S_result = phi_result.subs({t: t_S_result})\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(phi(t_S), \" = \", phi_S_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zurückgelegte Umdrehungen bis zum Stillstand" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle n_S = \\frac{\\Theta_{A} \\omega_{0}^{2} a}{4 \\pi F \\mu l r}$" + ], + "text/plain": [ + "<IPython.core.display.Latex object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Zurückgelegte Umdrehungen bis zum Stillstand der Rolle\n", + "n_S_result = phi_S_result / (2 * sympy.pi)\n", + "\n", + "# ... ausgeben\n", + "tm_utils.display_latex(\"n_S = \", n_S_result)" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + }, + "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.7.16" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/chapter_03/figures/example_38_sketch.png b/chapter_03/figures/example_38_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2a39ee57ab0a7e66a525c2efaa6f5ec0bb1bfc Binary files /dev/null and b/chapter_03/figures/example_38_sketch.png differ diff --git a/chapter_03/figures/example_38_task.png b/chapter_03/figures/example_38_task.png new file mode 100644 index 0000000000000000000000000000000000000000..cf84140b3c062ab265c6fe7d5452bc6dcb692e01 Binary files /dev/null and b/chapter_03/figures/example_38_task.png differ diff --git a/chapter_03/figures/example_39_sketch.png b/chapter_03/figures/example_39_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..2f52aa27dbc98c10ac093e68510343dc2df346e5 Binary files /dev/null and b/chapter_03/figures/example_39_sketch.png differ diff --git a/chapter_03/figures/example_39_task.png b/chapter_03/figures/example_39_task.png new file mode 100644 index 0000000000000000000000000000000000000000..1adf53c1a47ef0fa92d4f36a42f51c51b35209cc Binary files /dev/null and b/chapter_03/figures/example_39_task.png differ diff --git a/chapter_03/figures/example_40_sketch.png b/chapter_03/figures/example_40_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..21a896a56a3abfcc1ca437ba852817e71d246f25 Binary files /dev/null and b/chapter_03/figures/example_40_sketch.png differ diff --git a/chapter_03/figures/example_40_task.png b/chapter_03/figures/example_40_task.png new file mode 100644 index 0000000000000000000000000000000000000000..258487add0c132cee22dce7739e2fafbacbe1ca9 Binary files /dev/null and b/chapter_03/figures/example_40_task.png differ diff --git a/chapter_03/figures/example_41_sketch.png b/chapter_03/figures/example_41_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..e65461fa01d81e846d273af5422ae9a2c232d8b6 Binary files /dev/null and b/chapter_03/figures/example_41_sketch.png differ diff --git a/chapter_03/figures/example_41_task.png b/chapter_03/figures/example_41_task.png new file mode 100644 index 0000000000000000000000000000000000000000..d6dd112cf50f71d906cc16844497007e5e6e82df Binary files /dev/null and b/chapter_03/figures/example_41_task.png differ diff --git a/chapter_03/figures/example_43_fkb.png b/chapter_03/figures/example_43_fkb.png new file mode 100644 index 0000000000000000000000000000000000000000..747bf896bab0d7bceb847d16acf11e97507b5bd1 Binary files /dev/null and b/chapter_03/figures/example_43_fkb.png differ diff --git a/chapter_03/figures/example_43_task.png b/chapter_03/figures/example_43_task.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a522827dfc773fce45636f5db5390c641c71d5 Binary files /dev/null and b/chapter_03/figures/example_43_task.png differ