Calculer les fonctions inverses

Résolu/Fermé
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 - 11 janv. 2015 à 14:23
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 - 17 janv. 2015 à 08:59
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

dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
11 janv. 2015 à 14:24
salut
numpy ?
0
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 3
11 janv. 2015 à 14:25
Salut, non, j'essaie de calculer les fonctions sans utiliser de librairie. :)
0
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
11 janv. 2015 à 14:28
0
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 3
11 janv. 2015 à 14:29
Non, c'est pour moi-même.
Je suis en quatrième.
0
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
Modifié par dsy73 le 11/01/2015 à 14:32
cela n'empêche pas d'appliquer ce qui est indiqué dans le lien.
Et n'oublie pas la coloration syntaxique.
0
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 3
Modifié par KX le 11/01/2015 à 21:39
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
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
11 janv. 2015 à 14:33
Mets la coloration et l'indentation stp, c'est illisible.
Et commente ton code. Explique l'erreur, etc
0
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 3
11 janv. 2015 à 14:56
Oui.

Par contre, je ne sais pas comment indenter et mettre en couleur les messages.
Je n'ai pas trouvé sur le site.
0
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
11 janv. 2015 à 15:03
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 3
Modifié par DavianThule le 11/01/2015 à 15:14
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
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
11 janv. 2015 à 15:17
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
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 3
11 janv. 2015 à 15:21
Merci, je vais y réfléchir.
0
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 3
11 janv. 2015 à 18:09
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
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476 > DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015
11 janv. 2015 à 21:12
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
DavianThule Messages postés 27 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 5 décembre 2015 3
Modifié par DavianThule le 17/01/2015 à 08:42
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