domingo, 10 de enero de 2016

Funciones o procedimientos - Programación



4.1 Introducción

Una función es un bloque autónomo e independiente de código que se encarga de realizar una operación concreta. Puede recibir datos de otras partes del programa en forma de parámetros y puede devolver uno o más valores al terminar de ejecutarse.

Pero, ¿para qué emplear funciones?

Pues sobre todo para organizar mejor el programa y para evitar tediosas repeticiones de programación. Si se escribe una sola vez la función apropiada, se puede emplear esta función tantas veces como se desee en diferentes situaciones y localizaciones de un programa, lo que permite modular la programación.


4.2 Funciones o procedimientos

Las funciones (o subrutinas, o subprogramas) son un conjunto de código independiente.
Las funciones sirven para aplicar la estrategia "divide y vencerás", ya que mediante las funciones se consigue dividir un programa largo en programas pequeños que son fáciles de realizar. Además, a la hora de sacar los errores de un programa grande es más fácil chequear las funciones separadamente buscando cuál es la función que falla en lugar de revisar un programa de muchísimas líneas de código donde estas interactúan entre sí y donde lo único que se sabe es que algo no funciona como era de esperar.
Para entender y aprender el manejo de funciones veamos un ejemplo: cómo “funciona” la función inv() de Matlab. Se trata de una función que calcula la matriz inversa de otra matriz, siempre que esta sea regular.

Primero se crea la matriz A, que es la matriz cuya inversa se quiere conocer:

» A=[1 4 -3; 2 1 5; -2 5 3]
A =
1 4 -3
2 1 5
-2 5 3

A continuación, se calcula la inversa de la matriz A mediante la función inv() y se asigna a una nueva matriz B:

B=inv(A)
B =
0.1803 0.2213 -0.1885
0.1311 0.0246 0.0902
-0.0984 0.1066 0.0574

¿Qué ha ocurrido? Inv() es una función que recibe unos datos, realiza una serie de cálculos, y devuelve los resultados de esos cálculos. En este caso recibe una matriz – la matriz A –, el computador realiza internamente una serie de operaciones y obtiene los elementos que tendría la matriz inversa de A, y luego devuelve esos elementos, que son asignados a otra matriz - la matriz B -.

Si observa detenidamente el proceso, se dará cuenta de que sucede algo así como cuando mete una moneda en una máquina de tabaco. Usted le da una cosa a la máquina (2 €)3 y ésta le devuelve otra cosa (un paquete de Fortuna con 19 cigarrillos).


En el caso de la función inv() lo que usted aporta es una matriz y lo que la máquina le devuelve es la inversa de esa matriz. A lo que se aporta se le llama argumentos de entrada y lo que devuelve se le llama valores de retorno o argumentos de salida.

En el caso de la función inv() el número de argumentos de entrada era de uno (la matriz de la que se quiere obtener su inversa), pero hay otras funciones que requieren más de un argumento de entrada, como la función power(A,B) que lo que hace es elevar A a la potencia B.

Del mismo modo, la función inv() aporta un único valor de retorno (la inversa de la matriz) pero las hay que devuelven más de un valor, como la función size(A), que tiene dos valores de retorno, como son el número de filas y el número de columnas de la matriz A.

Conocer cuáles son los argumentos de entrada y de salida de una función es VITAL, ya que, en realidad, es lo único importante que hay que saber de una función. 
Tanto es así que si escribe por ejemplo: >>help size, lo único de lo que se habla es de cuáles son los argumentos de entrada y de salida.

Ejemplo 1. Función matemática

function valor=funcion(x)

El argumento de entrada (x) se corresponde con el punto en el que se quiere conocer el valor de la función.

El argumento de salida (valor) es el valor de la función en dicho punto.

Internamente, la función se debe corresponder con f (x) = x2 − x − sin (x − 0.15).

El programa queda como sigue:

function valor = funcion(x)
valor = x^2-x-sin(x-0.15);


Ejemplo 2. Derivada numérica de la anterior función matemática

Se va a realizar una derivación numérica. Para ello se recurre, siguiendo la misma filosofía que con la integración numérica, a la definición de derivada:


Donde k es un valor muy pequeño, por ejemplo 1e-6.

En este caso se van a utilizar dos funciones. La primera contendrá una función matemática y la segunda realizará un par de llamadas a la primera función para calcular la derivada de la función en un punto.

function valor=derivada(x)

Los argumentos de entrada son:

x: punto en el que se quiere calcular la derivada

El argumento de salida (valor) es el valor de la derivada de la función en dicho punto. El código correspondiente es:

function valor = derivada(x)
k = 1e-6;
derivada = (funcion(x+k)-funcion(x))/k;


Ejemplo 3. Función que obtiene las raíces de un polinomio de 2º grado. 

A continuación vamos a realizar una función que calcule las raíces de un polinomio de segundo grado. Esta función necesitará 3 argumentos de entrada (los valores a, b y c del polinomio) y 2 de salida (las dos raíces del polinomio). Guarde las siguientes instrucciones en un archivo llamado funcion_raices_ecuacion.m, y compruebe que funciona:

function [x1,x2]=funcion_raices_ecuacion(a,b,c)
x1=(-b+(b^2-4*a*c)^.5)/(2*a);
x2=(-b-(b^2-4*a*c)^.5)/(2*a);

Pruebe la función programada para los siguientes casos:

a=1; b=3; c=2; Resultado: 2 raíces reales distintas.
a=1; b=2; c=1; Resultado: 2 raíces reales iguales.
a=1; b=1; c=1; Resultado: 2 raíces imaginarias.


Espero haber ayudado en algo. Hasta la próxima oportunidad!










  

No hay comentarios:

Publicar un comentario en la entrada