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

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

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
Révision précédente
equation_implicite [2008/04/26 09:31]
tyrtamos
equation_implicite [2008/04/27 07:08]
tyrtamos
Ligne 14: Ligne 14:
  
 def fnimplicite(fn,x1,dx,eps=1.0e-15): 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"""+    """fnimplicite(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     # 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         # on vérifie qu'on n'est pas en train de boucler pour rien
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>
 +#!/usr/bin/python
 +# -*- coding: utf-8 -*-
 +
 +from __future__ import division
 +
 +def fnimplicite(fn,x1,dx,eps=1.0e-15):
 +    """fnimplicite(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  # initialisation d'un compteur de boucle
 +    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!
  
  
 +<html>
 +<head>
 +<style type="text/css">
 +<!--
 +body {background-image:url(fondcorps.jpg);}
 +-->
 +</style>
 +</head>
 +<body>
 +</body>
 +</html>
  
equation_implicite.txt · Dernière modification: 2008/04/27 07:08 de tyrtamos