Aller au contenu
Accueil » Le module math en Python

Le module math en Python

    Lors de l’élaboration de vos programmes, vous aurez certainement des calculs à réaliser. Dans vos calculs, vous pourrez avoir besoin de certaines fonctions mathématiques. La librairie « math » vous aide une petite collection de fonctions mathématiques usuelles.

    La librairie math en python

    La première étape consiste à importer le module avec l’instruction « import ».

    import math
    
    Python

    Les fonctions arithmétiques du module math

    Le module intègre plusieurs fonctions arithmétiques qui peuvent être utile.

    La fonction CEIL

    Cette fonction renvoie le nombre entier supérieur direct. Par « ceil », il faut comprendre « plafond » d’où la valeur entière directement supérieure. Il faut donc faire attention au comportement de cette fonction avec les nombres négatifs. En effet, la valeur absolue du résultat de la fonction « ceil » pour une variable X et -X ne donnera pas la même valeur.

    import math
    math.ceil(3.2)
    >>> 4
    math.ceil(-3.2)
    >>> -3
    Python

    La fonction FLOOR

    Cette fonction fonctionne à l’opposé de la fonction « ceil ». Par « floor », il faut comprendre « plancher ». La fonction renverra donc la valeur entière « pancher ». Ce sera la valeur entière directement inférieure.

    math.floor(3.2)
    >>> 3
    math.floor(-3.2)
    >>> -4
    Python

    La fonction TRUNC

    La fonction « trunc » permet de récupérer la partie entière d’un nombre sans chercher un arrondi supérieur ou inférieur.

    math.trunc(3.2)
    >>> 3
    math.trunc(-3.2)
    >>> -3
    Python

    La fonction FACTORIAL

    Cette fonction renvoie le résultat de l’opérateur factoriel. L’argument est forcément un nombre entier positif. Le résultat de l’opérateur factoriel N est la multiplication de tous les nombres entiers de 1 à N.

    math.factorial(4)  # 1 x 2 x 3 x 4 = 24 
    >>> 24
    Python

    La fonction FSUM

    La fonction « fsum » évite de perdre en précision lorsqu’on somme sur une liste de valeurs. Le delta n’est pas énorme mais cela peut engendrer des erreurs dans votre code. C’est donc important de l’avoir en tête.

    liste=[.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]
    sum(liste)
    >>> 0.9999999999999999
    math.fsum(liste)
    >>> 1.0
    sum(liste) == math.fsum(liste)
    >>> False
    Python

    La fonction GCD, plus grand commun diviseur

    Cette fonction nous replonge dans nos cours de mathématiques du collège :). La fonction « gcd » renvoie le plus grand commun diviseur. C’est la plus grande valeur qui permet de diviser les deux nombres, sachant que le résultat doit être un nombre entier.

    math.gcd(125,20)
    >>> 5
    Python

    La fonction ISCLOSE

    math.isclose(a,b, rel_tol=1e-09, abs_tol = 0.0)

    Nous pouvons nous trouver dans des situations où nous comparons des nombres qui ont des précisions différentes. Au lieu d’écrire une comparaison complexe sur plusieurs lignes, la fonction « isclose » permet de comparer deux valeurs de façon compacte. La fonction demande deux valeurs à comparer et les tolérances pour la comparaison.

    a,b = 10, 10.1
    math.isclose(a,b)
    >>> False
    math.isclose(a,b,rel_tol=0.05)  # Tolérance relative à 5%
    >>> True
    math.isclose(a,b,abs_tol=0.01)  # Tolérance absolue à 0.01
    >>> False
    Python

    La fonction ISNAN

    Quand vous manipulez des données, vous aurez parfois besoin de contrôler l’information que vous utilisez. La fonction « isnan() » permet de savoir si la variable est un nombre ou non. « NaN » est l’acronymie de « Not a Number » ou « Pas un Nombre » en français :).

    x, y = math.nan, 2.5
    math.isnan(x)
    >>> True
    math.isnan(y)
    >>> False
    Python

    Fonctions logarithme et exponentielle du module math

    Le module « math » permet d’utiliser la fonction exponentielle et logarithme. Il existe des fonctions prédéfinies pour les bases usuelles du logarithme mais il est possible de définir une base personnalisée.

    math.exp(2)
    >>> 7.38905609893065
    
    math.log2(4)  # logarithme de base 2
    >>> 2.0
    
    math.log10(100)  # logarithme de base 10
    >>> 2.0
    
    math.log(27,3)  # logarithme de base quelconque, ici 3
    >>> 3.0
    Python

    Il y a aussi les fonctions « .pow() », « .sqrt », « .cbrt » qui permettent de calculer une valeur élevée à une puissance, la racine carrée et la racine cubique.

    math.pow(3, 2)  # 3 est élevé à la puissance 2 soit 9
    >>> 9.0
    
    math.sqrt(9.0)  # racine carrée
    >>> 3.0
    
    math.cbrt(8)  # racine cubique, à partir de la version 3.11 de Python
    >>> 2
    
    math.pow(8, 1/3)  # équivalent à la racine cubique
    >>> 2.0
    
    math.pow(9, 1/2)  # équivalent à la racine carrée
    >>> 3.0
    Python

    Les fonctions trigonométriques

    Le module « math » propose également toutes les fonctions trigonométriques usuelles : sinus, cosinus, tangente …. La valeur donnée à la fonction doit être en radians.

    math.cos(math.pi/3)
    >>> 0.5000000000000001
    
    math.sinus(math.pi/2)
    >>> 1.0
    
    math.tan(math.pi/4)
    >>> 0.9999999999999999
    
    Python

    Les fonctions inverses sont bien entendues disponibles : math.atan(), math.acos(), math.asin(). Les fonctions retournent une valeur d’angle en radians.

    math.atan(x)
    math.acos(x)
    math.asin(x)
    Python

    Les fonctions hyperboliques sont elle aussi disponible : math.tanh(), math.cosh(), math.sinh(). Tout comme les fonctions inverses : math.atanh(), math.acosh(), math.asinh().

    math.cosh(x)
    math.sinh(x)
    math.tanh(x)
    math.acosh(x)
    math.asinh(x)
    math.atanh(x)
    Python

    Pour finir, il y a la fonction « .atan2() » qui elle permet de récupérer le quadrant du cercle dans lequel on se trouve.

    X1, Y1 = 0.5, math.sqrt(3)/2
    X2, Y2 = -0.5, -math.sqrt(3)/2
    T1 = Y1 / X1
    T2 = Y2 / X2
    T1 == T2
    >>> True
    
    math.atan2(Y1,X1)
    >>> 1.0471975511965976
    math.atan2(Y2,X2)
    >>> -2.0943951023931957
    math.atan(T1)
    >>> 1.0471975511965976
    math.atan(T2)
    >>> 1.0471975511965976
    
    Python

    Dans le cas 1, on a un angle de 60° alors que dans le cas 2 on est à l’opposé, soit -120°.

    fonction math atan2 en python

    Conversion angulaire et calcul de distance

    Le module « math » vous donne également la possibilité de convertir vos angles de radians en degrés et inversement.

    X2, Y2 = -0.5, -math.sqrt(3)/2
    angle_rad = math.atan2(Y2,X2)
    math.degrees(angle_rad)
    >>> -120.00000000000001
    math.radians(-120.)
    >>> -2.0943951023931953
    Python

    Et pour terminer sur cette section, voici deux fonctions qui vous renverront un calcul de distance. La première fonction « math.hypot » renvoie le calcul de la norme euclidienne des deux valeurs a et b données comme arguments. La norme euclidienne représente l’hypoténuse d’un triangle rectangle de longueur a et b. Ensuite, la fonction « math.dist » renvoie la distance entre deux points.

    math.hypot(3.,4.)
    >>> 5.0
    
    pt1 = [10.,5.,1.]
    pt2 = [100.,50.,10.]
    math.dist(pt1,pt2)
    >>> 101.02474944289642
    Python

    Les constantes du module math

    Enfin, voici les constantes mathématiques qui peuvent vous servir dans vos programmes. On retrouve la constante Pi, la valeur e qui est équivalente à exponentielle(1), une valeur réelle correspondant à l’infini et la valeur flottante de « NaN ».

    math.pi  # à la précision disponible
    >>> 3.141592653589793
    math.e  # à la précision disponible
    >>> 2.718281828459045
    math.inf  # pour un infini côté négatif -math.inf
    >>> inf
    math.nan
    >>> nan
    Python

    Et pour finir

    Vous avez pu voir les principales fonctions du module « math » en python. Ce n’est pas une liste exhaustive, d’autres fonctions existent et sont décrites dans la documentation en ligne. Egalement, vous trouverez plus de détails sur les fonctions présentées si vous en avez besoin.

    Merci de m’avoir lu, n’hésitez pas à me laisser un commentaire, j’y répondrai avec plaisir,
    A bientôt,
    Benjamin

    Si vous avez aimé l'article, vous êtes libres de le partager ! :)

    Laisser un commentaire