Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
equation_implicite [2008/04/26 09:11] tyrtamos |
equation_implicite [2008/04/27 07:08] tyrtamos |
||
---|---|---|---|
Ligne 14: | Ligne 14: | ||
def fnimplicite(fn, | def fnimplicite(fn, | ||
- | """ | + | """ |
# calcul de la 1ère valeur de la fonction pour le x initial | # calcul de la 1ère valeur de la fonction pour le x initial | ||
f1=fn(x1) | f1=fn(x1) | ||
- | i=0 | + | i=0 # initialisation d'un compteur de boucle |
while True: | while True: | ||
+ | # on vérifie qu'on n'est pas en train de boucler pour rien | ||
+ | i+=1 | ||
+ | if i>1000: | ||
+ | raise ValueError (" | ||
# calcul d'une 2ème valeur pour le x précédent + l' | # calcul d'une 2ème valeur pour le x précédent + l' | ||
x2=x1+dx | x2=x1+dx | ||
Ligne 33: | Ligne 37: | ||
# on a dépassé le zéro: revenir en arrière avec un incrément diminué | # on a dépassé le zéro: revenir en arrière avec un incrément diminué | ||
dx*=-0.5 | dx*=-0.5 | ||
- | # on vérifie qu'on n'est pas en train de boucler pour rien | ||
- | i+=1 | ||
- | if i>1000: | ||
- | raise ValueError (" | ||
# on fait en sorte que le nouveau point soit désormais le point de base | # on fait en sorte que le nouveau point soit désormais le point de base | ||
x1=x2 | x1=x2 | ||
Ligne 180: | Ligne 180: | ||
</ | </ | ||
+ | ===== Variante: recherche sans changement de sens ===== | ||
+ | |||
+ | La fonction de recherche étudiée jusqu' | ||
+ | |||
+ | print fnimplicite(sin, | ||
+ | |||
+ | Dans certain cas, on veut pouvoir chercher dans une direction donnée. Voilà le code adapté à cet objectif: | ||
+ | |||
+ | <code python> | ||
+ | # | ||
+ | # -*- coding: utf-8 -*- | ||
+ | |||
+ | from __future__ import division | ||
+ | |||
+ | def fnimplicite(fn, | ||
+ | """ | ||
+ | # calcul de la 1ère valeur de la fonction pour le x initial | ||
+ | f1=fn(x1) | ||
+ | i=0 # initialisation d'un compteur de boucle | ||
+ | while True: | ||
+ | i+=1 | ||
+ | if i>1000: | ||
+ | raise ValueError (" | ||
+ | # calcul d'une 2ème valeur pour le x précédent + l' | ||
+ | x2=x1+dx | ||
+ | f2=fn(x2) | ||
+ | if abs(f2)< | ||
+ | # on a atteint la précision demandée: renvoyer x2 | ||
+ | break | ||
+ | if ((f1> | ||
+ | x1=x2 | ||
+ | f1=f2 | ||
+ | else: | ||
+ | #f1 et f2 sont de part et d' | ||
+ | dx*=0.5 | ||
+ | return x2 | ||
+ | </ | ||
+ | |||
+ | Avec ce code: | ||
+ | |||
+ | print fnimplicite(sin, | ||
+ | |||
+ | L' | ||
+ | |||
+ | print fnimplicite(sin, | ||
+ | |||
+ | Et, bien sûr, si dans la direction cherchée la fonction ne passe jamais à zéro, on se retrouvera avec l' | ||
+ | |||
+ | \\ | ||
Amusez-vous bien! | Amusez-vous bien! | ||
+ | < | ||
+ | < | ||
+ | <style type=" | ||
+ | <!-- | ||
+ | body {background-image: | ||
+ | --> | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | </ | ||
+ | </ | ||