guia matlab

Upload: jinson-romero-duran

Post on 30-Oct-2015

32 views

Category:

Documents


0 download

TRANSCRIPT

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