Curso de Matlab Mf

download Curso de Matlab Mf

of 28

Transcript of Curso de Matlab Mf

  • 8/19/2019 Curso de Matlab Mf

    1/87

  • 8/19/2019 Curso de Matlab Mf

    2/87

    1

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    Introducción

    Este cur so de int r oducción a MatLab está or ientado a est udiantes d e ingenier ía con

    inter és por l a pr ogr amación. Los conocimientos de ingenier ía r equer idos no sondemasiado al tos ya que est á pensado para est udiantes de todos l os cur sos . Las dospr imer as l ecciones s er virán de r epaso par a l os est udiantes de cur sos avanzados y muyactual es par a l os estudiantes de l os pr imer os cur sos .

    Los conocimientos que hay que tener sobr e ordenador es son l os básicos. Est e cur soest á pensado para dotar a l os asist entes con un inst r umento de pr oceso y cál cul o. Lar azón f undamental por l a que est o es impor tante en el anál isis de ingenier ía (al igualque en ot r as d iscipl inas) es que en muchas ocas iones l as modernas t eor ías y l osmodel os en l as que ést as se sust entan no pr oducen so l uciones anal íticas y hay quebuscar por tanto s ol uciones numér icas a l os pr obl emas que pl antean.

    Otr a r azón de impor tancia es que incl uso en el caso en que l a teor ía pr oduzcaso l uciones anal íticas a veces es conveniente r eal izar simul aciones d e l os model os o

    pr esentar l os r esul tados de un modo que requier e el pr oceso de datos para pr obl emasmuy par t icul ares.

    Un l enguaj e de pr ogr amación como MatLab per mite resol ver todos l os pr obl emas quer esuel ven paquetes de pr ogr amación diseñados para pr opósitos general es y ademásper mite resol ver también l os pr obl emas par t icul ar es que se nos pl anteen para l oscual es no exist en paquetes. MatLab es un l enguaj e de pr ogr amación t an f l exibl e comoFor tr an y, aunque por ser un l enguaj e interpr etado sea más l ento que For tr an o C,t iene unas capacidades gr áf icas y una sencil l ez de manej o que l o hacen per f ecto par ainiciarse en l a pr ogr amación. Además l as úl t imas ver siones de MatLab permiten el diseñode inter f aces gr áf icas de usuar io (gui) que nos per miten diseñar ento r nos gr áf icos muyf ácil es de usar por aquel l os a l os que nuest r os programas est én dir igidos .

    En est e curso vamos a ver l os comandos básicos de pr ogr amación e ir emos amenizando elapr endizaj e con ej er cicios de model os sencil l os , par a que al tiempo que apr endemos a

    manej ar el l enguaj e vayamos viendo su util idad con pr obl emas concr etos de ingenier ía.Una vez que tengamos l os conocimientos básicos estar emos en condiciones de subir unnivel con l a ver sión MatLab 6.5 en l a que exist en una ser ie de bibl iotecas para unavar iedad sor pr endente de pr obl emas ent r e l os que se encuentr an el anál isis de señal es,matemáticas cont r ol , r edes neur onal es y un l argísimo etcétera.

    No cabe ninguna duda de que est e inst r umento de tr abaj o t iene val or en el mer cado ypor tanto es bueno acost umbr arse a manej ar l o con sol tur a. La notación a util izar en eltexto indicar á en negrita  nombres de comandos interpr etabl es por MatLab como disp  onombres de ar chivos que MatLab puede l eer como progr ama.m.

    El autor …

  • 8/19/2019 Curso de Matlab Mf

    3/87

    2

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    Tab l a d e c o n t en id o  Capitulo I:Información general e introducción al programa Matl ab(Lo básico antes de comenzar )

    ACERCA DE ESTE MANUAL¿QUE ES MATLAB ???Ar r anque y espacio de tr abaj oUSO DEL HELPCONTROL DE LOS FORMATOS DE SALIDA Y DE OTRAS OP CIONES DE MATLABOPERACIONES CON MATRICES Y VECTORES

    DEFINICIÓN DE MATRICES DESDE TECLADOOPERACIONES CON MATRICES TIPOS DE MATRICES PREDEFINIDOSFORMACIÓN DE UNA MATRIZ A PARTIR DE OTRAS

    NÚMEROS REALES DE DOBLE P RECISIÓNNÚMEROS COMPLEJ OS: FUNCIÓN COMPLEXCADENAS DE CARACTERESVARIABLES Y EXPRES IONES MATRICIALESOPERADOR DOS P UNTOS (:)

    FUNCIONES MATEMÁTICAS ELEMENTALES QUE OP ERAN DE MODO ES CALARFUNCIONES QUE ACTÚAN S OBRE VECTORESFUNCIONES QUE ACTÚAN S OBRE MATRICESFUNCIONES MATRICIALES ESPECIALESFUNCIONES DE FACTORIZACIÓN Y/O DESCOMPOSICIÓN MATRICIALMÁS SOB RE OPERADORES RELACIONALES CON VECTORES Y MATRICESFUNCIONES PARA CÁLCULOS CON POLINOMIOSOTROS TIPOS DE DATOS DE MATLABCADENAS DE CARACTERESGRÁFICOS B IDIMENS IONALES

    FUNCIÓN P LOTESTILOS DE LÍNEA Y MARCADORES EN LA FUNCIÓN PLOTAÑADIR LÍNEAS A UN GRÁFICO YA EXISTENTECOMANDO SUBPLOTCONTROL DE LOS EJ ESFUNCIÓN L INE()CONTROL DE VENTANAS GRÁFICAS: FUNCIÓN FIGURE

    Otras funciones gráficas 2-DFUNCIÓN FP LOTFUNCIÓN FILL PARA POLÍGONOSENTRADA DE PUNTOS CON EL RATÓNGRAFICOS 2D Y 3DGr af icas de curvas dadas en coor denadas pol ares y parametr icas.Comandos básicos de progr amación

    COMO HACER UN PROGRAMA EN MATLAB (GENERALIDADES)PROGRAMACIÓN DE MATLABBIFURCACIONES Y BUCLESComando ENDComando IF

    Comando WHILEComando FORComando PLOTFunciones de dos var iabl esComando DISPComando INPUT

    FICHEROS *.MFICHEROS DE COMANDOS (SCRIPTS )RECOMENDACIONES GENERALES DE PROGRAMACIÓN

  • 8/19/2019 Curso de Matlab Mf

    4/87

    3

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    Capitulo II:ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Introducción Tr atamiento mediante f unc iones de t r ans f er encia. (S istemas cont inuos)

    Dominio Tempor al

    Dominio Fr ecuencialRespuest a en f r ecuenciaMárgenes de est abil idadEfectos de l os r etardosComandos r el acionados con oper aciones de bl oquesLugar de l as r aíces

    Estudio tempor al y f r ecuencial de sist emas d e pr imer y segundo or denS ist emas d e pr imer or denS istemas d e segundo or den

    Anál isis del ef ecto de un cer o en l a r espuest a tempor al de un s istema de segundoordenInf l uencia de pol os adicional es.Po l os d ominantes Tr atamiento mediante f unc iones de t r ans f er encia. S istemas discr etos Tr atamiento mediante descr ipción en el espacio de estados

    Manipul ación mediante obj etosResumen de l os comandos mas impor tantes del Contr ol System Tool box

    Capitulo III:Simul ink 

    S imul inkIntr oducción al Simul inkLibr er ía de bl oques.Cr ear un nuevo model oAgr egar un bl oque al Área de tr abaj oUnir bl oques con una l ínea.Sacar una der ivaciónBl oques más comunes (de inter és para l a mater ia Contr ol ) de l a l ibr er ía de S imul ink.Ej empl o el ementalPar ámetr os d e simul aciónIniciar y detener una simul ación.

    Capitulo IV:Complementarios…

    PID. Descr ipción y r egl as heur ísticas de SintonizaciónIntroducciónEl sist ema a contr ol arControl ador P IDContr ol a l azo cer r ado.Aj uste del PID. Regl as del Ziegl er -Nichol s.

    Pr imer método de Ziegl er -Nichol s

    Segundo método de Ziegl er -Nichol sComentarios final es:

  • 8/19/2019 Curso de Matlab Mf

    5/87

    4

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

  • 8/19/2019 Curso de Matlab Mf

    6/87

    5

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

  • 8/19/2019 Curso de Matlab Mf

    7/87

    6

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    Capitulo I: Información general e introducción al programa Matl ab(Lo básico antes de comenzar)

    1.ACERCA DE ESTE MANUAL 

    Las primeras versiones de este manual estuvieron dirigidas a alumnos de un cursointroductorio de una aplicación que, para muchos alumnos, iba a constituir suprimer contacto con los ordenadores y/o con la programación por lo tanto estabaestructurado de forma muy sencilla pero a pesar de lo resumido estaban muy bienexplicadas todas las actividades desarrolladas en él.

    Desde este momento, este manual se ha adaptado a las asignaturas de ControlesAutomáticos e Instrumentación de Plantas de la especialidad de Ingeniería Mecánicaen La Universidad del Zulia, Núcleo Cabimas.

    Por encima de la asignatura citada, este manual puede ser útil a un público másamplio, que incluye a alumnos de cursos superiores de las distintas escuelas deIngeniería, a alumnos de Tercer Ciclo y a profesores que quieren conocer más decerca las posibilidades que tendría MATLAB en sus asignaturas, asi como a aquellaspersonas que esten realizando o piensen realizar cursos de mejoramientoprofesional en el area tecnica, cientifica o industrial en los cuales se requierade una herramienta computacional de la talla de MATLAB..

    Se ha pretendido llegar a un equilibrio entre el detalle de las explicaciones, laamplitud de temas tratados y el número de páginas. En algunos casos, junto con lasinstrucciones introducidas por el usuario se incluye la salida de MATLAB; en otroscasos no se incluye dicha salida, pero se espera que el lector disponga de un PCcon MATLAB y vaya introduciendo esas instrucciones a la vez que avanza en estaspáginas. En muchas ocasiones se anima al lector interesado a ampliar el tema conla ayuda del programa (toda la documentación de MATLAB está disponible on-line a

    través del Help).

    En cualquier caso recuérdese que la informática moderna, más que en“ s a be r ” c o ns i s t e e n “ s a be r e nc o nt r a r l o q ue s e n ec es i t a ” en p oc os  

    segundos.

    2.¿QUE ES MATLAB ??? Eso es una buena Pregunta, MATLAB es el nombre abreviado de “MATrix LABoratory” oen cristiano “Laboratorio de Matrices”. Lo más fácil es pensar en MATLAB como enuna calculadora programable muy potente, como éstas, MATLAB es capaz de realizarlas operaciones básicas de suma, resta, multiplicación, división, etc.... A la vezque puede manejar números complejos, logaritmos, operaciones trigonométricas,operaciones lógicas, ... Por último, podemos almacenar, procesar y recuperar datosmediante algoritmos numéricos, en realidad, MATLAB es mucho más que una buenacalculadora… Una de las capacidades más atractivas es la de realizar una amplia

    variedad de gráficos en dos y tres dimensiones, realiza cálculos numéricoscon vectores y  matrices  conformados por números escalares, tantoreales como complejos. Es la herramienta de cálculo numérico por excelencia,es un lenguaje de programación fácil de usar y extremadamente potente, posee poderosas capacidades gráficas y es una plataforma de desarrollo de aplicaciones, ya que cuenta con numerosos grupos de herramientas (Código básico y librerías

  • 8/19/2019 Curso de Matlab Mf

    8/87

    7

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    especializadas llamados toolboxes) de aplicación específica (toolbox de matemáticasimbólica, toolbox de procesamiento de señales, toolbox de control,etc)

    3.Arranque y espacio de trabajo 

    MATLAB se puede arrancar como cualquier otra aplicación deWindows 95/98/2000/ME/XP/NT, clicando dos veces en el iconocorrespondiente en el escritorio (figura 1) (donde quiera queesté ubicado según la configuración del ordenador) o por mediodel menú INICIO. Al arrancar MATLAB se abre una ventana del tipode la indicada en la Figura 2.

    En la ventana inicial (“ventana de comandos”) sesugieren ya algunos comandos para el usuarioinexperto que quiere echar un vistazo a laaplicación. En dicha ventana aparece también elprompt (aviso) característico de MATLAB (»). Esto

    quiere decir que el programa está preparado pararecibir instrucciones.

    Esta ventana será la mayor parte del tiempo laventana de trabajo con la que estaremos casisiempre interactuando, es decir será a través deella que intercambiaremos información con el

    programa al introducir datos y obtener respuesta a lo solicitado.

    Como ya se dijo matlab es un programa fundamentalmente de calculo, por lo tantoseria bueno apreciar desde el principio la potencia de este, se puede comenzar conalgunos ejemplos sencillos sobre tópicos básicos desde el punto de vista

    matemático. Supongamos que queremos calcular el determinante de una matriz

    cuadrada de orden 3, (esto es algo muy común dentro de cualquier curso básico decalculo o de algebra elemental) para lo cual recurrimos el método aquel de la sumaalgebraica del producto de los elementos de las diagonales principales, menos lasuma algebraica del producto de las diagonales secundarias…. Y listo problemaresuelto, pero cuan engorroso es este procedimiento?, y aun mas a cuantos erroresde calculo estamos propensos?, aun así alguien bien experimentado en el área delos números podría pensar que esto no es problema, solo hay que practicar un pocohasta tener soltura y fluidez de lo que se hace. Pues hagamos una pequeñamodificación en el tamaño de la matriz y volvamos a realizar el calculo deldeterminante… hablemos de pasar de una matriz de orden 3, a una de orden 5 (soloaumentar el orden en 2 unidades….) la cantidad de cálculos relacionados con estepequeño cambio aumenta en forma exponencial lo cual evidentemente aumenta laposibilidad de errores, hace la operación exponencialmente mas engorrosa einevitablemente dispara hasta niveles inaceptables el tiempo de calculo, además de

    disminuir por todo lo anterior la confiabilidad de los cálculos realizados.Ahora bien veamos como maneja matlab esto.

    Para una matriz cuadrada de orden 3 el procedimiento para calcular el determinantees el siguiente:

    1. definir o introducir la matriz2. pedir al programa que calcule el determinante

    Para una matriz cuadrada de orden 5 el procedimiento es:

    Figur a 1

    Fi ura 2. Ventana Inicia

  • 8/19/2019 Curso de Matlab Mf

    9/87

    8

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    1. definir o introducir la matriz2. pedir al programa que calcule el determinante..

    Como puede verse el procedimiento es sencillo y no cambia en nada, la únicadiferencia es la introducción de los datos o elementos de la matriz… veamos como

    se hace esto, en las siguientes líneas aparece una corrida de el calculo deldeterminante de una matriz de orden 3 y luego el calculo para una de orden 5

    para el de orden 3:

    >> a=[1 2 3;4 5 6;7 8 45]a =  1 2 3  4 5 6  7 8 45>> b=det(a)b =-108

    Para el de orden 5:

    >> c=[1 2 3 4 5;4 5 7 5 6;7 8 4 7 5;4 2 5 6 2;7 0 9 0 9]c =  1 2 3 4 5  4 5 7 5 6  7 8 4 7 5  4 2 5 6 2  7 0 9 0 9>> d=det(c)d =  4630

    Como puede verse el procedimiento en efecto no cambia, se utilizaron los mismoscomandos e instrucciones para ambos casos, lo único que cambia son los datosintroducidos (matlab no es adivino para adivinar a cual matriz debe extraerle eldeterminante) y constituye la parte en la cual el usuario interactúa con el

    computador.

    En este punto es bueno aclarar que matlab no es un programa que hace milagros niresuelve problemas de ningún tipo, matlab es solo una herramienta de trabajo lacual facilita las cosas pero nunca podrá resolver problemas y tomar decisiones enbase a análisis de nada, ese trabajo es de cada uno de nosotros, ningunaherramienta, mecánica, electrónica o computacional puede sustituir losconocimientos ni puede realizar nuestro trabajo, ellas son solo eso herramientasque lo facilitan pero no resuelven por si solas nada, por ello es importante elconocimiento de lo que se esta haciendo, además como toda herramientacomputacional, el programa (al igual que la computadora en general) es un programa“ESTUPIDO” ya que siempre ara lo que tu le pidas que haga, el problema esta en queen muchísimas ocasiones, lo que le pedimos que haga no es lo que queremos quehaga, y por lo tanto al proporcionar mal informaron de entrada obtendremos datos oinformación de salida (respuesta) incorrecta o inconsistente lo cual no es culpadel programa…

    Ante tal situación quedan dos soluciones, la primera consiste en no utilizar elprograma al no ser responsables i consientes de lo que escribimos, y la segundaconsiste en que al contrario del caso anterior necesitamos hacernos responsablesde los datos que proporcionamos además de saber que es lo que quiero hacer ocalcular y pedirle exactamente eso al programa…

  • 8/19/2019 Curso de Matlab Mf

    10/87

    9

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    » A= rand(6), B= inv(A), B*A

    A =

      0.9501 0.4565 0.9218 0.4103 0.1389 0.0153  0.2311 0.0185 0.7382 0.8936 0.2028 0.7468

      0.6068 0.8214 0.1763 0.0579 0.1987 0.4451

      0.4860 0.4447 0.4057 0.3529 0.6038 0.9318

      0.8913 0.6154 0.9355 0.8132 0.2722 0.4660

      0.7621 0.7919 0.9169 0.0099 0.1988 0.4186

    B =

      5.7430 2.7510 3.6505 0.1513 -6.2170 -2.4143

    -4.4170 -2.5266 -1.4681 -0.5742 5.3399 1.5631

    -1.3917 -0.6076 -2.1058 -0.0857 1.5345 1.8561

    -1.6896 -0.7576 -0.6076 -0.3681 3.1251 -0.6001

    -3.6417 -4.6087 -4.7057 2.5299 6.1284 0.9044  2.7183 3.3088 2.9929 -0.1943 -5.1286 -0.6537

    ans =

    1.0000 0.0000 0 0.0000 0.0000 -0.0000

      0.0000 1.0000 0.0000 0.0000 -0.0000 0.0000

      0 0 1.0000 -0.0000 -0.0000 0.0000

      0.0000 0 -0.0000 1.0000 -0.0000 0.0000

    -0.0000 0.0000 -0.0000 -0.0000 1.0000 0.0000

    -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.0000

    »

    Como ejemplo adicional considérese el trabajo que daría resolver una simple matrizde 3 por tres pero que sus elementos sean decimales y complejos….Parta este caso, matlab resuelve de igual manera… veamos.

    >> e=[1+i 3+5i 0.34+9i;5+8i 0+i 1;0+3i 6 2]e =

      Columns 1 through 2  1.0000 + 1.0000i 3.0000 + 5.0000i  5.0000 + 8.0000i 0 + 1.0000i  0 + 3.0000i 6.0000  Column 3

    0.3400 + 9.0000i  1.0000  2.0000>> f=det(e)f =-3.9378e+002 +2.2032e+002i

    Para apreciar desde el principio laPotencia de MATLAB, se puede comenzarpor escribir la siguiente línea, acontinuación del prompt. Al final hay

    que pulsar intro.

     En realidad, en la línea de comandosque se muestra se han escrito tresinstrucciones diferentes, separadaspor comas. Como consecuencia, larespuesta del programa tiene trespartes también, cada una de ellascorrespondiente a una de lasinstrucciones. Con la primerainstrucción se define una matrizcuadrada (6x6) llamada A, cuyoselementos son números aleatoriosentre cero y uno (aunque aparezcansólo 4 cifras, han sido calculadoscon 16 cifras). En la segundainstrucción se define una matriz Bque es igual a la inversa de A.Finalmente se ha multiplicado B porA, y se comprueba que el resultado esla matriz unidad.

    Otro de los puntos fuertes de MATLABson los gráficos, que se verán conmás detalle en una sección posterior.A título de ejemplo, se puede teclearla siguiente línea y pulsar intro:

    » x=-4:.01:4; y=sin(x);» plot(x,y), grid, title('Función seno(x)')

    En la Figura 3 se puede observar que se abre una nueva ventana en la que aparecerepresentada la función sin(x). Esta figura tiene un título "Función seno(x)" yuna cuadrícula o "grid". En realidad la línea anterior contiene también variasinstrucciones separadas por comas o puntos y comas. En la primera se crea unvector x con 801 valores reales entre -4 y 4, separados por una centésima. Acontinuación se crea un vector y, cada uno de cuyos elementos es el seno del

  • 8/19/2019 Curso de Matlab Mf

    11/87

    10

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    correspondiente elemento del vector x. Después se dibujan los valores de y enordenadas frente a los de x en abscisas. Las dos últimas instrucciones establecenla cuadrícula y el título.

    Para borrar todas las

    salidas anteriores deMATLAB y dejar limpia laventana principal sepueden utilizar lasfunciones clc y hom e. Lafunción clc (clearconsole) elimina todas lassalidas anteriores,mientras que home lasmantiene, pero lleva el prompt (» ) a la primeralínea de la ventana.

    Si se desea salir del

    programa, basta teclearlos comandos quit o exit,o bien elegir Exit MATLABen el menú File (tambiénse puede utilizar el

     Alt+F4 de todas las aplicaciones de Windows).

    Como puede observarse matlab con unas simples líneas de código puede ejecutartareas extremadamente complejas en las que el usuario de forma manual tardaríamuchísimo tiempo y los resultados no serian de la calidad grafica que aquí seobtiene sin mencionar nada de la precisión y la rapidez…

    4.USO DEL HELP MATLAB dispone de un excelente Help con el quese puede encontrar la información que sedesee. La Figura 4 muestra las distintas

    opciones que aparecen en el menú Help.

    También puede obtenerse ayuda de cualquiercomando tecleando la palabra “help” seguidadel nombre del comando y matalb responderá conun resumen de la aplicación de dicho comandoademás de algunos ejemplos sobre su aplicación.También puede solicitarse ayuda de la misma forma sobre los tolbox de cualquierárea, a lo que matlab responderá con una lista de los comandos contenidos en dichotolbox y el usuario deberá seleccionar aquel o aquellos que le interesen para esemomento…

    5.CONTROL DE LOS FORMATOS DE SALIDA Y DE OTRAS OPCIONES DE MATLAB 

    Los formatos de salida en la ventana principal de MATLAB se pueden controlarfácilmente a partir del cuadro de diálogo que se abre con el comando Preferencesdel menú File. En la Figura 5 y en la Figura 6 se ven dos de los tres cuadros dediálogo a los que se accede al elegir ese comando.

    Figura N ° 3

    Figura 4

  • 8/19/2019 Curso de Matlab Mf

    12/87

  • 8/19/2019 Curso de Matlab Mf

    13/87

    12

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    B=inv(A)B =0.1803 0.2213 -0.18850.1311 0.0246 0.0902-0.0984 0.1066 0.0574

    exige esto, pero puede resultar útil). Para definir una matriz no hace faltaestablecer de antemano su tamaño (de hecho, se puede definir un tamaño y cambiarloposteriormente). MATLAB determina el número de filas y de columnas en función delnúmero de elementos que se proporcionan (o se utilizan). Las matrices se definenpor filas; los elementos de una misma fila están separados por blancos o comas,mientras que las filas están separadas por pulsaciones intro o por caracteres

    punto y coma (;). Por ejemplo, el siguiente comando define una matriz A dedimensión (3x3):

    A partir de este momento la matriz A estádisponible para hacer cualquier tipo deoperación con ella (además de valoresnuméricos, en la definición de una matriz ovector se pueden utilizar expresiones yfunciones matemáticas). Por ejemplo, unasencilla operación con A es hallar su matriztraspuesta. En MATLAB el apóstrofo (') es elsímbolo de trasposición matricial. Paracalcular A' (traspuesta de A) basta teclear lo

    siguiente (se añade a continuación la respuestadel programa):

    Como el resultado de la operación no ha sidoasignado a ninguna otra matriz, MATLAB utilizaun nombre de variable por defecto (ans, deanswer), que contiene el resultado de la últimaoperación. La variable ans puede ser utilizadacomo operando en la siguiente expresión que seintroduzca. También podría haberse asignado elresultado a otra matriz llamada B:

    Ahora ya están definidas las matrices A y B, y

    es posible seguir operando con ellas. Porejemplo, se puede hacer el producto B*A (deberáresultar una matriz simétrica):

    En MATLAB se accede a los elementos de unvector poniendo el índice entre paréntesis (porejemplo x(3) ó x(i)). Los elementos de lasmatrices se acceden poniendo los dos índicesentre paréntesis, separados por una coma (porejemplo A(1,2) ó A(i,j)). Las matrices sealmacenan por columnas (aunque se introduzcanpor filas, como se ha dicho antes), y teniendoen cuenta esto puede accederse a cualquierelemento de una matriz con un sólo subíndice.

    Por ejemplo, si A es una matriz (3x3) seobtiene el mismo valor escribiendo A(1,2) queescribiendo A(4). Invertir una matriz es casitan fácil como trasponerla. A continuación seva a definir una nueva matriz A -no singular-en la forma:

    Ahora se va a calcular la inversa de A y elresultado se asignará a B. Para ello basta

    » A=[1 2 3; 4 5 6; 7 8 9]A =1 2 34 5 67 8 9

    » A'

    ans =

    1 4 7

    2 5 8

    3 6 9

    » B=A'B =1 4 72 5 83 6 9

    » B*A 

    ans =

    66 78 90

    78 93 108

    90 108 126

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

  • 8/19/2019 Curso de Matlab Mf

    14/87

    13

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    hacer uso de la función inv( ) (la precisión o número de cifras con que se muestrael resultado se puede cambiar con el menú File/Preferences/General):

    Para comprobar que este resultado escorrecto basta pre-multiplicar A por B;

    De forma análoga a las matrices, es posibledefinir un vector fila x en la formasiguiente (si los tres números estánseparados por blancos o comas, el resultadoserá un vector fila):

    Por el contrario, si los números estánseparados por intros o puntos y coma (;) seobtendrá un vector columna:

    MATLAB tiene en cuenta la diferencia entrevectores fila y vectores columna. Porejemplo, si se intenta sumar los vectores x

    e y se obtendrá el siguiente mensaje deerror:

    Estas dificultades desaparecen si se suma xcon el vector traspuesto de y:

    Aunque ya se ha visto en los ejemplosanteriores el estilo sencillo e intuitivocon el que MATLAB opera con matrices yvectores, a continuación se va a estudiareste tema con un poco más de detenimiento.

    6.2. OPERACIONES CON MATRICES

    MATLAB puede operar con matrices por medio de operadores y por medio de funciones.Se han visto ya los operadores suma (+), producto (*) y traspuesta ('), así comola función invertir inv( ).

    Los operadores matriciales de MATLAB son los siguientes:

    Estos operadores se aplicantambién a las variables ovalores escalares, aunque conalgunas diferencias. Todosestos operadores soncoherentes con lascorrespondientes operacionesmatriciales: no se puede por

    ejemplo sumar matrices que nosean del mismo tamaño. Si losoperadores no se usan de modocorrecto se obtiene unmensaje de error.

    Los operadores anteriores se pueden aplicar también de modo mixto, es decir con unoperando escalar y otro matricial. En este caso la operación con el escalar seaplica a cada uno de los elementos de la matriz. Considérese el siguiente ejemplo:

    OPERADOR DESCRIPCION

    + adición o suma

    – sustracción o resta

    * multiplicación

    ' traspuesta

    ^ potenciación

    \ división-izquierda

    / división-derecha

    .* producto elemento a elemento

    ./ y .\ división elemento a elemento

    .^ elevar a una potencia elemento a elemento

    » B*A ans =1.0000 0.0000 0.0000

    0.0000 1.0000 0.00000.0 0.0000 1.0000

    » x=[10 20 30] % vector filax =10 20 30

    » y=[11; 12; 13] % vector columnay =111213

    » x+y??? Error using ==> +Matrix dimensions must agree.

    » x+y'ans =21 32 43

  • 8/19/2019 Curso de Matlab Mf

    15/87

    14

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    » A=[1 2; 3 4]A =1 23 4

    » A*2

    ans =2 46 8

    » A-4ans =-3 -2-1 0

    Los operadores de división requieren una cierta explicación adicional. Considéreseel siguiente sistema de ecuaciones lineales, Ax = b (1) en donde x y b sonvectores columna, y A una matriz cuadrada invertible. La resolución de estesistema de ecuaciones se puede escribir en las 2 formas siguientes (¡Atención a la

    2ª forma, basada en la barra invertida (\), que puede resultar un poco extraña):

    x = inv(A)*b (2a)x = A\b (2b)

    Así pues, el operador división-izquierda poruna matriz (barra invertida \) equivale apremultiplicar por la inversa de esa matriz.En realidad este operador es más general y másinteligente de lo que aparece en el ejemploanterior: el operador división-izquierda esaplicable aunque la matriz no tenga inversa eincluso no sea cuadrada, en cuyo caso lasolución que se obtiene (por lo general) es la

    que proporciona el método de los mínimoscuadrados. Cuando la matriz es triangular osimétrica aprovecha esta circunstancia parareducir el número de operaciones aritméticas.En algunos casos se obtiene una solución demínima con no más de r elementos distintos decero, siendo r el rango de la matriz. Estopuede estar basado en que la matriz se reducea forma de escalón y se resuelve el sistemadando valor cero a las variablesindependientes. Por ejemplo, considérese elsiguiente ejemplo de matriz (1x2) que conducea un sistema de infinitas soluciones:

    que es la solución obtenida dando valor cero ala variable independiente x(1).

    Por otra parte, en el caso de un sistema deecuaciones redundante (o sobre-determinado) elresultado de MATLAB es el punto más “cercano”-en el sentido de mínima norma del error- alas ecuaciones dadas (aunque no cumpla

    exactamente ninguna de ellas). Véase el siguiente ejemplo de tres ecuacionesformadas por una recta que no pasa por el origen y los dos ejes de coordenadas:

    » A=[1 2], b=[2]A =1 2b =2» x=A\bx =01

    » A=[1 2; 1 0; 0 1], b=[2 0 0]'A =1 21 00 1b =200

    » x=A\b, resto=A*x-bx =0.33330.6667resto =-0.33330.3333

  • 8/19/2019 Curso de Matlab Mf

    16/87

  • 8/19/2019 Curso de Matlab Mf

    17/87

    16

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    vector x por los elementos del vector y. Equivalente a x'*y,donde x e y son vectores fila

    compan(pol)construye una matriz cuyo polinomio característico tiene comocoeficientes los elementos del vector pol (ordenados de mayorgrado a menor)

    vander(v)

    construye la matriz de Vandermonde a partir del vector v (las

    columnas son las potencias de los elementos de dicho vector)

    Existen otras funciones para crear matrices de tipos particulares. Con Help/HelpWindow se puede obtener información sobre todas las funciones disponibles enMATLAB, que aparecen agrupadas por directorios. En matlab\elmat aparecen la mayorparte de las funciones estudiadas en este apartado.

    6.4. FORMACIÓN DE UNA MATRIZ A PARTIR DE OTRASMATLAB ofrece también la posibilidad de crear una matriz a partir de matricesprevias ya definidas, por varios posibles caminos:Recibiendo alguna de sus propiedades (como por ejemplo el tamaño),Por composición de varias submatrices más pequeñas,Modificándola de alguna forma.

    A continuación se describen algunas de las funciones que crean una nueva matriz apartir de otra o de otras, comenzando por dos funciones auxiliares:

    [m,n]=size(A)devuelve el número de filas y de columnas de la matriz A. Si la matriz escuadrada basta recoger el primer valor de retorno

    n=length(x) calcula el número de elementos de un vector x

    zeros(size(A))forma una matriz de ceros del mismo tamaño que una matriz A previamentecreada

    ones(size(A)) ídem con unos

    A=diag(x)forma una matriz diagonal A cuyos elementos diagonales son los elementosde un vector ya existente x

    x=diag(A)

    forma un vector x a partir de los elementos de la diagonal de una matriz

    ya existente Adiag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A

    blkdiag(A,B)crea una matriz diagonal de submatrices a partir de las matrices que sele pasan como argumentos

    triu(A)

    forma una matriz triangular superior a partir de una matriz A (no tienepor qué ser cuadrada). Con un segundo argumento puede controlarse que semantengan o eliminen más diagonales por encima o debajo de la diagonalprincipal.

    tril(A) ídem con una matriz triangular inferior

    rot90(A,k)Gira k*90 grados la matriz rectangular A en sentido antihorario. k es unentero que puede ser negativo. Si se omite, se supone k=1

    flipud(A) halla la matriz simétrica de A respecto de un eje horizontalfliplr(A) halla la matriz simétrica de A respecto de un eje vertical

    reshape(A,m,n)

    Cambia el tamaño de la matriz A devolviendo una matriz de tamaño m×n

    cuyas columnas se obtienen a partir de un vector formado por las columnasde A puestas una a continuación de otra. Si la matriz A tiene menos dem×n elementos se produce un error.

    Un caso especialmente interesante es el de crear una nueva matriz componiendo comosubmatrices otras matrices definidas previamente. A modo de ejemplo, ejecútenselas siguientes líneas de comandos y obsérvense los resultados obtenidos:

    » A=rand(3)» B=diag(diag(A))

  • 8/19/2019 Curso de Matlab Mf

    18/87

    17

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

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

    En el ejemplo anterior, la matriz C de tamaño (6x6) se forma por composición decuatro matrices de tamaño (3x3). Al igual que con simples escalares, lassubmatrices que forman una fila se separan con blancos o comas, mientras que lasdiferentes filas se separan entre sí con intros o puntos y comas. Los tamaños de

    las submatrices deben de ser coherentes.

    7.NÚMEROS REALES DE DOBLE PRECISIÓN Los elementos constitutivos de vectores y matrices son números reales almacenadosen 8 bytes (53 bits para la mantisa y 11 para el exponente de 2; entre 15 y 16cifras decimales equivalentes). Es importante saber cómo trabaja MATLAB con estosnúmeros y los casos especiales que presentan.

    MATLAB mantiene una forma especial para los números muy grandes (más grandes quelos que es capaz de representar), que son considerados como infinito. Por ejemplo,obsérvese cómo responde el programa al ejecutar el siguiente comando:

    Así pues, para MATLAB el infinito se representa como

    inf ó Inf. MATLAB tiene también una representaciónespecial para los resultados que no están definidoscomo números. Por ejemplo, ejecútense los siguientescomandos y obsérvense las respuestas obtenidas:

    En ambos casos la respuesta es NaN, que es laabreviatura de Not a Number. Este tipo de respuesta,así como la de Inf, son enormemente importantes enMATLAB, pues permiten controlar la fiabilidad de losresultados de los cálculos matriciales. Los NaN sepropagan al realizar con ellos cualquier operaciónaritmética, en el sentido de que, por ejemplo,cualquier número sumado a un NaN da otro NaN. MATLAB

    tiene esto en cuenta. Algo parecido sucede con losInf.

    MATLAB dispone de tres funciones útiles relacionadas con las operaciones de comaflotante. Estas funciones, que no tienen argumentos, son las siguientes:

    Epsdevuelve la diferencia entre 1.0 y el número de coma flotanteinmediatamente superior. Da una idea de la precisión o número decifras almacenadas. En un PC, eps vale 2.2204e-016.

    Realmindevuelve el número más pequeño con que se puede trabajar(2.2251e-308)

    Realmaxdevuelve el número más grande con que se puede trabajar(1.7977e+308)

    8.NÚMEROS COMPLEJOS: FUNCIÓN COMPLEX En muchos cálculos matriciales los datos y/o los resultadosno son reales sino complejos, con parte real y parteimaginaria. MATLAB trabaja sin ninguna dificultad con númeroscomplejos. Para ver como se representan por defecto losnúmeros complejos, ejecútense los siguientes comandos:

    » 1.0/0.0Warning: Divide by zeroans =Inf

    » 0/0Warning: Divide by zeroans =NaN» inf/infans =NaN

    » a=sqrt(-4)a =0 + 2.0000i» 3 + 4jans =3.0000 + 4.0000i

  • 8/19/2019 Curso de Matlab Mf

    19/87

    18

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    En la entrada de datos de MATLAB se puedenutilizar indistintamente la i y la j pararepresentar el número imaginario unidad (en lasalida, sin embargo, puede verse que siempreaparece la i). Si la i o la j no estándefinidas como variables, puede intercalarse el

    signo (*). Esto no es posible en el caso de quesí estén definidas, porque entonces se utilizael valor de la variable. En general, cuando seestá trabajando con números complejos, convieneno utilizar la i como variable ordinaria, puespuede dar lugar a errores y confusiones. Porejemplo, obsérvense los siguientes resultados:

    Cuando i y j son variables utilizadas paraotras finalidades, como unidad imaginaria puede utilizarse también la funciónsqrt(-1), o una variable a la que se haya asignado el resultado de esta función.La asignación de valores complejos a vectores y matrices desde teclado puedehacerse de las dos formas, que se muestran en el ejemplo siguiente (conviene hacer

    antes clear i, para que i no esté definida como variable. Este comando seestudiará más adelante):

    » A = [1+2i 2+3i; -1+i 2-3i]A =1.0000 + 2.0000i 2.0000 + 3.0000i-1.0000 + 1.0000i 2.0000 - 3.0000i» A = [1 2; -1 2] + [2 3; 1 -3]*I % En este caso el * es necesarioA =1.0000 + 2.0000i 2.0000 + 3.0000i-1.0000 + 1.0000i 2.0000 - 3.0000i

    Puede verse que es posible definir las partes reales e imaginarias por separado.

    En este caso sí es necesario utilizar el operador (*), según se muestra en elejemplo anterior.

    MATLAB dispone asimismo de la función complex, que crea un número complejo apartir de dos argumentos que representan la parte real e imaginaria, como en elejemplo siguiente:

    Es importante advertir que el operador de matriz traspuesta('), aplicado a matrices complejas, produce la matrizconjugada y traspuesta. Existe una función que permite hallarsimplemente la matriz conjugada (conj()) y el operador punto yapóstrofo (.') que calcula simplemente la matriz traspuesta.

    9.CADENAS DE CARACTERES MATLAB puede definir variables que contengan cadenas de caracteres. En MATLAB lascadenas de texto van entre apóstrofos o comillas simples (Nótese que en C vanentre comillas dobles: "cadena"). Por ejemplo, en MATLAB:

    s = 'cadena de caracteres'

    Las cadenas de texto tienen su más clara utilidad en temas que se verán másadelante y por eso se difiere hasta entonces una explicación más detallada.

    » i=2i =2

    » 2+3ians =2.0000 + 3.0000i» 2+3*ians =8» 2+3*jans =2.0000 + 3.0000i

    » complex(1,2)ans =1.0000 +2.0000i

  • 8/19/2019 Curso de Matlab Mf

    20/87

    19

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    10.VARIABLES Y EXPRESIONES MATRICIALES Ya han aparecido algunos ejemplos de variables y expresiones matriciales. Ahora seva a tratar de generalizar un poco lo visto hasta ahora.

    Una variable es un nombre que se da a una entidad numérica, que puede ser unamatriz, un vector o un escalar. El valor de esa variable, e incluso el tipo deentidad numérica que representa, puede cambiar a lo largo de una sesión de MATLABo a lo largo de la ejecución de un programa. La forma más normal de cambiar elvalor de una variable es colocándola a la izquierda del operador de asignación(=). Una expresión de MATLAB puede tener las dos formas siguientes: primero,asignando su resultado a una variable,

    variable = expresión

    y segundo evaluando simplemente el resultado del siguiente modo, expresión en cuyocaso el resultado se asigna automáticamente a una variable interna de MATLABllamada ans (de answer) que almacena el último resultado obtenido. Se considerapor defecto que una expresión termina cuando se pulsa intro. Si se desea que una

    expresión continúe en la línea siguiente, hay que introducir tres puntos (...)antes de pulsar intro. También se pueden incluir varias expresiones en una mismalínea separándolas por comas (,) o puntos y comas (;).

    Si una expresión termina en punto y coma (;) su resultado se calcula, pero no seescribe en pantalla. Esta posibilidad es muy interesante, tanto para evitar laescritura de resultados intermedios, como para evitar la impresión de grandescantidades de números cuando se trabaja con matrices de gran tamaño.

    A semejanza de C, MATLAB distingue entre mayúsculas y minúsculas en los nombres devariables. Los nombres de variables deben empezar siempre por una letra y puedenconstar de hasta 31 letras y números. El carácter guión bajo (_) se considera comouna letra. A diferencia del lenguaje C, no hace falta declarar las variables que

    se vayan a utilizar. Esto hace que se deba tener especial cuidado con no utilizarnombres erróneos en las variables, porque no se recibirá ningún aviso delordenador.

    El comando clear tiene varias formas posibles:

    11.OPERADOR DOS PUNTOS (:)Este operador es muy importante en MATLAB y puede usarse de varias formas. Sesugiere al lector que practique mucho sobre los ejemplos contenidos en esteapartado, introduciendo todas las modificaciones que se le ocurran y haciendopruebas abundantes (¡Probar es la mejor forma de aprender!).

    Para empezar, defínase un vector x con el siguiente comando:

    Clear sinargumentos,

    clear elimina todas las variables creadas previamente (excepto lasvariables globales).

    clear A, b Borra las variables indicadas.clear global Borra las variables globales.Clearfunctions

    Borra las funciones.

    clear all Borra todas las variables, incluyendo las globales, y lasfunciones.

  • 8/19/2019 Curso de Matlab Mf

    21/87

    20

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    » x=1:10x =1 2 3 4 5 6 7 8 9 10

    En cierta forma se podría decir que el operador (:) Representa un rango: en estecaso, los números enteros entre el 1 y el 10. Por defecto el incremento es 1, pero

    este operador puede también utilizarse con otros valores enteros y reales,positivos o negativos. En este caso el incremento va entre el valor inferior y elsuperior, en las formas que se muestran a continuación:

    » x=1:2:10x =1 3 5 7 9» x=1:1.5:10x =1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000» x=10:-1:1x =10 9 8 7 6 5 4 3 2 1

    Puede verse que, por defecto, este operador produce vectores fila. Si se deseaobtener un vector columna basta trasponer el resultado. El siguiente ejemplogenera una tabla de funciones seno y coseno. Ejecútese y obsérvese el resultado(recuérdese que con (;) Después de un comando el resultado no aparece enpantalla).

    » x=[0.0:pi/50:2*pi]';» y=sin(x); z=cos(x);» [x y z]

    El operador dos puntos (:) es aún más útil y potente –y también más complicado–con matrices. A continuación se va a definir una matriz A de tamaño 6x6 y despuésse realizarán diversas operaciones sobre ella con el operador (:).

    » A=magic(6)A =35 1 6 26 19 243 32 7 21 23 2531 9 2 22 27 208 28 33 17 10 1530 5 34 12 14 164 36 29 13 18 11

    Recuérdese que MATLAB accede a los elementos de una matriz por medio de losíndices de fila y de columna encerrados entre paréntesis y separados por una coma.Por ejemplo:

    » A(2,3)ans =7

    El siguiente comando extrae los 4 primeros elementos de la 6ª fila:» A(6, 1:4)ans =4 36 29 13

  • 8/19/2019 Curso de Matlab Mf

    22/87

    21

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    Los dos puntos aislados representan "todos los elementos". Por ejemplo, elsiguiente comando extrae todos los elementos de la 3ª fila:

    » A(3, :)ans =31 9 2 22 27 20

    Para acceder a la última fila o columna puede utilizarse la palabra end, en lugardel número correspondiente. Por ejemplo, para extraer la sexta fila (la última) dela matriz:

    » A(end, :)ans =4 36 29 13 18 11

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

    » A(3:5,:)ans =

    31 9 2 22 27 208 28 33 17 10 1530 5 34 12 14 16

    Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Porejemplo, el siguiente comando extrae las filas 1, 2 y 5:

    » A([1 2 5],:)ans =35 1 6 26 19 243 32 7 21 23 2530 5 34 12 14 16

    En los ejemplos anteriores se han extraído filas y no columnas por motivos del

    espacio ocupado por el resultado en la hoja de papel. Es evidente que todo lo quese dice para filas vale para columnas y viceversa: basta cambiar el orden de losíndices. El operador dos puntos (:) puede utilizarse en ambos lados del operador(=). Por ejemplo, a continuación se va a definir una matriz identidad B de tamaño6x6 y se van a reemplazar filas de B por filas de A. Obsérvese que la siguientesecuencia de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 deA,

    » B=eye(size(A));» B([2 4 5],:)=A(1:3,:)B =1 0 0 0 0 035 1 6 26 19 24

    0 0 1 0 0 03 32 7 21 23 2531 9 2 22 27 200 0 0 0 0 1

    Se pueden realizar operaciones aún más complicadas, tales como la siguiente» B=eye(size(A));» B(1:2,:)=[0 1; 1 0]*B(1:2,:)

  • 8/19/2019 Curso de Matlab Mf

    23/87

    22

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

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

    x =0.7361 0.0475 0.2625 0.7622 0.9103

    Obsérvese que por haber utilizado paréntesis –en vez de corchetes–  los valoresgenerados por el operador (:) afectan a los índices del vector y no al valor desus elementos. Para invertir el orden de las columnas de una matriz se puede hacerlo siguiente:

    » A=magic(3)A =8 1 63 5 74 9 2

    Se sustituyen las dos primeras filas de B por el producto de dichas filas por unamatriz de permutación.

    » A(:,3:-1:1)ans =6 1 87 5 32 9 4

    Aunque hubiera sido más fácil utilizar la función fliplr(A), que es específicapara ello. Finalmente, hay que decir que A(:) representa un vector columna con lascolumnas de A una detrás de otra.

    12.FUNCIONES MATEMÁTICAS ELEMENTALES QUE OPERAN DE MODO ESCALAR 

    Estas funciones, que comprenden las funciones matemáticas trascendentales y otrasfunciones básicas, actúan sobre cada elemento de la matriz como si se tratase deun escalar.

    Se aplican de la misma forma a escalares, vectores y matrices. Algunas de lasfunciones de este grupo son las siguientes:

    Comando Descripciónsin(x) senocos(x) coseno

    tan(x) tangenteasin(x) arco senoacos(x) arco cosenoatan(x) arco tangente (devuelve un ángulo entre 

    atan2(x) arco tangente (devuelve un ángulo entre   y ); se le pasan 2 argumentos,proporcionales al seno y al coseno

    sinh(x) seno hiperbólicocosh(x) coseno hiperbólicotanh(x) tangente hiperbólica

  • 8/19/2019 Curso de Matlab Mf

    24/87

    23

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    asinh(x) arco seno hiperbólicoacosh(x) arco coseno hiperbólicoatanh(x) arco tangente hiperbólicalog(x) logaritmo naturallog10(x) logaritmo decimalexp(x) función exponencialsqrt(x) raíz cuadrada

    sign(x)devuelve -1 si 0. Aplicada a un número complejo,devuelve un vector unitario en la misma dirección

    rem(x,y) resto de la división (2 argumentos que no tienen que ser enteros)mod(x,y) similar a rem (Ver diferencias con el Help)round(x) redondeo hacia el entero más próximofix(x) redondea hacia el entero más próximo a 0floor(x) valor entero más próximo hacia ceil(x) valor entero más próximo hacia gcd(x) máximo común divisorlcm(x) mínimo común múltiploreal(x) partes realesimag(x) partes imaginariasabs(x) valores absolutosangle(x) ángulos de fase

    13.FUNCIONES QUE ACTÚAN SOBRE VECTORES Las siguientes funciones actúan sobre vectores (no sobre matrices ni sobreescalares)Comando Descripción

    [xm,im]=max(x)Máximo elemento de un vector. Devuelve el valor máximo xm y laposición que ocupa im

    min(x)Mínimo elemento de un vector. Devuelve el valor mínimo y laposición que ocupa.

    sum(x) suma de los elementos de un vector

    cumsum(x)devuelve el vector suma acumulativa de los elementos de un vector(cada elemento del resultado es una suma de elementos deloriginal)

    mean(x) valor medio de los elementos de un vectorstd(x) desviación típicaprod(x) producto de los elementos de un vector

    Cumprod(x)devuelve el vector producto acumulativo de los elementos de unvector

    [y,i]=sort(x)ordenación de menor a mayor de los elementos de un vector xDevuelve el vector ordenado y, y un vector i con las posicionesiniciales en x de los elementos en el vector ordenado y.

    En realidad estas funciones se pueden aplicar también a matrices, pero en ese caso

    se aplican por separado a cada columna de la matriz, dando como valor de retornoun vector resultado de aplicar la función a cada columna de la matriz consideradacomo vector. Si estas funciones se quieren aplicar a las filas de la matriz bastaaplicar dichas funciones a la matriz traspuesta.

    14.FUNCIONES QUE ACTÚAN SOBRE MATRICES Las siguientes funciones exigen que el(los) argumento(s) sean matrices. En estegrupo aparecen algunas de las funciones más útiles y potentes de MATLAB. Seclasificarán en varios subgrupos:

  • 8/19/2019 Curso de Matlab Mf

    25/87

    24

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    3.5.1. FUNCIONES MATRICIALES ELEMENTALESComando DescripciónB = A' calcula la traspuesta (conjugada) de la matriz AB = A.' calcula la traspuesta (sin conjugar) de la matriz Av = poly(A) devuelve un vector v con los coeficientes del polinomio

    característico de la matriz cuadrada At = trace(A) devuelve la traza t (suma de los elementos de la diagonal) de una

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

    rectangular An = size(A) devuelve el tamaño de una matriz cuadrada Anf = size(A,1) devuelve el número de filas de Anc = size(A,2) devuelve el número de columnas de A

    15.FUNCIONES MATRICIALES ESPECIALES Las funciones exp(), sqrt() y log() se aplican elemento a elemento a las matricesy/o vectores que se les pasan como argumentos. Existen otras funciones similares

    que tienen también sentido cuando se aplican a una matriz como una única entidad.Estas funciones son las siguientes (se distinguen porque llevan una "m" adicionalen el nombre):

    Comando Descripciónexpm(A) Si A=XDX', expm(A)=X*diag(exp(diag(D)))*X'sqrtm(A) devuelve una matriz que multiplicada por sí misma da la matriz Alogm() es la función recíproca de expm(A)

    Aunque no pertenece a esta familia de funciones, se puede considerar que eloperador potencia (^) está emparentado con ellas. Así, es posible decir que A^nestá definida si A es cuadrada y n un número real. Si n es entero, el resultado secalcula por multiplicaciones sucesivas. Si n es real, el resultado se calcula

    como: A^n=X*D.^n*X' siendo [X,D]=eig(A)

    16.FUNCIONES DE FACTORIZACIÓN Y/O DESCOMPOSICIÓN  MATRICIAL 

    A su vez este grupo de funciones se puede subdividir en 4 subgrupos:

    Funciones basadas en la factorización triangular (eliminación de Gauss):

    Comando Descripción[L,U] = lu(A) descomposición de Crout (A = LU) de una matriz. La matriz L es una

    permutación de una matriz triangular inferior (dicha permutaciónes consecuencia del pivotamiento por columnas utilizado en la

    factorización)B = inv(A) calcula la inversa de A. Equivale a B=inv(U)*inv(L)d = det(A) devuelve el determinante d de la matriz cuadrada A. Equivale a

    d=det(L)*det(U)

    E = rref(A)reducción a forma de escalón (mediante la eliminación de Gauss conpivotamiento por columnas) de una matriz rectangular A

    [E,xc] = rref(A) reducción a forma de escalón con un vector xc que da informaciónsobre una posible base del espacio de columnas de A

    U = chol(A) descomposición de Cholesky de matriz simétrica y positivo-definida. Sólo se utiliza la diagonal y la parte triangular

  • 8/19/2019 Curso de Matlab Mf

    26/87

    25

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    superior de A. El resultado es una matriz triangular superior talque A = U'*U

    c = rcond(A) devuelve una estimación del recíproco de la condición numérica dela matriz A basada en la norma sub-1. Si el resultado es próximo a1 la matriz A está bien condicionada; si es próximo a 0 no loestá.

    Funciones basadas en el cálculo de valores y vectores propios:

    Comando Descripción[X,D] = eig(A) valores propios (diagonal de D) y vectores propios (columnas de X)

    de una matriz cuadrada A. Con frecuencia el resultado es complejo(si A no es simétrica)

    [X,D] = eig(A,B) valores propios (diagonal de D) y vectores propios (columnas de X)de dos matrices cuadradas A y B (Ax = lBx).

    Funciones basadas en la descomposición QR:

    Comando Descripción[Q,R] = qr() descomposición QR de una matriz rectangular. Se utiliza para

    sistemas con más ecuaciones que incógnitas.B = null(A) devuelve una base ortonormal del subespacio nulo (kernel, o

    conjunto de vectores x tales que Ax = 0) de la matriz rectangularA

    Q = orth(A) las columnas de Q son una base ortonormal del espacio de columnasde A. El número de columnas de Q es el rango de A

    Funciones basadas en la descomposición de valor singular

    Comando Descripción[U,D,V] = svd(A) Descomposición de valor singular de una matrizrectangular(A=U*D*V'). U y V son matrices ortonormales. D esdiagonal y contiene los valores singulares

    B = pinv(A) Calcula la pseudo-inversa de una matriz rectangular Ar = rank(A) Calcula el rango r de una matriz rectangular Anor = norm(A) Calcula la norma sub-2 de una matriz (el mayor valor singular)nor = norm(A,2) Co mismo que la anteriorc = cond(A) Condición numérica sub-2 de la matriz A. Es el cociente entre el

    máximo y el mínimo valor singular. La condición numérica da unaidea de los errores que se obtienen al resolver un sistema deecuaciones lineales con dicha matriz: su logaritmo indica elnúmero de cifras significativas que se pierden

    Normas de matrices:Comando Descripciónnorm(A) norma sub-2, es decir, máximo valor singular de A, max(svd(A)).normest(A) calcula una estimación o aproximación de la norma sub-2. Útil para

    matrices grandes en las que norm(A) necesita demasiado tiemponorm(A,2) lo mismo que norm(A)norm(A,1) norma sub-1 de A, máxima suma de valores absolutos por columnas, es

    decir: max(sum(abs((A))))norm(A,inf) norma sub-

  • 8/19/2019 Curso de Matlab Mf

    27/87

    26

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    decir: max(sum(abs((A'))))

    Normas de vectores:

    Comando Descripciónnorm(x,p) norma sub-p, es decir sum(abs(x)^p)^(1/p).

    norm(x) norma euclídea; equivale al módulo o norm(x,2).norm(x,inf) norma sub-¥, es decir max(abs(x)).norm(x,1) norma sub-1, es decir sum(abs(x)).

    17. MÁS SOBRE OPERADORES RELACIONALES CON VECTORES Y  MATRICES 

    Cuando alguno de los operadores relacionales vistos previamente (, =, ==y ~=) actúa entre dos matrices (vectores) del mismo tamaño, el resultado es otramatriz (vector) de ese mismo tamaño conteniendo unos y ceros, según los resultadosde cada comparación entre elementos hayan sido true o false, respectivamente.

    Por ejemplo, supóngase que se define una matriz magic A de tamaño

    3x3 y a continuación se forma una matriz binaria M basada en lacondición de que los elementos de A sean mayores que 4 (MATLABconvierte este cuatro en una matriz de cuatros de modo automático).Obsérvese con atención el resultado:

    De ordinario, las matrices "binarias" que se obtienen de laaplicación de los operadores relacionales no se almacenan en memoriani se asignan a variables, sino que se procesan sobre la marcha.MATLAB dispone de varias funciones para ello. Recuérdese quecualquier valor distinto de cero equivale a true, mientras que unvalor cero equivale a false.

    Algunas de estas funciones son:

    Comando Descripciónany(x) función vectorial; chequea si alguno de los elementos del vector x cumple una

    determinada condición (en este caso ser distinto de cero). Devuelve un uno ó uncero

    any(A) se aplica por separado a cada columna de la matriz A. El resultado es un vectorde unos y ceros

    all(x) función vectorial; chequea si todos los elementos del vector x cumplen unacondición. Devuelve un uno ó un cero

    all(A) se aplica por separado a cada columna de la matriz A. El resultado es un vectorde unos y ceros

    find(x) busca índices correspondientes a elementos de vectores que cumplen unadeterminada condición. El resultado es un vector con los índices de loselementos que cumplen la condición

    find(A) cuando esta función se aplica a una matriz la considera como un vector con unacolumna detrás de otra, de la 1ª a la última.

    18.FUNCIONES PARA CÁLCULOS CON POLINOMIOS Para MATLAB un polinomio se puede definir mediante un vector de coeficientes. Porejemplo, el polinomio:x4 – 8x2 + 6x – 10 = 0

    Se puede representar mediante el vector [1, 0, -8, 6, -10]. MATLAB puede realizardiversas

    » A=magic(3)A =

    8 1 6

    3 5 7

    4 9 2

    » M=A>4

    M =

    1 0 1

    0 1 1

    0 1 0

  • 8/19/2019 Curso de Matlab Mf

    28/87

    27

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    operaciones sobre él, como por ejemplo evaluarlo para un determinado valor de x(funciónpolyval()) y calcular las raíces (función roots()):

    » pol=[1 0 -8 6 -10]pol =

    1 0 -8 6 -10

    » roots(pol)ans =-3.28002.67480.3026 + 1.0238i0.3026 - 1.0238i

    » polyval(pol,1)ans =-11

    Para calcular producto de polinomios MATLAB utiliza una función llamada conv() (deproducto de convolución). En el siguiente ejemplo se va a ver cómo se multiplicaun polinomio de segundo grado por otro de tercer grado:

    » pol1=[1 -2 4]pol1 =1 -2 4» pol2=[1 0 3 -4]pol2 =1 0 3 -4» pol3=conv(pol1,pol2)pol3 =1 -2 7 -10 20 -16

    Para dividir polinomios existe otra función llamada deconv(). Las funcionesorientadas alcálculo con polinomios son las siguientes:

    Comando Descripciónpoly(A) polinomio característico de la matriz Aroots(pol) raíces del polinomio pol

    Polyval(pol,x)evaluación del polinomio pol para el valor de x. Si x es unvector, pol se evalúa para cada elemento de x

    polyvalm(pol,A) evaluación del polinomio pol de la matriz Aconv(p1,p2) producto de convolución de dos polinomios p1 y p2

    [c,r]=deconv(p,q)división del polinomio p por el polinomio q. En c se devuelveel cociente y en r el resto de la división

    Residue(p1,p2) descompone el cociente entre p1 y p2 en suma de fraccionessimples(ver »help residue)

    Polyder(pol) calcula la derivada de un polinomioPolyder(p1,p2) calcula la derivada de producto de polinomios

    Polyfit(x,y,n)calcula los coeficientes de un polinomio p(x) de grado n que seajusta a los datos p(x(i)) ~= y(i), en el sentido de mínimoerror cuadrático medio.

  • 8/19/2019 Curso de Matlab Mf

    29/87

    28

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    19.OTROS TIPOS DE DATOS DE MATLAB En los Capítulos precedentes se ha visto la “especialidad” de MATLAB: Trabajar convectores y matrices. En este Capítulo se va a ver que MATLAB puede tambiéntrabajar con otros tipos de datos:

    Conjuntos o cadenas de caracteres, fundamentales en cualquier lenguaje deprogramación.Hipermatrices, o matrices de más de dos dimensiones.Estructuras, o agrupaciones bajo un mismo nombre de datos de naturaleza diferente.Vectores o matrices de celdas (cell arrays), que son vectores o matrices cuyoselementos pueden ser cualquier otro tipo de dato.Matrices dispersas o matrices dispersas, que son matrices que pueden ser de muygran tamaño con la mayor parte de sus elementos cero.

    20.CADENAS DE CARACTERES MATLAB trabaja también con cadenas de caracteres, con ciertas semejanzas y tambiéndiferencias respecto a C/C++ y Java. A continuación se explica lo más importantedel manejo de cadenas de caracteres en MATLAB. Las funciones para cadenas de

    caracteres están en el sub-directorio toolbox\matlab\strfun del directorio en queesté instalado MATLAB.

    Los caracteres de una cadena se almacenan en un vector, con un carácter porelemento. Cada carácter ocupa dos bytes. Las cadenas de caracteres van entreapóstrofos o comillas simples, como por ejemplo: 'cadena'. Si la cadena debecontener comillas, éstas se representan por un doble carácter comilla, de modo quese pueden distinguir fácilmente del principio y final de la cadena. Por ejemplo,para escribir la cadena ni 'idea' se escribiría 'ni''idea'''. Una matriz decaracteres es una matriz cuyos elementos son caracteres, o bien una matriz cuyasfilas son cadenas de caracteres. Todas las filas de una matriz de caracteres debentener el mismo número de elementos. Si es preciso, las cadenas (filas) más cortasse completan con blancos.

    A continuación se pueden ver algunos ejemplos y practicar con ellos:

    » c='cadena'c =cadena» size(c) % dimensiones del arrayans =1 6» double(c) % convierte en números ASCII cada carácterans =99 97 100 101 110 97» char(abs(c)) % convierte números ASCII en caracteresans =

    cadena» cc=char('más','madera') % convierte dos cadenas en una matrizcc =másmadera» size(cc) % se han añadido tres espacios a 'más'ans =2 6

  • 8/19/2019 Curso de Matlab Mf

    30/87

    29

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    Las funciones más importantes para manejo de cadenas de caracteres son lassiguientes:

    double(c) convierte en números ASCII cada carácterchar(v) convierte un vector de números v en una cadena de caractereschar(c1,c2) crea una matriz de caracteres, completando con blancos las

    cadenas más cortasdeblank(c) elimina los blancos al final de una cadena de caracteresdisp(c) imprime el texto contenido en la variable cischar(c) detecta si una variable es una cadena de caracteresisletter() detecta si un carácter es una letra del alfabeto. Si se le pasa

    un vector o matriz de caracteres devuelve un vector o matriz deunos y ceros

    isspace() detecta si un carácter es un espacio en blanco. Si se le pasa unvector o matriz de caracteres devuelve un vector o matriz de unosy ceros

    strcmp(c1,c2) comparación de cadenas. Si las cadenas son iguales devuelve ununo, y si no lo son, devuelve un cero (funciona de modo diferenteque la correspondiente función de C)

    strcmpi(c1,c2) igual que strcmp(c1,c2), pero ignorando la diferencia entremayúsculas y minúsculas

    strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenasc1==c2 compara dos cadenas carácter a carácter. Devuelve un vector o

    matriz de unos y ceross=[s,' y más'] concatena cadenas, añadiendo la segunda a continuación de la

    primerafindstr(c1,c2) devuelve un vector con las posiciones iniciales de todas las

    veces en que la cadena más corta aparece en la más largastrmatch(cc,c) devuelve los índices de todos los elementos de la matriz de

    caracteres (o vector de celdas) cc, que empiezan por la cadena cstrrep(c1,c2,c3) sustituye la cadena c2 por c3, cada vez que c2 es encontrada en

    c1

    [p,r]=strtok(t) separa las palabras de una cadena de caracteres t. Devuelve laprimera palabra p y el resto de la cadena r

    int2str(v) convierte un número entero en cadena de caracteresnum2str(x,n) convierte un número real x en su expresión por medio de una

    cadena de caracteres, con cuatro cifras decimales por defecto(pueden especificarse más cifras, con un argumento opcional n)

    str2double(str) convierte una cadena de caracteres representando un número realen el número real correspondiente

    vc=cellstr(cc) convierte una matriz de caracteres cc en un vector de celdas vc,eliminando los blancos adicionales al final de cada cadena. Lafunción char() realiza las conversiones opuestas

    sprintf convierte valores numéricos en cadenas de caracteres, de acuerdocon las reglas y formatos de conversión del lenguaje C.

    Con las funciones anteriores se dispone en MATLAB de una amplia gama deposibilidadespara trabajar con cadenas de caracteres.

    A continuación se pueden ver algunos ejemplos:

    » num2str(pi) % el resultado es una cadena de caracteres, no un númeroans =3.142

  • 8/19/2019 Curso de Matlab Mf

    31/87

    30

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    » num2str(pi,8)ans =3.1415927

    Es habitual convertir los valores numéricos en cadenas de caracteres para poder

    imprimirlos como títulos en los dibujos o gráficos. Véase el siguiente ejemplo:

    » fahr=70; grd=(fahr-32)/1.8;» title(['Temperatura ambiente: ',num2str(grd),' grados centígrados'])

    21.GRÁFICOS BIDIMENSIONALES MATLAB utiliza un tipo especial de ventanas para realizar las operacionesgráficas. Ciertos comandos abren una ventana nueva y otros dibujan sobre laventana activa, bien sustituyendo lo que hubiera en ella, bien añadiendo nuevoselementos gráficos a un dibujo anterior. Todo esto se verá con más detalle en lassiguientes secciones.

    5.1. Funciones gráficas 2D elementales

    MATLAB dispone de cuatro funciones básicas para crear gráficos 2-D. Estasfunciones se diferencian principalmente por el tipo de escala que utilizan en losejes de abscisas y de ordenadas.

    Estas cuatro funciones son las siguientes:Comando Descripción

    plot()crea un gráfico a partir de vectores y/o columnas de matrices, conescalas lineales sobre ambos ejes.

    loglog() ídem con escala logarítmica en ambos ejes

    semilogx()ídem con escala lineal en el eje de ordenadas y logarítmica en el ejede abscisas

    semilogy()ídem con escala lineal en el eje de abscisas y logarítmica en el eje deordenadas

    En lo sucesivo se hará referencia casi exclusiva a la primera de estas funciones(plot). Las demás se pueden utilizar de un modo similar.Existen además otras funciones orientadas a añadir títulos al gráfico, a cada unode los ejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc. Estasfunciones son las siguientes:

    Comando Descripcióntitle('título') añade un título al dibujo

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

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

    text(x,y,'texto')

    introduce 'texto' en el lugar especificado por las coordenadasx e y. Si x e y son vectores, el texto se repite por cada parde elementos. Si texto es también un vector de cadenas de textode la misma dimensión, cada elemento se escribe en lascoordenadas correspondientes

    gtext('texto')Introduce texto con ayuda del ratón: el cursor cambia de formay se espera un clic para introducir el texto en esa posición

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

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

  • 8/19/2019 Curso de Matlab Mf

    32/87

    31

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    off desaparece la cuadrícula

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

    » v = text(1,.0,'seno')v =76.0001» delete(v)

    Los dos grupos de funciones anteriores no actúan de la misma forma. Así, lafunción plot dibuja una nueva figura en la ventana activa (en todo momento MATLABtiene una ventana activa de entre todos las ventanas gráficas abiertas), o abreuna nueva figura si no hay ninguna abierta, sustituyendo cualquier cosa quehubiera dibujada anteriormente en esa ventana. Para verlo, se comenzará creando unpar de vectores x e y con los que trabajar:

    » x=[-10:0.2:10]; y=sin(x);

    Ahora se deben ejecutar los comandos siguientes (se comienza cerrando la ventanaactiva,para que al crear la nueva ventana aparezca en primer plano):

    » close % se cierra la ventana gráfica activa anterior» grid % se crea una ventana con una cuadrícula» plot(x,y) % se dibuja la función seno borrando la cuadrícula

    Se puede observar la diferencia con la secuencia que sigue:

    » close» plot(x,y) % se crea una ventana y se dibuja la función seno

    » grid % se añade la cuadrícula sin borrar la función seno

    En el primer caso MATLAB ha creado la cuadrícula en una ventana nueva y luego laha borrado al ejecutar la función plot. En el segundo caso, primero ha dibujado lafunción y luego ha añadido la cuadrícula. Esto es así porque hay funciones comoplot que por defecto crean una nueva figura, y otras funciones como grid que seaplican a la ventana activa modificándola, y sólo crean una ventana nueva cuandono existe ninguna ya creada. Más adelante se verá que con la función hold puedenañadirse gráficos a una figura ya existente respetando su contenido.

    a.FUNCIÓN PLOT Esta es la función clave de todos los gráficos 2-Den MATLAB. Ya se ha dicho que el elemento básico de

    los gráficos bidimensionales es el vector. Seutilizan también cadenas de 1, 2 ó 3 caracteres paraindicar colores y tipos de línea. La función plot(),en sus diversas variantes, no hace otra cosa quedibujar vectores. Un ejemplo muy sencillo de estafunción, en el que se le pasa un único vector comoargumento, es el siguiente:

    » x=[1 3 2 4 5 3]x =

  • 8/19/2019 Curso de Matlab Mf

    33/87

    32

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    1 3 2 4 5 3» plot(x)

    El resultado de este comando es que se abre una ventana mostrando el gráfico de laFigura. Por defecto, los distintos puntos del gráfico se unen con una líneacontinua. También por defecto, el color que se utiliza para la primera línea es el

    azul. Cuando a la función plot() se le pasa un único vector –real– como argumento,dicha función dibuja en ordenadas el valor de los n elementos del vector frente alos índices 1, 2, ... n del mismo en abscisas. Más adelante se verá que si elvector es complejo, el funcionamiento es bastante diferente.

    En la pantalla de su ordenador se habrá visto que MATLAB utiliza por defecto colorblanco para el fondo de la pantalla y otros colores más oscuros para los ejes ylas gráficas.

    Una segunda forma de utilizar la función plot() es con dos vectores comoargumentos. En este caso los elementos del segundo vector se representan enordenadas frente a los valores del primero, que se representan en abscisas. Véasepor ejemplo cómo se puede dibujar un cuadrilátero de esta forma (obsérvese que

    para dibujar un polígono cerrado el último punto debe coincidir con el primero):

    » x=[1 6 5 2 1]; y=[1 0 4 3 1];» plot(x,y)

    La función plot() permite también dibujar múltiples curvas introduciendo variasparejas de vectores como argumentos. En este caso, cada uno de los segundosvectores se dibujan en ordenadas como función de los valores del primer vector dela pareja, que se representan en abscisas. Si el usuario no decide otra cosa, paralas sucesivas líneas se utilizan colores que son permutaciones cíclicas del azul,verde, rojo, cyan, magenta, amarillo y negro. Obsérvese bien cómo se dibujan elseno y el coseno en el siguiente ejemplo:

    » x=0:pi/25:6*pi;

    » y=sin(x); z=cos(x);» plot(x,y,x,z)

    Ahora se va a ver lo que pasa con los vectores complejos. Si se pasan a plot()varios vectores complejos como argumentos, MATLAB simplemente representa laspartes reales y desprecia las partes imaginarias. Sin embargo, un único argumentocomplejo hace que se represente la parte real en abscisas, frente a la parteimaginaria en ordenadas. Véase el siguiente ejemplo. Para generar un vectorcomplejo se utilizará el resultado del cálculo de valores propios de una matrizformada aleatoriamente:

    » plot(eig(rand(20,20)),'+')

    Donde se ha hecho uso de elementos que se verán en la siguiente sección, respectoa dibujar con distintos tipos de “markers” (en este caso con signos +), en vez decon línea continua, que es la opción por defecto. En el comando anterior, elsegundo argumento es un carácter que indica el tipo de marker elegido. El comandoanterior es equivalente a:

    » z=eig(rand(20,20));» plot(real(z),imag(z),'+')

  • 8/19/2019 Curso de Matlab Mf

    34/87

    33

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    Como ya se ha dicho, si se incluye más de un vector complejo como argumento, seignoran las partes imaginarias. Si se quiere dibujar varios vectores complejos,hay que separar explícitamente las partes reales e imaginarias de cada vector,como se acaba de hacer en el último ejemplo. El comando plot puede utilizarsetambién con matrices como argumentos.

    Véanse algunos ejemplos sencillos:

    Se puede obtener una excelente y breve descripción de la función plot() con elcomando help plot o helpwin plot. La descripción que se acaba de presentar secompletará en la siguiente sección, en donde se verá cómo elegir los colores y lostipos de línea.

    b.ESTILOS DE LÍNEA Y MARCADORES EN LA FUNCIÓN PLOT En la sección anterior se ha visto cómo la tarea fundamental de la función plot()era dibujar los valores de un vector en ordenadas, frente a los valores de otrovector en abscisas. En el caso general esto exige que se pasen como argumentos unpar de vectores. En realidad, el conjunto básico de argumentos de esta función es

    una tripleta formada por dos vectores y una cadena de 1, 2 ó 3 caracteres queindica el color y el tipo de línea o de marker. En la tabla siguiente se puedenobservar las distintas posibilidades.

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

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

    plot(x,A)

    dibuja las columnas (o filas) de A en ordenadas frente al vector xen abscisas. Las dimensiones de A y x deben ser coherentes: si lamatriz A es cuadrada se dibujan las columnas, pero si no lo es y ladimensión de las filas coincide con la de x, se dibujan las filas

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

    plot(A,B)dibuja las columnas de B en ordenadas frente a las columnas de A enabscisas, dos a dos. Las dimensiones deben coincidir

    plot(A,B,C,D)

    análogo al anterior para cada par de matrices. Las dimensiones de

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

  • 8/19/2019 Curso de Matlab Mf

    35/87

    34

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    c.AÑADIR LÍNEAS A UN GRÁFICO YA EXISTENTE Existe la posibilidad de añadir líneas a un gráfico ya existente, sin destruirlo osin abrir una nueva ventana. Se utilizan para ello los comandos hold on y holdoff. El primero de ellos hace que los gráficos sucesivos respeten los que ya sehan dibujado en la figura (es posible que haya que modificar la escala de losejes); el comando hold off deshace el efecto de hold on. El siguiente ejemplomuestra cómo se añaden las gráficas de x2 y x3 a la gráfica de x previamentecreada (cada una con un tipo de línea diferente):

    » plot(x)» hold on» plot(x2,'--')» plot(x3,'-.')» hold off

    d.COMANDO SUBPLOT Una ventana gráfica se puede dividir en m particiones horizontales y n verticales,con objeto de representar múltiples gráficos en ella. Cada una de estassubventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda lafigura. La forma general de este comando es:

    subplot(m,n,i)

    donde m y n son el número de subdivisiones en filas y columnas, e i es lasubdivisión que se convierte en activa. Las subdivisiones se numeranconsecutivamente empezando por las de la primera fila, siguiendo por las de lasegunda, etc. Por ejemplo, la siguiente secuencia de comandos genera cuatrográficos en la misma ventana:

    » y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z;» subplot(2,2,1), plot(x,y)» subplot(2,2,2), plot(x,z)

    » subplot(2,2,3), plot(x,w)» subplot(2,2,4), plot(x,v)

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

    » subplot(1,1,1)

    e.CONTROL DE LOS EJES También en este punto MATLAB tiene sus opciones por defecto, que en algunasocasiones puede interesar cambiar. El comando básico es el comando axis. Pordefecto, 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 ymínimo según cada eje, se utiliza el comando:

    axis([xmin, xmax, ymin, ymax]) mientras que : axis('auto')

    devuelve el escalado de los ejes al valor por defecto o automático. Otros posiblesusos de este comando son los siguientes:

  • 8/19/2019 Curso de Matlab Mf

    36/87

  • 8/19/2019 Curso de Matlab Mf

    37/87

    36

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    comando). La función close cierra la figura activa, mientras que close(n) cierrala ventana o figura número n.

    El comando clf elimina el contenido de la figura activa, es decir, la deja abiertapero vacía. La función gcf devuelve el número de la figura activa en ese momento.

    El comando figure(gcf) (get current figure) permite hacer visible la ventana degráficos desde la ventana de comandos.

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

    » axis('on'), figure(gcf)» axis('on'), grid, figure(gcf)

    22.Otras funciones gráficas 2-D Existen otras funciones gráficas bidimensionales orientadas a generar otro tipo degráficos distintos de los que produce la función plot() y sus análogas. Algunas deestas funciones son las siguientes (para más información sobre cada una de ellasen particular, utilizar help nombre_función):

    COMANDO RESULTADObar() crea diagramas de barrasbarh() diagramas de barras horizontalesbar3() diagramas de barras con aspecto 3-D

    bar3h() diagramas de barras horizontales con aspecto 3-Dpie() gráficos con forma de “tarta”pie3() gráficos con forma de “tarta” y aspecto 3-Darea() similar plot(), pero rellenando en ordenadas de 0 a ystairs() función análoga a bar() sin líneas internaserrorbar() representa sobre una gráfica –mediante barras– valores de errores

    compass()dibuja los elementos de un vector complejo como un conjunto de vectorespartiendo de un origen común

    feather()dibuja los elementos de un vector complejo como un conjunto de vectorespartiendo de orígenes uniformemente espaciados sobre el eje de abscisas

    hist() dibuja histogramas de un vectorrose() histograma de ángulos (en radianes)quiver() dibujo de campos vectoriales como conjunto de vectores

    A modo de ejemplo, genérese un vector de valores aleatorios entre 0 y 10, yejecútense lossiguientes comandos:

    » x=[rand(1,100)*10];» plot(x)» bar(x)» stairs(x)» hist(x)

  • 8/19/2019 Curso de Matlab Mf

    38/87

    37

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    » hist(x,20)» alfa=(rand(1,20)-0.5)*2*pi;» rose(alfa)

    23.FUNCIÓN FPLOT La función plot vista anteriormente dibuja vectores. Si se quiere dibujar unafunción, antes de ser pasada a plot debe ser convertida en un vector de valores.Esto tiene algunos inconvenientes, por ejemplo, el que "a priori" es difícilpredecir en que zonas la función varía más rápidamente y habría por ello quereducir el espaciado entre los valores en el eje de abscisas. La función fplotadmite como argumento un nombre de función o un nombre de fichero *.m en el cualesté definida una función de usuario. La función puede ser escalar (un únicoresultado por cada valor de x) o vectorial. La forma general de esta función es lasiguiente:

    fplot('funcion', limites, 'cadena', tol)

    donde 'funcion' representa el nombre de la función o del fichero *.m entreapóstrofos (pasado como cadena de caracteres), limites es un vector de 2 ó 4

    elementos que puede tomar los valores [xmin,xmax] o [xmin,xmax,ymin,ymax],'cadena' tiene el mismo significado que en plot y permite controlar el color, losmarkers y el tipo de línea. tol es la tolerancia de error relativo. El valor pordefecto es 2e-03. El máximo número de valores en x es (1/tol)+1

    Esta función puede utilizarse también en la forma:

    [x,y]=fplot('funcion', limites, 'cadena', tol)

    y en este caso se devuelven los vectores x e y, pero no se dibuja nada. El gráficopuede obtenerse con un comando posterior por medio de la función plot. Véase unejemplo de utilización de esta función. Se comienza creando un fichero llamadomifunc.m en el directorio G:\matlab que contenga las líneas siguientes:

    function y = mifunc(x)y(:,1)=200*sin(x)./x;y(:,2)=x.^2;

    y a continuación se ejecuta el comando:

    » fplot('mifunc(x)', [-20 20], 'g')

    Obsérvese que la función mifunc devuelve una matriz con dos columnas, queconstituyen las dos gráficas dibujadas. En este caso se ha utilizado para ellas elcolor verde.

    24.FUNCIÓN FILL PARA POLÍGONOS Ésta es una función especial para dibujar polígonos planos, rellenándolos de undeterminado color. La forma general es la siguiente:

    » fill(x,y,c)

    que dibuja un polígono definido por los vectores x e y, rellenándolo con el colorespecificado por c. Si es necesario, el polígono se cierra uniendo el últimovértice con el primero. Respecto al color:

  • 8/19/2019 Curso de Matlab Mf

    39/87

    38

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    • Si c es un carácter de color ('r','g','b','c','m','y','w','k'), o un vectorde valores [r g b], el polígono se rellena de modo uniforme con el colorespecificado.

    • Si c es un vector de la misma dimensión que x e y, sus elementos setrasforman de acuerdo con un mapa de colores determinado, y el llenado delpolígono –no uniforme en este caso–  se obtiene interpolando entre loscolores de los vértices. Sobre este tema de los colores, se volverá másadelante con un cierto detenimiento.

    Este comando puede utilizarse también con matrices:

    » fill(A,B,C)

    Donde A y B son matrices del mismo tamaño. En este caso se dibuja un polígono porcada par de columnas de dichas matrices. C puede ser un vector fila de coloresuniformes para cada polígono, o una matriz del mismo tamaño que las anteriorespara obtener colores de relleno por interpolación. Si una de las dos, o A o B, sonun vector en vez de una matriz, se supone que ese vector se repite tantas veces

    como sea necesario para dibujar tantos polígonos como columnas tiene la matriz.

    Considérese un ejemplo sencillo de esta función:

    » x=[1 5 4 2]; y=[1 0 4 3];» fill(x,y,'r')» colormap(gray), fill(x,y,[1 0.5 0.8 0.7])

    25.ENTRADA DE PUNTOS CON EL RATÓN Se realiza mediante la función ginput, que permite introducir las coordenadas delpunto sobre el que está el cursor, al clicar (o al pulsar una tecla). Algunasformas de utilizar esta función son las siguientes:

    Como ejemplo de utilización de este comando, ejecútense las instruccionessiguientes en la ventana de comandos de MATLAB para introducir un cuadriláteroarbitrario y dibujarlo de dos formas:» clf, [x,y]=ginput(4);» figure(gcf), plot(x,y,'w'), pause(5), fill(x,y,'r')

    Donde se ha introducido el comando pause(5) que espera 5 segundos antes de pasar aejecutar el siguiente comando. Este comando admite como argumento un tiempo conprecisión de centésimas de segundo.

    26.GRAFICOS 2D Y 3D Ya hemos venido realizando gráficos en 2D como lo son las respuestas de losejercicios anteriores, ahora vamos a dibujar gráficos en 3D.

    [x,y] = ginput lee un número indefinido de puntos –cada vez que se clica o sepulsa una tecla cualquiera– hasta que se termina pulsando la teclaintro

    [x,y] =ginput(n)

    lee las coordenadas de n puntos

    [x,y,bot] =ginput

    igual que el anterior, pero devuelve también un vector de enterosbot con el código ASCII de la tecla pulsada o el número del botóndel ratón (1, 2, ...) con el que se ha clicado

  • 8/19/2019 Curso de Matlab Mf

    40/87

    39

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    Supongamos que queremos dibujar lasuperficie:

    Esto lo hacemos con la secuencia deinstrucciones:

    »x=-5:.4:5;»y=x;»[X,Y]=meshgrid(x,y);»Z=X.^2.*exp(-Y.^2);» surf(X,Y,Z)

    Las primeras dos instrucciones dividenlos ejes de “x” y “y” en subintervalosde largo 0.4; la tercera instruccióngenera una rejilla en el conjunto [-5,5]x[-5,5] con cuadraditos de lados0.4.

    La cuarta instrucción evalúa la función en los puntos de la rejilla, y finalmentetrazamos la superficie con surf.

    Para crear un fichero llamado sombreroprocedemos de la siguiente forma:

    >> w=sin(r)./r;>> mesh(w)>> u=-8:0.5:8;>> v=u;>> [u,v]=meshgrid(u,v);>> r=sqrt(u.^2+v.^2)+eps;>> w=sin(r)./r;

    >> mesh(w)si ingresamos el comando surf(w), nosmuestra la misma grafica pero en vez delíneas aparece ahora una superficiefaceteada

  • 8/19/2019 Curso de Matlab Mf

    41/87

    40

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

    27.Graficas de curvas dadas en coordenadas polares y  parametricas.

    En muchos casos se hace necesario realizar graficas en forma Parametrica para locual lo único que debemoshacer es parametrizar la curva correspondiente como ilustra el ejemplo siguiente.

    Dada la curva definida en forma Parametrica por:

    t=0:0.1:10;x=2*cos(t)-cos(2*t);y=2*sin(t)-sin(2*t);plot(x,y,'r')Obtenemos las siguiente salida:

    Para realizar graficas en coordenadas polares Matlab cuenta con los siguientes

    comandos:

    polar(a,r) : Representa la curva en coordenadas polares

    polar(a,r,S): Representa la curva en coordenadas polares con el estilo de líneasespecificado por S.

    veamos algunos Ejemplos:a=0:0.01:2*pi;r=sin(2*a).*cos(2*a);polar(a,r)

    a=0:0.01:2*pi;r=4*(1+cos(a));polar(a,r)

    28.Comandos básicos de programación

    a. COMO HACER UN PROGRAMA EN MATLAB (GENERALIDADES)Es posible realizar un programa en Matlab tal como se hace en otros lenguajes como

    el basic, pascal o el lenguaje C. Es necesario utilizar un editor para escribir elcódigo. Para cargar un editor, se puede hacer desde la ventana options, escogiendoeditor preferente, y cargando el editor que se desee utilizar. Para escribircódigo, requerimos crear un archivo *.M. Para esto necesitamos abrir new M.file enla ventana file. Ahora escribimos el código y salvamos el archivo utilizando laterminación archivo.M. Se puede correr el programa desde Matlab simplementeescribiendo el nombre del archivo que fue creado. Es posible abrir programas conla terminación *.M desde Matlab, en el menú file, open M.file.

  • 8/19/2019 Curso de Matlab Mf

    42/87

    41

    ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

    Un vers a e Zu a

     b. PROGRAMACIÓN DE MATLABComo ya se ha dicho varias veces –incluso con algún ejemplo–  MATLAB es unaaplicación que se puede programar muy fácilmente. De todas formas, como lenguajede programación pronto verá que no tiene tantas posibilidades como otros lenguajes(ni tan complicadas...). Se comenzará viendo las bifurcaciones y bucles, y lalectura y escritura interactiva de variables, que son los elementos básicos de