1
0
Fork 0
mirror of https://gitlab.rlp.net/pgp/pgp1-python-einfuehrung synced 2024-10-12 13:24:22 +00:00
pgp1-python-einfuehrung/Erweiterete_Musterloesung_Fitten_mit_der_Schiefenebene.ipynb

2021 lines
422 KiB
Text
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Bestimmen der Fallbeschleunigung des Planeten X:\n",
"\n",
"\n",
"**Versuchsbeschreibung:**\n",
"Stellen Sie sich den folgenden Versuch vor: Jahr 2132, die Firma SpaceYpsilon hat Sie auf eine Außenmission auf den Planeten ?? geschickt. Hier sollen Sie zusammen mit ihrem Versuchspartner/in die Fallbeschleunigung g?? des Planeten bestimmen. Als Versuch lassen sie eine Kugel aus unterschiedlichen Fallhöhen innerhalb einer evakuierten Glasröhre fallen. Sie lassen die Kugel insgesamt aus 10 unterschiedlichen\n",
"Höhen Fallen.\n",
"\n",
"Basierend auf der Versuchsbeschreibung wissen wir, dass es sich bei dem Versuch um einen Freien Fall handelt, welcher als eine gleichförmig beschleunigte Bewegung beschrieben werden kann. D.h. es liegt der folgende Zusammenhang zwischen den gemessenen Höhen und Fallzeiten vor:\n",
"\n",
"$$h(t, g) = 1/2 \\cdot g \\cdot t^2$$ \n",
"\n",
"### Aufgabenstellung:\n",
"\n",
"Bestimmen Sie mit Hilfe ihrer Vorbereitungsaufgabe 1 und der entsprechenden Funktion die\n",
"Fallbeschleunigung g?? mittels eines Chi²-Fits. Diskutieren Sie anschließend mittels der Güte\n",
"Ihres Fits ob ihre Fitfunktion die gemessenen Daten gut widerspiegelt. Auf welchen Planeten\n",
"in unserem Sonnensystem befinden Sie sich?\n",
"Testen Sie anschließend ob nicht ein linearere Fit besser geeignet wäre. Begründen Sie Ihre\n",
"Antwort."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T12:51:07.087250Z",
"start_time": "2020-08-25T12:51:07.076279Z"
}
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"from scipy.optimize import curve_fit\n",
"height = [1, 1.2, 1.4, 1.6, 2, 2.2, 2.4, 2.6, 2.8] # in m\n",
"dheight = [0.01]*len(height) # in m\n",
"time = [0.74, 0.8, 0.87, 0.94, 1.03, 1.1, 1.15, 1.17, 1.24] # in s\n",
"dtime = [12, 11, 9, 8, 11, 12, 13, 80, 10] # in ms\n",
"\n",
"# Zeitfehler in s umrechnen:\n",
"dtime = [i/1000 for i in dtime]\n",
"\n",
"def fallhoehe(t, g):\n",
" return 0.5 * g * t**2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Anschließend können wir uns die Daten erstmal angucken:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T12:51:08.232998Z",
"start_time": "2020-08-25T12:51:08.019566Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotten der Messdaten:\n",
"plt.figure(dpi=100)\n",
"plt.errorbar(time, \n",
" height, \n",
" xerr=dtime, \n",
" yerr=dheight, \n",
" ls='', \n",
" marker='.')\n",
"plt.xlabel('Zeit [s]')\n",
"plt.ylabel('Fallhöhe [m]')\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Die Messdaten sehen bereits leicht parabelförmig aus. Als nächstes wollen wir unser Model `fallhoehe` an unsere Daten fitten:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T13:14:03.705087Z",
"start_time": "2020-08-25T13:14:03.700092Z"
}
},
"outputs": [],
"source": [
"para, pcov = curve_fit(fallhoehe, \n",
" time,\n",
" height,\n",
" sigma=dheight,\n",
" absolute_sigma=True\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Der Fit hat funktioniert gucken wir uns also doch mal die Fitgüte und den Wert für g an:"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T13:14:04.350389Z",
"start_time": "2020-08-25T13:14:04.343409Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Das die Fitgüte Chi²/ndof lautet 127.31/8\n",
"und der Wert für g ist 3.69 +/- 0.00 m/s\n",
"\n"
]
}
],
"source": [
"chi = sum([(fallhoehe(t, para[0]) - h)**2/dh**2 for t, h, dh in zip(time, height, dheight)])\n",
"\n",
"print(f'''\n",
"Das die Fitgüte Chi²/ndof lautet {chi:.2f}/{len(height)-1}\n",
"und der Wert für g ist {para[0]:.2f} +/- {pcov[0,0]:.2f} m/s\n",
"''')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie ihr seht ist unser $\\chi^2$/ndof (wobei ndof die Anzahl an Freiheitsgrade sind) nicht schlecht. Darüber hinaus scheint der Fehler des Wertes kleiner zu sein als die Anazahl an signifikanten Stellen die uns zur Verfügung stehen. \n",
"\n",
"Als zweites sollen wir das ganze nochmal wiederholen um zu testen ob ein lineare Fit nicht besser an die Daten passt."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T13:04:40.278517Z",
"start_time": "2020-08-25T13:04:40.266557Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Das die Fitgüte Chi²/ndof lautet 236.44/8\n",
"und der Wert für g ist 3.63 +/- 0.00 m/s\n",
"\n"
]
}
],
"source": [
"def fallhoehe2(t, v, h0):\n",
" return t * v + h0\n",
"\n",
"para2, pcov2 = curve_fit(fallhoehe2, \n",
" time,\n",
" height,\n",
" sigma=dheight,\n",
" absolute_sigma=True\n",
" )\n",
"\n",
"chi = sum([(fallhoehe2(t, para2[0], para2[1]) - h)**2/dh**2 for t, h, dh in zip(time, height, dheight)])\n",
"\n",
"print(f'''\n",
"Das die Fitgüte Chi²/ndof lautet {chi:.2f}/{len(height)-1}\n",
"und der Wert für g ist {para2[0]:.2f} +/- {pcov2[0,0]:.2f} m/s\n",
"''')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie ihr sehen könnt ist hier das $\\chi^2$ wesentlich schlechter und somit ist die Hypothese, dass es sich um ein lineares Model handeln könnte abgelehnt. Zu letzt können wir noch unsere beiden Ergebnisse gemeinsam mit den Daten plotten:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T13:04:49.040822Z",
"start_time": "2020-08-25T13:04:48.795514Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotten der Messdaten:\n",
"plt.figure(dpi=100)\n",
"plt.errorbar(time, \n",
" height, \n",
" xerr=dtime, \n",
" yerr=dheight, \n",
" ls='', \n",
" marker='.')\n",
"times2 = [i/100 for i in range(70, 130)]\n",
"plt.plot(times2, \n",
" [fallhoehe(t, para[0]) for t in times2],\n",
" label='Gleichförmig Beschleunigte Bewegung')\n",
"plt.plot(times2, \n",
" [fallhoehe2(t, para2[0], para2[1]) for t in times2],\n",
" label='Bewegung konstanter Geschwindigkeit')\n",
"plt.legend()\n",
"plt.xlabel('Zeit [s]')\n",
"plt.ylabel('Fallhöhe [m]')\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Zusatz:\n",
"\n",
"Wie wir bereits am Versuchstag selbst festgestellt haben, können bei einem einfachen $\\chi^2$ Fit lediglich die Fehler des Funktionswertes berücksichtigt werden. Da in unseren obigen Messdaten der Zeitfehler dominiert wollen wir nun noch einmal angucken, was denn passiert sofern wir die beiden Achsen tauschen. D.h. dieses mal wollen wir eine Funktion t(h, g) an unsere Messdaten anpassen:\n",
"\n",
"$$t(h, g) = \\sqrt{2 \\cdot h/g}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gucken wir uns zunächst wieder die Messdaten an:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T13:11:15.789927Z",
"start_time": "2020-08-25T13:11:15.564568Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotten der Messdaten:\n",
"plt.figure(dpi=100)\n",
"plt.errorbar(height, \n",
" time, \n",
" xerr=dheight, \n",
" yerr=dtime, \n",
" ls='', \n",
" marker='.')\n",
"plt.xlabel('Fallhöhe [m]')\n",
"plt.ylabel('Fallzeit [s]')\n",
"plt.grid()\n",
"plt.show()\n",
"\n",
"def fallzeit(h, g):\n",
" return (2 * h/g)**0.5"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T13:17:15.909075Z",
"start_time": "2020-08-25T13:17:15.899112Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Das die Fitgüte Chi²/ndof lautet 4.17/8\n",
"und der Wert für g ist 3.67 +/- 0.00 m/s\n",
"\n"
]
}
],
"source": [
"parat, pcovt = curve_fit(fallzeit, \n",
" height,\n",
" time,\n",
" sigma=dtime,\n",
" absolute_sigma=True\n",
" )\n",
"\n",
"chit = sum([(fallzeit(h, para[0]) - t)**2/dt**2 for t, h, dt in zip(time, height, dtime)])\n",
"\n",
"print(f'''\n",
"Das die Fitgüte Chi²/ndof lautet {chit:.2f}/{len(height)-1}\n",
"und der Wert für g ist {parat[0]:.2f} +/- {pcovt[0,0]:.2f} m/s\n",
"''')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie ihr sehen könnt sind die Werte für $g$ fast identisch mit den Werten des vorherigen Fits, jedoch sieht das $\\chi^2$ dieses mal aufgrund der größeren Fehler besser aus. Dies spricht dafür, dass die Fehler von der Fallhöhe unterschätzt worden sind."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T13:22:10.921118Z",
"start_time": "2020-08-25T13:22:10.683753Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(dpi=100)\n",
"plt.errorbar(height, \n",
" time, \n",
" xerr=dheight, \n",
" yerr=dtime, \n",
" ls='', \n",
" marker='.',\n",
" label='Messdaten')\n",
"x = [i/10 for i in range(10, 30)]\n",
"plt.plot(x, \n",
" [fallzeit(i, parat[0]) for i in x],\n",
" label='t(h, g)')\n",
"plt.legend()\n",
"plt.xlabel('Fallhöhe [m]')\n",
"plt.ylabel('Fallzeit [s]')\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Bestimmen der Erdbeschleunigung mittels curve_fit und einer schiefen Ebene:\n",
"\n",
"Der Zusammenhang der zurückgelegten Strecke $s$ einer Vollkugel auf einer schiefen Ebene ist gegeben durch:\n",
"\n",
"$$ s(t) = \\frac{5}{14} \\cdot g \\cdot \\sin(\\alpha) \\cdot t^2$$\n",
"\n",
"Während des Versuchs wurden jedoch die Startfallhöhe $h$ und die benötigte Zeit $t_\\text{i}$ gemessen (wobei $i$ der Index für eure drei Messversuche ist.). Dies bedeutet, dass wir unsere obige Formel in Abhängigkeit dieser beiden Parameter ausdrücken müssen um $g$ mittels eines Fits bestimmen zu können. Das können wir erreichen sofern wir den folgenden Zusammenhang verwenden\n",
"\n",
"$$ \\sin(\\alpha) = \\frac{h}{l} $$\n",
"\n",
"wobei $l$ die Länge unserer schiefen Ebene ist. Setzen wir dies in unsere obige Formel ein und lösen die Gleichung nach $h$ auf so erhalten wir\n",
"\n",
"$$ h = \\frac{14 \\cdot l^2}{5} \\cdot \\frac{1}{g} \\cdot \\frac{1}{t_\\text{i}^2} $$\n",
"\n",
"wobei wir hier noch verwendet haben das die maximal zurückgelegte Strecke der Kugel nach einer Zeit $t_\\text{i}$ der Gesammtlänge der schiefen Ebene entspricht. Diese Formel für $h$ können wir nun auf unterschiedliche Arten und Weisen in Abhängigkeit der Zeit setzen wobei die bereits gezeigte Variante die erste ist:\n",
"\n",
"**Variante 2. Parabel:**\n",
"$$h(x=\\frac{1}{t_\\text{i}}) = \\frac{14 \\cdot l^2}{5} \\cdot \\frac{1}{g} \\cdot x^2$$\n",
"\n",
"**Variante 3. Ursprungsgerade:**\n",
"$$h(x=\\frac{1}{t_\\text{i}^2}) = \\frac{14 \\cdot l^2}{5} \\cdot \\frac{1}{g} \\cdot x$$\n",
"\n",
"\n",
"Da die erste Variante von uns am wenigsten Arbeit verlangt werden wir im folgenden diese Verwenden. Im folgenden werde ich den Schritt mit dem Einlesen der Messwerte überspringen, damit ihr meine verwendeten Werte sehen könnt.\n",
"\n",
"Eure Messwerte sollten so oder so ähnlich aussehen. Es wurden für verschiedene Fallhöhen jeweils dreimal die Zeit gemessen:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:50:56.253321Z",
"start_time": "2019-10-26T11:50:56.223968Z"
}
},
"outputs": [],
"source": [
"# Eingelesene Messwerte:\n",
"h = [0.095, 0.112, 0.134, 0.148, 0.17, 0.188, 0.21, 0.235, 0.25, 0.276] # [m]\n",
"t1 = [2.65, 2.4, 2.17, 2.06, 1.91, 1.8, 1.68, 1.6, 1.52, 1.46] # [s]\n",
"t2 = [2.71, 2.36, 2.19, 2.06, 1.9, 1.78, 1.69, 1.69, 1.53, 1.44] # [s]\n",
"t3 = [2.66, 2.36, 2.19, 2.06, 1.9, 1.8, 1.68, 1.59, 1.52, 1.44] # [s]\n",
"delta_t = [0.1]*len(h) # [s]\n",
"delta_h = [0.005]*len(h) # [m]\n",
"\n",
"l = 1.507 #[m]\n",
"delta_l = 0.005 #[m] "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nun müssen wir uns unsere Formel definieren um unsere Messdaten fitten zu können. Hierbei ist es wichtig das eine Fitfunktion $\\lambda$ von dieser Form ist $\\lambda(x, \\Theta)$ woebei $\\Theta$ unsere Parameter sind. In unserem Fall entspricht dies einer Funktion $h(t, g)$ bzw. in den anderen beiden Varianten $h(x, g)$ wobei $x=1/t$ und $x=1/t^2$ in den Varianten 2 und 3 ist. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:50:56.270097Z",
"start_time": "2019-10-26T11:50:56.256105Z"
}
},
"outputs": [],
"source": [
"def fallhoehe(t, g):\n",
" l = 1.507\n",
" return 14/5 *l**2 * 1/g * 1/t**2 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Als nächstes sollten wir zu jeder Fallhöhe den Mittelwert unserer drei Zeitmessungen bilden und den entsprechenden Fehler berechnen. Hierdurch erhalten wir ein genaueres Ergebnis für unsere gesuchte Zahl von $g$.\n",
"\n",
"D.h. wir müssen uns zunächst eine Funktion definieren, welche den Mittelwert für unsere Messwerte berechnet\n",
"\n",
"$$ \\bar{x} = \\frac{1}{n} \\sum_i^n x_i $$\n",
"\n",
"sowie dessen Standardabweichung \n",
"\n",
"$$\\sigma_\\text{n-1} = \\sqrt{\\frac{1}{n-1} \\sum_\\text{i}^\\text{n} (\\bar{x} - x_\\text{i})^2}$$"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:50:56.285391Z",
"start_time": "2019-10-26T11:50:56.273097Z"
}
},
"outputs": [],
"source": [
"# Mittelwert:\n",
"def mittelwert(l1, l2, l3):\n",
" '''\n",
" Funktion welche den Mittelwert für drei Messspalten \n",
" berechnet.\n",
" '''\n",
" result = []\n",
" for i,j,k in zip(l1, l2, l3):\n",
" result.append((i + j + k)/3)\n",
" \n",
" return result\n",
"\n",
"# Standardabweichung\n",
"def standardabweichung(l1, l2, l3):\n",
" '''\n",
" Funktion welche die Standardabweichung für drei Messspalten \n",
" berechnet. \n",
" '''\n",
" mean = mittelwert(l1, l2, l3) # <-- hier rufen wir unsere Funktion des \n",
" # Mittelwertes in einer weitere Funktion\n",
" # auf.\n",
" result = []\n",
" for m, i,j,k in zip(mean, l1, l2, l3):\n",
" result.append( (1/2 *(m-i)**2 + (m-j)**2 + (m-k)**2 )**(1/2))\n",
" \n",
" return result\n",
" \n",
"t_mean = mittelwert(t1, t2, t3)\n",
"t_std = standardabweichung(t1, t2, t3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nun können wir unsere Messwerte ersteinmal plotten:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:50:56.855364Z",
"start_time": "2019-10-26T11:50:56.288517Z"
}
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:50:57.837155Z",
"start_time": "2019-10-26T11:50:56.862452Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.errorbar(t_mean, \n",
" h, \n",
" xerr=t_std,\n",
" yerr=delta_h,\n",
" ls='',\n",
" marker='.',\n",
" label='Rollzeit Vollkugel')\n",
"plt.grid()\n",
"plt.xlabel('Gemessene Rollzeit $t$ [s]')\n",
"plt.ylabel('Starthöhe $h$ [m]')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Man kann anhand des Plots bereits schön den nicht linearen Zusammenhang zwischen der Starthöhe $h$ und der Rollzeit $t$ erkennen. Als nächstes wollen wir nun aus diesen Daten unsere Erdbeschleunigung $g$ bestimmen. Hierzu verwenden wir wieder unsere Funktion `curve_fit`. Im folgenden möchte ich jedoch nochmal anhand dieses Datensatzes illustrieren, was curve_fit genau macht. Hierzu gucken wir uns die nachfolgenden Plots an (ignoriert zunächst einmal den Code)."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:00.263385Z",
"start_time": "2019-10-26T11:50:57.841209Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for g in [7.1, 14.3, 9.81, 10.5,]:\n",
" plt.errorbar(t_mean, \n",
" h, \n",
" xerr=t_std,\n",
" yerr=delta_h,\n",
" ls='',\n",
" marker='.',\n",
" label='Rollzeit Vollkugel')\n",
"\n",
" time = [i/10 for i in range(1,30)]\n",
"\n",
" plt.plot(time, \n",
" [fallhoehe(t, g) for t in time],\n",
" label=f'h(t, g={g})')\n",
"\n",
" plt.xlim(1.4, 2.7)\n",
" plt.ylim(0, 0.4)\n",
" plt.grid()\n",
" plt.xlabel('Gemessene Rollzeit $t$ [s]')\n",
" plt.ylabel('Starthöhe $h$ [m]')\n",
" plt.legend()\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie ihr sehen könnt, können wir durch einfaches ausprobieren feststellen welcher Wert von $g$ am besten zu unseren Messwerten passt. Und genau das macht curve_fit für euch. Curve_fit probiert solange (nach der Methode der kleinsten Quadrate), verschiedene Werte von $g$ aus bis es den am besten passenden Wert gefunden hat. Probieren wir dies nochmal aus:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:00.618026Z",
"start_time": "2019-10-26T11:51:00.267409Z"
}
},
"outputs": [],
"source": [
"from scipy.optimize import curve_fit"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:00.651512Z",
"start_time": "2019-10-26T11:51:00.629827Z"
}
},
"outputs": [],
"source": [
"parameter, covariance_matrix = curve_fit(fallhoehe,\n",
" t_mean,\n",
" h,\n",
" sigma=delta_h,\n",
" absolute_sigma=True\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Hierbei schreibt curve_fit das Ergebnis der besten Werte in die Variable `parameter` und den deren Fehler in eine so genannte Kovarianzmatrix. Sprich das Ergebnis sieht für eine Funktion mit drei Parametern `def f(x, p1, p2, p3):` allgemein so aus:\n",
"\n",
"```\n",
"paramter = [p1, p2, p3]\n",
"covariance = [[cov_1,1, cov_1,2, cov_1,3], \n",
" [cov_2,1, cov_2,2, cov_2,3],\n",
" [cov_3,1, cov_3,2, cov_3,3]]\n",
"```\n",
"wobei `cov_i,i` der Varianz sprich dem $\\sigma^2$ des Parameters i entspricht. Da wir in unserem Beispiel lediglich einen Parameter haben sieht das Ergebnis wie folgt aus:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:00.682763Z",
"start_time": "2019-10-26T11:51:00.660689Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"g ist 10.58 m/s^2\n",
"Delta g ist 0.09 m/s^2\n"
]
}
],
"source": [
"print(f'g ist {parameter[0]:.2f} m/s^2') # <-- einfache liste\n",
"print(f'Delta g ist {(covariance_matrix[0][0])**(1/2):.2f} m/s^2') # <-- doppel liste"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nun sollten wir noch das $\\chi^2$ und die Anzahl an Freiheitsgraden berechnen um zu gucken wie gut unser Fit funktioniert hat:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:00.698116Z",
"start_time": "2019-10-26T11:51:00.685980Z"
}
},
"outputs": [],
"source": [
"def chiquadrat(xwerte, ywerte, dywerte, fun, g):\n",
" chi = 0\n",
" for x,y,dy in zip(xwerte, ywerte, dywerte):\n",
" chi += (fun(x, g) - y)**2/dy**2\n",
" return chi"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:00.714003Z",
"start_time": "2019-10-26T11:51:00.701111Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Das chi-quadrat und die Anzhal der Freiheitsgrade sind: 22/9\n"
]
}
],
"source": [
"chi = chiquadrat(t_mean, h, delta_h, fallhoehe, parameter[0])\n",
"ndof = len(h) - 1 # Anzahl Messwerte - Anzahl der Fitparamter\n",
"\n",
"print(f' Das chi-quadrat und die Anzhal der Freiheitsgrade sind: {chi:.0f}/{ndof}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie ihr seht ist das $\\chi^2/$ndof > 1, was bedeutet, dass unsere Fitfunktion die Daten nicht ganz wiederspiegelt. Um dies nachvollziehen zu können gucken wir uns erst einmal den finalen Plot an:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.369627Z",
"start_time": "2019-10-26T11:51:00.718914Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 840x570 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(5.6, 3.8), dpi=150) # <-- Größe eines A4-Blatts ausnutzen\n",
"# Plot der Messdaten\n",
"plt.errorbar(t_mean, \n",
" h, \n",
" xerr=t_std,\n",
" yerr=delta_h,\n",
" ls='',\n",
" marker='.',\n",
" label='Rollzeit Vollkugel')\n",
"\n",
"# Fitergebnis:\n",
"time = [i/10 for i in range(1,30)]\n",
"plt.plot(time, \n",
" [fallhoehe(t, parameter[0]) for t in time],\n",
" label=f'Fitparamter:\\ng: ({parameter[0]:.2f}+/-{(covariance_matrix[0][0])**(1/2):.2f}) m/s$^2$\\n'\n",
" f'$\\chi^2/$ndof: {chi:.0f}/{ndof}')\n",
"\n",
"plt.xlim(1.4, 2.7)\n",
"plt.ylim(0, 0.4)\n",
"plt.grid()\n",
"plt.xlabel('Gemessene Rollzeit $t$ [s]', fontsize=10)\n",
"plt.ylabel('Starthöhe $h$ [m]', fontsize=10)\n",
"plt.legend(fontsize=10)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie ihr seht weicht unsere Funktion lediglich leicht von dem Großteil unserer Messdaten ab. Lediglich für kleine und große Fallhöhen ist die Abweichung stärker und unsere Funktion beschreibt die Messdaten nicht genau genug. Dies erklärt den leicht erhöhten Wert für unser $\\chi^2$/ndof. Woran könnte dies liegen? "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Bestimmen von mehren Parameter mittels curve_fit:\n",
"\n",
"Und weil es so schön ist hier noch ein letztes Beispiel zum Thema fitten. Einige von euch haben sich gefragt warum ich überhaupt fitten muss wenn ich bei einfachen Funktionen wie zum Beispiel\n",
"\n",
"$$ s(t) = 1/2 \\cdot g \\cdot t^2$$\n",
"\n",
"die Funktion einfach nach $g$ auflösen und den Mittelwert und die Standardabweichung von $g$ berechnen kann. Bei Funktionen welche lediglich nur von einem Parameter abhängen geht das relative einfach aber wie sieht es im folgenden Beispiel aus:\n",
"\n",
"$$ T(t, T_0, \\tau, t_0) = \\tau \\cdot \\cos\\bigg(2 \\cdot \\pi \\cdot \\bigg(\\frac{t-t0}{365 d}\\bigg)\\bigg) + T_0 $$\n",
"\n",
"Die Funktion $T(t, T_0, \\tau, t_0)$ soll die jährlichen Temperaturschwankungen an einem bestimmten Ort auf der Erde wiederspiegeln. Hierbei ist $T_0$ die Durchschnittstemperatur, $\\tau$ der Temperatur unterschied und $t0$ eine Verschiebung des Cosinus entsprechend des Tages an dem die maximale Temperatur innerhalb eines Jahres gemessen wurde. Gucken wir uns zunächst die Messdaten an: "
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T09:55:55.872319Z",
"start_time": "2020-08-25T09:55:54.680908Z"
}
},
"outputs": [],
"source": [
"import numpy as np # trigonometrische Funktionen findet ihr ebenfalls in numpy \n",
"import matplotlib.pyplot as plt\n",
"from scipy.optimize import curve_fit"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:04:23.583321Z",
"start_time": "2020-08-25T10:04:23.569359Z"
}
},
"outputs": [],
"source": [
"# Gemessene Werte:\n",
"tage = [0.28, 10.36, 20.4, 30.23, 40.22, 50.11,\n",
" 60.25, 70.22, 80.25, 90.03, 100.24, 110.21,\n",
" 120.22, 130.25, 140.14, 150.09, 160.33, 170.31,\n",
" 180.27, 190.28, 200.25, 210.33, 220.18, 230.15,\n",
" 240.19, 250.37, 260.39, 270.35, 280.56, 290.23, \n",
" 300.31, 310.17, 320.2, 330.11, 340.28, 350.48, 360.26] # d\n",
"\n",
"gemessene_temperatur = [15.17, 15.31, 14.46, 16.2, 15.49,\n",
" 16.18, 17.18, 16.17, 17.43, 18.24,\n",
" 18.96, 19.69, 20.19, 21.33, 22.27, \n",
" 23.14, 23.6, 23.37, 23.39, 25.27, \n",
" 25.2, 24.63, 23.22, 23.95, 23.53, \n",
" 22.9, 22.59, 21.84, 20.77, 20.12, \n",
" 18.79, 18.29, 17.87, 16.86, 16.48, \n",
" 15.41, 14.2] # °C\n",
"\n",
"fehler_temperatur = [0.52, 0.54, 0.54, 0.54, 0.51, 0.48, \n",
" 0.44, 0.39, 0.33, 0.28, 0.24, 0.22, \n",
" 0.24, 0.28, 0.33, 0.39, 0.44, 0.48, \n",
" 0.52, 0.54, 0.55, 0.55, 0.53, 0.5, \n",
" 0.46, 0.41, 0.35, 0.29, 0.25, 0.22, \n",
" 0.23, 0.26, 0.31, 0.37, 0.42, 0.47, \n",
" 0.5]\n",
"\n",
"def temp(t, T0, tau, t0):\n",
" \"\"\"\n",
" Jahrestemperaturverlauf für Ort x.\n",
" \n",
" Args:\n",
" t: Zeit in Tagen\n",
" T0: Mittlere Temperatur in °C\n",
" tau: Temperaturschwankungsamplitude in °C\n",
" t0: Zeitpunkt des heißesten Tages in Tagen\n",
" \"\"\"\n",
" return tau * np.cos(2*np.pi*(t - t0)/365) + T0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zunächst können wir uns ja mal die Messdaten angucken:"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:04:24.008727Z",
"start_time": "2020-08-25T10:04:23.752417Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot der Messdaten:\n",
"plt.figure(dpi=100)\n",
"plt.errorbar(tage, \n",
" gemessene_temperatur,\n",
" fehler_temperatur, \n",
" ls='',\n",
" marker='.')\n",
"plt.xlabel('Tage des Jahres')\n",
"plt.ylabel('Temperatur [°C]')\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Als nächstes führen wir, wie in den anderen Beispielen auch, den Fit mittelts curve_fit durch. "
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:19:03.367264Z",
"start_time": "2020-08-25T10:19:03.359286Z"
}
},
"outputs": [],
"source": [
"# Fitten der Messdaten\n",
"para, pcov = curve_fit(temp,\n",
" tage,\n",
" gemessene_temperatur,\n",
" sigma=fehler_temperatur,\n",
" absolute_sigma=True\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Im vergleich zu vorher haben wir diesesmal mehre Parameter sprich para ist jetzt eine Liste von Werten und die Kovarianzmatrix pcov eine verschachtelte Liste:"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:13:04.785441Z",
"start_time": "2020-08-25T10:13:04.778463Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([19.76428742, -4.757914 , 19.11533863])"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"para"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:13:08.372842Z",
"start_time": "2020-08-25T10:13:08.366856Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 3.29660572e-03, -1.46005465e-04, -4.33280837e-04],\n",
" [-1.46005465e-04, 1.13167030e-02, -9.24295630e-04],\n",
" [-4.33280837e-04, -9.24295630e-04, 6.93117575e-01]])"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pcov"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Denkt daran, dass die Fehler euer Parameter der Wurzel der Hauptdiagonalen der Kovarianzmatrix entsprechen. Gucken wir uns doch nochmal die durch den Fit berechneten Werte etwas genauer an:"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:22:06.480080Z",
"start_time": "2020-08-25T10:22:06.471095Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Der Wert für ist T0 (19.76 +/- 0.06) °C\n",
"Der Wert für ist tau (-4.76 +/- 0.11) °C\n",
"Der Wert für ist t0 (19.12 +/- 0.83) d\n"
]
}
],
"source": [
"# Printausgabe der Parameter:\n",
"for ind, (pname, einheit) in enumerate(zip(('T0', 'tau', 't0'), ('°C', '°C', 'd'))):\n",
" wert = para[ind]\n",
" fehler = pcov[ind, ind]**0.5 # dies entspricht der Hauptdiagnolen mit den Indizes 1,1 2,2 etc.\n",
" print(f'Der Wert für ist {pname} ({wert:.2f} +/- {fehler:.2f}) {einheit}')\n",
" \n",
"# Zusatzinfo:\n",
"# In unserer for-Schleife haben wir einen weiteren nützlichen Befehl eingebaut:\n",
"# enumerate gibt euch einen Index enstsprechend dem aktuellen Schritt in euer Schleife \n",
"# Probiert doch mal das folgende aus:\n",
"# for ind, buchstabe in enumerate(['A', 'B', 'C'], start=0):\n",
"# print(ind, buchstabe)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nun sollten wir auch das $\\chi^2$ berechnen um ein Gefühl für die Fitgüte zu bekommen:"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:30:27.689313Z",
"start_time": "2020-08-25T10:30:27.680340Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Das Chi-Quadrat beträgt 41.96 mit 34 Freiheitsgraden.\n"
]
}
],
"source": [
"# Berechnen des Chi**2:\n",
"chi_liste = []\n",
"for t, T, dT in zip(tage, gemessene_temperatur, fehler_temperatur):\n",
" chi_liste.append((temp(t, para[0], para[1], para[2]) - T)**2/dT**2)\n",
"chi = sum(chi_liste) \n",
"print(f'Das Chi-Quadrat beträgt {chi:.2f} mit {len(gemessene_temperatur) - 3} Freiheitsgraden.')\n",
"\n",
"\n",
"# Zusatzinfo: \n",
"# Ihr könnt das ganze auch wieder etwas kompakter als list comprehension schreiben.\n",
"# Außerdem könnt ihr die Fitparameter anstatt als para[0], para[1], para[2] mit Hilfe von\n",
"# *para an die Funktion geben. Der Stern ordnet die Werte in euerer Liste der Reihe nach den \n",
"# Argumenten euer Funktion zu:\n",
"# chi = sum([(temp(t, *para) - T)**2/dT**2 for t, T, dT in zip(tage, gemessene_temperatur, fehler_temperatur)])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie ihr seht scheinen die Fitparameter den Funktionsverlauf ganz gut zu beschreiben, gucken wir uns also mal das Resultat zusammen mit den Messwerten an."
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:05:34.227101Z",
"start_time": "2020-08-25T10:05:33.997677Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(dpi=100)\n",
"plt.errorbar(tage, \n",
" gemessene_temperatur,\n",
" fehler_temperatur, \n",
" ls='',\n",
" marker='.',\n",
" label='T an Ort x')\n",
"tage2 = [t/10 for t in range(3650)]\n",
"plt.plot(tage2, temp(tage2, *para), label='Fitfunktion')\n",
"plt.legend(loc=2)\n",
"plt.xlabel('Tage des Jahres')\n",
"plt.ylabel('Temperatur [°C]')\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Hier noch ein kleiner Zusatz: Ist euch etwas aufgefallen? Der Fitparameter $T_0$ hat einen Wert von ca. 20 Tagen obwohl das Maximum eher bei 200 Tagen liegt. Dennoch beschreibt der Fit den Verlauf der Messdaten sehr gut. Dies liegt daran, das der Cosinus eine periodische Funktion ist. Bei der Methode der kleinsten Quadrate werden die Fitparameter so lange, nach einem gewissen Schema variiert, bis das Chi-Qudarat minimal ist. Bei einer periodischen Funktion gibt es mehre dieser Minima. \n",
"\n",
"Dies kann auch bei anderen komplexeren Funktionen der Fall sein. Da die meisten Funktionen jedoch nicht periodisch sind handelt es sich in der Regel bei diesen zusätzlichen Minima nur um lokale Minima. Um die besten Fitparameter zu finden wollen wir jedoch das globale Minimum finden. Um dies zu erreichen können wir curve_fit ein wenig helfen und zum Beispiel noch zusätzlich Startwerte für unsere Fitparameter mitgeben: "
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:54:51.646627Z",
"start_time": "2020-08-25T10:54:51.637652Z"
}
},
"outputs": [],
"source": [
"# Die Startwerte sind entsprechend der Reihenfolge der Parameter der Fitfunktion anzugeben.\n",
"# In unserem Fall ist dies T0, tau, t0. Sollten wir keine Idee für einen Startwert haben \n",
"# können wir einfach den entsprechenden Wert auf einen passenden Wert setzen hier z.B, 1.\n",
"startwerte = [1, 1, 200]\n",
"\n",
"# Fitten der Messdaten\n",
"para, pcov = curve_fit(temp,\n",
" tage,\n",
" gemessene_temperatur,\n",
" sigma=fehler_temperatur,\n",
" absolute_sigma=True,\n",
" p0=startwerte # <-- Übergeben der Startwerte an die Funktion:\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:55:17.160586Z",
"start_time": "2020-08-25T10:55:17.150618Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Der Wert für ist T0 (19.76 +/- 0.06) °C\n",
"Der Wert für ist tau (4.76 +/- 0.11) °C\n",
"Der Wert für ist t0 (201.62 +/- 0.83) d\n",
"Das Chi-Quadrat beträgt 41.96 mit 34 Freiheitsgraden.\n"
]
}
],
"source": [
"# Erneutes printen der Fitwerte und des Chi**2\n",
"for ind, (pname, einheit) in enumerate(zip(('T0', 'tau', 't0'), ('°C', '°C', 'd'))):\n",
" wert = para[ind]\n",
" fehler = pcov[ind, ind]**0.5 # dies entspricht der Hauptdiagnolen mit den Indizes 1,1 2,2 etc.\n",
" print(f'Der Wert für ist {pname} ({wert:.2f} +/- {fehler:.2f}) {einheit}')\n",
" \n",
"chi = sum([(temp(t, *para) - T)**2/dT**2 for t, T, dT in zip(tage, gemessene_temperatur, fehler_temperatur)])\n",
"chi = sum(chi_liste) \n",
"print(f'Das Chi-Quadrat beträgt {chi:.2f} mit {len(gemessene_temperatur) - 3} Freiheitsgraden.')"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {
"ExecuteTime": {
"end_time": "2020-08-25T10:47:55.230147Z",
"start_time": "2020-08-25T10:47:54.980190Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Erneutes plotten der Funktion:\n",
"plt.figure(dpi=100)\n",
"plt.errorbar(tage, \n",
" gemessene_temperatur,\n",
" fehler_temperatur, \n",
" ls='',\n",
" marker='.',\n",
" label='T an Ort x')\n",
"tage2 = [t/10 for t in range(3650)]\n",
"plt.plot(tage2, temp(tage2, *para), label='Fitfunktion')\n",
"plt.legend(loc=2)\n",
"plt.xlabel('Tage des Jahres')\n",
"plt.ylabel('Temperatur [°C]')\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wie ihr sehen könnt konnten wir mit Hilfe der Startwerte den Fit so beeinflussen, dass curve_fit dieses mal das \"richtige\" Minimum finden konnte. Daher empfehle ich euch bei komplexeren Problem sich immer erst die Messdaten an zugucken und ein paar Startwerte für den Fit zu raten/schätzen. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Zusatz: Arbeiten mit Numpy-Arrays: \n",
"\n",
"In den obigen Beispielen haben wir oftmals viele Zeilen Code definieren müssen bevor wir etwas berechnen konnten. Viele der von uns definierten Funktionen existieren bereits und sind in anderen Packages enthalten. Ein sehr nützliches Package, ist dass das **Numpy**-Package. Hierbei sind insbesondere die **Numpy-arrays** eine tolle Sache, welche viele Prozesse vereinfacht. Im nachfolgenden möchte ich euch anhand der Beispielaufgabe noch zeigen, wie Numpy-arrays funktionieren. Sofern ihr mehr lernen möchtet gibt es viele Turotials zu Numpy im Internet bzw. auf Youtube."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.386308Z",
"start_time": "2019-10-26T11:51:01.376046Z"
}
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.419390Z",
"start_time": "2019-10-26T11:51:01.393231Z"
}
},
"outputs": [],
"source": [
"h = np.array([0.095, 0.112, 0.134, 0.148, 0.17, 0.188, 0.21, 0.235, 0.25, 0.276]) # [m]\n",
"t = np.array([[2.65, 2.4, 2.17, 2.06, 1.91, 1.8, 1.68, 1.6, 1.52, 1.46], # Messwerte 1 [s]\n",
" [2710, 2360, 2190, 2060, 1900, 1780, 1690, 1690, 1530, 1440], # Messwerte 2 [ms]\n",
" [2.66, 2.36, 2.19, 2.06, 1.9, 1.8, 1.68, 1.59, 1.52, 1.44]]) # Messwerte 3 [s]\n",
"delta_t = np.array([0.1]*len(h)) # [s]\n",
"delta_h = np.array([5]*len(h)) # [mm]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Das Arbeiten mit Numpy-arrays funktioniert ähnlich wie mit Listen, d.h. das Slicing ist das Gleich:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.449147Z",
"start_time": "2019-10-26T11:51:01.427515Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2 2\n",
"[3, 4, 5] [3 4 5]\n"
]
}
],
"source": [
"l = [1,2,3,4,5,6]\n",
"a = np.array([1,2,3,4,5,6])\n",
"\n",
"print(l[1], a[1])\n",
"print(l[2:5], a[2:5])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Oder unsere Zeitdaten, welche wir als eine Matrix gespeichert haben:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.464975Z",
"start_time": "2019-10-26T11:51:01.451057Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[2.65e+00, 2.40e+00, 2.17e+00, 2.06e+00, 1.91e+00, 1.80e+00,\n",
" 1.68e+00, 1.60e+00, 1.52e+00, 1.46e+00],\n",
" [2.71e+03, 2.36e+03, 2.19e+03, 2.06e+03, 1.90e+03, 1.78e+03,\n",
" 1.69e+03, 1.69e+03, 1.53e+03, 1.44e+03],\n",
" [2.66e+00, 2.36e+00, 2.19e+00, 2.06e+00, 1.90e+00, 1.80e+00,\n",
" 1.68e+00, 1.59e+00, 1.52e+00, 1.44e+00]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.480589Z",
"start_time": "2019-10-26T11:51:01.467966Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([2.17, 2.06])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t[0][2:4] # <-- Erste spalte, die Werte 2 bis 4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Jedoch ist die große Stärke von Numpy-arrays, dass diese sich ähnlich wie Vektoren bzw. Matrizen verhalten. Zum Beispiel beim multiplizieren von einem \"Vektor\" mit einem Skala:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.496039Z",
"start_time": "2019-10-26T11:51:01.483657Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,\n",
" 0.005])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"delta_h = delta_h * 10**(-3) # wir hatten delta_h in mm definiert und hier wandeln wir es in m um.\n",
"delta_h"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Das gleiche gilt für Matrizen:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.528955Z",
"start_time": "2019-10-26T11:51:01.500058Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[2.65e+00, 2.40e+00, 2.17e+00, 2.06e+00, 1.91e+00, 1.80e+00,\n",
" 1.68e+00, 1.60e+00, 1.52e+00, 1.46e+00],\n",
" [2.71e+03, 2.36e+03, 2.19e+03, 2.06e+03, 1.90e+03, 1.78e+03,\n",
" 1.69e+03, 1.69e+03, 1.53e+03, 1.44e+03],\n",
" [2.66e+00, 2.36e+00, 2.19e+00, 2.06e+00, 1.90e+00, 1.80e+00,\n",
" 1.68e+00, 1.59e+00, 1.52e+00, 1.44e+00]])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t # <-- Spalte 2 hatte ich in ms definiert ..."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.544328Z",
"start_time": "2019-10-26T11:51:01.531697Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[2.65, 2.4 , 2.17, 2.06, 1.91, 1.8 , 1.68, 1.6 , 1.52, 1.46],\n",
" [2.71, 2.36, 2.19, 2.06, 1.9 , 1.78, 1.69, 1.69, 1.53, 1.44],\n",
" [2.66, 2.36, 2.19, 2.06, 1.9 , 1.8 , 1.68, 1.59, 1.52, 1.44]])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t[1] = t[1] * 10**(-3) #... wir wollen aber s\n",
"t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Natürlich können wir auch zwei \"Vektoren\"/arrays mit gleicher länge miteinander Multiplizieren oder addieren:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.576225Z",
"start_time": "2019-10-26T11:51:01.550197Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 6, 9])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array([1,2,3]) * np.array([3,3,3]) # Etwas anders als in der Mathematik, \n",
" # hier bekommt ihr kein Skala sondern \n",
" # nur die Produkte der Einträge"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.591616Z",
"start_time": "2019-10-26T11:51:01.579409Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([4, 5, 6])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array([1,2,3]) + np.array([3,3,3]) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Diese nützlichen Features der arrays lassen uns Funktionen viel einfacher definieren und anwenden. Anstatt "
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.606751Z",
"start_time": "2019-10-26T11:51:01.596368Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[0.0907004206977808,\n",
" 0.11507952238214755,\n",
" 0.13598012562087386,\n",
" 0.15274995390312052,\n",
" 0.17893109576554916,\n",
" 0.20155495845308732,\n",
" 0.22875746846189743,\n",
" 0.24497309776645806,\n",
" 0.2793351818514591,\n",
" 0.30972665269221794]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = []\n",
"for time in t_mean:\n",
" result.append(fallhoehe(time, 9.81))\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Können wir ganz einfach schreiben:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.622410Z",
"start_time": "2019-10-26T11:51:01.612577Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0.09070042, 0.11507952, 0.13598013, 0.15274995, 0.1789311 ,\n",
" 0.20155496, 0.22875747, 0.2449731 , 0.27933518, 0.30972665])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t_mean = np.array(t_mean) # <-- erst müssen wir natürlich unsere liste\n",
" # in ein array umwandeln\n",
"\n",
"fallhoehe(t_mean, 9.81)\n",
"# Was equivalent ist zu einem Produkt zwischen einem \"Skala\" und einem \"Vetor\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Es gibt auch andere tolle Funktionen die mit dem numpy-Package kommen. Zum Beispiel eine Funktion für den Mittelwert und die Standardabweichung: "
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.637953Z",
"start_time": "2019-10-26T11:51:01.628234Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.5 1.118033988749895\n"
]
}
],
"source": [
"a = np.array([1,2,3,4])\n",
"print(np.mean(a), np.std(a))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Erinnert ihr euch, dass wir dieses mal die Zeitwerte als eine Art n x m Matrix gespeichert haben (wobei n=3 und m=10)? `np.mean` und `np.std` erlauben euch das errechnen von den Werten entlang einer Bestimmten \"Achse\" eures arrays:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.652909Z",
"start_time": "2019-10-26T11:51:01.642746Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1.9266666666666665"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.mean(t) # <-- gibt den Mittelwert über alle Werte"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.668197Z",
"start_time": "2019-10-26T11:51:01.659999Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2.67333333 2.37333333 2.18333333 2.06 1.90333333 1.79333333\n",
" 1.68333333 1.62666667 1.52333333 1.44666667] [2.67333333 2.37333333 2.18333333 2.06 1.90333333 1.79333333\n",
" 1.68333333 1.62666667 1.52333333 1.44666667]\n"
]
}
],
"source": [
"t_mean_array = np.mean(t, axis=0) # <-- Mittelwert entlang der ersten n-achse \n",
"print(t_mean, t_mean_array)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.683366Z",
"start_time": "2019-10-26T11:51:01.675594Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([1.925, 1.935, 1.92 ])"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.mean(t, axis=1) # <-- Mittelwert entlang der m-achse"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Das gleiche können wir für unsere Standardabweichung machen:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.698582Z",
"start_time": "2019-10-26T11:51:01.687401Z"
}
},
"outputs": [],
"source": [
"t_std_array = np.std(t, axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Der Part über das fitten bleibt unverändert, jedoch können wir im Anschluss auch unser $\\chi^2$ wieder einfacher berechnen: "
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:01.730408Z",
"start_time": "2019-10-26T11:51:01.701959Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"21.616487152931544 21.616487152931523\n"
]
}
],
"source": [
"chi_array = np.sum( (fallhoehe(t_mean_array, parameter[0]) - h)**2/delta_h**2)\n",
"print(chi_array, chi)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Beim plotten selbst können wir noch die Funktion `np.arange` nutzen um uns das Leben etwas zu erleichtern. Im obigen Beispiel hatte ich unsere Fitfunktion mittels der `range`-Funktion geplottet."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:02.292584Z",
"start_time": "2019-10-26T11:51:01.732446Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"time = [i/10 for i in range(1,30)] #<-- Erstellen von Zeitwerten zwischen 0.1 und 3 in 0.1 Schritten \n",
" # um eine glatte Kurve zu plotten.\n",
"plt.plot(time, \n",
" [fallhoehe(t, parameter[0]) for t in time],\n",
" label=f'Fitparamter:\\ng: ({parameter[0]:.2f}+/-{(covariance_matrix[0][0])**(1/2):.2f}) m/s$^2$\\n'\n",
" f'$\\chi^2/$ndof: {chi:.0f}/{ndof}')\n",
"\n",
"plt.xlim(1.4, 2.7)\n",
"plt.ylim(0, 0.4)\n",
"plt.grid()\n",
"plt.xlabel('Gemessene Rollzeit $t$ [s]', fontsize=10)\n",
"plt.ylabel('Starthöhe $h$ [m]', fontsize=10)\n",
"plt.legend(fontsize=10)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mit `np.arange` geht dies einfacher: "
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:02.810212Z",
"start_time": "2019-10-26T11:51:02.295731Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"time_array = np.arange(0.1,3,0.1)\n",
"plt.plot(time, \n",
" [fallhoehe(t, parameter[0]) for t in time],\n",
" label=f'Fitparamter:\\ng: ({parameter[0]:.2f}+/-{(covariance_matrix[0][0])**(1/2):.2f}) m/s$^2$\\n'\n",
" f'$\\chi^2/$ndof: {chi:.0f}/{ndof}')\n",
"\n",
"plt.xlim(1.4, 2.7)\n",
"plt.ylim(0, 0.4)\n",
"plt.grid()\n",
"plt.xlabel('Gemessene Rollzeit $t$ [s]', fontsize=10)\n",
"plt.ylabel('Starthöhe $h$ [m]', fontsize=10)\n",
"plt.legend(fontsize=10)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-26T11:51:02.825450Z",
"start_time": "2019-10-26T11:51:02.812329Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9] [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8\n",
" 1.9 2. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9]\n"
]
}
],
"source": [
"print(time, time_array)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ich hoffe der Zusatz hilft euch. Viel Spaß im PGP!"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}