Vous êtes sur la page 1sur 256

Ing.

Andrs Marzo

Introduccin.
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, programacin.

Objetivos al finalizar el curso

30 horas repartidas en 10 clases presenciales.


Tpico

Puntos

Prcticas

30%

Examen Terico

20%

Examen Final

50%

Total

100%

Certificado de aprobacin: 70% en la calificacin


Certificado de asistencia: 70% de asistencia al curso

Introduccin

Lenguaje de Programacin.
Alto Rendimiento.
Computacin Tcnica.
Computacin, Visualizacin y Programacin.
Problemas y soluciones en notacin Matemtica (de
Matrices).

Puede realizar funciones de computadora o lenguaje de


programacin.
Combina calculo y visualizacin de graficas.
Relativamente fcil de aprender.
Es interpretado (no compilado), errores son fciles de
solucionar.
Optimizado para ser rpido en operaciones con
matrices.
Tiene algunos elementos orientados a objetos.

No es un lenguaje de programacin como C o C++.

Diseado para computacin cientfica.

Lenguaje interpretado, ms lento que un compilador


como C.

Comandos son especficos para su uso en Matlab.

Matemticas y Computacin.
Desarrollo y Test de algoritmos.
Modelado, Simulacin y Prototipos.
Anlisis de Datos, exploracin y visualizacin.
Grficas de Ingeniera y Cientficas.
Desarrollo de Aplicaciones finales (GUI)

Workspace & Directory

Barra de Menu

Command History

Command 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 smbolo % 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 operacin,
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 tamao de


nombre de 31 caracteres.
Deben empezar con una letra SIEMPRE.
NO deben contener caracteres especiales, salvo
el guion bajo _

Comando

Descripcin

ans

Variable temporal que contiene la


ms reciente respuesta

eps

Tolerancia numrica del Matlab

i,j

Unidad imaginaria

Inf

Infinito

NaN

Resultado numrico indefinido

pi

El nmero

Un simple nmero 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

Smbolo

Operacin

Comando

Potenciacin

Multiplicacin ab

Divisin derecha

Divisin izquierda

Suma a+b

Resta a-b

a^b

ab

a/b=

A*b
a
b
b
a

a/b

b/a
a+b
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 dimensin 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 parntesis para acceder a
la posicin del elemento a cambiar/ver.
>> w(2) = -2, w(3)

Ejecute:
>>1:10
Verifique el resultado.
Cual es la funcin 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.

Multiplicacin de Vector Fila x Columna


>> u = [ 10, -11, 12], v = [20; -21; -22]
>> prod = u*v
Es una multiplicacin 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 funcin
para

Se puede usar tambin para la divisin:


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

Subndices ser la manera de acceder a un


elemento de una matriz.
Usa los parntesis y el nombre de la variable.
>>A(1,4)
Verifique el resultado y la relacin con A.

>>A(1:4,4)
Verifique el resultado.
Ejecute:
>>A(:,4)
Verifique el resultado?
Cual es la funcin del operador : manejando
subndices?

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 dimensin


de la matriz que se usa como parmetro.
>> size(A)
>> size(ans)
El ultimo comando muestra que el valor
retornado por size es en si mismo una matriz
de 1x2.

Tambin 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 tambin los tipos de dato (arreglo)
de dichas variables.

MATLAB provee algunas funciones propias de


un tamao 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 pequeas (o
vectores).
>> C=[0 1; 3 -2; 4 2]; x=[8;-4;1];
>> G = [C x]
>> G1 = [C ; x]

Se pueden construir matrices usando tambin


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 patrn 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 xon
diagonal x
[r,c] = size(A) % Retorna las dimensiones de la
matriz
+ - * / % Operaciones standard
.+ .- .* ./ % Operador .
v = sum(A) % Vector con la suma de las
columnas

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) % Descomposicin QR
[U,D,V] = svd(A) % Descomposicion a un
simple valor

Condicin 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)
Cmo compruebo?

Comandos y Funciones
tiles

Expresiones Matemticas elementales:


>> help elfun
Expresiones Matemticas especiales:
>>help specfun
Expresiones de Matrices elementales:
>>help elmat

Para genera nmeros aleatorios usamos las


funciones:
rand, randn, randint.
Verifique el uso de:
>> rand(2)
>> randn(2)
>> randint(2,2,[-4 4])

Para genera nmeros 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 condicin.
>> x = -1:.05:1;
>> y = sin(3*pi*x).*exp(-x.^2);
>> k = find(y > 0.2)
Verifique el contenido de k e interprtelo.

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 computacin, la operacin modulo


encuentra el residuo de la divisin de un
numero a otro.
En Matlab:

Se manejan complejos automticos:


>> c=15+sqrt(-1)
Y valores excepcin 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 races 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 cmodamente operaciones


de multiplicacin y divisin de polinomios
mediante las funciones conv y deconv.

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

La funcin residue, descompone el cociente


de una fraccin en fracciones parciales.
Teniendo un cociente de la forma:

La funcin 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 representacin en MATLAB para resolver


un sistema lineal del tipo

Ejemplo Prctico: Circuito elctrico

Ejemplo Prctico: Circuito elctrico


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 Prctico: Circuito elctrico


(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 incgnitas (i1,i2,i3)


Cul es la corriente en cada ramal
del circuito?

La funcin INPUT imprime un mensaje en la


ventana de comandos y devuelve el resultado
de una expresin tecleada por el usuario.
INPUT espera hasta que el usuario ingrese un
valor numrico o una expresin

Cualquier expresin vlida de MATLAB es


aceptada por INPUT.
>> edad = input(Ingrese la edad: ')
En el caso que sea una cadena de texto es
recomendable:
>> nombre = input('Cmo te llamas?','s')

La funcin 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 Integracin


numrica:
quad, quad8.

Solucin de Ecuaciones Diferenciales.


solver,ode23, ode45 y muchos otros.

Solucin de Ecuaciones No lineales


fmin, fsolve, etc.

Interpolacin
Spline,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 debera interferir con


alguna funcin o con una variable (error
comn).
Los comentarios en MATLAB se generan con
el smbolo %:
>> %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 builtin, tambin escritas en .m.


Las buit-in tambin son llamadas funciones
de llamada.
Las user-defined son llamadas funciones de
definicin.
SIEMPRE reciben parmetros para realizar los
clculos.

Los comandos dentro de las funciones operan


sobre los parmetros.
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 funcin de definicin, entonces la
funcin se convertir en de llamada.
Tambin se puede agregar funciones de
definicin a MATLAB.

El nombre de la funcin no DEBERIA interferir


con alguno de una buit-in, ni de otra
variable (error comn).
El nombre del archivo .m conteniendo a la
definicin de la funcin DEBE ser igual al
nombre de la funcin.

La primera lnea del archivo debe tener el


formato:

Luego de esta lnea se puede documentar la


funcin usando comentarios.

Cuerpo de la Funcin:
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 + r3
Y que si dichas resistencias se conectan en
paralelo, entonces su resistencia equivalente
es:
1/rT = 1/r1 + 1/r2 + 1/r3
Escribir una funcin tal que dadas 3
resistencias calcule su resistencia equivalente
conectadas en paralelo y en serie.

Escriba una funcin que convierta la


temperatura en grados Fahrenheit (F) a
grados centgrados (C): Use la funcin input
y fprintf mostrando una mezcla de texto y
nmeros. Recuerde que la formula de
conversin es C = 5/9 * (F-32).

Escriba una funcin en Matlab, con 2


entradas y 2 salidas que determine la altura
en centmetros 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.
Tambin existen comandos que nos dan
informacin lgica 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 funcin:
>> 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 Carcter.


Una cadena es un vector de caracteres.
Un Texto es una matriz de caracteres.
>> t1 = 'A'
Asigna el valor de A al arreglo de carcter
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 lnea siguiente.

Todo carcter tiene un equivalente en valor


numrico.
str2num convierte una cadena a su
correspondiente representacin numrica.
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 ms fcil identificar patrones en una grafica
que en una tabla con nmeros.
Ingenieros frecuentemente usan grficas 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.
2.

3.
4.
5.

Cada eje debe ser etiquetado con la


cantidad graficadas y las unidades.
Usar espaciado adecuado. No muy disperso,
no muy denso.
Si se grafican 2 curvas, cada una debe tener
una leyenda que lo identifique.
Si se van a usar mltiples graficas, use un
titulo para cada una.
Si esta graficando cada medida de datos,
diferencia cada uno con un smbolo como
circulo, punto, triangulo.

6.

7.

Algunas veces, los smbolos estn unidos


por lneas que ayudan a visualizar los datos,
especialmente si hay pocos puntos. Para
hacer esto, es necesario tener conocimiento
de que sucede entre cada punto.
Si est graficando puntos generados por la
evaluacin de una funcin, no use un
smbolo para graficar los puntos. Use lneas
continuas.

6.

7.

Algunas veces, los smbolos estn unidos


por lneas que ayudan a visualizar los datos,
especialmente si hay pocos puntos. Para
hacer esto, es necesario tener conocimiento
de que sucede entre cada punto.
Si est graficando puntos generados por la
evaluacin de una funcin, no use un
smbolo para graficar los puntos. Use lneas
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 funcin 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 funcin 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 funcin a un numero
suficientemente grande de puntos y luego se
los une con lneas 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 grfico e identifique que el
numero N es muy pequeo aun.
Cambie N=100 y verifique el resultado

El seno es una funcin continua.


MATLAB trabaja con datos discretos.
PLOT realiza una interpolacin lineal entre
esos datos para graficar.
Mayor cantidad de puntos (muestras) harn
que la grfica sea prcticamente continua.

Grafica lneas de gua 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 funcin


que ser graficada y decide cuantos puntos
se usar de tal manera que se muestren todas
las caractersticas de la funcin.

Sintaxis:
>>fplot(string,[xmin xmax])
string: Describe la funcin a ser graficada.
[xmin xmax] : Valores mnimo y mximo 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 [xmin
xmax ymin ymax].
Retorna los valores de la abscisa y ordenada en
un vector columna para x y y.

Se puede graficar polinomios fcilmente usando la


funcin polyval, la cual evala el polinomio en los
valores especificados por la variable
independiente.
Esto es til para no tener que escribir toda la
expresin 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 carcter el color y segundo el estilo de
lnea.
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 funcin PLOT es una peticin


para crear un nuevo eje (axis ventana donde
se contiene el grfico).
Cada llamado de PLOT entonces reemplazar la
grfica anterior.
>>hold on
Mantiene el grfico actual en el eje actual.

Se puede llamar muchas veces a PLOT pero no


se reemplazar el grfico 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 mxn
grficos.
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 automticamente obtiene de la grafica el
tipo de lnea 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 grfico


(figura, ejes, elemento grfico,...) estn guardadas
en "handles
gcf current figure, gca current 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 funcin polyfit(x,y,n) de Matlab calcula la


aproximacin lineal por mnimos cuadrados
de un conjunto de puntos dados en los
vectores x e y. La aproximacin 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 (68F) fue medida varias veces
resultando en la tabla:
Tiempo (seg)

Temperatura (F)

145

620

130

2266

105

3482

90

Desarrolle un modelo de la temperatura del caf como


una funcin del tiempo y use el modelo para estimar
cuanto le tomara alcanzar la temperatura de 120F

Graficas 3D

Tambin se basa en graficar puntos:


>> t=0:pi/50:10*pi;
>> plot3(sin(t),cos(t),t)
Esta grfica es paramtrica.
Un solo parmetro resulta en una grfica 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 tambin se define


matemticamente con una funcin f(x,y).
Para cada valor de (x,y) se calcula la altura
de la funcin: z = f(x,y).
Para graficar esto debemos definir un rango
de x y de y para el grfico.

Definiendo el dominio:
x = 2:0.5:4; y = 1:0.5:3;
Definido el dominio debemos definir la
grilla de valores que servirn 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)) seran las
coordenadas de ese punto.

Grafique la siguiente funcin:

>>
>>
>>
>>

[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 mximos de la funcin.

>>
>>
>>
>>
>>
>>

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


>> 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 Lgicos.
Realizar funciones cuyas acciones dependan del
resultado de otras operaciones.
Repetir clculos un nmero especifico de veces o
hasta que una condicin se satisfaga.

Operador Relacional

Significado

<

Menor que

<=

Menor o igual a

>

Mayor que

>=

Mayor o igual a

==

Igual a

~=

No igual a

Operador

Nombre

Definicin

NOT

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

&

AND

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

OR

A|B retorna 1s 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.
2.

3.

4.

Parntesis.
Operadores aritmticos y NOT. Evaluados de
izquierda a derecha.
Operadores Relacionales, evaluados de
izquierda a derecha.
Operadores Lgicos, evaluados de izquierda a
derecha.

La declaracion condicional en Matlab nos


permite escribir programas que tomen
decisiones.
Contienen uno o mas declaraciones of, else
y elseif.
La declaracin end determina el fin de una
declaracin condicional.

if expresiones lgicas
Declaraciones
end
Evala una condicin lgica y si dicha expresin evala un
resultado POSITIVO (1) entonces selecciona ejecutar
un grupo de instrucciones, sino evala otro grupo o
sale de la condicin.

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 debera ser MUY


LIMITADO en MATLAB por el uso del
operador :
Los lazos son grandes consumidores de
tiempo.
Tareas de optimizacin regularmente se
encargan de evitar los lazos.

Se recomienda para: Repetir la ejecucin de


comandos por un nmero definido de
veces.
for variable = expresin
comandos_matlab
end

expresin debe definir el nmero de veces


que se ejecutan los comandos, variable
controla ese numero de repeticiones.

Imprimir el cuadrado de los 5 primeros


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


decimales de una cifra decimal de 0 a 1, en
forma decreciente, es decir empezando por
1, 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

Creacin 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 declaracin 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 dependern de la expresin
condicional que se evala.
MIENTRAS se cumpla sigue la repeticin.
while expresin
comandos_matlab
end

Imprimir el valor de x, mientras este sea


positivo, 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 iteracin
del lazo, saltando las declaraciones que falten.
Return: Para salir y retornar los valores actuales
en la funcin

Hipermatrices

Matrices de mas de dos dimensiones.


El tercer subindice representa la tercera
dimensin: La profundidad de la
hipermatriz.

Se muestra a continuacin cmo organizar las


matrices x1 y x2 de 3x3 en dos pginas, o
sea en un arreglo x de 3x3x2. (La variable x
debe estar inicialmente vaca 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 informacin quedar organizada como se
muestra en la figura:

Creacin 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, tambin pueden manejar
hipermatrices.

M=randn(2,3,2)
M(:,:,1) =
-0.4326
-1.6656
M(:,:,2) =

0.1253 -1.1465
0.2877 1.1909

1.1892 0.3273 -0.1867


-0.0376 0.1746 0.7258
>> A=zeros(2,3); B=ones(2,3);
Por su naturaleza la concatenacin se realiza a travs
de funciones.

Recuerdan la funcin CAT?


La funcin cat concatena arreglos.
Recibe 3 parmetros el primero es la
dimensin a lo largo de la cual concatenar 2
matrices pasadas como parmetros.
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 e
hipermatrices segn la primera dimensin,
resultando un array de una dimensin
inferior.

Las funciones matriciales propias del lgebra


Lineal (det(), inv(), etc.) no se pueden aplicar a
hipermatrices. Para poderlas aplicar hay que
extraer
primero
las
matrices
correspondientes (por ejemplo, con el
operador 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 informacin, 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 tambin 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
parntesis ( )

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

Interaccin 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 nmero de diferentes figuras y
luego los reproduce como si fuiera una
pelicula..

Animacin 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 on
for 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 parmetros y
visualizacin de un programa
La elaboracin de GUI se puede realizar de dos
formas:
Cdigo a travs de un script
GUIDE que es la herramienta de diseo de MatLAB.

Ejecutar el comando guide en Matlab pra


iniciar.

Se tiene un formulario en blanco al cual se


puede agregar CONTROLES.
Se debe antes preparar un diseo de la GUI

Se desea crear una GUI que realice un PLOT


de una funcin determinada.
Primero se ubican los controles bsicos para
el programa del menu: axes, static text, edit
box, button.

Se desea crear una GUI que realice un PLOT


de una funcin determinada.
Primero se ubican los controles bsicos para
el programa del menu: axes, static text, edit
box, 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 accin 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, posicin, tamao, etc.).
Tag: el nombre del control en el cdigo, 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 funcin cuando se presione

Cuando se corra el programa, se crean 2


archivos:
.fig: contiene el esquema grafico de los controles.
.m: contiene el cdigo que define la funcin
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 opcin
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 funcin GET.
Se puede cambiar el valor de cualquier
propiedad con la funcin SET.
En este caso queremos OBTENER el String
escrito 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 cdigo 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 tambin
desde el command window el nombre de la
GUI como si fuera un script.

Vous aimerez peut-être aussi