Python - Math
Appearance
Average of List
def myMean(L): return float(sum(L)) / len(L)
Lin Reg
from math import sqrt
def myLinReg(X, Y):
"""
Linear regression of y = ax + b
real a, real b = linreg(X, Y)
"""
if len(X) != len(Y): raise ValueError, 'unequal length'
N = len(X)
if N == 0:
raise ValueError, 'list too short'
a = b = 0.0
elif N == 1:
a = 0
b = Y[0]
elif N == 2:
a = float(X[0]-X[1])/(Y[0]-Y[1])
b = Y[0]-a*X[0]
else :
Sx = Sy = Sxx = Syy = Sxy = 0.0 # sums
for x, y in map(None, X, Y):
Sx = Sx + x
Sy = Sy + y
Sxx = Sxx + x*x
Syy = Syy + y*y
Sxy = Sxy + x*y
det = Sxx * N - Sx * Sx
if det == 0.0 : det = 1e-5 # workaround
a, b = (Sxy * N - Sy * Sx)/det, (Sxx * Sy - Sx * Sxy)/det
#meanerror = residual = 0.0
#for x, y in map(None, X, Y):
# meanerror = meanerror + (y - Sy/N)**2
# residual = residual + (y - a * x - b)**2
#if meanerror == 0.0 : meanerror = 1e-5 # workaround
#RR = 1 - residual/meanerror
#ss = residual / (N-2)
#Var_a, Var_b = ss * N / det, ss * Sxx / det
return a, b
Curve Fitting
from [1]
import numpy as np
# curve-fit() function imported from scipy
from scipy.optimize import curve_fit
from matplotlib import pyplot as plt
# Test function with coefficients as parameters
def fit_function(x, a, b):
return a * np.exp(b * x)
p0 = [data_y[-1], 0.14] # initial guess of parameters
param, param_cov = curve_fit(
fit_function, data_x, data_y, p0, bounds=((-np.inf, -np.inf), (np.inf, np.inf))
)
print(f"Coefficients:\n{param}")
print(f"Covariance of coefficients:\n{param_cov}")
data_y_fit = []
for x in data_x:
y = fit_function(x, param[0], param[1])
data_y_fit.append(y)