matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · el comando diary off...

90
Maestría en Ingeniería Eléctrica Herramientas de Programación Matlab Matlab Herramientas de programación y Herramientas de programación y simulación simulación

Upload: others

Post on 25-Aug-2020

20 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

MatlabMatlab

Herramientas de programación y Herramientas de programación y simulaciónsimulación

Page 2: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

The 2015 Top Ten Programming Languages

Page 3: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Introducción Introducción

• Es una herramienta de computación y simulación.

• Inicialmente fue desarrollado como una interface para las librerías numéricas LINPACK y EISPACK.

• El tipo de datos mas importante es la matriz (MATrix LABoratory).

Page 4: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Introducción Introducción

Las operaciones elementales de matlab pueden ser divididas en:

• Operaciones aritméticas.• Operaciones lógicas.• Funciones matemáticas.• Funciones gráficas• Operaciones de entrada salida.

Page 5: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

• Elementos del la interface de matlab

Ventana de comandoscommand window

Ventana de historia de comandos

Directorio actual

Información de archivos

Menu de directorio activoToolbar de herramientas

start button

Page 6: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

El menú HelpMATLAB dispone de un excelente Help con el que se puede encontrar la información que se desee.Product Family HelpFunction browserUsing the desktop

Page 7: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Help

MATLAB brinda ayuda sobre una función especifica tecleando en la linea de comandos

>> help lang

También si presionamos F1 con la función seleccionada se abre una ventana de ayuda sobre esa función

Page 8: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

2.1 Expresiones: variables, números, operadores, funciones y expresiones.

• Una variable en matlab es un objeto de un tipo especifico• En el caso de matrices, algunos tipos permitidos son

reales, complejos y caracteres.• En MATLAB las matrices y vectores son variables que

tienen nombres.

IntroducciónIntroducción

Page 9: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• El “workspace”, entorno de trabajo o sesión es donde las variables son guardadas

• El comando clear se usa para borrar variables del entorno de trabajo:

>> clear unaVariable

>>clear 

IntroducciónIntroducción

Page 10: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Guardar variables: Comandos save y load

Guardar el WorkSpace Para guardar el estado de una sesión de trabajo se utiliza el comando save. Si se teclea:>> saveantes de salir de matlab, se crea en el directorio actual un archivo binario llamado matlab.mat (o matlab) con el estado de la sesión.

Recuperar el WorkSpace Dicho estado puede recuperarse la siguiente vez que se inicie matlab con el comando:>> loadEstos comandos también pueden guardar también matrices y vectores de forma selectiva y en archivos con un nombre especifico. Ejemplo:>> save filename A x yguarda las variables A, x e y en un fichero binario llamado filename.mat (o filename). Para recuperarlas en otra sesión basta teclear:>> load filename

Page 11: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Guardar sesión y copiar salidas: Comando diaryPara almacenar en un archivo la descripción de lo que el matlab  va haciendo (la entrada y salida de los comandos utilizados), se usa el comando diary en la formasiguiente:>> diary filename.txt...>> diary off...>> diary on...El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa de on a off y viceversa. Para poder acceder al archivo filename.txt con Notepad o Word esnecesario que diary esté en off. Si en el comando diary no se incluye el nombre del archivo se utiliza por defecto un archivo llamado diary (sin extensión).

Page 12: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Comando para medir los tiempos de cálculo

MATLAB dispone de funciones que permiten calcular el tiempo empleado en las operaciones matemáticas realizadas. Algunas de estas funciones son las siguientes:cputime: Devuelve el tiempo de CPU (con precisión de centésimas de segundo) desde que el programa arrancó. Llamando antes y después de realizar una operación y restando los valores devueltos, se puede saber el tiempo de CPU empleado en esa operación. Este tiempo sigue corriendo aunque MATLAB esté inactivo.

etime(t2, t1): tiempo transcurrido entre los vectores t1 y t2  obtenidoscomo respuesta al comando clock. Note el orden de las variables en el comando etime.

tic ops toc: imprime el tiempo en segundos requerido por ops. El comando tic pone el reloj a cero y toc obtiene el tiempo transcurrido.

Page 13: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Ejemplo

El siguiente código mide de varias formas el tiempo necesario para resolver un sistema de 1000 ecuaciones con 1000 incógnitas. Téngase en cuenta que los tiempos pequeños (del orden de las décimas o centésimas de segundo), no se pueden medir con gran precisión.

>> n=1000; A=rand(n); b=rand(n,1); x=zeros(n,1);>> tiempoIni=clock; x=A\b; tiempo=etime(clock, tiempoIni)>> time=cputime; x=A\b; time=cputime­time>> tic; x=A\b; toc

Page 14: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Definición de una variable• Para definir una variable o matriz no hace falta 

declararla o establecer de antemano su tamaño incluso el tamaño se puede cambiar posteriormente.

• La siguiente expresión declara y define una variable x  (matriz de 1x1 ) y un vector (1x3)

>>x=2.77;

>>vector=[1 2 3];

IntroducciónIntroducción

Page 15: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• Las matrices se definen o introducen por filas• Los elementos de una misma fila están separados por espacios en 

blancos o comas• Las filas están separadas por pulsaciones intro o por caracteres 

punto y coma (;).• Si no se especifica variable en una expresión, entonces se asigna por 

defecto a la variable  “ans”Ejemplo:

>> [2,3,4; 3,­1,0]

ans =

     2     3     4

     3    ­1     0

IntroducciónIntroducción

Page 16: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Tipos de datos MATLAB trabaja por defecto en doble precisión, es decir guardando cada dato en 8 bytes, con unas 15 cifras decimales exactas. Sin embargo, también tiene la capacidad para trabajar con tipos de datos específicos.

EnterosMATLAB permite crear variables enteras con 1, 2, 4 y 8 bytes (8, 16, 32 y 64 bits). A su vez, estas variables pueden tener signo o no tenerlo.Los tipos de los enteros con signo son int8, int16, int32 e int64, y sin signo uint8, uint16, uint32 y uint64.Ejemplos>> i=int32(100);  % se crea un entero de 4 bytes con valor 100>> j=zeros(100); i=int32(j);  % se crea un entero i a partir de j>> i=zeros(1000,1000,'int32'); % se crea una matriz 1000x1000 de enteros

Page 17: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Punto flotanteMATLAB dispone de dos tipos de variables reales o flotantes: single y double, que ocupan respectiva mente 4 y 8 bytes. Por defecto se utilizan doubles. LogicasLas variables logicas (logical), que sólo pueden tomar los valores true (1) y false (0). Las variables lógicas surgen como resultado de los operadores relacionales (==, <, <=, >, >=, ~=, más adelante se trataran en mas detalle.Número complejosMATLAB trabaja sin ninguna dificultad con números complejos. En la entrada de datos de MATLAB se pueden utilizar indistintamente la i y la j para representar el número imaginario unidad (en la salida, sin embargo, puede verse que siempre aparece la i).

Page 18: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Operaciones matricialesDado que la estructura fundamental de MATLAB es la matriz las operaciones comunes *, /, etc son realmente operaciones matriciales.Ejemplo* es la multiplicación matricial.Operaciones de campo (Field operations) o elemento a elementoSon las que son llevadas a cabo termino a terminoEjemplo.* es la multiplicación termino a termino

IntroducciónIntroducción

Page 19: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Ejemplo de operaciones de campo o elemento a elemento

>> [1 2 3 4]^2??? Error using ==> ^Matrix must be square.

>> [1 2 3 4].^2ans =1 4 9 16

>> [1 2 3 4]*[1 ­1 1 ­1]??? Error using ==> *Inner matrix dimensions must agree.

>> [1 2 3 4].*[1 ­1 1 ­1]ans =1 ­2 3 ­4

Page 20: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Operación “dividir”• Matlab define el operador \ como “left división”   

x=A\B = inv(A)*Bresuelve Ax=B

• El operador / “right division” X=A/B=A*inv(B)Resuelve xB=A

• Ejercicioverificar esto con un programa

IntroducciónIntroducción

Page 21: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

El operador “left division”, x=A\b da una solución al sistema de ecuaciones lineales Ax=b>> A = [2 1 ;1 1]

A =

     2     1

     1     1

>> b=[2; 1]

b =

     2

     1

>> x = A\b

x =

    1.0000

    0.0000

>> y = A/b    % right division of A "by" b

??? Error using ==> mrdivide

Matrix dimensions must agree.

IntroducciónIntroducción

Page 22: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Matlab intentara resolver el sistema aun si la matriz A no tiene inversa.Ejemplo

>> A=[1 2; 1 0; 0 1], b=[2 0 0]'A =  1  2       1  0       0  1b =200>> x=A\b, resto=A*x­bx =0.33330.6667

Page 23: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

2.2 Operaciones con matrices y arreglos. • Como se observo anteriormente las matrices se especifican 

usando [ ].• Un “;” indica nueva linea.

>> colvector = [2; 4; 3; ­1; 1­4*j]

colvector =

2.0000

4.0000

3.0000

­1.0000

1.0000 ­ 4.0000i

IntroducciónIntroducción

Page 24: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Algunas operaciones con matrices:• Borrar elementos de una matriz.Ejemplo>> a=[1 2; 3 4]

a =

     1     2

     3     4

>> a(:,1)=[]

a =

     2

     4

IntroducciónIntroducción

Page 25: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Transpuesta de una matriz (')Ejemplo>> vect=[1 2 3];

>> vect'

ans =

     1

     2

     3

>> mtz=[1 2 3; 4 5 6];

>> mtz'

>>  ????

Page 26: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• Sum  sumar los elementos 

• Repmat  repetir matricesEjemploB = repmat(eye(2),3,4)

 =

     1     0     1     0     1     0     1     0

     0     1     0     1     0     1     0     1

     1     0     1     0     1     0     1     0

     0     1     0     1     0     1     0     1

     1     0     1     0     1     0     1     0

     0     1     0     1     0     1     0     1

IntroducciónIntroducción

Page 27: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Ejemplos de comandos para crear matrices especiales

zeros(3,5) forma una matriz de ceros de tamaño (3×5)

zeros(4,4) ídem de tamaño (4×4)

ones(3) forma una matriz de unos de tamaño (3×3)

ones(2,4) idem de tamaño (2×4)

linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2

logspace(d1,d2,n) genera un vector con n valores espaciados logarítmicamente en 10^d1 y 10^d2. Si d2 es pi 9 , los puntos se generan entre 10^d1 y pi

rand(3) forma una matriz de números aleatorios entre 0 y 1, con distribución uniforme, de tamaño (3×3)

rand(2,5) idem de tamaño (2×5)

randn(4) forma una matriz de números aleatorios de tamaño (4×4), con distribución normal, de valor medio 0 y varianza 1.

Page 28: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Más funciones

[m,n]=size(A) devuelve el número de filas y de columnas de la matriz A.n=length(x)    calcula el número de elementos de un vector x

zeros(size(A)) forma una matriz de ceros del mismo tamaño que una matriz A. ones(size(A)) ídem con unos. A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x.

x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A.

Page 29: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Crear una nueva matriz a partir de otras matrices.Ejemplo >> A=rand(3)>> B=diag(diag(A))>> C=[A, eye(3); zeros(3), B]

Page 30: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Direccionamiento de matrices a partir de vectores

Los elementos de un vector x se pueden direccionar a partir de los de otro vector v. En este caso, x(v) equivale al vector x(v(1)), x(v(2)), ... 

Ejemplo>> v=[1 3 4]V = 1 3 4>> x=rand(1,6)X = 0.5899 0.4987 0.7351 0.9231 0.1449 0.9719>> x(v)ans =0.5899 0.7351 0.9231

Page 31: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

El operador “:”• j:k  es [j,j+1,...,k]• j:i:k es  [j,j+i,j+2i, ...,k]• A(:,j) es la j­esima columna de A• A(j,:) es el j­esima renglon de  A• A(j:k) es  A(j), A(j+1),...,A(k)• A(:,j:k) es A(:,j), A(:,j+1),...,A(:,k)• A(:) son todos los elementos de A como una sola 

columna.

IntroducciónIntroducción

Page 32: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Problema:• Sea la matriz

 • Expanda la matriz a una de 6x6 de la siguiente forma:

• Borre la línea 2 y columna 3 de V• Cree un vector z4 de la línea 4 de V• Modifique el elemento en la línea 4 columna 2 de V a 

j+5

IntroducciónIntroducción

Page 33: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Problema:• Del vector

R=(j   j+1   j­7   j+1   ­3)

1. Construya una matriz N de 6 columnas donde cada columna es el vector R.

IntroducciónIntroducción

Page 34: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Problema:Calcule Lx{ A }Donde • A es una matriz cualquiera• Lx es un operador que aproxima derivadas por

diferencias• Lx(i,j)= A(i,j)-A(i,j-1) • Para obtener A(i,1) utilize A(i,maxCol(j))

IntroducciónIntroducción

Page 35: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Problema:Se tiene una matriz A de 4x4 y un vector V de 1x4,

Se desea una operación para sumar el vector en la matriz. Cada valor del vector que se sume en cada valor de la matriz, de tal forma que se obtenga una nueva matriz A como: 

Sol V =[4 17 25 4 6]' ; vr = repmat(V', 1, 4); A + vr

IntroducciónIntroducción

Page 36: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Problema:Encuentre el vector interpolado por dos (Up two)   ( 2)V↑Con V=[v1 v2 v3]

IntroducciónIntroducción

Page 37: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

Problema:Realice una operación que retorne 1 si los elementos de un vector real forman una secuencia que se incrementa   

Page 38: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Operadores lógicos• Los elementos lógicos pueden utilizarse para 

seleccionar elementos de una matriz Ejemplo

x=[1 2 3 4 5];

>> x(logical([0 1 1 0 0]))

ans =

     2     3

IntroducciónIntroducción

Page 39: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Operadores lógicosEjemplos• Verificar si dos matrices tienen componentes en la

misma posición diferentes de cero:>> A=[1 -3 ;0 0];

>> B=[0 5 ;0 1];>> res=A&Bres =0 10 0

IntroducciónIntroducción

Page 40: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

>> comp = A>Bcomp =1 00 0

Otros operadores: A <= B A >= B A == B A ~= B A | B , or(A,B) ~A , not(A) xor(A,B)

IntroducciónIntroducción

Page 41: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

La funcion findk = find(X)

Retorna un vector que contiene los indice lineales de cada elemento diferente de cero en un arreglo X. Si X es un vector, find regresa un vector del mismo tamaño de X. Si X es un arreglo multidimensional, find regresa un vector columna con los indices lineales.EjemploX = [1 0 2; 0 1 1; 0 0 4]k = find(X)K = [ 1 5 7 8 9]’

Page 42: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

La funcion sortk = sort(X)

Retorna un vector que contiene los elementos de X ordenadosSi X es un arreglo multidimensional, sort regresa un arreglo con sus columnas ordenadasEjemploA = [9 0 -7 5 3 8 -10 4 2];B = sort(A)

B =

-10 -7 0 2 3 4 5 8 9

Page 43: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• Problema

Obtenga un vector formado por los componentes mayores que dos del siguiente vector

>> vect=[­2, 3, 0, 4, 5, 19, 22, 17, 1];

IntroducciónIntroducción

Page 44: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• Solución>> comp=vect>2comp =0 1 0 1 1 1 1 1 0

>> res=vect(comp)res =3 4 5 19 22 17

Problema:Pruebe con una matriz;

IntroducciónIntroducción

Page 45: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

• Problema

Obtenga un vector formado el número de repeticiones de los componentes de un vectorEjemplo  [1 2 3 3] debe retornar [1 1 2] y [1 2 3] 

Sol

x = [2 1 2 2 3 1 3 2 1 3];

x = sort(x);

difference  = diff([x,max(x)+1]);

count = diff(find([1,difference]))

y = x(find(difference))

Page 46: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• Formas de obtener matrices logicas>> logiField1 = [true, true, false, true, false, true]logiField1 =1 1 0 1 0 1 >> numField = [1, 1, 0, 1, 0, 1]numField =1 1 0 1 0 1>> logiField2 = logical(numField)logiField2 =1 1

IntroducciónIntroducción

Page 47: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• ProblemaConsidere la matriz

Usando operadores logicos, hacer cero los elementos que sean >10 y <­10.

IntroducciónIntroducción

Page 48: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• ProblemaConsidere la matriz

Use los operadores para seleccionar y guardar la diagonal de D en un vector.

IntroducciónIntroducción

Page 49: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Cadenas de caracteresMATLAB trabaja también con cadenas de caracteres. Los caracteres de una cadena se almacenan en un vector, con un carácter por elemento. ● Cada carácter ocupa dos bytes. ● Las cadenas de caracteres van entre apóstrofos o comillas simples, como 

por ejemplo: 'cadena'. ● Si la cadena debe contener comillas, éstas se representan por un doble 

carácter comilla, de modo que se pueden distinguir fácilmente del principio y final de la cadena. Por ejemplo, para escribir la cadena ni 'idea' se escribiría 'ni''idea''' .

● Una matriz de caracteres es una matriz cuyos elementos son caracteres, o bien una matriz cuyas filas son cadenas de caracteres. Todas las filas de una matriz de caracteres deben tener el mismo número de elementos. Si es preciso, las cadenas (filas) más cortas se completan con blancos.

Page 50: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

>> c='cadena'c =cadena>> size(c) % dimensiones del arrayans =16>> double(c) % convierte en números ASCII cada carácterans =999710010111097

>> char(abs(c)) % convierte números ASCII en caracteresans =cadena>> cc=char('más','madera')% convierte dos cadenas en una matrizcc =másmadera>> size(cc)% se han añadido tres espacios a 'más'ans =26

>> title=['Temperatura ambiente: ',num2str(grd)]

Page 51: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

FuncionesMATLAB trabaja también con funciones, estas por lo general se declaran en un archivo aparte. El formato es:  function [val1 , …, valn]= NombreDeLaFuncion(arg1,…, argn)        operaciones 

La función no necesita terminar con un end, Los valores de retorno se asignan dentro del cuerpo de la funciónLa operación return puede utilizarse para salir de la función

Page 52: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

Ejercicio

Obtenga una gráfica de la respuesta en el tiempo y en la frecuencia para las siguientes señales:

a) n=0:60; s1=sin(0.25πn);

b) n=0:60; s2=sin(0.05πn);

c) s3=s

1+s

2;

Escriba una función para filtrar S1 a partir de S3 utilizando un filtro diseñado con una ventana rectangular

Page 53: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

Ejemplo

Una función que retorna la suma de dos elementos

function resultado =suma( a, b)      resultado=a+b

Page 54: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

Ejercicio

Escriba una función que recibe un vector como argumento y calcule para cada elemento una aproximación de la función de Bessel dada por

Utilice la función para crear una ventana de Kaiser y obtenga su gráfica

Para una ventana de tamaño N=39, α=38/2, β=5.63

Page 55: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Arreglos de celdas ( Cell Arrays )Un vector (matriz) de celdas es un vector (matriz o hipermatriz) cuyos elementos son cada uno de ellos una variable de tipo cualquiera. En un array ordinario todos sus elementos son números o cadenas de caracteres. Sin embargo, en un array de celdas, el primer elemento puede ser un número; el segundo una matriz; el tercero una cadena de caracteres; el cuarto una estructura, etc.Ejemplos>> vc(1)={[1 2 3]}vc =[1x3 double]>> vc(2)={'mi nombre'}vc =[1x3 double]'mi nombre'>> vc(3)={rand(3,3)}vc =[1x3 double]'mi nombre'[3x3 double]

Page 56: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

también es posible crear el vector de celdas en una sola operación en la forma,vcc = {[1 2 3], 'mi nombre', rand(3,3)}vcc =[1x3 double]'mi nombre'[3x3 double]

MATLAB dispone de las siguientes funciones para trabajar con cell arrays:

cell(m,n) crea un cell array vacío de m filas y n columnascelldisp(ca) muestra el contenido de todas las celdas de cacellplot(ca) muestra una representación gráfica de las distintas celdasiscell(ca) indica si ca es un vector de celdasnum2cell() convierte un array numérico en un cell arraycell2struct() convierte un cell array en una estructurastruct2cell() convierte una estructura en un cell array

Page 57: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Ejemplo conviertir cell array vcc creado previamente en una estructura ST cuyos campos se pasan como argumentos a la función cell2struct(). El tercer argumento (un 2) indica que es la segunda dimensión del cell array (las columnas) la que va a dar origen a los campos de la estructura. En el segundo comando la estructura ST se convierte en un nuevo cell array llamado vbb:

>> ST=cell2struct(vb,{'vector','cadena','matriz'},2)ST =vector: [1 2 3]cadena: 'mi nombre'matriz: [3x3 double]>> vbb = struct2cell(ST)' % hay que transponer para obtener una filavbb =[1x3 double]'mi nombre'[3x3 double]La gran ventaja de las estructuras y los arrays de celdas es que proporcionan una gran flexibilidad para el almacenamiento de los diversos tipos de información. El inconveniente es que se pierde parte de la eficiencia, que MATLAB tiene, cuando se trabaja con vectores y matrices.

Page 58: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

introducciónintroducción

Indexado lineal de matrices

Si tenemos una matriz A=[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1], podemos acceder a los elementos también, utilizando un solo índice: A(15)=12 que sería equivalente a A(3,4)

Es posible expresiones como A([6 12 15])                   Ans =  11   15   12

Una función útil para manejar índice es sub2ind que convierte índices de fila-columna a índices lineales.Ejemploidx = sub2ind(size(A), [2 3 4], [1 2 4])  ans =      2   7   16

Page 59: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Matrices dispersas (sparse)

● Las matrices dispersas o sparse son matrices de un gran tamaño con la mayor parte de sus elementos cero.

● Operar sobre este tipo de matrices con los métodos convencionales lleva a obtener tiempos de cálculo prohibitivos.

● Por esta razón se han desarrollado técnicas especiales para este tipo de matrices.

● En ingeniería es muy frecuente encontrar aplicaciones en las que aparecen matrices sparse.

● MATLAB dispone de numerosas funciones para trabajar con estas matrices.

Page 60: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Las matrices dispersas se almacenan de una forma especial: solamente se guardan en memoria los elementos distintos de cero, junto con la posición que ocupan en la matriz. MATLAB usa 3 arrays para matrices reales sparse con nnz elementos distintos de cero:

● Un array con todos los elementos distintos de cero (nnz elementos)

● Un array con los índices de fila de los elementos distintos de cero (nnzElementos)

● Un array con punteros a la posición del primer elemento de cada columna (n elementos)

● En total se requiere una memoria de(nnz*8+(nnz+n)*4) bytes.

Page 61: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Un ejemplo de matriz dispersa que viene con MATLAB (se puede cargar con load west0479). Esta matriz tiene 479 filas y columnas. De los229441 elementos sólo 1887 son distintos de cero. Se comprende que se pueden conseguir grandes ahorros de memoria y de tiempo de cálculo almacenando y operando sólo con los elementos distintos de cero.

Page 62: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

IntroducciónIntroducción

Las siguientes funciones permiten crear matrices dispersas. Casi todas estas funciones tienen muchas posibles formas de ser utilizadas, con distintos argumentos y valores de retorno.

speye(m,n) Matriz identidad dispersa de tamaño m×n con unos en la diagonalsprand(m,n) Matriz aleatoria dispersa con distribución uniformesprandn(m,n) Matriz aleatoria dispersa con distribución normalsprandsym(n) Matriz aleatoria simétricaspdiags(A) Matriz dispersa a partir de las diagonales de otra matrizsparse(m,n) Crea una matriz dispersa de m×n con todos los elementos cerosparse(A) Crea una matriz dispersa a partir de una matriz llenafull(S) Convierte una matriz dispersa en una matriz llenafind(S) Encuentra los índices de los elementos distintos de cero y los devuelvecomo si la matriz fuera un vector (por columnas).spy(S) Representa en una figura los elementos distintos de cero de la matriznnz(S) Devuelve el número de elementos distintos de cerononzeros(S) Devuelve un vector lleno que contiene los elementos distintos de ceronzmax(S) Memoria reservada para elementos distintos de cerospones(S) Reemplazar los elementos distintos de cero por unosspalloc(m,n,nzmax) Reserva espacio para una matriz dispersa m×nissparse(S) Devuelve true si el argumento es una matriz dispersa

Page 63: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

2.3 Creación de gráficasCreación de gráficas

Page 64: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Una ayuda completa sobre las funciones gráficas de Matlab puede obtenerse mediante:• help graph2d• help graph32• help graphics

Creación de gráficasCreación de gráficas

Page 65: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• Gráficas en dos dimensiones plot

Ejemplo>> t = (0:1:5);

>> s = sin(t);

>> plot(t,s)

Creación de gráficasCreación de gráficas

Page 66: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• Ejemplo usando más de una curva>> t=(0:0.01:2);

>> sinfct=sin(2*pi*5*t);

>> cosfct=2*cos(2*pi*3*t);

>> expfct=exp(­2*t);

>> plot(t,[sinfct; cosfct; expfct])

Creación de gráficasCreación de gráficas

Page 67: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

• Ejemplo Modificar el color y las lineas de las curvasplot(t,sinfct,'k­', t, cosfct, 'b­­', t, expfct, 'm.')

solid curve (-),

dashed curve (--)

dotted curve (.),

g=green

b= blue

m=magenta

Creación de gráficasCreación de gráficas

Page 68: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

stem y stairs

Ejemplo

>> stem(t,sinfct)

>> stairs(t,sinfct)

Creación de gráficasCreación de gráficas

Page 69: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Creación de gráficasCreación de gráficas

Objetos gráficos

Comandos de alto nivel

Comandos de bajo nivel

Page 70: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Creación de gráficasCreación de gráficas

Page 71: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Creación de gráficasCreación de gráficas

El objeto root es la ventana de comandos. Ningún objeto de los mostrados en el esquema anterior puede existir si no existe root.

Ejemplo (comando de alto nivel):

Cuando en root hacemos >>plot(t,y) se crean todos los objetos necesarios para la representación (figure, axes, line), si es que antes no existían.

Page 72: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Conceptos importantes, para la manipulación de objetos gráficos

Handle: Todos los objetos gráficos tienen un handle (número que lo identifica) y un conjunto de propiedades (Color, Position, etc.).

Algunas de las propiedades pueden modificarse pero otras no. El handle del objeto root es 0.

Las funciones para obtener handles a objetos gráficos

gcf - Get handle to current figuregca - Get handle to current axis.gco - Get handle to current object.gcbo - Get handle to current callback object.gcbf - Get handle to current callback figure.

Creación de gráficasCreación de gráficas

Page 73: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Ejemplos

Para obtener el handle de un objeto figure se usa la función gcf (get current figure).>> gcfans =1Para obtener el handle de un objeto axes se usa la función gca (get current axes).>> gcaans =158.0017

Creación de gráficasCreación de gráficas

Page 74: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Una vez que se obtiene el handle al objeto, es posible manipular las propiedades de este

Los comandos importantes en matlab son:

set - Set object properties. get - Get object properties. reset - Reset graphics object properties to their defaults.

Creación de gráficasCreación de gráficas

Page 75: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Creación de gráficasCreación de gráficas

EjemplosPara ver todas la propiedades de un objeto se usa get >> get(gca)ActivePositionProperty = outerpositionALim = [0 1]⋮ZTickMode = autoBeingDeleted = off⋮Visible = on

Para cambiar las propiedades de un objeto se usa set

>> set(gcf,’NumberTitle’,’off’)>> set(gcf,'Color','r')

Page 76: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Programación de matlab

(2.4 Control de Flujo: if, switch/case, for, while, continue, break )

Page 77: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

forLa 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:nsentenciasend

o bien,

for i=vectorValoressentenciasend

donde vectorValores es un vector con los distintos valores que tomará la variable i .

Programación de MatlabProgramación de Matlab

Page 78: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Programación de MatlabProgramación de Matlab

En el siguiente ejemplo se presenta el caso más general para la variable del bucle: (valor_inicial: incremento: valor_final)

for i=n:­0.2:1sentenciasEnd

En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados.

for i=1:m  for j=1:n    sentencias  endend

Una última forma de interés del bucle for es la siguiente ( A es una matriz):for i=Asentenciasend

en la que la variable i es un vector que va tomando en cada iteración el valor de una de las columnas de A .

Page 79: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

While

La estructura del bucle while es muy similar a la de C/C++/Java. Su sintaxis es la siguiente:

while condicionsentenciasend

donde condición puede ser una expresión vectorial o matricial. La condición es True cuando su resultado sea no vacío y contenga solo elementos diferentes a cero. De otra forma la expresión es False.El siguiente ciclo solo se ejecuta una vez

Programación de MatlabProgramación de Matlab

A=ones(1,10);i=1;while A        A(i)=0;    i=i+1;    disp(i)    end

Page 80: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Programación de MatlabProgramación de Matlab

SENTENCIA BREAKAl igual que en C/C++/Java, la sentencia break hace que se termine la ejecución del bucle for o while más interno de los que comprenden a dicha sentencia.

SENTENCIA CONTINUELa 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.

Page 81: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Programación de MatlabProgramación de Matlab

Sentencia ifEn su forma más simple, la sentencia if se escribe en la forma siguiente:

if expression1    statements1end

Tambien se tiene el if-elseif expression1    Statements1else    Statements2end

Existe también la bifurcación múltiple, en la que pueden concatenarse tantas condiciones como se desee, y que tiene la forma:

if expression1    statements1elseif expression2    statements2else   Statements3end

Page 82: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Programación de MatlabProgramación de Matlab

La condición del if puede ser una condición matricial, del tipoA == 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 todos los elementos de las matrices (a

ij =b

ij ). Basta que haya dos elementos a

ij

y bij diferentes para que las matrices ya no sean iguales.

Análogamente, una condición en la formaA ? =B 

exige que todos los elementos sean diferentes dos a dos (aij ≠b

ij ). Si

dos elementos aij y b

ij iguales para que la condición no se cumpla.

MATLAB dispone de funciones especiales para ayudar en el chequeo de condiciones matriciales. Por ejemplo, la función

 isequal(A, B) devuelve un uno si las dos matrices son idénticas y un cero en caso de que difieran en algo.

Page 83: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

switchLa sentencia switch realiza una función análoga a un conjunto de if...elseif concatenados. Su forma general es la siguiente:

switch switch_expr case case_expr    statement, ..., statement  case {case_expr1, case_expr2, case_expr3, ...}    statement, ..., statement  otherwise    statement, ..., statementend

Switch evalúa la switch_expresion, cuyo resultado debe ser un número escalar o una cadena de caracteres. Este resultado se compara con las case_expr, y se ejecuta el bloque de sentencias que corresponda con ese resultado. Si ninguno es igual a switch_expresion se ejecutan las sentencias correspondientes a otherwise.

Programación de MatlabProgramación de Matlab

Page 84: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Ejemplo

method = 'Bilinear';

switch lower(method)   case {'linear','bilinear'}      disp('Method is linear')   case 'cubic'      disp('Method is cubic')   case 'nearest'      disp('Method is nearest')   otherwise      disp('Unknown method.')end

Programación de MatlabProgramación de Matlab

Page 85: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Estructuras: En matlab las estructuras arreglos que contienen datos de diferentes tipos y tamaños

Creación de estructurasEjemplo:Alumno.nombre='arturo';Alumno.promedio=8.5;Alumno.semestre=3;

Alumno(2).nombre='isabel';Alumno(2).promedio=8.5;Alumno(2).semestre=3;

Estructuras de datos

Programación de MatlabProgramación de Matlab

Page 86: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

TablasEl tipo de datos tabla es útil para datos tabulares. Existen una gran variedad de funciones útiles para la manipulación de este tipo de datos.

Ejemplonombre = {'Arturo';'Isable';'Jorge';'Juan';'Ines'};edad = [38;43;38;40;49];peso = [71;69;51;67;51];altura = [176;133;171;163;149];

T = table(edad,peso,altura,'RowNames',nombre)

Programación de MatlabProgramación de Matlab

Page 87: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Programación de MatlabProgramación de Matlab

Handles a funcionesEs una referencia a la función, permite invocar la función en las siguientes circunstancias:● Pasar una función a otra función● Llamar a funciones fuera de su ámbito● Guardar el handle en un archivo.matFormato:h=@nombre

Page 88: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Programación de MatlabProgramación de Matlab

EjemploCrear un handle h a la funcion ploth=@plot;

Ejemplo[out1, out2, ...] = myFun(in1, in2, ...);fHandle = @miFun;

Para llamar a la funcion[out1, out2, ...] = fHandle(in1,in2, ...);

Page 89: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Programación de MatlabProgramación de Matlab

Funciones anónimas (anonymous function)Es una función que no tiene archivo asociado, si no que esta asociada a una variable de tipo handle a función. Contienen solo una declaración.Formato:NombreFunc = @(ArgNombre) expresión;

Ejemplo          sqr=@(x) x.^2;Se puede llamar como          a = sqr(5)

Page 90: Matlab - efrendavid.orgefrendavid.org/uacj/clases/herr_prog/material/... · El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa

Maestría en Ingeniería Eléctrica Herramientas de Programación

Introducción Introducción

2.7 Manejo de imágenes

● Cargar y guardar imágenes● Representación (color y escala de grises)● Operaciones básicas

● Suma resta● Umbralización

Ejemplo básicos de imágenes

● Imagen negra, ● Imagen blanca● Imagen negra y blanca● Ruido● Suma ruido en la imagen negra-blanca● Mesh de la imagen