Story Transcript
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática Versión 2/2008
Guía de Matlab con aplicaciones al Curriculum de Ingeniería Civil Informática
Mary C. Jarur M. Departamento de Computación e Informática Facultad de Ciencias de la Ingeniería
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Índice OBJETIVOS DE LA GUÍA Y A QUIEN ESTA DIRIGIDA.
3
INTRODUCCIÓN.
4
PARTE 1 APLICACIONES SIMPLES PARA PRIMER AÑO.
7
1.1 Entorno de Trabajo
7
1.2 Creación de Variables
8
1.3 Creación de Funciones
10
1.4 Creación de Gráficas
11
1.5 Generalidades del comando plot
14
1.6 Editor de MATLAB
16
1.7Programación en MATLAB
19
PARTE 2 APLICACIONES PARA ANÁLISIS DE SEÑALES.
22
Aplicación 1 Armónicos de una señal cuadrada
22
Aplicación 2 Gráfica de sinusoidales y análisis en frecuencia
23
Aplicación 3 Gráfica de sinusoidales utilizando Simulink
25
Aplicación 4 Manejo de Audio
26
PARTE 3 APLICACIONES PARA INTELIGENCIA ARTIFICIAL
28
1. Redes Neuronales
28
2 Lógica Difusa
31
2
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Objetivos de la guía y a quien esta dirigida. El uso de herramientas de modelamiento y análisis son fundamentales en el diseño y prueba de prototipos, tanto a nivel de software como hardware. En la formación de un Ingeniero Civil Informático, la posibilidad de contar con un laboratorio virtual en términos de poner en práctica sus diseños y modelos es fundamental, así también como contar con un entorno gráfico de enseñanza, es una gran oportunidad en el mejoramiento de los aprendizajes, tanto por el hecho de mejorar el factor motivacional de los estudiantes, así como también para mejorar sus resultados incorporando métodos innovadores que permitan trabajos colaborativos, desarrollo de proyectos, resolución de problemas, etc. Nuestra Escuela de Ingeniería Civil Informática, posee hace varios años la licencia para educación del software Matlab, plataforma que en los últimos años ha sido incorporada como herramienta de aprendizaje de varios ramos y al no contar con literatura al respecto es que nace la motivación de crear esta guía 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 bibliografía que potencie el uso de la herramienta, pero de todas formas, esta guía se adapta a las necesidades de un curriculum específico. La primera parte de esta guía esta focalizada a los estudiantes de primer año, en el contexto del ramo de Introducción a la Ingeniería (ICI-114), donde se familiarizan con el entorno, y desarrollan aplicaciones que tienen relación con los ramos de Algebra (ICI-112) e Introducción a la Computación (ICI113). La segunda parte tiene relación con el procesamiento de señales, que permitirá incluir la herramienta en ramos tales como Transmisión de Datos (ICI-222) y Circuitos Digitales (ICI-511). Finalmente la última parte presenta aplicaciones sustentadas teóricamente con el ramo de Inteligencia Artificial (ICI-612), ramo donde se comenzó a trabajar con la plataforma Matlab desde el año 2005. Es importante mencionar que este es una primera aproximación y queda como desafío mejorar dicha guía, especialmente con la interacción directa de Ciencias Básicas para incorporar herramientas de simulación en los procesos de enseñanzaaprendizaje. Se agradece especialmente la colaboración de los ayudantes César Villalobos y Sebastián Rodríguez en la formulación de la primera parte de la guía.
3
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Introducción. Existe en el mercado una amplia gama de recursos de software para el diseño, programación y simulación. Entre estos existen dos particularmente muy similares que se diferencian por ser uno de distribución 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 programación así como también acepta los códigos realizados sobre Matlab.
Figura 3 Octave La plataforma Matlab2 propiedad de Mathworks® puede ser definido (según sus fabricantes) como un lenguaje de alto nivel y un entorno interactivo que permite realizar tareas de cálculo complejas de forma más rápida que con los lenguajes de programación tradicionales, como C, C++ y Fortran. Su nombre proviene de la reducción 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 español, http://www.mathworks.es/ 4
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Posee además una variedad muy amplia de Toolbox que proveen funcionalidades en áreas específicas tales como: • Optimización y Matemática Optimization Toolbox Symbolic Math Toolbox Partial Differential Equation Toolbox Genetic Algorithm and Direct Search Toolbox • Análisis de datos y Estadística Statistics Toolbox Neural Network Toolbox Curve Fitting Toolbox Spline Toolbox Model-Based Calibration Toolbox • Análisis y Diseño 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 Señales 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 • Medición y Prueba Data Acquisition Toolbox Instrument Control Toolbox Image Acquisition Toolbox SystemTest OPC Toolbox Matlab trae incorporado Simulink®, que es una plataforma para simulación multidominio y diseño basado en modelos de sistemas dinámicos y embebidos. Proporciona un entorno gráfico interactivo y un conjunto de librerías de bloques adaptables que permiten diseñar, simular, implementar y probar una gran variedad de sistemas con variación temporal, entre los que se incluyen sistemas de comunicaciones, control, procesamiento de señales, vídeo e imagen.
5
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Figura 2 Familia de productos Matlab - Simulink
6
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Parte 1 Aplicaciones simples para primer año. Esta primera parte entrega nociones básicas de cómo interactuar con Matlab por primera vez, y elementos básicos del entorno, datos y gráficas. Se aconseja que si no se ha trabajado previamente con Matlab, se realicen al menos las primeras actividades de esta guía de todas formas. La idea es que al finalizar esta primera parte, el estudiante sea capaz de realizar gráficos 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
7
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 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 después del signo de porcentaje es llamado comentario (%este es un comentario). Los comandos se pueden escribir cada uno por línea, o en una sola línea 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 básicos con su debida explicación que podrían usarse en matemática básica. 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 Raíz cuadrada de A Halla las raíces 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 Creación de Variables La forma básica 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 creación de una variable del tipo vector se tiene los siguientes ejemplos: 8
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
>>x=[1 2 3]
Ingeniería Civil Informática 2008
%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 tamaño 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 generación de números randómicos 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, también 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 logarítmicamente espaciado entre los valores 10^a y 10^b con c elementos. • logspace (a,b) genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b con 50 elementos. 9
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 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 logarítmicamente 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 continuación >> 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 Creación de Funciones Es posible crear vectores que representen los valores de una función 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 Línea 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 (podría hacerse solamente así x=(0,10)). 10
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Posteriormente es necesario tener valores para el eje de las ordenadas. Y para ello procedemos a utilizar una ecuación lineal: >>y=x+3 >>z=x+5 Así creamos las variables ‘y’ y ‘z’ las cuales tomarán los valores respectivos según la ecuación asociada. Ejemplo Función Seno Veamos cómo se puede representar la función 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 continuación, calculemos sin(x) almacenando el resultado en la variable y: » y=sin(x);
Ejemplo Parábola 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; Después creamos la función y(x) que tendrá la forma de una ecuación cuadrática >>y=x.^2 - 5*x - 10; % x.^2 Significa x al cuadrado
1.4 Creación de Gráficas 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.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
A continuación se mostrarán varios ejemplos, Ejemplo línea 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 gráfica siguiente se tiene, >>plot(x,y) 13 12 11 10 9 8 7 6 5 4 3
0
1
2
3
4
5
6
7
8
9
10
También 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 continuación el resultado, 16
14
12
10
8
6
4
1
2
3
4
5
6
12
7
8
9
10
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Ejemplo parábola 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
0
5
10
15
Ejemplo Sinusoide Como se explico anteriormente se crearan los respectivos vectores x e y según, >> 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
0
1
2
3
4
5
13
6
7
8
9
10
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
1.5 Generalidades del comando plot El comando plot tiene una gran cantidad de parámetros adicionales que sirven para personalizar el grafico. De esta manera el comando plot se puede escribir: >>plot(x,y,’parámetros’) En donde los parámetros pueden ser:
Ejemplo: >>plot(x,y,’-rs’, ‘LineWidth’,2) En donde ‘-rs’ quiere decir que son líneas continuas de color rojo y de marcas cuadradas. El ‘LineWidth’,2 da la posibilidad de regular el grosor de la línea, siendo el tamaño en esta ocasión igual a 2. También se le puede dar el nombre al gráfico escribiendo: >>plot(x,y),title('Grafica de una Función Lineal') %todo junto Si queremos podemos cambiar los ejes con la función Axis. 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: 14
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
axis([xmin, xmax, ymin, ymax]) Mientras que: • • • •
axis('auto') devuelve el escalado de los ejes al valor por defecto o automático. 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 según • eje X de (-10,15) • eje Y de (-20, 140) >>axis([-10,15,-20,140]) Si queremos graficar la función y(x) según • color rojo • línea continua • grosor de línea igual a 1.5 • con grilla, es decir, cuadrícula • con título 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 gráfica de la parábola antes realizada.
15
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 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 extensión .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 más 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 automáticamente 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 llamándolo 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 2picirculo Obteniendo de esta forma una grafica de la función que buscábamos. y-2 (x-3)2+3 = 0 6
4
y
2
0
-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.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 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.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
1.7Programación 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 continuación se dan a conocer algunas palabras claves básicas para realizar un pequeño 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 acción mientras se cumpla un estado. Las palabras claves son while y end. En el ejemplo 2 se muestra su uso. Explicaremos más en detalle con varios ejemplos sencillos. Ejemplo 1: mostrar el número 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 llamándolo por la Ventana de Comandos >>ejem1
19
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Ejemplo 2: Suma de los n primeros números de una progresión armónica ============================================================ n=input('cantidad de términos: '); 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 llamándolo 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 programación. La diferencia y ventaja de Matlab radica en la finalidad del entorno, ya que cuenta con herramientas matemáticas de nivel avanzado para áreas como calculo (limites, derivadas, integrales) y algebra (matrices, sumatorias), por lo tanto se pueden crear programas que fácilmente pueden desarrollar cualquier calculo matemático. Ejemplo 3: Solución a un problema simple de algoritmos Planteamiento del problema Una Profesora de séptimo básico 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 también quiere tener el nombre de la persona que tiene la mejor nota para entregarle un incentivo por su calificación y también la persona que tiene la peor nota para un mayor cuidado de ella, por su bajo rendimiento Código solución 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.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 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.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Parte 2 Aplicaciones para análisis de señales. A continuación se presentaran 4 aplicaciones simples las cuales podrán ser modificadas para implementar otro tipo de análisis sobre señales.
Aplicación 1 Armónicos de una señal cuadrada El siguiente caso realiza la gráfica de una señal cuadrada con sus respectivos armónicos que a medida que corre la simulación es posible apreciar como se compone la señal original. close all clear all %programa para generar los armónicos de una señal 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 armónicos'); xlabel('tiempo'), ylabel('amplitud');
Ejemplo de como va evolucionando la curva. 22
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Aplicación 2 Gráfica de sinusoidales y análisis en frecuencia En esta aplicación se presenta la creación de dos señales sinusoidales puras, las cuales permiten componer una tercera señal, hacer su respectivo análisis 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('señal sinusoidal pura 50 hz en el dominio del tiempo'); subplot(412) plot(t(1:100),x2(1:100)), title('señal sinusoidal pura 100 hz en el dominio del tiempo'); n=256; x = x1+x2; %suma de señales de 60 y 100 hz. subplot(413) plot(t(1:100),x(1:100)), title('suma de señales sin ruido en el dominio del tiempo'); %********************************* y1 = fft(x,256); %obtención de la fft utilizando 256 puntos %********************************* yy1 = y1.*conj(y1)/256; %Obteniendo la norma f1 = Fs/256*(0:127); %generación 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 señal'); grid xlabel('frecuencia [hz]'); figure 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); yy = y.*conj(y)/256; f = 1000/256*(0:127); subplot(212) plot(f(1:100), yy(1:100));
%obtención de la fft utilizando 256 puntos %Obteniendo la norma %generación del vector frecuencia %graficando solamente 100 puntos 23
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
axis([0 200 0 200]) set(gca,'xtick',[0:50:200]) title('Espectro de la señal'); grid xlabel('frecuencia [hz]');
En la siguiente figura se muestran en el siguiente orden, función sinusoidal de 50Hz y amplitud 1; función sinusoidal de 100Hz y amplitud 2; suma de ambas señales; análisis espectral de la señal resultado de la suma, donde se aprecian los componentes en frecuencia de ambas señales.
En la siguiente gráfica se muestra la señal resultado de las sumas más un ruido gaussiano, y su respectivo análisis espectral.
24
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Aplicación 3 Gráfica de sinusoidales utilizando Simulink A continuación se presenta un análisis similar a los dos anteriores (en el dominio del tiempo), donde se utiliza el entorno gráfico 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 señales sinusoidales más una señal de ruido blanco. • La segunda es la suma de dos señales de distinta frecuencia y su posterior filtrado. Para este caso es posible apreciar en la figura, costado derecho, el resultado de las gráficas, tanto para las señales sin sumar, la suma y el resultado después de aplicar un filtro pasabanda.
25
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Simulaciones mediante Simulink
Aplicación 4 Manejo de Audio La siguiente aplicación también trabaja sobre Simulink, donde se implementa la lectura de la señal entrada proveniente del micrófono la cual es enviada a la salida (parlante) con un retardo y una etapa de amplificación. En este ejemplo se tienen implícitos los conceptos de conversión análoga/digital y digital/análoga que provee la tarjeta del sonido del computador.
26
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Ejemplo utilizando Simulink para la lectura de un dispositivo de entrada. En este caso es posible verificar (posterior a la conexión del micrófono y parlantes en el PC) que efectivamente se realiza un registro de la señal capturada por el micrófono. Esta señal podría 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 señales a todo nivel.
27
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Parte 3 Aplicaciones para Inteligencia Artificial 1. Redes Neuronales A continuación se realiza la codificación un perceptron multicapas (MLP) utilizando las funciones que trae incorporado el Toolbox de Redes Neuronales. Este código considera la solución 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.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Gráficas que muestra el proceso de entrenamiento y la posterior salida de la Red. Por otra parte Matlab ofrece un entrono gráfico para la implementación de redes neuronales que es llamado desde la línea de comandos con el término nntool, como se muestra en la siguiente imagen.
Inicio de herramienta nntool A continuación se muestra un esquemático de la secuencia completa de configuración de dicha herramienta con sus respectivas ventanas de configuración.
29
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Secuencia de Configuración de la Red Vector de Entrada
Vector de Patrones (target)
Visualización de la Red
Creación de la Red
Resultados, - Vector de salida de la Red - Vector de Errores de la Red
Entrenamiento Simulación
Secuencia de configuración del nntool.
30
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
2 Lógica Difusa Como una forma de familiarizarse con el entorno de programación para Lógica Difusa de Matlab a continuación se muestra un ejemplo simple de implementación de un control de tráfico difuso para un semáforo utilizando las funciones que trae el Toolbox de Fuzzy y la interfaz gráfica de configuración de un Sistema Difuso. Se desea controlar en tiempo real el periodo en que un semáforo estará en el estado de Luz Verde (paso de vehículo). Para lograr esto se cuenta con sensores que son capaces de entregar información respecto de la longitud de la cola de vehículos en la fase roja anterior y el ritmo de llegada de vehículos en la fase verde del semáforo. Según el planteamiento de la problemática se tiene: Variables de entrada (o de estado) o A: Ritmo de llegada de vehículos (en la fase verde del semáforo). o Q: Longitud de la cola de vehículos (en la fase roja). Variables de salida (o de control) o T: Tiempo de la fase verde del semáforo (con un valor máximo prefijado). Etiquetas lingüísticas de cada variable: o A : Ritmo de llegada. o Q: Longitud de cola. o T: Tiempo de fase verde
•
•
•
Por otra parte según opiniones expertas respecto de las funciones de pertenencia para cada una de las etiquetas lingüísticas se tiene lo siguiente:
0
Coches 1
2
3
4
5
6
7
8
9
10
0
os m si
s
M uc hí
M uc ho
Po co s
_P oc os
La rg a
M ed ia
1
M uy
ña Pe qu e
_P eq ue M uy
1
A
ña
Q
Coches 1
2
3
4
5
6
7
8
9
10
Variables de entrada, Q y A
31
M. C. Jarur M.
0
1
4
La rg o
1
M ed io
T
C or to
Ingeniería Civil Informática 2008
M uy _C or to
Guía de MATLAB Universidad Católica del Maule
Segs. 2
3
5
6
7
8
9
10
Variable de salida T Y las reglas difusas de control según se indica en la siguiente tabla las que son del tipo SI A Y Q ENTONCES T (también definidas por un experto en tránsito).
Q/A
Muy_Pocos
Pocos
Muchos
Muchisimos
Larga
Muy_Corto
Corto
Medio
Largo
Media
Muy_Corto
Muy_Corto Corto
Medio
Pequeña
Muy_Corto
Muy_Corto Muy_Corto Corto
Muy_Pequeña Muy_Corto
Muy_Corto Muy_Corto Muy_Corto
Entonces teniendo clara la problemática y la solución de control difusa es necesario abrir el editor fuzzy (FIS Editor) desde la línea de comandos de Matlab con la sentencia fuzzy. Donde se apreciará la siguiente pantalla:
32
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008
Vista principal de la internas Fuzzy de Matlab. Ahora es necesario según la definición de la problemática de control, las variables fuzzy y sus respectivas funciones de pertenencia, completar cada fase según 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.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 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 operación (Control del tiempo de luz verde), a través 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 solución final a través de la gráfica. Por último a partir de alguna técnica de desfusificación (por ejemplo centroide), la herramienta también nos entrega el valor de la salida del sistema, en términos del tiempo que el semáforo estará encendido en luz verde. Ver figura siguiente.
34
M. C. Jarur M.
Guía de MATLAB Universidad Católica del Maule
Ingeniería Civil Informática 2008 Menu: View, Rule Viewer,
Variable A
Variable Q
Variable T
Valores provenientes de los sensores (Valores CRISP) Líneas Rojas
Resultado en tiempo del algoritmo de control (defuzificación) Barra roja (centroide)
Todas las funcionalidades aquí expuestas son también implementables en línea de comandos o códigos, sin necesidad de usar la interfaz gráfica fuzzy.
35
M. C. Jarur M.