#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 19 16:04:08 2022

@author: fabrice

régression sur une relation du type y=ax, on procède en fait à un calcul de moyenne
"""


import numpy as np
import matplotlib.pyplot as plt
import numpy.random as rd

#liste des grandeurs mesurées
x_exp=np.array([1,1.8,3.2,4]) #mesures expérimentales de x
ux_exp=np.array([0.1,0.2,0.3,0.4]) #incertitudes sur x

y_exp=np.array([2,4,6.5,8.3]) # mesures expérimentales de y
uy_exp=np.array([0.5,0.6,0.6,0.8]) # mesures des incertitudes sur y

N=1000
La=[]# liste vide pour ranger les différentes pentes calculées
for i in range(N):
    Y=rd.normal(y_exp,uy_exp) # génération des tirages de y
    X=rd.normal(x_exp,ux_exp) # génération des tirages de x
    A=Y/X # calcul de la pente
    La.append(A)# création de la liste des pentes

a,ua=np.mean(La),np.std(La,ddof=1) # calcul de la pente moyenne et de 'incertitude sur la pente


print('la pente vaut',a)
print('l''incertitude sur a est',ua)


t=np.linspace(0,5,100)

plt.figure()
plt.xlabel('x')
plt.ylabel('y')
plt.errorbar(x_exp,y_exp,xerr=ux_exp,yerr=uy_exp,marker='+',linestyle='none',label='données')#tracé des barres d'erreurs
plt.plot(t,a*t)
plt.plot(t,(a-ua)*t)#facultatif : tracé de la droite de plus petite pente
plt.plot(t,(a+ua)*t)#facultatif : tracé de la droite de plus grande pente
plt.grid()
plt.title('J\'aime la physique... et quand même la chimie' )
plt.show()