2.1 Funciones matemáticas

Hasta ahora, vimos cómo realizar muchas operaciones diferentes mediante programas. Todas estas operaciones se pueden combinar, generando programas cada vez más complejos.

Muchas de estas operaciones, pueden ser necesitadas en más de un programa: para evitar tener que escribirlas de vuelta en cada programa que las necesita, existen las funciones o subprogramas.
Una función es un programa en sí mismo: tiene sus propias instrucciones, variables, etc. Puede ser ejecutada desde otro programa o función.

Python incluye cientos de funciones para realizar las operaciones más diversas, que puedan ser necesarias en nuestros programas. Estas funciones ya están programadas y no es necesario conocer sus instrucciones internas: Nos bastará con saber qué datos debemos enviarles y qué resultado nos devuelven.
Las ventajas de utilizar estas funciones, además del ahorro de tiempo al no tener que escribirlas, son:
- Libres de errores: Las funciones ya fueron probadas en millones de casos diferentes, y es altamente improbable que encontremos un error en ellas.
- Eficientes: Están programadas para realizar las operaciones de la forma más rápida posible.

Las funciones no son parte del núcleo del Python, esto significa que cada versión de Python puede tener diferentes funciones, aunque la mayoría de las funciones son comunes a casi todas las versiones. Al no estar en el núcleo del Python, debemos agregarlas al momento de compilar el programa o no funcionará, al no poder entender el compilador la llamada a la función. Las funciones están en archivos aparte llamados bibliotecas (libraries en inglés, a veces traducido como "librerías")

Para utilizar algunas de estas funciones, debemos indicarle al compilador que incluya el archivo deseado en nuestro programa, con la directiva

import  <nombre  del archivo>


 FUNCIONES MATEMÁTICAS

Las primeras funciones de biblioteca que vamos a ver son las llamadas funciones matemáticas, ya que se utilizan para resolver distintos cálculos. Estas funciones están incluidas en el archivo de Python <math> y éste es el nombre que debemos incluir en nuestros programas para usar alguna de estas funciones:

import math


La primera función que vamos a ver es sqrt(). Esta función permite calcular raíces cuadradas positivas (square roots en inglés, de ahí el nombre de la función.), y su prototipo es el siguiente:

float sqrt(float);

El prototipo de una función nos indica qué tipos de datos envía y recibe. Una función siempre envía como respuesta un único valor al programa que la llamó. En este caso ese dato es de tipo float y lo indica la primera palabra del prototipo.
Luego viene el nombre de la función, y por último, entre paréntesis, la lista de parámetros, o valores que recibe la función. En este caso, es uno sólo y también de tipo float.
Para ver como funciona, veamos el siguiente ejemplo:


def matem():
   import math
    n = int(input("Ingrese un número:"))
    r = math.sqrt(n)
    print("La raiz es ",r)       
matem()



Es un programa sencillo, vemos que en la segunda línea ya está la instrucción de inclusión de funciones matemáticas.
El programa pide al usuario que ingrese un valor, que guarda en la variable n. Una vez que se llega a la instrucción " r = math.sqrt(n)", se detiene momentáneamente la ejecución del programa principal (matem) y se llama a la función sqrt con el valor de la variable n como parámetro.
La función realiza las operaciones que sean necesarias y devuelve al programa principal el valor de la raíz cuadrada del valor que recibió. Una vez allí, el programa principal reanuda su ejecución, guardando el valor recibido en la variable r. Luego muestra dicho valor y finaliza el programa.

- Se debe tener en cuenta que la función sqrt sólo puede calcular un resultado para los valores de parámetros para los que esté definida la raíz cuadrada matemática. Es decir, que si intentamos calcular la raíz cuadrada de un número negativo, la función dará un error y se interrumpirá la ejecución del programa. Es necesario validar el parámetro antes de llamar a la función.






def matem():
    import math
    n = int(input("Ingrese un número:"))
    if n>=0:
        r = math.sqrt(n)
        print("La raíz es ",r)       
    else:
        print("No se puede calcular la raíz cuadrada de un número negativo")
matem()

De esta manera, el programa no se interrumpirá si el usuario ingresa un valor negativo. Como indicamos anteriormente de las dos raíces del número, la función sólo devuelve la raíz positiva, no la negativa.


Otra forma alternativa de importar funciones matemáticas, es importar sólo una función en lugar de toda la biblioteca:




def matem():
    from math import sqrt
    n = int(input("Ingrese un número:"))
    if n>=0:
        r = sqrt(n)
        print("La raíz es ",r)       
    else:
        print("No se puede calcular la raíz cuadrada de un número negativo")
matem()


Al importarla así, no es necesario escribir "math." en el nombre de la función, pudiendo escribirse simplemente como "sqrt"




La siguiente función es la función pow:

float pow (float, float)

Esta función recibe dos parámetros que representan la base y el exponente y devuelve como resultado el valor de la base elevado al exponente indicado. Así, por ejemplo:

pow(5,2) dará como resultado 25.
pow(2,5) dará como resultado 32.

El exponente puede ser cualquier valor racional, por lo que se pueden calcular inversas y raíces de cualquier orden:

pow(16,1/4) dará como resultado 2.

pow(-49,1/2) dará un error.

La función pow permite calcular cualquier raíz, incluyendo raíces cuadradas. Entonces, ¿qué función conviene usar cuando queremos calcular  una raíz cuadrada, sqrt() ó pow() ? La recomendación es usar sqrt(), que ha sido diseñada específicamente para raíces cuadradas y está optimizada para ello. La función pow() es más genérica y puede demorar más tiempo en calcular las raíces. Usar la función pow es equivalente a escribir **, como puede verse en el siguiente ejemplo:

def matem():
    from math import pow
    n = float(input("Ingrese un número:"))
    r = pow(n,3)
    print("El cubo es ",r)
    print("Otro cubo es ",n**3)
matem()

Las siguientes funciones que vamos a ver son:

float sin(float)
float cos(float)
float tan(float)

Estas funciones, como ya se imaginarán, devuelven los valores del seno, el coseno y la tangente del ángulo que reciben como parámetro. Se debe tener en cuenta que el valor del ángulo dado estará en radianes. (Recordemos que 3,14 radianes = 180 grados)
Entonces:

sin(0) dará como resultado 0,
sin(3.14/2) dará como resultado 1,
cos(3.14) dará como resultado -1,

El siguiente programa pide al usuario que ingrese el valor de un ángulo y calcula sus funciones trigonométricas:


 def matem():
    from math import sin
    from math import cos
    from math import tan
    from math import pi
    n = float(input("Ingrese un ángulo en grados:"))
    s = sin(n*pi/180)
    c = cos(n*pi/180)
    t = tan(n*pi/180)
    print("El seno es ",s)
    print("El coseno es ",c)
    print("La tangente es ",t)
matem()


En la línea 5, vemos la directiva  
   from math import pi
Esta instrucción, como ya habíamos visto, importa la constante pi del archivo math.
En el programa, el usuario ingresa el valor en grados de un ángulo en la variable n. Con tres llamadas a las funciones sin( ), cos( ) y tan( ), se calculan los valores trigonométricos buscados, previa conversión del ángulo a radianes.

Así como tenemos estas tres funciones, también existen en Python las funciones:

float asin(float)
float acos(float)
float atan(float)
 
que son las inversas de las anteriores: reciben un valor numérico que represente el seno, coseno o tangente de un ángulo, y devuelven el valor del ángulo correspondiente en radianes.
Estas funciones nos permiten otra manera de obtener el valor de pi con la mayor precisión posible: Si sabemos que cos(180) = -1 y que 180 grados es igual a pi radianes, entonces:

print(acos(-1.0))

Nos devolverá el mejor valor de pi que puede calcular la máquina.

Las últimas funciones que comentaremos aquí son:


float exp(float)
float log(float)

Estas funciones permite calcular e a la x (El número de Euler elevado a una potencia x), y el logaritmo en base e de un valor, respectivamente.
Se debe tener en cuenta que aunque se escriba log( ) no representa la función matemática de logaritmo en base 10, sino al logaritmo natural o neperiano.
Así, las instrucciones:

cout<<exp(1.0)<<endl;
cout<<log(10.0)<<endl;
cout<<log(exp(1.0))<<endl;

darán como resultados  2,7182; 2,3026 y 1 respectivamente.

Hay muchas otras funciones matemáticas en Python; su funcionamiento es siempre análogo a las ya vistas y su comprensión es muy sencilla. Se debe recordar siempre que en los valores para los que no está definida la función matemática, la función en Python dará un error al ejecutarla.

No hay comentarios:

Publicar un comentario