blob: dfa4bdceb02ee2d560938ded8e44d50c883c2c4b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#!/home/main/coding/py/venv/bin/python3
import math
import numpy as np
PI = 3.141592657 # Doom forever
def getvarbyval(var, ls):
for name, value in ls.items():
if value is var:
return name
def avg(l):
return sum(l)/len(l)
def stddev(l):
s = len(l)
a = avg(l)
return math.sqrt(sum(( (i - a)**2 for i in l )) / (s * (s-1)))
def sigsum(stddev, sig_sist):
return math.sqrt(stddev**2 + sig_sist**2)
def sigma(func, args, sigmas):
s = 0
dx = 1e-7
for i in range(len(args)):
argsdx = args.copy()
argsdx[i] += dx
s += ( sigmas[i] * (func(*argsdx) - func(*args))/dx )**2
return math.sqrt(s)
def mnk(xs, ys, ss):
sss = ss*ss
d = np.sum(xs*xs/sss)*np.sum(1/sss) - np.sum(xs/sss)**2
da = np.sum(xs*ys/sss)*np.sum(1/sss) - np.sum(xs/sss)*np.sum(ys/sss)
db = np.sum(xs*xs/sss)*np.sum(ys/sss) - np.sum(xs/sss)*np.sum(xs*ys/sss)
a = da/d
b = db/d
sa = math.sqrt(np.sum(1/sss)/d)
sb = math.sqrt(np.sum(xs*xs/sss)/d)
return {"a": a, "b": b, "sa": sa, "sb": sb}
|