Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
equation_implicite [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


equation_implicite

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision Les deux révisions suivantes
equation_implicite [2008/04/26 09:31]
tyrtamos
equation_implicite [2008/04/26 09:44]
tyrtamos
Ligne 180: Ligne 180:
 </code> </code>
  
 +===== Variante: recherche sans changement de sens =====
 +
 +La fonction de recherche étudiée jusqu'ici ne présuppose pas de rechercher dans une direction donnée. Par exemple:
 +
 +print fnimplicite(sin,pi/4,0.1) trouveras 0 même si on a démarré avec pi/4.
 +
 +Dans certain cas, on veut pouvoir chercher dans une direction donnée. Voilà le code adapté à cet objectif:
 +
 +<code python>
 +def fnimplicite(fn,x1,dx,eps=1.0e-15):
 +    """implicite(fn,x1,dx,eps=1.0e-15): résolution d'une équation implicite par recherche du zéro d'une fonction"""
 +    # calcul de la 1ère valeur de la fonction pour le x initial
 +    f1=fn(x1)
 +    i=0
 +    while True:
 +        i+=1
 +        if i>1000:
 +            raise ValueError ("impossible de trouver le zero de cette fonction")
 +        # calcul d'une 2ème valeur pour le x précédent + l'incrément
 +        x2=x1+dx
 +        f2=fn(x2)
 +        if abs(f2)<eps:
 +            # on a atteint la précision demandée: renvoyer x2
 +            break
 +        if ((f1>0)and(f2>0))or((f1<0)and(f2<0)):
 +            x1=x2
 +            f1=f2
 +        else:
 +            #f1 et f2 sont de part et d'autre de l'abscisse
 +            dx*=0.5
 +    return x2
 +</code>
 +
 +Avec ce code:
 +
 +print fnimplicite(sin,pi/4,0.1) trouva bien que le prochain passage de sin(x) à zéro à partir de pi/4 se produira pour x=pi.
 +
 +L'incrément de départ doit donner la direction de recherche. Ainsi:
 +
 +print fnimplicite(sin,pi/4,-0.1) trouva bien que le prochain passage de sin(x) à zéro à partir de pi/4 mais dans le sens des aiguilles d'une montre se produira bien pour x=0.
 +
 +Et, bien sûr, si dans la direction cherchée la fonction ne passe jamais à zéro, on se retrouvera avec l'exception correspondant à la condition de bouclage.
 +
 +\\
 Amusez-vous bien! Amusez-vous bien!
  
  
  
equation_implicite.txt · Dernière modification: 2008/04/27 07:08 de tyrtamos