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)