CAPII. PROGRAMACIÓN EN MATLAB BIOTRONIK-2011 CAPII. PROGRAMACIÓN EN MATLAB II.1. PROGRAMACIÓN Matlab, es un lenguaje de alto nivel que incluye estructuras de datos basadas en matrices, sus propios tipos de datos internos, un extenso catalogo de instrucciones, un medio en el que podemos desarrollar nuestras propias funciones y código, la habilidad de importar y exportar muchos tipos de archivos, interfaz con periféricos, entre otras capacidades. Esta sección presenta alguna de las características y técnicas de programación en Matlab. II.2. Control condicional – if, else, switch. El comando if evalúa una condición lógica y ejecuta un grupo de sentencias cuando la expresión en verdadera. Los comandos opcionales else y elseif permiten la ejecución de grupos de sentencias alternativos. El comando end, que corresponde a if, termina el último grupo de instrucciones. Los grupos de instrucciones son perfilados por estas cuatro instrucciones, no se requiere el uso de paréntesis. Ejemplo II.2.1 Asignamos algun escalar a A y B, luego aplicamos el algoritmo de comparación >>A = 13; B = 14; if A > B 'Mayor' elseif A < B 'Menor' elseif A == B 'Igual' else error('Situacion Inesperada') end ans = Menor Es importante entender como trabajan las funciones lógicas con las matrices, cuando queremos verificar la igualdad entre dos matrices podríamos utilizar if A == B, ..., si A y B son escalares el resultado es el esperado, pero si se tratan de matrices, el resultado será una matriz de 0´s y 1´s, que nos indican que elementos son iguales. Ejemplo II.2.2 A = magic(4); ans = 0 1 1 1 1 1 1 1 B = A; 1 1 1 1 B(1,1) = 0; A == B 1 1 1 1 La manera apropiada de verificar la igualdad entre dos variables es usar la sentencia if isequal(A, B), ..., que nos devolverá un escalar siempre. El comando switch ejecuta grupos de instrucciones dependiendo del valor de alguna variable o expresión. Las funciones case y otherwise limitan estos grupos, Franco M. Rosa Alagón 1 narfz@hotmail.com CAPII. PROGRAMACIÓN EN MATLAB BIOTRONIK-2011 solo el primer caso de correspondencia es ejecutado, siempre debe haber un end para corresponder la función switch. Ejemplo II.2.3 Definimos la variable A, y permitimos que le programa “lea” el numeral >> A = 1; switch A case 0 'Cero' case 1 'Uno' case 2 'Dos' otherwise error('Mejore el programa') end II.3. Control de bucle – for, while, continue, break. El bucle for repite un grupo de instrucciones durante un predeterminado número de veces. Un bucle for siempre va acompañado de su correspondiente end. Ejemplo II.3.1 >> for n = 1:10 r(n) = factorial(n); end r Es recomendable marcar los bucles para mejorar la legibilidad, especialmente cuando se encuentran bucles anidados en otros. Ejemplo II.3.1 >>m = 2; n = 5; for i = 1:m for j = 1:n H(i,j) = 1/(i+j); end end El bucle while repite instrucciones indefinidamente bajo el control de una función lógica. Un end correspondiente a esta función delinea sus limites. Ejemplo II.3.2 Este ejemplo suma todos los números enteros desde 1 hasta el asignado en la variable a, y la devuelve en la variable Suma. >>a = 5; t = 0; Suma = 0; while t<=a Suma = t + Suma; t = t + 1; end; Suma La instrucción continue pasa el control a la iteración siguiente del bucle for o while al que pertenece, ignorando las sentencias pendientes en el cuerpo del bucle. Franco M. Rosa Alagón 2 narfz@hotmail.com CAPII. PROGRAMACIÓN EN MATLAB BIOTRONIK-2011 Ejemplo II.3.3 Este ejemplo cuenta el número de letras que forman una oración dejando de contar los espacios en blanco, la cuenta final se almacena en la variable Cuenta. >> Oracion = 'Cuantas letras hay aqui'; Cuenta=0; c = length(Oracion); for t=1:c if Oracion(t)==' ' continue; end Cuenta=Cuenta+1; end La instrucción break permite salir de un bucle sin que haya terminado, en bucles anidados, la función break sale solo del bucle más interno. Ejemplo II.3.4 Este ejemplo cuenta el número de letras que forman la primera palabra de una oración, luego, se almacena en la variable Cuenta. >> Oracion = 'Cuantas letras hay en Cuantas'; Cuenta=0; c = length(Oracion); for t=1:c if Oracion(t)==' ' break; end Cuenta=Cuenta+1; end II.4. Scripts y Funciones. Matlab es un potente lenguaje de programación, así como un medio computacional interactivo. Los archivos que contienen código en leguaje Matlab son llamados archivos-M o M-files, estos se crean utilizando un editor de texto, luego las usas como si se trataran de cualquier función de Matlab. Hay dos tipos de M-files Scripts, son aquellas que no aceptan argumentos de entrada y tampoco devuelven argumentos de salida, estos operan datos del workspace. Funciones, aceptan argumentos de entrada y devuelven argumentos de salida, las variables internas son de uso local. II.4.1. Scripts. Cuando invocamos un script, Matlab solo ejecuta los comandos encontrados en el archivo. Los scripts operan los datos ubicados en el espacio de trabajo, o pueden crear nuevos datos sobre los cuales operar, aunque no generan argumentos de salida, los resultados de las operaciones realizadas se mantienen en el espacio de trabajo. Ejemplo II.5.1 Cree un archivo llamado miScript.m que contenga las siguientes instrucciones % Graficar estadisticas de Clase A = 15; D = 6; R = 2; NP = 1; x = [A D R NP]; explode = [1 0 0 0]; pie(x,explode) colormap jet legend('Aprobados','Desaprobados','Reprobados','NP'); Franco M. Rosa Alagón 3 narfz@hotmail.com CAPII. PROGRAMACIÓN EN MATLAB BIOTRONIK-2011 Figura 1. Resultado del miScript.m, las variables creadas figuran en el workspace II.4.1 Funciones. Las funciones son M-files que soportan variables de entrada y salida, los nombres de las funciones y los M-files asociados deben ser los mismos. Las funciones operan las variables en su propio espacio de trabajo, distinto al que se accede por el prompt. Ejemplo II.6.1 Cree un archivo llamado miFuncion.m que contenga las siguientes instrucciones function Ap = miFuncion(A,D,R,NP) % Este programa calcula Ap, el porcentaje de aprobados en clase; luego grafica % las estadisticas, tiene como entrada el número de aprobados, desaprobados % y reprobados respectivamente. x = [A D R NP]; explode = [1 0 0 0]; pie(x,explode) colormap jet legend('Aprobados','Desaprobados','Reprobados','NP'); Ap = 100*A/(A+D+R+NP); Luego, tipee: >>miFuncion(15,6,2,1) ans = 62.5000 Matlab retornará el mismo grafico obtenido con el script, además, el porcentaje de aprobados. Se pudo observar en este ejemplo que una función puede mejorar la acción de un script, pues permite gran versatilidad y velocidad al momento de ejecutar las instrucciones asociadas. El primer comando de este M-file es function. Lo que permite dar nombre a la función y orden de argumentos, En este caso hay cuatro argumentos de entrada y uno de salida, las siguientes líneas de comentario proveen información de la función y es lo que se visualizara si se escribe help miFuncion. Franco M. Rosa Alagón 4 narfz@hotmail.com