tprak

Theoretical Physics Practical Training
git clone git://popovic.xyz/tprak.git
Log | Files | Refs

t0-method.py (825B)


      1 #!/usr/bin/env python3.9
      2 
      3 import numpy as np
      4 import sympy as sp
      5 
      6 def design_matrix(model, x_data, p0, var_str):
      7     var = sp.Matrix(sp.symbols(var_str))
      8     x = symbols("x")
      9 
     10     A = sp.Matrix(model(x, *var)).jacobian(var)
     11     A = A.subs({var[i]: p0[i] for i in range(len(p0))})
     12 
     13     return np.array([np.array([A.subs({x: x_data[i]]})) for i in range(len(s))])
     14 
     15 def cov_syst(model, x_data, p0, cov_relsyst)
     16     return cov_relsyst @ model(x_data, *p0) @ model(x_data, *p0).T
     17 
     18 
     19 def t0_fit(model, var_str, x_data, y_data, p0, cov_stat, cov_relsyst, iterations=100):
     20 
     21     A = design_matrix(model, x_data, p0, var_str)
     22 
     23     for i in range(iterations):
     24         P = np.linalg.inv(cov_syst(model, x_data, p0, cov_relsyst) + cov_stat)
     25         p0 = (A.T @ P @ A).inv() @ A.T @ P @ y
     26 
     27     dp = (A.T@P@A).inv()**(1/2)
     28 
     29     return p0, dp