aboutsummaryrefslogtreecommitdiffstats
path: root/praklib.py
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}