La page ci-présente existe en version notebook téléchargeable grâce au bouton Bouton (choisir le format .ipynb). On rappelle qu’l faut ensuite l’enregistrer dans un répertoire adéquat sur votre ordinateur (capa_num par exemple dans votre répertoire personnel) puis lancer Jupyter Notebook depuis Anaconda pour accéder au notebook, le modifier et exécutez les cellules de code adéquates.

2.5. Etude du redressement monoalternance#

Nous allons utiliser la méthode précédente pour chercher le point de fonctionnement du circuit précédent à chaque instant t en supposant que E varie: E(t)=E0cos(2πft) avec E0=2V et f=50Hz.

On suppose que les caractéristiques des dipôles restent valables en régime variable de sorte qu’à un instant t, la tension uD est donnée par la solution de l’équation:

f(u)=E(t)uRIs(exp(uVT)1)

avec Is=95μA et VD=30mV et t un instant connu.

On va donc devoir réaliser une recherche de racine un grand nombre de fois. Il est donc préférable de mettre la série d’instructions pour déterminer la racine de f dans une fonction.

2.5.1. Fonction pour résoudre#

Exercice 1:

  1. Importer les bibliothèques numpy et matplotlib.pyplot

  2. Définir une fonction Esource(t) qui renvoie la valeur de E(t) pour un instant t donné en argument et une fonction f_test(u) qui renvoie la valeur de f pour une tension u donnée en argument de la fonction (elle utilisera une valeur E de tension pour la source comme une variable globale, les autres grandeurs Is, VT… peuvent être définie dans la fonction f_test, cf remarque par la suite).

  3. (Si ça na pas été fait précédemment) Tracer la fonction f entre [1,1] pour t=0 (donc E=2V) et vérifier graphiquement qu’il n’y bien qu’une seule racine dans l’intervalle (Note: On peut démontrer que la fonction est strictement décroissante, on a donc bien unicité de la racine quand elle existe.)

Remarque:
Le code ressemblera donc à ceci:

def Esource(t):
  # corps du code si necessaire
  return ....

def f_test(u):
  # corps du code si necessaire
  # La tension E sera notée E sans être définie par exemple :
  R = 100
  i = (E - u) / R
  return i

# Pour utiliser f_test:
E = 1  # Nécessaire
f_test(u)
# On pourra redéfinir E avant chaque appel de f_test si nécessaire

Exercice 2:

  1. Ecrire une fonction dicho(f,a0,b0,prec) qui va chercher la racine de la fonction f dans l’intervalle initiale [a0,b0] avec une précision prec par la méthode de dichotomie.

  2. Tester la fonction avec f_test et E=2V et vérifier la cohérence avec ce qu’on obtient graphiquement.

  • L’argument f est la fonction donc f ou f_test, pas ce qu’elle renvoie (c’est-à-dire f(0) ou f_test(1), on a la même différence entre une fonction et l’image d’une fonction).

  • Par contre, à l’intérieur de dicho. Comme f est une fonction, on pourra l’appeler en utilisant f(a), f(1)

  • Ne pas modifier les valeurs des arguments a0 et b0 : il faut les réassigner à deux variables internes à la fonction (a et b par exemple) et modifier ces deux variables dans la boucle.

  • Il est conseillé de tester initialement si le produit f(a0)f(b0) est bien négatif et renvoyer None sinon. Cela évitera des résultats absurdes si l’on cherche dans un intervalle où il n’y a pas de racine. Quand vous aurez avancé le cours d’informatique, vous pourrez remplacer ce comportement par une assertion.

2.5.2. Application au redressement monoalternance#

Exercice 3:
Ecrire une suite d’instruction:

  1. Définir un vecteur E_k qui prendre 1000 valeurs de E(t) aux instants tk équirépartis sur 2 périodes de E(t).

  2. Dans une boucle, pour chaque valeur de Ek, rechercher la tension uD correspondant et la stocker dans une liste.

  3. Transformer la liste des tensions uD en un vecteur puis obtenir les valeurs d’intensités correspondantes i(t) (pensez aux fonctions vectorialisables pour l’obtenir en une instruction).

  4. Obtenir les valeurs de la tension uR à chaque instant et tracer uR(t). Pourquoi parle-t-on de redressement ? monoalternance ?

  • Note : Réfléchir au choix de l’intervalle de recherche.