MATLAB dispone de sentencias para realizar bifurcaciones y bucles. Las bifurcaciones permiten realizar una u otra operación según se cumpla o no una determinada condición. Los bucles permiten repetir las mismas o análogas operaciones sobre datos distintos.
Sentencia If
La estructura más básica de la sentencia if será:
If <condición> <sentencias> end
En el caso de bifurcación múltiple, en la que concatenamos tantas condiciones como queramos, tenemos una estructura:
If <condición> <sentencias> elseif <condición 2> <sentencias> ... else <sentencias> end
La operación else es aquella que se realiza por defecto cuando no se dan las otras condiciones. Se puede omitir en cuyo caso no se hará nada cuando no se cumpla ninguna de las condiciones chequeadas.
La condición del if puede ser una condición matricial, del tipo A==B, donde A y B son matrices del mismo tamaño. Para que se considere que la condición se cumple, es necesario que sean iguales dos a dos todos los elementos de las matrices A y B (aij=bij,1=i=m, 1=j=n). Basta que haya dos elementos aij y bij diferentes para que las
matrices ya no sean iguales, y por tanto las sentencias del if no se ejecuten.
Sentencia Switch
Su forma general es la siguiente:
Switch <expresión_switch> case <expr1_case>
<sentencias>
case {< expr2_case >, < expr3_case>,...} <sentencias>
...
otherwise
<sentencias> end
Primero se evalúa <expresión_switch>, cuyo resultado debe ser un número escalar o una cadena de caracteres. Este resultado se compara con las <expr_case>, ejecutándose las sentencias correspondientes al resultado. Si ninguno es igual a <expresión_switch>, se ejecutan las sentencias correspondientes a otherwise. Se puede además agrupar varias condiciones dentro de unas llaves, bastará la igualdad con cualquier de estos elementos para ejecutar sus sentencias.
Sentencia For
La sentencia for repite un conjunto de sentencias un número predeterminado de veces.La siguiente construcción ejecuta sentencias con valores de i de 1 a n, variando de uno en uno:
For i = 1:n <sentencias> end o bien, For <vector_Valores> <sentencias> end
Donde vector_Valores es un vector con los distintos valores que tomará la variable i. Otra opción consiste en indicar el valor del incremento de la variable i:
For i = valor_inic:incremento:valor_fin <sentencias>
end
Es también muy común encontrarnos bucles for anidados unos dentro de otros. Sentencia While
Su sintaxis es la siguiente:
While <condición> <sentencias> end
Las sentencias se siguen ejecutando mientras haya elementos distintos de cero en la condición, es decir, mientras haya algún o algunos elementos true. El bucle se termina cuando todos los elementos de condición son false (es decir, cero)
Sentencia Break
La sentencia break hace que se termine la ejecución del bucle for y/o while más interno de los que comprenden a dicha sentencia.
Sentencia Continue
La sentencia continue hace que se pase inmediatamente a la siguiente iteración del bucle for o while, saltando todas las sentencias que hay entre el continue y el fin del bucle en la iteración actual.
2.5.2. Lectura y escritura interactiva de variables Función Input
La función input permite imprimir un mensaje en la línea de comandos de MATLAB y recuperar como valor de retorno un valor numérico o el resultado de una expresión tecleada por el usuario. Después de imprimir el mensaje, el programa espera que el usuario teclee el valor numérico o la expresión. Cualquier expresión válida de MATLAB es aceptada por este comando. El usuario puede teclear simplemente un vector o una matriz. En cualquier caso, la expresión introducida es evaluada con los valores actuales de las variables de MATLAB y el resultado se devuelve como valor de retorno.
Función Disp
La función disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero sin imprimir su nombre.
2.5.3. Ficheros *.m
Los ficheros con extensión (.m) son ficheros de texto sin formato (ficheros ASCII) que constituyen el centro de la programación en MATLAB.
Existen dos tipos de ficheros *.m, los ficheros de comandos (llamados scripts en inglés) y las funciones. Los primeros contienen simplemente un conjunto de comandos que se ejecutan sucesivamente cuando se teclea el nombre del fichero en la línea de comandos de MATLAB o se incluye dicho nombre en otro fichero *.m. Un fichero de comandos puede llamar a otros ficheros de comandos. Si un fichero de comandos se llama desde de la línea de comandos de MATLAB, las variables que crea pertenecen al espacio de trabajo base de MATLAB, y permanecen en él cuando se termina la ejecución de dicho fichero.
Las funciones permiten definir funciones enteramente análogas a las de MATLAB, con su nombre, sus argumentos y sus valores de retorno. Los ficheros *.m que definen funciones permiten extender las posibilidades de MATLAB.
Ficheros de comandos
Como ya se ha dicho, los ficheros de comandos o scripts son ficheros con un nombre, que contienen una sucesión de comandos análoga a la que se teclearía en el uso interactivo del programa. Dichos comandos se ejecutan sucesivamente cuando se teclea el nombre del fichero que los contiene (sin la extensión). Cuando se ejecuta desde la línea de comandos, las variables creadas por el fichero pertenecen al espacio de trabajo base de MATLAB. Por el contrario, si se ejecuta desde una función, las variables que crea pertenecen al espacio de trabajo de la función.
En los ficheros de comandos conviene poner los puntos y coma (;) al final de cada sentencia, para evitar una salida de resultados demasiado cuantiosa. Un fichero *.m puede llamar a otros ficheros *.m, e incluso se puede llamar a sí mismo de modo recursivo. Sin embargo, no se puede hacer profile de un fichero de comandos: sólo se puede hacer de las funciones.
Las variables definidas por los ficheros de comandos son variables del espacio de trabajo desde el que se ejecuta el fichero, esto es variables con el mismo carácter que las que se crean interactivamente en MATLAB si el fichero se ha ejecutado desde la línea de comandos. Al terminar la ejecución del script, dichas variables permanecen en memoria.
Definición de funciones
La primera línea de un fichero que define una función tiene la forma:
function [lista de valores de retorno] = nombre_funcion(lista de argumentos)
Entre corchetes y separados por comas van los valores de retorno (siempre que haya más de uno), y entre paréntesis también separados por comas los argumentos.
Puede haber funciones sin valor de retorno y también sin argumentos. Recuérdese que los argumentos son los datos de la función y los valores de retorno sus resultados. Si no hay valores de retorno se omiten los corchetes y el signo igual (=); si sólo hay un valor de retorno no hace falta poner corchetes. Tampoco hace falta poner paréntesis si no hay argumentos.
Las variables definidas dentro de una función son variables locales, en el sentido de que son inaccesibles desde otras partes del programa y en el de que no interfieren con variables del mismo nombre definidas en otras funciones o partes del programa. Se puede decir que pertenecen al propio espacio de trabajo de la función y no son vistas desde otros espacios de trabajo. Para que la función tenga acceso a variables que no han sido pasadas como argumentos es necesario declarar dichas variables como variables globales, tanto en el programa principal como en las distintas funciones que deben acceder a su valor. Es
frecuente utilizar el convenio de usar para las variables globales nombres largos (más de 5 letras) y con mayúsculas.
En cualquier función existen dos variables definidas de modo automático, llamadas nargin y nargout, que representan respectivamente el número de argumentos y el número de valores de retorno con los que la función ha sido llamada. Dentro de la función, estas variables pueden ser utilizadas como el programador desee.
Sentencia Return
Normalmente las funciones devuelven el control después de que se ejecute la última de sus sentencias. La sentencia return, incluida dentro del código de una función, hace que se devuelva inmediatamente el control al programa que realizó la llamada.
Funciones con número variable de argumentos
Disponemos de una forma de pasar a una función un número variable de argumentos por medio de la variable varargin, que es un vector de celdas que contiene tantos elementos como sean necesarios para poder recoger en dichos elementos todos los argumentos que se hayan pasado en la llamada. No es necesario que varargin sea el único argumento, pero sí debe ser el último de los que haya, pues recoge todos los argumentos a partir de una determinada posición. Recuérdese que a los elementos de un vector de celdas se accede utilizando llaves {}, en lugar de paréntesis ().
De forma análoga, una función puede tener un número indeterminado de valores de retorno utilizando varargout, que es también un vector de celdas que agrupa los últimos valores de retorno de la función. Puede haber otros valores de retorno, pero varargoutdebe ser el último. El vector de celdasvarargoutse debe crear dentro de la función y hay que dar valor a sus elementos antes de salir de la función. Recuérdese también que las variables narginy nargout indican el número de argumentos y de valores de retorno con que ha sido llamada la función.
Help para las funciones de usuario
También las funciones creadas por el usuario pueden tener su help, análogo al que tienen las propias funciones de MATLAB. Esto se consigue de la siguiente forma: las primeras líneas de comentarios de cada fichero de función son muy importantes, pues permiten construir un help sobre esa función. Cuando se teclee en la ventana de comandos helps y la función el programa responderá escribiendo las primeras líneas del fichero que comienzan por el carácter (%), es decir, que son comentarios.