Está en la página 1de 35

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 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 Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

ndice
OBJETIVOS DE LA GUA Y A QUIEN ESTA DIRIGIDA. INTRODUCCIN. PARTE 1 APLICACIONES SIMPLES PARA PRIMER AO.
1.1 Entorno de Trabajo 1.2 Creacin de Variables 1.3 Creacin de Funciones 1.4 Creacin de Grficas 1.5 Generalidades del comando plot 1.6 Editor de MATLAB 1.7Programacin en MATLAB

3 4 7
7 8 10 11 14 16 19

PARTE 2 APLICACIONES PARA ANLISIS DE SEALES.


Aplicacin 1 Armnicos de una seal cuadrada Aplicacin 2 Grfica de sinusoidales y anlisis en frecuencia Aplicacin 3 Grfica de sinusoidales utilizando Simulink Aplicacin 4 Manejo de Audio

22
22 23 25 26

PARTE 3 APLICACIONES PARA INTELIGENCIA ARTIFICIAL


1. Redes Neuronales 2 Lgica Difusa

28
28 31

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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 enseanzaaprendizaje. Se agradece especialmente la colaboracin de los ayudantes Csar Villalobos y Sebastin Rodrguez en la formulacin de la primera parte de la gua.

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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
2

Octave http://www.gnu.org/software/octave/ Sitio Oficial Mathworks http://www.mathworks.com ; y en espaol, http://www.mathworks.es/ 4 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

Figura 2 Familia de productos Matlab - Simulink

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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

VENTANA WORSPACE

COMMAND WINDOW

COMMAND HISTORY

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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 help demos sqrt roots abs log log10 clear plop Axis figure Clc Uso >>help >>demos >>sqrt(A) >>roots(P(x)) >>abs(A) >>log(A) >>log10(A) >>clear A >>plop(a,b) >>axis(opcion) >>figure(gcf) >>clc Detalle Aparece la ventana de ayuda Aparecen ejemplos Raz cuadrada de A Halla las races del polinomio P(x) Valor absoluto de A Logaritmo natural de A Logaritmo base 10 de A Borra la variable A Grafica los pares ordenados (a,b) Opciones del escalado del grafico Llama al grafico al frente 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:
8 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

>>x=[1 2 3] >>y=[log(6) sqrt(4) 8]

%Crear un vector x con los valores 1, 2 y 3

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.
9 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

Ejemplos varios,
>> (1:7) % crea un vector que comienza en 1, aumenta de 1 en 1 y acaba en 7 ans = 1234567 >> (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 = 159 >> (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 = 246 >> 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)).
10 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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)

11

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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)
13 12 11 10 9 8 7 6 5 4 3

10

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

14

12

10

10

12

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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)
140 120 100 80 60 40 20 0 -20 -10

-5

10

15

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);
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1

10

13

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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:
14 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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 'EdgeColor', 'g'); de una Parabola', 'color', 'b',

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.

15

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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<=variable<=2pi hold on; ezplot(f,[ -1,5,0,6]); %en donde los nmeros entre corchetes corresponden a los rangos de las variables x e y dados por uno. [x,y,z,], por lo tanto el par ordenado (1,5) es el rango de x y el par ordenado (0,6) es el rango de y. a=(-10:0.1:10); b=a.^2; %parbola con una variable hold on; %permite realizar varios grficos en una misma ventana sin que se distorsionen
16 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.
y-2 (x-3)2+3 = 0 6

-2

-4

-6 -6 -4 -2 0 x 2 4 6

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 yb 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)
17 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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

18

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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 Entrada de datos Salida de datos Detalle variable=input(mensaje); disp(valor); con un solo valor disp([valor, valor, ]); con varios valores Salida de datos con fprintf(formatos,variables); en donde los formatos formato 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

19

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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
20 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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;

21

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.


22 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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); yy = y.*conj(y)/256; f = 1000/256*(0:127); subplot(212) plot(f(1:100), yy(1:100)); %obtencin de la fft utilizando 256 puntos %Obteniendo la norma %generacin del vector frecuencia %graficando solamente 100 puntos 23 M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.

24

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.

25

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.

26

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.

27

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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

28

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.

29

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

Secuencia de Configuracin de la Red


Vector de Entrada Vector de Patrones (target) Visualizacin de la Red Resultados, - Vector de salida de la Red - Vector de Errores de la Red

Creacin de la Red

Entrenamiento Simulacin

Secuencia de configuracin del nntool.

30

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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:

_P eq ue

_P oc os

M uc ho

Po co s

M ed ia

La rg a

M uy

M uy

M uc h

Pe qu e

Coches
1 2 3 4 5 6 7 8 9 10

10

Variables de entrada, Q y A

31

M. C. Jarur M.

si

Coches

os

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

M uy _C or to

T
1

M ed io

C or to

10

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 Larga Media Pequea

Muy_Pocos Muy_Corto Muy_Corto Muy_Corto

Pocos Corto

La rg o

Segs.

Muchos Medio

Muchisimos Largo Medio

Muy_Corto Corto

Muy_Corto Muy_Corto Corto Muy_Corto Muy_Corto Muy_Corto

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

32

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

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.

33

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule

Ingeniera Civil Informtica 2008

Pantalla inicial

Visualizador de Superficie generada por las reglas

Editor de Funciones de pertenencia

Reglas

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.

34

M. C. Jarur M.

Gua de MATLAB Universidad Catlica del Maule


Menu: View, Rule Viewer,

Ingeniera Civil Informtica 2008

Variable A

Variable Q

Variable T

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.

35

M. C. Jarur M.

También podría gustarte