Curso Introduccion Al Matlab

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 24

INTRODUCCIÓN AL MATLAB 1

UNIVERSIDAD AUTÓNOMA METROPOLITANA


AZCAPOTZALCO
Curso Introductorio de Matlab
M. en C. EZEQUIEL RODRIGUEZ R.

Introducción

MATLAB (MATriz LABoratory)


Matlab es un programa que nos permite realizar cálculos numéricos con vectores y matrices.
También puede trabajar con escalares, tanto reales como imaginarios. Una de las capacidades
mas atractivas es la de poder realizar de manera muy sencilla una amplia variedad de gráficos
en dos y tres dimensiones. Además de poder hacer programas de manera más sencilla que
usando algún otro paquete de programación tal como C o Fortran.

Podemos trabajar en el WORKSPACE o bien abrir una hoja en el editor de MATLAB y escribir
alli el programa para posteriormente ejecutarlo.

Iniciaremos con las siguientes instrucciones de MATLAB

Manejo de Comandos y Funciones


help Documentación en línea. Nos permite ver lo que ‘hace una función’

ejemplo:

help fft

what Listado de Directorio de archivos con extensión M-, MAT- y MEX.


lookfor Búsqueda desde el teclado a través del comando HELP.
which Localización de funciones y archivos.
demo Corrida de demos.

Manejo de variables y workspace (espacio de trabajo).

who Lista de variables actuales. Nos permite saber características de una


variable tal como su tamaño o si es real o compleja
whos Lista de variables actuales, forma larga
load Cargar variables de disco.
save Salvar variables de workspace a disco.
clear limpiar variables y funciones de memoria.
size Tamaño de la matriz
length Longitud del vector
disp Desplegar una matriz o texto.

Sistema operativo y archivos

dir desplegar directorio.


delete Borrar archivo.

Es conveniente abrir una hoja en el editor de MATLAB (M-file) para ir guardando lo que se va
escribiendo. También es posible ir generando el programa directamente en el command de
MATLAB la desventaja es que no se pueden guardar las instrucciones escritas.
INTRODUCCIÓN AL MATLAB 2
Operaciones con vectores y matrices

MATLAB puede operar con matrices por medio de operadores y por medio de funciones.

Los operadores matriciales de MATLAB son los siguientes:

+ adición o suma
– sustracción o resta
* multiplicación
' traspuesta
^ potenciación
\ división-izquierda
/ división-derecha
.* producto elemento a elemento
./ y .\ división elemento a elemento
.^ elevar a una potencia elemento a
elemento

Estos operadores se aplican también a las variables o valores escalares, aunque con algunas
diferencias. Todos estos operadores son coherentes con las correspondientes operaciones
matriciales: no se puede por ejemplo sumar matrices que no sean del mismo tamaño. Si los
operadores no se usan de modo correcto se obtiene un mensaje de error.

Ejemplo:
Generemos las siguientes matrices
A = [1 2 3;4 5 6;7 8 9]; %generación de matriz de 3x3 elementos

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

Podemos sumar estas matrices


S = A+B %suma de elementos
Resultado, suma elemento a elemento de las matrices
S=
10 10 10
10 10 10
10 10 10

restar las matrices

S1 = A-B % resta de matrices


resultado
S1 =
-8 -6 -4
-2 0 2
4 6 8

multiplicar matrices
Z = A*B % multiplicación de matrices
Resultado
Z=
30 24 18
84 69 54
INTRODUCCIÓN AL MATLAB 3
138 114 90

multiplicar elemento a elemento


Z1 = A.*B
resultado
Z1 =
9 16 21
24 25 24
21 16 9

Obtención de la inversa
P =[1 4 2;3 1 2;8 0 2]
PI = inv(P);

Si ahora hacemos lo siguiente:

PI*P obtenemos la matriz identidad

Los operadores de división requieren una cierta explicación adicional. Considérese el


siguiente sistema de ecuaciones lineales
Ax = b
en donde x y b son vectores columna, y A una matriz cuadrada invertible. La resolución de este
sistema de ecuaciones se puede escribir en las 2 formas siguientes (¡Atención a la 2ª forma,
basada en la barra invertida (\), que puede resultar un poco extraña!):
x = inv(A)*b
x = A\b
Así pues, el operador división-izquierda por una matriz (barra invertida \) equivale a
premultiplicar por la inversa de esa matriz.

Ejemplo: Resolvamos el sistema


2x  3y  z  k  2
x  4 y  2 z  9k  3
3x  y  z  k  0
5 x  2 y  3 z  k  10

escribimos las matrices

A = [2 3 1 1;1 4 2 9;3 -1 1 -1;5 2 -3 1];


C = [2 3 0 10];
X = inv(A)*C’;

Los resultados son:


x = 0.8019
y = 0.5251
z = -1.5298
k = 0.3508

Probamos ahora con X = A\C´, los resultados deben ser los mismos

Otras formas de definir matrices


INTRODUCCIÓN AL MATLAB 4
Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de tipos
particulares. Algunas de estas funciones son las siguientes:

eye(n) forma la matriz unidad de tamaño (nxn)


zeros(m,n) forma una matriz de ceros de tamaño (mxn)
zeros(n) forma una matriz de ceros de tamaño (nxn)
ones(n) forma una matriz de unos de tamaño (nxn)
ones(m,n) forma una matriz de unos de tamaño (mxn)
linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre
x1 y x2
logspace(a1,a2,n) genera un vector con n valores espaciados logarítmicamente
entre10^a1 y 10^a2. Si a2 es pi, los puntos se generan entre
10^a1 y pi
rand(n) forma una matriz de números aleatorios entre 0 y 1, con
distribución uniforme, de tamaño (nxn)
rand(m,n) forma una matriz de números aleatorios entre 0 y 1, con
distribución uniforme, de tamaño (mxn)
randn(n) forma una matriz de números aleatorios de tamaño (nxn),
con distribución normal, de valor medio 0 y varianza 1.
magic(n) crea una matriz (nxn) con la propiedad de que todas los
renglones y columnas suman lo mismo

Formación de una matriz a partir de otras


Con MATLAB es posible crear una matriz a partir de matrices previas ya definidas, esto se
puede hacer a través de lo siguiente:
– recibiendo alguna de sus propiedades (como por ejemplo el tamaño),
– por composición de varias submatrices más pequeñas,
– modificándola de alguna forma.

[m,n] = size(A)Devuelve el número de filas y de columnas de la matriz A. Si la


matriz es cuadrada basta recoger el primer valor de retorno
n = length(x) calcula el número de elementos de un vector x
zeros(size(A)) forma una matriz de ceros del mismo tamaño que una matriz A
previamente creada
ones(size(A)) ídem con unos
A = diag(x) forma una matriz diagonal A cuyos elementos diagonales son los
elementos de un vector ya existente x
x = diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz
ya existente A
diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A
rot90(A,k) Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un
entero que puede ser negativo. Si se omite, se supone k=1
flipud(A) halla la matriz simétrica de A respecto de un eje horizontal
fliplr(A) halla la matriz simétrica de A respecto de un eje vertical
reshape(A,m,n) Cambia el tamaño de la matriz A devolviendo una matriz de tamaño
mxn cuyas columnas se obtienen a partir de un vector formado por las
columnas de A puestas una a continuación de otra. Si la matriz A tiene
menos de mxn elementos se produce un error.
INTRODUCCIÓN AL MATLAB 5
Un caso especialmente interesante es el de crear una nueva matriz a partir de otras matrices
definidas previamente. Por ejemplo, vamos a ejecutar las siguientes líneas de comandos y a
observar los resultados obtenidos:

A = magic(3)
B = diag(diag(A))
C = [A, eye(3); zeros(3), B]

X = [A A’;ones(size(A)) A.^2]

Manipulación de los elementos de una matriz.


Generemos la matriz
A=magic(6)

A = 35, 1, 6, 26, 19, 24


3, 32, 7, 21, 23, 25
31, 9, 2, 22, 27, 20
8, 28, 33, 17, 10, 15
30, 5, 34, 12, 14, 16
4, 36, 29, 13, 18, 11

Si queremos hacer referencia al elemento del renglón 2, columna 3, escribimos:


A(2,3) = 7

El siguiente comando extrae los 4 primeros elementos de la 6ª fila:


A(6, 1:4) = 4, 36, 29, 13

Los dos puntos aislados representan "todos los elementos". Por ejemplo, el siguiente comando
extrae todos los elementos de la 3ª fila:
A(3, :) = 31, 9, 2, 22, 27, 20

Para acceder a la última fila o columna puede utilizarse la palabra end, en lugar del número
correspondiente. Por ejemplo, para extraer la sexta fila (la última) de la matriz:
A(end, :) = 4, 36, 29, 13, 18, 11

El siguiente comando extrae todos los elementos de las filas 3, 4 y 5:


A(3:5,:) = 31, 9, 2, 22, 27, 20
8, 28, 33, 17, 10, 15
30, 5, 34, 12, 14, 16

Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Por ejemplo, el


siguiente comando extrae las filas 1, 2 y 5:
A([1 2 5],:) = 35, 1, 6, 26, 19, 24
3, 32, 7, 21, 23, 25
30, 5, 34, 12, 14, 16

En los ejemplos anteriores se han extraído renglones y no columnas por motivos del espacio
ocupado por el resultado en la hoja de papel. Es evidente que todo lo que se dice para filas
vale para columnas y viceversa basta cambiar el orden de los índices.
El operador dos puntos (:) puede utilizarse en ambos lados del operador (=). Por ejemplo, a
continuación define una matriz identidad B de tamaño 6 x 6 y se van a reemplazar filas de B
INTRODUCCIÓN AL MATLAB 6
por filas de A. Observe que la siguiente secuencia de comandos sustituye las filas 2, 4 y 5 de B
por las filas 1, 2 y 3 de A,
B = eye(size(A));

B([2 4 5],:)=A(1:3,:)
B = 1, 0, 0, 0, 0, 0
35, 1, 6, 26, 19, 24
0, 0, 1, 0, 0, 0
3, 32, 7, 21, 23, 25
31, 9, 2, 22, 27, 20
0, 0, 0, 0, 0, 1

Se pueden realizar operaciones aún más complicadas, tales como la siguiente:


B = eye(size(A));
B(1:2,:)=[0 1; 1 0]*B(1:2,:)

Como nuevo ejemplo, se va a ver la forma de invertir el orden de los elementos de un vector:
x = rand(1,5)
x = 0.9103, 0.7622, 0.2625, 0.0475, 0.7361
x=x(5:-1:1)
x = 0.7361, 0.0475, 0.2625, 0.7622, 0.9103

Obsérvese que por haber utilizado paréntesis –en vez de corchetes– los valores generados por
el operador (:) afectan a los índices del vector y no al valor de sus elementos.

Para invertir el orden de las columnas de una matriz se puede hacer lo siguiente:
A=magic(3)
A= 8 1 6
3 5 7
4 9 2
A(:,3:-1:1)
A= 6 1 8
7 5 3
2 9 4
aunque hubiera sido más fácil utilizar la función fliplr(A), que es específica para ello.
Finalmente, hay que decir que A(:) representa un vector columna con las columnas de A una
detrás de otra.

Matriz vacía A[ ]
Para MATLAB una matriz definida sin ningún elemento entre los corchetes es una matriz que
existe, pero que está vacía, o lo que es lo mismo que tiene dimensión cero.

Por ejemplo:
A=magic(3)
A=816
357
492
B = []
B=[]
exist(B) = [ ]
isempty(B) = 1
A(:,3)=[]
INTRODUCCIÓN AL MATLAB 7
A= 81
35
49

Operadores de Relación

El lenguaje de programación de MATLAB dispone de los siguientes operadores relacionales:

< menor que


> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= distinto que

En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace
que tengan un significado especial.
Al igual que en C, si una comparación se cumple el resultado es 1 (true), mientras que si no se
cumple es 0 (false). Recíprocamente, cualquier valor distinto de cero es considerado como
true y el cero equivale a false. La diferencia con C está en que cuando los operadores
relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamaño, la
comparación se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del
mismo tamaño, que recoge el resultado de cada comparación entre elementos. Por ejemplo:
Formemos las siguientes matrices

A = [1 2;0 3];

B = [4 2;1 5];
A == B = 0 1
00
A ~= B 1 0
1 1

Operadores lógicos
Los operadores lógicos de MATLAB son los siguientes:
& and
| or
~ negación lógica

Funciones matemáticas elementales que operan de modo escalar


Estas funciones, que comprenden las funciones matemáticas trascendentales y otras funciones
básicas, actúan sobre cada elemento de la matriz como si se tratara de un escalar. Se aplican
de la misma forma a escalares, vectores y matrices. Algunas de las funciones de este grupo
son las siguientes:
INTRODUCCIÓN AL MATLAB 8

sin(x) Función seno


cos(x) Función coseno
tan(x) Función tangente
asin(x) arco seno
acos(x) arco coseno
atan(x) arco tangente (devuelve un ángulo entre -π/2 y + π /2)
atan2(x) arco tangente (devuelve un ángulo entre - π y + π); se le pasan 2 argumentos,
proporcionales al seno y al coseno
sinh(x) seno hiperbólico
cosh(x) coseno hiperbólico
tanh(x) tangente hiperbólica
asinh(x) arco seno hiperbólico
acosh(x) arco coseno hiperbólico
atanh(x) arco tangente hiperbólica
log(x) logaritmo natural
log10(x) logaritmo decimal
exp(x) función exponencial
sqrt(x) raíz cuadrada
sign(x) devuelve -1 si <0, 0 si =0 y 1 si >0. Aplicada a un número complejo, devuelve un
vector unitario en la misma dirección
rem(x,y) resto de la división (2 argumentos que no tienen que ser enteros)
mod(x,y) similar a rem (Ver diferencias tecleando Help mod)
round(x) redondeo hacia el entero más próximo
fix(x) redondea hacia el entero más próximo a 0
gcd(x) máximo común divisor
lcm(x) mínimo común múltiplo
real(x) partes reales
imag(x) partes imaginarias
abs(x) valores absolutos
angle(x) ángulos de fase

Funciones que actúan sobre vectores


Las siguientes funciones actúan sobre vectores (no sobre matrices ni sobre escalares)

[xm,im]=max(x) máximo elemento de un vector. Devuelve el valor máximo


xm y la posición que ocupa im
[xm,im]=min(x) mínimo elemento de un vector. Devuelve el valor mínimo
y la posición que ocupa
sum(x) suma de los elementos de un vector
cumsum(x) devuelve el vector suma acumulativa de los elementos de
un vector
mean(x) valor medio de los elementos de un vector
std(x) desviación típica
prod(x) producto de los elementos de un vector
cumprod(x) devuelve el vector producto acumulativo de los elementos
de un vector
[z, n] = sort(x) ordenación de menor a mayor de los elementos de un
vector x.
INTRODUCCIÓN AL MATLAB 9
Devuelve el vector ordenado z, y un vector n con las posiciones iniciales en x de los elementos
en el vector ordenado z.
En realidad estas funciones se pueden aplicar también a matrices, pero en ese caso se aplican
por separado a cada columna de la matriz, dando como valor de retorno un vector resultado de
aplicar la función a cada columna de la matriz considerada como vector. Si estas funciones se
quieren aplicar a las filas de la matriz basta aplicar dichas funciones a la matriz traspuesta.

Funciones que actúan sobre matrices

Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen
algunas de las funciones más útiles y potentes de MATLAB. Se clasifican en varios subgrupos:

v = poly(A) devuelve un vector v con los coeficientes del polinomio


característico de la matriz cuadrada A

t = trace(A) devuelve la traza t (suma de los elementos de la


diagonal) de una matriz cuadrada A

[m,n] = size(A) devuelve el número de filas m y de columnas n de una


matriz rectangular A

n = size(A) devuelve el tamaño de una matriz cuadrada A

Funciones para cálculos con polinomios


Para MATLAB un polinomio se puede definir mediante un vector de coeficientes. Por ejemplo,
el polinomio:

x 4  8 x 2  6 x  10  0

se puede representar mediante el vector [1, 0, -8, 6, -10]. MATLAB puede realizar diversas
operaciones sobre él, como por ejemplo evaluarlo para un determinado valor de x por ejemplo
c, (función polyval(pol, c)) y calcular las raíces (función roots()):

pol = [1 0 - 8 6 -10]

roots(pol) = -3.2800
2.6748
0.3026 + 1.0238i
0.3026 - 1.0238i
polyval(pol,1) = -11

Para calcular el producto de polinomios, MATLAB utiliza una función llamada conv() (de
convolución). En el siguiente ejemplo se va a ver cómo se multiplica un polinomio de segundo
grado por otro de tercer grado:
pol1 = [1 -2 4]

pol2 = [1 0 3 -4]

pol3 = conv(pol1,pol2) = 1, -2, 7, -10, 20, -16


INTRODUCCIÓN AL MATLAB 10
Para dividir polinomios existe otra función llamada deconv() que seria la operación inversa a la
convolución. Las funciones utilizadas en el cálculo con polinomios son las siguientes:

poly(A) polinomio característico de la matriz A


roots(pol) raíces del polinomio pol
polyval(pol,x) evaluación del polinomio pol para el valor de
x. Si x es un vector, pol se evalúa para cada
elemento de x
polyvalm(pol,A) evaluación del polinomio pol de la matriz A

conv(p1,p2) producto de convolución de dos polinomios p1


y p2
[c,r]=deconv(p,q) división del polinomio p por el polinomio q. En
c se devuelve el cociente y en r el resto de la
división
residue(p1,p2) descompone el cociente entre p1 y p2 en
suma de fracciones simples (ver »help
residue)
polyder(pol) calcula la derivada de un polinomio
polyder(p1,p2) calcula la derivada de producto de polinomios
polyfit(x,y,n) calcula los coeficientes de un polinomio p(x)
de grado n que se ajusta a los datos p(x(i))
~= y(i), en el sentido de mínimo error
cuadrático medio.

Funciones de función

En MATLAB existen funciones a las que hay que pasar como argumento otras funciones o
vectores. Así sucede por ejemplo si se desea calcular la integral definida de una función,
resolver una ecuación no lineal, o integrar numéricamente una ecuación diferencial ordinaria
(problema de valor inicial).

Ejemplo
Hagamos un programa para obtener las raíces de una ecuación de 2do orden
Abrimos el editor de MATLAB y escribimos lo siguiente:
function [X1,X2]=raices(A,B,C)
%este programa obtiene raices de una ecuacion de segundo
%orden hay que introducir los coeficientes de la ecuacion
%Ax+Bx+C=0
if nargin<3
error('faltan datos')
end
X1=(-B+sqrt(B^2-4*A*C))/2*A
X2=(-B-sqrt(B^2-4*A*C))/2*A
if isreal(X1)
disp('raices reales')
else
disp('raices imaginarias')
end

Ejemplo: escribamos una función que nos permita calcular parámetros estadísticos, iniciemos
con la media.
INTRODUCCIÓN AL MATLAB 11

function y = media(x)
%esta función calcula la media de un conjunto de valores
%almacenados en el vector x
n = length(x);
y = sum(x)/n;

La siguiente función calcula la media y la desviación estándar


function [med,std] = estadistica(x)
%esta función calcula la media y la desviación estándar de un conjunto de valores
n = length(x);
med = sum(x)./n;
std = sum((x-media).^2)./n;

Funciones gráficas 2D elementales


MATLAB dispone de cuatro funciones básicas para hacer graficas en 2-D. Estas funciones se
diferencian principalmente por el tipo de escala que utilizan en los ejes de abscisas y de
ordenadas.
Estas cuatro funciones son las siguientes:

plot() crea un gráfico a partir de vectores y/o


columnas de matrices, con escalas
lineales sobre ambos ejes.
loglog() crea un gráfico a partir de vectores y/o
columnas de matrices, con escala
logarítmica en ambos ejes
semilogx() crea un gráfico a partir de vectores y/o
columnas de matrices, con escala lineal
en el eje de ordenadas y logarítmica en
el eje de abscisas
semilogy() crea un gráfico a partir de vectores y/o
columnas de matrices, con escala
lineal en el eje de abscisas y
logarítmica en el eje de ordenadas

Para agregarles titulo, nombres a los ejes, leyendas en la grafica etc se utilizan las siguientes
instrucciones:

title('título') añade un título al dibujo

xlabel('tal') añade una etiqueta al eje de abscisas. Con xlabel off desaparece

ylabel('cual') añade una etiqueta al eje de ordenadas. Con ylabel off desaparece

text(x,y,'texto') introduce 'texto' en el lugar especificado por las coordenadas x e y. Si x e y


son vectores, el texto se repite por cada par de elementos. Si texto es
también un vector de cadenas de texto de la misma dimensión, cada
elemento se escribe en las coordenadas correspondientes
INTRODUCCIÓN AL MATLAB 12
gtext('texto') introduce texto con ayuda del ratón: el cursor cambia de forma y se espera
un clic para introducir el texto en esa posición

legend() define rótulos para las distintas líneas o ejes utilizados en la figura. Para más
detalle, consultar el Help

grid activa la inclusión de una cuadrícula en el dibujo. Con grid off desaparece la
cuadrícula

Borrar texto (u otros elementos gráficos) es un poco más complicado. Para poder hacerlo hay
que recuperar previamente el valor de retorno del comando con el cual se ha creado. Después
hay que llamar a la función delete con ese valor como argumento. Considérese el siguiente
ejemplo:

v = text(1,.0,'seno')

delete(v)

Los dos grupos de funciones anteriores no actúan de la misma forma. Así, la función plot
dibuja una nueva figura en la ventana activa (en todo momento MATLAB tiene una ventana
activa de entre todas las ventanas gráficas abiertas), o abre una nueva figura si no hay ninguna
abierta, sustituyendo cualquier cosa que hubiera dibujada anteriormente en esa ventana. Para
verlo, creemos un par de vectores x e y con los que trabajar:

x = -10:0.2:10;
y = sin(x);

Ahora ejecutamos los comandos siguientes (se comienza cerrando la ventana activa, para que
al crear la nueva ventana aparezca en primer plano):
close
grid
plot(x,y)
Se puede observar la diferencia con la secuencia que sigue:
close
plot(x,y)
grid

El comando plot puede utilizarse también con matrices como argumentos. Por ejemplo:

plot(A) dibuja una línea por cada columna de A en ordenadas, frente al


índice de los elementos en abscisas

plot(x,A) dibuja las columnas (o filas) de A en ordenadas frente al vector x


en abscisas. Las dimensiones de A y x deben ser coherentes: si la
matriz A es cuadrada se dibujan las columnas, pero si no lo es y la
dimensión de las filas coincide con la de x, se dibujan las filas

plot(A,x) análogo al anterior, pero dibujando las columnas (o filas) de A en


abscisas, frente al valor de x en ordenadas

plot(A,B) dibuja las columnas de B en ordenadas frente a las columnas de A


INTRODUCCIÓN AL MATLAB 13
en abscisas, dos a dos. Las dimensiones deben coincidir

plot(A,B,C,D) análogo al anterior para cada par de matrices. Las dimensiones de


cada par deben coincidir, aunque pueden ser diferentes de las
dimensiones de los demás pares

Estilos de línea y marcadores en la función plot

Cuando se grafican varias funciones en una sola hoja es necesario diferenciar una de otra,
para ello se cuenta con los siguientes colores y caracteres.

Símbolo Color Símbolo Marcadores (markers)


y yellow . puntos
m magenta o círculos
c cyan x marcas en x
r red + marcas en +
g green * marcas en *
b blue s marcas cuadradas (square)
w white d marcas en forma de diamante (diamond)
k black ^ triángulo apuntando hacia arriba
v triángulo apuntando hacia abajo

Símbolo Estilo de línea


> triángulo apuntando a la derecha.
- líneas continuas
< triángulo apuntando a la izquierda.
: líneas discontinuas
-. líneas barra- punto
-- líneas discontinuas

Cuando hay que dibujar varias líneas, por defecto se van tomando sucesivamente los colores
de la tabla comenzando por el azul, hacia arriba, y cuando se terminan se vuelve a empezar
otra vez por el azul. Si el fondo es blanco, este color no se utiliza para las líneas.

Añadir líneas a una gráfica ya existente

Existe la posibilidad de añadir líneas a una gráfica ya existente, sin destruirlo o sin abrir una
nueva ventana. Se utilizan para ello los comandos hold on y hold off. El primero de ellos hace
que los gráficos sucesivos respeten los que ya se han dibujado en la figura (es posible que
haya que modificar la escala de los ejes); el comando hold off deshace el efecto de hold on.
El siguiente ejemplo muestra cómo se añaden las gráficas de y y z a la gráfica previamente
creada (cada una con un tipo de línea diferente):
plot(x)
hold on
plot(x2,'--')
plot(x3,'-.')
hold off

comando subplot
INTRODUCCIÓN AL MATLAB 14
Una ventana gráfica se puede dividir en m particiones horizontales y n verticales, con objeto de
representar múltiples gráficas en ella. Cada una de estas subventanas tiene sus propios ejes,
aunque otras propiedades son comunes a toda la figura. La forma general de este comando es:

subplot(m,n,i)

donde m y n son el número de subdivisiones en filas y columnas, e i es la subdivisión que se


convierte en activa. Las subdivisiones se numeran consecutivamente empezando por las de la
primera fila, siguiendo por las de la segunda, etc. Por ejemplo, la siguiente secuencia de
comandos genera cuatro gráficos en la misma ventana:

y = sin(x); z = cos(x); w = exp(-x*.1).*y; v = y.*z;


subplot(2,2,1), plot(x,y)
subplot(2,2,2), plot(x,z)
subplot(2,2,3), plot(x,w)
subplot(2,2,4), plot(x,v)

Se puede practicar con este ejemplo añadiendo títulos a cada subplot, así como etiquetas para
los ejes. Se puede intentar también cambiar los tipos de línea. Para volver a la opción por
defecto basta teclear el comando:
subplot(1,1,1)

Control de los ejes


También en este punto MATLAB tiene sus opciones por defecto, que en algunas ocasiones
puede interesar cambiar. El comando básico es el comando axis. Por defecto, MATLAB ajusta
la escala de cada uno de los ejes de modo que varíe entre el mínimo y el máximo valor de los
vectores a representar. Este es el llamado modo "auto", o modo automático. Para definir de
modo explícito los valores máximo y mínimo según cada eje, se utiliza el comando:

axis([xmin, xmax, ymin, ymax])

Otros comandos para el control de ejes son los siguientes:

axis(’auto’) devuelve las escalas de los ejes al valor por defecto o automático.

v=axis devuelve un vector v con los valores [xmin, xmax, ymin, ymax]

axis(axis) mantiene los ejes en sus actuales valores, de cara a posibles nuevas
gráficas añadidas con hold on

axis('ij') utiliza ejes de pantalla, con el origen en la esquina superior izda. y el


eje j en dirección vertical descendente

axis('xy') utiliza ejes cartesianos normales, con el origen en la esquina inferior


izda. y el eje y vertical ascendente

axis('equal') el escalado es igual en ambos ejes

axis('square') la ventana será cuadrada

axis('image') la ventana tendrá las proporciones de la imagen que se desea


representar en ella (por ejemplo la de una imagen bitmap que se
INTRODUCCIÓN AL MATLAB 15
desee importar) y el escalado de los ejes será coherente con dicha
imagen
axis(’normal’) elimina las restricciones introducidas por ’equal’ y ’square’

axis(’off’) elimina las etiquetas, los números y los ejes

axis('on') restituye las etiquetas, los números y los ejes

Generación de formas de onda y graficas


(suma de senoides)

t = 0:0.001:1;
y = 2*sin(2*pi*40*t) + sin(2*pi*60*t);
plot(t,y)

Formas de ondas específicas

Fs = 1000;
T1 = 0:1/Fs/1.5;
y1 = sawtooth(2*pi*40*T1);
Plot(T1,x); axis([0 0.2 -1 1])

y2 = square(2*pì*40*T2)
Plot(T2,y2); axis([0 0.2 -1 1])

Ejemplo: Generemos una señal senoidal x(t) = Asen(t + ). Con los siguientes parámetros:
A= 4; %Amplitud, la adición del carácter ( ; ) evita que se
despliegue el numero en pantalla
omega = 30; %Frecuencia angular
phi = pi/4; %Angulo de defasamiento
y = A*sin(omega*t + phi);
plot(t,y) %gráfica en forma continua
grid %adiciona a la gráfica una malla
title(‘Señal senoidal’)
xlabel('tiempo(seg)') %pone la etiqueta al eje X
ylabel('voltaje') %pone etiqueta al eje Y
gtext('punto máximo') %pone una leyenda que se puede colocar con el mouse

la gráfica obtenida se muestra a continuación


INTRODUCCIÓN AL MATLAB 16

Grafiquemos ahora la secuencia x(n) = 0.9n , 0  n  10


n = 0:10;
x = (0.9).^n; % aquí el símbolo ^ indica que n es un exponente
stem(n,x) %Gráfica en forma discreta
grid
xlabel('numero de muestra')
ylabel('voltaje')
title('Secuencia')

Si deseamos cambiar la escala de la gráfica usamos las siguientes instrucciones


set(gca,’xtick’,[0 1 2 3 4 5]);
set(gca,’ytick’,[0 .1 .2 .3]);

Generemos ahora la secuencia compleja x(n)  e ( 0.1 j 0.3) n , - 10  n  10 . Graficar su


magnitud, fase, parte real y parte imaginaria. En MATLAB tendríamos lo siguiente
n=-10:10;
alfa=-0.1+0.3j;
x=exp(alfa*n);
subplot(221),stem(n,real(x)); title('parte real'), xlabel('n')
INTRODUCCIÓN AL MATLAB 17
subplot(222),stem(n,imag(x)); title('parte imaginaria'), xlabel('n')
subplot(223),stem(n,abs(x)); title('magnitud'), xlabel('n')
subplot(224),stem(n,(180/pi)*angle(x)); title('ángulo de fase'), xlabel('n')

Control de ventanas gráficas: función figure

Si se llama a la función figure sin argumentos, se crea una nueva ventana gráfica con el
número consecutivo que le corresponda. El valor de retorno es dicho número. Por otra parte, el
comando figure(n) hace que la ventana n pase a ser la ventana o figura activa. Si dicha
ventana no existe, se crea una nueva ventana con el número consecutivo que le corresponda
(que se puede obtener como valor de retorno del comando). La función close cierra la figura
activa, mientras que close(n) cierra la ventana o figura número n. El comando clf elimina el
contenido de la figura activa, es decir, la deja abierta pero vacía.
La función gcf devuelve el número de la figura activa en ese momento. Para practicar un poco
con todo lo que se acaba de explicar, vamos a ejecutar las siguientes instrucciones observando
con cuidado los efectos de cada una de ellas en la ventana activa. El comando figure(gcf) (get
current figure) permite hacer visible la ventana de gráficos desde la ventana de comandos.

x = [-4*pi:pi/20:4*pi];
plot(x,sin(x),'r',x,cos(x),'g')
title('Función seno(x) -en rojo- y función coseno(x) -en verde-')
xlabel('ángulo en radianes'), figure(gcf)
ylabel('valor de la función trigonométrica'), figure(gcf)
axis([-12,12,-1.5,1.5]), figure(gcf)
axis('equal'), figure(gcf)
axis('normal'), figure(gcf)
axis('square'), figure(gcf)
axis('off'), figure(gcf)
axis('on'), figure(gcf)
axis('on'), grid, figure(gcf)

Otras funciones gráficas 2-D

Existen otras funciones gráficas bidimensionales orientadas a generar otro tipo de gráficos
distintos de los que produce la función plot() y sus análogas. Algunas de estas funciones son
las siguientes:
INTRODUCCIÓN AL MATLAB 18

bar() crea diagramas de barras

barh() diagramas de barras horizontales

bar3() diagramas de barras con aspecto 3-D

bar3h() diagramas de barras horizontales con aspecto 3-D

pie() gráficos con forma de “tarta”

pie3() gráficos con forma de “tarta” y aspecto 3-D

area() similar plot(), pero rellenando en ordenadas de 0 a y

stairs() función análoga a bar() sin líneas internas

errorbar() representa sobre una gráfica –mediante barras– valores de errores

compass() dibuja los elementos de un vector complejo como un conjunto de vectores


partiendo de un origen común

feather() dibuja los elementos de un vector complejo como un conjunto de vectores


partiendo de orígenes uniformemente espaciados sobre el eje de abscisas
hist() dibuja histogramas de un vector

rose() histograma de ángulos (en radianes)


quiver() dibujo de campos vectoriales como conjunto de vectores

Ejemplo, genere un vector de valores aleatorios entre 0 y 10, y ejecute los siguientes
comandos:
x = [rand(1,100)*10];
plot(x)
bar(x)
stairs(x)
hist(x)
hist(x,20)
alfa=(rand(1,20)-0.5)*2*pi;
rose(alfa)

Graficas en 3D
Ejemplo:
subplot(221) %abre una hoja de donde se pueden colocar 4 imágenes
t=-pi:0.01:pi; %generación del vector de tiempo
y1 = sin(3*t)./t;
plot(t,y1); %gráfica en la posición (1,1)
title(‘función sampling’)
subplot(222) %se coloca en la figura (1,2)
stem(t,y1);
subplot(223) %grafica en al posición (2,1)
t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t); % gráfica en tres dimensiones
INTRODUCCIÓN AL MATLAB 19
title(‘hélice’)
subplot(224); %grafica en la posición (2,2)
x = -8:0.5:8;
y = x;
[X,Y] = meshgrid(x,y); %convierte los vectores a matrices del tamaño de x
R = sqrt(X.^2+Y.^2);
z = sin( R )./R;
mesh(z); %grafica en tres dimensiones
grid
title(‘función sampling en tres dimensiones’)

Función input
La función input permite imprimir un mensaje en la línea de comandos de MATLAB y recuperar
como valor de retorno un valor numérico o el resultado de una expresión tecleada por el
usuario.
Después de imprimir el mensaje, el programa espera que el usuario teclee el valor numérico o
la expresión. Cualquier expresión válida de MATLAB es aceptada por este comando. El usuario
puede teclear simplemente un vector o una matriz. En cualquier caso, la expresión introducida
es evaluada con los valores actuales de las variables de MATLAB y el resultado se devuelve
como valor de retorno. Ejemplo:

n = input('Teclee el número de ecuaciones')

Otra posible forma de esta función es la siguiente (obsérvese el parámetro ’s’):

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

En este caso el texto tecleado como respuesta se lee y se devuelve sin evaluar, con lo que se
INTRODUCCIÓN AL MATLAB 20
almacena en la cadena nombre. Así pues, en este caso, si se teclea una fórmula, se almacena
como texto sin evaluarse.

Función disp
La función disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero
sin imprimir su nombre. En realidad, disp siempre imprime vectores y/o matrices: las cadenas
de caracteres son un caso particular de vectores. Ejemplos:

disp('El programa ha terminado')


A = rand(4,4)
disp(A)

Algunas Aplicaciones

Series de Fourier

En análisis de señales es útil observar los componentes armónicos de una señal, el MATLAB
nos permite de manera fácil y rápida observar la adición de dichos componentes veamos como:
Sabemos que utilizando el análisis de Fourier podemos descomponer una señal en sus
componentes armónicos, por ejemplo si tenemos una señal cuadrada la cual podemos escribir
4v  1 4v 1 1
como f (t )  
 n 1 n
senn 0 t 

( sen 0 t 
3
sen3 0 t 
5
sen5 0 t  ...)

Vamos a graficar los armónicos de esta función generando uno por uno y posteriormente
haremos un programa para obtenerlos

t = 0:.1:10;
y = sin(t);
plot(t,y),

Primer armónico
y = sin(t) + sin(3*t)/3;
plot(t,y)
INTRODUCCIÓN AL MATLAB 21

Adición de dos armónicos

y = sin(t) + sin(3*t)/3 + sin(5*t)/5 + sin(7*t)/7 + sin(9*t)/9;


plot(t,y)

adición de tres armónicos

t = 0:.02:3.14;
y = zeros(10,max(size(t))); %abriendo espacio para almacenar los
valores de los armónicos
x = zeros(size(t));

% programa para generar los armónicos de una señal cuadrada


%Programa para obtener los armónicos de una señal cuadrada
%con un periodo de T = 1 seg
%Ezequiel Rodríguez R.
%Universidad Autónoma Metropolitana - Azc
T = 1;
Wo = 2*pi/T;
t = 0:0.001:pi;
y = square(2*pi*t/T);
plot(t,y,'r-')
grid
hold on
x = 0;
INTRODUCCIÓN AL MATLAB 22
for k = 1:2:10
x = x + (4*sin(k*Wo*t))/(pi*k);
y((k+1)/2,:) = x;
plot(t,x), pause
end
title('componentes armónicos')
xlabel('tiempo'), ylabel('amplitud')

Análisis espectral

Una herramienta poderosa en análisis de señales es la transformada de Fourier, a continuación veamos un


ejemplo de la obtención de esta utilizando el algoritmo FFT

Analisis espectral
Fs = 1000; %frecuencia de muestreo
t = 0:1/Fs:0.25; %vector con datos muestreados a 1 khz
x = sin(2*pi*50*t) + 2*sin(2*pi*100*t); %suma de señales de 60 y 120 hz.
y1 = x + 3*randn(size(t)); %adicionando ruido gaussiano con desviación
%estándar de 3 y media cero
subplot(211)
plot(t(1:100),y1(1:100)), title('señal con ruido en el dominio del tiempo');
xlabel('tiempo (seg)')
grid
y = fft(y1,256); %obtención de la fft utilizando 256 puntos
yy = y.*conj(y)/256; %Obteniendo la norma
f = 1000/256*(0:127); %generación del vector frecuencia
subplot(212)
plot(f(1:100), yy(1:100)); %graficando solamente 100 puntos
axis([0 200 0 200])
set(gca,'xtick',[0:50:200])
title('Espectro de la señal');
grid
xlabel('frecuencia [hz]')
INTRODUCCIÓN AL MATLAB 23

Convolución

La operación de convolución también es posible obtenerla utilizando MATLAB


Ejemplo 1: Dadas las dos secuencias
x(n) = [3, 11, 7, 0, -1, 4,2], -3  n  3; h(n) = [2, 3, 0, -5, 2,1], -1  n  4
Encontrar la convolución y(n) = x(n) * h(n)

Ejemplo 2: sea el pulso rectangular x(n) = u(n)-u(n-10) la entrada a un sistema cuya respuesta
al impulso es h(n) = (0.8)n u(n), encontrar la salida y(n). Sabemos que la salida esta dad por la
convolución entre x(n) y h(n).
A1=zeros(1,5)
A2=ones(1,10);
A3=zeros(1,40);
INTRODUCCIÓN AL MATLAB 24
X=[A1 A2 A3]; %generando la secuencia x(n)
n=-5:49;
stem(n,x)
grid
title('secuencia x(n)')
xlabel('n')
h=(0.9).^n; % generando la secuencia h(n)
subplot(311)
plot(n,x)
subplot(311)
stem(n,x)
title('secuencia x(n)')
subplot(312)
stem(n,h)
title('secuencia h(n)')
y=conv(x,h); % convolución entre x(n) y h(n)
subplot(313)
stem(y)
title('convolución entre h(n) y x(n)')
axis([0 60 0 15])

Transformada Z
Para encontrar la transformada Z y su inversa se tienen los sig comandos
Syms, ztrans, iztrans

Ejemplo: encontrar la transformada Z de la señal x(n) = (0.9)n

syms n z
ztrans((0.9)^n)

Inversa
iztrans(z/(z-0.9))

También podría gustarte