trabajo coecyt

Upload: sergio-sanchez-martinez

Post on 06-Jul-2015

129 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDAD AUTNOMA AGRARIAANTONIO NARRODEPARTAMENTO DE ESTADSTICA Y CLCULOAplicacin de Matrices Usando MATLABM. C. Flix de Jess Snchez PrezM. C. Sergio Snchez MartnezAplicacin de Matrices Usando MatlabEste material fue realizado con el apoyo de las autoridades del Consejo Estatal de Ciencia y TecnologaBlvd. Venustiano Carranza No. 1850.Col. RepublicaTel.01 800 375 93 66Paseo Saltillo, CoahuilaiiMayo 2010PrlogoEladelanto que ha alcanzado eluso de programas computacionales en diferentes reas del conocimiento, en particular en la educacin, nos plantean la necesidad de investigar y profundizar en el rea de desarrollo de software de tipo libre, que tenga la flexibilidad de ajustarse y modificarse segn el avance de las tecnologas.Dadoel avanceen eldesarrollo de software de tipocomercialcon lafinalidad de resolver problemas matemticos sofisticados, urge contar con material educativo que realiceestasmismasfuncionesdemaneragratuita, yaqueel usodesoftware comercial implicamuchosrecursoseconmicos, quelosestudiantesnoestnen condiciones de hacer. Esta situacin se acenta ms en el rea silvoagropecuaria dado que los estudiantes provienen de diferentes instituciones educativas con muy diversosprogramasdeestudioyenmuchosdeloscasosnotienenaccesoni siquieraal usodeunacomputadora conlasmnimasherramientasdetrabajo.La problemtica anteriorda origen aque elestudiante a nivelprofesional tendr que empezar a usar dichos programas computacionales, los cuales estn destinados a personas que poseen una cierta capacitacin previa en el rea de computo.Entonces, desarrollandoprogramasenMatlabenel readealgebralineal, que cuente con una interfase amigable y fcil de entender se hace necesario para elevar el nivel educativo en las distintas instituciones dedicadas al rea antes mencionada. No ser necesario que el estudiante sea un erudito en el rea del algebra lineal, sino quesolamenteusarlasdistintastcnicasdeaplicacinparalaresolucinde problemas reales.Este documento se ha constituido en cuatro captulos. En el primero se familiariza al lector con el programa Matlab. En el segundo se aplican las diferentes metodologas pararesolver problemasdelgebramatricial, enel tercerosehaceunaamplia explicacinenel manejodegrficosenMatlabyel captulocuatroseestudian problemas de programacin lineal.M.C. Flix de Jess Snchez PrezM.C. Sergio SnchezMartnezDepartamento de Estadstica y ClculoiiiUniversidad Autnoma Agraria Antonio NarroContenido1.Conociendo el...................................................viMATLAB...............................................................vi1.1 Introduccin.....................................................................................................................vii1.2 Uso del Help....................................................................................................................xii1.3El entorno de trabajo de MATLAB...............................................................................xiv1.3.1El Escritorio de MATLAB (Matlab Desktop)......................................................... xv 1.3.2Command Window .................................................................................................. xv 1.3.3 Command History Browser................................................................................... xvi 1.3.4 Current Directory Browser................................................................................... xvii 1.3.5Path de MATLAB:establece el camino de bsqueda ........................................ xvii 1.3.6 Workspace Browser Array Editor....................................................................... xviii 1.3.7El Editor/Debugger................................................................................................. xix 1.3.8 El Profiler ................................................................................................................ xx Operaciones con ..............................................xxiMatrices y Vectores..........................................xxi2.1 Introduccin....................................................................................................................xxi2.2 Definicin de matrices desde el teclado.......................................................................xxiii2.3 Operaciones con Matrices.............................................................................................xxvi2.3.1Operadores Aritmticos ........................................................................................ xxvi 2.3.2Operadores para la resolucin de Sistemas de Ecuaciones Lineales .................. xxviii 2.3.3Operadores elemento a elemento .......................................................................... xxxi 2.4 Tipos de Datos..............................................................................................................xxxi2.4.1 Nmeros reales de doble precisin....................................................................... xxxii 2.4.2Otros tipos de variables: Integer, Float y Logical .............................................. xxxiii 2.4.3 Nmeros complejos: Funcin complex............................................................... xxxvi 2.4.4 Cadenas de caracteres ...................................................................................... xxxviii 2.5Variables y expresiones matriciales........................................................................xxxviii2.6Otras formas de definir Matrices...............................................................................xxxix2.6.1Tipos de Matrices Predefinidas................................................................................. xl 2.6.2Formacin de una Matriz a partir de otras............................................................... xli 2.6.3Direccionamiento de Vectores y Matrices a partir de Vectores ............................ xliii 2.6.4Operador dos Puntos............................................................................................... xlv 2.6.5Matriz vaca A[ ]. Borrado de filas o columnas .......................................................... l2.6.6Definicin de vectores y Matrices a partir de un archivo .......................................... li 2.7Operadores relacionales....................................................................................................li2.8Operadores Lgicos.........................................................................................................lii2.9 Funciones de Librera....................................................................................................liiiiv2.10Funciones Matemticas elementales que operan a modo de escalar............................liv2.10.1Funciones que actan sobre Vectores..................................................................... lv 2.10.2Funciones que actan sobreMatrices................................................................... lvi 2.10.3Funciones Matriciales Especiales......................................................................... lvii 2.10.4 Funciones de Factorizacin y/o Descomposicin Matricial ................................ lvii 2.11 Ms sobre operadores relacionales con vectores y matrices...........................................lx2.12 Otras funciones mas que actan sobre vectores y matrices.........................................lxiiiGraficos en MATLAB ......................................lxiv(2D y 3D).........................................................lxiv 3.1Introduccin.................................................................................................................lxiv3.2 Funciones grficas 2D elementales...............................................................................lxv3.2.1Funcin plot() ...................................................................................................... lxviii 3.2.2Comando subplot .................................................................................................... lxx 3.2.3 Control de los ejes: Funcin axis()....................................................................... lxxi 3.2.4Control de ventanas graficas: funcin figure ........................................................ lxxii 3.2.5 Funcin fill para polgonos................................................................................. lxxiii 3.3Grficos Tridimensionales........................................................................................lxxiv3.3.1Tipos de funciones graficas tridimensionales....................................................... lxxv 3.3.2Dibujo de mallas: funciones meshgrid, mesh y surf ............................................ lxxvi 3.3.3 Dibujo de lneas de contorno: funciones contour y contour3 ............................ lxxvii 3.3.4Utilizacin del color en grficos 3D .................................................................... lxxix 3.3.5 Dibujo de superficies faceteadas. ......................................................................... lxxx 3.3.6.Otras funciones grficas 3D ................................................................................ lxxxi Preludio a la programacin.........................lxxxiiilineal y no lineal...........................................lxxxiii4.1Introduccin............................................................................................................lxxxiii4.2. Antecedentes.............................................................................................................lxxxiv 4.3Conjuntos convexos...............................................................................................lxxxiv 4.4Funciones convexas................................................................................................lxxxv4.5Planteamiento del modelo.....................................................................................lxxxvi4.6Determinacin geomtrica de programas ............................................................lxxxviiimatemticos...................................................................................................................lxxxviii4.7Mtodo grfico con MATLAB...............................................................................lxxxix4.8Mtodo grfico alternativo con MATLAB..................................................................xci 4.8.1 Convex hull ........................................................................................................ xcii 4.8.2Teorema de la solucin bsica factible. ............................................................. xciv 4.8.3Teorema de la resolucin..................................................................................... xcv 4.9Mtodo Simplex............................................................................................................cii4.9.1Ruptura de las desigualdades................................................................................. ciii 4.9.2 Uso de variables artificiales................................................................................... civ 4.9.3 Solucin ptima por enteros .................................................................................. civ 4.10 Solucin a la programacin lineal con MATLAB..................................................cviii4.11Programacin Dual..................................................................................................cx4.12Programacin no lineal ..........................................................................................cxvv4.12.1La funcin fmincon de MATLAB ...................................................................... cxvi 4.12.2 Programacin cuadrtica .................................................................................. cxviii Conociendo elMATLABvi11.1 IntroduccinMATLABes el nombreabreviadodeMATrix LABoratory. Es un programaquesirvepararealizar clculosnumricosconvectoresy matrices. Como caso particular puede tambin trabajar con nmeros escalares, reales, complejos, imaginarios, cadenasdecaracteresy otras estructuras de informacin ms complejas.Unadelascapacidadesmsatractivasesladerealizarunaamplia variedad de grficos de dos y tres dimensiones. MATLAB tiene tambin unlenguajepropiodeprogramacin, queacomparacinconotros lenguajes, ste es mucho ms amigable y cuenta con una gama amplia de aplicaciones.MATLAB es un gran lenguaje de programacin del tipo calculo tcnico y cientfico quepara ciertas operaciones es mucho ms rpido que otros lenguajes que existen en el mercado, esto aprovechando la capacidad devectorizacinconquecuentael lenguaje. Enotrasaplicaciones resulta un poco mas lento que el cdigo equivalente desarrollado en por ejemplo C/C++ o Fortran.Enlaversin2009a, queesconlaquevamosatrabajar, MATLAB cuenta con un acelerador JIT (Just In Time), que mejora significativamente la velocidad de ejecucin de los ficheros*.m, (ficheros propios de MATLAB) en ciertas circunstancias, por ejemplo cuandonosehacenllamados aotros ficheros*.m, noseutilizan estructuras y clases, etc. Aunque limitado en ese momento, cuando es aplicable la propiedad de vectorizacin de los algoritmos mejora sensiblemente la velocidad. En cualquier caso, el lenguaje de programacin de MATLAB siempre es unamagnificaherramientadealtonivel paradesarrollaraplicaciones tcnicas, de fcil manejo y que, como ya se ha dicho, aumenta de gran manera la productividad de los programadores respecto a otros entornos de desarrollo.MATLAB dispone de un cdigo bsico y de muchas libreras especializadas llamadastoolboxesque como su nombre lo dice son herramientas ya creadas con un fin especifico, lo cuales otra de las grandes bondades y ventajas de usar un entorno de desarrollo como ste.El programa sepuede arrancar como cualquier otraaplicacinde Windows, dandoclic dos veces enel iconocorrespondienteenel escritorio o por medio del men inicio. viiAl arrancar MATLAB se abre una ventana similar a la mostrada en la figura 1.1. Esta es la vista que se obtiene eligiendo la opcin Desktop Layout/Default,enel menDesktop.Comoestaconfiguracin puede ser cambiadafcilmentepor el usuario, esposiblequeenmuchos casos concretos lo que aparezca sea muy diferente, en cualquier caso, unavistasimilar sepuedeconseguir conel citadocomandoantes mencionado. Esta ventana inicial requiere de algunas explicaciones que a continuacin se enuncian.Figura 1.1.Ventana inicial de Matlab 2009aLa parte ms importante de la ventana inicial es la parte central (ventana ms grande), llamada Command Window, que incluso puede existir sola sin las dems ventanas que le acompaan.En esta sub-ventana es donde se ejecutan los comandosde MATLAB, enseguidadelprompt(aviso) caractersticodeestelenguajede programacin (fx >>), que indica que el programa est preparado para recibirinstrucciones. Enlapantallamostradaenlafigura1.1seha ejecutado el comandoA=magic(6), mostrndose a continuacin el resultado proporcionado por MATLAB.El comandomagic(6)creaunamatrizdetamao6*6, lacual al ser sumada por filas, por columnas o en diagonal, siempre dar el mismo resultado.En laparteizquierda aparecendossub-ventanasque son demucha utilidad: en la parte superior aparece la llamada Current Directory, que viiimuestralosdocumentosdel directorioactivooactual. El directorio activosepuedecambiar desdeelCommandWindow, odesdela propia ventana con los mtodos de navegacin de directorios propios deWindows. Haciendoclickdosvecessobre algunodelosarchivos *.mdel directorio activo se abre el editor de documentos de MATLAB, herramienta fundamental para la programacin sobre la que hablaremos ms delante.En la parte inferior se muestra un pequeo navegador que me permite seleccionar alguno de los documentos creados para checar detalles en caso de ser necesario.Pasandoalapartederechaendondetambinaparecendossub-ventanas,lascualesson elWorkspaceyelCommandHistoryque sirven para lo siguiente.ElWorkspacecontiene informacin sobre todas las variables que se hayan definido en esta sesin y permite ver y modificar las matrices o vectores con los que se est trabajando.EnlaparteinferiorderechaseencuentraelCommandHistoryque muestralos ltimos comandosejecutados enelCommandWindow. Estos comandos sepuedenvolver aejecutar haciendodobleclick sobre ellos. As mismo si la accin la ejecutamos con el botn derecho del ratn sobre cualquier comando se mostrar un men contextual con las posibilidades disponibles en ese momento. Para editar uno de estos comandos hay que copiarlo antes en el Command Window.En la parte inferior izquierda de la pantalla aparece el botn Start, con una funcin anloga a la del botn Inicio de Windows. Start da acceso inmediato a ciertas capacidades delprograma. La figura 1.2. muestra algunas de las posibilidades antes mencionadas.ixFigura 1.2.Men StartPuede hacerse que alarrancar MATLAB se ejecute automticamente un archivo, de modo que aparezca por ejemplo un saludo inicial personalizado. Esto se hace mediante un archivo de comandos que se ejecuta de modo automtico cada vez que se entra en el programa (el archivo startup.m, que deber estar en un directorio determinado, por ejemplo C:\matlab2009\Work)Para apreciar desde el principio la gran potencia de MATLAB, se puede comenzarporescribirenlaCommandWindowlasiguientelnea, a continuacin del prompt. Al final se deber pulsar la tecla de enter.>> A=rand(6),B=inv(A),B*ALa respuesta de MATLAB despus de presionar enter, ser:A =0.81470.27850.95720.79220.67870.70600.90580.54690.48540.95950.75770.03180.12700.95750.80030.65570.74310.27690.91340.96490.14190.03570.39220.04620.63240.15760.42180.84910.65550.09710.09750.97060.91570.93400.17120.8235B =0.88912.4498 -0.8206 -0.1344 -2.6745-0.2580 -0.7400 -0.45730.25160.70790.4624 0.47333.0570 10.24240.6679 -3.7108-13.1555-1.4818 -1.0410 -0.2263 -0.6094 -0.17421.9017 0.8917 -1.1175 -7.15821.16382.11858.4414 -0.2710 -1.2197 -9.3966 -0.49283.0654 10.48961.3799ans =1.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.00001.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.00000.00001.0000 -0.0000 -0.0000 -0.0000x -0.0000 -0.0000 -0.00001.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.00001.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.00001.0000Enrealidad enla lnea de comandos anterior se hanescritotres instrucciones diferentes, separadas por comas, como consecuencia, la respuestadel programatiene trespartestambin,cadaunade ellas correspondiente a una de las instrucciones. Con la primera instruccin se define una matriz cuadrada de tamao 6*6llamadaA, cuyos elementos son nmeros aleatorios entre cero y uno (aunque aparezcan solocuatrocifrasenrealidadhansidocalculadoscon16cifrasde precisin). EnlasegundainstruccinsedefineunamatrizBquees igual a la matriz inversa de la matriz A. finalmente se ha multiplicado la matriz B por la matriz A, y se comprueba que el resultado es la matriz llamada matriz identidad.Escongrandesmatricesograndessistemasdeecuacionescomo MATLAB obtiene toda la potencia de la computadora. Por ejemplo, las siguientes instrucciones permiten calcular la potencia de clculo de la computadora en Megaflops(millones de operaciones aritmticas por segundo). En la primera lnea se crean tres matrices de tamao 1000*1000, lasdosprimerasconvaloresaleatoriosylaterceracon valorescero. Lasegundalneatomatiempos, realizael productode matrices, vuelveatomar tiemposycalculademodoaproximadoel nmero de millones de operaciones realizadas. La tercera lnea calcula losMegaflopspor segundo, paralocual utilizalafuncinpropiade MATLAB etime() que calcula el tiempo transcurrido entre dos instantes definidos por dos llamadas a la funcin clock>> n=1000; A=rand(n);B=rand(n); C=zeros(n);>> tini=clock; C=B*A; tend=clock; mflops=(2*n^3)/1000000;>> mflops/etime(tend,tini)La respuesta esans =6.4103e+003Lo cual me representa el nmero 6410.3 millones de operaciones por segundo para esta computadora.Un pequeo aviso antes de seguir adelante. Adems de que con el con elCommandHistory, esposiblerecuperar comandosanterioresde xiMATLAB y moverse por dichos comandos con el ratn y con las teclas y. Alpulsar la primera dedichas flechas aparecerelcomando que se haba introducido inmediatamente antes. De modo anlogo es posible moverse sobre la lnea de comandos con las teclas y, ir al principio de la lnea con la tecla de Inicio, al final con la tecla Fin, y borrar toda la lnea con Esc. Recurdese que solo hay una lnea activa (la ultima).Para borrar todas las salidas anteriores de MATLAB y dejar limpia la Command Windowsepuedenutilizarlasfuncionesclcyhome.La funcin clc (clear console) elimina todas las salidas anteriores mientras que la funcin home las mantiene, pero lleva elprompta la primera lnea de la ventana.Si se desea salir de MATLAB basta con teclear uno de los siguientes comandos quit o exit1.2 Uso del HelpMATLAB 2009a dispone de un excelente men Help (ayuda) con el que se puede encontrar la informacin que se desee. La figura1.3.muestra las distintas opciones que aparecen en el men de ayuda de la ventana principal de aplicacin:Figura 1.3. Men HelpEn seguida daremos una breve explicacin sobre algunos de los submens que se desplegan dentro del men Help.xii1. Product Help. Seabreunaventanacomolamostradaenla figura 1.4.enla que se puede buscar ayuda general sobre MATLAB, funcin o concepto que queramos consultar. La portada de esta ayuda tiene tres captulos principales: functions, que contiene informacin de referenciasobrelasfuncionespor ordenalfabticoopor categoras; HandleGraphics, quepermiteacceder a informacin concreta sobre las distintas propiedades de los objetos grficos;Documentation Set, que da acceso a versiones completas de los manuales del programa en formatodepantallafcilmentenavegable(conapartadosdeGetting Started,User Guides,Programming TipsyExamplesin Documentation),Product Demos(conunacoleccindeejemplos programados que se pueden ejecutar y cuyo cdigo se puede examinar para ver como estn programados), Whats New (con las novedades de esta versin con respecto a la anterior), Printing the Documentation Set (que permite abrir documentos PDF(Portable Document Format), que se corresponden con las versiones en papel de los manuales del programa, y que precisan del programa Adobe Acrobat Reader 5.0o superior). Lasrestantespestaasdeestaventanadanaccesoaun ndice por palabras (Index), a un formulario de bsqueda(Search) y a la coleccin de ejemplos ya programados antes citada (Demos)Figura 1.4.Submen Product Help2. UsingtheDesktop. Seabreunaventanadeayudaconun formato similar a la ventana ya descrita con informacin detallada sobre comoutilizar yconfigurar el entornodedesarrollooDesktop. Las distintasherramientasdisponiblessedescribensucesivamente. Cada pginadisponedeflechasyenlaces quepermitenir alapgina siguienteovolveralaanterior. Esposibletambinimprimiraquellas xiiipginas que se desee consultar o archivar en papel. Una caracterstica muyimportanteeslaposibilidaddeorganizarlasventanascongran flexibilidad, agrupndolas o independizndolas segn los propios gustos o deseos.3. UsingCommandWindow.Estaopcindel menHelpd> pathMATLABPATH C:\MATLAB\R2009a\toolbox\matlab\general C:\MATLAB\R2009a\toolbox\matlab\opsC:\MATLAB\R2009a\toolbox\matlab\lang C:\MATLAB\R2009a\toolbox\matlab\elmat. . .C:\MATLAB\R2009a\toolbox\rtw\targets\xpc\target\build\xpcblocksC:\MATLAB\R2009a\toolbox\rtw\targets\common\can\blocks\tlc_cC:\MATLAB\R2009a\toolbox\rtw\targets\xpc\xpcdemosC:\MATLAB\R2009a\toolbox\rtw\targets\xpc\xpc\xpcmngrC:\MATLAB\R2009a\toolbox\rtw\targets\xpc\target\kernel\embeddedPara ver como se utilize el Search Path supngase que se utiliza lapalabranombre1enuncomando, el procesoquesigueel programa para tratar de conocer que es nombre1 es el siguiente.1. Comprueba si nombre1 es una variable previamente definida por el usuario2. Comprueba si nombre1 es una funcin interna o intrnseca de MATLAB3. Compruebasi nombre1esunasub-funcionounafuncin privada del usuario4. Comprueba si hay un archivo llamado nombre1.mex, nombre1.dll onombre1.menlosdirectoriosincluidosenel search path de MATLAB1.3.6 Workspace Browser Array EditorxviiiElespacio de trabajo de MATLAB (Workspace) es elconjunto de variables y de funciones de usuario que en un determinado momentoestndefinidasenlamemoriadel programaodela funcin que se est ejecutando. Para obtener informacin sobre el Workspace desde la lnea de comando se pueden utilizar los comandos who y whos. El segundo proporciona una informacin mas detallada que el primero. Por ejemplo, una salida tpica del comando whos es la siguiente:>> whosName Size Bytes Class AtributesA 1x3 24doubleB 2x3 48doublec 1x1 8doubled 1x1 8doublee 5x1 40doubleEstas son las variables del espacio de trabajo base (el de la lnea de comandos de MATLAB). 1.3.7El Editor/DebuggerEn MATLAB tiene particular importancia los ya citados archivos con extensin .m ( o M.files). son archivos de texto ASCII, con la extensin mensionada que contienen conjuntos de comandos o definicin de funciones. La importancia de estos archivos es que al teclear su nombre en la lnea de comandos y pulsar enter, se ejecutan uno tras otro todos los comandos contenidos en dicho archivo. El poder guardar instrucciones y grandes matrices en un archivo permite ahorar mucho trabajo de tecleado.Aunquelosarchivossepuedencrearconcualquiereditorde textos ASCII tal como Notepad,MATLAB dispone de un editor propio que permite tanto crear y modificar estos archivos, como ejecutarlos paso a paso para ver sicontienen errores (proceso dedepuracinDebugg). Lafigura1.6. muestralaventana principal del Editor/Debugger, en la que se ha tecleado un archivollamadoprueba1.m,quecontiene uncomentario y seis sentencias. El editor muestra con diferentes colores los diferentestiposoelementosconstitutivosdeloscomandos. El Editor se preocupa tambin de que las comillas o parntesis que seabren, nosequedensinel correspondienteelementode xixcierre. Colocando elcursor antes o despus de una apertura o cierredecorchetesoparntesisypulsandolasteclasflecha izquierdaoflechaderecha, el Editormuestraconquecierreo aperturadecorchetes oparntesis seemparejael elemento considerado; sinose emparejacon ninguna, aparececon una rayita de tachado. Figura 1.6.ejecucin interactiva con el editor DebuggerLa figura 1.6. corresponde a una ejecucin del archivo de comandos controlada con elDebugger. Dicha ejecucin se comienza eligiendo el comandoRunen el menDebug, pulsando la tecal F5, dando click en el botn Continue( ) de la barra de herramientas del editor o tecleando el nombre del archivo en la lnea de comandos de la Command Window. Los puntos rojos que aparecen en el margen izquierdo son Breakpoints (puntos en los que se detiene la ejecucin del programa); la flecha verde en el borde izquierdo indica la sentencia en que est detenida la ejecucin (antes de ejecutar dichas sentencia); cuando el cursor se coloca sobre una variable apareceunapequeaventanaconlos valores numricosde dicha variable, tal como se aprecia.1.3.8 El ProfilerElprofileres un programa de utilidad que permite saber como sehaempleadoel tiempodel CPUenlaejecucindeun determinado programa. Elprofileres una herramienta muy til para determinar los cuellos de botella de un programa, es decir las funciones y las lneas de cdigo que ms veces se llaman y que se llevan la mayor parte del tiempo de ejecucin. Por ejemplo, es obvio que si se trata de mejorar la eficiencia de un xxprograma, seramas importantemejorar unafuncinquese llevaseel 60%del tiempototal queotrasololellevarel 2%. Dentro de la funcin ms llamada, elProfilerproporciona informacinsobreeltiempo quesellevacadasentencia,yda tambin algunas orientaciones sobre las posibilidades de mejorarla.Operaciones con Matrices y Vectores2.1 IntroduccinEnmatemticas, unamatrizesunatablabidimensional denmeros consistente en cantidades abstractas que pueden sumarse, multiplicarse, restarse, elevarseaunapotencia, etc. Lasmatricesse utilizan para describir sistemas de ecuaciones lineales, realizar un seguimiento de los coeficientes de una aplicacin lineal y registrar los datos que dependen de varios parmetros. Las matrices se describen en el campo de la teora de matrices, pueden sumarse, restarse, multiplicarse y descomponer en varias formas, lo que tambin las hace un concepto clave en el campo del algebra lineal.Unamatrizesunatablacuadradaorectangular dedatos(llamados elementos o entradas de la matriz) ordenados en filas y columnas en cadaunadelaslneasverticales.Aunamatrizconm filasyn columnas se le denomina matriz mpor n (escrito m x n), y a my n xxi2dimensiones de la matriz. Las dimensiones de una matriz siempre se dan con el nmero de filas primero y el nmero de columnas despus.Comnmentesedicequeunamatrizmporntieneordendemxn (orden tiene elsignificado de tamao). Dos matrices se dice que son iguales si son del mismo orden y tienen los mismos elementos.Al elementodeunamatrizqueseencuentraenlafilai-esimayla columna j-esimase le llama elemento i,jo elemento (i,j)-esimode la matriz. Se vuelve a poner primero las filas y despus las columnas.Casi siempre, se denotan a las matrices con letras maysculas mientras que se utilizan las correspondientes letras en minsculas para denotar los elementos de las mismas. Por ejemplo, al elemento de una matriz A que se encuentra en la fila i-esimay la columna j-esimase le denota comoaij. Adems de utilizar letras maysculas para representar matrices, numerososautoresrepresentanalasmatricesconfuente negritaparadistinguirlasdeotrostiposdevariables. AsiAesuna matriz, mientras que A es un escalar (numero)Normalmente se escribemxn ija A ) ( para definir una matriz A mxn con cada entrada en la matrizA[ij]llamada ijapara todo n j y m i 1 1. Sin embargo, la convencin del inicio de los ndices iyjen 1 no es universal: algunos lenguajes de programacin comienzan en cero, en cual caso se tiene 1 0 1 0 n j y m i.Una matriz con una sola columna o con una sola fila se denomina a menudo vector, y se interpreta como un elemento del espacio eucldeo. Una matriz 1xn(una fila y n columnas) se denomina vector fila, y una matrizmx1 (una columna y m filas) se denomina vector columna.Ya se ha comentado que MATLAB es fundamentalmente un programa para clculo matricial. Inicialmente se utilizar MATLAB como programa interactivo, en el que se irn definiendo las matrices, los vectores y las expresionesqueloscombinanyobteniendolosresultadossobrela marcha. Si estos resultados son asignados a otras variables, entonces podrnser utilizados posteriormenteenotras expresiones. Eneste sentido MATLABsera como una potente calculadora matricial (en realidad es esto y mucho mas).Antesdetratardehacerclculoscomplicados, laprimeratareaser aprender a introducir matrices y vectores desde el teclado. Ms adelante se vern formas ms potentes de definir matrices y vectores.xxii2.2 Definicin de matrices desde el tecladoComoencasi todoloslenguajesdeprogramacin, enMATLABlas matricesyvectoressonvariablesquetienennombres. Yasevern luego con mas detalle las reglas que deben cumplir estos nombres. Por el momentosesugierequeseutilicenletras maysculas paralas matrices y letras minsculas para los vectores y escalares (MATLAB no exige esto pero puede resultar de mucha utilidad)Para definir una matriz no hace falta declararla o establecer de antemano su tamao (de hecho, se puede definir un tamao y cambiarlo posteriormente). MATLAB determina el nmero de filas y de columnasenfuncindel nmerodeelementosqueseproporcionan. Lasmatrices sedefinenointroducenporfilas;loselementosdeuna misma fila estn separados por espacios en blanco o comas, mientras que las filas estn separadas por pulsaciones de enter o por caracteres punto y coma (;). Por ejemplo, el siguiente comando define una matriz A de dimensiones (3 x 3):>> A=[1 2 3;4 5 6;7 8 9]La respuesta de MATLAB es la siguienteA=1 2 34 5 67 8 9Apartir de este momento la matrizAest disponible para hacer cualquier tipo de operacin con ella (adems de valores numricos, en ladefinicindeunamatrizovectorsepuedenutilizarexpresionesy funciones matemticas). Por ejemplo, una sencilla operacin con A es hallar su matriz traspuesta. En MATLAB el apostrofe () es el smbolo de transposicin matricial. Para calcular A (traspuesta de A) basta teclear lo siguiente (se aade a continuacin la respuesta del programa)>>Aans=1 4 72 5 83 6 9xxiiiComoel resultadodelaoperacinnohasidoasignadoaninguna matriz, MATLAButilizaunnombredevariablepor defecto(ans, de answer), que contiene el resultado de la ultima operacin. La variable ans puede ser utilizada como operando en la siguiente expresin que seintroduzca. Tambinpodrhaberseasignadoel resultadoaotra matriz llamada B:>> B=AB=1 4 72 5 83 6 9Ahorayaestndefinidas las matricesAyB, y es posibleseguir operandoconellas. Por ejemplo, sepuedehacer el productodela matriz Apor la matriz Bde la siguiente manera B*A(deber resultar una matriz simtrica)>>B*Aans66 78 9078 93 10890 108 126En MATLAB se accede a los elementos de un vector poniendo el ndice entre parntesis (por ejemplo x(3) ox(i)). Los elementos de las matrices seaccedenponiendolosdosndices entreparntesis separadospor una coma (por ejemplo A(1,2) oA(i,j)). Las matrices se almacenan por columnas (aunque se produzcan por filas, como se ha indicado anteriormente), y teniendo en cuenta esto puede accederse a cualquier elemento de una matriz con un solo subndice. Por ejemplo, si A es una matriz (3 x 3) se obtiene el mismo valor escribiendoA(1,2)que escribiendo A(4).Invertir una matriz es casi tan fcil como transponerla.Acontinuacin se va a definir una nueva matriz A (no singular) en la forma:>>A=[1 4 -3;2 1 5;-2 5 3]A=xxiv1 4 -32 1 5-2 5 3Ahora calculemos la inversa de la matrizAy el resultado lo asignaremos a B. para ello basta con hacer uso de la funcin propia de MATLAB inv() que es la funcin que nos ayuda a encontrar la inversa deunamatriznosingular. (laprecisinonumerodecifrasquese muestran en el resultado se puede cambiar con el men File/Preferences/General):>>B=inv(a)B=0.1803 0.2213 -0.18850.1311 0.02460.0902-0.09840.10660.0574Para comprobar que este resultado es correcto basta con multiplicar A por B y comprobar que el resultado es la matriz identidad.>>B*Aans1.0000 0.0000 0.00000.0000 1.0000 0.00000.0000 0.0000 1.0000De forma anloga a las matrices, es posible definir un vector fila x en la forma siguiente (si los nmeros estn separados por blancos o comas, el resultado ser un vector fila)>>x=[10 20 30] % vector filax=10 20 30Por el contrario,silosnmeros estnseparados por enter o puntoy coma (;) se obtendr un vector columna:>>y=[11; 12; 13]% vector columnay=1112xxv13MATLABtieneencuentaladiferenciaentrevectoresfilayvectores columna. Por ejemplo, si se intenta sumar los vectoresxeyse obtendr el siguiente mensaje de error>>x+y???Error using ==> +Matrix dimensions must agree.Estas dificultades desaparecen si se suma x con el vector traspuesto de y:>>x+yans21 32 43MATLAB considera vectores fila por defecto, como se ve en el ejemplo siguiente:>>x(1)=1,x(2)=2x=1x=1 2A continuacin se van a estudiar estos temas con un poco ms de detalles.2.3 Operaciones con Matrices2.3.1Operadores AritmticosMATLAB puede operar con matrices por medio de operadores y por medio de funciones. Se han visto ya los operadores suma(+), producto(*) y traspuesta (), asi como la funcin para invertir una xxvimatriz (inv()). LosoperadoresmatricialesdeMATLAB sonlos siguientes:+ Suma o adicin- resta o sustraccin*Multiplicacin traspuesta^Potenciacin\ Divisin izquierda/ Divisin derecha.* Producto elemento a elemento./ y .\ divisin elemento a elemento.^ Elevar a una potencia elemento a elementoEstos operadores se aplican tambin a las variables o valores escalares, aunque con algunas diferencias mnimas. Todos estos operadores son coherentes con las correspondientes operaciones matriciales: no se puede por ejemplo sumar matrices que no sean del mismo tamao. Si los operadores no se usan de modo correcto se obtiene un mensaje de error.Los operadores anteriores se pueden aplicar tambin de modo mixto, es decir con un operador escalar y otro matricial. En este casolaoperacinconel escalar seaplicaacadaunodelos elementos de la matriz.Considrese el siguiente ejemplo:>>A=[1 2; 3 4]A=1 22 4>>A*2ans=3 46 8>>A-4ans-3 -2-1 0MATLAButilizael operador dedivisin/ paradividir por un escalar todos los elementos de una matriz o un vector. Esto no xxviiconstituye ninguna sorpresa. Sin embargo, el uso que se describe a continuacin si requiere de ms atencin.2.3.2Operadores para la resolucin de Sistemas de Ecuaciones LinealesMATLAB utiliza los operadores de divisin para la resolucin de sistemas de ecuaciones lineales. Por su gran importancia, estos operadoresrequieren unaexplicacindetenida.Considrese el siguiente sistema de ecuaciones lineales.Ax=bDondex y b son vectores columna, y A una matrizcuadrada no singular (invertible). La resolucin de este sistema de ecuaciones sepuedeescribir enlas2formassiguientes( atencinala segunda forma que esta basada en la barra invertida \, que por dems no es tan usada !):x=inv(A)*bx=A\bAs pues, el operador divisinizquierdapor unamatriz(barra invertida \) equivales a multiplicar por la inversa de esa matriz. En realidad este operador es mqs general y ms inteligente de lo que aparece en el ejemplo anterior: el operador divisin izquierda es aplicable aunque la matriz no tenga inversa e incluso no sea cuadrada, en cuyo caso la solucin que se obtiene (por lo general) es la que proporciona el mtodo de los mnimos cuadrados. Cuando la matriz es triangular o simtrica aprovecha esta circunstancia para reducir el numero de operaciones aritmticas. Enalgunoscasosseobtieneunasolucinconno ms de r elementos distintos de cero, siendo r el rango de la matriz.Esto puede estar basado en que lamatrizsereduce a forma de escaln y se resuelve el sistema dando valor cero a las variableslibresoindependientes. Por ejemplo, considreselo siguiente.Tenemos una matriz de tamao (1 x 2) que conduce a un sistema de infinitas soluciones:>> A=[1 2], b=[2]A =xxviii 1 2b = 2>> x=A\bx = 0 1Esta es la solucin obtenida dando el valor de cero a la variable independiente x(1).Por otra parte, en el caso de un sistema de ecuacionesredundante(osobredeterminado)el resultadode MATLABes el puntomas cercanoenel sentidodemnima normadel error alas ecuaciones dadas (aunquenocumpla exactamente ninguna de ellas). Veamos el siguiente ejemplo de tres ecuaciones formadas por una recta que no pasa por el origen y los dos ejes coordenados:>> A=[1 2;1 0;0 1],b=[2 0 0]'A = 1 2 1 0 0 1b = 2 0 0>> x=A\b, resto=A*x-bx =0.33330.6667xxixresto = -0.33330.33330.6667Si la matriz es singular o est muy mal escalada, el operador \ da un aviso (warning), pero proporciona una solucin.Lainteligencia del operador barrainvertida\ tieneuncosto: MATLAB debe emplear cierto tiempo en determinar las caractersticas de la matriz. Triangular, simtrica, etc. Si el usuario conoce perfectamente y con seguridad las caractersticas de la matriz del sistema, lo mejor es utilizar la funcin linsolve, que no realiza ninguna comprobacin y puede obtener la mxima eficiencia.Aunque no es una forma demasiado habitual, tambin se puede escribir un sistema de ecuaciones lineales en la forma correspondiente a traspuesta de la ecuacin Ax=byB=cDondeyycsonvectoresfila(cconocido). Si lamatrizBes cuadradaeinvertible, lasolucindeestesistemasepuede escribir en la forma siguiente: y=c*inv(B)y=c/BEn este caso, el operador divisin derecha por una matriz equivale a postmultiplicar por lainversa de la matriz. Si se traspone la ecuacin yB=c y se halla la solucin aplicando el operador divisin izquierda se obtieney=(B)\cComprobando las expresiones y=c*inv(B) y y=c/B se obtiene la relacin entre los operadores divisin izquierda y divisin derecha (MATLAB solo tiene implementado el operador divisin izquierda):c/B=((B)\c)xxx2.3.3Operadores elemento a elementoEn MATLAB existe tambin la posibilidad de aplicar elemento a elemento los operadores matriciales. Para ello basta precederlos por un punto (.). Veamos un ejemplo de ello.>> [1 2 3 4]^2??? Error using ==> mpowerMatrix must be square.Esto mismo hecho de otra manera>> [1 2 3 4].^2ans = 1 4 916Observemosquecuandoleanteponemosunpuntoantesde elevar unapotencia, entoncessi hacelafuncinquenosotros esperamos (la de elevar todos y cada uno de los elementos de la matriz a la potencia sealada).Veamos uno mas:>> [1 2 3 4]*[1 -1 1 -1]??? Error using ==> mtimesInner matrix dimensions must agree.hecho de otra manera>> [1 2 3 4].*[1 -1 1 -1]ans = 1-2 3-4Ahora si obtenemos el resultado esperado.2.4 Tipos de DatosMATLABes un programa preparado para trabajar con vectores y matrices. Como caso particular tambin trabaja con variables escalares (matrices de dimensin 1). MATLAB trabaja siempre con la modalidad xxxide doble precisin, es decir guardando cada dato en 8 bytes, con unas 15 cifras significativas. Ms delante veremos que tambin puede trabajar concadenasdecaracteres(strings) y, desdelaversin5.0 tambin con otros tipos de datos: matrices de ms de dos dimensiones, matrices dispersas, vectores y matrices de celdas, estructuras, clases y objetos. 2.4.1 Nmeros reales de doble precisinLos elementos constitutivos de vectores y matrices son nmeros reales almacenados en 8 bytes (53 bits para la mantisa y 11 para elexponente de 2; entre 15 y 16 cifras decimales equivalentes). Es importante saber como trabaja MATLAB con estos nmeros y los casos especiales que presentanMATLABmantieneunaformaespecial paralos nmeros muy grandes (mas grandes que los que es capaz de representar), que sonconsideradoscomoinfinito. Porejemplo, observemoscomo responde el programa al ejecutar el siguiente comando.>> 1.0/0.0ans = InfAsi pues, para MATLABel infinito se representa comoinf. Tambientieneunarepresentacinespecial paralosresultados que estn definidos como nmeros. Veamos los siguientes ejemplos:>> 0/0ans = NaN>> inf/infans = NaNxxxiiEn ambos casos la respuesta es NaN, que es la abreviatura de Not a Number. Este tipo de respuesta, as como la de inf,son enormemente importantes en MATLAB, pues permite controlar la fiabilidad de los resultados de los clculos matriciales. Los NaN se propagan al realizar con ellos cualquier operacin aritmtica, en el sentido de que , por ejemplo, cualquier nmero sumado a unNaNdacomoresultadootroNaN. MATLABtieneestoen cuenta siempre.El programa dispone de tres funciones tiles relacionadas con las operacionesdecomaflotante. Estasfunciones, quenotienen argumentos, son las siguientes:eps devuelveladiferenciaentre1.0yel nmerodecoma flotante inmediatamente superior. Da una idea de la precisin o numero de cifras almacenadas, esta tiene un valor aproximado de 2.2201E0-016 (numero extremadamente pequeo)realmin devuelve el nmero mas pequeo con que se puede trabajar (2.2251E-308)realmax devuelve el nmero ms grande con que se puede trabajar (1.7977E+308)2.4.2Otros tipos de variables: Integer, Float y LogicalComoyasehacomentado, por defectoMATLABtrabajacon variables de punto flotante y doble precisin (doubl). Con estas variables pueden resolverse casi todos los problemas prcticos y con frecuencia no es necesario complicarse la vida declarando variablesdetiposdistintos, comosehaceconcualquier otro lenguajedeprogramacin. Sinembargo, enalgunoscasoses conveniente declarar variables deotros tipos por quepuede ahorrarse mucha memoria y pueden hacerse los clculos mucho ms rpidos.MATLAB permite crear variables enteras con 1, 2, 4 y 8 bytes. A suvez, estasvariablespuedentener signoonotenerlo. Las variablesconsignorepresentannmerosenintervaloscasi simtricosrespecto al cero; las variables sin signo representan nmeros no negativos, desde el cero hasta el nmero mximo.Los tipos de los enteros con signo son int8, int16, int32 e int64, ysinsignouint8, uint116, uint34yuint64. Paracrear una xxxiiivariable entera de un tipo determinado se pueden utilizar sentencias como las siguientes:>> i=int32(100); % se crea un entero de 4 bytes con valor 100>> j=zeros(100); i=int32(j); % se crea un entero i a partir de j>> i=zeros(1000,1000,'int32'); % se crea una matriz 1000 x 1000 de enterosLas funcionesintmin(int64)eintmax(int64)permitenpor ejemplo saber elvalor delentero ms pequeo y mas grande (en valor algebraico) que puede formarse con variables enteras de 64 bits:>> disp([intmin('int64'),intmax('int64')]) -92233720368547758089223372036854775807La funcin isinteger(i)devuelve 1 si la variable ies entera y 0 enotrocaso. Lafuncinclass(i)devuelveel tipodevariable que esi(int8,int16,),mientrasquelafuncinisa(i,int16) permitesaber exactamentesi lavariableicorrespondeaun entero de 16 bits.MATLABdisponededos tipos devariablesrealesofloat: single y doubl, que ocupan respectivamente4 y 8 bytes. Por defecto se utilizandoubles. Las funcionessingle(x)y double(y)permiten realizar conversiones entre ambos tipos de variables.Las funciones realminyrealmaxpermiten saber los nmeros doublemspequeoymsgrande(envalor absoluto)que admite la computadora. Para los correspondientes nmeros de simple precisin habr que utilizarrealmin(single)y realmax(single).La funcinisfloat(x)perimite sabersixes una variable real, de simple o doble precisin. Para saber exactamente de que tipo de variable se trata se pueden utilizar las funcionesisa(x,single)oisa(x,double).Observese el ejemplo siguiente, en el que se ve como con variables single se reduce el tiempo de CPU y la memoria:>> n=1000;AA=rand(n);A=single(AA);>> tic,Bs=inv(A); tocelapsed time is 0.628994 seconds.>> tic, Bd=inv(AA); tocelapsed time is 0.506865 seconds.xxxivQuizs las variables ms interesantes -aparte de las variables por defecto, lasdoubl- seanlasvariableslogical,quesolo pueden tomar dos los valores true(1)y false(0). Las variables lgicassurgencomoresultadodelosoperadoresrelacionales (==, , >=, >=, ~=) y de muchas funciones lgicas como any y all que se aplican a vectores y matrices.La funcin logical(A) produce una variable lgica con el mismo nmerodeelementosqueA, convaloresde1o0segn el correspondiente elemento de A.Una de las aplicaciones ms importantes de las variables lgicas es para separar o extraer los elementos de una matriz o vector que cumplan cierta condicin, y operar luego selectivamente sobre dichos elementos. Obsrvese el siguiente ejemplo.>> A=magic(4)A =16 2 3 13 51110 8 9 7 612 41415 1>> j=A>10j = 1 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0>> isa(j,'logical')ans = 1>> A(j)=-10A = -10 2 3 -10xxxv 5 -1010 8 9 7 6 -10 4 -10 -10 12.4.3 Nmeros complejos: Funcin complexEn muchos clculos matricialeslos datos y/o losresultados no sonrealessinocomplejos, conpartereal yparteimaginaria. MATLABtrabajasinningunadificultadconnmeros deesta naturaleza. Para ver como se representan por defecto los nmeros complejos, ejecutaremos la siguiente sentencia:>> a=sqrt(-4)a =0 + 2.0000i>> 3+4jans =3.0 + 4.0000iEn la entrada de datos de MATLAB se pueden utilizar indistintamente la i y la j para representar el nmero imaginario unidad(enlasalida, sinembargo, puedeversequesiempre aparecelai). si lai olaj noestndefinidascomovariables, puede intercalarse el signo (*). Esto no es posible en el caso de que si estn definidas, por que entonces se utiliza el valor de la variable. Engeneral, cuandoseestatrabajandoconnmeros complejos, conviene no utilizar la i como variable ordinaria, pues puede dar lugar a errores y confusiones. Observemos los siguientes resultados a manera de ejemplo:>> i=2i = 2>> 2+3ians =xxxvi 2.0000 + 3.0000i>> 2+3*ians = 8>> 2+3*jans = 2.0000 + 3.0000iCuando i y j son variables utilizadas para otras finalidades, como unidad imaginaria puede utilizarse tambin la funcin sqrt(-1), o unavariablealaquesehayaasignadoel resultadodeesta funcin.La asignacin de valores complejos a vectores y matrices desde el teclado puede hacerse de las dos formas, que se muestran en el ejemplo siguiente (conviene hacer antes la funcin clear i, para que i no est en definida como variable; este comando limpia la variable en uso):>> 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]*AA =0 + 7.0000i12.0000 - 3.0000i 3.0000 - 1.0000i-2.0000 +12.0000iPuede verse que es posible definir las partes reales e imaginarias por separado. En este caso si es necesario utilizar el operador (*), segn se muestra en el ejemplo.xxxviiMATLAB dispone asimismo de la funcin complex, que crea un nmero complejo a partir de dos argumentos que representan la parte real e imaginaria.>> complex(1,2)ans =1.0 + 2.0000iEs importante advertir que eloperador de matriz traspuesta (), aplicadoamatricescomplejas, producelamatrizconjugaday traspuesta. Existe una funcin que permite hallar la matriz conjugada (conj()) y el operador punto y apostrofe (.) que calcula simplemente la matriz traspuesta.2.4.4 Cadenas de caracteresMATLABpuede definir variables que contengan cadenas de caracteres, las cadenas de texto van entre apostrofes o comillas simplementes=esta es una cadena de caracteres2.5Variables y expresiones matricialesUna variable es un nombre que se da a cada entidad numrica que puede ser una matriz, un vector o un escalar. El valor de esta variable es incluso el tipo de entidad numrica que representa, puede cambiar a lo largo de una sesin de MATLAB o a lo largo de la ejecucin de un programa. La forma mas normal de cambiar el valor de una variable es colocndola a la izquierda del operador de asignacin (=)UnaexpresindeMATLABpuedetener lasdosformassiguientes: primero, asignando su resultado a una variableVariable = expresiny segundo evaluando simplemente el resultado del siguiente modoExpresinxxxviiiencuyo caso elresultado se asigna automticamente a una variable interna de tipo temporal que se usa en MATLAB, llamada ans (answer) quealmacenael ltimoresultadoobtenido. Seconsiderapordefecto que una expresin termina cuando se pulsa enter. Si se desea que una expresin contine en la lnea siguiente, hay que introducir tres puntos () antes depulsar elenter. Tambinsepuedenincluir varias expresiones en una misma lnea separndolas por comas (,) o puntos y comas (;).Si una expresin termina en punto y coma (;) su resultado se calcula, pero no se escribe en la pantalla. Esta posibilidad es muy importante, tantoparaevitar laescrituraderesultados intermedios, comopara evitar la impresin de grandes cantidades de nmeros cuando se trabaja con matrices de gran tamao.A semejanza de C, MATLAB distingue entre maysculas y minsculas en los nombres de variables. Los nombres de variables debern empezar siempre con una letra y pueden constar de hasta 63 letras y nmeros. La funcin namelengthmax permite preguntar alprograma por este nmero mximo de caracteres. Elcarcter guion bajo (_) se consideracomounaletra. Adiferenciadel lenguajeC, nohacefalta declarar las variables que se vayan a utilizar. Esto hace que se deba tener especial cuidado con no utilizar nombres errneos en las variables, porque no se recibir ningnaviso de parte de MATLAB.Cuandosequieretener unarelacindelas variables quesehan utilizado en una sesin de trabajo se pueden utilizar los comandos who owhosqueproporcionanunainformacindetalladadelasvariables que se estn usando en la presente sesin.Estainformacinsepuedeobtener grficamenteconelWorkspace Browser, que aparece con el comando View/Workspace o activando la ventana correspondiente si estaba abierto.El comando clear tiene varias formas posibles de funcionamiento:clear sinargumentos, clear eliminatodaslasvariables creadas previamente (excepto las variables globales)clear A,bborra las variables indicadasclear globalborra las variables globalesclear functions borra las funcionesclear all borra todas las variables, incluyendo las globales y las funciones2.6Otras formas de definir Matrices.xxxixMATLAB dispone de varias formas de definir matrices. El introducirlas por teclado solo es prctico en casos de pequeo tamao y cuando no hay querepetir esaoperacinmuchas veces. Recurdesequeen MATLAB no hace falta definir eltamao de una matriz, las matrices toman su tamao al ser definidas y ese tamao puede ser modificado por el usuariomedianteediciny/oborradodefilasycolumnas. A continuacin se vern otras formas ms potentes y generales de definir y modificar matrices.2.6.1Tipos de Matrices PredefinidasExistenenMATLABvariasfunciones orientadas adefinir congran facilidad matrices de tipos particulares. Algunas de estas funciones son las siguientes:eye(n) Forma la matriz identidad de tamao (n x n).zeros(3,5) Forma una matriz de ceros de tamao (3 x 5).zeros(n) dem de tamao (n x n).ones(n) Forma una matriz de unos de tamao (n x n).ones(2,4) Forma una matriz de unos de tamao (2 x 4).linspace(x,y,n) Genera un vector con n valores igualmente espaciados entre x e y.logspace(a,b,n) Genera un vector con n valores espaciados logartmicamente entre 10^a y 10^b. rand(n) Forma una matriz de nmeros aleatorios entre 0 y 1, con distribucin uniforme de tamao (n x n).rand(2,5) dem de tamao (2 x 5).randn(n) Forma una matriz de nmeros aleatorios de tamao (n x n), con distribucin normal, de valor medio 1 y varianza 0.magic(n) Crea una matriz (n x n) con los nmeros 1, 2, ,n*n, conlapropiedaddequetodaslasfilasycolumnas suman lo mismo.hilb(n) Crea una matriz de Hilbert de tamao (n x n). la matriz de Hilbert es una matriz cuyos elementos(i,j) responden a la expresin(1/(i+j-1)). Esta es una matriz especialmente difcil de manejar por los grandes errores numricos a los que conduce.Invhilb(n) Crea directamente la inversa de la matriz de Hilbertkron(x,y) Produceunamatrizcontodoslosproductosdelos elementos del vector x por los elementos del vector y equivalente a x*y, donde x e y son vectores fila.compan(pol) Construye unamatriz cuyopolinomiocaracterstico tiene como coeficientes los elementos delvectorpolxl(ordenados de mayor a menor grado).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. Usandoel comandoHelp/Matlab Helpsepuedeobtener informacin sobre todas las funciones disponibles en MATLAB, que aparecen agrupadas por categoras o por orden alfabtico. En la categora Mathematicsaparecen la mayor parte de las funciones estudiadas en este apartado.2.6.2Formacin de una Matriz a partir de otrasMATLABofrecetambinlaposibilidaddecrear unamatriza partir de matrices previas ya definidas por varios posibles caminos: Recibiendoalgunadesuspropiedades(comopor ejemploel tamao) Por composicin de varias submatrices mas pequeas Modificndola de alguna forma.A continuacin se describen algunas de las funciones que crean una nueva matriz a partir de otra o de otras, comenzando por dos funciones auxiliares: [m,n]=size(A) Devuelveel numerodefilas y decolumnas dela matrizA. si lamatrizescuadradabastarecoger el primer valor de retorno.n=length(x) Calcula el nmero de elementos de un vector xzeros(size(A)) Forma una matriz de ceros del mismo tamao que una matriz A previamente creada.ones(size(A)) dem con unos.A=diag(A) Forma una matriz diagonalAcuyos elementos diagonales son los elementos de un vector ya existente x.x=diag(A) Formaunvectorxapartir deloselementosdela diagonal de una matriz ya existente A.diag(diag(A)) Crea una matriz diagonal a partir de la diagonal de la matriz A.blkdiag(A,B) Crea una matriz diagonalde submatrices a partir de xlilas matrices que se le pasan como argumentos.triu(A) Formaunamatriztriangular superior a partirdeuna matrizA(notienepor queser cuadrada). Conun segundo argumento puede controlarse que se mantenganoeliminenlasdiagonalespor encimao debajo de la diagonal principal.tril(A) dem con una matriz triangular inferior.rot90(A,k) Girak*90gradoslamatrizrectangularAensentido contrario a las manecillas del reloj. K es un entero que puede ser negativo. Si se omite se toma por defecto k=1.flipud(A) Hallalamatriz simtricadeArespectodeuneje horizontal.fliplr(A) Hallalamatriz simtricadeArespectodeuneje vertical.reshape(A.m.n)Cambiael tamaodelamatrizAdevolviendouna matriz de tamao m x n cuyas columnas se obtienen a partir deunvector formadopor lascolumnasdeA puestas una a continuacin de la otra. Si la matriz A tiene menos de m x n elementos se produce un error.Uncasoespecialmenteinteresanteesel decrear unanueva matriz componiendo como submatrices otras matrices definidas previamente. Amodo de ejemplo, ejecutemos las siguientes lneas de comandos observemos lo que sucede:A=rand(3)A =0.81470.91340.27850.90580.63240.54690.12700.09750.9575>> B=diag(diag(A))B =0.8147 00 0 0.6324 0 0 00.9575>> C=[A, eye(3); zeros(3),B]C =xlii0.81470.91340.27851.0000 000.90580.63240.546901.0000 00.12700.09750.9575001.0000 0 00 0.8147 00 0 00 00.6324 0 0 00 000.9575En el ejemplo anterior, la matriz Cde tamao (6 x 6) se forma por composicin de cuatro matrices de tamao (3 x 3). Aligual que con simples escalares, las submatrices que forman una fila seseparanconblancosocomas, mientrasquelasdiferentes filasseseparanentresi con enteropuntosycomas. Los tamaos de las submatrices deben de ser coherentes.2.6.3Direccionamiento de Vectores y Matrices a partir de VectoresLos elementos de un vectorxse pueden direccionar a partir de los de otro vector v. en este caso, x(v) equivale al vector x(v(1)),x(v(2)),Considrese el siguiente ejemplo:>> v=[1 3 4]v = 1 3 4>> x=rand(1,6)x =0.96490.15760.97060.95720.48540.8003>> x(v)ans =0.96490.97060.9572De forma anloga, los elementos de una matrizApueden direccionarse a partir de los elementos de dos vectores f y c. (ver siguiente ejemplo)xliii>> f=[2 4]; c=[1 2];>> A=magic(4)A =16 2 3 13 51110 8 9 76 12 41415 1>> A(f,c)ans = 511 414El siguiente ejemplo continuacin del anterior- permite comprobar como los elementos de una matriz se pueden direccionar con un solo ndice, considerando que las columnas de la matriz estn una a continuacin de otra formando un vector:>> f=[1 3 5 7];>> A(f), A(5), A(6)ans =16 9 2 7ans = 2ans =11Esta forma de extraer elementos de un vector y/o de una matriz tiene abundantes aplicaciones, por ejemplo la de modificar selectivamente esos elementos.xliv2.6.4Operador dos PuntosEste operador es muy importante en MATLAB y puede usarse de varias formas. Veamos algunas:Para empezar definiremos un vector x con el siguiente comando:>> x=1:10x = 1 2 3 4 5 6 7 8 910En cierta forma se puede decir que el operador (:) representa un rango, en este caso los nmeros enteros entre el 1 y el 10. Por defecto elincremento es 1,pero este operador puede tambin utilizarse con otros valores enteros y reales, positivos o negativos. En este caso elincremento se coloca entre el valor inferior y el valor superior, enlas formas quesemuestraa continuacin:>> x=1:2:10x = 1 3 5 7 9>> x=1:1.5:10x =1.00002.50004.00005.50007.00008.5000 10.0000>> x=10:-1:1x =10 9 8 7 6 5 4 3 2 1Puede verse que por defecto este operador produce vectores fila. Si se desea obtener un vector columnabasta con trasponer el resultado.El siguienteejemplo generauna tabladefunciones seno y coseno. >> x=[0.0:pi/50:2*pi]';>> y=sin(x); z=cos(x);xlv>> [x y z]ans = 0 01.00000.06280.06280.99800.12570.12530.99210.18850.18740.98230.25130.24870.9686...6.1575 -0.12530.99216.2204 -0.06280.99806.2832 -0.00001.0000El operador dos puntos (:) es an ms til y potente con matrices. A continuacin se va a definir una matriz A de tamao (6 x 6) y despus se realizarn diversas operaciones sobre ella con el operador (:).>> A=magic(6)A =35 1 6261924 332 721232531 9 2222720 8283317101530 534121416 43629131811Recurdese que MATLAB accede a los elementos de una matriz por medio de los ndices de fila y de columna encerrados entre parntesis y separados por una coma, por ejemplo:>>A(2,3)ans 7xlviEl siguientecomandoextraelos 4primeroselementosdela sexta fila>>A(6, 1:4)Ans4 36 29 13Los dos puntos aislados representan todos los elementos. Por ejemplo, el siguiente comando extrae todos los elementos de la tercera fila:>> A(3,:)ans =31 9 2222720Para acceder a la ultima fila o columna puede utilizar la palabra end, en lugar del nmero correspondiente:>> A(end,:)ans = 43629131811El siguiente comando extrae todos los elementosde las filas 3, 4 y 5:>> A(3:5,:)ans =31 9 2222720 8283317101530 534121416Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Por ejemplo, el siguiente comando extrae las filas 1 2 y 5:xlvii>> A([1 2 5],:)ans =35 1 6261924 332 721232530 534121416En los ejemplos anteriores se han extrado filas y no columnas por motivosdeespacioocupadopor el resultado, esevidente que todo lo que se dice para las filas es tambin cierto para las columnas y viceversa, basta con cambiar el orden de los ndices.El operador dos puntos puede utilizarse en amos lados del operador (=). Por ejemplo, acontinuacinsevaadefinir una matriz identidad B de tamao 6 x 6 y se van a reemplazar filas de Bpor filas deA. obsrvese que la siguiente secuencia de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de A>> B=eye(size(A));>> B([2,4,5],:)=A(1:3,:)B = 100 00035 16261924 001 000 3 32 721232531 92222720 000 001Se pueden realizar operaciones an ms complicadas, tales como la siguiente:>> B=eye(size(A));>> B(1:2,:)=[0 1;1 0]*B(1:2,:)B = 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0xlviii 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1Otro ejemplo en el que vemos la forma de invertir el orden de los elementos de un vector:>> x=rand(1,5)x =0.14190.42180.91570.79220.9595>> x=x(5:-1:1)x =0.95950.79220.91570.42180.1419Observemos que por haber utilizado parntesis en lugar de corchetes los valores generados por el operador (:) afectan a los ndices del vector y no al valor de sus elementosPara invertir elorden de las columnas de una matriz se puede hacer lo siguiente:>> A=magic(6)A =35 1 62619 24 332 72123 2531 9 22227 20 8283317101530 534121416 43629131811>> A(:,6:-1:1)ans =241926 6 1 35252321 732 3202722 2 9 311510173328 816141234 5 30xlix1118132936 4 Aunque hubiera sido mas fcil utilizar la funcin fliplr(A), que es especifica para ello.Finalmentehayquemencionar queA(:)representaunvector columna con las columnas de A una detrs de otra.2.6.5Matriz vaca A[ ]. Borrado de filas o columnasPara MATLAB una matriz definida sin ningn elemento entre los corchetes es una matriz que existe pero que esta vaca, o lo que es lo mismo que tiene dimensin cero. Considrese los siguientes ejemplos de aplicaciones de las matrices vacas:>> A=magic (3)A = 8 1 6 3 5 7 4 9 2>> B=[]B = []>> exist(B)ans = 0>> isempty(B)ans = 1>> A(:,3)=[]lA = 8 1 3 5 4 9Las funciones exist() e isempty() permiten checar si una variable existe y siestavaca.En elultimo ejemplo se ha eliminado la tercera columna de A asignndole la matriz vaca.2.6.6Definicin de vectores y Matrices a partir de un archivoMATLABacepta como entrada un archivonombre.mque contieneinstruccionesy/ofunciones. Dichoarchivosellama desde la lnea de comandos tecleando simplemente su nombre, sinlaextensin. Asuvez, unarchivopuedellamar aotros archivos.me incluso puede llamarse as mismo (funciones recursivas). Las variables definidas dentro de un archivo de comandos que se ejecuta desde la lnea de comandos son variables del espacio de trabajo base, esto es, pueden ser accedidas desde fuera de dicho archivo; no sucede lo mismo si el archivo .m corresponde a una funcin. Si un archivo de comandos sellamadesdeunafuncin, lasvariablesquese crean pertenecen al espacio de trabajo de dicha funcin.Como ejemplo se puede crear un archivo llamado unidad.m que construya una matriz identidad de tamao 3 x 3 llamada u33 en un directorio llamado c:\matlab.Este archivo deber contener la lnea siguiente:U33=eye(3)Desde MATLABllmese al comando unidad y obsrvese el resultado. Entre otras razones es muy importante utilizar archivos de comandos para poder utilizar elDebuggery para evitar teclear muchas veces los mismos datos, sentencias o expresiones.2.7Operadores relacionales.El lenguajedeprogramacindeMATLABdisponedelossiguientes operadores relacionales:li< menor que>mayor que= mayor o igual que== igual que~= diferente queObsrvese que, salvo el ltimo de ellos, coinciden con los correspondientes operadores relacionales del lenguaje C. sin embargo, sta es una coincidencia mas bien formal.En MATLAB los operadores relacionalespuedenaplicarseavectoresymatrices, yesohaceque tengan un significado especial.Al igual que en otros lenguajes de programacin, si una comparacin se cumpleel resultadoes1(true), mientrasquesi nosecumplees0 (false), recprocamente, cualquier valor distinto de cero es considerado como truey el cero equivale a false. La diferencia con C est en que cuando los operadores relacionales de MATLABse aplican a dos matrices o vectores del mismo tamao, la comparacin se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del mismotamao, querecogeel resultadodecadacomparacinentre elementos. Consideremos el siguienteejemplocomo ilustracindelo que se acaba de decir:>> A=[1 2;0 3]; B=[4 2;1 5];>> A==Bans = 0 1 0 0>> A~=Bans = 1 01 12.8Operadores Lgicos.Los operadores lgicos de MATLAB son los siguientes:lii& And(funcinequivalente: and(A,B)). Seevalansiempre ambos operadores, y el resultado es true solo si ambos son true.&& And breve: si el primer operador es false ya no se evala el segundo, puesel resultadofinal yanopuedesermsque false.| Or (funcin equivalente: or(A,B)). Se evalan siempre ambos operadores, y el resultado es false solo si ambos son false.|| Or breve:siel primer operandoestrue ya no se evala el segundo, pues el resultado final no puede ser mas que true~ negacin lgica(funcin equivalente: not(A)).xor(A,B) Realiza or exclusivo, es decir, devuelve 0 en elcaso en que ambos sean 1 o ambos sean 0.Losoperadoreslgicossecombinanconlosrelacionalesparapoder comprobar el cumplimiento de condiciones mltiples.Los operadores lgicos breves se utilizan para simplificar las operaciones de comparacin evitando operacionesinnecesarias, pero tambinparaevitar ciertos errores queseproduciranencasode evaluarincondicionalmenteelsegundo argumento.Consideremos por ejemplo la siguiente sentencia que evita una divisin por cero:>> r=(b~=0) && (a/b>0)2.9 Funciones de Librera.MATLAB tiene un gran nmero de funciones incorporadas. Algunas son funciones intrnsecas, estoes, funciones incorporadas enel propio cdigoejecutabledel programa. Estas funciones songeneralmente rpidas y eficientes. Existen adems funciones definidas en archivos .m y .mex que vienen con el propio programa o que han sido aportadas por usuarios del mismo. Estas funciones extienden en gran manera las posibilidades del programa.MATLAB dispone tambin de archivos.pque son archivos pre compilados con la funcin pcode.MATLAB tiene diversos tipos de funciones. A continuacin se enumeran los tipos de funciones ms importantes, clasificadas segn su finalidad.1. Funciones matemticas elementales.2. Funciones especiales.3. Funciones matriciales elementales.4. Funciones matriciales especiales.liii5. Funciones para la descomposicin de matrices.6. Funciones para anlisis estadstico de datos.7. Funciones para anlisis de polinomios.8. Funciones para integracin de ecuaciones y diferenciaciones ordinarias.9. Resolucin de ecuaciones no-lineales y optimizacin.10. Funciones para procesamiento de seales.Acontinuacin se enumeran algunasde las caractersticasgenerales de todas las funciones de MATLAB Los argumentos actuales de estas funciones pueden ser expresiones y tambin llamadas a otras funciones Las funciones de MATLAB nunca devuelven modificadas las variables que pasan como argumentos, a no ser que se incluyan tambin como valores de retorno. MATLAB admite valores de retorno matriciales mltiples. Por ejemplo, en el comando:>>[V,D]=eig(A)La funcin eig(A) calcula los valores y vectores propios de la matriz cuadradaA. los vectores propios se devuelven como columnas de matriz V, mientras que los valores propios con los elementos de la matriz diagonal D. en los ejemplos siguientes:}>>[xmax, imax]=max(x)>>xmax=max(x)Puede verse que la misma function max() puede ser llamadarecogiendodosvaloresderetorno(el mximo elemento de un vector y la posicin que ocupa) o un valor de retorno (el mximo elemento). Las operaciones de suma y/o resta de una matriz con un escalar consiste en sumar y/o restar el escalar a todos los elementos de la matriz. Recurdese que tecleando help nombre_funcion se obtiene de inmediato informacin detallada sobre la funcin de ese nombre2.10Funciones Matemticas elementales que operan a modo de escalar.livEstas funciones, que comprenden las funciones matemticas trascendentalesyotrasfuncionesbsicas, cuandoseaplicanauna matriz actan sobre cada elemento de la matriz como si se tratase de unescalar. Por tanto, seaplicandelamismaformaaescalaresy matrices. Algunas de las funciones de este grupo son las siguientes:sin(x) Seno.cos(x) Coseno.tan(x) Tangente.asin(x) Arco seno.acos(x) Arco coseno.atan(x) Arco tangente (devuelve un ngulo entre /2 y /2).atan2(x) Arco tangente (devuelve un ngulo entre- y ); se le pasan dos argumentos proporcionales al seno y al cosenosinh(x) Seno hiperblico.cosh(x) Coseno hiperblico.tanh(x) Tangente hiperblico.asinh(x) Arco seno hiperblico.acosh(x) Arco coseno hiperblico.ata(nh(x) Arco tangente hiperblico.log(x) Logaritmo natural.log10(x) Logaritmo decimal.exp(x) Funcin exponencial.sqrt(x) Raz cuadrada.sign(x) Devuelve -1 si 0. Aplicada a un numero complejo, devuelve un vector unitario en la misma direccin.rem(x,y) Resto de la divisin (dos argumentos que no tienen que ser enteros).mod(x,y) Similar a rem.round(x) Redondeo hacia el entero ms prximo.fix(x) Redondea hacia el entero ms prximo a cero.floor(x) Valor entero ms prximo hacia el infinito negativo.ceil(x) Valor entero ms prximo hacia el infinito positivo.gcd(x) Mximo comn divisor.lcm(x) Mnimo comn mltiplo.real(x) Partes reales.imag(x) Partes imaginarias.abs(x) Valor absoluto.angle(x) ngulos de fase.2.10.1Funciones que actan sobre VectoresLassiguientesfuncionessoloactansobrevectores(nosobre matrices ni sobre escalares)lv[xm, im] Mximo elemento de un vector. Devuelve el valor mximo xm y la posicin que ocupa im.min(x) Mnimoelementodeunvector, devuelveel valor mas pequeo y la posicin 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 delresultado es una suma de elementos del original).mean(x) Valor promedio de los elementos de un vector.std(x) Desviacin tpica de los elementos de un vector.prod(x) Producto de los elementos de un vector.cumprod(x)Devuelve el vector producto acumulativo de los elementos deun vector.[y,i]=sort(x) Ordenacindemenor amayor deloselementosdeun vector x. devuelve el vector ordenado y, y un vector i con las posiciones iniciales en x de los elementos en el vector ordenado y.En realidad estas funciones se pueden aplicar tambin a matrices. Peroenestecasoseaplicanpor separadoacada columnadelamatriz, dandocomovalor deretornounvector resultadodeaplicar lafuncinacadacolumnadelamatriz considerada como vector. Si estas funciones se quieren aplicar a lasfilasde la matriz basta aplicardichasfunciones ala matriz traspuesta.2.10.2Funciones que actan sobreMatricesB=A Calcula la traspuesta conjugada de la matriz A.B=A. Calcula la traspuesta (sin conjugar) de la matriz A.v=poly(A) Devuelve un vector v con los coeficientes del polinomio Caracterstico de la matriz cuadrada A.t=trace(A) Devuelve la traza t (suma de los elementos de la Diagonal) de una matrizcuadrada A.[m,n]=size(A) Devuelve el numero de filas m y de columnas n de una matriz rectangular A.n=size(A) Devuelve el tamao de una matriz cuadrada A.nf=size(A,1) Devuelve el numero de filas de A.nc=size(A,2) Devuelve el numero de columnas de A.lvi2.10.3Funciones Matriciales Especiales.Las funciones exp(), sqrt(), y log() se aplican elemento a elementoalasmatricesovectoresqueselespasancomo argumentos. Existen otras funciones similares que tienen tambin sentido cuando se aplican a una matriz como una nica entidad. Estasfuncionessonlassiguientes(sedistinguenpor que llevan una m adicional en el nombre):expm(A) Si A=XDX, expm(A)=X*diag(exp(diag(D)))*xsqrtm(A) devuelve una matriz que multiplicada por si misma da la matriz A.logm() Es la funcin reciproca de expm(A).Aunquenoperteneceaestafamiliadefunciones, sepuede considerarqueel operadorpotencia(^) estemparentadocon ellas. As es posible decir que:A^n Esta definida siA es cuadrada y n es un numero real. Si n es entera, el resultado se calcula por multiplicaciones sucesivas. Si n es real, el resultado se calcula como: [ ] ) ( , ' * . * A eig D X siendo X D X An n .2.10.4 Funciones de Factorizacin y/o Descomposicin MatricialAsuvez estegrupodefuncionessepuedesubdividir en4 subgrupos:- Funciones basadas en la factorizacin triangular (eliminacin de Gauss):[L,U] DescomposicindeCrout (A=LU) deunamatrizLes una permutacin de una matriz triangular inferior (dicha permutacin es consecuencia del pivotamiento por columnas utilizado en la factorizacin).B=inv(A) Calcula la inversa de A. equivale a B=inv(U)*inv(L).d=det(A) Devuelveel determinanteddelamatrizcuadradaA. equivale a d=det(L)*det(U).E=rref(A) Reduccin de forma de escaln (mediante la eliminacin de Gauss con pivotamiento por columnas, haciendo ceros tambinencimadelos pivotes) deunamatriz rectangular A.[E,xc]=rref(A) Reduccin a forma de escaln con un vector xc que da informacin sobre una posible base del espacio de lviicolumnas de A.U=chol(A) Descomposicin de Cholesky de matriz simtrica y positivo-definida. Soloseutilizaladiagonal ylaparte triangular superior deA.el resultado es una matriz triangular superior tal que A=U*U.c=rcond(A) Devuelve unaestimacin delreciprocode la condicin numricadelamatrizAbasadaenlanorma-1. Si el resultado es prximo a 1 la matriz est condicionada; si es prximo a 0 no lo est.- Funciones basadas en el calculo de valores y vectores propios[X,D]=eig(A) Valorespropios(diagonal deD) yvectorespropios (columnas de X) de una matriz cuadrada A. con frecuencia el resultado es complejo (siAno es simtrica).[X,D]=eig(A,B) Valorespropios(diagonal deD) yvectorespropios (columnasdeX) dedosmatricescuadradasAyB (Ax= Bx). Losvectorespropiosestnnormalizados de modo que X*B*X=I. cuando A es simtrica y B es simtrica y definida positiva se puede utilizar [X,D]=eig(A,B,chol).- Funciones basadas en la descomposicin QR[Q,R]=qr(A) DescomposicinQRdeunamatriz rectangular. Se utiliza para sistemas con ms ecuaciones que incgnitas.Qesunamatrizortogonal, esdecir, es cuadrada aunque A no lo sea (m>n). no se garantiza que los elementos diagonales de Rsean positivos, lo cual crea dificultades en algunos problemas (esa factorizacin no coincide con la de Gram-Schmidt).[Q,R]=qr(A,0) Similar a la anterior, pero Q del mismo tamao que A, es decir, sin completar una base orto normalcuando m>n.[Q,R,E]=qr(A) Factorizacin QRcon pivotamiento por columnas. La matriz E se determina de modo que los elementos de abs(diag( R )) son decrecientes.B=null(A) Devuelveunabaseortonormal del subespacionulo (kernel, o conjunto de vectores x tales que Ax=0) de la matriz rectangularA, calculada mediante la descomposicin de valores singulares. Las columnas de B son orto normales: B*B=I.B=null(A,r) Devuelve una base del subespacio nulo deA calculada a partir de la forma de escaln reducida. Las columnasdeBnosonortonormalesyseobtienen lviiialternativamente dando valor cero a todas las variables libres excepto a una a la que se da el valor de la unidad.Q=orth(A) LascolumnasdeQsonunabaseortonormal del espacio de columnas de A. el numero de columnas de Q es el rango de A.- Funciones basadas en la descomposicin de valores singulares[U,D,V]=svd(A) Descomposicin de valor singular de una matriz rectangular (A=U*D*V).UyVson matrices orto normales. D es diagonal m x n y contiene los valores singulares.B=pinv(A) Calcula la pseudo-inversa de una matriz rectangular A.r=rank(A) Calcula el rango r de una matriz rectangular.nor=norm(A) Calculalanorma-2deunamatriz(el mayor valor singular).nor=norm(A,2) Lo mismo que la anterior.nor=normest(A) calcula de forma aproximada la norma-2 con menos operaciones aritmticas que la funcin norm.c=cond(A) Condicin numrica sub-2 de la matriz A. es el cociente entre el mximo y el mnimo valor singular. Lacondicinnumricadaunaideadeloserrores que se obtienen al resolver un sistema de ecuacioneslinealescondichamatriz: sulogaritmo indica el numero de cifras significativas que se pierden. Si A es grande el calculo es laborioso.c=condest(A) Estimacin por defecto de la condicin numrica de Acon la norma-1. Esta funcin es mucho mas econmica que cond.- Calculo del rango, normas y condicin numrica:Existenvariasformasderealizar estosclculos, condistintos niveles de esfuerzo de clculo y de precisin en el resultado.El rango se calcula implcitamente (sin que el usuario lo pida) al ejecutar lasfuncionesrref(A), orth(A), null(A) ypinv(A). Con rref(A) el rango se calcula como el nmero de filas diferentes de cero; conorth(A) y null(A)- basadas ambas en la descomposicinQR- el rangoesel nmerodecolumnasdel resultado (o n menos el numero de columnas del resultado). Con pinv(A) se utiliza la descomposicin de valor singular, que es el lixmtodomsfiableymscaroentiempodeCPU. Lafuncin rank(A) est basada en pinv(A).Normas de matrices:norm(A) Norma-2, es decir, el mximo valor singular deA, max(svd(A)).normest(A) Calculaunaestimacinoaproximacindelanorma-2. til para matrices grandes en las que norm(A) necesita demasiado tiempo.norm(A,2) Lo mismo que norm(A).norm(A,1) Norma-1deA, mximasumadevaloresabsolutospor columnas, es decir: max(sum(abs(A))).norm(A,inf) Norma-inf. De A, mxima suma de valores absolutos por filas, es decir: max(sum(abs(A))).Norma de vectores:norm(x,p) Norma-p, es decir sum(abs(x)^p)^(1/p).norm(x) Norma-2 o norma euclidea; equivale al modulo o norm(x,2).norm(x,inf) Norma-inf, es decir max(abs(x)).norm(x,1) Norma-1, es decir sum(abs(x)).2.11 Ms sobre operadores relacionales con vectores y matrices.Cuando alguno de los operadores relacionales vistos previamente (, =, ==, ~=) actaentredos matrices(vectores) del mismo tamao, el resultadoesotramatriz(vector) deesemismotamao conteniendo unos y ceros, segn los resultados de cada comparacin entre elementos hayan sido true o false, respectivamente.Por ejemplo, supngase que se define una matriz magic A de tamao 3 x3yacontinuacinseformaunamatrizbinariaMbasadaenla condicin de que los elementos de A sean mayores que 4 (MATLAB convierte este cuatro en una matriz de cuatros de modo automtico).Obsrvese con atencin.>> A=magic(3)A = 8 1 6lx 3 5 7 4 9 2>> M=A>4M = 1 0 1 0 1 1 0 1 0De ordinario, las matrices binarias que se obtienen de la aplicacin de los operadores relacionales no se almacenan en memoria ni se asignan a variables, sino que se procesan sobre la marcha. MATLAB dispone de varias funciones para ello. Recurdese que cualquier valor distinto de cero equivale a true, mientras que un valor igual a cero equivale a false. Algunas de estas funciones son:any(x) Funcinvectorial; chequeasi algunodeloselementosdel vector x cumple una de terminada condicin (en este caso ser distinto de cero). Devuelve un uno o un cero.any(A) Seaplicapor separadoacadacolumnadelamatrizA. el resultado es un vector de unos y ceros.all(x) Funcin vectorial; chequea si todos los elementos del vector x cumplen una condicin. Devuelve un uno o un cero.all(A) Seaplicapor separadoacadacolumnadelamatrizA. el resultado es un vector de unos y ceros.find(x) Busca ndices correspondientes a elementos de vectores que cumplen una determinada condicin. El resultado es un vector con los ndices de los elementos que cumplen la condicin.find(A) Cuando esta funcin se aplica a una matriz la considera como un vector con una columna detrs de otra, de la 1 a la ultima.A continuacin se presentan algunos ejemplos de utilizacin de estas funciones.A=magic(3)A = 8 1 6 3 5 7 4 9 2>> m=find(A>4)lxim = 1 5 6 7 8Ahora se van a sustituir los elementos que cumplen la condicin anterior por los valores de 10. Obsrvese como se hace y el resultado que se obtiene:A(m)=10*ones(size(m))A =10 110 31010 410 2Donde ha sido necesario convertir el 10 en un vector del mismo tamao que m. para checar si hay algn elemento de un determinado valor, por ejemplo 3, puede hacerse lo siguiente:>> any(A==3)ans = 1 0 0any(ans)ans = 1Mientras que para comprobar que todos los elementos deAson mayores que cero:>>all(all(A))ans=1En este caso no ha hecho falta el operador relacional por que cualquier elemento distinto de cero equivale a true.lxiiLa funcin isequal (A,B)devuelve uno si las matrices son idnticas y cero si no lo son.2.12 Otras funciones mas que actan sobre vectores y matrices.Las siguientes funciones puedenactuar sobrevectores y matrices, sirven para checar ciertas condiciones:exist(var) Comprueba si el nombrevar existe como variable, funcin, directorio, archivo, etc.isnan(A) Checa si hay valores NaN en A, devolviendo una matriz de unos y ceros del mismo tamao que AiIsinf(A) Checa si hay valores inf en A, devolviendo una matriz de unos y ceros del mismo tamao que A.isfinite(A) Checa si los valores de A son finitos.isempty(A) Checasi unvector omatrizestvacootienetamao nulo.ischar() Me dice si una variable es una cadena de caracteres (string).isglobal() Dice si una matriz es global.issparse() Checasi unamatrizesdispersa(esdecir conungran numero de elementos cero).A continuacin se presentan algunos ejemplos de uso de estas funciones en combinacin con otras vistas previamente. Se define un vector X con NaN, que se elimina en la forma:>> x=[1 2 3 40/0 6]x = 1 2 3 4 NaN 6>> i=find(isnan(x))i = 5>> x=x(find(~isnan(x)))x = 1 2 3 4 6lxiiiOtras posibles formas de eliminarlo sera las siguientes:>> x=x(~isnan(x))x = 1 2 3 4 6>> x(isnan(x))=[]x = 1 2 3 4 6Lasiguientesentenciaeliminalasfilasdeunamatrizquecontienen algn NaN:>> A(any(isnan(A)'),:)=[]Graficos en MATLAB (2D y 3D) 3.1IntroduccinA estas alturas, despus de ver como funciona este programa, a nadie le puede resultar extrao que losgrficos 2-Dde MATLABestn fundamentalmente orientados a la representacin grfica de vectores y matrices. En el caso ms sencillo los argumentos bsicos de la funcin plot() van a ser vectores. Cuando una matriz aparezca como argumento, se considerar como un conjunto de vectores columna (en algunos casos tambin como vector fila).MATLAB utiliza un tipo especial de ventanas para realizar la operacionesgrficas. Ciertoscomandosabrenunaventananuevay otros dibujan sobre la ventana activa, bien sustituyendo lo que hubiera lxiv3en ella, o bien aadiendo nuevos elementos grficos a un dibujo anterior. Todo esto se ver con ms detalle en las siguientes secciones.3.2 Funciones grficas 2D elementalesMATLAB dispone de cinco funciones bsicas para creargrficos 2-D. estas funciones se diferencian principalmente porel tipo de escala que utilizan en los ejes de abscisas y de ordenadas. Estas cinco funciones son las siguientes:plot() Crea un grfico a partir de vectores y/o columnas de matrices, con escalas lineales sobre ambos ejes.plotyy() Dibujados funciones con dosescalas diferentes para las ordenadas, unaaladerechayotraalaizquierdadela figura.loglog() dem con escala logartmica en ambos ejes.semilogx()dem con escala lineal en el eje de ordenadas y logartmica en el eje de abscisas.semilogy()dem con escala lineal en el eje de abscisas y logartmica en el eje de ordenadas.En los sucesivo se har referencia casi exclusiva a la primera de estas funciones (plot). Las dems se pueden utilizar de un modo similar.Existen adems otras funciones orientadas a aadir ttulos al grfico, a a cada unode los ejes, a dibujar una cuadricula auxiliar,a introducir texto, etc. Estas funciones son las siguientes:title(titulo) Aade un titulo al dibujo.xlabel(x) Aade una etiqueta al eje de las abscisas. Conxlabel off desaparece.Ylabel(y) Aade una etiqueta al eje de las ordenadas. Con ylabel off desaparece.text(x,y,texto)Introducetexto en el lugar especificado por las coordenadas x e y. six e y son vectores, eltexto se repite por cada par de elementos. Si el texto es tambinunvector decadenas decaracteres dela mismadimensin, cadaelementoseescribeenlas coordenadas correspondientes.gtext(texto) Introducetexto con ayuda delratn: elcursor cambia de forma y se espera un click para introducir el texto en esa posicin.legend() Define rtulos para las distintas lneas o ejes utilizados en la figura. grid Activala inclusin de una cuadricula en el dibujo. Con grid off desaparece la cuadricula.lxvBorrar texto ( u otros elementos grficos) es un poco mas complicado; de hecho hay que preverlo de antemano. Para poder hacerlo hay que recuperar previamente el valor de retorno del comando con el cual se ha creado. Despus hay que llamar a la funcin delete con ese valor como argumento.Considerese el siguiente ejemplo:>> v=text(1,.0,'seno')v =9.7656e-004Esto crea la figura 3.1.Figura 3.1.>> delete (v)Esta accin anterior borra la figura 3.1.Los dos grupos de funciones anteriores no actan de la misma manera, As la funcin plot dibuja una nueva figura en la ventana activa (en todo momento MATLAB tiene una ventana activa de entre todas las ventanas grficas abiertas), o abre una nueva si no lo esta, sustituyendocualquier cosaqueestuvieradibujadasobreella. Para verlo, se comenzar creando un par de vectores x e y con los que se va a trabajar:>> x=[-10:0.2:10];lxvi>> y=sin(x);Ahora se deben ejecutar los comandos siguientes (se comienza cerrando la ventana activa, para que al crear la ventana nueva aparezca en primer plano):>> close%se cierra la ventana grfica activa>> grid % se crea una ventana con una cuadricula>> plot(x,y)% se dibuja la funcin seno borrando la cuadriculaFigura 3.2.grfica de la funcin seno(x).Se puede observar la diferencia con la secuencia siguiente:>> close>> plot(x,y)>> gridFigura 3.3. funcin seno con cuadricula.lxviiEnel primer casoMATLABhacreadolacuadriculaenunaventana nueva y luego la ha borrado al ejecutar la funcin plot().En el segundo caso, primero ha dibujado la funcin y luego ha aadido la cuadricula. Esto es as por que hay funciones como plot() que por defecto crean unanueva ventana grafica, y otras funciones como grid que se aplican alaventanaactivamodificndola, ysolocreanunaventananueva cuando no existe ninguna ya creada. 3.2.1Funcin plot()Esta es la funcin clave de todos los grficos 2-D en MATLAB. Ya que se ha mencionado que el elemento bsico de los grficos bidimensionales es el vector. Se utilizan tambin cadenas de 1,2 o 3 caracteres para indicar colores y tipos de lnea. La funcin plot(), en sus diversas variantes, no hace otra coas que dibujar vectores. Un ejemplo muy sencillo de esta funcin, en el quese le pasa un nico vector como argumento, es el siguiente:>> x=[1 3 2 4 5 3]x = 1 3 2 4 5 3>> plot(x)Figura 3.4grafica de un vector.El resultadodeestecomandoesqueseabreunaventana mostrando el grafico de la figura anterior. Por defecto, los lxviiidistintos puntos del graficoseunenconunalneacontinua. Tambin por defecto, el color que se utiliza para la primera lnea es azul.Cuando a la funcin plot() se le pasa un nico vector real como argumento, dicha funcin dibuja en ordenadas el valor de los n elementos del vector frente a los ndices 1,2,,n del mismo en abscisas. En la pantalla se puede aprecias que MATLAB utiliza por defecto el color blanco para el fondo de la pantalla y otros colores mas obscuros para los ejes y las graficas.Una segunda forma de utilizar la funcin plot() es con dos vectores como argumentos. En este caso los elementos del segundo vector se presentan en ordenadas frente a los valores del primero, que se presentan en abscisas; veamos por ejemplo como se puede dibujar un cuadriltero de esta forma (obsrvese que para dibujar un polgono cerrado, el ltimo punto debe coincidir con el primero):>> x=[1 6 5 2 1];>> y=[1 0 4 3 1];>> plot(x,y)Figura 3.5dibujo de un cuadriltero.La funcin plot() permite tambin dibujar mltiples curvas introduciendo varias parejas de vectores como argumentos. En estecaso, cadaunodelossegundosvectoressedibujaen ordenadas como funcin de los valores delprimer vector de la pareja, queserepresentanenlasabscisas. Si el usuariono decideotracosa, paralassucesivaslneasseutilizancolores que son permutaciones cclicas del azul, verde, rojo, cian, lxixmagenta, amarillo y negro. Observemos como se dibuja el seno y el coseno en el siguiente ejemplo:>> x=0:pi/25:6*pi;>> y=sin(x);>> z=cos(x);>> plot(x,y,x,z)Figura 3.6seno y coseno juntas.3.2.2Comando subplotUna ventana grafica se puede dividir enmparticiones horizontales ynparticiones verticales, con el objeto de representar mltiples grficos en ella. Cada una de estas subventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda la ventana grafica. La forma general de este comando es:>>subplot(m,n,i)Donde m y n son el nmero de subdivisiones en filas y columnas, e i es la subdivisin que se convierte en activa. Las subdivisiones se numeran consecutivamente empezando por las de la primera fila, siguiendo por las de la segunda, y as sucesivamente. Por ejemplo la siguiente secuencia de comandos genera cuatro grficosen la misma ventana:>> y=sin(x);>> z=cos(x);>> w=exp(-x*.1).*y;>> v=y.*z;lxx>> 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)Figura 3.7varias ventanas grficas.3.2.3 Control de los ejes: Funcin axis()Tambin en este punto MATLAB tiene sus opciones por defecto, que en algunas ocasiones puede interesar cambiar. El comando bsico es el comando axis. Por defecto, 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 automtico. Para definir de modo explicito los valores mximo y mnimo segn cada eje, se u