Curso rápido de Matlab Rafael Palacios (dic/2004)

Curso de Matlab-2

Temario

1.Introducción a Matlab.

2.Estructuras básicas de datos.

3.Programación en Matlab.

4.Estructuras avanzadas de datos.

5.Optimización de código.

6. Representaciones gráficas. 7.Desarrollo de aplicaciones con Matlab.

29/nov

13/dic 20/dic

Curso de Matlab-3

Temario (1)

1.Introducción a Matlab.

–Versiones de Matlab, –Mejoras de la versión 7

2.Estructuras básicas de datos.

3.Programación en Matlab.

4.Estructuras avanzadas de datos.

5.Optimización de código.

6. Representaciones gráficas. 7.Desarrollo de aplicaciones con Matlab.

Curso de Matlab-4

Introducción a Matlab

–Matlab = Matrix Laboratory.

–Programa interactivo para realizar cálculos numéricos y visualizaciones en el ordenador.

(Natick, MA). http://www.mathworks.com

Moler en 1984, para realizar cálculo matricial en ordenadores sin necesidad de conocimientos de programación.

Curso de Matlab-5

Introducción a Matlab Entorno interactivo

Lenguaje de programación (con interfaces externos Fortran, C...)

Entorno para desarrollo de aplicaciones

Curso de Matlab-6

Versiones de Matlab

•Unix: Linux, solaris, HP-UX •M acOS

Curso de Matlab-7

Versiones de Matlab

–PC: Corre bajo windows utilizando toda la memoria disponible

–Mejoras en el interfaz y mejora de Simulink –Matlab compiler admite objetos

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

Algunas mejoras de Matlab 7 •Dibujar gráficos directamentes desde el editor de matrices

Tamaño máximo de la matriz: 524288 elementos

Algunas mejoras de Matlab 7 •Breakpoints con expresiones condicionales

Algunas mejoras de Matlab 7 •Ejecución del código por secciones (cellÆenable cell mode)

Ejecución sección por secci ón

Permite repetir la ejecución de una sección cambiando un parámetro de la misma.

Parámetro que estamos retocando Resultado de la ejecución de la sección

Otras mejoras de Matlab 7

•Ejecución/Debugger por secciones de código (Cell Mode) •Generación automática de documentación

•Mejoras en la generación automática de código desde Simulink

•Función textscanpara leer archivos

•Cálculo con variables enteras. –Matrices más pequeñas, código más rápido. Æimágenes

Entorno de desarrollo

•comando: matlab •comando: matlab –r programa

Unix

•comando: matlab

•En IIT comandos: matlab, matlab5, matlab61, matlab65, matlab7

•Ejemplo útil: matlab65 -nodisplay (Modo Consola sin gráficos)

Entorno de desarrollo

Ventana de comandos

Comandos básicos

•verÆmuestra la versión, el código de licencia y las toolboxes disponibles

–Licencia 46431: profesores (para investigación y proyectos)

•whosÆlista todas las variables disponibles

•save archivoÆguarda todas las variables

•save archivoa bÆguarda las variables ay b

•load archivo Æcarga variables

• quit Æsalir

Editor

•Matlab incorpora un editor que interacciona con el resto del entorno.

Ejecución por secciones en cell mode

Controles del debugger sint axis

Ayudas y documentación

–help funciónÆmuestra la ayuda de una función

–helpvale tanto para las funciones del sistema como para desarrollos propios

Start / Help Hypertext Help Window

Ejemplo de consulta

Secciones de la ayuda

•A lgorithm

•See Also d e v e l o p e d b y s c h l a r s

Ayuda on-line

•Página oficial de soporte http://www.mathworks.com/support/

–N oticias

•Matlab Central

•Soporte técnico personal por correo electrónico

–Utilizar un código de licencia válido –Describir la plataforma

Toolboxes

–Manuales tipo tutorial (User's Guide)[HTML, PDF] –Referencia de las funciones (Reference Guide)[HTML, PDF]

Ejemplos de Toolboxes

MATLABVersion 6.5 (R13)
SimulinkVersion 5.0 (R13)
Control System ToolboxVersion 5.2 (R13)
Fuzzy Logic ToolboxVersion 2.1.2 (R13)
Image Processing ToolboxVersion 3.2 (R13)
MATLAB CompilerVersion 3.0 (R13)
MATLAB Web ServerVersion 1.2.2 (R13)
Mu-Analysis and Synthesis ToolboxVersion 3.0.7 (R13)
Neural Network ToolboxVersion 4.0.2 (R13)
Nonlinear Control Design BlocksetVersion 1.1.6 (R13)
Optimization ToolboxVersion 2.2 (R13)
Real-Time WorkshopVersion 5.0 (R13)
Robust Control ToolboxVersion 2.0.9 (R13)
SB2SL (converts SystemBuild to SimuVersion 2.5 (R13)
Signal Processing ToolboxVersion 6.0 (R13)
System Identification ToolboxVersion 5.0.2 (R13)

>> ver -------------------------------- -------------------------------- --------------------- MATLAB Version 6.5.0.180913a (R13) MATLAB License Number: 46431 Operating System: SunOS 5.8 Generic_108528-29 sun4u Java VM Version: Java 1.3.1_02 with Sun Microsystems Inc. Java HotSpot(TM) Server VM -------------------------------- -------------------------------- --------------------- >> date ans = 27-Nov-2004

Otras Toolboxes

Application Areas

• Technical Computing

–Mathematical computation, analysis, visualization, and algorithm dev elopment

•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 http://www.mathwo rks.com/products/

Temario (2)

1.Introducción a Matlab.

2.Estructuras básicas de datos. – Variab les

3.Programación en Matlab.

4.Estructuras avanzadas de datos.

5.Optimización de código.

6. Representaciones gráficas. 7.Desarrollo de aplicaciones con Matlab.

Variables

•Matlab no requiere declarar ni dimensionar variables

>> x=5; >> y=20;

>> z=x*y z =

>> datos=load('datos.txt'); >> cadena='hola'; poniendo ';' se realiza la asignación pero no se muestra el resultado sin poner ';' se puestra el resultado final

Vectores y Matrices matrices (vectores y escalares son casos particulares).

>> x=[1,2,3,5,7,1,13];Æ[ 1 2 3 5 7 1 13 ] >> x=[1 2 3 5 7 1 13];Æ[ 1 2 3 5 7 1 13 ]

>> y=1:5;Æ[ 1 2 3 4 5 ] >> pares=2:2:10;Æ[ 2 4 6 8 10 ]

>> imp_down=9:-2:1;Æ[ 9 7 5 3 1 ]

>>a(5)=7;Æ[ 0 0 0 0 7 ]

Ejemplos de inicialización de vectores fila

Vectores y Matrices

>> x=[1;2;3;5;7;1;13] x =

>> x=[1,2,3,5,7,1,13]';

Ejemplos de inicialización de vectores columna traspuesta Vector fila

Vectores y Matrices

>> M = [1 2 3; 4 5 6; 7 8 9]; >> ceros=zeros(2,5);

>> unos=ones(3,4);

>> M2=[ 20, 21, 2; M]; >> M2=[[20, 21, 2]; M];

>> M3=[ [15;16;17], M];

>> aleatorio=rand(20,30); >> normal=randn(20,30);

12 3
45 6
78 9

Ejemplos de inicialización de Matrices

2021 2
12 3
45 6
78 9
151 2 3
164 5 6

Acceso a los elementos de una matriz

•Matlab utiliza los paréntisis para acceder a elementos de la matriz

•Los subíndices empiezan en 1, por lo tanto el primer elemento es a(1,1)

0.17370.3421 0.6391 0.1632 0.2313
0.78580.7742 0.0934 0.2763 0.8453
0.36560.1478 0.9288 0.1310 0.7264
0.77690.1482 0.4851 0.0232 0.6947
0.17370.3421 0.6391 0.1632 0.2313
0.78580.7742 0.0934 0.2763 0.8453
0.36560.1478 0.9288 0.1310 56.8000

•Ejemplo: a(3,5)=56.8; 0.7769 0.1482 0.4851 0.0232 0.6947

Acceso a los elementos de una matriz

• Ejemplo 1: a(2:3,1:4)=zeros(2,4); o bien: a(2:3,1:4)=0;

0.17370.3421 0.6391 0.1632 0.2313
0.78580.7742 0.0934 0.2763 0.8453
0.36560.1478 0.9288 0.1310 56.8000
0.77690.1482 0.4851 0.0232 0.6947
0.17370.3421 0.6391 0.1632 0.2313
00 0 0 0.8453
00 0 0 56.8000

0.7769 0.1482 0.4851 0.0232 0.6947

Acceso a los elementos de una matriz

• Ejemplo 2: a([2,3],[2,4])=ones(2,2); o bien: a([2,3],[2,4])=0;

0.17370.3421 0.6391 0.1632 0.2313
00 0 0 0.8453
00 0 0 56.8000
0.77690.1482 0.4851 0.0232 0.6947
0.17370.3421 0.6391 0.1632 0.2313
01.0 0 1.0 0.8453
01.0 0 1.0 56.8000

0.7769 0.1482 0.4851 0.0232 0.6947

Acceso a los elementos de una matriz

•El operador ':'se utiliza para indicar "todos los elementos"

0.17370.34210.6391 0.1632 0.2313
0.78580.77420.0934 0.2763 0.8453
0.77690.14820.4851 0.0232 0.6947

size(a(3,:)) Æ[1 5] a(:,2) size(a(:,2)) Æ[4 1] a(:) Ætodos los elementos size(a(:)) Æ[20 1] todo en un vector columna

Acceso a los elementos de una matriz

•El operador 'end'significa "último elemento" –Ejemplo: Vector de diferencias

>> t=1:0.1:2; >> y=sin(2*pi*t);

>> diferencias=[NaN; y(2: end )-y(1: end -1)];

1.0 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.0

-0.0 0.59 0.95 0.95 0.59 0.0 -0.59 -0.95 -0.95 -0.59 -0.0 NaN 0.59 0.36 0.0 -0.36 -0.59 -0.59 -0.36 -0.0 0.36 0.59 t = y = diferencias =

Operaciones básicas

–Matlab trabaja con matrices, a diferencia de otros lenguajes que sólo trabajan con escalares

>> a=rand(2,5); >> b=rand(5,2);

>> c=a*b;% matriz de 2x2
>> d=b*a;% matriz de 5x5
162 3 13
51 10 8
97 6 12
414 15 1

mn = magic(4);

2564 9 169
25 121 10064
8149 36 144
16 196 2251

mn*mn mn^2 mn.*mn mn.^2

Otras operaciones matriciales

•Suma: sum

>> b=sum(A); % como a es matriz, se suma por columnas y b es un vector fila >> c=sum(b); % como b es vector, se suman todos sus elementos

>> c=sum(a(:));% suma todos los elementos de la matriz a

>> c=sum(sum(a)); % suma todos los elementos de la matriz a

•Media y desviación: m=mean(A); sigma=std(A); •Elementos de la diagonal: v=diag(A);

•Left division: x=A\B; La solución por mínimos cuadrados de A x = b se obtiene mediantex = A \b;

•Determinante: c=det(A);

•Inversa: B=inv(A);

• Autovalores: v=ein(A);

•Valor absoluto ó módulo de complejos: B=abs(A);

Otras operaciones

•Trig: sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh

•Rounding: floor, ceil, round, fix

•Modular: rem, mod

•Exponential: exp, log, log2, log10, sqrt

•Primes: factor, primes

Tipos de datos

•Matlab opera normalmente en formato double según el estándar IEEE >> a=123/0

Warning: Divide by zero. a = Inf

>> b=0/0 Warning: Divide by zero. b = NaN

>> Inf-Inf ans = NaN

>> c=15+sqrt(-1) c = 15.0 + 1.0i

•Maneja correctamente los valores Inf (infinito) y NaN (not-a-number)

Tipos de datos

– double –s ingle

• Otros

–c har –logical

–c ell realmin Æ2.2251e-308, realmax Æ1.7977e+308, eps Æ2.2204e-016 realmin Æ1.1755e-038, realmax Æ3.4028e+038, eps Æ1.1921e-007

Tipos de datos: Matrices dispersas

•Las matrices dispersas ahorran memoria y los calculos son más eficientes

•Todas las operaciones de matrices funcionan con matrices dispersas

•Si se vuelve ineficiente, se convierte automáticamente a matriz normal s = sparse(1000,1000); s(2,1) = 2; s(992,875) = 3; s(875,992) = 4.7; s=s+3; % s deja de ser dispersa

Temario (3)

1.Introducción a Matlab.

2.Estructuras básicas de datos.

3.Programación en Matlab. –S cripts

4.Estructuras avanzadas de datos.

5.Optimización de código.

6. Representaciones gráficas. 7.Desarrollo de aplicaciones con Matlab.

Scripts

•Un script es una secuencia de instrucciones de Matlab guardada en un archivo con extensión .m

%Script de ejemplo

%% Inicio a=magic(4); fprintf( 'Inicio cálculos\n' );

%% Traza traza=sum(diag(a));

%% Resultado fprintf('La traza vale: %f\n',traza) ejem_script.m

•Se ejecuta escribiendo su nombre: >> ejem_script

Funciones (llamada)

•Las funciones puede recibir varios valores y devolver varios resultados [m,d]=med_des(x); mit=imread('camera man.tif','TIFF'); mit=imread('cameraman.tif');

[mit,map]=imread(' imageman.gif'); mit=imread('imageman.gif');

Funciones (definición)

•Las funciones se escriben en archivos .mque deben encontrarse en el directorio actual (o en un directorio definido en el path ) function [med,des]=med_des(x) % Funciona para calcular la media y la desviación a la vez

% [med,des]=med_des(x)

% Rafael Palacios (nov/2004) med=mean(x(:)); des=std(x(:));

Información que aparece al hacer help med_des Med_des.m

Funciones

•La variable nargin(local de la función) es el número de argumentos recibidos.

•La variable nargout(local de la función) es el número de argumentos que se recogerán en la llamada. Puede ahorrarnos unos cálculos.

•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

Expresiones lógicas

&&Short-circuit AND

||Short-circuit OR

•Hay una función xor, pero no es un operador

Control de Flujo: if •bloque if if rem(n,2) ~= 0

M = odd_magic(n) elseif rem(n,4) ~= 0

M = single_even_magic(n) else

M = double_even_magic(n) end if a > b tmp=a; a=b; b=tmp; end

A diferencia de C, en Matlab no es necesario utilizar paréntesisen la expresión lógica

Control de Flujo: for •bucle for a=[]; for n = [ 1 2 3 5 7 1 ] a = [a, isprime(n)]; end for n = 3:32 r(n) = rank(magic(n)); end

Control de Flujo: while

•bucle while while ~isprime(x) x = x + 1; end

Control de Flujo: switch

• switch-case switch (rem(n,4)==0)+(rem(n,2)==0) case 0

M = odd_magic(n) case 1

M = single_even_magic(n) case 2

M = double_even_magic(n) otherwise error('This is impossible') end

A diferencia de C, en Matlab no hace falta utilizar break.

Control de Flujo: try

• try-catch try statement ... statement catch statement ... statement end

Las instrucciones comprendidas entre catchy endsólo se ejecutan si se produce un error en las primeras. Utilizar lasterrpara ver el último error.

Comentários