# -*- coding: utf-8 -*-
"""
    Concours Centrale-Supélec
    Oral de Physique-Chimie 2 MP
"""
import matplotlib.pyplot as plt
import numpy as np
from pylab import mod

# Valeurs numériques
f=50
omega=2*np.pi*f
C=10**(-6)   #ref 10**-5
T=1/f
U0=1
pas=0.000005

# Sinusoïde
Ue=lambda t:U0*np.cos(omega*t)

# Dérivée de Ud(t)
def DerivU(Ud,t,R):
    if Ue(t)>Ud:
        return(((Ue(t+pas)-Ue(t))/pas))
    else:
        return(-Ud/(R*C))

# Calcul et tracé de la tension redressée
def Redressement(R):
    t=0 
    Ud=0
    tmax=0.1
    Liste=[]
    Sol=[]
    while t<tmax:
        if Ue(t)>Ud:
            Ud=Ue(t)
        else:
            Ud=Ud+pas*DerivU(Ud,t,R)            
        Sol+=[Ud]
        t=t+pas
        Liste+=[t]
    plt.plot(Liste,Sol)
    plt.xlabel("temps (s)")
    plt.ylabel("Tension redressée (V)")
    plt.axis([0,tmax,0,U0])
    plt.show()
    
    
Res=1000
Redressement(Res)

#Crénaux
def Ue(t):
    if (mod(t,T)<T/2):
        return(U0)
    else:
        return(-U0)
Redressement(Res)

#Sinusoïde avec pont de diodes
Ue=lambda t:U0*abs(np.cos(omega*t))
Redressement(Res)
