Curso de Matlab - 2 Temario 1. Introduccin a Matlab. 2. Estructuras bsicas de datos. 3. Programacin en Matlab. 4. Estructuras avanzadas de datos. 5. Optimizacin de cdigo. 6. Representaciones grficas. 7. Desarrollo de aplicaciones con Matlab. 29/nov 13/dic 20/dic Curso de Matlab - 3 Temario (1) 1. Introduccin a Matlab. Versiones de Matlab, Mejoras de la versin 7 Entorno de desarrollo, Ayudas y documentacin, Toolboxes. 2. Estructuras bsicas de datos. 3. Programacin en Matlab. 4. Estructuras avanzadas de datos. 5. Optimizacin de cdigo. 6. Representaciones grficas. 7. Desarrollo de aplicaciones con Matlab. Curso de Matlab - 4 Introduccin a Matlab Qu es Matlab? Matlab = Matrix Laboratory. Programa interactivo para realizar clculos numricos y visualizaciones en el ordenador. Programa comercial de The Mathworks Inc (Natick, MA). ht t p: / / www. mat hwor ks. com Creado en California por J ack Little and Cleve Moler en 1984, para realizar clculo matricial en ordenadores sin necesidad de conocimientos de programacin. Curso de Matlab - 5 Introduccin a Matlab Ent or no i nt er ac t i vo Lenguaj e de pr ogr amac i n (c on i nt er f ac es ex t er nos For t r an, C...) Ent or no par a desar r ol l o de apl i c ac i ones + + Curso de Matlab - 6 Versiones de Matlab Plataformas donde corre Matlab Sistema Operativo Unix: Linux, solaris, HP-UX MacOS MS-Windows Arquitectura RISC: Sparc, HP-PA PowerMac (G4, G5) Intel Pentium(III, IV, Xeon, M), AMD (Athlon, Opteron) Curso de Matlab - 7 Versiones de Matlab Matlab 5 Grficos de calidad (2D, 3D) PC: Corre bajo windows utilizando toda la memoria disponible Matlab 6 Entorno de desarrollo con interfaz J ava. Matrices 3D, estructuras, cell arrays Matlab 7 Mejoras en el interfaz y mejora de Simulink Matlab compiler admite objetos Clculo con enteros Curso de Matlab - 8 Algunas mejoras de Matlab 7 Se puede poner todas las ventanas dentro del entorno de desarrollo Figuras command window Workspace command history Curso de Matlab - 9 Algunas mejoras de Matlab 7 Acceso a comandos anteriores Teclas: PE TAB Curso de Matlab - 10 Algunas mejoras de Matlab 7 Dibujar grficos directamentes desde el editor de matrices Tamao mximo de la matriz: 524288 elementos Curso de Matlab - 11 Algunas mejoras de Matlab 7 Breakpoints con expresiones condicionales Curso de Matlab - 12 Algunas mejoras de Matlab 7 Ejecucin del cdigo por secciones (cellenable cell mode) Ejecucin seccin por seccin Permite repetir la ejecucin de una seccin cambiando un parmetro de la misma. Parmetro que estamos retocando Resultado de la ejecucin de la seccin Curso de Matlab - 13 Otras mejoras de Matlab 7 Ejecucin/Debugger por secciones de cdigo (Cell Mode) Generacin automtica de documentacin Optimizacin de cdigo con M-Lint y profiler (ver cap6) Mejoras en la generacin automtica de cdigo desde Simulink Interactive plot tool (ver cap 6) Funcin t ext scan para leer archivos Clculo con variables enteras. Matrices ms pequeas, cdigo ms rpido. imgenes Acentos y caracteres internacionales en el editor. Curso de Matlab - 14 Entorno de desarrollo Arraque de Matlab Windows Inicio/Programas/Matlab 7.0.1/Matlab 7.0.1 icono de Matlab en el escritorio comando: mat l ab comando: mat l ab r pr ogr ama Unix comando: mat l ab En IIT comandos: mat l ab, mat l ab5, mat l ab61, mat l ab65, mat l ab7 Ejemplo til: mat l ab65 - nodi spl ay (Modo Consola sin grficos) Curso de Matlab - 15 Entorno de desarrollo Ventana de comandos Curso de Matlab - 16 Comandos bsicos ver muestra la versin, el cdigo de licencia y las toolboxes disponibles Licencia 46431: profesores (para investigacin y proyectos) Licencia 205966: aulas (slo para docencia) whos lista todas las variables disponibles save ar chi vo guarda todas las variables save ar chi vo a b guarda las variables a y b l oad ar chi vo carga variables qui t salir Curso de Matlab - 17 Editor Matlab incorpora un editor que interacciona con el resto del entorno. Ejecucin por secciones en cell mode Controles del debugger sintaxis Curso de Matlab - 18 Ayudas y documentacin Ayuda en modo texto mediante comandos hel p f unci n muestra la ayuda de una funcin hel p vale tanto para las funciones del sistema como para desarrollos propios Ayuda de tipo grfico Start / Help Hypertext Help Window Curso de Matlab - 19 Ejemplo de consulta Secciones de la ayuda Syntax Description Arguments Examples Algorithm Limitations See Also Refences d e v e l o p e d
b y
s c h o l a r s Curso de Matlab - 20 Ayuda on-line Pgina oficial de soporte ht t p: / / www. mat hwor ks. com/ suppor t / Documentacin Soluciones a problemas ordenadas por categoras Ejemplos de cdigo Noticias Actualizaciones Matlab Central Newsgroups File Exchange Link Exchange Soporte tcnico personal por correo electrnico Utilizar un cdigo de licencia vlido Describir la plataforma Acotar el problema Curso de Matlab - 21 Toolboxes Libreras especializadas en materias concretas. Incluyen: Manuales tipo tutorial (User's Guide) [HTML, PDF] Referencia de las funciones (Reference Guide) [HTML, PDF] Programas de demo Aplicaciones completas listas para utilizar Curso de Matlab - 22 Ejemplos de Toolboxes >> ver - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MATLAB Ver si on 6. 5. 0. 180913a ( R13) MATLAB Li cense Number : 46431 Oper at i ng Syst em: SunOS 5. 8 Gener i c_108528- 29 sun4u J ava VM Ver si on: J ava 1. 3. 1_02 wi t h Sun Mi cr osyst ems I nc. J ava Hot Spot ( TM) Ser ver VM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MATLAB Ver si on 6. 5 ( R13) Si mul i nk Ver si on 5. 0 ( R13) Cont r ol Syst emTool box Ver si on 5. 2 ( R13) Fuzzy Logi c Tool box Ver si on 2. 1. 2 ( R13) I mage Pr ocessi ng Tool box Ver si on 3. 2 ( R13) MATLAB Compi l er Ver si on 3. 0 ( R13) MATLAB Web Ser ver Ver si on 1. 2. 2 ( R13) Mu- Anal ysi s and Synt hesi s Tool box Ver si on 3. 0. 7 ( R13) Neur al Net wor k Tool box Ver si on 4. 0. 2 ( R13) Nonl i near Cont r ol Desi gn Bl ockset Ver si on 1. 1. 6 ( R13) Opt i mi zat i on Tool box Ver si on 2. 2 ( R13) Real - Ti me Wor kshop Ver si on 5. 0 ( R13) Robust Cont r ol Tool box Ver si on 2. 0. 9 ( R13) SB2SL ( conver t s Syst emBui l d t o Si mu. . . Ver si on 2. 5 ( R13) Si gnal Pr ocessi ng Tool box Ver si on 6. 0 ( R13) Syst emI dent i f i cat i on Tool box Ver si on 5. 0. 2 ( R13) >> dat e ans = 27- Nov- 2004 Curso de Matlab - 23 Otras Toolboxes Application Areas Technical Computing Mathematical computation, analysis, visualization, and algorithm development Control Design Model-Based Design for control systems, including simulation, rapid prototyping, and code generation for embedded systems Signal Processing and Communications Model-Based Design for signal processing and communication systems, including simulation, code generation, and verification Image Processing Image acquisition, analysis, visualization, and algorithm development Test & Measurement Hardware connectivity and data analysis for test and measurement applications Financial Modeling and Analysis Financial modeling, analysis, and application deployment ht t p: / / www. mat hwor ks. com/ pr oduct s/ Curso de Matlab - 24 Temario (2) 1. Introduccin a Matlab. 2. Estructuras bsicas de datos. Variables Vectores y matrices Ejemplos de operaciones Tipos de datos 3. Programacin en Matlab. 4. Estructuras avanzadas de datos. 5. Optimizacin de cdigo. 6. Representaciones grficas. 7. Desarrollo de aplicaciones con Matlab. Curso de Matlab - 25 Variables Matlab no requiere declarar ni dimensionar variables Las variables se auto-declaran al inicializarlas La memoria se reasigna dinmicamente >> x=5; >> y=20; >> z=x*y z = 100 >> dat os=l oad( ' dat os. t xt ' ) ; >> cadena=' hol a' ; poniendo ';' se realiza la asignacin pero no se muestra el resultado sin poner ';' se puestra el resultado final Curso de Matlab - 26 Vectores y Matrices Matlab considera que todas las variables son matrices (vectores y escalares son casos particulares). >> x=[ 1, 2, 3, 5, 7, 11, 13] ; [ 1 2 3 5 7 11 13 ] >> x=[ 1 2 3 5 7 11 13] ; [ 1 2 3 5 7 11 13 ] >> y=1: 5; [ 1 2 3 4 5 ] >> par es=2: 2: 10; [ 2 4 6 8 10 ] >> i mp_down=9: - 2: 1; [ 9 7 5 3 1 ] >>a( 5) =7; [ 0 0 0 0 7 ] Ejemplos de inicializacin de vectores fila Curso de Matlab - 27 Vectores y Matrices >> x=[ 1; 2; 3; 5; 7; 11; 13] x = 1 2 3 5 7 11 13 >> x=[ 1, 2, 3, 5, 7, 11, 13] ' ; Ejemplos de inicializacin de vectores columna traspuesta Vector fila Curso de Matlab - 28 Vectores y Matrices >> M = [ 1 2 3; 4 5 6; 7 8 9] ; >> cer os=zer os( 2, 5) ; >> unos=ones( 3, 4) ; >> M2=[ 20, 21, 22; M] ; >> M2=[ [ 20, 21, 22] ; M] ; >> M3=[ [ 15; 16; 17] , M] ; >> al eat or i o=r and( 20, 30) ; >> nor mal =r andn( 20, 30) ; Ejemplos de inicializacin de Matrices 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 20 21 22 1 2 3 4 5 6 7 8 9 15 1 2 3 16 4 5 6 17 7 8 9 Curso de Matlab - 29 Acceso a los elementos de una matriz Matlab utiliza los parntisis para acceder a elementos de la matriz Los subndices empiezan en 1, por lo tanto el primer elemento es a( 1, 1) Ejemplo: a( 3, 5) =56. 8; 0. 1737 0. 3421 0. 6391 0. 1632 0. 2313 0. 7858 0. 7742 0. 0934 0. 2763 0. 8453 0. 3656 0. 1478 0. 9288 0. 1310 0. 7264 0. 7769 0. 1482 0. 4851 0. 0232 0. 6947 0. 1737 0. 3421 0. 6391 0. 1632 0. 2313 0. 7858 0. 7742 0. 0934 0. 2763 0. 8453 0. 3656 0. 1478 0. 9288 0. 1310 56. 8000 0. 7769 0. 1482 0. 4851 0. 0232 0. 6947 Curso de Matlab - 30 Acceso a los elementos de una matriz Se pueden utilizar vectores para definir ndices Ejemplo 1: a( 2: 3, 1: 4) =zer os( 2, 4) ; o bien: a( 2: 3, 1: 4) =0; 0. 1737 0. 3421 0. 6391 0. 1632 0. 2313 0. 7858 0. 7742 0. 0934 0. 2763 0. 8453 0. 3656 0. 1478 0. 9288 0. 1310 56. 8000 0. 7769 0. 1482 0. 4851 0. 0232 0. 6947 0. 1737 0. 3421 0. 6391 0. 1632 0. 2313 0 0 0 0 0. 8453 0 0 0 0 56. 8000 0. 7769 0. 1482 0. 4851 0. 0232 0. 6947 Curso de Matlab - 31 Acceso a los elementos de una matriz Se pueden utilizar vectores para definir ndices Ejemplo 2: a( [ 2, 3] , [ 2, 4] ) =ones( 2, 2) ; o bien: a( [ 2, 3] , [ 2, 4] ) =0; 0. 1737 0. 3421 0. 6391 0. 1632 0. 2313 0 0 0 0 0. 8453 0 0 0 0 56. 8000 0. 7769 0. 1482 0. 4851 0. 0232 0. 6947 0. 1737 0. 3421 0. 6391 0. 1632 0. 2313 0 1. 0000 0 1. 0000 0. 8453 0 1. 0000 0 1. 0000 56. 8000 0. 7769 0. 1482 0. 4851 0. 0232 0. 6947 Curso de Matlab - 32 Acceso a los elementos de una matriz El operador ' : ' se utiliza para indicar "todos los elementos" 0. 1737 0. 3421 0. 6391 0. 1632 0. 2313 0. 7858 0. 7742 0. 0934 0. 2763 0. 8453 0. 3656 0. 1478 0. 9288 0. 1310 56. 8000 0. 7769 0. 1482 0. 4851 0. 0232 0. 6947 a( 3, : ) si ze( a( 3, : ) ) [ 1 5] a( : , 2) si ze( a( : , 2) ) [ 4 1] a( : ) t odos l os el ement os si ze( a( : ) ) [ 20 1] todo en un vector columna Curso de Matlab - 33 Acceso a los elementos de una matriz El operador ' end' significa "ltimo elemento" Ejemplo: Vector de diferencias >> t =1: 0. 1: 2; >> y=si n( 2*pi *t ) ; >> di f er enci as=[ NaN; y( 2: end) - y( 1: end- 1) ] ; 1. 00 1. 10 1. 20 1. 30 1. 40 1. 50 1. 60 1. 70 1. 80 1. 90 2. 00 - 0. 00 0. 59 0. 95 0. 95 0. 59 0. 00 - 0. 59 - 0. 95 - 0. 95 - 0. 59 - 0. 00 NaN 0. 59 0. 36 0. 00 - 0. 36 - 0. 59 - 0. 59 - 0. 36 - 0. 00 0. 36 0. 59 t = y = di f er enci as = Curso de Matlab - 34 Operaciones bsicas Operaciones aritmticas: + - * / ^ Matlab trabaja con matrices, a diferencia de otros lenguajes que slo trabajan con escalares Operaciones elemento a elemento: + - .* ./ .^ >> a=r and( 2, 5) ; >> b=r and( 5, 2) ; >> c=a*b; %mat r i z de 2x2 >> d=b*a; %mat r i z de 5x5 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 mn = magi c( 4) ; 345 257 281 273 257 313 305 281 281 305 313 257 273 281 257 345 256 4 9 169 25 121 100 64 81 49 36 144 16 196 225 1 mn*mn mn^2 mn. *mn mn. ^2 Curso de Matlab - 35 Otras operaciones matriciales Suma: sum >> b=sum( A) ; %como a es mat r i z, se suma por col umnas y b es un vect or f i l a >> c=sum( b) ; %como b es vect or , se suman t odos sus el ement os >> c=sum( sum( a) ) ; %suma t odos l os el ement os de l a mat r i z a >> c=sum( a( : ) ) ; %suma t odos l os el ement os de l a mat r i z a Media y desviacin: m=mean( A) ; si gma=st d( A) ; Elementos de la diagonal: v=di ag( A) ; Left division: x=A\ B; La solucin por mnimos cuadrados de A x =b se obtiene mediante x =A \ b; Determinante: c=det ( A) ; Inversa: B=i nv( A) ; Autovalores: v=ei n( A) ; Valor absoluto mdulo de complejos: B=abs( A) ; Curso de Matlab - 36 Otras operaciones Trig: si n, cos, t an, asi n, acos, at an, si nh, cosh, t anh, asi nh, acosh, at anh Rounding: f l oor , cei l , r ound, f i x Modular: r em, mod Exponential: exp, l og, l og2, l og10, sqr t Primes: f act or , pr i mes Curso de Matlab - 37 Tipos de datos Matlab opera normalmente en formato double segn el estndar IEEE >> a=123/ 0 War ni ng: Di vi de by zer o. a = I nf >> b=0/ 0 War ni ng: Di vi de by zer o. b = NaN >> I nf - I nf ans = NaN >> c=15+sqr t ( - 1) c = 15. 0000 + 1. 0000i Maneja correctamente los valores Inf (infinito) y NaN (not-a-number) Complejos automticos Curso de Matlab - 38 Tipos de datos Matrices reales double single Matrices enteras int8, uint8 int16, uint16 int32, uint32 int64, uint64 Otros char logical cell struct r eal mi n2. 2251e- 308, r eal max1. 7977e+308, eps2. 2204e- 016 r eal mi n1. 1755e- 038, r eal max3. 4028e+038, eps1. 1921e- 007 Curso de Matlab - 39 Tipos de datos: Matrices dispersas Las matrices dispersas ahorran memoria y los calculos son ms eficientes Todas las operaciones de matrices funcionan con matrices dispersas Si se vuelve ineficiente, se convierte automticamente a matriz normal s = spar se( 1000, 1000) ; s( 2, 11) = 2; s( 992, 875) = 3; s( 875, 992) = 4. 7; s=s+3; %s dej a de ser di sper sa Curso de Matlab - 40 Temario (3) 1. Introduccin a Matlab. 2. Estructuras bsicas de datos. 3. Programacin en Matlab. Scripts Funciones Expresiones lgicas Control de flujo 4. Estructuras avanzadas de datos. 5. Optimizacin de cdigo. 6. Representaciones grficas. 7. Desarrollo de aplicaciones con Matlab. Curso de Matlab - 41 Scripts Un script es una secuencia de instrucciones de Matlab guardada en un archivo con extensin . m %Scr i pt de ej empl o %%I ni ci o a=magi c( 4) ; f pr i nt f ( ' I ni ci o cl cul os\ n' ) ; %%Tr aza t r aza=sum( di ag( a) ) ; %%Resul t ado f pr i nt f ( ' La t r aza val e: %f \ n' , t r aza) ej em_scr i pt . m Se ejecuta escribiendo su nombre: >> ej em_scr i pt Curso de Matlab - 42 Funciones (llamada) Las funciones puede recibir varios valores y devolver varios resultados [ m, d] =med_des( x) ; Puede haber argumentos opcionales mi t =i mr ead( ' camer aman. t i f ' , ' TI FF' ) ; mi t =i mr ead( ' camer aman. t i f ' ) ; No es necesario asignar todos los valores retornados [ mi t , map] =i mr ead( ' i mageman. gi f ' ) ; mi t =i mr ead( ' i mageman. gi f ' ) ; Curso de Matlab - 43 Funciones (definicin) Las funciones se escriben en archivos . mque deben encontrarse en el directorio actual (o en un directorio definido en el pat h) f unct i on [ med, des] =med_des( x) %Funci ona par a cal cul ar l a medi a y l a desvi aci n a l a vez % [ med, des] =med_des( x) % %Raf ael Pal aci os ( nov/ 2004) med=mean( x( : ) ) ; des=st d( x( : ) ) ; Informacin que aparece al hacer hel p med_des Med_des. m Curso de Matlab - 44 Funciones La variable nar gi n (local de la funcin) es el nmero de argumentos recibidos. La variable nar gout (local de la funcin) es el nmero de argumentos que se recogern en la llamada. Puede ahorrarnos unos clculos. Todos los argumentos llegan por valor, no es posible hacer paso por referencia. Los scripts comparten las variables del workspace, mientras que las funciones utilizan variables en local Curso de Matlab - 45 Expresiones lgicas Operadores relacionales: ~= == > < >= <= Operadores lgicos: && Short-circuit AND | | Short-circuit OR & AND | OR Hay una funcin xor , pero no es un operador Curso de Matlab - 46 Control de Flujo: if bloque i f i f r em( n, 2) ~= 0 M = odd_magi c( n) el sei f r em( n, 4) ~= 0 M = si ngl e_even_magi c( n) el se M = doubl e_even_magi c( n) end i f a > b t mp=a; a=b; b=t mp; end A diferencia de C, en Matlab no es necesario utilizar parntesis en la expresin lgica Curso de Matlab - 47 Control de Flujo: for bucle f or a=[ ] ; f or n = [ 1 2 3 5 7 11 ] a = [ a, i spr i me( n) ] ; end f or n = 3: 32 r ( n) = r ank( magi c( n) ) ; end Curso de Matlab - 48 Control de Flujo: while bucle whi l e whi l e ~i spr i me( x) x = x + 1; end Curso de Matlab - 49 Control de Flujo: switch swi t ch- case swi t ch ( r em( n, 4) ==0) +( r em( n, 2) ==0) case 0 M = odd_magi c( n) case 1 M = si ngl e_even_magi c( n) case 2 M = doubl e_even_magi c( n) ot her wi se er r or ( ' Thi s i s i mpossi bl e' ) end A diferencia de C, en Matlab no hace falta utilizar br eak. Curso de Matlab - 50 Control de Flujo: try t r y- cat ch t r y st at ement . . . st at ement cat ch st at ement . . . st at ement end Las instrucciones comprendidas entre cat ch y end slo se ejecutan si se produce un error en las primeras. Utilizar l ast er r para ver el ltimo error. Curso de Matlab - 51 Temario (4) 1. Introduccin a Matlab. 2. Estructuras bsicas de datos. 3. Programacin en Matlab. 4. Estructuras avanzadas de datos. Todos los tipos de datos Cadenas de caracteres Estructuras y Cells arrays Matrices de N dimensiones (arrays) Date and time 5. Optimizacin de cdigo. 6. Representaciones grficas. 7. Desarrollo de aplicaciones con Matlab. Curso de Matlab - 52 Todos los tipos de datos Matlab tiene en total 15 tipos de datos que se utilizan para formar matrices o arrays Adicionalmente existen tipos de datos definibles por el usuario para programacin orientada a objetos: user classes, y Java classes Curso de Matlab - 53 Identificacin del tipo de dato Descripcin del tipo de dato Identificacin lgica i si nt eger ( x) i sf l oat ( x) i schar ( x) i sl ogi cal ( x) i scel l ( x) i sst r uct ( f echa) i sempt y( [ ] ) i si nf ( I nf ) i snan( NaN) >> t i po=cl ass( x) t i po = doubl e >> i nt 8, ui nt 8 i nt 16, ui nt 16 i nt 32, ui nt 32 i nt 64, ui nt 64 si ngl e doubl e Curso de Matlab - 54 Conversin de tipos numricos La conversin se realiza utilizando el nombre del tipo como si fuese una funcin >> a=r andn( 5, 7) a = - 0. 4326 1. 1909 - 0. 1867 0. 1139 0. 2944 0. 8580 - 0. 3999 - 1. 6656 1. 1892 0. 7258 1. 0668 - 1. 3362 1. 2540 0. 6900 0. 1253 - 0. 0376 - 0. 5883 0. 0593 0. 7143 - 1. 5937 0. 8156 0. 2877 0. 3273 2. 1832 - 0. 0956 1. 6236 - 1. 4410 0. 7119 - 1. 1465 0. 1746 - 0. 1364 - 0. 8323 - 0. 6918 0. 5711 1. 2902 >> b=i nt 8( a) b = 0 1 0 0 0 1 0 - 2 1 1 1 - 1 1 1 0 0 - 1 0 1 - 2 1 0 0 2 0 2 - 1 1 - 1 0 0 - 1 - 1 1 1 Matlab aplica redondeo en la conversin a enteros Curso de Matlab - 55 Conversin de tipos numricos Funciones de redondeo r ound: redondea al entero ms prximo f l oor : redondea hacia -Inf cei l : redondea hacia +Inf f i x: redondea hacia cero >> cl ass( r ound( 3. 5) ) ans = doubl e >> b( 4. 7) ??? Subscr i pt i ndi ces must ei t her be r eal posi t i ve i nt eger s or l ogi cal s. >> b( r ound( 4. 7) ) ans = - 1 No cambia el tipo de dato Es til para calcular ndices Curso de Matlab - 56 Cadenas de caracteres En Matlab las cadenas de caracteres son vectores de tipo char (igual que en C) >> st r =' Hel l o Wor l d' ; >> whos Name Si ze Byt es Cl ass st r 1x11 22 char ar r ay Gr and t ot al i s 11 el ement s usi ng 22 byt es >> st r ( 7) ans = W >> st r =[ ' H' , ' o' , ' l ' , ' a' ] ; >> nombr es( 1, : ) =' Raf ael ' ; >> nombr es( 2, : ) =' Ana ' ; Para utilizar variables que contengan ms de una cadena de caracteres es necesario que todas las cadenas tengan la misma longitud. Esto se facilita con la funcin de conversin char : >> nombr es=char ( ' Raf ael ' , ' Ana' ) ; Utilizando cell arrays se puede almacenar cadenas de distintas logitudes Curso de Matlab - 57 Cadenas de caracteres Comparacin de cadenas de caracteres El operador == trata las cadenas como vectores st r cmp: compara cadenas y retorna 1 para cierto y 0 para falso. (OJ O: distinto que en C). Otras funciones de comparacin: st r ncmp, st r cmpi , st r ncmpi A = ' f at e' ; B = ' cake' ; A == B ans = 0 1 0 1 Curso de Matlab - 58 Cadenas de caracteres Otras funciones de cadenas de caracteres st r r ep: tpico find-and-replace cadena=st r r ep( cadena, ' busca' , ' sust i t uye' ) ; f i ndst r : busca una cadena dentro de otra posi ci on = f i ndst r ( ' busca' , cadena) ; st r cat : concatena 2 o ms cadenas t ext o = st r cat ( cadena1, cadena2, cadena3) ; spr i nt f : construye una cadena a partir de variables. Equivale a spr i nt f de C cadena=spr i nt f ( ' Tengo %6. 2f EUR' , mi _di ner o) ; Curso de Matlab - 59 Estructuras y cell arrays Las estructuras permite almacenar valores de diferente naturaleza bajo un nombre de variable No requiere definicin previa se accede a los campos igual que en C Vectores de estructuras se obtienen dinmicamente aadiendo elementos >> punt o. x=123; >> punt o. y=34; >> punt o. col or =' r ed' ; >> punt o punt o = x: 123 y: 34 col or : ' r ed' >> punt o( 2) . x=435; Curso de Matlab - 60 Estructuras y cell arrays Se puede acceder a un campo concreto poniendo el nombre del campo en una cadena de caracteres: >> punt o. x=123; >> punt o. y=34; >> punt o. col or =' r ed' ; >> punt o punt o = x: 123 y: 34 col or : ' r ed' >> campo=' col or ' ; >> punt o. ( campo) ans = r ed Curso de Matlab - 61 Estructuras y cell arrays Un cell array permite construir vectores en las que cada elemento es de un tipo diferente: Se utilizan llaves {}en lugar de corchetes [ ] o parntesis ( ) La diferencia con las estructuras es que se accede a los valores utilizando un ndice en lugar del nombre del campo Trabajar con estructuras es muy ineficiente >> c={12, ' Red' , magi c( 4) }; >> c c = [ 12] ' Red' [ 4x4 doubl e] >> b{1}=12; >> b{2}=' Red' ; >> b{3}=magi c( 4) ; >> b b = [ 12] ' Red' [ 4x4 doubl e] Curso de Matlab - 62 Estructuras y cell arrays Un cell array permite contruir matrices en las que cada fila es diferente: >> a{1, 1} = 12; >> a{1, 2} = ' Red' ; >> a{1, 3} = magi c( 4) ; >> a{2, 1}=ones( 3) ; >> a{2, 2}=43; >> a{2, 3}=' t ext o' ; >> a a = [ 12] ' Red' [ 4x4 doubl e] [ 3x3 doubl e] [ 43] ' t ext o' >> til para algo? Curso de Matlab - 63 Estructuras y cell arrays Utilizando ( ) accedo a un elemento, que es tipo cell Utilizando {}accedo al valor >> a a = [ 12] ' Red' [ 4x4 doubl e] [ 3x3 doubl e] [ 43] ' t ext o' >> cl ass( a) ans = cel l >> cl ass( a( 1, 1) ) ans = cel l >> cl ass( a{1, 1}) ans = doubl e Curso de Matlab - 64 Estructuras y cell arrays Ejemplo de acceso a base de datos (database toolbox) conn=dat abase( ' base_de_dat os_ODBC' , ' usuar i o' , ' passwor d' ) ; quer y=' SELECT t o_number ( PROD) , HORA, EST FROM TB_CENT WHERE CENTRAL=' ' ROBLA' ' ' ; cur s=exec( conn, quer y) ; cur s=f et ch( cur s) ; f or i =1: si ze( cur s. Dat a, 1) pr oducci ones( i ) =cur s. Dat a{i , 1}; hor as( i ) =cur s. Dat a{i , 2}; est ados( i ) =cur s. Dat a{i , 3}; end cl ose( cur s) ; cl ose( conn) ; Curso de Matlab - 65 Matrices de N dimensiones Las matrices de ms de 2 dimensiones se llaman Multidimensional Arrays Matlab soporta todas las operacones matemticas en matrices de N dimensiones Curso de Matlab - 66 Matrices de N dimensiones >> c=i mr ead( ' aut umn. t i f ' ) ; >> whos c Name Si ze Byt es Cl ass c 206x345x3 213210 ui nt 8 ar r ay Gr and t ot al i s 213210 el ement s usi ng 213210 byt es >> i mshow( c) >> max( c( : ) ) ans = 248 >> gr i s=( c( : , : , 1) +c( : , : , 2) +c( : , : , 3) ) / 3; >> i mshow( gr i s) todos los elementos Curso de Matlab - 67 Date and Time Matlab representa fechas y horas en tres formatos: cadena de caracteres valor numrico (nmero de das desde 1/ene/0000) vector numrico [ao, mes, da, hora, min, sec] Tiene en cuenta aos bisiestos No tiene en cuenta hora UTC/hora local ni cambios de hora invierno/verano date now clock Curso de Matlab - 68 Date and Time Funciones de conversin Ejemplo de manejo de fechas f unct i on f echa_cor r egi da=FechaCambi o( f echa_cal cul o, di as) % %Obt i ene una nueva est r uct ur a de f echa adel ant ando o r et r asando di as %f unct i on f echa_cor r egi da=FechaCambi o( f echa_cal cul o, di as) % f echa_cor r egi da y f echa_cal cul o son est r uct ur as con l os campos di a, mes, aNo. % %Ej empl o: f unct i on f echa_cor r egi da=FechaCambi o( f echa_cal cul o, - 1) ; %di a ant er i or % %Raf ael Pal aci os Nov/ 2004 % f echa_num=dat enum( f echa_cal cul o. aNo, f echa_cal cul o. mes, f echa_cal cul o. di a) ; f echa_num=f echa_num+di as; f echa_vec=dat evec( f echa_num) ; f echa_cor r egi da. aNo=f echa_vec( 1) ; f echa_cor r egi da. mes=f echa_vec( 2) ; f echa_cor r egi da. di a=f echa_vec( 3) ; tambin f pr i nt f Curso de Matlab - 69 Temario (5) 1. Introduccin a Matlab. 2. Estructuras bsicas de datos. 3. Programacin en Matlab. 4. Estructuras avanzadas de datos. 5. Optimizacin de cdigo. Medida de tiempos: tic, toc, cputime Anlisis del cdigo: profiler, M-Lint Orden de los bucles Predeclaracin de variables Find en lugar de for Variables globales Compilador 6. Representaciones grficas. 7. Desarrollo de aplicaciones con Matlab. Curso de Matlab - 70 Medida de tiempos Funciones bsicas para medir tiempos t i c y t oc miden el tiempo en segundos cput i me indica el tiempo de CPU en segundos >> t i c; i nv( i nv( i nv( r andn( 1000) ) ) ) ; t oc El apsed t i me i s 10. 015000 seconds. >> t =cput i me; i nv( i nv( i nv( r andn( 1000) ) ) ) ; e=cput i me- t e = 9. 5137 t i c f or k = 1: 100 - - pr ogr ama r pi do - - end t oc Curso de Matlab - 71 Anlisis del cdigo pr of i l er genera un informe del rendimiento de un programa >> pr of i l e on >> i nv( i nv( i nv( r andn( 1000) ) ) ) ; >> pr of i l e of f >> pr of i l e r epor t Modo comandos: >> pr of i l e vi ewer Modo grfico: Profiler nos indica qu funcin merece la pena optimizar. Curso de Matlab - 72 Anlisis del cdigo M- Li nt analiza el cdigo e identifica posibles problemas y posibles puntos de mejora de rendimiento. Curso de Matlab - 73 Optimizacin de bucles Al ser un lenguaje interpretado, los bucles son muy lentos >> t i c, f or t =1: 100, pr ueba, end, t oc El apsed t i me i s 3. 856000 seconds. >> t i c, f or t =1: 100, pr ueba2, end, t oc El apsed t i me i s 2. 554000 seconds. >> t i c, f or t =1: 100, suma=sum( z( : ) ) ; end, t oc El apsed t i me i s 1. 893000 seconds. %pr ueba suma=0; f or i =1: 1000 f or j =1: 1000 suma=suma+z(i,j); end end %pr ueba2 suma=0; f or i =1: 1000 f or j =1: 1000 suma=suma+z(j,i); end end Curso de Matlab - 74 Predeclaracin de variables La predeclaracin evita que Matlab reasigne memoria dinmicamente >> t i c, pr ueba, t oc El apsed t i me i s 54. 589000 seconds. >> t i c, f or t =1: 100, pr ueba2, end, t oc El apsed t i me i s 10. 846000 seconds. %pr ueba f or i =1: 1000 f or j =1: 1000 z2( j , i ) =z( j , i ) ; end end %pr ueba2 z2=ones( si ze( z) ) ; f or i =1: 1000 f or j =1: 1000 z2( j , i ) =z( j , i ) ; end end 500 veces ms rpido!!!! Nota: Estos tiempos no mejoran utilizando el compilador porque son retrasos del sistema operativo, no de Matlab. En Unix el cdigo malo es 50 veces ms lento, en lugar de 500 veces ms lento. Curso de Matlab - 75 Find en lugar de for En muchas ocasiones se puede utilizar f i nd en lugar de realizar un bucle f i nd devuelve un vector con los ndices de un vector que corresponden a valores "true" >> t i c, f or t =1: 100, pr ueba, end, t oc El apsed t i me i s 2. 293000 seconds. >> t i c, f or t =1: 100, l engt h( f i nd( c>200) ) ; end, t oc El apsed t i me i s 1. 062000 seconds. %pr ueba i magen num=0; f or i =1: si ze( c, 1) f or j =1: si ze( c, 2) f or k=1: si ze( c, 3) i f c( i , j , k) >200 num=num+1; end end end end Ejemplo: Busco los pixels con nivel mayor de 200 Nota: este ejemplo no es muy significativo Curso de Matlab - 76 Find en lugar de for >> c=i mr ead( ' aut umn. t i f ' ) ; >> t i c, f or t =1: 100, pr ueba, end, t oc El apsed t i me i s 2. 293000 seconds. >> c=i mr ead( ' aut umn. t i f ' ) ; >> t i c, f or t =1: 100, c( f i nd( c>200) ) =0; end, t oc El apsed t i me i s 0. 611000 seconds. %pr ueba i magen f or i =1: si ze( c, 1) f or j =1: si ze( c, 2) f or k=1: si ze( c, 3) i f c( i , j , k) >200 c( i , j , k) =0; end end end end Ejemplo2: Pongo a cero los pixels con nivel mayor de 200 c>200 genera una matriz 3D de ceros y unos f i nd( c>200) genera un vector con los ndices que valen 1 c( f i nd( c>200) ) equivale a decir c( [ 23, 267, . . . ] ) Curso de Matlab - 77 Find en lugar de for Otras funciones tiles al estilo de find son: al l : determina si todos los elementos son nonzero I f al l ( A>0. 5) any: determina si algn elemento es nonzero I f any( A>0. 5) r eshape: reorganiza los elementos de una matriz para adaptarse a otras dimensiones sor t : ordena elementos y obtiene una tabla de ndices de ordenacin f unct i on x=al eat ( r ango) %%f unct i on x=al eat ( r ango) % Gener a una l i st a de nmer os al eat or i os no r epet i dos de t amao r ango % z=r and( 1, r ango) ; [ s, x] =sor t ( z) ; Curso de Matlab - 78 Variables globales En las llamadas a funcin el paso de variables es por valor Hay muchas llamadas del tipo: mi _f echa=Di aSi gui ent e( mi _f echa) ; En general las funciones que transforman matrices muy grandes son ineficiente debido al uso de la memoria Nota: Aunque desde el punto de vista del programador las variables van por valor, Matlab es "listo" no siempre copia la variable en el stack. Matlab generalmente hace el paso por referencia y slo copia la variable si la funcin la modifica (para proteger los valores originales) Curso de Matlab - 79 Variables globales Utilizar variables globales no es muy estructurado, pero en caso de matrices grandes evita asignaciones de memoria gl obal GRAVI TY GRAVI TY = 32; y = f al l i ng( ( 0: . 1: 5) ' ) ; f unct i on h = f al l i ng( t ) gl obal GRAVI TY h = 1/ 2*GRAVI TY*t . ^2; Curso de Matlab - 80 Compilador Convierte cdigo Matlab a C y permite crear un ejecutable indepenciente El programa resultante no requiere licencia Ejecuta ms deprisa por estar compilado Compila funciones, no scripts mbui l d - set up Instalacin: La primera vez hay que seleccionar el compilador por defecto mcc mpr ueba. m Comando general para compilar Curso de Matlab - 81 Compilador El compilador permite crear los siguientes elementos: Aplicacin independiente: mcc mf i l e1. m Libreras de funciones: mcc l f i l e1. m COM object (component object model) Excel Add-in Curso de Matlab - 82 Compilador Para instalar una aplicacin en un ordenador que no tenga Matlab: Crear un CD en el ordenador de desarrollo con: pr ueba. exe pr ueba.ct f <mat l abr oot >\ t ool box\ compi l er \ depl oy\ wi n32\ MCRI nst al l er . exe En el ordenador de destino: Instalar MCRI nst al l er en C: \ MCR (por ejemplo) Asegurarse de que c: \ MCR\ r unt i me\ wi n32 est en el PATH Copiar pr ueba. exe y pr ueba. ct f al directorio de la aplicacin. Curso de Matlab - 83 Temario (6) 1. Introduccin a Matlab. 2. Estructuras bsicas de datos. 3. Programacin en Matlab. 4. Estructuras avanzadas de datos. 5. Optimizacin de cdigo. 6. Representaciones grficas. Tipos de grficos Crear grficos con plot y surf Retoque de grficos desde men Guardar grficos: hgsave, hgload, print Creacin de animaciones 7. Desarrollo de aplicaciones con Matlab. Curso de Matlab - 84 Crear grficos Matlab permite crear grficos de varios tipos, que se utilizan para: visualizar el contenido de las variables crear imgenes/pelculas/VR/GIS generar interfaces de usuario (ver captulo 7) Curso de Matlab - 85 Crear/ajustar grficos Crear grficos desde el editor de matrices (Permite representar filas, columnas o regiones mediante varios tipos de grficos) Curso de Matlab - 86 Seleccin del tipo de grfico Matrix editor Categories Plot types Description and function references Curso de Matlab - 87 Tipos de grficos (1D, 2D) Line Stem & stair Scatter Histogram Polar Bar Pie Curso de Matlab - 88 Tipos de grficos (>=3D) 3D surfaces Volumetrics Vector Fields Images Contour Analytic Curso de Matlab - 89 Crear grficos con plot pl ot ( Y) pl ot ( X1, Y1, . . . ) pl ot ( X1, Y1, Li neSpec, . . . ) pl ot ( . . . , ' Pr oper t yName' , Pr oper t yVal ue, . . . ) >>plot(yy,'o-') >>hold on; stem(yy); hold off >>grid on >>plot(xx,yy,'o-') >>hold on; stem(xx,yy); hold off >>grid on Curso de Matlab - 90 Crear grficos con plot pl ot ( x, y, ' r x- ' ) ; y yel l ow m magent a c cyan r r ed g gr een b bl ue w whi t e k bl ack . punt o o x + * - l nea cont i nua : l nea de punt os - . punt o y r aya - - l nea di scont i nua pl ot ( x, y1, ' r x- ' , x, y2, ' g- - ' ) ; pl ot ( x, y1, ' r x- ' ) ; hol d on; pl ot ( x, y2, ' g- - ' ) ; hol d of f ; Truco: Para pintar una lnea: hol d on pl ot ( [ x1, x2] , [ y1, y1] , ' k' ) ; hol d of f Curso de Matlab - 91 Texto en grficos xl abel ( ' Ej e X' ) ; yl abel ( ' Ej e y' ) ; zl abel ( ' Ej e z' ) ; t i t l e( ' T t ul o de l a gr f i ca' ) ; t ext ( x, y, ' Text o en ( x, y) ' ) ; Truco: Los texto admiten expresiones tipo Latex t i t l e( ' Gr f i ca: \ al pha + x_3^2' ) Curso de Matlab - 92 Subplots: varios grficos por figura subpl ot ( 4, 2, 3) pl ot ( r and( 10, 2) ) subpl ot ( ' posi t i on' , [ 0. 2, 0. 6, 0. 7, 0. 3] ) 0.2 0.6 0.7 0.3 Curso de Matlab - 93 Grficos de superficies sur f ( Z) sur f ( X, Y, Z) sur f ( X, Y, Z, C) x=[ - 20, - 10, - 5, - 2, - 1, 0, 1, 2, 5, 10, 20] / 10; y=x; [ X, Y] =meshgr i d( x, y) ; Z=cos( X) +cos( Y) ; subpl ot ( 2, 2, 1) surf(Z); axi s( [ 0 11 0 11 0 2] ) subpl ot ( 2, 2, 2) surf(x,y,Z); subpl ot ( 2, 2, 3) surf(X,Y,Z); subpl ot ( 2, 2, 4) C=r and( si ze( Z) ) ; surf(X,Y,Z,C); colores Curso de Matlab - 94 Superficies especiales f unct i on [ x, y, z] =t or us( ) %Di buj a un t or o % r =0. 5; %r adi o l at er al n=30; %nmer o de el ement os a=1; %r adi o cent r al %Cal cul o ngul os en f unci n de l a r esol uci n t het a=pi *( 0: 2: 2*n) / n; phi =2*pi *( 0: 2: n) ' / n; %Cal cul o y pr oyect o en x, y, z. xx=( a + r * cos( phi ) ) *cos( t het a) ; yy=( a + r * cos( phi ) ) *si n( t het a) ; zz=r * si n( phi ) *ones( si ze( t het a) ) ; %Di buj o l a f i gur a ar =( a+r ) / sqr t ( 2) *1. 1; col or map( ' cool ' ) subpl ot ( 2, 2, 1) ; mesh( xx, yy, zz) ; axi s( [ - ar , ar , - ar , ar , - ar , ar ] ) ; subpl ot ( 2, 2, 2) ; surf( xx, yy, zz) ; axi s( [ - ar , ar , - ar , ar , - ar , ar ] ) ; subpl ot ( 2, 2, 3) ; p=surf( xx, yy, zz) ; shadi ng i nt er p set ( p, ' EdgeCol or ' , ' k' ) ; axi s( [ - ar , ar , - ar , ar , - ar , ar ] ) ; subpl ot ( 2, 2, 4) ; surfl( xx, yy, zz) ; axi s( [ - ar , ar , - ar , ar , - ar , ar ] ) ; Curso de Matlab - 95 Iluminacin y Punto de vista [ x, y, z] =peaks; sur f l ( x, y, z) ; shadi ng i nt er p Punto de vista vi ew( azi mut h, el evat i on) vi ew( - 37. 5, 30) Iluminacin l i ght angl e( az, el ) l i ght angl e( 90, 21. 8) Curso de Matlab - 96 Retoque de grficos desde men Ventana de la figura con todas las opciones activadas Para crear nuevos subplot Properties: Figure Axes Current Object Variables del workspace Selector de objetos de la figura Toolbars Curso de Matlab - 97 Retoque de grficos desde men Explora valores pinchando en la grfica Zoom y desplazamiento de ejes Figure Toolbar Curso de Matlab - 98 Retoque de grficos desde men Detener la rotacin animada Camera Toolbar Controles de la cmara y del punto de luz Curso de Matlab - 99 Retoque de grficos desde men Objetos para dibujar Plot edit Toolbar Formato de los textos Curso de Matlab - 100 Retoque de grficos por propiedades Todas las propiedades de cada objeto del grfico (figura, ejes, elemento grfico,...) estn guardadas en "handles" gcf current figure, gca current axis get ( handl e) muestra todos las propiedades que se pueden cambiar set ( handl e, ' Pr oper t yName' , ' Val ue' , . . . ) cambia propiedades Ejemplo: set ( gca, ' Xt i ck' , [ 1 2 3 4 5 6] ) ; set ( gca, ' Xt i ckLabel ' , [ ' ene' ; ' f eb' ; ' mar ' ; ' abr ' ; ' may' ; ' j un' ] ) ; Curso de Matlab - 101 Guardar grficos Desde menu de figure File/Save As .fig, .eps, .png, .jpeg, .bmp, .pcx, .tiff File/Generate M file Por comandos (til para sesiones de consola) hgsave pepito pepito.fig print guarda la figura como imagen pr i nt - depsc - t i f f - r 300 ar chi vo pr i nt dpng r 150 ar chi vo Esta opcin nos permite ver qu comandos se utilizan para crear las modificaciones que hemos realizado por men Se puede cargar con hgload para retocar Curso de Matlab - 102 Creacin de animaciones Hay dos maneras de crear animaciones: Offline: generar una pelcula para verla luego On-Line: ir repintando la grfica desde Matlab Las pelculas pueden generarse de dos maneras: Guardar "fotogramas" en el disco (normalmente utilizando print) y luego utilizar un programa externo para crear la pelcula. getframe, movie f or k = 1: 16 pl ot ( f f t ( eye( k+16) ) ) axi s equal M( k) = get f r ame; end movi e( M, 1) ; %pl ay t he movi e movi e2avi ( M, ' mi _pel i ' , ' f ps' , 1) ; Curso de Matlab - 103 Temario (7) 1. Introduccin a Matlab. 2. Estructuras bsicas de datos. 3. Programacin en Matlab. 4. Estructuras avanzadas de datos. 5. Optimizacin de cdigo. 6. Representaciones grficas. 7. Desarrollo de aplicaciones con Matlab. Creacin de interfaces grficas Mtodos de comunicacin externa Generacin de documentacin Curso de Matlab - 104 Creacin de interfaces grficas Ejecutar la aplicacin gui de desde Matlab Objetos para pintar Aplicacin Curso de Matlab - 105 Creacin de interfaces grficas Cada objeto tiene sus atributos y una funcin callback Curso de Matlab - 106 Creacin de interfaces grficas Guide genera un archivo .m para escribir el cdigo de nuestro programa Como en todos los lenguajes, es aconsejable mantener el cdigo de clculo aislado del cdigo del interface Curso de Matlab - 107 Comunicaciones externas Adquisicin directa de datos Database toolbox Data Acquisition toolbox Image Acquisition toolbox Adquisicin de datos desde archivos xlsread, load, textscan (nmeros) auread, wavread (sonido) imread (imagen) aviread (pelcula) Curso de Matlab - 108 Comunicaciones externas Programas externos Matlab llama a otros programas syst em, dos, uni x Matlab llama a funciones de otros lenguajes crear un fichero MEX (#include "mex.h") Matlab llama a la funcin como si fuese un .m Excel llama a Matlab Excel Link toolbox Cualquier programa llama a Matlab mat l ab nodi spl ay mpr ogr ama mat l ab nodeskt op mpr ogr ama Curso de Matlab - 109 Generacin de documentacin Consejos iniciales Documentar todas la funciones: Descripcin Argumentos de entrada Valores retornados Ejemplo de utilizacin Advertencias de utilizacin Mantener el cdigo de clculo independiente del interface grfico. Facilita la depuracin, la mejora de rendimiento, la actualizacin del interface. Crear secciones con comentarios del tipo %% Curso de Matlab - 110 Generacin de documentacin Matlab 7 incorpora una opcin de generacin de documentacin. De momento slo funciona para scripts Genera documentacin en HTML, XML, LaTeX, Word y Power Point. Se basa el los comentarios de las secciones Procedimiento: Activar "cell mode" en el editor con Cell/Enable Cell Mode Seleccionar File/Publish to HTML Matlab ejecuta el script y genera un HTML con los comentarios, el cdigo y grficas de los resultados. Curso de Matlab - 111 Ejemplo: script torus.m