-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule Versin 2/2008
Gua de Matlab con aplicaciones al Curriculum de
Ingeniera Civil Informtica
Mary C. Jarur M. Departamento de Computacin e Informtica
Facultad de Ciencias de la Ingeniera
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
2
ndice OBJETIVOS DE LA GUA Y A QUIEN ESTA DIRIGIDA. 3
INTRODUCCIN. 4
PARTE 1 APLICACIONES SIMPLES PARA PRIMER AO. 7 1.1 Entorno de
Trabajo 7
1.2 Creacin de Variables 8
1.3 Creacin de Funciones 10
1.4 Creacin de Grficas 11
1.5 Generalidades del comando plot 14
1.6 Editor de MATLAB 16
1.7Programacin en MATLAB 19
PARTE 2 APLICACIONES PARA ANLISIS DE SEALES. 22 Aplicacin 1
Armnicos de una seal cuadrada 22
Aplicacin 2 Grfica de sinusoidales y anlisis en frecuencia
23
Aplicacin 3 Grfica de sinusoidales utilizando Simulink 25
Aplicacin 4 Manejo de Audio 26
PARTE 3 APLICACIONES PARA INTELIGENCIA ARTIFICIAL 28
1. Redes Neuronales 28
2 Lgica Difusa 31
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
3
Objetivos de la gua y a quien esta dirigida.
El uso de herramientas de modelamiento y anlisis son
fundamentales en el diseo y prueba de prototipos, tanto a nivel de
software como hardware. En la formacin de un Ingeniero Civil
Informtico, la posibilidad de contar con un laboratorio virtual en
trminos de poner en prctica sus diseos y modelos es fundamental, as
tambin como contar con un entorno grfico de enseanza, es una gran
oportunidad en el mejoramiento de los aprendizajes, tanto por el
hecho de mejorar el factor motivacional de los estudiantes, as como
tambin para mejorar sus resultados incorporando mtodos innovadores
que permitan trabajos colaborativos, desarrollo de proyectos,
resolucin de problemas, etc.
Nuestra Escuela de Ingeniera Civil Informtica, posee hace varios
aos la licencia para educacin del software Matlab, plataforma que
en los ltimos aos ha sido incorporada como herramienta de
aprendizaje de varios ramos y al no contar con literatura al
respecto es que nace la motivacin de crear esta gua inicial, la
cual puede en el futuro seguirse adaptando al curriculum particular
de nuestra carrera, invitando a los estudiantes a incorporar la
herramienta como un buen recurso para el aprendizaje. Actualmente
se esta realizando la compra de bibliografa que potencie el uso de
la herramienta, pero de todas formas, esta gua se adapta a las
necesidades de un curriculum especfico.
La primera parte de esta gua esta focalizada a los estudiantes
de primer ao, en el contexto del ramo de Introduccin a la Ingeniera
(ICI-114), donde se familiarizan con el entorno, y desarrollan
aplicaciones que tienen relacin con los ramos de Algebra (ICI-112)
e Introduccin a la Computacin (ICI113). La segunda parte tiene
relacin con el procesamiento de seales, que permitir incluir la
herramienta en ramos tales como Transmisin de Datos (ICI-222) y
Circuitos Digitales (ICI-511). Finalmente la ltima parte presenta
aplicaciones sustentadas tericamente con el ramo de Inteligencia
Artificial (ICI-612), ramo donde se comenz a trabajar con la
plataforma Matlab desde el ao 2005.
Es importante mencionar que este es una primera aproximacin y
queda como desafo mejorar dicha gua, especialmente con la
interaccin directa de Ciencias Bsicas para incorporar herramientas
de simulacin en los procesos de enseanza-aprendizaje.
Se agradece especialmente la colaboracin de los ayudantes Csar
Villalobos y Sebastin Rodrguez en la formulacin de la primera parte
de la gua.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
4
Introduccin. Existe en el mercado una amplia gama de recursos de
software para el diseo, programacin y simulacin. Entre estos
existen dos particularmente muy similares que se diferencian por
ser uno de distribucin libre (licencia gratuita) y el otro
propietario. Nos referimos a Octave y Matlab respectivamente.
El software libre llamado OCTAVE1 que posee un entorno muy
similar a Matlab, y que permite el mismo tipo de programacin as
como tambin acepta los cdigos realizados sobre Matlab.
Figura 3 Octave
La plataforma Matlab2 propiedad de Mathworks puede ser definido
(segn sus fabricantes) como un lenguaje de alto nivel y un entorno
interactivo que permite realizar tareas de clculo complejas de
forma ms rpida que con los lenguajes de programacin tradicionales,
como C, C++ y Fortran. Su nombre proviene de la reduccin de Matrix
Laboratory (laboratorio de matrices).
Figura 1 Matlab
1 Octave http://www.gnu.org/software/octave/
2 Sitio Oficial Mathworks http://www.mathworks.com ; y en
espaol, http://www.mathworks.es/
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
5
Posee adems una variedad muy amplia de Toolbox que proveen
funcionalidades en reas especficas tales como:
Optimizacin y Matemtica Optimization Toolbox Symbolic Math
Toolbox Partial Differential Equation Toolbox Genetic Algorithm and
Direct Search Toolbox
Anlisis de datos y Estadstica Statistics Toolbox Neural Network
Toolbox Curve Fitting Toolbox Spline Toolbox Model-Based
Calibration Toolbox
Anlisis y Diseo de Sistemas de Control Control System Toolbox
System Identification Toolbox Fuzzy Logic Toolbox Robust Control
Toolbox Model Predictive Control Toolbox Aerospace Toolbox
Comunicaciones y Procesamiento de Seales Signal Processing
Toolbox Communications Toolbox Filter Design Toolbox Filter Design
HDL Coder Wavelet Toolbox Fixed-Point Toolbox RF Toolbox
Procesamiento de Imagenes Image Processing Toolbox Image
Acquisition Toolbox Mapping Toolbox
Medicin y Prueba Data Acquisition Toolbox Instrument Control
Toolbox Image Acquisition Toolbox SystemTest OPC Toolbox
Matlab trae incorporado Simulink, que es una plataforma para
simulacin multidominio y diseo basado en modelos de sistemas
dinmicos y embebidos. Proporciona un entorno grfico interactivo y
un conjunto de libreras de bloques adaptables que permiten disear,
simular, implementar y probar una gran variedad de sistemas con
variacin temporal, entre los que se incluyen sistemas de
comunicaciones, control, procesamiento de seales, vdeo e
imagen.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
6
Figura 2 Familia de productos Matlab - Simulink
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
7
Parte 1 Aplicaciones simples para primer ao.
Esta primera parte entrega nociones bsicas de cmo interactuar
con Matlab por primera vez, y elementos bsicos del entorno, datos y
grficas. Se aconseja que si no se ha trabajado previamente con
Matlab, se realicen al menos las primeras actividades de esta gua
de todas formas. La idea es que al finalizar esta primera parte, el
estudiante sea capaz de realizar grficos simples en 2D utilizando
Matlab utilizando los comandos que sean pertinentes.
1.1 Entorno de Trabajo
Una vez abierto Matlab, se debe trabajar en la ventana de
comandos (Command Windows), como se indica en la figura siguiente,
identificando las ventanas de:
Workspace, espacio de trabajo donde se visualizan las variables
que existen. Command History, historial de commandos ejecutados.
Command Windows, ventana donde se ejecutan los commandos.
En caso de no tener esta vista podemos ir al men de vistas y
elegir el escritorio por defecto (View - Desktop Layout
Default).
COMMAND
WINDOW
VENTANA
WORSPACE
COMMAND
HISTORY
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
8
La manera en que se usa la ventana de comandos en Matlab es
similar a la consola de cualquier Sistema Operativo, tan solo se
requiere conocer los comandos y su sintaxis respectiva. A tener en
cuenta:
% todo lo que se escribe despus del signo de porcentaje es
llamado comentario (%este es un comentario).
Los comandos se pueden escribir cada uno por lnea, o en una sola
lnea separados por una coma (>> x=4, y=5, z=9)
Los comandos pueden ser escritos con un ; (punto y coma) al
final o no, la diferencia en es que al no finalizar con ; se
produce un eco de dicho comando en la misma ventana de
comandos.
Para comenzar se muestran una serie de comandos bsicos con su
debida explicacin que podran usarse en matemtica bsica.
Comandos Uso Detalle help >>help Aparece la ventana de
ayuda demos >>demos Aparecen ejemplos sqrt >>sqrt(A)
Raz cuadrada de A roots >>roots(P(x)) Halla las races del
polinomio P(x) abs >>abs(A) Valor absoluto de A log
>>log(A) Logaritmo natural de A log10 >>log10(A)
Logaritmo base 10 de A clear >>clear A Borra la variable A
plop >>plop(a,b) Grafica los pares ordenados (a,b) Axis
>>axis(opcion) Opciones del escalado del grafico figure
>>figure(gcf) Llama al grafico al frente Clc >>clc
Borra la pantalla de comandos
1.2 Creacin de Variables
La forma bsica de crear una variable unidimensional es:
>>x=5, y=6
Luego si queremos operar con dichas variables tenemos el
siguiente ejemplo de suma de dos variables,
>>z=x+y
Lo que desplegar en pantalla el resultado de z que ser 11, donde
al mismo tiempo se ha creado una nueva variable llamada z.
Para la creacin de una variable del tipo vector se tiene los
siguientes ejemplos:
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
9
>>x=[1 2 3] %Crear un vector x con los valores 1, 2 y
3
>>y=[log(6) sqrt(4) 8]
Los dos vectores creados anteriormente poseen 1 fila y 3
columnas.
Otra forma de crear vectores es,
>>x=(a,b) Crea un vector que aumenta de 1 en 1, desde a
hasta b. >>x=(a:c:b) Crea un vector que aumenta de c en c,
desde a hasta b.
Por ejemplo,
>>x=(1:5) Genera un vector con los valores: 1, 2, 3, 4, 5
>>x=(1:3:9) Genera un vector x con los valores: 1, 4, 7
Para crear una matriz de tamao 3x3 se tiene como ejemplo,
>> y=[1 2 3;4 5 6;7 8 9];
Donde cada fila esta separada por un punto y coma.
Otros ejemplo utilizando el comando de generacin de nmeros
randmicos rand(),
>> A=rand(6), B=inv(A), B*A ; % vea la estructura de cada
variable
La coma significa otras sentencias, es decir seria lo mismo
que
>> A=rand(6) >> B=inv(A) >> B*A
A parte de definir un vector introduciendo cada uno de sus
elementos, tambin podemos crearlo haciendo uso de las siguientes
sentencias:
(a:b) crea un vector que comienza en el valor a y acaba en el
valor b aumentando de 1 en 1.
(a:c:b) crea un vector que comienza en el valor a y acaba en el
valor b aumentando de c en c.
linspace (a,b,c) genera un vector linealmente espaciado entre
los valores a y b con c elementos.
linspace (a,b) genera un vector linealmente espaciado entre los
valores a y b con 100 elementos.
logspace (a,b,c) genera un vector logartmicamente espaciado
entre los valores 10^a y 10^b con c elementos.
logspace (a,b) genera un vector logartmicamente espaciado entre
los valores 10^a y 10^b con 50 elementos.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
10
Ejemplos varios,
>> (1:7) % crea un vector que comienza en 1, aumenta de 1
en 1 y acaba en 7 ans = 1 2 3 4 5 6 7 >> (1:3:10) % crea un
vector que comenzando en 1, aumenta de 3 en 3 hasta el 10 ans = 1 4
7 10 >> (1:4:10) % comenzando en 1, aumenta de 4 en 4 hasta
el 10 y por eso acaba en 9 ans = 1 5 9 >> (50:-7:1) % crea un
vector que comenzando en 50, disminuye de 7 en 7 hasta el 1 ans =
50 43 36 29 22 15 8 1 >> linspace (2,6,3) % genera un vector
desde el 2 al 6 con 3 elementos equidistantes ans = 2 4 6 >>
linspace (2,6,4) % genera un vector desde el 2 al 6 con 4 elementos
equidistantes ans = 2.0000 3.3333 4.6667 6.0000 >> logspace
(0,2,4) % genera un vector logartmicamente espaciado entre 10^0 y
10^2 con 4 elementos ans = 1.0000 4.6416 21.5443 100.0000
Por otra parte, si se necesita cambiar el valor de una variable
basta con re-asignarla, como se indica a continuacin >> x=18
% x vale 18 >> x=(1:1:10) % x ahora es un vector de 10
elementos
Finalmente si se requiere borrar una variable, se utiliza el
comando clear
>>clear x
Y la variable x ser borrada.
1.3 Creacin de Funciones Es posible crear vectores que
representen los valores de una funcin en el plano cartesiano. Se
requiere un vector para almacenar los valores del eje de las
abscisas y otro para el eje de las ordenadas.
Ejemplo Lnea Recta Para conseguir los valores en el eje de las
abscisas hacemos lo siguiente:
>>x=(0:1:10)
Es decir, se crea un vector x que comience desde cero y termine
en 10, aumentando de uno en uno, como se indic anteriormente (podra
hacerse solamente as x=(0,10)).
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
11
Posteriormente es necesario tener valores para el eje de las
ordenadas. Y para ello procedemos a utilizar una ecuacin
lineal:
>>y=x+3 >>z=x+5
As creamos las variables y y z las cuales tomarn los valores
respectivos segn la ecuacin asociada.
Ejemplo Funcin Seno
Veamos cmo se puede representar la funcin seno entre 0 y 10.
Para empezar se crea un vector X de 0 a10 con una distancia de
0.01:
x=0:0.1:10;
A continuacin, calculemos sin(x) almacenando el resultado en la
variable y: y=sin(x);
Ejemplo Parbola
Crearemos la variable x que ser un vector de 2501 elementos don
el menor es -10 avanzando en 0.01 en 0.01 hasta llegar a 15
>>x=-10:0.01:15;
Despus creamos la funcin y(x) que tendr la forma de una ecuacin
cuadrtica
>>y=x.^2 - 5*x - 10; % x.^2 Significa x al cuadrado
1.4 Creacin de Grficas
El comando plot nos permite graficar en 2 dimensiones. Una forma
de hacerlo es haber creado previamente los datos correspondiente al
eje de las abscisas y las ordenadas, es decir, x e y. La sintaxis
es como se indica, >>plot(x,y)
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
12
A continuacin se mostrarn varios ejemplos,
Ejemplo lnea recta Para conseguir los valores en el eje de las
abscisas y las ordenadas hacemos lo siguiente: >>x=(0:1:10)
>>y=x+3 Y para obtener la grfica siguiente se tiene,
>>plot(x,y)
0 1 2 3 4 5 6 7 8 9 103
4
5
6
7
8
9
10
11
12
13
Tambin se puede mostrar la traza de varias funciones que
dependan de una misma variable, esto es: >>x=[1 2 3 4 5 6 7 8
9 10] >>y=x+3 >>z=x+5 >>plot(x,y,x,z) Y se
observa a continuacin el resultado,
1 2 3 4 5 6 7 8 9 104
6
8
10
12
14
16
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
13
Ejemplo parbola
Al igual como se explic anteriormente primero se crean los
vectores,
>>x=-10:0.01:15; >>y=x.^2 - 5*x - 10; % x.^2
Significa x al cuadrado >>plot(x,y)
-10 -5 0 5 10 15-20
0
20
40
60
80
100
120
140
Ejemplo Sinusoide
Como se explico anteriormente se crearan los respectivos
vectores x e y segn, >> x=0:0.1:10; >> y=sin(x);
>> plot(x,y);
0 1 2 3 4 5 6 7 8 9 10-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
14
1.5 Generalidades del comando plot
El comando plot tiene una gran cantidad de parmetros adicionales
que sirven para personalizar el grafico. De esta manera el comando
plot se puede escribir:
>>plot(x,y,parmetros)
En donde los parmetros pueden ser:
Ejemplo:
>>plot(x,y,-rs, LineWidth,2)
En donde -rs quiere decir que son lneas continuas de color rojo
y de marcas cuadradas. El LineWidth,2 da la posibilidad de regular
el grosor de la lnea, siendo el tamao en esta ocasin igual a 2.
Tambin se le puede dar el nombre al grfico escribiendo:
>>plot(x,y),title('Grafica de una Funcin Lineal') %todo
junto
Si queremos podemos cambiar los ejes con la funcin Axis. MATLAB
ajusta la escala de cada uno de los ejes de modo que vare entre
el
mnimo y el mximo valor de los vectores a representar.
Este es el llamado modo "auto", o modo automtico. Para definir
de modo explcito los valores mximo y mnimo segn cada eje, se
utiliza el comando:
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
15
axis([xmin, xmax, ymin, ymax])
Mientras que:
axis('auto') devuelve el escalado de los ejes al valor por
defecto o automtico. Otros posibles usos de este comando son los
siguientes:
axis('equal') el escalado es igual en ambos ejes axis('square')
la ventana ser cuadrada Entre otros
Ejemplos, Si queremos que los ejes empiecen segn
eje X de (-10,15) eje Y de (-20, 140)
>>axis([-10,15,-20,140])
Si queremos graficar la funcin y(x) segn color rojo lnea
continua grosor de lnea igual a 1.5 con grilla, es decir, cuadrcula
con ttulo en azul (blue) y un recuadro verde
>>plot(x,y,'-r', 'LineWidth',1.5),grid,title('Grafica de
una Parabola', 'color', 'b', 'EdgeColor', 'g');
Posteriormente haremos que la ventana sea cuadrada
>>axis('square'), figure(gcf) Quedando como resultado la
figura siguiente para la grfica de la parbola antes realizada.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
16
1.6 Editor de MATLAB Matlab es un entorno de desarrollo que
cuenta con su propio lenguaje de alto nivel, por lo que puede
manipular archivos propios, que en este caso corresponden a los
M-files ( archivos con extensin .m ).
El Editor de Matlab es una herramienta en la que se le pueden
escribir de forma sencilla archivos tipo M-files. Los archivos
M-files contienen las secuencias de comandos, los cuales ser
ejecutados (interpretados para ser ms preciso), cuando en la
ventana de comandos se haga el llamado respectivo al archivo
*.m
Vista del Editor Para crear un archivo M-file se debe abrir el
editor, pudiendo hacerse de dos maneras distintas:
desde la ventana de comandos escribir el comando edit,
abriendose automticamente la ventan del editor.
Ir al men File, seleccionar New y M-file.
Los archivos M-files contienen un conjunto de instrucciones que
Matlab interpreta y ejecuta en la ventana de comandos (Command
Windows). De esta forma se pueden ejecutar varias tareas tan solo
escribiendo un archivo M-file y luego llamndolo por su nombre en la
Ventana de Comandos.
Comencemos con un ejemplo sencillo: EJEMPLO 1
============================================================
%Grafico de funciones f=(x-2)^2+(y-3)^2-5; %(x-2)^2+(y-3)^2=5 en
una circunferencia ezplot(f); grid on %usando ezplot, lo rangos de
las variables predeterminados son 2pi
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
17
plot(a,b); g=y-2*(x-3)^2+3; %parbola y=2*(x-3)^2-3 con dos
variables hold on; ezplot(g); hold off; %para que los futuros
grficos con se mezclen
============================================================
Se puede presenciar que corresponde al mismo orden que se usaba
en la lnea de comandos. Ahora se debe guardar el archivo en la ruta
predefinida C:\MATLAB6p5\work con el nombre que se desee, en este
caso circulo. As creamos un archivo circulo.m que ser llamado al
igual como se ejecuta un comando, es decir,
>>circulo
Obteniendo de esta forma una grafica de la funcin que
buscbamos.
-6 -4 -2 0 2 4 6-6
-4
-2
0
2
4
6
x
y
y-2 (x-3)2+3 = 0
Ahora mostraremos otro ejemplo para lo que abriremos un archivo
M-file nuevo.
EJEMPLO 2
============================================================
%Tareas Varias [a,b]=meshgrid(-10:0.1:10,-10:0.1:10); %escribir
varios rangos, en este caso para a y b
c1='a.^2+2*a.*b+b.^2-8*a+8*b'; figure(1) ezplot(c1); grid on
c2='a.^2-2*b'; hold on figure(1)
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
18
ezplot(c2) hold off x=-2:0.1:2; y=-3:0.1:3; [u,v]=meshgrid(x,y);
z=u.^2 v.^2; figure(2); mesh(x, y, z); %grafico de malla figure(3);
contour(x, y, z); %grafico de contorno figure(4); surfc(x, y, z);
%grafico de superficie y contorno figure(5); surf(x, y, z);
%grafico de superficie shading interp; %suavizado del grafico
============================================================
Llamaremos al archivo varios.m, lo guardaremos en la carpeta
work nuevamente para posteriormente llamarlo desde la Ventana de
Comandos >> varios
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
19
1.7Programacin en MATLAB
Como ya se ha mencionado Matlab tiene un lenguaje de alto nivel
incluido. La sintaxis de este lenguaje es similar a la del lenguaje
C. A continuacin se dan a conocer algunas palabras claves bsicas
para realizar un pequeo programa en Matlab.
Sintaxis Detalle Entrada de datos variable=input(mensaje);
Salida de datos disp(valor); con un solo valor
disp([valor, valor, ]); con varios valores Salida de datos con
formato
fprintf(formatos,variables); en donde los formatos pueden ser
enteros (%d), reales (%f), etc.
Condiciones Son banderas que definen si existe un estado se
realiza algo, sino, se realiza otra cosa. Las palabras claves if,
else y end. En el ejemplo 1 se muestra su uso
Bucles Solo daremos a conocer la estructura while o mientras por
el momento, que ejecuta una accin mientras se cumpla un estado. Las
palabras claves son while y end. En el ejemplo 2 se muestra su
uso.
Explicaremos ms en detalle con varios ejemplos sencillos.
Ejemplo 1: mostrar el nmero mayor ingresado
============================================================
a=input('ingrese el primer dato: '); b=input('ingrese el segundo
dato: '); if a>b m=a; else m=b; end disp(m);
============================================================
Lo guardamos con el nombre ejem1.m, y lo ejecutamos en la
llamndolo por la Ventana de Comandos
>>ejem1
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
20
Ejemplo 2: Suma de los n primeros nmeros de una progresin
armnica
============================================================
n=input('cantidad de trminos: '); s=0; while n>0 s=s+1/n;
n=n-1; end disp(s);
============================================================
Lo guardamos con el nombre ejem2.m y lo ejecutamos llamndolo
desde la Ventana de Comandos: >>ejem2
Se puede concluir que la forma de programar en Matlab es muy
sencilla y parecida a otros lenguajes de programacin. La diferencia
y ventaja de Matlab radica en la finalidad del entorno, ya que
cuenta con herramientas matemticas de nivel avanzado para reas como
calculo (limites, derivadas, integrales) y algebra (matrices,
sumatorias), por lo tanto se pueden crear programas que fcilmente
pueden desarrollar cualquier calculo matemtico.
Ejemplo 3: Solucin a un problema simple de algoritmos
Planteamiento del problema Una Profesora de sptimo bsico quiere
tener un control de su curso de n (n>2) alumnos, del los cuales
por cada prueba que realice, quiere tener el promedio de las notas
del curso completo y tambin quiere tener el nombre de la persona
que tiene la mejor nota para entregarle un incentivo por su
calificacin y tambin la persona que tiene la peor nota para un
mayor cuidado de ella, por su bajo rendimiento
Cdigo solucin
num_alumnos=input('ingrese numero de alumnos del curso ==>
'); if num_alumnos > 1; % condiciona el programa con 2 alumnos o
mas para que tenga sentido %Ingresa los datos de las notas en dos
diferentes vectores con los mismos %subindices i=1; for
k=1:num_alumnos notas(i)=input('ingrese nota ==> ');
nombre=input('ingrese nombre ==> ','s'); disp(' ');
celda(i)={nombre}; i=i+1; end; %calcula la media aritmetica
(promedio) de todos los alumnos
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
21
media=sum(notas)/num_alumnos; sprintf('El Promedio de las notas
es %d',media) %calcula al alumno con la mayor nota i=1;
mayor=notas(1); subindice=i; for k=1:num_alumnos; if mayor <
notas(i); mayor=notas(i); subindice=i; end; i=i+1; end; disp('el
alumno con la mayor nota es '); celda(subindice) sprintf('Y su nota
es %d',mayor)
%calcula al alumno con la menor nota i=1; menor=notas(1);
subindice=i; for k=1:num_alumnos; if menor > notas(i);
menor=notas(i); subindice=i; end; i=i+1; end; disp('el alumno con
la menor nota es '); celda(subindice) sprintf('Y su nota es
%d',menor)
clear; % borra las variables ocupadas
else disp('el numero de alumnos debe ser mayor que 2 ');
end;
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
22
Parte 2 Aplicaciones para anlisis de seales.
A continuacin se presentaran 4 aplicaciones simples las cuales
podrn ser modificadas para implementar otro tipo de anlisis sobre
seales.
Aplicacin 1 Armnicos de una seal cuadrada
El siguiente caso realiza la grfica de una seal cuadrada con sus
respectivos armnicos que a medida que corre la simulacin es posible
apreciar como se compone la seal original.
close all clear all %programa para generar los armnicos de una
seal cuadrada %con un periodo de T = 1 seg T = 1; Wo = 2*pi/T; t =
0:0.001:pi; y = square(2*pi*t/T); plot(t,y,'r-') grid figure
x = 0; for k = 1:2:30 x = x + (4*sin(k*Wo*t))/(pi*k);
y((k+1)/2,:) = x; plot(t,x), pause end title('componentes
armnicos'); xlabel('tiempo'), ylabel('amplitud');
Ejemplo de como va evolucionando la curva.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
23
Aplicacin 2 Grfica de sinusoidales y anlisis en frecuencia
En esta aplicacin se presenta la creacin de dos seales
sinusoidales puras, las cuales permiten componer una tercera seal,
hacer su respectivo anlisis en frecuencia, sin y con ruido
gaussiano.
clear all close all %EJEMPLO DE ANALISIS ESPECTRAL Fs = 1000;
%frecuencia de muestreo t = 0:1/Fs:0.25; %vector con datos
muestreados a 1 khz x1=sin(2*pi*50*t); x2=2*sin(2*pi*100*t);
subplot(411) plot(t(1:100),x1(1:100)), title('seal sinusoidal pura
50 hz en el dominio del tiempo'); subplot(412)
plot(t(1:100),x2(1:100)), title('seal sinusoidal pura 100 hz en el
dominio del tiempo');
n=256; x = x1+x2; %suma de seales de 60 y 100 hz. subplot(413)
plot(t(1:100),x(1:100)), title('suma de seales sin ruido en el
dominio del tiempo');
%********************************* y1 = fft(x,256); %obtencin de
la fft utilizando 256 puntos %********************************* yy1
= y1.*conj(y1)/256; %Obteniendo la norma f1 = Fs/256*(0:127);
%generacin del vector frecuencia subplot(414) plot(f1(1:100),
yy1(1:100)); %graficando solamente 100 puntos axis([0 200 0 200])
set(gca,'xtick',[0:50:200]) title('Espectro de la seal'); grid
xlabel('frecuencia [hz]');
figure y1 = x + 3*randn(size(t)); %adicionando ruido gaussiano
con %desviacin estndar de 3 y media cero subplot(211)
plot(t(1:100),y1(1:100)), title('seal con ruido en el dominio del
tiempo'); xlabel('tiempo (seg)') grid
y = fft(y1,256); %obtencin de la fft utilizando 256 puntos yy =
y.*conj(y)/256; %Obteniendo la norma f = 1000/256*(0:127);
%generacin del vector frecuencia subplot(212) plot(f(1:100),
yy(1:100)); %graficando solamente 100 puntos
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
24
axis([0 200 0 200]) set(gca,'xtick',[0:50:200]) title('Espectro
de la seal'); grid xlabel('frecuencia [hz]');
En la siguiente figura se muestran en el siguiente orden, funcin
sinusoidal de 50Hz y amplitud 1; funcin sinusoidal de 100Hz y
amplitud 2; suma de ambas seales; anlisis espectral de la seal
resultado de la suma, donde se aprecian los componentes en
frecuencia de ambas seales.
En la siguiente grfica se muestra la seal resultado de las sumas
ms un ruido gaussiano, y su respectivo anlisis espectral.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
25
Aplicacin 3 Grfica de sinusoidales utilizando Simulink
A continuacin se presenta un anlisis similar a los dos
anteriores (en el dominio del tiempo), donde se utiliza el entorno
grfico provisto por Simulink, donde es posible componer varios
escenarios de estudio.
Al lado izquierdo de la figura siguiente se muestran dos
simulaciones: la primera es el despliegue de dos seales
sinusoidales ms una seal de
ruido blanco. La segunda es la suma de dos seales de distinta
frecuencia y su posterior
filtrado. Para este caso es posible apreciar en la figura,
costado derecho, el resultado de las grficas, tanto para las seales
sin sumar, la suma y el resultado despus de aplicar un filtro
pasabanda.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
26
Simulaciones mediante Simulink
Aplicacin 4 Manejo de Audio
La siguiente aplicacin tambin trabaja sobre Simulink, donde se
implementa la lectura de la seal entrada proveniente del micrfono
la cual es enviada a la salida (parlante) con un retardo y una
etapa de amplificacin. En este ejemplo se tienen implcitos los
conceptos de conversin anloga/digital y digital/anloga que provee
la tarjeta del sonido del computador.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
27
Ejemplo utilizando Simulink para la lectura de un dispositivo de
entrada.
En este caso es posible verificar (posterior a la conexin del
micrfono y parlantes en el PC) que efectivamente se realiza un
registro de la seal capturada por el micrfono. Esta seal podra ser
almacenada en un archivo para su posterior procesamiento. De la
misma forma es que la plataforma permite leer datos de un archivo
ya pre-existente, lo que facilita mucho el procesamiento de seales
a todo nivel.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
28
Parte 3 Aplicaciones para Inteligencia Artificial
1. Redes Neuronales
A continuacin se realiza la codificacin un perceptron multicapas
(MLP) utilizando las funciones que trae incorporado el Toolbox de
Redes Neuronales. Este cdigo considera la solucin del problema
XOR.
% Implementacion de un MLP que sera entrenado con XOR % Patrones
de Entrada p= [0 0 1 1; 0 1 0 1];
% Target T= [0 1 1 0];
% Creacion de la red con dos entradas, cuatro neuronas en la
capa oculta y % 1 salida net = newff (minmax (p), [4 1],
{'logsig','logsig'}, 'traingd'); %trainlm'
% Se fijan parametros para el entrenamiento net.trainParam.show
= 250; %%25 net.trainParam.lr =0.2; %%0.02 net.trainParam.epochs =
10000; %%400 net.trainParam.goal = 1e-8; % Entrenamiento [net,tr] =
train(net,p,T); %% Simulacion despues de entrenar a = sim (net,p);
e = T -round(a) % Mostrar los resultados figure plot(T,'x'); hold
on plot(a,'o');
% Mostrar los pesos de la red net.IW{1} %pesos capa oculta
net.b{1} %bias capa oculta net.LW{2} %pesos capa de salida net.b{2}
%bias capa salida
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
29
Grficas que muestra el proceso de entrenamiento y la posterior
salida de la Red.
Por otra parte Matlab ofrece un entrono grfico para la
implementacin de redes neuronales que es llamado desde la lnea de
comandos con el trmino nntool, como se muestra en la siguiente
imagen.
Inicio de herramienta nntool
A continuacin se muestra un esquemtico de la secuencia completa
de configuracin de dicha herramienta con sus respectivas ventanas
de configuracin.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
30
Secuencia de configuracin del nntool.
Vector de Entrada
Vector de Patrones (target)
Visualizacin de la RedCreacin de la Red
Resultados,- Vector de salida de
la Red- Vector de Errores de
la Red
Secuencia de Configuracin de la Red
Entrenamiento Simulacin
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
31
2 Lgica Difusa
Como una forma de familiarizarse con el entorno de programacin
para Lgica Difusa de Matlab a continuacin se muestra un ejemplo
simple de implementacin de un control de trfico difuso para un
semforo utilizando las funciones que trae el Toolbox de Fuzzy y la
interfaz grfica de configuracin de un Sistema Difuso.
Se desea controlar en tiempo real el periodo en que un semforo
estar en el estado de Luz Verde (paso de vehculo). Para lograr esto
se cuenta con sensores que son capaces de entregar informacin
respecto de la longitud de la cola de vehculos en la fase roja
anterior y el ritmo de llegada de vehculos en la fase verde del
semforo.
Segn el planteamiento de la problemtica se tiene:
Variables de entrada (o de estado) o A: Ritmo de llegada de
vehculos (en la fase verde del semforo). o Q: Longitud de la cola
de vehculos (en la fase roja).
Variables de salida (o de control) o T: Tiempo de la fase verde
del semforo (con un valor mximo
prefijado). Etiquetas lingsticas de cada variable:
o A : Ritmo de llegada. o Q: Longitud de cola. o T: Tiempo de
fase verde
Por otra parte segn opiniones expertas respecto de las funciones
de pertenencia para cada una de las etiquetas lingsticas se tiene
lo siguiente:
Variables de entrada, Q y A
0 1 2 3 4 5 6 7 8 9 10
1
A
Coches
Muy_
Poco
s
Poco
s
Much
os
Much
simos
0 1 2 3 4 5 6 7 8 9 10
1
Q
Coches
Muy_
Pequ
ea
Pequ
ea
Media
Larga
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
32
Variable de salida T
Y las reglas difusas de control segn se indica en la siguiente
tabla las que son del tipo SI A Y Q ENTONCES T (tambin definidas
por un experto en trnsito).
Q/A Muy_Pocos Pocos Muchos Muchisimos
Larga Muy_Corto Corto Medio Largo Media Muy_Corto Muy_Corto
Corto Medio
Pequea Muy_Corto Muy_Corto Muy_Corto Corto Muy_Pequea Muy_Corto
Muy_Corto Muy_Corto Muy_Corto
Entonces teniendo clara la problemtica y la solucin de control
difusa es necesario abrir el editor fuzzy (FIS Editor) desde la
lnea de comandos de Matlab con la sentencia fuzzy. Donde se
apreciar la siguiente pantalla:
0 1 2 3 4 5 6 7 8 9 10
1
T
Segs.
Muy_
Corto
Corto
Medio
Largo
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
33
Vista principal de la internas Fuzzy de Matlab.
Ahora es necesario segn la definicin de la problemtica de
control, las variables fuzzy y sus respectivas funciones de
pertenencia, completar cada fase segn se indica en la figura
anterior, es decir,
Ingresar las funciones de pertenencia para las variables de
entrada A y Q. Ingresar las funciones de pertenencia para las
variables de salida T. Ingresar las reglas de control.
Luego cada una de estas etapas puede ser visualizada en la
siguiente figura, como se indica.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
34
Reglas
Visualizador de
Superficie generada
por las reglas
Pantalla
inicial
Editor de
Funciones de
pertenencia
Vista de las distintas configuraciones realizadas para este
ejemplo.
Finalmente cuando todo el modelo ha sido configurado, podemos
ver su operacin (Control del tiempo de luz verde), a travs del
Visor de Reglas (Rule Viewer), que nos permite cambiar los valores
de los sensores (CRISP, provenientes de las variables A y Q), y en
la misma pantalla apreciar como se ejecutan cada una de las reglas
y se compone la solucin final a travs de la grfica. Por ltimo a
partir de alguna tcnica de desfusificacin (por ejemplo centroide),
la herramienta tambin nos entrega el valor de la salida del
sistema, en trminos del tiempo que el semforo estar encendido en
luz verde. Ver figura siguiente.
-
Gua de MATLAB Ingeniera Civil Informtica Universidad Catlica del
Maule 2008
M. C. Jarur M.
35
Menu: View, Rule Viewer,
Variable A
Variable T
Variable Q
Valores provenientes de los sensores
(Valores CRISP)
Lneas Rojas
Resultado en tiempo del algoritmo de
control (defuzificacin)
Barra roja (centroide)
Todas las funcionalidades aqu expuestas son tambin
implementables en lnea de comandos o cdigos, sin necesidad de usar
la interfaz grfica fuzzy.