seminario de matlab

256
Ing. Andrés Marzo

Upload: jamarzo

Post on 12-Jun-2015

5.142 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Seminario de matlab

Ing. Andrés Marzo

Page 2: Seminario de matlab

Introducción.

Vectores.

Matrices.

Comandos y Funciones útiles.

Cadenas de Texto.

Scripts y Funciones.

Tipos de Datos.

Page 3: Seminario de matlab

Graficas 2D.

Estructuras de Control.

Graficas 3D.

Estructuras y Celdas.

GUI y GUIDE.

Data Acquisition.

Page 4: Seminario de matlab

Perfil de los participantes:

◦ Nombre

◦ Estudios.

◦ Expectativas del curso

◦ Conocimientos de Matlab, programación.

Objetivos al finalizar el curso

Page 5: Seminario de matlab

30 horas repartidas en 10 clases presenciales.

Certificado de aprobación: 70% en la calificación

Certificado de asistencia: 70% de asistencia al curso

Tópico Puntos

Prácticas 30%

Examen Teórico 20%

Examen Final 50%

Total 100%

Page 6: Seminario de matlab

Introducción

Page 7: Seminario de matlab

Lenguaje de Programación.

Alto Rendimiento.

Computación Técnica.

Computación, Visualización y Programación.

Problemas y soluciones en notación Matemática (de

Matrices).

Page 8: Seminario de matlab

Puede realizar funciones de computadora o lenguaje de

programación.

Combina calculo y visualización de graficas.

Relativamente fácil de aprender.

Es interpretado (no compilado), errores son fáciles de

solucionar.

Optimizado para ser rápido en operaciones con

matrices.

Tiene algunos elementos orientados a objetos.

Page 9: Seminario de matlab

No es un lenguaje de programación como C o C++.

Diseñado para computación científica.

Lenguaje interpretado, más lento que un compilador

como C.

Comandos son específicos para su uso en Matlab.

Page 10: Seminario de matlab

Matemáticas y Computación.

Desarrollo y Test de algoritmos.

Modelado, Simulación y Prototipos.

Análisis de Datos, exploración y visualización.

Gráficas de Ingeniería y Científicas.

Desarrollo de Aplicaciones finales (GUI)

Page 11: Seminario de matlab
Page 12: Seminario de matlab

Workspace & Directory

Command History

Barra de MenuCommand Window

Page 13: Seminario de matlab

clc

Clear

Exist(„Name‟)

Help name

Quit

Who, whos

Page 14: Seminario de matlab

Desde la ventana de comandos ingrese:

>> 2 + 3/4*5

¿Cual es el resultado? Observar ventana de comandos y el workspace

Page 15: Seminario de matlab

El símbolo % especifica un comentario.

No es ejecutado por Matlab.

>>%Esto es un comentario

>>x=2+3 % Suma

X=

5

Page 16: Seminario de matlab

No es necesario declarar variables.

Si no se especifica una variable en una operación, MATLAB usa la variable ans como una variable temporal.

>>2+3

ans=

5

Ejecute:

>> ans*5

Verifique el uso de variables y resultado

Page 17: Seminario de matlab

Las variables tienen un limite de tamaño de

nombre de 31 caracteres.

Deben empezar con una letra SIEMPRE.

NO deben contener caracteres especiales, salvo

el “guion bajo” _

Page 18: Seminario de matlab

Comando Descripción

ans Variable temporal que contiene la más reciente respuesta

eps Tolerancia numérica del Matlab

i,j Unidad imaginaria

Inf Infinito

NaN Resultado numérico indefinido

pi El número Π

1

Page 19: Seminario de matlab
Page 20: Seminario de matlab

Un simple número es un escalar.

Un escalar es un caso particular de un arreglo o

matriz.

Un “punto y coma” no permite que se imprima el

resultado en la ventana de comandos, solo se

guarda en el workspace.

Evaluar

>> x=2;y=6+x,x=y+7

Page 21: Seminario de matlab

Símbolo Operación Comando

^ Potenciación a^b

* Multiplicación ab A*b

/ División derecha a/b= a/b

\ División izquierda b/a

+ Suma a+b a+b

- Resta a-b a-b

ba

b

a

a

b

Page 22: Seminario de matlab

Vectores

Page 23: Seminario de matlab

Vectores que “se ven como filas”

Se definen con espacios o comas entre sus

elementos.

>>v = [ 1 3, sqrt(5)]

Verifique el resultado en el workspace.

>> length(v)

Verifique el resultado en el workspace.

Page 24: Seminario de matlab

Puede haber problemas con los espacios.

Ejecute:

v1 = [3+ 4 5]

Verifique el comportamiento

Ejecute:

v2 = [3 +4 5]

Verifique el comportamiento

Page 25: Seminario de matlab

Deben tener la misma dimensión para la suma.

>> v + v2

Pueden multiplicarse por un escalar.

>> v3 = 3*v

Pruebe:

>> v + v1

Page 26: Seminario de matlab

Se pueden formar vectores a partir de otros vectores (variables) ya definidos:

>> w = [1 2 3], z = [8 9]

>> cd = [2*z,-w], sort(cd)

Verifique el comportamiento.

Page 27: Seminario de matlab

Se puede recuperar (ver) el valor de un componente de un vector o cambiarlo haciendo uso de un índice.

El índice se define con el nombre de variable del vector y con los paréntesis para acceder a la posición del elemento a cambiar/ver.

>> w(2) = -2, w(3)

Page 28: Seminario de matlab

Ejecute:

>>1:10

Verifique el resultado.

Cual es la función del operador “:”?

De manera general a : b : c produce un vector con valor inicial a, valor final c e incrementos de b.

Page 29: Seminario de matlab

Se puede usar el operador : para definir vectores:

>> r5 = [1:2:6, -1:-2:-7]

Para obtener los elementos del 3 al 6

>> r5(3:6)

Cual será el resultado de?

>>r5(6:-2:1)

Page 30: Seminario de matlab

Vectores que se ven como columna.

Se definen usando “;”

Pruebe:

>> c = [ 1; 3; sqrt(5)]

>> c2 = [3

4

5]

Page 31: Seminario de matlab

Se puede convertir un vector fila en un vector columna y viceversa.

>> w, w', c, c'

Defina el vector complejo:

>> x = [1+3i, 2-2i]

La transpuesta para x corresponderá a la transpuesta conjugada.

Page 32: Seminario de matlab

Multiplicación de Vector Fila x Columna

>> u = [ 10, -11, 12], v = [20; -21; -22]

>> prod = u*v

Es una multiplicación Matricial!.

>> w = [2, 1, 3], z = [7; 6; 5]

>> u*w

Verifique ambos ejemplos.

Page 33: Seminario de matlab

El siguiente muestra dos maneras de obtener la norma (distancia euclidiana) de un vector:

>> [ sqrt(u*u'), norm(u)]

Page 34: Seminario de matlab

Corresponde al producto Hadamard.

Trabaja sobre vectores del mismo tipo (fila o columna).

>> u.*v‟

Tabulemos la función para

Page 35: Seminario de matlab

Se puede usar también para la división:

>> a = 1:5, b = 6:10, a./b

>> a./a

>> c = -2:2, a./c

>> a.*b -24, ans./c

Verifique el resultado.

Page 36: Seminario de matlab

cat(n,A,B,C,…)find(x)[u v w] = find(A)length(A)linspace(a,b,n)logspace(a,b,n)max(A)[x,k] = max(A)min(A)[x,k] = min(A)size(A)sort(A)sum(A)

Page 37: Seminario de matlab
Page 38: Seminario de matlab

Matrices

Page 39: Seminario de matlab

Ingrese en la ventana de comandos:

>>A = [ 16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1 ]

Verifique el resultado.

Use la flecha “hacia arriba” y reemplace los

espacios en blanco con “comas”.

Verifique el resultado.

Ejecute: A‟

Verifique el resultado

Page 40: Seminario de matlab

Subíndices será la manera de acceder a un elemento de una matriz.

Usa los paréntesis y el nombre de la variable.

>>A(1,4)

Verifique el resultado y la relación con A.

Page 41: Seminario de matlab

>>A(1:4,4)

Verifique el resultado.

Ejecute:

>>A(:,4)

Verifique el resultado?

Cual es la función del operador “:” manejando subíndices?

Page 42: Seminario de matlab

Se puede utilizar el operador : para generar matrices:

>> D = [1:5; 6:10; 11:2:20]

Verifique el resultado anterior.

Page 43: Seminario de matlab

En MATLAB en general todos son arreglos.

Un vector columna será una matriz de mx1.

Un vector fila será una matriz de 1xn.

Page 44: Seminario de matlab

El comando size nos devuelve la dimensión de la matriz que se usa como parámetro.

>> size(A)

>> size(ans)

El ultimo comando muestra que el valor retornado por size es en si mismo una matriz de 1x2.

Page 45: Seminario de matlab

También se puede guardar las dimensiones de una matriz en variables separadas.

>> [r c] = size(A'), S = size(A')

Verifique los valores de r y c y de S.

Verifique también los tipos de dato (arreglo) de dichas variables.

Page 46: Seminario de matlab

MATLAB provee algunas funciones propias de un tamaño deseado.

ones(m,n) da una matriz de mxn llena de unos.

>> P = ones(2,3)

zeros(m,n) da una matriz de mxn llena de ceros.

Z = zeros(2,3)

Page 47: Seminario de matlab

Es una matriz de ceros pero en su diagonal principal esta llena de unos.

>> I = eye(3), x = [8; -4; 1], I*x

Note que eye(3) es una matriz cuadrada identidad.

Verifique el resultado de I*x.

Page 48: Seminario de matlab

Por otro lado si A es una matriz el comando diag(A) extrae la diagonal principal de dicha matriz, incluso si la matriz A no es cuadrada.

>> F = [0 1 8 7; 3 -2 -4 2; 4 2 1 1]

>> diag(F)

Page 49: Seminario de matlab

A veces es necesario generar matrices grandes a partir de otras mas pequeñas (o vectores).

>> C=[0 1; 3 -2; 4 2]; x=[8;-4;1];

>> G = [C x]

>> G1 = [C ; x‟]

Page 50: Seminario de matlab

Se pueden construir matrices usando también funciones y operaciones sobre matrices:

>> J = [1:4; 5:8; 9:12; 20 0 5 4]

>> K = [ diag(1:4) J; J' zeros(4,4)]

Pruebe el siguiente comando:

>> spy(K), grid

Grafica la escasez del patrón en la matriz

Page 51: Seminario de matlab
Page 52: Seminario de matlab

Indica el ultimo elemento.

Ejemplo:

A = magic(5)

B = A(end,2:end)

Verifique el resultado.

Page 53: Seminario de matlab

X = ones(r,c) % Crea matriz de unos

X = zeros(r,c) % Crea matriz de ceros

A = diag(x) % Crea matriz cuadrada xondiagonal x

[r,c] = size(A) % Retorna las dimensiones de la matriz

+ - * / % Operaciones standard

.+ .- .* ./ % Operador .

v = sum(A) % Vector con la suma de lascolumnas

Page 54: Seminario de matlab

X = A‟ % Matriz transpuesta X = inv(A) % Matriz inversa de una matriz

cuadrada X = pinv(A) % Pseudo inversa X = chol(A) % Descomposicion Cholesky d = det(A) % Determinante [X,D] = eig(A) % Eigenvalores y eigenvectores [Q,R] = qr(X) % Descomposición QR [U,D,V] = svd(A) % Descomposicion a un

simple valor

Page 55: Seminario de matlab

Condición necesaria y suficiente para que una matriz sea invertible es que no sea singular, es decir, que su determinante sea no nulo |A| ≠ 0 <----> det(A)~=0

Page 56: Seminario de matlab

En Matlab:

>>inversaA=inv(A)

¿Cómo compruebo?

Page 57: Seminario de matlab

Comandos y Funciones útiles

Page 58: Seminario de matlab

Expresiones Matemáticas elementales:

>> help elfun

Expresiones Matemáticas especiales:

>>help specfun

Expresiones de Matrices elementales:

>>help elmat

Page 59: Seminario de matlab

Para genera números aleatorios usamos las funciones:

rand, randn, randint.

Verifique el uso de:

>> rand(2)

>> randn(2)

>> randint(2,2,[-4 4])

Page 60: Seminario de matlab

Para genera números aleatorios usamos las funciones:

rand, randn, randint.

Verifique el uso de:

>> rand(2)

>> randn(2)

>> randint(2,2,[-4 4])

Page 61: Seminario de matlab

Se utiliza el comando sum.

Genere un matriz para probar los siguientes comandos:

Page 62: Seminario de matlab

El comando find devuelve una lista con las posiciones de los elementos de un vector que satisfacen una determinada condición.

>> x = -1:.05:1;

>> y = sin(3*pi*x).*exp(-x.^2);

>> k = find(y > 0.2)

Verifique el contenido de k e interprételo.

Page 63: Seminario de matlab

Opera de manera muy similar en matrices:

>> A = [ -2 3 4 4; 0 5 -1 6; 6 8 0 1]

>> k = find(A==0)

Verifique e interprete el contenido de k.

Find en una matriz realmente primero reordena (reshape) la matriz en un vector para buscar.

Page 64: Seminario de matlab
Page 65: Seminario de matlab

Los índices del reordenamiento de la matriz quedan:

>> n = find(A <= 0)>> A(n) “n” devuelve una lista de las posiciones de la

matriz A que cumplen ser menores que cero, luego A(n) nos devuelve los valores de los elementos seleccionados.

Page 66: Seminario de matlab

En computación, la operación modulo encuentra el residuo de la división de un numero a otro.

En Matlab:

Page 67: Seminario de matlab

Se manejan complejos automáticos:

>> c=15+sqrt(-1)

Y valores “excepción” correctamente:

>> a=123/0

>> b=0/0

>> Inf-Inf

Page 68: Seminario de matlab

Representar el siguiente polinomio en Matlab: s3 + 2s2 + 3s + 4

>> p=[1 2 3 4];

Roots(p) < --- > Encuentra las raíces del polinomio

De modo complementario, se puede calcular un polinomio a partir de sus raices usando la funcion poly:

p2=poly([-1 -2]);

Page 69: Seminario de matlab

Un polinomio puede ser evaluado en un punto determinado usando polyval(p,s), donde p es el polinomio y s es el punto donde va a ser evaluado. Por ejemplo:

>>p2=[1 3 2]; a=[1 2; 3 4]; polyval(p2,a)

Si se introduce un vector o una matriz, en lugar de un valor individual, la evaluacion se hace elemento a elemento.

Page 70: Seminario de matlab

Podemos realizar cómodamente operaciones de multiplicación y división de polinomios mediante las funciones conv y deconv.

>>conv([1,2],[2,0])

Page 71: Seminario de matlab

La función residue, descompone el cociente de una fracción en fracciones parciales.

Teniendo un cociente de la forma:

La función es:

>>[r,p,k] = residue(b,a)

Page 72: Seminario de matlab

Entrega los resultados para:

Descomponga:

Page 73: Seminario de matlab

En fracciones parciales:

>> b=[1 1 1 2];

>> a=[1 0 3 0 2];

>> [r,p,k]=residue(b,a)

El resultado será:

Page 74: Seminario de matlab

En fracciones parciales:

>> b=[1 1 1 2];

>> a=[1 0 3 0 2];

>> [r,p,k]=residue(b,a)

El resultado será:

Page 75: Seminario de matlab

Use representación en MATLAB para resolver un sistema lineal del tipo

Page 76: Seminario de matlab

Ejemplo Práctico: Circuito eléctrico

Page 77: Seminario de matlab

Ejemplo Práctico: Circuito eléctrico

Leyes de Kirchof:

-V1+R1*i1+R4*i4=0

-R4*i4+R2*i2+R5*i5=0

-R5*i5+R3*i3+V2=0

i1=i2+i4

i2=i3+i5

Page 78: Seminario de matlab

Ejemplo Práctico: Circuito eléctrico

(R1+R4)*i1-R4*i2 =V1

-R4*i1+(R2+R4+R5)*i2-R5*i3=0

R5*i2-(R3+R5)*i3 =V2

Tenemos 3 ecuaciones y 3 incógnitas (i1,i2,i3)

¿Cuál es la corriente en cada ramal del circuito?

Page 79: Seminario de matlab

La función INPUT imprime un mensaje en la ventana de comandos y devuelve el resultado de una expresión tecleada por el usuario.

INPUT espera hasta que el usuario ingrese un valor numérico o una expresión

Page 80: Seminario de matlab

Cualquier expresión válida de MATLAB es aceptada por INPUT.

>> edad = input(„Ingrese la edad: ')

En el caso que sea una cadena de texto es recomendable:

>> nombre = input('¿Cómo te llamas?','s')

Page 81: Seminario de matlab

La función DISP imprime un mensaje en la ventana de comandos, puede ser un mensaje de texto o variables.

>> disp('El programa ha terminado')

>> A=rand(4,4)

>> disp(A)

Page 82: Seminario de matlab

Funciones para problemas de Integración numérica:

quad, quad8.

Solución de Ecuaciones Diferenciales.solver,ode23, ode45 y muchos otros.

Solución de Ecuaciones No linealesfmin, fsolve, etc.

InterpolaciónSpline,etc.

Page 83: Seminario de matlab

Scripts y Funciones

Page 84: Seminario de matlab

Son archivos de texto (.m) que contienen

comandos de MATLAB.

Para ejecutar los comandos de ese archivo se

debe escribir el nombre del archivo en la ventana

de comandos.

Las variables y resultados son de ámbito

GLOBAL.

Page 85: Seminario de matlab

Debe estar contenido en el directorio actual para

poder ejecutarlo (F5 o como comando).

Los nombres de los scripts deben seguir la regla

de las variables de MATLAB.

Mucho ojo con los espacios.

Page 86: Seminario de matlab

El nombre del script no debería interferir con alguna función o con una variable (error común).

Los comentarios en MATLAB se generan con el símbolo %:

>> %Esto es un comentario

Page 87: Seminario de matlab
Page 88: Seminario de matlab

Puede existir aplicaciones que requieran a los mismos datos frecuentemente

A=[2,4;7,9]

Page 89: Seminario de matlab
Page 90: Seminario de matlab

Son “user-defined” a diferencia de las “built-in”, también escritas en .m.

Las buit-in también son llamadas funciones de llamada.

Las user-defined son llamadas funciones de definición.

SIEMPRE reciben parámetros para realizar los cálculos.

Page 91: Seminario de matlab

Los comandos dentro de las funciones operan sobre los parámetros.

Las variables y resultados son de ámbito LOCAL.

Los .m de funciones deben encontrarse en el directorio actual para poder ser llamadas.

Page 92: Seminario de matlab

Luego de ser creadas y siempre que estemos en el directorio actual donde esta contenido el .m de la función de definición, entonces la función se convertirá en de llamada.

También se puede agregar funciones de definición a MATLAB.

Page 93: Seminario de matlab

El nombre de la función no DEBERIA interferir con alguno de una “buit-in”, ni de otra variable (error común).

El nombre del archivo .m conteniendo a la definición de la función DEBE ser igual al nombre de la función.

Page 94: Seminario de matlab

La primera línea del archivo debe tener el formato:

Luego de esta línea se puede documentar la función usando comentarios.

Page 95: Seminario de matlab

Cuerpo de la Función:

function [out1,out2,...] = nombre_fichero(in1,in2,...)

% Comentarios adicionales para el help

comandos de MATLAB

return;

Page 96: Seminario de matlab
Page 97: Seminario de matlab

Sabiendo que la resistencia equivalente de 3 resistencias conectadas en serie

es:rT= r1 + r2 + r3Y que si dichas resistencias se conectan en

paralelo, entonces su resistencia equivalente es:

1/rT = 1/r1 + 1/r2 + 1/r3Escribir una función tal que dadas 3

resistencias calcule su resistencia equivalente conectadas en paralelo y en serie.

Page 98: Seminario de matlab

Escriba una función que convierta la temperatura en grados Fahrenheit (ºF) a grados centígrados (ºC): Use la función input y fprintf mostrando una mezcla de texto y números. Recuerde que la formula de conversión es C = 5/9 * (F-32).

Page 99: Seminario de matlab

Escriba una función en Matlab, con 2 entradas y 2 salidas que determine la altura en centímetros y masa en kilogramos de una persona de altura en pulgadas y peso en libras.

Determine en unidades de SI la altura y peso de una persona de 5 ft.15 in que pesa 180 lb.

Page 100: Seminario de matlab
Page 101: Seminario de matlab

Tipos de Datos

Page 102: Seminario de matlab
Page 103: Seminario de matlab

>>tipo= class(x)

Nos devuelve el tipo de dato de “x”.

También existen comandos que nos dan

información lógica sobre cada tipo:

isinteger(x), isfloat(x), ischar(x), islogical(x),

iscell(x), isstruct(x).

isempty(x), isnan(x), isinf(x).

Page 104: Seminario de matlab

El tipo de Dato entero corresponde:

El tipo de Dato float corresponde:

Page 105: Seminario de matlab

Para convertir se usa el nombre del tipo a generar como si fuera función:

>> a = 522.08

>> int8(a)

>> int16(a)

Verifique el redondeo.

Page 106: Seminario de matlab

round: redondea al entero mas proximo.

floor: redondea a –inf.

ceil: redondea a +inf.

fix: redondea hacia cero.

Page 107: Seminario de matlab

>> x = pi*(-1:3), round(x)

>> fix(x)

>> floor(x)

>> ceil(x)

>> sign(x), rem(x,3)

Page 108: Seminario de matlab

MATLAB maneja el tipo Carácter.

Una cadena es un vector de caracteres.

Un Texto es una matriz de caracteres.

>> t1 = 'A'

Asigna el valor de „A‟ al arreglo de carácter 1x1 t1.

Page 109: Seminario de matlab

>> t2 = 'BCDE'

Asigna el valor BCDE al arreglo de caracteres 1x4 t2.

Las cadenas creadas se pueden tomar como arreglos regulares y manipularlos.

>> t3 = [t1,t2]

Page 110: Seminario de matlab

El direccionamiento funciona como en vectores:

Page 111: Seminario de matlab

Asigne:

>> t4 = [t3,' are the first 5 ';...

'characters in the alphabet.']

Asigna el valor:

'ABCDE are the first 5 '

'characters in the alphabet.'

Page 112: Seminario de matlab

Asigne:

>> t4 = [t3,' are the first 5 „,...

'characters in the alphabet.']

Asigna el valor:

'ABCDE are the first 5 '

'characters in the alphabet.'

Page 113: Seminario de matlab

Al arreglo de 2x27 t4, es NECESARIO que ambas filas del arreglo tengan el mismo numero de caracteres (elementos), eso es una regla general de arreglos en MATLAB.

Los … significan que el comando continua en la línea siguiente.

Page 114: Seminario de matlab

Todo carácter tiene un equivalente en valor numérico.

str2num convierte una cadena a su correspondiente representación numérica.

int2str y num2str convierte respectivamente un entero y un numero real a su correspondiente cadena de caracteres.

Page 115: Seminario de matlab

Deseamos generar la cadena: „El valor de pi es 3.1416'.

[„El valor de pi es ',num2str(pi)].

Otro ejemplo:

>> N = 5; h = 1/N;

>> ['The value of N is ',int2str(N),...

', h = ',num2str(h)]

Page 116: Seminario de matlab

El operador == realiza comparaciones entre vectores (elemento a elemento)

Page 117: Seminario de matlab
Page 118: Seminario de matlab
Page 119: Seminario de matlab

Graficas

Page 120: Seminario de matlab

“Una imagen vale mas que mil palabras”.

Es más fácil identificar patrones en una grafica

que en una tabla con números.

Ingenieros frecuentemente usan gráficas para

comunicar sus ideas a otros de una mejor

manera.

Graficar, tiene sus reglas que un ingeniero debe

seguir para presentar conclusiones correctas

acerca de los datos presentados

Page 121: Seminario de matlab
Page 122: Seminario de matlab

1. Cada eje debe ser etiquetado con la cantidad graficadas y las unidades.

2. Usar espaciado adecuado. No muy disperso, no muy denso.

3. Si se grafican 2 curvas, cada una debe tener una leyenda que lo identifique.

4. Si se van a usar múltiples graficas, use un titulo para cada una.

5. Si esta graficando cada medida de datos, diferencia cada uno con un símbolo como circulo, punto, triangulo.

Page 123: Seminario de matlab

6. Algunas veces, los símbolos están unidos por líneas que ayudan a visualizar los datos, especialmente si hay pocos puntos. Para hacer esto, es necesario tener conocimiento de que sucede entre cada punto.

7. Si está graficando puntos generados por la evaluación de una función, no use un símbolo para graficar los puntos. Use líneas continuas.

Page 124: Seminario de matlab

6. Algunas veces, los símbolos están unidos por líneas que ayudan a visualizar los datos, especialmente si hay pocos puntos. Para hacer esto, es necesario tener conocimiento de que sucede entre cada punto.

7. Si está graficando puntos generados por la evaluación de una función, no use un símbolo para graficar los puntos. Use líneas continuas.

Page 125: Seminario de matlab

La forma basica en Matlab para realizar una grafica XY es plot(x,y).

Si x y y son vectores, una curva es graficada con los valores de x en la abscisa y y en la ordenadas.

x=[0:0.1:52];y=0.4.*sqrt(1.8*x);plot(x,y);xlabel(„Distancia (Km)‟);ylabel(„Altura(Km)‟);title(„‟Altura del cohete en función de su distancia

al suelo);

Page 126: Seminario de matlab
Page 127: Seminario de matlab
Page 128: Seminario de matlab

Otra forma:

x=[0:0.1:52];

y=0.4.*sqrt(1.8*x);

plot(x,y);

xlabel('Distancia (Km)'),ylabel('Altura(Km)'),...

title('Altura del cohete en función de su distancia al suelo');

Page 129: Seminario de matlab

>> x = 0:pi/100:2*pi;

>> y = sin(x);

>> plot(x,y)

Page 130: Seminario de matlab

Para graficar y=sin(3*pi*x) para el rango [0,1] se muestrea la función a un numero suficientemente grande de puntos y luego se los une con líneas rectas.

Para tomar N+1 puntos igualmente espaciados a una distancia h:

>> N = 10; h = 1/N; x = 0:h:1;

Page 131: Seminario de matlab

>> y = sin(3*pi*x);

>> plot(x,y)

Verifique el gráfico e identifique que el numero N es muy pequeño aun.

Cambie N=100 y verifique el resultado

Page 132: Seminario de matlab

El “seno” es una función continua.

MATLAB trabaja con datos discretos.

PLOT realiza una interpolación lineal entre esos datos para graficar.

Mayor cantidad de puntos (muestras) harán que la gráfica sea prácticamente “continua”.

Page 133: Seminario de matlab

Grafica líneas de guía dependiendo el correspondiente “tick label”.

>>grid

>>grid on

>>grid off

Page 134: Seminario de matlab

Con el comando axis Matlab selecciona los limites de los ejes.

Sintaxis: axis[(xmin xmax ymin ymax)]

Notar que a diferencia de un arreglo, no se pueden usar comas.

Variantes:

>>axis square

>>axis equal

>>axis auto

Page 135: Seminario de matlab

Con el comando axis Matlab selecciona los limites de los ejes.

Sintaxis: axis[(xmin xmax ymin ymax)]

Notar que a diferencia de un arreglo, no se pueden usar comas.

Variantes:

>>axis square

>>axis equal

>>axis auto

Page 136: Seminario de matlab

Con el comando axis Matlab selecciona los limites de los ejes.

Sintaxis: axis[(xmin xmax ymin ymax)]

Notar que a diferencia de un arreglo, no se pueden usar comas.

Variantes:

>>axis square

>>axis equal

>>axis auto

Page 137: Seminario de matlab
Page 138: Seminario de matlab

Si y es un complejo, plot(y) grafica la parte imaginaria vs la parte real. En este caso plot(y) es

z=0.1+0.9i;

n=[0:0.01:10];

plot(z.^n),xlabel('Real'),ylabel('Imaginario')

igual a plot(real(y),imag(y))

Page 139: Seminario de matlab
Page 140: Seminario de matlab

Matlab automaticamente analiza la función que será graficada y decide cuantos puntos se usará de tal manera que se muestren todas las características de la función.

Sintaxis:

>>fplot(„string‟,[xmin xmax])

„string‟: Describe la función a ser graficada.

[xmin xmax] : Valores mínimo y máximo de la variable independiente.

Page 141: Seminario de matlab

f='cos(tan(x))-tan(sin(x))';

fplot(f, [1 2])

Page 142: Seminario de matlab

Realice el ejemplo anterior con el comando plot.

Otra forma de usar fplot es la siguiente:

>>[x y]= fplot('string', limites)

Donde limites puede ser [xmin xmax] o [xminxmax ymin ymax].

Retorna los valores de la abscisa y ordenada en un vector columna para x y y.

Page 143: Seminario de matlab

Se puede graficar polinomios fácilmente usando la

función polyval, la cual evalúa el polinomio en los

valores especificados por la variable

independiente.

Esto es útil para no tener que escribir toda la

expresión del polinomio.

Ejemplo:

x=[-6:0.01:6];

p=[3,2,-100,2,-7,90];

plot(x,polyval(p,x)),xlabel('x'),ylabel('p')

Page 144: Seminario de matlab
Page 145: Seminario de matlab

Plot puede recibir un tercer argumento.

Tercer argumento es una cadena que recibe como

primer carácter el color y segundo el estilo de

línea.

plot(x,y,'style_color_marker')

Page 146: Seminario de matlab
Page 147: Seminario de matlab

x = 0:pi/100:2*pi;

y = sin(x);

plot(x,y)

y2 = sin(x-.25);

y3 = sin(x-.5);

plot(x,y,x,y2,x,y3)

legend('seno(x)','seno(x-.25)','seno(x-.5)')

Page 148: Seminario de matlab
Page 149: Seminario de matlab

Cada llamado de la función PLOT es una petición

para crear un nuevo “eje” (axis – ventana donde

se contiene el gráfico).

Cada llamado de PLOT entonces reemplazará la

gráfica anterior.

>>hold on

“Mantiene” el gráfico actual en el eje actual.

Page 150: Seminario de matlab

Se puede llamar muchas veces a PLOT pero no

se reemplazará el gráfico hasta que exista un:

>>hold off

Ejercicio:

Realizar el ejemplo anterior usando comando hold.

Page 151: Seminario de matlab
Page 152: Seminario de matlab

Realice:

Page 153: Seminario de matlab

Matlab puede crear figuras que contengan un

arreglo de graficas, llamadas subplots. Estas son

útiles por ejemplo cuando tenemos que comparar

los mismos datos pero con diferente tipo de ejes.

Divide la ventana de graficos en un arreglo mxn en donde se pueden plotear mxngráficos.

Se enumeran de izquierda a derecha, de arriba hacia abajo.

Page 154: Seminario de matlab

Sintaxis:

Subplot(m,n,p)

Este comando divide la ventana en un arreglo

rectangular de m filas y n columnas.

La variable p le dice a Matlab donde va a colocar la

respectiva figura del comando plot.

Page 155: Seminario de matlab
Page 156: Seminario de matlab

clf, limpia la figura actual.

close 1, cierra la ventana llamada “Figure 1”.

figure, abre una nueva ventana.

figure(9), abre una nueva ventana “Figure 9”.

Page 157: Seminario de matlab

Para crear una leyenda use el comando legend.

>>legend(„string1‟,‟string2‟).

Este comando automáticamente obtiene de la grafica el tipo de línea usado para cada curva o datos.

Ejemplo: x=[0:0.01:2];

y=sinh(x);

z=tanh(x);

plot(x,y,x,z,'--'),xlabel('x'),...

ylabel('hiperbolico seno y tangente')

legend('sinh(x)','tanh(x)')

Page 158: Seminario de matlab
Page 159: Seminario de matlab

Otra forma de distinguir curvas es colocando una

etiqueta junta a cada una.

Se utiliza el comando gtext, que permite ajustarla

usando el mousse o con el comando text que

requiere que se le especifique las coordenadas.

>>gtext(„string‟)

>>text(x,y,‟string‟)

Page 160: Seminario de matlab

Ejemplo:

Page 161: Seminario de matlab
Page 162: Seminario de matlab

Todas las propiedades de cada objeto del gráfico

(figura, ejes, elemento gráfico,...) están guardadas

en "handles“

gcf current figure, gcacurrent axis

get(handle) muestra todos las propiedades que se

pueden cambiar.

Page 163: Seminario de matlab

set(handle,'PropertyName','Value',...) cambia propiedades.

Para personalizar el eje x sin dependencia del vector:

set(gca,'Xtick',[1 2 3 4 5 6]);

set(gca,'XtickLabel',['ene';'feb';'mar';'abr';'may';'jun']);

Page 164: Seminario de matlab
Page 165: Seminario de matlab

>>x=[1 3 5 9 1 1 6 8 2 3 6 1 2 9 3 4 9 8];

>>hist(x)

>>figure

>>bar(x)

Interprete los resultados.

Page 166: Seminario de matlab
Page 167: Seminario de matlab
Page 168: Seminario de matlab

La función polyfit(x,y,n) de Matlab calcula la aproximación lineal por mínimos cuadrados de un conjunto de puntos dados en los vectores x e y. La aproximación lineal se logra haciendo n=1.

Page 169: Seminario de matlab

Ejemplo:

x = [0.1, 0.4, 0.5, 0.7, 0.7, 0.9];

y = [0.61, 0.92, 0.99, 1.52, 1.47, 2.03];

c = polyfit(x,y,1)

c1 = x(1):0.1:x(length(x))

c2 = polyval(c,c1)

plot(c1,c2);hold on

plot(x,y,'x')

axis([0,1,0,2.1])

xlabel('x')

ylabel('y„)

Page 170: Seminario de matlab

x = [0.1, 0.4, 0.5, 0.7, 0.7, 0.9];

y = [0.61, 0.92, 0.99, 1.52, 1.47, 2.03];

c = polyfit(x,y,1)

a = input('escriba el valor de c1 : ')

b = input('Escriba el valor de c2 : ')

g = a.*x + b

plot(x,g,'xg',x,g,'m')

axis([0,1,0,2.1])

xlabel('x')

ylabel('y')

text(0.35,1.8, 'g(x) = a*x + b ')

Page 171: Seminario de matlab

La temperatura del café en una taza de porcelana a la temperatura del cuarto (68ºF) fue medida varias veces resultando en la tabla:

Desarrolle un modelo de la temperatura del café como una función del tiempo y use el modelo para estimar cuanto le tomaría alcanzar la temperatura de 120ºF

Tiempo (seg) Temperatura (ºF)

0 145

620 130

2266 105

3482 90

Page 172: Seminario de matlab

Graficas 3D

Page 173: Seminario de matlab

También se basa en graficar puntos:

>> t=0:pi/50:10*pi;

>> plot3(sin(t),cos(t),t)

Esta gráfica es paramétrica.

Un solo parámetro resulta en una gráfica de linea. Se extiende la etiqueta zlabel(„texto‟)

Page 174: Seminario de matlab

Se deben generar los valores a graficar, estos deben ser una matriz.

Ejemplo:

>> z = peaks(10)

>> plot(z)

Page 175: Seminario de matlab

>> mesh(z)

>> contour(z,10)

>> surf(z)

Se puede cambiar “la vista” desde la ventana de comandos:

>> view(0,0)

>> view(90,0)

Page 176: Seminario de matlab

Una superficie también se define matemáticamente con una función f(x,y).

Para cada valor de (x,y) se calcula “la altura” de la función: z = f(x,y).

Para graficar esto debemos definir un rango de “x” y de “y” para el gráfico.

Page 177: Seminario de matlab

Definiendo el dominio:

x = 2:0.5:4; y = 1:0.5:3;

Definido el dominio debemos definir la “grilla” de valores que servirán de los puntos (x,y) para graficar.

Esto es como relacionar “x” y “y”.

Page 178: Seminario de matlab

>> [X,Y] = meshgrid(2:.5:4, 1:.5:3);

>> X

Si tomamos el i-esimo punto desde la izquierda y el j-esimo punto desde debajo de la grilla como el correspondiente (i,j) entrada en una matriz, entonces (X(i,j),Y(i,j)) serían las coordenadas de ese punto.

Page 179: Seminario de matlab

Grafique la siguiente función:

>> [X,Y] = meshgrid(2:.2:4, 1:.2:3);

>> Z = (X-3).^2-(Y-2).^2;

>> mesh(X,Y,Z)

>> title(„Silla'), xlabel('x'),ylabel('y')

Page 180: Seminario de matlab

Grafique la siguiente superficie:

Encuentre los valores máximos de la función.

Page 181: Seminario de matlab

>> [X,Y] = meshgrid(-2:.1:2,-2:.2:2);

>> f = -X.*Y.*exp(-2*(X.^2+Y.^2));

>> figure (1)

>> mesh(X,Y,f), xlabel('x'), ylabel('y'), grid

>> figure (2), contour(X,Y,f)

>> xlabel('x'), ylabel('y'), grid, hold on

Page 182: Seminario de matlab

Para encontrar los máximos:

>> fmax = max(max(f))

>> kmax = find(f==fmax)

>> Pos = [X(kmax), Y(kmax)]

>> plot(X(kmax),Y(kmax),'*')

>> text(X(kmax),Y(kmax),' Maximo')

Page 183: Seminario de matlab

x=[-20,-10,-5,-2,-1,0,1,2,5,10,20]/10;

y=x;

[X,Y]=meshgrid(x,y);

Z=cos(X)+cos(Y);

subplot(3,1,1)

surf(Z);

axis([0 11 0 11 0 2])

subplot(3,1,2)

surf(x,y,Z);

subplot(3,1,3)

surf(X,Y,Z);

Page 184: Seminario de matlab
Page 185: Seminario de matlab

Programando con Matlab

Page 186: Seminario de matlab

Operadores Lógicos.

Realizar funciones cuyas acciones dependan del

resultado de otras operaciones.

Repetir cálculos un número especifico de veces o

hasta que una condición se satisfaga.

Page 187: Seminario de matlab

Operador Relacional Significado

< Menor que

<= Menor o igual a

> Mayor que

>= Mayor o igual a

== Igual a

~= No igual a

Page 188: Seminario de matlab

Operador Nombre Definición

~ NOT ~A retorna 1‟s cuando sea 0 y 0‟s cuando sea 1

& AND A&B: retorna 1‟s cuando A y B no son cero y retorna cero cuando A y B no son cero.

| OR A|B retorna 1‟s cuando al menos un elemento de A o B sea 1. Caso contrario retorna 0.

Xor(A,B) Exclusive OR Xor(A,B) retorna 1 cuando los elementos de A o B son diferentes de 0. Caso contrario retorna 0.

Page 189: Seminario de matlab

1. Paréntesis.

2. Operadores aritméticos y NOT. Evaluados de

izquierda a derecha.

3. Operadores Relacionales, evaluados de

izquierda a derecha.

4. Operadores Lógicos, evaluados de izquierda a

derecha.

Page 190: Seminario de matlab

La declaracion condicional en Matlab nos permite escribir programas que tomen decisiones.

Contienen uno o mas declaraciones of, elsey elseif.

La declaración end determina el fin de una declaración condicional.

Page 191: Seminario de matlab

if expresiones lógicasDeclaraciones

end

Evalúa una condición lógica y si dicha expresión evalúa un

resultado POSITIVO (1) entonces “selecciona” ejecutar

un grupo de instrucciones, sino evalúa otro grupo o

sale de la condición.

Page 192: Seminario de matlab

if expr1

comandos_matlab

elseif expr2

otro_comandos_matlab

...

else

otros_comandos_matlab

end

Page 193: Seminario de matlab

t = rand(1)

if t >0.5

disp(“valor es mayor que 0.5”)

elseif t <0.25

disp(“valor es menor que 0.25”)

else

disp(“valor está entre 0.25 y 0.5”)

nd

Page 194: Seminario de matlab

El uso de lazos es o debería ser MUY LIMITADO en MATLAB por el uso del operador :

Los lazos son grandes consumidores de tiempo.

Tareas de optimización regularmente se encargan de evitar los lazos.

Page 195: Seminario de matlab

Se recomienda para: Repetir la ejecución de comandos por un número definido de veces.

for variable = expresión

comandos_matlab

end

“expresión” debe definir el número de veces que se ejecutan los comandos, variable controla ese numero de repeticiones.

Page 196: Seminario de matlab

Imprimir el cuadrado de los 5 primerosnúmeros naturales:

for i=[1, 2, 3, 4, 5]

disp(i^2)

end

Otra forma de usar el for:

“for i=1:5”

Page 197: Seminario de matlab

Imprimir el cuadrado de los númerosdecimales de una cifra decimal de 0 a 1, enforma decreciente, es decir empezando por1, 0.9, 0.8, ... 0.1, 0:

for i=1:-0.1:0

disp(i^2)

end

Page 198: Seminario de matlab

Uso de Matriz para asignar valores

matriz = [ 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4]

for x = matriz

x

end

Page 199: Seminario de matlab

Creación de subplots usando FOR.

>> x = -1:0.05:1;

>> for n = 1:8

>> subplot(4,2,n), plot(x,sin(n*pi*x))

>> end

Page 200: Seminario de matlab

El comando find es otro ejemplo de un lazo implicito. La declaración y=find(x>0) es equivalente a:

x=[0:20];

j=0;

for i=1:length(x)

if x(i)>5

j=j+1;

y(j)=i;

end

end

Page 201: Seminario de matlab

Se usa regularmente cuando no se conoce en primera instancia cuantas repeticiones se deben ejecutar.

Las repeticiones dependerán de la expresión condicional que se evalúa.

MIENTRAS se cumpla sigue la repetición.

while expresión

comandos_matlab

end

Page 202: Seminario de matlab

Imprimir el valor de x, mientras este seapositivo, decrementando cada vez x en 17:

x = 100

while x >0

disp(x)

x = x - 17;

end

Page 203: Seminario de matlab

Alternativa a if, elseif y else.

switch expresion de entrada(escalar o string)

case valor1

declaraciones1

case valor2

declaraciones2

otherwise

declaracionesn

end

Page 204: Seminario de matlab

Alternativa a if, elseif y else.

switch expresion de entrada(escalar o string)

case valor1

declaraciones1

case valor2

declaraciones2

otherwise

declaracionesn

end

Page 205: Seminario de matlab

Break: Para romper un lazo.

Continue: Puede ser usado para salir de un lazo

for y pasar inmediatamente a la siguiente iteración

del lazo, saltando las declaraciones que falten.

Return: Para salir y retornar los valores actuales

en la función

Page 206: Seminario de matlab

Hipermatrices

Page 207: Seminario de matlab

Matrices de mas de dos dimensiones.

El tercer subindice representa la tercera dimensión: “La profundidad de la hipermatriz”.

Page 208: Seminario de matlab

Se muestra a continuación cómo organizar las matrices x1 y x2 de 3x3 en dos páginas, o sea en un arreglo x de 3x3x2. (La variable x debe estar inicialmente vacía o no existir):

x1=[1 2 3; 4 5 6; 7 8 9]

x2=[10 20 30; 40 50 60; 70 80 90]

Page 209: Seminario de matlab

x(:,:,1)=x1;

x(:,:,2)=x2;

La información quedará organizada como se muestra en la figura:

Page 210: Seminario de matlab

Creación a partir de otras matrices de dos dimensiones:

A(:,:,1)=[1 2 3; 4 5 6]

A(:,:,2)=[2 3 4; 5 6 7]

Las funciones comunes para uso con matrices, también pueden manejar hipermatrices.

Page 211: Seminario de matlab

M=randn(2,3,2)M(:,:,1) =

-0.4326 0.1253 -1.1465-1.6656 0.2877 1.1909

M(:,:,2) =

1.1892 0.3273 -0.1867-0.0376 0.1746 0.7258

>> A=zeros(2,3); B=ones(2,3); Por su naturaleza la concatenación se realiza a través

de funciones.

Page 212: Seminario de matlab

¿Recuerdan la función CAT?

La función cat concatena arreglos.

Recibe 3 parámetros el primero es la dimensión a lo largo de la cual concatenará 2 matrices pasadas como parámetros.

cat(2,A,B) <--->[A,B].

cat(1,A,B) <--->[A;B].

¿Y cat(3,A,B)?

Page 213: Seminario de matlab

Tienen reglas especiales para usar funciones con ellas.

Todas las funciones de MATLAB que operan sobre escalares (sin(), cos(), etc.) se aplican sobre hipermatrices elemento a elemento (igual que sobre vectores y matrices).

Page 214: Seminario de matlab

Las funciones que operan sobre vectores(sum(), max(), etc.) se aplican a matrices ehipermatrices según la primera dimensión,resultando un array de una dimensióninferior.

Page 215: Seminario de matlab

Las funciones matriciales propias del ÁlgebraLineal (det(), inv(), etc.) no se pueden aplicar ahipermatrices. Para poderlas aplicar hay queextraer primero las matricescorrespondientes (por ejemplo, con eloperador dos puntos (:)).

Page 216: Seminario de matlab

reshape(x, 3, 6);

Interprete los resultados.

Page 217: Seminario de matlab

Estructuras y Celdas

Page 218: Seminario de matlab

Permiten guardar valores de diferente tipo de dato

bajo un mismo nombre.

Organizan la información, siguen un modelo de

campo-valor.

El acceso a los elementos de cada una de las

claves se hace con “.”

Page 219: Seminario de matlab

>> punto.x=2

>> punto.y=3

>> punto.color='rojo„

>> punto

Se pueden crear también vectores de Estructuras:

>> punto(2).x=4, punto(2).y=5, punto(2).color='verde'

Page 220: Seminario de matlab

Verifique el direccionamiento:

>> punto(1), punto(2)

Y el direccionamiento de campos:

>> campo = „x‟

>> punto.(campo)

Page 221: Seminario de matlab

Verifique el direccionamiento:

>> punto(1), punto(2)

Y el direccionamiento de campos:

>> campo = „x‟

>> punto.(campo)

Page 222: Seminario de matlab

Construye un arreglo donde cada elemento

puede ser de un tipo diferente.

>> c={12,'Red',magic(4)};

Verifique el contenido de c en el workspace

Se utilizan llaves { } en lugar de corchetes [ ] o

paréntesis ( )

Page 223: Seminario de matlab

>> b{1}=12;

>> b{2}='Red';

>> b{3}=magic(4);

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 ineficiente

Page 224: Seminario de matlab

a{1,1} = 12;

a{1,2} = 'Red';

a{1,3} = magic(4);

a{2,1}=ones(3);

a{2,2}=43;

a{2,3}='texto';

Page 225: Seminario de matlab

Utilizando ( ) accede a un elemento, que es tipo

cell.

Utilizando { } accede al valor.

Verifique los tipos con:

class(a)

class(a(1,1))

class(a{1,1})

Page 226: Seminario de matlab

Interacción de Matlab con otros

programas

Page 227: Seminario de matlab

xlswrite(„Archivo', [12.7 5.02;-98 63.9])

d = {'Tiempo', 'Temp'; 12 98; 13 99; 14 97};

s = xlswrite(„file.xls', d, 'Temperaturas', 'E1')

Page 228: Seminario de matlab

[tipo, hojas] = xlsfinfo(„file.xls„)

[ndata, headertext] = xlsread(„file.xls', „Hoja‟)

A = xlsread(„file.xls', 1, 'A4:B5')

Page 229: Seminario de matlab

Crear un script que permita leer este archivo

Page 230: Seminario de matlab

Imagenes

Page 231: Seminario de matlab

[x,map]=imread('figura.jpg');

image(x)

colormap(map)

Page 232: Seminario de matlab

a = magic(4);

image(a);

map = hsv(16);

colormap(map)

colorbar

Page 233: Seminario de matlab

Matlab provee 2 maneras de generar graficas animadas:

1. On the fly – Borra continuamente y redibuja el objeto en la with each redraw.

2. Frame by frame capture and playback –Graba un número de diferentes figuras y luego los reproduce como si fuiera unapelicula..

Page 234: Seminario de matlab

Animación fly:t = 0:0.01:10*pi; x = t.*sin(t); y = t.*cos(t);axislimits = [min(x) max(x) min(y) max(y) min(t)

max(t)];line_handle = plot3(x(1), y(1),t(1), 'ko', ...'MarkerFaceColor',[.49 1 .63], 'MarkerSize',12);set(line_handle, 'erasemode','xor');axis(axislimits);grid onfor i = 2:length(x)

set(line_handle, 'xdata',x(i), 'ydata', y(i), 'zdata', t(i));drawnow;

end

Page 235: Seminario de matlab

Frame by frame

[x,y] = meshgrid([-10:0.5:10]);

for j = 1:15

z = bessel(0, (j-1)*0.2 + sqrt(x.^2 +y.^2));

surf(x,y,z)

axis([-10 10 -10 10 -.5 1])

M(j) = getframe;

end

frame_order = [1:15 14:-1:1];

number_repeats = 5;

movie(M, [number_repeats frame_order]);

Page 236: Seminario de matlab

GUI

Page 237: Seminario de matlab

GUI (Graphical User Interface) es util para

presentar el desarrollo final de un programa.

Adhiere usabilidad al ajuste de parámetros y

visualización de un programa

La elaboración de GUI se puede realizar de dos

formas: Código a través de un script

GUIDE que es la herramienta de diseño de MatLAB.

Page 238: Seminario de matlab

Ejecutar el comando guide en Matlab pàrainiciar.

Page 239: Seminario de matlab

Se tiene un formulario en blanco al cual se puede agregar CONTROLES.

Se debe antes preparar un diseño de la GUI

Page 240: Seminario de matlab
Page 241: Seminario de matlab
Page 242: Seminario de matlab

Se desea crear una GUI que realice un PLOT de una función determinada.

Primero se ubican los controles básicos para el programa del menu: axes, static text, editbox, button.

Page 243: Seminario de matlab

Se desea crear una GUI que realice un PLOT de una función determinada.

Primero se ubican los controles básicos para el programa del menu: axes, static text, editbox, button.

Page 244: Seminario de matlab
Page 245: Seminario de matlab

Axes: un espacio para dibujar.

Static text: texto que se adhiere a la

pantalla y el usuario no puede editarlo

Edit box: una caja blanca que el usuario puede

modificar

el contenido

Button: realiza una acción cuando el usuario da

click en el.

Page 246: Seminario de matlab

Cuando le dan doble click a un control, muestra

una ventana listando todas las propiedades de

ese control (fuente, posición, tamaño, etc.).

Tag: el nombre del control en el código, es mejor

renombrarlo por algo identificable.

String: el texto que va a tener en el gui si guera el

caso.

ForegroundColor: color del texto.

Background color: color del control.

Page 247: Seminario de matlab
Page 248: Seminario de matlab

Si presionan la flecha verde en la parte superior

del editor GUI se grabara el trabajo actual y

correrá el programa. La primera vez que lo corra

preguntara el nombre del programa.

Probar corriendo el programa.

Page 249: Seminario de matlab

Para agregar funcionalidad a la GUI se debe definir un callback para el boton para que así grafique la función cuando se presione

Page 250: Seminario de matlab

Cuando se corra el programa, se crean 2

archivos:

.fig: contiene el esquema grafico de los controles.

.m: contiene el código que define la función

callback para cada uno de los controles.

Page 251: Seminario de matlab

Generalmente no se edita el codigo de

inicializacion del .m.

Probablemente muchos callbacks de controles se

quedaran en blanco.

Se puede seleccionar el control y dar click

derecho para editar el Callback con la opciòn

“View Callback”.

Page 252: Seminario de matlab

% --- Executes on button press in PlotButton.

function PlotButton_Callback(hObject,

eventdata, handles)

% hObject handle to PlotButton (see GCBO)

% eventdata reserved - to be defined in a future

version of MATLAB

% handles structure with handles and user data

(see GUIDATA)

Page 253: Seminario de matlab

Se pueden borrar los comentarios.

Cada funcion tiene el parametro handles. Dicho

parametro contiene todos los controles:

handles.PlotButton, handles.edit1, etc…

Se pueden agregar variables a handles para

hacerlas disponibles en todos los controles/funciones: handles.x=42;

Page 254: Seminario de matlab

Se puede obtener cualquier propiedad de un control con la función GET.

Se puede cambiar el valor de cualquier propiedad con la función SET.

En este caso queremos OBTENER el Stringescrito en el edit box y graficarlo.

Page 255: Seminario de matlab

function PlotButton_Callback(hObject,

eventdata, handles)

x = -10 : 0.1 : 10;

s = get(handles.functionEdit, 'String');

y = eval(s); %eval just evaluates the given string

handles.axes1; %Subsequent commands draw

on axes1.

plot(x, y);

Page 256: Seminario de matlab

Cuando se modifica el código del m-file no se tiene que volver a correr la GUI (solo se ha modificado la funcionalidad).

Para correr el GUI se puede usar también desde el command window el nombre de la GUI como si fuera un script.