Calculer les fonctions inverses

Résolu
DavianThule Messages postés 30 Statut Membre -  
DavianThule Messages postés 30 Statut Membre -
Bonjour, en ce moment, je suis sur un programme qui calcule chaque fonctions trigonométriques de x, mais je bloque sur arctan.
Cela fait deux jours que je cherche une formule pour calculer arctan(x) avec x entre -infini et +infini.

Quelqu'un aurait-il la solution ?

Merci d'avance.

5 réponses

  1. dsy73 Messages postés 9003 Date d'inscription   Statut Contributeur Dernière intervention   2 547
     
    salut
    numpy ?
    0
  2. DavianThule Messages postés 30 Statut Membre 3
     
    Salut, non, j'essaie de calculer les fonctions sans utiliser de librairie. :)
    0
    1. DavianThule Messages postés 30 Statut Membre 3
       
      Non, c'est pour moi-même.
      Je suis en quatrième.
      0
    2. dsy73 Messages postés 9003 Date d'inscription   Statut Contributeur Dernière intervention   2 547
       
      cela n'empêche pas d'appliquer ce qui est indiqué dans le lien.
      Et n'oublie pas la coloration syntaxique.
      0
    3. DavianThule Messages postés 30 Statut Membre 3
       
      Ah oui, j'ai tenté pour résoudre le problème d'utiliser ce code(qui ne marche pas) :

      def atan(x):
          y = 1
          a = 0
          while x < ("%.03f" % tan(y)):
              a = a + 1
              print a
              y = y - 1/1000 
          while x > ("%.03f" % tan(y)):
              a = a + 1
              print a
              y = y + 1/1000 
          if x == tan(y):
              return y
      0
    4. dsy73 Messages postés 9003 Date d'inscription   Statut Contributeur Dernière intervention   2 547
       
      Mets la coloration et l'indentation stp, c'est illisible.
      Et commente ton code. Explique l'erreur, etc
      0
  3. DavianThule Messages postés 30 Statut Membre 3
     
    Oui.

    Par contre, je ne sais pas comment indenter et mettre en couleur les messages.
    Je n'ai pas trouvé sur le site.
    0
  4. dsy73 Messages postés 9003 Date d'inscription   Statut Contributeur Dernière intervention   2 547
     
    Pour la coloration, c'est le 4ieme bouton de l'éditeur de message de ce forum : <>
    Tu choisis Python dans la liste.

    Pour l'indentation, si tu n'es pas capable d'indenter du code Python alors tu dois revenir à la base. Reprends ton cours sur Python du début.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. DavianThule Messages postés 30 Statut Membre 3
     
    x = input('La variable =')
    
    def atan(x): # Je définis la fonction arc tangente de x
              y = 1
              while x < tan(y): # tant que x est plus petit que tan(y)
                        y = y - 1/1000
              while x > tan(y): # tant que x est plus grand que tan(y)
                        y = y + 1/1000
              if x == tan(y): # Si x est égal à tan(y)
                        return y 
    
    print atan(x)


    Quand je lance le programme, il ne donne jamais de résultat.
    J'ai vérifié, la boucle ne se termine jamais.
    0
    1. dsy73 Messages postés 9003 Date d'inscription   Statut Contributeur Dernière intervention   2 547
       
      La comparaison "x == tan(y)" me pose problème. Je n'ai pas testé mais je ne pense pas que cela puisse fonctionner.
      Tu ne peux pas faire un test d'égalité entre 2 valeurs décimales (avec des virgules) car l'ordinateur n'a pas une précision absolue. Par exemple : "if 0.0001 == 0.00011".
      Donc tu dois trouver un moyen de faire une comparaison avec une gestion d'erreur.
      0
    2. DavianThule Messages postés 30 Statut Membre 3
       
      Merci, je vais y réfléchir.
      0
    3. DavianThule Messages postés 30 Statut Membre 3
       
      J'ai trouvé ! Mais mon code met plus de 15 secondes avant de donner une réponse et x doit être entre -1 et 1...
      def atan(x):
          y = 1
          while x < tan(y):
              y = y - 1.0/100000.0 
          while x > tan(y):
              y = y + 1.0/100000.0 
          if x == round(tan(y), 5):
              return y
      
      0
    4. dsy73 Messages postés 9003 Date d'inscription   Statut Contributeur Dernière intervention   2 547 > DavianThule Messages postés 30 Statut Membre
       
      Oui tu as compris le principe mais la méthode reste de toute façon limitée, tu peux améliorer la comparaison avec ce code :
      if math.fabs(x - math.tan(y)) < 0.001

      Tu trouveras d'autres méthodes sur ce site :
      http://villemin.gerard.free.fr/Calcul/Arctg.htm
      0
    5. DavianThule Messages postés 30 Statut Membre 3
       
      J'ai trouvé une formule !

      def atan(x):
          y = abs(x)
          if y > 1:
              y = 1.0/y
          a = 1.0/((1+y**2)**(0.5))
          b = 1
          for n in range(1, 20):
              a = (a+b)/2
              b = (a*b)**(0.5)
          atg = y/(((1+y**2)**(0.5))*a)
          if abs(x) > 1:
              atg = pi/2- atg
          if x < 0:
              atg = - atg
          return atg
      


      Et ça marche pour x compris entre -infini et +infini.
      0