PC-Praktikum: Blitzlichtphotol

1036 days ago by pub

import csv def mean(L): return n(sum(L)/len(L)) def LinReg(L): X = [x for (x, y) in L] Y = [y for (x, y) in L] XY = [x*y for (x, y) in L] XX = [x^2 for (x, y) in L] YY = [y^2 for (x, y) in L] n = len(L) m = (mean(XY) - mean(X)*mean(Y))/(mean(XX) - mean(X)^2).n() b = (mean(Y) - m * mean(X)).n() d_m = sqrt(n/(n-2)*(sum(YY)-m*sum(XY)-b*sum(Y))/(n*sum(XX)-sum(X)^2)).n() d_b = (d_m*sqrt(mean(XX))).n() return [m, b, d_m, d_b, max(X).n(), max(Y).n()] def LogY(L): return [(n(x), ln(y).n()) for (x, y) in L] def getData(): files = [] data = [] for i in range(0,5): files.append(csv.reader(open(DATA+str(i+1)+".csv"), delimiter=',', quotechar='"')) data.append([row for row in files[i]]) data[i] = [(n(x),n(y)) for [x,y] in data[i]] return data def getMetaData(): data = [] file = csv.reader(open(DATA+"meta.csv"), delimiter=',', quotechar='"') for row in file: data.append(row) data = [(n(x),n(y),n(z)) for [x,y,z] in data] return data def ConvertToAt(Data, MetaData): Calculated = [] for i in range(0, len(MetaData)): Calculated.append([(x * 60 / MetaData[i][2],y * 0.01) for (x,y) in Data[i]]) return Calculated def getTemperatures(M): Temperatures = [] for m in M: Temperatures.append((m[0] + m[1])/2 + 273.15) return Temperatures RawData = getData() RawMetaData = getMetaData() Data = ConvertToAt(RawData, RawMetaData) Temperatures = getTemperatures(RawMetaData) def ShiftRight(L, first="XXX"): l = len(L) for i in range(l,1): L[i] = L[i-1] L.append(L[l-1]) L[0] = first return L def DisplayData(RawData, Data, Temperatures, sig = 3): for i in range(0,5): lines = ["T = " + str(Temperatures[i].round()) + " K"] lines.append(ShiftRight([(x).n(digits=sig) for (x,y) in RawData[i]], "x [mm]")) lines.append(ShiftRight([(y*2).n(digits=sig) for (x,y) in RawData[i]], "y [mm]")) lines.append(ShiftRight([t.round() for (t, A) in Data[i]],"t [s]")) lines.append(ShiftRight([A.n(digits=(sig-1)) for (t, A) in Data[i]],"A [ ]")) #show("Messung bei T = " + str(Temperatures[i].round()) + " K") html.table(lines) DisplayData(RawData, Data, Temperatures) 
       
T = 293 K
x [mm] 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100. 110. 120. 130. 140. 150. 160. 170. 180. 190. 200. 210. 220. 230. 230.
y [mm] 72.0 65.0 58.0 51.0 45.0 40.0 35.0 31.0 27.0 23.0 21.0 18.0 15.5 13.5 12.0 10.0 9.00 8.00 6.50 5.50 5.00 4.00 3.50 3.50
t [s] 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 230
A [ ] 0.36 0.33 0.29 0.25 0.23 0.20 0.18 0.16 0.14 0.11 0.10 0.090 0.078 0.068 0.060 0.050 0.045 0.040 0.032 0.027 0.025 0.020 0.017 0.017
T = 299 K
x [mm] 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100. 110. 120. 130. 140. 150. 160. 170. 180. 180.
y [mm] 47.0 36.5 29.0 23.0 18.0 13.5 11.0 8.00 6.00 5.00 3.50 3.00 2.50 2.00 1.50 1.00 0.500 0.500 0.500
t [s] 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 180
A [ ] 0.24 0.18 0.15 0.11 0.090 0.068 0.055 0.040 0.030 0.025 0.017 0.015 0.012 0.010 0.0075 0.0050 0.0025 0.0025 0.0025
T = 303 K
x [mm] 4.00 14.0 24.0 34.0 44.0 54.0 64.0 74.0 84.0 94.0 104. 114. 124. 134. 144. 154. 164. 174. 184. 194. 204. 214. 224. 224.
y [mm] 50.0 40.0 35.0 29.0 24.0 20.0 16.0 13.5 11.0 9.00 7.50 6.00 5.00 4.00 3.00 3.00 2.50 2.00 2.00 1.50 1.50 1.00 1.00 1.00
t [s] 2 7 12 17 22 27 32 37 42 47 52 57 62 67 72 77 82 87 92 97 102 107 112 112
A [ ] 0.25 0.20 0.18 0.15 0.12 0.10 0.080 0.068 0.055 0.045 0.037 0.030 0.025 0.020 0.015 0.015 0.012 0.010 0.010 0.0075 0.0075 0.0050 0.0050 0.0050
T = 308 K
x [mm] 4.00 14.0 24.0 34.0 44.0 54.0 64.0 74.0 84.0 94.0 104. 114. 124. 124.
y [mm] 36.0 24.0 19.0 13.0 10.0 7.00 5.00 3.50 2.50 2.00 1.40 1.00 1.00 1.00
t [s] 2 7 12 17 22 27 32 37 42 47 52 57 62 62
A [ ] 0.18 0.12 0.095 0.065 0.050 0.035 0.025 0.017 0.012 0.010 0.0070 0.0050 0.0050 0.0050
T = 312 K
x [mm] 4.00 14.0 24.0 34.0 44.0 54.0 64.0 74.0 84.0 94.0 104. 114. 124. 134. 144. 154. 164. 174. 184. 194. 204. 214. 224. 224.
y [mm] 34.0 25.0 19.0 16.0 13.0 10.0 8.00 6.00 5.00 4.00 3.50 3.00 2.50 2.40 2.20 2.00 1.80 1.60 1.50 1.20 1.10 1.00 0.800 0.800
t [s] 1 4 6 9 11 14 16 19 21 24 26 29 31 34 36 39 41 44 46 49 51 54 56 56
A [ ] 0.17 0.12 0.095 0.080 0.065 0.050 0.040 0.030 0.025 0.020 0.017 0.015 0.012 0.012 0.011 0.010 0.0090 0.0080 0.0075 0.0060 0.0055 0.0050 0.0040 0.0040
T = 293 K
x [mm] 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100. 110. 120. 130. 140. 150. 160. 170. 180. 190. 200. 210. 220. 230. 230.
y [mm] 72.0 65.0 58.0 51.0 45.0 40.0 35.0 31.0 27.0 23.0 21.0 18.0 15.5 13.5 12.0 10.0 9.00 8.00 6.50 5.50 5.00 4.00 3.50 3.50
t [s] 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 230
A [ ] 0.36 0.33 0.29 0.25 0.23 0.20 0.18 0.16 0.14 0.11 0.10 0.090 0.078 0.068 0.060 0.050 0.045 0.040 0.032 0.027 0.025 0.020 0.017 0.017
T = 299 K
x [mm] 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100. 110. 120. 130. 140. 150. 160. 170. 180. 180.
y [mm] 47.0 36.5 29.0 23.0 18.0 13.5 11.0 8.00 6.00 5.00 3.50 3.00 2.50 2.00 1.50 1.00 0.500 0.500 0.500
t [s] 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 180
A [ ] 0.24 0.18 0.15 0.11 0.090 0.068 0.055 0.040 0.030 0.025 0.017 0.015 0.012 0.010 0.0075 0.0050 0.0025 0.0025 0.0025
T = 303 K
x [mm] 4.00 14.0 24.0 34.0 44.0 54.0 64.0 74.0 84.0 94.0 104. 114. 124. 134. 144. 154. 164. 174. 184. 194. 204. 214. 224. 224.
y [mm] 50.0 40.0 35.0 29.0 24.0 20.0 16.0 13.5 11.0 9.00 7.50 6.00 5.00 4.00 3.00 3.00 2.50 2.00 2.00 1.50 1.50 1.00 1.00 1.00
t [s] 2 7 12 17 22 27 32 37 42 47 52 57 62 67 72 77 82 87 92 97 102 107 112 112
A [ ] 0.25 0.20 0.18 0.15 0.12 0.10 0.080 0.068 0.055 0.045 0.037 0.030 0.025 0.020 0.015 0.015 0.012 0.010 0.010 0.0075 0.0075 0.0050 0.0050 0.0050
T = 308 K
x [mm] 4.00 14.0 24.0 34.0 44.0 54.0 64.0 74.0 84.0 94.0 104. 114. 124. 124.
y [mm] 36.0 24.0 19.0 13.0 10.0 7.00 5.00 3.50 2.50 2.00 1.40 1.00 1.00 1.00
t [s] 2 7 12 17 22 27 32 37 42 47 52 57 62 62
A [ ] 0.18 0.12 0.095 0.065 0.050 0.035 0.025 0.017 0.012 0.010 0.0070 0.0050 0.0050 0.0050
T = 312 K
x [mm] 4.00 14.0 24.0 34.0 44.0 54.0 64.0 74.0 84.0 94.0 104. 114. 124. 134. 144. 154. 164. 174. 184. 194. 204. 214. 224. 224.
y [mm] 34.0 25.0 19.0 16.0 13.0 10.0 8.00 6.00 5.00 4.00 3.50 3.00 2.50 2.40 2.20 2.00 1.80 1.60 1.50 1.20 1.10 1.00 0.800 0.800
t [s] 1 4 6 9 11 14 16 19 21 24 26 29 31 34 36 39 41 44 46 49 51 54 56 56
A [ ] 0.17 0.12 0.095 0.080 0.065 0.050 0.040 0.030 0.025 0.020 0.017 0.015 0.012 0.012 0.011 0.010 0.0090 0.0080 0.0075 0.0060 0.0055 0.0050 0.0040 0.0040
def RawGraph(Data, Temp, labels, sig = 4, hueoffset = 0.28): graph = text("", (0,0)) l = len(Data) latexlabels = ["$"+labels[0]+"$", "$"+labels[1]+"$"] maxesx = [] maxesy = [] for i in range(0, l): graph += scatter_plot(Data[i], facecolor=hue(i/(l+1)+hueoffset)) maxesx.append(max([x for x,y in Data[i]])) maxesy.append(max([y for x,y in Data[i]])) maxes = (max(maxesx), max(maxesy)) for i in range(0, l): graph += text("$T = " + str(Temp[i].n(digits=sig)) + " K$", (maxes[0], maxes[1] - i * maxes[1]/(6*72) * 10 * 1.2), fontsize=10, rgbcolor=hue(i/(l+1)+hueoffset), horizontal_alignment='right') graph.axes_labels(latexlabels) graph.show(figsize=[10, 6]) RawGraph(Data, Temperatures, ["t [s]", "A"]) 
       
def LNGraphsTables(Data, Temp, labels, sig = 4, hueoffset = 0.28): latexlabels = ["$"+labels[0]+"$", "$"+labels[1]+"$"] graphs = [] data = [] regs = [] l = len(Data) for i in range(0,l): x = var('x') data.append(LogY(Data[i])) regs.append(LinReg(data[i])) graphs.append(plot(regs[i][0] * x + regs[i][1], x, 0, max([x for x,y in data[i]]))) graphs[i] += scatter_plot(data[i], facecolor=hue(i/(l+1)+hueoffset)) Text = "$T = " + str(Temp[i].n(digits=sig)) + " K$\n" Text += "$y = mx + b = $" + regs[i][0].n(digits=sig).str(no_sci=False) + "$ x + $" + regs[i][1].n(digits=sig).str(no_sci=False) +"\n" Text += "$\Delta$ $m = $"+ regs[i][2].n(digits=sig).str(no_sci=False) + "$, $$\Delta$$b = $" + regs[i][3].n(digits=sig).str(no_sci=False) graphs[i] += text(Text, (max([x for x,y in data[i]]), max([y for x,y in data[i]])), fontsize=10, rgbcolor='black', horizontal_alignment='right', vertical_alignment='top') graphs[i].axes_labels(latexlabels) tabledata = [] tabledata.append(("t [s]", "A", "ln(A)")) for x,y in Data[i]: tabledata.append((x.n(digits=sig), y.n(digits=sig), ln(y).n(digits=sig))) show(latex("Messung " + str(i+1) + " bei $T = $" + str(Temp[i].n(digits=sig)) + "")) html.table(tabledata, header=True) graphs[i].show(figsize=[10, 6], gridlines=("minor", "major")) return regs Regressions = LNGraphsTables(Data, Temperatures, ["t [s]", "ln(A)"]) 
       
\texttt{Messung 1 bei $T = $293.2}
t [s] A ln(A)
0.0000 0.3950 -0.9289
10.00 0.3600 -1.022
20.00 0.3250 -1.124
30.00 0.2900 -1.238
40.00 0.2550 -1.366
50.00 0.2250 -1.492
60.00 0.2000 -1.609
70.00 0.1750 -1.743
80.00 0.1550 -1.864
90.00 0.1350 -2.002
100.0 0.1150 -2.163
110.0 0.1050 -2.254
120.0 0.09000 -2.408
130.0 0.07750 -2.557
140.0 0.06750 -2.696
150.0 0.06000 -2.813
160.0 0.05000 -2.996
170.0 0.04500 -3.101
180.0 0.04000 -3.219
190.0 0.03250 -3.427
200.0 0.02750 -3.594
210.0 0.02500 -3.689
220.0 0.02000 -3.912
230.0 0.01750 -4.046
\texttt{Messung 2 bei $T = $299.4}
t [s] A ln(A)
0.0000 0.3150 -1.155
10.00 0.2350 -1.448
20.00 0.1825 -1.701
30.00 0.1450 -1.931
40.00 0.1150 -2.163
50.00 0.09000 -2.408
60.00 0.06750 -2.696
70.00 0.05500 -2.900
80.00 0.04000 -3.219
90.00 0.03000 -3.507
100.0 0.02500 -3.689
110.0 0.01750 -4.046
120.0 0.01500 -4.200
130.0 0.01250 -4.382
140.0 0.01000 -4.605
150.0 0.007500 -4.893
160.0 0.005000 -5.298
170.0 0.002500 -5.991
180.0 0.002500 -5.991
\texttt{Messung 3 bei $T = $303.1}
t [s] A ln(A)
0.0000 0.2750 -1.291
2.000 0.2500 -1.386
7.000 0.2000 -1.609
12.00 0.1750 -1.743
17.00 0.1450 -1.931
22.00 0.1200 -2.120
27.00 0.1000 -2.303
32.00 0.08000 -2.526
37.00 0.06750 -2.696
42.00 0.05500 -2.900
47.00 0.04500 -3.101
52.00 0.03750 -3.283
57.00 0.03000 -3.507
62.00 0.02500 -3.689
67.00 0.02000 -3.912
72.00 0.01500 -4.200
77.00 0.01500 -4.200
82.00 0.01250 -4.382
87.00 0.01000 -4.605
92.00 0.01000 -4.605
97.00 0.007500 -4.893
102.0 0.007500 -4.893
107.0 0.005000 -5.298
112.0 0.005000 -5.298
\texttt{Messung 4 bei $T = $308.0}
t [s] A ln(A)
0.0000 0.2100 -1.561
2.000 0.1800 -1.715
7.000 0.1200 -2.120
12.00 0.09500 -2.354
17.00 0.06500 -2.733
22.00 0.05000 -2.996
27.00 0.03500 -3.352
32.00 0.02500 -3.689
37.00 0.01750 -4.046
42.00 0.01250 -4.382
47.00 0.01000 -4.605
52.00 0.007000 -4.962
57.00 0.005000 -5.298
62.00 0.005000 -5.298
\texttt{Messung 5 bei $T = $311.9}
t [s] A ln(A)
0.0000 0.1900 -1.661
1.000 0.1700 -1.772
3.500 0.1250 -2.079
6.000 0.09500 -2.354
8.500 0.08000 -2.526
11.00 0.06500 -2.733
13.50 0.05000 -2.996
16.00 0.04000 -3.219
18.50 0.03000 -3.507
21.00 0.02500 -3.689
23.50 0.02000 -3.912
26.00 0.01750 -4.046
28.50 0.01500 -4.200
31.00 0.01250 -4.382
33.50 0.01200 -4.423
36.00 0.01100 -4.510
38.50 0.01000 -4.605
41.00 0.009000 -4.711
43.50 0.008000 -4.828
46.00 0.007500 -4.893
48.50 0.006000 -5.116
51.00 0.005500 -5.203
53.50 0.005000 -5.298
56.00 0.004000 -5.521
\texttt{Messung 1 bei $T = $293.2}
t [s] A ln(A)
0.0000 0.3950 -0.9289
10.00 0.3600 -1.022
20.00 0.3250 -1.124
30.00 0.2900 -1.238
40.00 0.2550 -1.366
50.00 0.2250 -1.492
60.00 0.2000 -1.609
70.00 0.1750 -1.743
80.00 0.1550 -1.864
90.00 0.1350 -2.002
100.0 0.1150 -2.163
110.0 0.1050 -2.254
120.0 0.09000 -2.408
130.0 0.07750 -2.557
140.0 0.06750 -2.696
150.0 0.06000 -2.813
160.0 0.05000 -2.996
170.0 0.04500 -3.101
180.0 0.04000 -3.219
190.0 0.03250 -3.427
200.0 0.02750 -3.594
210.0 0.02500 -3.689
220.0 0.02000 -3.912
230.0 0.01750 -4.046
\texttt{Messung 2 bei $T = $299.4}
t [s] A ln(A)
0.0000 0.3150 -1.155
10.00 0.2350 -1.448
20.00 0.1825 -1.701
30.00 0.1450 -1.931
40.00 0.1150 -2.163
50.00 0.09000 -2.408
60.00 0.06750 -2.696
70.00 0.05500 -2.900
80.00 0.04000 -3.219
90.00 0.03000 -3.507
100.0 0.02500 -3.689
110.0 0.01750 -4.046
120.0 0.01500 -4.200
130.0 0.01250 -4.382
140.0 0.01000 -4.605
150.0 0.007500 -4.893
160.0 0.005000 -5.298
170.0 0.002500 -5.991
180.0 0.002500 -5.991
\texttt{Messung 3 bei $T = $303.1}
t [s] A ln(A)
0.0000 0.2750 -1.291
2.000 0.2500 -1.386
7.000 0.2000 -1.609
12.00 0.1750 -1.743
17.00 0.1450 -1.931
22.00 0.1200 -2.120
27.00 0.1000 -2.303
32.00 0.08000 -2.526
37.00 0.06750 -2.696
42.00 0.05500 -2.900
47.00 0.04500 -3.101
52.00 0.03750 -3.283
57.00 0.03000 -3.507
62.00 0.02500 -3.689
67.00 0.02000 -3.912
72.00 0.01500 -4.200
77.00 0.01500 -4.200
82.00 0.01250 -4.382
87.00 0.01000 -4.605
92.00 0.01000 -4.605
97.00 0.007500 -4.893
102.0 0.007500 -4.893
107.0 0.005000 -5.298
112.0 0.005000 -5.298
\texttt{Messung 4 bei $T = $308.0}
t [s] A ln(A)
0.0000 0.2100 -1.561
2.000 0.1800 -1.715
7.000 0.1200 -2.120
12.00 0.09500 -2.354
17.00 0.06500 -2.733
22.00 0.05000 -2.996
27.00 0.03500 -3.352
32.00 0.02500 -3.689
37.00 0.01750 -4.046
42.00 0.01250 -4.382
47.00 0.01000 -4.605
52.00 0.007000 -4.962
57.00 0.005000 -5.298
62.00 0.005000 -5.298
\texttt{Messung 5 bei $T = $311.9}
t [s] A ln(A)
0.0000 0.1900 -1.661
1.000 0.1700 -1.772
3.500 0.1250 -2.079
6.000 0.09500 -2.354
8.500 0.08000 -2.526
11.00 0.06500 -2.733
13.50 0.05000 -2.996
16.00 0.04000 -3.219
18.50 0.03000 -3.507
21.00 0.02500 -3.689
23.50 0.02000 -3.912
26.00 0.01750 -4.046
28.50 0.01500 -4.200
31.00 0.01250 -4.382
33.50 0.01200 -4.423
36.00 0.01100 -4.510
38.50 0.01000 -4.605
41.00 0.009000 -4.711
43.50 0.008000 -4.828
46.00 0.007500 -4.893
48.50 0.006000 -5.116
51.00 0.005500 -5.203
53.50 0.005000 -5.298
56.00 0.004000 -5.521
def getEnergy(Regressions, T, labels, sig = 4): latexlabels = ["$"+labels[0]+"$", "$"+labels[1]+"$"] M = [n(m) for (m,b,x,y,z,a) in Regressions] l = len(T) table = [("T [K]", "k [s^-1]", "T [K^-1]", "ln(k)")] data = [] for i in range(0,l): table.append((T[i].n(digits=sig), M[i].n(digits=sig).str(no_sci=false), (1/T[i]).n(digits=sig).str(no_sci=false), ln(M[i]).real().n(digits=sig))) data.append((1/T[i], ln(M[i]).real())) reg = LinReg(data) E_a = var('E_a') E_a = (-reg[0] * 8.31447).n(digits=sig) # html.table(reg) buffer = scatter_plot(data, facecolor=hue(0.8)) Text = "$y = mx + b = $" + reg[0].n(digits=sig).str(no_sci=False) + "$ x + $" + reg[1].n(digits=sig).str(no_sci=False) +"\n" Text += "$\Delta$ $m = $"+ reg[2].n(digits=sig).str(no_sci=False) + "$, $$\Delta$$b = $" + reg[3].n(digits=sig).str(no_sci=False) + "\n" Text += "$E_a = -m R = " + str(round(E_a)) + "$ $J/mol $" buffer += text(Text, (max([x for x,y in data]), max([y for x,y in data])), fontsize=10, rgbcolor='black', horizontal_alignment='right', vertical_alignment='top') x = var('x') buffer += plot(reg[0] * x + reg[1], x, min([x for x,y in data]), max([x for x,y in data])) buffer.axes_labels(latexlabels) html.table(table, header=true) buffer.show(figsize=[10, 6]) show(E_a) getEnergy(Regressions, Temperatures, ["1/T [K^-1]", "ln(k)"]) 
       
T [K] k [s^-1] T [K^-1] ln(k)
293.2 -1.364e-2 3.411e-3 -4.295
299.4 -2.635e-2 3.340e-3 -3.636
303.1 -3.658e-2 3.299e-3 -3.308
308.0 -6.305e-2 3.247e-3 -2.764
311.9 -6.562e-2 3.206e-3 -2.724
67070.
T [K] k [s^-1] T [K^-1] ln(k)
293.2 -1.364e-2 3.411e-3 -4.295
299.4 -2.635e-2 3.340e-3 -3.636
303.1 -3.658e-2 3.299e-3 -3.308
308.0 -6.305e-2 3.247e-3 -2.764
311.9 -6.562e-2 3.206e-3 -2.724
67070.