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

Some minor fixes.

This commit is contained in:
dwenz 2020-08-12 15:02:51 +00:00
parent ec31dc3738
commit 655d60a1c6
2 changed files with 74 additions and 91 deletions

View file

@ -449,7 +449,7 @@
"\n",
"Die zurückgelegte Distanz eines Objekts, welches eine beschleunigte Bewegung ausführt (z.B. der freie Fall einer Kugel in einem Gravitationsfeld), kann mit Hilfe von \n",
"\n",
"$s(t) = \\frac{1}{2}\\cdot a \\cdot t^2 + v_0 \\cdot t + s_0$\n",
"$$s(t) = \\frac{1}{2}\\cdot a \\cdot t^2 + v_0 \\cdot t + s_0$$\n",
"\n",
"beschrieben werden. Hierbei beschreibt $t$ die verstrichene Zeit, $a$ die Beschleunigung, $v_0$ die Startgeschwindigkeit und $s_0$ die Startposition des Objekts. Ersteklen Sie unterhalb der Aufgabe eine neue Code-Zelle und berechnen Sie die folgenden Werte:\n",
"\n",
@ -811,7 +811,7 @@
"\n",
"Die Leistung, welche in einem ohmschen Widerstand umgesetzt wird, lässt sich durch\n",
"\n",
"$P(U, I ) = U \\cdot I $\n",
"$$P(U, I ) = U \\cdot I $$\n",
"\n",
"berechnen, wobei $U$ die angelegte Spannung und $I$ der elektrische Strom ist. \n",
"<div>"
@ -825,6 +825,15 @@
"Es ist ratsam gleich von Anfang an Funktionen zu dokumentieren. Hierzu dienen in Python die sogenannten `Doc-Strings`. Sie beinhalten Informationen über die Funktion selbst, ihre verwendeten Parameter und ihrer Ausgabe. Zum Beispiel für das Ohmschen Gesetzes würde ein solcher Doc-String wie folgt aussehen:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"Spannung"
]
},
{
"cell_type": "code",
"execution_count": null,
@ -846,7 +855,6 @@
" Widerstand (float): Der Wert des verwendeten Widerstands\n",
" in Ohm.\n",
" \n",
" \n",
" Returns:\n",
" float: Die Berechnete Spannung in V.\n",
" '''\n",
@ -944,7 +952,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T12:25:06.524167Z",
@ -965,50 +973,28 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T12:25:06.540756Z",
"start_time": "2019-10-27T12:25:06.525161Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'Wert1'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"NeueWerte[0] # Hier seht ihr, dass der erste Wert den Index 0 hat."
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T12:25:06.556003Z",
"start_time": "2019-10-27T12:25:06.541754Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'Wert3'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"wert_index_2 = NeueWerte[2] \n",
"wert_index_2"
@ -1023,50 +1009,28 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T12:25:06.571456Z",
"start_time": "2019-10-27T12:25:06.561307Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['Wert1', 'Wert2', 'Wert3']"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"NeueWerte[0:3] "
"NeueWerte[0:3]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-27T12:25:06.603263Z",
"start_time": "2019-10-27T12:25:06.579819Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['Wert3', 'Wert4', 'Wert5']"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"NeueWerte[2:5] # Ihr seht Python behandelt den letzten Wert wie in einem offenen Intervall [2,5)"
]
@ -1253,7 +1217,7 @@
" \n",
"#### Aufgabe 4.a.: Erstellen von Messwerttabellen:\n",
"\n",
"Erstellen Sie für jede Spalte (außer der Messwertnummer) der nachfolgende Messtabelle eine Liste, welche die Messdaten beinhaltet. Benutzen Sie anschließend den `append` Befehl um die Daten jeder Spalte an eine weitere Liste namens *daten* anzuhängen. \n",
"Erstellen Sie für jede Spalte der nachfolgende Messtabelle eine Liste, welche die Messdaten beinhaltet. Benutzen Sie anschließend den `append` Befehl um die Daten jeder Spalte an eine weitere Liste namens *daten* anzuhängen. \n",
"\n",
"| Messwertnummer | Spannung [V] | Strom [mA] | Fehler der Spannung [V] | Fehler des Stroms [mA] |\n",
"|----------------|--------------|------------|-------------------------|---------------------------|\n",

View file

@ -88,6 +88,29 @@
"Statt das Ergebnis lediglich per `print`-Anweisung darstellen zu lassen, können wir auch unser Wissen um Listen benutzen und die berechneten Werte einer neuen Liste anfügen:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# (Funktion haben wir bereits in der Vorbereitung definiert)\n",
"def Spannung(Strom, Widerstand):\n",
" '''\n",
" Diese Funktion berechnet die Spannung eines Ohmschen \n",
" Widerstands.\n",
" \n",
" Args:\n",
" Strom (float): Der gemessene Strom in mA.\n",
" Widerstand (float): Der Wert des verwendeten Widerstands\n",
" in Ohm.\n",
" \n",
" Returns:\n",
" float: Die Berechnete Spannung in V.\n",
" '''\n",
" return Widerstand * Strom/1000"
]
},
{
"cell_type": "code",
"execution_count": null,
@ -104,7 +127,8 @@
"Widerstand = 100 # Ohm\n",
"\n",
"for Strom in Stromwerte:\n",
" Spannungswerte.append(Spannung(Strom, Widerstand))\n",
" res = Spannung(Strom, Widerstand)\n",
" Spannungswerte.append(res)\n",
"\n",
"Spannungswerte"
]
@ -181,7 +205,7 @@
"# Variante 1:\n",
"schallgeschindigkeiten = [] # m/s\n",
"\n",
"for f,l in zip(frequenzen, wellenlängen):\n",
"for f, l in zip(frequenzen, wellenlängen):\n",
" schallgeschindigkeiten.append(f*l)\n",
"\n",
"print(schallgeschindigkeiten)\n",
@ -239,6 +263,8 @@
},
"outputs": [],
"source": [
"# Hier eine kleine Hilfestellung für den Start:\n",
"# Messwerttabelle aus Aufgabe 4. a.:\n",
"messwert_nummer = list(range(1,7,1))\n",
"spannungs_wert = [12., 11.78, 12.56, 12.34, 12.01, 11.94]\n",
"strom_werte = [110, 98, 102, 124, 105, 95]\n",
@ -248,14 +274,18 @@
"\n",
"daten = [messwert_nummer, spannungs_wert, strom_werte, dspannung_wetre, dstrom_werte]\n",
"\n",
"# Beispiel für die Berechnung des Widerstandes:\n",
"def res(i, u):\n",
" r = u/i\n",
" return r\n",
"\n",
"for strom, spannung in zip(daten[1], daten[2]):\n",
"for strom, spannung in zip(daten[2], daten[1]):\n",
" widerstand.append(res(strom, spannung))\n",
" \n",
"daten.append(widerstand)"
"daten.append(widerstand)\n",
"\n",
"# Jetzt seid ihr gefragt:\n",
"\n"
]
},
{
@ -359,7 +389,7 @@
"plt.plot(xdaten, ydaten, # <-- Wie eben die x und y daten\n",
" color = 'red', # <-- Farbe der Linie\n",
" linestyle='dashed', # <-- Linientyp\n",
" label='Graph 1' # <-- Name der Linie\n",
" label='Spannungskurve' # <-- Name der Linie\n",
" )\n",
"plt.xlabel('X-Achse') # <-- Beschriftung der x-Achse\n",
"plt.ylabel('Y-Achse') # <-- Beschiftung der y-Achse\n",
@ -485,7 +515,7 @@
"\n",
"\n",
"x1 = list(range(-3, 4, 1)) # <- Werte zwischen -3 und 3\n",
"x2 = [i/10 for i in range(-30,31,1)] # <- 10 mal mehr Werte\n",
"x2 = [i/10 for i in range(-30, 31, 1)] # <- 10 mal mehr Werte\n",
"\n",
"y1 = [cubic(j) for j in x1]\n",
"y2 = [cubic(value) for value in x2]\n",
@ -524,17 +554,7 @@
"spannung_error = [0.3]*len(spannung) # Konstanter Ablesefehler [V]\n",
"strom_error = [14, 9, 12, 8, 7, 11] # gemessener schwankender Fehler[mA]\n",
"\n",
"plt.errorbar(strom, spannung, xerr=strom_error, yerr=spannung_error,\n",
" \n",
" linestyle='', # <-- Schaltet den Linienstyle aus | ls=''\n",
" marker='d', # <-- Ändert den Markertyp in Diamanten | -----\n",
" markerfacecolor='orange', # <-- Ändert die Markerfarbe zu Orange | mfc='orange'\n",
" markeredgecolor='k', # <-- Setzt die Kantenfarbe auf schwarz | mec='k'\n",
" markersize=7 # <-- Ändert die Markergröße | ms='7'\n",
"\n",
" \n",
" ) # <--- Wie verwende ich den errorbar plot?\n",
"\n",
"# plt.errorbar() # <--- Wie verwende ich den errorbar plot?\n",
"plt.ylabel('Spannung [V]')\n",
"plt.xlabel('Strom [mA]')\n",
"plt.show()"
@ -727,7 +747,7 @@
},
"outputs": [],
"source": [
"rnd_numbers2 = np.random.normal(1,2,1000)\n",
"rnd_numbers2 = np.random.normal(1, 2, 1000)\n",
"\n",
"\n",
"plt.hist(rnd_numbers, \n",
@ -906,13 +926,6 @@
"Hierbei stellt curve_fit eine Methode dar, Fit-Funktionen nach der obigen vorgestellten Methode der *kleinsten Quadraten* zu bestimmen. Dies hat zur Folge, dass lediglich die y-Fehler eurer Messwerte für den Fit verwendet werden können. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
@ -951,8 +964,10 @@
" spannung # <-- gemessenen \"Y\"-Werte \n",
" )\n",
"\n",
"print(para)\n",
"print(pcov)"
"print(para[0])\n",
"print(pcov[0,0]**0.5)\n",
"\n",
"print(f'Widerstand R {para[0]:.2f} +/- {pcov[0,0]**0.5:.2f} Ohm')"
]
},
{
@ -1035,6 +1050,13 @@
" # wir in der Regel absolute und keine relativen \n",
" # Unsicherheiten messen.\n",
" )\n",
"\n",
"plt.plot(strom, \n",
" [Spannung(value, para2[0]) for value in strom], \n",
" ls ='dashed',\n",
" color='orange',\n",
" label = f'Fitgerade mit R = {para2[0]:0.2f} +/- {pcov2[0,0]**(1/2):0.2f} ohm'\n",
" )\n",
"plt.errorbar(strom, \n",
" spannung,\n",
" xerr=strom_error,\n",
@ -1050,12 +1072,7 @@
" capthick=2, \n",
" label='Messwerte aus A. 5'\n",
" ) \n",
"plt.plot(strom, \n",
" [Spannung(value, para2[0]) for value in strom], \n",
" ls ='dashed',\n",
" color='orange',\n",
" label = f'Fitgerade mit R = {para2[0]:0.2f} +/- {pcov2[0,0]**(1/2):0.2f} ohm'\n",
" )\n",
"\n",
"\n",
"plt.legend()\n",
"plt.ylabel('Spannung [V]')\n",
@ -1104,6 +1121,8 @@
"source": [
"Wie vergleicht sich dieses $\\chi^2$ nun mit einer Funktion welche unsere Daten schlechter beschreibt. Zum Beispiel sofern wir die Spannung über die Funktion \n",
"\n",
"$$ U(R,I) = R \\cdot I $$\n",
"\n",
"$$ U(R,I) = R \\cdot I^2 $$\n",
"\n",
"beschreiben würden."