Calculer les fonctions inverses

Résolu
DavianThule Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -  
DavianThule Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   2 485
 
salut
numpy ?
0
DavianThule Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   3
 
Salut, non, j'essaie de calculer les fonctions sans utiliser de librairie. :)
0
dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention   2 485
 
0
DavianThule Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   3
 
Non, c'est pour moi-même.
Je suis en quatrième.
0
dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention   2 485
 
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   Statut Membre Dernière intervention   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
dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention   2 485
 
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   Statut Membre Dernière intervention   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
dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention   2 485
 
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   Statut Membre Dernière intervention   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
dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention   2 485
 
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   Statut Membre Dernière intervention   3
 
Merci, je vais y réfléchir.
0
DavianThule Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   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
dsy73 Messages postés 9252 Date d'inscription   Statut Contributeur Dernière intervention   2 485 > DavianThule Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   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