# modellen.py - een lineair en een kwadratisch model fitten op de knikkermetingen
import numpy as np

t = np.array([0.0, 0.4, 0.8, 1.2, 1.6, 2.0, 2.4])          # tijd (s)
s = np.array([0.0, 3.1, 13.0, 28.7, 51.1, 79.7, 115.1])    # afgelegde weg (cm)

for graad in (1, 2):
    coef = np.polyfit(t, s, graad)       # kleinste kwadraten; hoogste macht eerst
    model = np.poly1d(coef)
    residu = s - model(t)
    print(f"graad {graad}: coefficienten", "  ".join(f"{c:.2f}" for c in coef))
    print("   residuen (cm):", "  ".join(f"{r:+.1f}" for r in residu))
    print(f"   som van de kwadraten: {np.sum(residu**2):.1f} cm2")

a2, a1, a0 = np.polyfit(t, s, 2)
print(f"versnelling a = 2 * {a2:.2f} cm/s2 = {2 * a2 / 100:.3f} m/s2")
print(f"voorspelling bij t = 3,0 s: {np.polyval([a2, a1, a0], 3.0):.0f} cm")
