Módulos matemáticos en Python: Math y Cmath

Al desarrollar nuestras aplicaciones, de vez en cuando nos encontramos con situaciones en las que necesitamos echar mano de las matemáticas para realizar alguna tarea. Al igual que otros lenguajes de programación, Python nos proporciona varios operadores para llevar a cabo cálculos básicos como * para multiplicar o // para dividir.

Si estás desarrollando una aplicación que debe llevar a cabo tareas específicas como estudiar el movimiento periódico o similar circuitos eléctricos, tendrás que trabajar con funciones trignométricos, así como con números complejos. Si bien, no puedes utilizar estas funciones directamente, puedes echar mano de ellas mediante la inclusión de dos módulos matemáticos. Estos módulos son Math y Cmath.

El primero te da acceso a funciones hiperbólicas, trigonométricas y logarítmicas para número reales, mientras que el segundo te permite trabajar con número complejos. En este tutorial, veremos todas las funciones importantes que te proporcionan dichos módulos. A menos que lo mencionemos explícitamente, todos los valores que devuelven dichas funciones son floats.

Funciones aritméticas

Estas funciones realizan varias operaciones aritméticas así como calcular el redondeo hacia abajo, el redondeo hacia arriba, así como el valor absoluto de un número mediante las funciones floor(x), ceil(x) y fabs(x), respectivamente. La función ceil(x) devolverá el entero menor que sea mayor o igual que x. De manera similar, floor (x) devolverá el entero mayor menor o igual a x. La función fabs(x) devolverá el valor absoluto de x.

También puedes realizar otras operaciones como calcular el factorial de un número utilizando la función factorial(x). Un factorial es el producto de un entero y de todos los enteros positivos más pequeños que él. Se suele utilizar en combinaciones y permutaciones. También puede utilizarse para calcular el valor del seno y del coseno.

import math
 
def getsin(x):
 
    multiplier = 1
    result = 0
     
    for i in range(1,20,2):
        result += multiplier*pow(x,i)/math.factorial(i)
        multiplier *= -1
         
    return result
     
 
getsin(math.pi/2) # returns 1.0
getsin(math.pi/4) # returns 0.7071067811865475

Otra función útil del módulo math es gcd(x, y), que te proporciona el máximo común divisor (gcd) de dos números, x e y. Cuando x e y no son cero, esta función devuelve el entero positivo más grande que divide tanto x como y. Puedes usarlo indirectamente para calcular el mínimo común divisor de dos números utilizando la siguiente fórmula:

gcd(a, b) x lcm(a, b) = a x b

Aquí tienes unas cuantas funciones aritméticas que te ofrece Python.

import math
 
math.ceil(1.001)    # returns 2
math.floor(1.001)   # returns 1
math.factorial(10)  # returns 3628800
math.gcd(10,125)    # returns 5
 
math.trunc(1.001)   # returns 1
math.trunc(1.999)   # returns 1

Funciones trigonométricas

Estas funciones relacionan los ángulos de un triángulo con sus lados. Tienen muchas aplicaciones, incluyendo el estudio de triángulos y el modelado de fenómenos periódicos como el sonido y las ondas de luz. Ten en cuenta que el ángulo que te proporciona es en radianes.

Puedes calcular sin(x), cos(x) y tan(x) directamente utilizando este módulo. Sin embargo, no hay una fórmula directa para calcular cosec(x), sec(x) y cot(x), pero su valor es igual al recíproco del valor devuelto por sin(x), cos(x) y tan(X), respectivamente.

En lugar de calcular el valor de las funciones trigonométricas en cierto ángulo, también puedes hacer la inversa y calcular el ángulo en el que tienen un valor dado usando asin(x), acos(x) y atan(x).

¿Te suena el teorema de Pitágoras? Indica que el cuadrado de la hipotenusa (el lado opuesto al ángulo recto) es igual a la suma de los cuadrados de los otros dos lados (catetos). La hipotenusa es también el lado más grande de un triángulo rectángulo. El módulo math te proporciona la función hipot(a, b) para calcular la longitud de la hipotenusa.

import math
 
math.sin(math.pi/4)    # returns 0.7071067811865476
math.cos(math.pi)      # returns -1.0
math.tan(math.pi/6)    # returns 0.5773502691896257
math.hypot(12,5)       # returns 13.0
 
math.atan(0.5773502691896257) # returns 0.5235987755982988
math.asin(0.7071067811865476) # returns 0.7853981633974484

Funciones hiperbólicas

Las funciones hiperbólicas son análogas de las funciones trigonométricas pero se basan en una hipérbola en lugar de un círculo. En la trigonometría, los puntos (cos b, sin b) representan los puntos de un círculo unitario. En el caso de funciones hiperbólicas, los puntos (cosh b, sinh b) representan los puntos que forman la mitad derecha de una hipérbola equilátera.

Al igual que las funciones trigonométricas, puedes calcular el valor de sinh(x), cosh(x) y tanh(x) directamente. El resto de valores pueden calcularse usando varias relaciones entre estos tres valores. También hay otras funciones como asinh(x), acosh(x) y atanh(x), que se pueden usar para calcular la inversa de los correspondientes valores hiperbólicos.

import math
 
math.sinh(math.pi)    # returns 11.548739357257746
math.cosh(math.pi)    # returns 11.591953275521519
math.cosh(math.pi)    # returns 0.99627207622075
 
math.asinh(11.548739357257746)   # returns 3.141592653589793
math.acosh(11.591953275521519)   # returns 3.141592653589793
math.atanh(0.99627207622075)     # returns 3.141592653589798

Funciones logarítmicas y potencias

Es probable que se trates con más frecuencia con logaritmos y potencias, que con funciones hiperbólicas o trigonométricas. Afortunadamente, el módulo de math te proporciona muchas funciones que nos ayudan a calcular logaritmos.

Puedse utilizar log(x, [base]) para calcular el registro de un número dado x a la base dada. Si omites el argumento de base opcional, el registro de x se calcula a la base e. Aquí, e es una constante matemática cuyo valor es 2.71828182 .... y puedes acceder a él usando math.e. Por cierto, Python también te permite acceder a la constante π usando math.pi.

Si deseas calcular los valores de un logaritmo base-2 o base-10, utilizando log2 (x) y log10 (x) se obtendrán resultados más precisos que log(x, 2) y log(x, 10). Ten en cuenta que no existe ninguna función log3(x), por lo que tendrá que seguir utilizando log (x, 3) para calcular los valores de logaritmo base-3. Lo mismo ocurre con todas las demás bases.

Si el valor cuyo logaritmo está calculando es muy cercano a 1, puede utilizar log1p(x). El 1p en log1p significa 1 más. Por lo tanto, log1p(x) calcula log(1 + x) donde x es cercano a cero. Sin embargo, los resultados son más precisos con log1p(x).

También puedes calcular el valor de un número x elevado a la potencia y usando pow (x, y). Antes de calcular las potencias, esta función convierte ambos argumentos en tipo float. Si deseas que el resultado final se compute en potencias enteras exactas, utilice la función pow() o el operador **.

También puedes calcular la raíz cuadrada de cualquier número dado x usando sqrt(x), pero se puede lograr lo mismo usando pow(x, 0.5).

import math
 
math.exp(5)                      # returns 148.4131591025766
math.e**5                        # returns 148.4131591025765
 
math.log(148.41315910257657)     # returns 5.0
math.log(148.41315910257657, 2)  # returns 7.213475204444817
math.log(148.41315910257657, 10) # returns 2.171472409516258
 
math.log(1.0000025)              # returns 2.4999968749105643e-06
math.log1p(0.0000025)            # returns 2.4999968750052084e-06
 
math.pow(12.5, 2.8)              # returns 1178.5500657314767
math.pow(144, 0.5)               # returns 12.0
math.sqrt(144)                   # returns 12.0

Números complejos

Los números complejos se almacenan internamente usando coordenadas rectangulares o cartesianas. Un número complejo z se representará en coordenadas cartesianas como z = x + iy, donde x representa la parte real e y representa la parte imaginaria. Otra manera de representarlos es usando coordenadas polares.

En este caso, el número complejo z debería ser definido como una combinación del módulo r y del ángulo de fase phi. El módulo r es la distancia entre el número complejo z y el origen. El ángulo phi es el ángulo en sentido contrario a las agujas del reloj medido en radianes desde el eje x positivo hasta el segmento de línea que une z y el origen.

Al tratar con números complejos, el módulo cmath puede ser de gran ayuda. El módulo de un número complejo se puede calcular utilizando la función abs(), y su fase se puede calcular utilizando la función de phase(z) integrada en el módulo cmath. Puedes convertir un número complejo de forma rectangular a forma polar usando polar(z), que devolverá un par(r, phi), donde r es abs(z) y phi es phase(z).

Del mismo modo, puedes convertir un número complejo de forma polar a forma rectangular usando rect(r, phi). El número complejo devuelto por esta función es r * (math.cos (phi) + math.sin (phi) * 1j).

import cmath
 
cmath.polar(complex(1.0, 1.0))
# returns (1.4142135623730951, 0.7853981633974483)
 
cmath.phase(complex(1.0, 1.0))
# returns 0.7853981633974483
 
abs(complex(1.0, 1.0))
# returns 1.4142135623730951

Fuente: Monty Shokeen

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP