#!/usr/bin/python3
# Régression linéaire (chute libre)

import numpy as np
import gauss   # pour la fonction gauss() des TD
import matplotlib.pyplot as plt

t = np.array([0., .31, .59, 1.02, 1.32, 1.74]) # les données de temps
y = np.array([1., 3., 4., 4., 3., 0.])         # les données de hauteur

def x1(t):        # les variables prédicteur
    return t
def x2(t):
    return t**2
    
A = np.ones((6, 3)) # la matrice de coefficients
A[:, 1] = x1(t)
A[:, 2] = x2(t)

beta = gauss.gauss(A.T @ A, A.T @ y) # paramètres = solution du système linéaire 
y0, v0, g = beta[0], beta[1], -2 * beta[2]

def f(t):
    return y0 + v0 * t - g/2 * t**2

r = y - f(t)         # les résidus
chi2 = np.sum(r**2)
    
tpoints = np.linspace(0, 1.74, 100)
plt.plot(t, y, 'ro')
for h, v in zip(t, y):
    plt.plot([h, h], [v+.1, v-.1], 'r')
plt.plot( tpoints, f(tpoints))
plt.xlabel("t [s]")
plt.ylabel("y [m]")
plt.title("y0 = {:.2f} m, v0 = {:.2f} m/s, g = {:.2f} m/s^2, chi^2 = {:.5f}".format(y0, v0, g, chi2))
plt.show()
