# -*- coding: utf-8 -*-
# Created on Thu May 15 08:08:08 2025
# @author: mhebding
# DM1py - Euler 1



## I - LA methode d Euler en Python

# 1.
None # reponse a la question 1.

# 2.
def euler(dy, y0, t0, tf, n):
    h = None # h le pas
    liste_t = []
    liste_y = []
    y = None # initialisation
    t = None # initialisation
    for k in range(n):
        liste_t.append(t)
        liste_y.append(y)
        t = t+h
        y = y+h*dy(y,t)
    return None, None # renvoi des listes

None # reponse a la question 2.

# 3.
None # reponse a la question 3.

# 4.
def ED_charge(y,t):
    R = None
    C = None
    tau = R*C
    dy = None
    return None

# 5.
None # reponse a la question 5.

# 6.
E = None
R = None
C = None
print('Tau = {} s'.format(round(R*C),1)) #
n = None # nombre de points
essai_t, essai_y = euler(None, None, None, None, None)
plt.clf () # efface la figure courante
plt.plot(essai_t, essai_y) #
plt.title ("Charge d'un condensateur") #
plt.xlabel("Temps (s)") #
plt.ylabel("uC (V)") #
plt.savefig('essai.png') #
#plt.show() #



## II - Charge d un condensateur fit par Euler

# 7.
def lecture(nom):
    """ lecture d'un fichier texte pour recuperer les donnees en listes """
    with open(nom, "r") as fichier :
        lignes = fichier.readlines() # on recupere les lignes comme chaines
    liste_t, liste_uC = [], [] # listes de stockage
    for i in range(len(lignes)): # pour toutes les lignes
        lignes[i] = lignes[i].replace(',', '.') # remplace , par . si besoin
        lignes[i] = lignes[i].split() # on separe la tabulation
        liste_t.append(float(lignes[i][0])) #
        liste_uC.append(float(lignes[i][1])) #
    return liste_t, liste_uC

None # reponse a la question 7.

# 8.
donnees = lecture('RC_120.txt') # a modifier

# 9.
experience_t = None
experience_uC = None
plt.clf () # efface la figure courante
plt.plot(experience_t , experience_uC, "+") #
plt.title ("Mesures de la charge d'un condensateur") #
plt.xlabel("Temps (s)") #
plt.ylabel("uC (V)") #
plt.savefig('experience.png') #
#plt.show() #

# 10.
E = None
R = None
C = None
uC0 = None

t0 = None
tf = None
n = None # nombre de points
modele_t, modele_y = euler(None, None, None, None, None)
plt.clf () # efface la figure courante
plt.plot(experience_t , experience_uC, "+")
plt.plot(modele_t, modele_uC, color='red')
plt.title ("Confrontation modele-experience")
plt.xlabel("Temps (s)")
plt.ylabel("uC (V)")
plt.savefig('Fitt.png')
plt.show()
