Seminario de matlab

Preview:

Citation preview

Ing. Andrés Marzo

Introducción.

Vectores.

Matrices.

Comandos y Funciones útiles.

Cadenas de Texto.

Scripts y Funciones.

Tipos de Datos.

Graficas 2D.

Estructuras de Control.

Graficas 3D.

Estructuras y Celdas.

GUI y GUIDE.

Data Acquisition.

Perfil de los participantes:

◦ Nombre

◦ Estudios.

◦ Expectativas del curso

◦ Conocimientos de Matlab, programación.

Objetivos al finalizar el curso

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%

Introducción

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).

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.

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.

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)

Workspace & Directory

Command History

Barra de MenuCommand Window

clc

Clear

Exist(„Name‟)

Help name

Quit

Who, whos

Desde la ventana de comandos ingrese:

>> 2 + 3/4*5

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

El símbolo % especifica un comentario.

No es ejecutado por Matlab.

>>%Esto es un comentario

>>x=2+3 % Suma

X=

5

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

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” _

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

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

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

Vectores

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.

Puede haber problemas con los espacios.

Ejecute:

v1 = [3+ 4 5]

Verifique el comportamiento

Ejecute:

v2 = [3 +4 5]

Verifique el comportamiento

Deben tener la misma dimensión para la suma.

>> v + v2

Pueden multiplicarse por un escalar.

>> v3 = 3*v

Pruebe:

>> v + v1

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.

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)

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.

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)

Vectores que se ven como columna.

Se definen usando “;”

Pruebe:

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

>> c2 = [3

4

5]

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.

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.

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

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

Corresponde al producto Hadamard.

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

>> u.*v‟

Tabulemos la función para

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.

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)

Matrices

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

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.

>>A(1:4,4)

Verifique el resultado.

Ejecute:

>>A(:,4)

Verifique el resultado?

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

Se puede utilizar el operador : para generar matrices:

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

Verifique el resultado anterior.

En MATLAB en general todos son arreglos.

Un vector columna será una matriz de mx1.

Un vector fila será una matriz de 1xn.

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.

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.

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)

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.

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)

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‟]

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

Indica el ultimo elemento.

Ejemplo:

A = magic(5)

B = A(end,2:end)

Verifique el resultado.

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

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

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

En Matlab:

>>inversaA=inv(A)

¿Cómo compruebo?

Comandos y Funciones útiles

Expresiones Matemáticas elementales:

>> help elfun

Expresiones Matemáticas especiales:

>>help specfun

Expresiones de Matrices elementales:

>>help elmat

Para genera números aleatorios usamos las funciones:

rand, randn, randint.

Verifique el uso de:

>> rand(2)

>> randn(2)

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

Para genera números aleatorios usamos las funciones:

rand, randn, randint.

Verifique el uso de:

>> rand(2)

>> randn(2)

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

Se utiliza el comando sum.

Genere un matriz para probar los siguientes comandos:

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.

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.

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.

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

En Matlab:

Se manejan complejos automáticos:

>> c=15+sqrt(-1)

Y valores “excepción” correctamente:

>> a=123/0

>> b=0/0

>> Inf-Inf

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]);

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.

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

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

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)

Entrega los resultados para:

Descomponga:

En fracciones parciales:

>> b=[1 1 1 2];

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

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

El resultado será:

En fracciones parciales:

>> b=[1 1 1 2];

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

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

El resultado será:

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

Ejemplo Práctico: Circuito eléctrico

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

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?

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

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')

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)

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.

Scripts y Funciones

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.

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.

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

Puede existir aplicaciones que requieran a los mismos datos frecuentemente

A=[2,4;7,9]

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.

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.

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.

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.

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

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

Cuerpo de la Función:

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

% Comentarios adicionales para el help

comandos de MATLAB

return;

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.

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).

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.

Tipos de Datos

>>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).

El tipo de Dato entero corresponde:

El tipo de Dato float corresponde:

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.

round: redondea al entero mas proximo.

floor: redondea a –inf.

ceil: redondea a +inf.

fix: redondea hacia cero.

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

>> fix(x)

>> floor(x)

>> ceil(x)

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

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.

>> 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]

El direccionamiento funciona como en vectores:

Asigne:

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

'characters in the alphabet.']

Asigna el valor:

'ABCDE are the first 5 '

'characters in the alphabet.'

Asigne:

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

'characters in the alphabet.']

Asigna el valor:

'ABCDE are the first 5 '

'characters in the alphabet.'

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.

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.

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)]

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

Graficas

“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

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.

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.

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.

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);

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');

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

>> y = sin(x);

>> plot(x,y)

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;

>> 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

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”.

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

>>grid

>>grid on

>>grid off

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

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

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

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))

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.

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

fplot(f, [1 2])

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.

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')

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')

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)')

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.

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.

Realice:

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.

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.

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”.

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)')

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‟)

Ejemplo:

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.

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']);

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

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.

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„)

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 ')

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

Graficas 3D

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‟)

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

Ejemplo:

>> z = peaks(10)

>> plot(z)

>> mesh(z)

>> contour(z,10)

>> surf(z)

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

>> view(0,0)

>> view(90,0)

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.

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”.

>> [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.

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')

Grafique la siguiente superficie:

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

>> [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

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')

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);

Programando con 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.

Operador Relacional Significado

< Menor que

<= Menor o igual a

> Mayor que

>= Mayor o igual a

== Igual a

~= No igual a

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.

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.

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.

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.

if expr1

comandos_matlab

elseif expr2

otro_comandos_matlab

...

else

otros_comandos_matlab

end

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

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.

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.

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”

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

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

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

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

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

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

Alternativa a if, elseif y else.

switch expresion de entrada(escalar o string)

case valor1

declaraciones1

case valor2

declaraciones2

otherwise

declaracionesn

end

Alternativa a if, elseif y else.

switch expresion de entrada(escalar o string)

case valor1

declaraciones1

case valor2

declaraciones2

otherwise

declaracionesn

end

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

Hipermatrices

Matrices de mas de dos dimensiones.

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

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]

x(:,:,1)=x1;

x(:,:,2)=x2;

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

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.

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.

¿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)?

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).

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.

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 (:)).

reshape(x, 3, 6);

Interprete los resultados.

Estructuras y Celdas

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 “.”

>> 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'

Verifique el direccionamiento:

>> punto(1), punto(2)

Y el direccionamiento de campos:

>> campo = „x‟

>> punto.(campo)

Verifique el direccionamiento:

>> punto(1), punto(2)

Y el direccionamiento de campos:

>> campo = „x‟

>> punto.(campo)

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 ( )

>> 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

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';

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})

Interacción de Matlab con otros

programas

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')

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

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

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

Crear un script que permita leer este archivo

Imagenes

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

image(x)

colormap(map)

a = magic(4);

image(a);

map = hsv(16);

colormap(map)

colorbar

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

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

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]);

GUI

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.

Ejecutar el comando guide en Matlab pàrainiciar.

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

Se debe antes preparar un diseño de la GUI

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.

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.

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.

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.

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.

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

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.

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”.

% --- 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)

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;

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.

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);

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.

Recommended