# -*- coding: utf-8 -*-
"""
Created on Tue Jul 19 11:42:04 2022

@author: starons
"""

"""
Ce programme résoud numériquement l'équation différentielle décrivant la 
décroissance radioactive du carbone 14 dont la demi-vie est de 5730 ans en 
utilisant la fonction odeint et compare à la solution analytique. 
"""

# On importe les bibliothèques utiles
# -----------------------------------
from matplotlib import pyplot as plt
import numpy as np
from scipy.integrate import odeint

# Valeurs numériques caractéristiques du problème
# -----------------------------------------------
demi_vie = 5730                         # demi-vie (ans)
Lambda = np.log(2)/demi_vie             # constante radioactive (ans^-1) 
R0 = 10000                              # condition initiale 

# Paramètres de la résolution numérique
# -------------------------------------
t_fin = 5*demi_vie                      # durée
N = 7                                   # nombre de points
t = np.linspace(0,t_fin,N)              # découpage du temps 


# Définition de l'équation fifférentielle d'ordre 1 à résoudre 
# ------------------------------------------------------------ 
def C14 (R,t):
    Rp = -Lambda*R 
    return Rp

# Integration numérique à l'aide d'odeint
# ---------------------------------------
Rsol = odeint(C14,R0,t)                 # la ligne qui fait le job ! 
    
# On connait la solution analytique
# --------------------------------- 
t_analytique = np.linspace(0,t_fin,1000)# pour disposer d'un tableau plus dense de valeurs de temps   
R_analytique = R0*np.exp(-Lambda*t_analytique)

# Représentations graphiques 
# --------------------------
plt.plot(t,Rsol,color='black',marker='.',label="solution numérique")
plt.plot(t_analytique,R_analytique,color='red',linestyle='dashed',label="solution analytique")
plt.xlabel("temps (années)"),plt.ylabel("nombre de noyaux radioactifs présents")
plt.title("Décroissance radioactive du Carbone 14")
plt.legend(),plt.grid()