Intro Matlab

download Intro Matlab

of 118

Transcript of Intro Matlab

INTRODUCCION A MATLABVictoriano Carmona Centeno y Julio R. Fern andez GarcaINTRODUCCION A MATLABc Victoriano Carmona Centeno yJulio R. Fern andez GarcaProfesores del Departamento de Matem atica Aplicada IIEscuela Universitaria PolitecnicaUniversidad de SevillaISBN 84-8264-257-XDeposito Legal SE-233-98Imprime Librera Papelera PanellaC/Virgen de Africa 8, 41011 SevillaFebrero de 1998MATLAB es una marca registrada deThe Math Works, Inc.INTRODUCCIONHace ya bastante tiempo que el ordenador es utilizado en el c alculo cientco y su usocada vez se impone con m as fuerza tanto en el terreno de la investigaci on como pedag ogico-didactico. Es por ello, que hayan salido al mercado distintos programas en los que aparecenimplementados algunos de los metodos que utilizamos da a da en la resoluci on de nuestrosproblemas.Uno de estos programas es MATLAB (MATrix LABoratory, Laboratorio de Matrices)que procede de los proyectos LINPACK y EISPACK y que ha evolucionado durante variosa nos hasta su forma actual. MATLAB destaca por su facil aprendizaje, f acil utilizacion, granpotencia y pocas exigencias de equipamiento inform atico. Naturalmente, esta buena relaci oncalidad-precio hace que sea uno de los programas de software matem atico m as extendido.La potencia de MATLAB se maniesta por dos caractersticas fundamentales: laconjugacion entre programaci on cl asica y funcional y la gran variedad de problemas que escapaz de resolver (Sistemas de Ecuaciones, Optimizacion, Ecuaciones diferenciales...). Sufacil uso y rapido aprendizaje estan ntimamente relacionados con su car acter funcional ycon el ente primordial o elemental en MATLAB: La matriz. De esta forma, los datos enMATLAB son, casi exclusivamente, matrices y la resoluci on de un determinado problema selleva a cabo aplicando a las matrices introducidas las funciones que MATLAB dispone (oque el usuario ha denido previamente).MATLAB se presenta entonces como una herramienta ecaz y exible en el C alculoNumerico (sobre todo en el Calculo Numerico Matricial) con excelente posibilidades gr acas,que ayudan al profesor y al alumno tanto en sus trabajos docentes y de estudio como en sulabor de investigacion.Estas paginas no pretenden agotar, en absoluto, todas las posibilidades que MATLABofrece. Aquellos que deseen profundizar m as en este tema pueden hacerlo consultando algunode los excelentes manuales de la bibliografa y las referencias que en ellos se citan.En ellahemos incluido libros de ALGEBRA LINEAL para aquellos lectores que necesiten repasaralgunos de los conceptos que se van desarrollando.El presente manual fue utilizado en 1997 como texto de referencia en el Curso deIntroduccion a Matlab, celebrado en el Centro Inform atico Cientco de Andaluca(C.I.C.A.) del 7 al 14 de Abril. Este curso, que fue dirigido por los autores, estuvo organizadopor el Vicerrectorado de Relaciones Institucionales y Extension Cultural de la Universidadde Sevilla y fue homologado por la Consejera de Educacion y Ciencia.Por ultimo deseamos hacer constar la colaboracion del profesor D. Francisco FelixLara Martn en la elaboraci on de unos apuntes preliminares a esta obra.LOS AUTORESINTRODUCCION A MATLAB Victoriano Carmona Centeno y Julio R. Fernandez GarcaIndice General1 Elementos basicos 31.1 Formatos de salida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.2 Matrices por bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.3 Operaciones con Matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.4 Operaciones elemento a elemento . . . . . . . . . . . . . . . . . . . . . . . . . 232 Tipos especiales de matrices. Construcciones. 252.1 Matrices especiales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2 Redeniciones y construcciones a partir de la diagonal . . . . . . . . . . . . . 263 Sistemas de Ecuaciones Lineales y descomposiciones 293.1 Resolucion de S.E.L. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.1.1 Sistemas cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.1.2 Sistemas superdeterminados. Mnimos cuadrados . . . . . . . . . . . . 303.1.3 Tiempo de c alculo y n umero de operaciones . . . . . . . . . . . . . . . 313.2 Descomposiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2.1 Factorizaci on LU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2.2 Descomposicion de Cholesky . . . . . . . . . . . . . . . . . . . . . . . 343.2.3 Factorizacion QR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.4 Ortonormalizaci on y espacio nulo . . . . . . . . . . . . . . . . . . . . . 373.3 Normas y n umero de condicion . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.1 Normas vectoriales y matriciales . . . . . . . . . . . . . . . . . . . . . 393.3.2 N umero de condici on y rango . . . . . . . . . . . . . . . . . . . . . . . 394 Autovalores y polinomios 434.1 Autovalores y autovectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2 Valores singulares y pseudoinversa . . . . . . . . . . . . . . . . . . . . . . . . 454.3 Tratamiento de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.3.1 Polinomio caracterstico de una matriz cuadrada . . . . . . . . . . . . 474.3.2 Operaciones con polinomios . . . . . . . . . . . . . . . . . . . . . . . . 484.3.3 Races de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.3.4 Aproximaci on por polinomios en el sentido de los mnimos cuadrados . 5212INDICE GENERAL4.3.5 La orden polyvalm y semejantes . . . . . . . . . . . . . . . . . . . . . 545 Posibilidades gracas 575.1 Gracos en el plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.1.1 Poligonales y curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.1.2 Curvas en polares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.1.3 Curvas en parametricas . . . . . . . . . . . . . . . . . . . . . . . . . . 615.1.4 Histogramas y diagramas de barras . . . . . . . . . . . . . . . . . . . . 635.2 Curvas en el espacio y supercies . . . . . . . . . . . . . . . . . . . . . . . . . 635.2.1 Curvas en parametricas . . . . . . . . . . . . . . . . . . . . . . . . . . 635.2.2 Supercies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.2.3 Curvas de nivel y vector gradiente . . . . . . . . . . . . . . . . . . . . 666 Funciones y programas en Matlab. MFicheros 736.1 Instrucciones en Matlab: input, if, error, while, break, pause, for . . . . . 736.2 Denicion de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817 Aspectos de analisis numerico 847.1 Resoluci on de Ecuaciones y Sistemas no Lineales . . . . . . . . . . . . . . . . 847.2 Integraci on numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857.3 Optimizacion en una y varias variables . . . . . . . . . . . . . . . . . . . . . . 877.4 Resoluci on de Ecuaciones Diferenciales Ordinarias . . . . . . . . . . . . . . . 878 Consejos practicos 918.1 Las ordenes help, lookfor y demo . . . . . . . . . . . . . . . . . . . . . . . 918.2 Informaci on sobre variables declaradas. Instrucciones para guardar y salvarvariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.3 Relaci on con el sistema operativo. El comando diary . . . . . . . . . . . . . 939 Resumen de los comandos y funciones mas utilizados 9510 Relacion de ejercicios 102Captulo 1Elementos basicosEn esta primera secci on explicaremos aquello que es necesario conocer para comenzar autilizar MATLAB. En particular describiremos:1. La introducci on de matrices y sus elementos, declaraciones y variables MATLAB.2. C omo obtener informacion, terminar y salvar variables declaradas en una sesion.3. N umeros y expresiones aritmeticas.4. Utilizaci on de la ayuda.5. Funciones de MATLAB.LA INTRODUCCION DE MATRICESMATLAB trabaja esencialmente con matrices rectangulares cuyos elementos pueden serreales, complejos y/o cadenas de caracteres. En ocasiones consideraremos matrices de orden1 por 1, que son escalares, y matrices con una la o una columna, que representaran vectores.En MATLAB podemos introducir las matrices de varias formas: Introduciendo explcitamente una lista de elementos. Generando matrices usando variables y funciones incorporadas. Creando matrices en Mcheros. Leyendo matrices desde cheros de datos externos.El lenguaje MATLAB no contiene ninguna declaracion de dimension u otro tipo dedeclaraciones, como sucede en algunos lenguajes de programaci on. MATLAB asigna yalmacena automaticamente, dependiendo de las caractersticas de cada ordenador.El modo mas facil de introducir matrices peque nas es introducir explcitamente sus ele-mentos, siguiendo las convenciones: Separar explcitamente la lista de elementos con espacios34 CAPITULO 1. ELEMENTOS BASICOSen blanco o comas, encerrar los elementos entre corchetes ([ ]) y usar ; para indicar el n decada la.Por ejemplo, introduciendo la asignacion>>A=[1 2 3;4 5 6;7 8 9]resulta la salidaA =1 2 34 5 67 8 9MATLAB guarda la matriz para poder usarla posteriormente.Las matrices tambien pueden introducirse por lneas, reemplazando el ; por un retornode carro. Por ejemplo, si tecleamos>>A=[1 2 34 5 67 8 9]obtenemos la misma salidaA =1 2 34 5 67 8 9Podemos introducir las matrices desde discos, utilizando cheros.m. As si un chero sellama pepe.m y contiene las siguientes lneas de textoA=[1 2 34 5 67 8 9]entonces, la instrucci on pepe lee el chero pepe.m y genera la matriz A:>>pepeA =1 2 34 5 67 8 9El comando load y la funcion fread permiten leer matrices generadas durante sesionesanteriores, importar matrices de otros programas o exportarlas. Pero este es un aspecto queser a tratado mas adelante.Las matrices pueden incluir algunas expresiones MATLAB; por ejemplo al teclear5>>x=[-1.3 sqrt(3) (1+2+3)*4/5]resulta>>x=-1.3000 1.7321 4.8000Los coecientes de la matriz pueden referenciarse individualmente utilizandondices encer-rados dentro de un parentesis. Si continuamos con el ejemplo anterior, la asignaci on>>x(5)= abs(x(1))produce>>x=-1.3000 1.7321 4.8000 0 1.3000Observese que el tama no de x aumenta automaticamente, acomoda al nuevo elementoque hemos denido y da el valor cero a los elementos que no se han denido.Si tecleamos>>r=[10 11 12];no obtenemos salida alguna; ello se debe a que hemos a nadido el punto y coma al nal. Noobstante MATLAB si ha almacenado la matriz r, para comprobarlo tecleamos>>ry resulta>>r =10 11 12Podemos introducir matrices grandes utilizando matrices peque nas como elementosdela misma. Por ejemplo podemos a nadir una la a la matriz A.>>A = [ A; r]A =1 2 34 5 67 8 810 11 12De una matriz podemos extraer submatrices utilizando el smbolo :. Por ejemplo6 CAPITULO 1. ELEMENTOS BASICOS>>A = A(1:3,:)A =1 2 34 5 67 8 9toma las tres primeras las de la matriz A y todas las columnas, y nos devuelve el resultadointroducido en la matriz original. Estos y otros aspectos los veremos mas adelante con muchomas detalle.ASIGNACIONES Y VARIABLES MATLABMATLAB es un lenguaje de expresiones: interpreta y eval ua las expresiones introduci-das. Las asignaciones MATLAB son con frecuencia de la formavariable=expresi ono simplementeexpresionPodemos componer expresiones con operadores, caracteres especiales, funciones y vari-ables. La evaluacion produce en la mayora de los casos una matriz. La matriz aparece, si sedesea, en pantalla y es asignada a una variable para su posterior uso. Si omitimos el nombrede la variable y el signo =, MATLAB automaticamente crea una variable con el nombreans (variable de respuesta), donde almacena el resultado. Por ejemplo, si introducimos laexpresi on>>sqrt(2)/15se obtieneans =0.0943Si una expresion es bastante complicada (y larga) y no es suciente una lnea para es-cribirla completamente, podemos a nadir al nal tres puntos ( . . . ) seguidos de un retorno decarro para indicar que la asignaci on contin ue en la lnea siguiente. Por ejemplo,>>s= 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 ...- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;eval ua la suma de estas fracciones y asigna dicha suma a la variable s. Los espacios en blancotras los signos =, + y son opcionales, pero se incluyen para facilitar la lectura.7Podemos dar nombres a variables y funciones que empezaran siempre por letras y quepueden estar seguidas de otras letras o dgitos. MATLAB solo reconoce los 19 primeroscaracteres de un nombre.MATLAB es muy sensible: distingue entre letras may usculas y min usculas. A y a no sonla misma variable. Todos los nombres de funciones deben escribirse con min usculas; inv(A)es la inversa de A, pero INV(A) no est a denida. El comando casesen anula (o activa) estasensibilidad.RECOGIENDO INFORMACION EN EL ESPACIO DE TRABAJO (WORKSPACE)En los ejemplos previos hemos creado variables que han sido almacenadas en el espacio detrabajo de MATLAB. Podemos listar estas variables tecleando who o whos dependiendode la informacion que necesitemos de las variables almacenadas.>>whoYour variables are:A ans r s xEsto muestra que los ejemplos anteriores han generado cinco variables, incluyendo lavariable ans.VARIABLES PERMANENTESLa variable ans y la variable eps tienen un signicado especial para MATLAB.Ellas son permanentes y no pueden borrarse con la orden clear1.La variable eps es unatolerancia para considerar cero aquellas variables que sean casi nulas (bastante util paradetener los procesos iterativos). El valor estandar de eps para estaciones de trabajo yordenadores compatibles es:eps = 252que es aproximadamente 2.22 1016. Podemos inicializar eps a cualquier otro valorincluido el cero.Relacionadas con estas variables nos encontramos con las funciones pi, Inf y NaN quegeneran valores especiales.Por ejemplo, la funci on pi nos devuelve el n umero , precalculado por el programacomo 4 arctan(1) (cuatro veces el arco cuya tangente es uno). Otra posibilidad es calcular tecleando imag(log(1)) (parte imaginaria del logaritmo principal de 1).La funcion Inf, que se utiliza para innito, se encuentra en algunas calculadoras olenguajes de computacion. Un camino para generar el valor que nos devuelva Inf es1La orden clear A B C limpia del espacio de trabajo estas tres variables.8 CAPITULO 1. ELEMENTOS BASICOS>>s=1/0Warning: Divide by zeros =InfAunque, dependiendo de la version que utilicemos de MATLAB y el entorno de trabajo,la respuesta al calculo anterior puede ser el smbolo .En maquinas con cierta aritmetica, la divisi on por cero no provoca un error ni la nal-izacion de la ejecucion. Produce un mensaje y asigna un valor especial, que podemos utilizaren calculos posteriores. Por ejemplo, la variable NaN es un n umero relacionado con elinnito pero con distintas propiedades. NaN siginca No es Un N umero. Calculos comoInf/Inf o 0/0 lo generan. Como otra variable intrseca de MATLAB podemos citar la unidadimaginaria que se representa en MATLAB por i o j.LA UTILIDAD HELPLa utilidad help proporciona informacion instantanea de la mayora de los t opicos deMATLAB. El comando help sin argumentos muestra, dependiendo de la versi on de MAT-LAB que estemos usando, una lista de los directorios que contienen cheros relacionados conMATLAB.>>helpHELP topics:c:\\matlab - Establish \matlab session parameters.\matlab\general - General purpose commands.\matlab\ops - Operators and special characters.\matlab\lang - Language constructs and debugging.\matlab\elmat - Elementary matrices and matrix manipulation.\matlab\specmat - Specialized matrices.\matlab\elfun - Elementary math functions.\matlab\specfun - Specialized math functions.\matlab\matfun - Matrix functions - numerical linear algebra.\matlab\datafun - Data analysis and Fourier transform functions.\matlab\polyfun - Polynomial and interpolation functions.\matlab\funfun - Function functions - nonlinear numericalmethods.\matlab\sparfun - Sparse matrix functions.\matlab\plotxy - Two dimensional graphics.\matlab\plotxyz - Three dimensional graphics.9\matlab\graphics - General purpose graphics functions.\matlab\color - Color control and lighting model functions.\matlab\sounds - Sound processing functions.\matlab\strfun - Character string functions.\matlab\iofun - Low-level file I/O functions.\matlab\demos - Demonstrations and samples.For more help on directory/topic, type "help topic".Cada linea de pantalla incluye el nombre de un directorio seguido por una descripcion delcontenido de los directorios. Si ahora introducimos>>help matfunobtenemos la lista de las funciones sobre matrices m as relevantes en Analisis Numerico Ma-tricial.Matrix functions - numerical linear algebra.Matrix analysis.cond - Matrix condition number.norm - Matrix or vector norm.rcond - LINPACK reciprocal condition estimator.rank - Number of linearly independent rows or columns.det - Determinant.trace - Sum of diagonal elements.null - Null space.orth - Orthogonalization.rref - Reduced row echelon form.Linear equations.\ and / - Linear equation solution; use "help slash".chol - Cholesky factorization.lu - Factors from Gaussian elimination.inv - Matrix inverse.qr - Orthogonal-triangular decomposition.qrdelete - Delete a column from the QR factorization.qrinsert - Insert a column in the QR factorization.nnls - Non-negative least-squares.pinv - Pseudoinverse.lscov - Least squares in the presence of known covariance.Eigenvalues and singular values.10 CAPITULO 1. ELEMENTOS BASICOSeig - Eigenvalues and eigenvectors.poly - Characteristic polynomial.hess - Hessenberg form.qz - Generalized eigenvalues.rsf2csf - Real block diagonal form to complex diagonal form.cdf2rdf - Complex diagonal form to real block diagonal form.schur - Schur decomposition.balance - Diagonal scaling to improve eigenvalue accuracy.svd - Singular value decomposition.Matrix functions.expm - Matrix exponential.expm1 - M-file implementation of expm.expm2 - Matrix exponential via Taylor series.expm3 - Matrix exponential via eigenvalues and eigenvectors.logm - Matrix logarithm.sqrtm - Matrix square root.funm - Evaluate general matrix function.Si ahora tecleamos help lu obtenemos informaci on de la factorizaci on LU de una matriz.>>help luLU Factors from Gaussian elimination.[L,U] = LU(X) stores a upper triangular matrix in U and a"psychologically lower triangular matrix", i.e. a productof lower triangular and permutation matrices, in L , sothat X = L*U.[L,U,P] = LU(X) returns lower triangular matrix L, uppertriangular matrix U, and permutation matrix P so thatP*X = L*U.By itself, LU(X) returns the output from LINPACKS ZGEFA routine.Si tecleamos>>help inverseMATLAB nos contestainverse not foundpues en MATLAB inverse no es el nombre de ninguna funcion o comando, a menos quehaya sido a nadida por alg un usuario.11Una informaci on mas general nos la proporciona lookfor. Por ejemplo>>lookfor inverseINVHILB Inverse Hilbert matrix.ACOS Inverse cosine.ACOSH Inverse hyperbolic cosine.ACOT Inverse cotangent.ACOTH Inverse hyperbolic cotangent.ACSC Inverse cosecant.ACSCH Inverse hyperbolic cosecant.ASEC Inverse secant.ASECH Inverse hyperbolic secant.ASIN Inverse sine.ASINH Inverse hyperbolic sine.ATAN Inverse tangent.ATAN2 Four quadrant inverse tangent.ATANH Inverse hyperbolic tangent.ERFINV Inverse of the error function.INVERF Inverse Error function.INV Matrix inverse.PINV Pseudoinverse.IFFT Inverse discrete Fourier transform.IFFT2 Two-dimensional inverse discrete Fourier transform.nos da una lista de funciones relacionadas con la palabra inverse.TERMINANDO Y GUARDANDO EL ESPACIO DE TRABAJO (WORKSPACE)Para terminar una sesi on con MATLAB teclearemos quit o exit. Al nalizaruna sesion MATLAB se borran todas las variables del espacio de trabajo (i.e., las vari-ables declaradas en la sesi on actual).Antes de terminar podemos guardar el contenido delworkspace, para una sesion posterior, tecleando>>saveEste comando salva todas las variables en un chero llamado matlab.mat. La proximavez que MATLAB sea llamado podremos ejecutar load para restaurar, en el workspace,el contenido de matlab.mat.Podemos utilizar save y load con otros nombres de chero.mat o bien guardar s oloaquellas variables en las que estemos interesados.El comando save temp X guarda en elchero temp.mat s olo la variable X, mientras que save temp X Y Z almacena en temp.mat12 CAPITULO 1. ELEMENTOS BASICOSlas variables X,Y y Z. load temp cargas todas las variables almacenadas en el cherotemp.matPor ultimo, con los comandos load y save podemos importar y exportar cheros condatos ASCII. (Ver mas adelante).NUMEROS Y EXPRESIONES ARITMETICASMATLAB utiliza la notacion decimal, pudiendo incluir factores con potencias de diez ounidades imaginarias. Algunos ejemplos de n umeros legales son:3, 99, 9.6397238, 0.00001, 1.60210E 20, 6.02252e23, 3e5i, 2iLa aproximacion del n umero es eps, i.e., aproximadamente 16 dgitos decimales signica-tivos cuando se usa aritmetica de punto otante. El rango de la mantisa es [308, 308].Podemos combinar expresiones con los operadores aritmeticos usuales y las reglas de prece-dencia2. Las operaciones elementales son: + Suma Resta Multiplicaci on / Divisi on derecha \ Divisi on izquierda PotenciaLas operaciones con matrices hacen conveniente tener dos smbolos para la division. Estose analizara con mas detalle cuando abordemos el estudio de las operaciones y funciones conmatrices.Pero, adelantamos que por ejemplo, las expresiones escalares 1/4 y 4\1 tienen elmismo valor numerico, es decir 0.25.NUMEROS COMPLEJOS, CADENAS DE CARACTERES Y MATRICESMATLAB trabaja con n umeros complejos y representa la unidad imaginaria por i o j.El n umero z en forma binomica podemos escribirlo de dos formas>>z=3+4*iz =3.0000 + 4.0000i>>z=3+4*jz =3.0000 + 4.0000i2Para alterar el orden usual de la precedencia de las operaciones, utilizaremos parentesis.13Otra opcion consiste en utilizar la notaci on exponencial W=r*exp(i*theta).>>w=4*exp(i*pi/2)w =0.0000 + 4.0000iDos formas para introducir matrices complejas son:>>A=[1 2; 3 4] + i*[5 6; 7 8]A =1.0000 + 5.0000i 2.0000 + 6.0000i3.0000 + 7.0000i 4.0000 + 8.0000i>> A=[ 1 + 5*i 2 + 6*i; 3 + 7*i 4 + 8*i]A =1.0000 + 5.0000i 2.0000 + 6.0000i3.0000 + 7.0000i 4.0000 + 8.0000iEn las versiones m as actuales de MATLAB se pueden escribir los n umeros complejos sinnecesidad de utilizar *. Pero hay que tener cuidado en no dejar espacios en blanco al escribirla parte imaginaria de un n umero complejo. Si escribimos>>1+ 4ise obtiene1.0000 + 4.0000ien cambio, al introducir>>1 + 4 iaparece el siguiente mensaje de error??? 1+4 i\vertMissing operator, comma, or semi-colon.Esto tambien hay que tenerlo en cuenta cuando se utiliza la notacion exponencial conn umeros reales. Si introducimos>>1.23e-4la respuesta es1.2300e-004en cambio14 CAPITULO 1. ELEMENTOS BASICOS>>1.23 e-4produce el siguiente mensaje de error??? 1.23 e\vertMissing operator, comma, or semi-colon.Si hemos utilizado durante una sesion las letras i o j como nombre de variables o fun-ciones que juegan un papel distinto al de la unidad imaginaria, y necesitamos posteriormentetrabajar con complejos, podemos denir la unidad imaginaria del siguiente modo:>>ii=sqrt(-1)ii =0 + 1.0000iConsideremos, por ejemplo, la siguiente sesi on>>ians =0 + 1.0000i>>z = 1 + iz =1.0000 + 1.0000i>>w= 1 + jw =1.0000 + 1.0000i>>i=7i =7>>j=6j =6>>zz =1.0000 + 1.0000i>>z= 1+iz =8>>ii=sqrt(-1)ii =0 + 1.0000i>>z=1+ii15z =1.0000 + 1.0000iRealmente MATLAB s olo maneja matrices, pero los elementos de estas pueden sern umeros (reales o complejos) o cadenas de caracteres. Por ejemplo si tecleamos>> 34ans =34aparece el n umero 34, en cambio introduciendo matrices formadas por cadenas de caracteres(incluido el espacio en blanco) podemos leer, por ejemplo, la profunda conversaci on:>> saludo=[Hola, Buenos d as],respuesta=[Buenos d as]saludo =Hola, Buenos d asrespuesta =Buenos d asFUNCIONESLa potencia de MATLAB se deriva de su extenso conjunto de funciones. Algunas fun-ciones son intrnsecas al proceso de MATLAB en s mismo. Otras funciones se puedenencontrar en una librera externa de cheros.m distribuida con MATLAB, llamadas cajasde herramientas (MATLAB Toolboxes).Todava se est an a nadiendo funciones que han sido creadas por usuarios individuales,o grupos de usuarios, para aplicaciones m as especializadas. Este es un hecho importante,cada usuario puede crear sus propias funciones y trabajar con ellas conjuntamente con lasfunciones intrnsecas de MATLAB. Este es un aspecto importante que desarrollaremos m asadelante.MATLAB posee una gran clase de funciones, entre las que se inlcuyen las funcioneselementales que podemos encontrar en casi todas las calculadoras cientcas (abs, sqrt, log,sin, . . . ). Las funciones de que disponemos en MATLAB se pueden clasicar, por grupos,del siguiente modo:1. Funciones elementales2. Funciones especiales3. Funciones matriciales elementales4. Funciones matriciales especiales5. Descomposici on de matrices6. An alisis de datos7. Tratamiento de polinomios16 CAPITULO 1. ELEMENTOS BASICOS8. Ecuaciones diferenciales9. Ecuaciones no lineales y optimizaci on10. Integraci on numerica11. Procesamiento de la se nalUna breve descripci on de casi todas las funciones de estos grupos se puede encontrar enlos cuadros res umenes del ultimo captulo o, con mas profundidad, en la gua de usuarios deMATLAB.Destacamos que la pr actica totalidad de las funciones elementales de MATLAB no soloact ua sobre n umeros, sino que tambien operan con matrices actuando directamente sobre lasentradas de la matriz.En el subapartado dedicado al orden polyvalm veremos algunas funciones matriciales,como la exponencial matricial, el logaritmo matricial, . . .1.1 Formatos de salidaAntes de comenzar con el siguiente apartado (las operaciones matriciales) se nalamos queaunque MATLAB siempre trabaja en doble precisi on, es posible elegir diversos formatosde salida para los resultados numericos. Por defecto, el formato usual ser a de 5 cifrasdecimales.Algunas de las posibilidades que tenemos las describimos a continuacion con ejemplosconcretos:>> format short e>> A=[4/3 7.908767 3]A =1.3333e+000 7.9088e+000 3.0000e+000>> format long>> AA =1.33333333333333 7.90876700000000 3.00000000000000>> format long e>> AA =1.333333333333333e+000 7.908767000000000e+0003.000000000000000e+000La orden format rat hace que los resultados numericos siempre aparezcan como n umerosracionales. Pero tengase en cuenta que esto no signica que la matriz en cuesti on sea tratadainternamente, por MATLAB, como una matriz racional. Por consiguiente, esto resulta util1.1. FORMATOS DE SALIDA 17si tenemos la certeza de estar siempre trabajando con n umeros racionales. Ponemos esto demaniesto con la aproximaci on racional de MATLAB para 2.>>format rat>>sqrt(2)ans =114243/80782>>format long e>>114243/80782ans =1.414213562427273e+00>>sqrt(2)ans =1.414213562373095e+00Observese que si utilizamos format rat para la representaci on de la matriz de Hilbertde orden 5 se obtiene:>>format rat>>H=hilb(5)H =1 1/2 1/3 1/4 1/51/2 1/3 1/4 1/5 1/61/3 1/4 1/5 1/6 1/71/4 1/5 1/6 1/7 1/81/5 1/6 1/7 1/8 1/9El formato format + muestra un diagrama de la matriz en el que solo aparecen loselementos no nulos (positivos marcados con + y negativos con ).format + resultaespecialmente util para destacar la estructura de una matriz (banda ,diagonal por bloques,...). Por ejemplo:>> J=[-3 1 0 0;0 -3 0 0;0 0 4 1;0 0 0 4]J =-3 1 0 00 -3 0 00 0 4 10 0 0 4>> format +>> JJ =18 CAPITULO 1. ELEMENTOS BASICOS-+-+++Para volver al formato corto usual podemos teclear format o bien format short.En relacion con la presentaci on por pantalla tenemos los comandos format compacty format loose. El primero de ellos nos suprime las lneas en blanco que, por defecto,aparecen en una sesi on MATLAB, mostrando de esta forma m as informacion en pantalla;el segundo de los comandos anula el anterior.1.2 Matrices por bloquesEs posible manejar bloques completos de una matriz utilizando los dos puntos (:). Porejemplo:>> A=[4 5 3 2;3 5 7 -1;2 5 8 0]A =4 5 3 23 5 7 -12 5 8 0>> A(1,:)Nos proporciona la primera la de la matriz A.ans =4 5 3 2>> b=B(:,2)Asigna a la variable b la segunda columna de la matriz Bb =56-1>> bloque=A(2:3,1:2)La variable bloque contiene el bloque formado por la intersecci on de las las 2ay 3ayde las columnas 1ay 2ade la matriz A.bloque =3 52 51.2. MATRICES POR BLOQUES 19En particular, es posible hacer referencia a un elemento concreto de una matriz. Elelemento (2, 1) de la matriz denominada bloque se obtiene de forma totalmente natural:>> bloque(2,1)ans =2Una instruccion del tipo M = [P; B] construye, si es posible, una matriz M a nadiendo aP las las de B. Vease,>> P=[3 5 6; -2 .5 9]; B=[4 6 2; 9 0 0;5 5 0.25];>> P,BP =3.0000 5.0000 6.0000-2.0000 0.5000 9.0000B =4.0000 6.0000 2.00009.0000 0 05.0000 5.0000 0.2500>> F=[P;B]F =3.0000 5.0000 6.0000-2.0000 0.5000 9.00004.0000 6.0000 2.00009.0000 0 05.0000 5.0000 0.2500La orden M = [P B], analoga a la anterior, construye la matriz M a nadiendo a P lascolumnas de B. Naturalmente, esto es posible si P y B tienen el mismo n umero de las.>>G=[2 1;1 3],O=[1 0 -1;2 1 -3]G =2 11 3O =1 0 -12 1 -3>>M1=[G O]M1 =2 1 1 0 -11 3 2 1 -3Si se denen nuevos elementos de una matriz en una la o columna no existente, loselementos no denidos (en la las o columnas no existentes) se toman como nulos.20 CAPITULO 1. ELEMENTOS BASICOS>>P(3,2)=piP =3.0000 5.0000 6.0000-2.0000 0.5000 9.00000 3.1416 0Los dos puntos se pueden utilizar con otra nalidad. Podemos denir un vector cuyoselementos est an en progresion artimetica:>> t=0:2:10t =0 2 4 6 8 10Los dos puntos tambien se pueden utilizar para transformar una matriz en un vectorcolumna, siguiendo el orden de las columnas.>>A(:)ans =4325553782-101.3 Operaciones con Matrices.En esta seccion mostraremos como las operaciones con matrices se realizan en MATLABde forma bastante natural.Dada una matriz A, A0 nos proporciona la traspuesta de A, si esta es real, o la adjuntaen sentido hermtico, si A es de n umeros complejos.>> T=JT =-3 0 0 01 -3 0 00 0 4 01.3. OPERACIONES CON MATRICES. 210 0 1 4>> C=[3+2*i 6-2*i;7 2*i]C =3.0000 + 2.0000i 6.0000 - 2.0000i7.0000 0 + 2.0000i>> T=CT =3.0000 - 2.0000i 7.00006.0000 + 2.0000i 0 - 2.0000iLa suma de matrices (+), el producto (*) y la potencia nesima de una matriz (An) serealizan como sigue.>> S=T+CS =6.0000 13.0000 - 2.0000i13.0000 + 2.0000i 0>> E=[6 3 2;-1 3 -1;5 3 8]E =6 3 2-1 3 -15 3 8>> P=E*EP =49 1 551 11 -455 -4 98>>NI=[0 1 -2;0 0 15;0 0 0]NI =0 1 -20 0 150 0 0>>NI^3ans =0 0 00 0 00 0 0Para calcular el determinante de una matriz cuadrada usaremos la funcion det. Porejemplo, para la matriz de Hilbert de orden 5 el determinante es:>>format rat>>H=hilb(5)22 CAPITULO 1. ELEMENTOS BASICOSH=1 1/2 1/3 1/4 1/51/2 1/3 1/4 1/5 1/61/3 1/4 1/5 1/6 1/71/4 1/5 1/6 1/7 1/81/5 1/6 1/7 1/8 1/9>> det(H)ans =1/266716800000Para calcular la traza emplearemos trace, para obtener el rango rank y para hallarla inversa inv. Esto se ilustra en el siguiente ejemplo:>>A=[1 2 3;0 1 2;0 0 1]A =1 2 30 1 20 0 1>>trace(A)ans =3>>rank(A)ans =3>>inv(A)ans =1 -2 10 1 -20 0 1La orden size nos da un vector cuyas componentes nos indican el orden de la matriz.1.4. OPERACIONES ELEMENTO A ELEMENTO 23La primera componente denota el n umero de las y la segunda el n umero de columnas.>>size(A)ans =3 3Por ultimo, indicar que la orden nnz determina el n umero de elementos no nulos de lamatriz.>>nnz(A)ans =61.4 Operaciones elemento a elementoSi M y N son matrices del mismo orden M. N, M.N y M./N realizan el producto, lapotenciacion y la divisi on elemento a elemento. (Naturalmente, la suma y la diferencia dematrices se realizan elemento a elemento). Por ejemplo,>> PE=E.*EPE =36 -3 10-3 9 -310 -3 64>> PO=E^2PO =43 33 25-14 3 -1367 48 71>> PO=E.^2PO =36 9 41 9 125 9 64>> M=[1 2 5];v=[1 2 3];>> M.^v24 CAPITULO 1. ELEMENTOS BASICOSans =1 4 125Cuando una de las matrices sea de orden 1 por 1 (i.e., un escalar), las operaciones ante-riores tambien tienen sentido. Vease>> 3 .^vans =3 9 27>>3 ./vans =3.0000 1.5000 1.0000Notese el espacio entre el n umero 3 y el punto; este es necesario en las primeras versionesde MATLAB.En relacion con las operaciones elemento a elemento podemos destacar la operaci onno+matriz (o matriz+no) que, al contrario de las anteriores no necesita el punto (.), y cuyocometido es sumar a cada elemento de la matriz el n umero en cuestion.>>8+vans =9 10 11Captulo 2Tipos especiales de matrices.Construcciones.2.1 Matrices especiales.Indiquemos en primer lugar como generar autom aticamente, con ayuda de algunas funcionesincorporadas en MATLAB, algunos tipos de matrices.zeros(m,n) genera la matriz nula de orden mn. An alogamente ones(m,n) produceuna matriz de orden mn con todos sus elementos iguales a uno. Si tecleamos zeros(n) oones(n) obtenemos los mismos resultados, pero en estos casos las matrices son cuadradasde orden n.>> Z=zeros(3,2)Z =0 00 00 0Si tecleamos eye(n) obtendremos la matriz identidad de orden n. En cambio eye(m,n)produce el siguiente efecto:>> E=eye(2,4)E =1 0 0 00 1 0 0As, las funciones anteriores pueden tener uno o dos argumentos de entrada dependiendode la nalidad que persigamos. Esta caracterstica no la poseen s olo las funciones anteri-ores, sino que la mayora de las funciones de MATLAB gozan de la misma, como iremosdescrubiendo mas adelante.Adem as, la anterior caracterstica est a ntimamente ligada con la funci on (variable in-trseca) nargin (n umero de argumentos de entrada) que nos proporciona, una vez que2526 CAPITULO 2. TIPOS ESPECIALES DE MATRICES. CONSTRUCCIONES.llamamos a una funcion, el n umero de argumentos de entrada que utilizamos en dicha llama-da (es decir, el n umero de elementos entre parentesis y separados por comas que precedenal nombre de una funci on). Relacionada con la funci on nargin nos encontramos la funci onnargout (n umero de argumentos de salida) de la que hablaremos mas adelante.La orden ones(A) nos proporciona una matriz de unos del mismo orden que A. Efectosanalogos tienen los comandos eye(A) y zeros(A).>> ones(E)ans =1 1 1 11 1 1 1Para la versi on 4.2c de MATLAB las ordenes ones(A), eye(A) y size(A) hanquedado obsoletas y conviene sustituirlas por ones(size(A)), eye(size(A)) y zeros(size(A)).Tambien es posible generar algunas matrices especiales como por ejemplo matrices deHilbert. As, hilb(n) produce la matriz de Hilbert de orden n:>> H=hilb(5)H =1.0000 0.5000 0.3333 0.2500 0.20000.5000 0.3333 0.2500 0.2000 0.16670.3333 0.2500 0.2000 0.1667 0.14290.2500 0.2000 0.1667 0.1429 0.12500.2000 0.1667 0.1429 0.1250 0.11112.2 Redeniciones y construcciones a partir de la diagonalExisten varias funciones MATLAB que permiten redenir la estructura de una matriz:>>rot90(E)Esta instrucci on realiza un giro de 90ogrados (en sentido positivo) de la matriz E.ans =0 00 00 11 0A partir de una matriz A podemos conseguir nuevas matrices con los mismos elementos,pero diferente estructura mediante instrucciones como: reshape(A,m,n)que nos proporciona, a partir de los elementos de A, una matriz deorden m n siguiendo el orden de las columnas. Naturalmente, A debe tener m nelementos.2.2. REDEFINICIONES Y CONSTRUCCIONES A PARTIR DE LA DIAGONAL 27 iplr(A) que nos da la matriz A pero con las columnas en orden inverso. ipud(A) que tiene el mismo efecto que iplr(A), pero para las las de A.>> A=[3 4 6 8;1 0 7 20;-3 -2 8 0]A =3 4 6 81 0 7 20-3 -2 8 0>> R=reshape(A,2,6)R =3 -3 0 6 8 201 4 -2 7 8 0>>fliplr(A),flipud(A)ans =8 6 4 320 7 0 10 8 -2 -3ans =-3 -2 8 01 0 7 203 4 6 8Dada una matriz A existe la posibilidad de generar diversas matrices a traves de la(s)diagonal(es) de A.Para obtener la diagonal de una matriz A, (que puede no ser cuadrada) basta teclear>> D=diag(A)D =308Si v es un vector diag(v) nos da una matriz diagonal (cuadrada) cuya diagonal es v.>> diag([5 7 -3])ans =5 0 00 7 00 0 -3La orden diag(A) posee como variante la orden diag(A,k) que muestra la kesimasuperdiagonal de A, si k es positivo, y la kesima subdiagonal, si k es negativo. (Observesede nuevo la posibilidad de dar distinto n umero de argumentos de entrada a una funcionMATLAB).28 CAPITULO 2. TIPOS ESPECIALES DE MATRICES. CONSTRUCCIONES.>> D2=diag(A,2)D2 =620>> D_1=diag(A,-1)D_1 =1-2De manera totalmente an aloga a la orden diag(A) nos encontramos las ordenes triu(A)y tril(A) que generan matrices triangulares superiores y triangulares inferiores, respecti-vamente, con los elementos superiores e inferiores, respectivamente, a la diagonal de A ycon los elementos diagonales de la misma.>> TS=triu(A)TS =3 4 6 80 0 7 200 0 8 0Tambien disponemos de las variantes triu(A,k) y tril(A,k) que act uan de formaanaloga a la instrucci on diag(A,k). Por ejemplo, triu(A,k) produce el siguiente efecto:>> TS2=triu(A,2)TS2 =0 0 6 80 0 0 200 0 0 0El lector puede practicar estas instrucciones descomponiendo una matriz cuadrada Acomosuma de una matriz triangular inferior L, una matriz diagonal D y una matriz triangularsuperior U. (Esta descomposici on resulta util en la resoluci on de S.E.L. mediantes metodositerativos).Captulo 3Sistemas de Ecuaciones Lineales ydescomposiciones3.1 Resoluci on de S.E.L.3.1.1 Sistemas cuadradosSi se desea resolver el S.E.L. (S) : Ax = b, donde A es una matriz cuadrada (no singular);puede obtenerse la solucion mediante la operaci on A\b. Esta operaci on nos indica que estamosdividiendo, por la izquierda, el vector columna b por la matriz A, i.e., estamos haciendo laoperaci on A1b. Como se puede imaginar esta operaci on no se realiza calculando la inversa1de A, se lleva a cabo de forma general mediante el metodo de Gauss con estrategia de pivoteoparcial. Por ejemplo, para resolver el sistemax + 2y = 33x 4y = 1se realizan las siguientes instrucciones: Introducci on de la matriz de coecientes y el vector columna b. Resoluci on del sistema mediante la divisi on izquierda A\b.>> A=[1 2;3 -4];b=[3 -1];>> x=A\bx =1.00001.0000Si A es singular, a un cuando el sistema sea compatible, MATLAB nos proporcionara unmensaje de error.1Pues el calculo de la inversa de una matriz es demasiado costoso desde el punto de vista computacional.2930CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES>> A=[1 2;2 4];b=[3 6];>> x=A\bWarning: Matrix is singular to working precision.x =InfInf3.1.2 Sistemas superdeterminados. Mnimos cuadradosSi A no es cuadrada, A\b resuelve el sistema (S) en el sentido de los mnimos cuadrados. Deesta forma, podemos resolver el sistema anterior a nadiendo una la nula a la matriz ampliada[A|b].>> A(3,:)=[0 0];b(3)=0;>> x=A\bWarning: Rank deficient, rank = 1 tol = 2.9790e-015x =01.5000Como podemos observar, s olo hemos obtenido una de las soluciones del sistema. Paratener todas, solamente nos falta una base del espacio nulo (n ucleo) de la matriz A. Veremoscomo obtener esto en una pr oxima secci on.Se ha puesto de maniesto en este subapartado que la resoluci on del sistema Ax = b,llevada a cabo por MATLAB mediante la orden A\b, depende de la estructura de la matrizde coecientes del sistema. De hecho, la divisi on izquierda \ utiliza, a grandes rasgos, elsiguiente algoritmo: Si la matriz A es una permutaci on de una matriz triangular superior (resp. inferior) seutiliza el metodo de subida (resp. bajada). Si A es simetrica (hermtica) denida positiva se calcula la descomposicion de Choleskyde A, i.e., se determina la matriz triangular superior R con elementos diagonales es-trictamente positivos tal que A = RtR y a continuaci on se determina x de la formax = R\(R0\b). Si la matriz de coecientes no es una permutacion de una matriz triangular o no esdenida positiva, la resolucion del sistema se lleva a cabo calculando la descomposicionLU de A mediante el metodo de Gauss con estrategia de pivoteo parcial. Una vezcalculadas las matrices L y U, la soluci on del sistema es x = U\(L\b). Por ultimo, si A no es cuadrada se computa la descomposici on QR de A mediantesimetras de Householder. Es decir, se calcula Q ortogonal, R triangular superior y Pmatriz de permutacion tales que AP = QR. Una vez obtenidas P, Q y R se calcula xmediante x = P (R\(Q0 b)).3.1. RESOLUCION DE S.E.L. 313.1.3 Tiempo de calculo y n umero de operacionesComo hemos visto en el captulo 1 la instrucci on inv(A) calcula la inversa de la matrizA, si esta es regular (en realidad, s olo podemos arnos del resultado nal si A no es casisingular). La resoluci on de un determinado S.E.L. puede realizarse con MATLAB mediantela orden inv(A)*b, pero como pondremos de maniesto a continuaci on es m as efectivo lautilizaci on del comando A\b.Esta ecacia se pone de maniesto comparando el n umerode operaciones de ambos metodos y el tiempo de c alculo para llevar a cabo los mismos.Eln umero de operaciones que MATLAB ha efectuado en una sesion puede obtenerse con elcomando ops. Ahora bien, la utilizaci on de la version ops(0) hace que el contandor(del n umero de operaciones) se inicialice a cero, con lo que si seguidamente realizamos algunasoperaciones con MATLAB podemos conocer el n umero de estas sin mas que teclear ops.Para el sistema cuadradox + 2y = 33x 4y = 1comparamos el n umero de operaciones:>>flops(0)>>x=A\bx =1.00001.0000>>flopsans =33>>flops(0)>>x=inv(A)*bx =1.00001.0000>>flopsans =44Se observa que, incluso para un sistema con dos ecuaciones y dos incognitas, el n umerode operaciones es mucho mayor si utilizamos para resolver el sistema la orden inv(A)b.Dentro de los ejercicios que se acompa nan al nal se propone la construccion de unafuncion que nos permita resolver un S.E.L. cuadrado por el metodo de Cramer. Sera conve-niente que el lector comparase con algunos ejemplos el n umero de operaciones necesario parala resoluci on del sistema utilizando el metodo de Cramer y el algoritmo divisi on izquierda.32CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONESPara la evaluaci on de tiempos de calculo, tenemos varias posibilidades. Las funcionestic y toc nos proporcionan conjuntamente el tiempo de c alculo de cualquier expresionMATLAB sin mas que teclear>>tic>>expresiones>>tocLa funcion cputime nos propociona el tiempo en segundos usado por MATLAB desdeel instante en que entramos en el programa.De esta forma podemos calcular el tiempo dec alculo de cualquier expresi on realizando las siguientes instrucciones:>>t1=cputime>>expresiones>>t2=cputime-t1Para comparar los tiempos de c alculo tambien podemos hacer uso de los comandos clocky etime.El primero de ellos nos muestra un vector la de seis componentes en el que sepuede obeservar el a no, mes, da, hora, minutos y segundos que marca el reloj de nuestro orde-nador. La orden etime(t2,t1) nos proporciona el tiempo, en segundos, que han transcurridoentre dos vectores de tiempo t1 y t2.Creamos una matriz y un vector (de grandes dimesiones2) formados por n umeros aleato-rios, comprendidos entre cero y uno, con ayuda de la funcion rand(m,n):>>A=rand(30);b=rand(30,1);y resolvemos el sistema Ax = b mediante la divisi on izquierda \ y mediante la inversainv(A):>>t1=clock;x=A\b;etime(clock,t1)ans =0.5167>>t1=clock;x=inv(A)*b;etime(clock,t1)ans =1.0333Se comprueba que la resolucion del sistema mediante la orden inv(A)b necesita mayortiempo de c alculo que la divisi on izquierda (de hecho, casi el doble de tiempo).2Hacemos esto, pues la diferencia entre los tiempos de c alculo de los dos metodos para S.E.L. peque nos escasi inapreciable.3.2. DESCOMPOSICIONES 333.2 Descomposiciones3.2.1 Factorizacion LU.Dada una matriz A [L,U]=lu(A) realiza la descomposicion LU (LR) de la matriz cuadradaA.Esta descomposicion siempre se realiza siguiendo el metodo de Gauss con estrategia depivote parcial, por lo cual, aunque U es triangular superior, L en la mayora de los casos noes triangular inferior.>> A=[3 4 6 8;1 0 7 20;-3 -2 8 0]A =3 4 6 81 0 7 20-3 -2 8 0>> A=A(1:3,1:3)A =3 4 61 0 7-3 -2 8>> [L,U]=lu(A)L =1.0000 0 00.3333 -0.6667 1.0000-1.0000 1.0000 0U =3.0000 4.0000 6.00000 2.0000 14.00000 0 14.3333Sin embargo, introduciendo la orden [L,U,P]=lu(A)es posible conocer los intercambiosde las, debidos al pivoteo parcial, que ha sufrido la matriz A. En este caso L s es triangularinferior con unos en la diagonal y P es la matriz de permutaci on que nos da los intercambiosde las. Es decir, PA = LU. Compruebese>> [L,U,P]=lu(A)L =1.0000 0 0-1.0000 1.0000 00.3333 -0.6667 1.0000U =3.0000 4.0000 6.00000 2.0000 14.000034CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES0 0 14.3333P =1 0 00 0 10 1 0Vemos que la funci on lu posee una caracterstica particular: la funcion puede ser llama-da con distinto n umero de argumentos de salida seg un nuestra nalidad. Esta caratersticano es privilegio exclusivo de la funci on lu, sino muchas otras funciones de MATLAB,como veremos m as adelante, tambien presentan esta particularidad.3.2.2 Descomposicion de CholeskySi A es una matriz simetrica (hermtica) denida positiva la descomposicion de Choleskyde A se realiza con la funci on chol(A). Se obtiene una matriz R triangular superior conelementos diagonales estrictamente positivos tal que A = RtR.>>S=[2 -1 0;-1 2 -1;0 -1 2]S =2 -1 0-1 2 -10 -1 2>>chol(S)ans =1.4142 -0.7071 00 1.2247 -0.81650 0 1.1547Notese que se obtiene un mensaje de error si la matriz no es denida positiva:>>T=[2 -1 0;-1 2 0;-1 -1 -1]T =2 -1 0-1 2 0-1 -1 -1>>chol(T)??? Error using ==> cholMatrix must be positive definite.No obstante la funci on chol con dos argumentos de salida nunca nos proporciona men-saje de error. Si escribimos [R, p] =chol(A) obtemos las siguientes respuestas: Si A es denida positiva, entonces p = 0 y R contiene la descomposicion de Choleskyde A.3.2. DESCOMPOSICIONES 35 Si A no es denida positiva, entonces p es un n umero entero estrictamente positivo yR una matriz triangular superior con elementos diagonales estrictamente positivos deorden q = p 1 tal que R0 R = A(1 : q, 1 : q). Es decir, el comando chol condos argumentos de salida nos proporciona la descomposici on de Cholesky de la mayorsubmatriz principal de A que es denida positiva (y, salvo una unidad, el orden de esta).>>[R,p]=chol(T)R=1.4142 -0.70710 1.2247p=3Naturalmente, si ninguna submatriz principal de A es denida positiva R tendra comovalor la matriz vacia (matriz que no contiene elementos) y p sera igual a uno.>>M=[-2 1;2 3];>>[s,f]=chol(M)s=[ ]f=13.2.3 Factorizacion QRLa factorizaci on QR de una matriz A, no necesariamente cuadrada, puede realizarse medi-ante la orden [Q,R]=qr(A); Q ser a entonces una matriz ortogonal (o unitaria en el casocomplejo) y R una matriz triangular superior del mismo tipo que A, tales que A = QR. Taldescomposicion se lleva a efecto mediante transformaciones de Householder y como se puedeobservar en el siguiente ejemplo los elementos diagonales de R no tienen porque ser positivos.(Se realiza la descomposici on de esta forma por cuestiones de estabilidad en el metodo).>> M=[4 6 -2 7;2 4 10 -1;-12 4 -3 0];>> [Q,R]=qr(M)Q =-0.3123 -0.7840 0.5365-0.1562 -0.5147 -0.84300.9370 -0.3471 0.0383R =-12.8062 1.2494 -3.7482 -2.03030 -8.1510 -2.5375 -4.97320 0 -9.6183 4.5984Podemos comprobar que Q es ortogonal, es decir, (salvo errores de redondeo) QtQ = I.36CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES>> Q*Qans =1.0000 -0.0000 -0.0000-0.0000 1.0000 -0.0000-0.0000 -0.0000 1.0000De la misma forma que la funcion lu, la funcion qr tambien puede ser ejecutadacon tres argumentos de salida: la orden [Q,R,P]=qr(A) proporciona una matriz ortogonal(unitaria) Q, una matriz R triangular superior con elementos diagonales decrecientes y unamatriz C de permutacion de columnas, tales que AC = QR.>>[Q,R,MPC]=qr(M)Q =-0.3123 0.3187 0.8949-0.1562 -0.9464 0.28260.9370 -0.0515 0.3454R =-12.8062 -3.7482 1.2494 -2.03030 -9.9474 -2.0792 3.17770 0 7.8814 5.9817MPC =1 0 0 00 0 1 00 1 0 00 0 0 1Ponemos un ejemplo en el que se observa los elementos nulos en la diagonal de R.>>MM=[1 1 2;2 0 2;-1 3 2;1 4 5]MM =1 1 22 0 2-1 3 21 4 5>>[Q,R]=qr(MM)Q =-0.3780 0.1416 0.6928 -0.5976-0.7559 -0.1133 -0.5978 -0.24170.3780 0.6516 -0.3863 -0.5323-0.3780 0.7366 0.1165 0.5487R =-2.6458 -0.7559 -3.40170 5.0427 5.04273.2. DESCOMPOSICIONES 370 0 -0.00000 0 0Hacemos notar que, una vez conocida R, el c alculo del rango de A es inmediato, pues Qes no singular. Para el ejemplo anterior R tiene dos las nulas y por consiguiente el rango deMM es dos. En efecto,>>rank(MM)ans =23.2.4 Ortonormalizaci on y espacio nuloGracias a la descomposici on QR que se obtiene mediante MATLAB podemos calcular unabase ortonormal del espacio columna y una base ortonormal del espacio nulo (n ucleo) de unamatriz A.La funcion que permite obtener una base ortonormal del espacio columna de A es or-th(A) y una base ortonormal del espacio nulo nos la proporciona la funci on null(A).>>Or=orth(M)Or =0.3123 -0.3187 0.89490.1562 0.9464 0.2826-0.9370 0.0515 0.3454>> nulo=null(M)nulo =-0.2672-0.54440.34300.7173Comprobamos que son bases ortonormales calculando OrtOr y nulotnulo.Or*Orans =1.0000 -0.0000 0.0000-0.0000 1.0000 -0.00000.0000 -0.0000 1.0000nulo*nuloans =1.000038CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONESNotese que con ayuda de null y \ se pueden resolver sistemas de ecuaciones compatiblesindeterminados. Por ejemplo, el sistema compatible indeterminadox + 2y = 32x + 4y = 6puede resolverse siguiendo los pasos:1. Si es necesario, se a nade un la nula a la matriz ampliada para conseguir un sistemano cuadrado.2. Se calcula una soluci on particular del mismo.3. Calculamos una base del espacio nulo de la matriz de coecientes.Estos tres pasos se realizan en MATLAB del siguiente modo:>>A=[1 2;2 4],b=[3 6]A =1 22 4b =36>>A(3,:)=[0 0],b(3)=0A =1 22 40 0b =360>>x=A\bWarning: Rank deficient, rank = 1 tol = 2.9790e-15x =01.5000>>nulo=null(A)nulo =-0.89440.44723.3. NORMAS Y NUMERO DE CONDICION 39De este forma, todas las soluciones del sistema anterior vienen dadas porx = 0.8944y = 1.5 + 0.4472con R3.3 Normas y n umero de condicion3.3.1 Normas vectoriales y matricialesSi A es una matriz cuadrada norm(A,p) (siendo p = 1, 2, inf) proporciona la norma p deA.>> V=[1 4;8 -1];>> N2=norm(V,2)N2 =8.0828>> N1=norm(V,1)N1 =9>> Ninf=norm(V,inf)Ninf =9Puesto que en la mayora de los casos se trabaja con la norma eucldea (i.e., en norma2), por defecto norm(A) nos da el mismo valor que norm(A,2). (De nuevo la funcionnorm puede tener distinto n umero de argumentos de entrada)Para vectores norm(v,p) calcula la norma p del vector v y en este caso p puede sercualquier real del interalo [1, +].>> w=[2 -4 6];>> norm(w,3)ans =6.60393.3.2 N umero de condicion y rangoEl n umero de condicion de una matriz nos proporciona el valor m aximo de amplicaci on delos errores relativos en la resoluci on de un S.E.L. sometido a perturbaciones. Si el n umero decondicion es mucho mayor que uno, la matriz esta mal condicionada y no debemos arnos dela soluci on del sistema; si por el contrario es pr oximo a uno, la matriz se dice bien condicionaday los posibles errores relativos en la soluci on est an acotados por los errores relativos cometidosen los datos del sistema (matriz y termino independiente).El n umero de condici on de una matriz A se calcula mediante MATLAB con la funcioncond(A). Para la matriz de Hilbert anterior40CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES>> cond(H)ans =4.7661e+005Parece, entonces, necesario obtener el n umero de condici on de la matriz de coecientes deun sistema de ecuaciones lineales antes de resolverlo.Pero afortunadamente, MATLAB amedida que resuelve el sistema calcula, mediante el comando rcond(A), una aproximaciondel inverso del n umero de condicion de la matriz de coecientes A, dandonos un aviso paraque tengamos en cuenta que si rcond(A) es peque no, hay posibilidad de un gran error enla solucion si hemos cometido un peque no error en los datos del sistema. Para la matrizH=hilb(5), 1/cond(A) = 2.0982e 006 y mediante la funci on rcond se obtiene:>> rcond(H)ans =1.4407e-006Ponemos de maniesto a continuaci on la ventaja de la informacion complementaria deMATLAB cuando resolvemos un S.E.L. Por ejemplo, para la resolucion del sistemax + 2y + 3z = 14x + 5y + 6z = 07x + 8y + 9z = 0___mediante MATLAB, se efect uan las siguientes instrucciones:>>A=[1 2 3;4 5 6;7 8 9]A =1 2 34 5 67 8 9>>b=[1 0 0]b =100>>x=A\bWarning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 2.937385e-18x=1.0e+15 *3.1522-6.30443.15223.3. NORMAS Y NUMERO DE CONDICION 41Apreciamos en la obtenci on de la resolucion del sistema un mensaje de error que nosinforma que la matriz de coecientes puede ser casi singular (estar mal condicionada).Dehecho la soluci on que hemos obtenido no es soluci on del sistema, basta observar que Ax 6= b.En efecto,>>A*xans =0.5000-1.0000-2.5000De hecho, la matriz A no es casi singular es, sin lugar a dudas, singular:>>det(A)ans =0Esto no impide que MATLAB obtenga la inversa de esta matriz:>>inv(A)Warning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 2.937385e-18ans =1.0e+16 *0.3152 -0.6304 0.3152-0.6304 1.2609 -0.63040.3152 -0.6304 0.3152Como se observa MATLAB nos ha dado el mismo mensaje anterior y adem as ha cal-culado la inversa de A.Evidentemente esta matriz no es la inversa de A, pues A ans noda como resultado la matriz identidad:>>A*ansans =1.0e+17 *-0.0901 -0.1801 -0.2702-0.3603 -0.7206 -1.0809-0.6305 -1.2610 -1.8915Adem as, como puede comprobarse f acilmente, nuestro sistema es INCOMPATIBLE.Advertencia:Aunque MATLAB nos da informaci on adicional (como la mostrada en elejemplo anterior) cuando resolvemos un S.E.L. o calculamos la inversa de una matriz, se handetectado, en algunas versiones de MATLAB (en distintos entornos de trabajo), y para elS.E.L. anterior que no aparece ning un mensaje de precaucion a la hora de resolver el sistema42CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONESo calcular la inversa de la matriz de coecientes. Parece l ogico, entonces, calcular cond(A)(o rcond(A)) antes de resolver un sistema y tomar la decision de resolverlo una vez conocidoel n umero de condici on de la matriz de coecientes.El rango de una matriz se calcula mediante MATLAB con la funci on rank(A). Porejemplo, para la matriz de coecientes y la matriz ampliada del sistema anterior se obtiene:>>rank(A)ans =2>>rank([A b])ans =3y por consiguiente se observa que el sistema anterior es incompatible.Para la matriz de Hilbert anterior el rango es>> rank(H)ans =5En realidad, el rango de A se calcula como el n umero de valores singulares (ver masadelante) casi no nulos de esta. Esto permite utilizar la funci on rank con dos argumentosde entrada: rank(A,tol) que considera nulos los valores singulares menores que tol.>> rank(H,.001)ans =3Si hemos introducido un solo argumento de entrada para rank el valor de tol viene dadopor defecto como tol=max(size(A))norm(A)eps.Finalizamos esta secci on proponiendo al lector que resuelva los siguientes sistemas deecuaciones, que se encuentran propuestos en el libro de G. Strang, Algebra Lineal Aplicada,y que compare los resultados obtenidos:[A]( x + y = 2x + 1.0001y = 2[B]( x + y = 2x + 1.0001y = 2.0001Captulo 4Autovalores y polinomios4.1 Autovalores y autovectoresLos autovectores y autovalores (complejos) de una matriz cuadrada pueden calcularse con-juntamente por medio de la funci on eig:>>V=[1 4;8 -1];V =1 48 -1>>[X,D]=eig(V)X =0.6446 -0.51010.7645 0.8601D =5.7446 00 -5.7446As, se obtiene una matriz diagonal D cuya diagonal contiene los autovalores de la matrizV y una matriz X que verica la condici on: V X = XD. Por tanto, las columnas de X sonautovectores de V .En el siguiente ejemplo comprobamos que las columnas de X no tienen por que serlinealmente independientes (tenganse en cuenta los errores de redondeo).>>N=[1 1;0 1];>>[X,D]=eig(N)X =1.0000 -1.00000 0.0000D =1 04344 CAPITULO 4. AUTOVALORES Y POLINOMIOS0 1>>rank(X)ans =1La funci on eig(A) puede utilizar uno o dos argumentos de salida. En el caso de utilizardos argumentos se obtienen los autovectores y los autovalores como se ha descrito anterior-mente. Cuando utilizamos un unico argumento de salida obtenemos un vector columna quecontiene los autovalores (puede que repetidos) de la matriz A.>>aut=eig(V)aut =5.7446-5.7446>>VV=[1 2;-2 1]VV =1 2-2 1>>autVV=eig(VV)autVV =1.0000 + 2.0000i1.0000 - 2.0000iEstrechamente relacionadas con el c alculo de autovalores tenemos la funciones hess(A)y schur(A) que calculan la forma de Hessenberg y la forma de Schur (superior) de A,respectivamente. Para la matriz de Hilbert de orden cinco y la matriz V anterior se obtiene:>>hess(H)ans =0.0001 0.0002 0 0 00.0002 0.0079 0.0143 0 00 0.0143 0.2556 -0.3302 00 0 -0.3302 1.4126 -0.32220 0 0 -0.3222 0.1111>>schur(V)ans =5.7446 -4.0000-0.0000 -5.7446Observese que en la diagonal de la matriz de Schur aparecen los autovalores de V .4.2. VALORES SINGULARES Y PSEUDOINVERSA 454.2 Valores singulares y pseudoinversaLa descomposicion en valores singulares de una matriz A cualquiera se efect ua por medio dela funcion svd. De esta forma, la orden [U,S,V]=svd(A) proporciona una matriz diagonalS, del mismo tipo que A, y dos matrices ortogonales (unitarias) U y V tales que A = USVt.Los elementos de la diagonal de S son por tanto los valores singulares de la matriz A, i.e.,la raz cuadrada1de los autovalores de la matriz simetrica (hermtica) semidenida positivaAtA (AA).>>A=[1 2;-1 1;0 3]A =1 2-1 10 3>>[U,S,V]=svd(A)U =0.5531 0.6006 -0.57740.2436 -0.7793 -0.57740.7967 -0.1787 0.5774S =3.7527 00 1.38460 0V =0.0825 0.99660.9966 -0.0825Podemos comprobar que la raz cuadrada de los autovalores de AtA son los valores sin-gulares de A:>>sqrt(eig(A*A))ans =1.38463.7527Vease que la funci on sqrt ha actuado sobre cada uno de los elementos del vector columnaformado por los autovalores de AtA.Naturalmente la descomposici on en valores singulares tambien es posible para matricescon elementos complejos:>>C=[2+i -i;3 3+2*i];>>[U,S,V]=svd(C)1Puesto que AA es hermtica semidenida positiva sus autovalores son no negativos.46 CAPITULO 4. AUTOVALORES Y POLINOMIOSU =0.2292 + 0.0156i -0.7696 - 0.5958i0.9710 + 0.0660i 0.1817 + 0.1406iS =4.7900 00 2.2485V =0.7071 -0.70710.6325 - 0.3162i 0.6325 - 0.3162iLa funcion svd permite la posibilidad de incluir varios argumentos de salidas. Enconcreto, podemos utilizar uno o tres argumentos de salida.En el caso de la utilizaci on desvd con tres argumentos se obtienen las tres matrices anteriores y cuando se utiliza un soloargumento de salida, se almacenan en el, los valores singulares formando un vector columna.>>MN=[1 2 3;4 5 6;5 7 9]MN =1 4 52 5 73 6 9>>vs=svd(MN)vs =15.66330.81260.0000Notese que uno de los valores singulares de MN es nulo; esto sucede porque MN no es derango maximo.Relacionada con el algoritmo de c alculo de los valores singulares de una matriz A seencuentra la orden pinv(A) que calcula la pseudoinversa (de Moore-Penrose) de A. Recor-damos que la pseudoinversa de una matriz A de orden m n (denotada por A+) puede sercalculada, una vez obtenida la descomposici on en valores singulares de A, como A+= V S+Udonde S+es la matriz diagonal de orden n m cuyos elementos diagonales no nulos son losinversos de los elementos no nulos de S.Recuerdese ademas, que A+A = I y que la pseu-doinversa de A coincide con la inversa de A si esta es cuadrada y regular.>>ps=pinv(A)ps =0.4444 -0.5556 -0.11110.1111 0.1111 0.2222>>ps*Aans =1.0000 -0.00004.3. TRATAMIENTO DE POLINOMIOS 470.0000 1.0000>>AA=[1 2;5 1];>>inv(AA)ans =-0.1111 0.22220.5556 -0.1111>>pinv(AA)ans =-0.1111 0.22220.5556 -0.11114.3 Tratamiento de polinomiosEl tratamiento que MATLAB realiza con los polinomios en una indeterminada es muysimple: s olo hace falta introducir los coecientes del polinomio (en orden decreciente depotencias) en un vector la2. Aquellos resultados que nos muestren como salidas polinomiostambien seran recogidos de esta forma.As, el polinomio p(x) = 2x33x + 7 es representado por MATLAB como>>p=[2 0 -3 7]p =2 0 -3 74.3.1 Polinomio caracterstico de una matriz cuadradaLa instrucci on poly(A) nos proporciona los coecientes del polinomio caraterstico (pA() =det(I A)) de una matriz cuadrada A.>>M=[4 6 -2 ;2 4 10;-12 4 -3]M =4 6 -22 4 10-12 4 -3>>pcM=poly(M)pcM =1.0e+03 *0.0010 -0.0050 -0.0840 1.0040>>pcM=rats(poly(M))pcM =1 -5 -84 10042La dimesion del vector la sera mayor en una unidad que el grado del polinomio.48 CAPITULO 4. AUTOVALORES Y POLINOMIOSLuego el polinomio caracterstico de M espC() = 35284 + 1004y podemos observar que el determinante de M es, salvo signo, el termino independiente delpolinomio caraterstico de M y que el coeciente de 2, salvo signo, nos lo proporciona latraza de M.>>det(M)ans =-1004>>trace(M)ans =54.3.2 Operaciones con polinomiosPuesto que los polinomios se recogen en vectores las, la suma y diferencia de dos polinomiosse realiza con las operaciones suma y diferencia (+ y ) de matrices. Pero, tengase en cuentaque para sumar o restar matrices estas deben tener la misma dimensi on y por consiguiente,podemos realizar suma o diferencia de polinomios, siempre y cuando, estos tengan el mismogrado.Por ejemplo si p(x) = 3x3+ 2x2 x + 1 y q(x) = 7x3+ 3x2+ 2x 15 la suma ydiferencia de ambos se realiza como sigue:>>p=[3 2 -1 1],q=[-7 3 2 -15]p =3 2 -1 1q =-7 3 2 -15>>s=p+qs =-4 5 1 -14>>d=p-qd =10 -1 -3 16En cambio si q(x) = 3x2+ 2x 15 la suma de ambos polinomios no puede realizarse deforma tan simple:>>q=[3 2 -15]q =3 2 -15>>p+q??? Error using ==> +Matrix dimensions must agree.4.3. TRATAMIENTO DE POLINOMIOS 49El lector debera pensar una estrategia que permita sumar o restar polinomios de gradosdiferentes. La multiplicacion y divisi on de los polinomios p y q se llevan a cabo con lasfunciones conv(p,q) y [c,r]=deconv(p,q). Para la funci on deconv se entiende que en cse guarda el cociente de la divisi on de p entre q y en r el resto de la misma.>>p=[1 -2 1],q=[1 -1 1]p =1 -2 1q =1 -1 1>>conv(p,q)ans =1 -3 4 -3 1Por el c alculo anterior se obtiene que(x22x + 1)(x2x + 1) = x43x3+ 4x23x + 1El cociente y el resto de la divisi on x52x4x3+ 7x26x + 2x22x + 1se calculan mediante:>>p=[1 -2 -1 7 -6 2]p =1 -2 -1 7 -6 2>>q=[1 -2 1]q =1 -2 1>>[c,r]=deconv(p,q)c =1 0 -2 3r =0 0 0 0 2 -1Es decir, c(x) = x32x + 3 y r(x) = 2x 1. Compruebese.Incluimos en esta secci on una funcion que nos parece bastante interesante. Se trata dela funci on residue que nos proporciona, a grandes rasgos, la descomposici on en fraccionessimples de una funci on racional cuyo denominador posee races reales simples. De esta forma,la instrucci on [a,r,k]=residue(p,q) obtiene la descomposici onP(x)Q(x) =a1x r1 + +anx rn +k(x)y almacena las constantes ai en el vector a, las races ri en el vector r y el polinomio k(x) enel vector la k.Por ejemplo, la descomposici on en fraciones simples dex2x21 viene dada por:50 CAPITULO 4. AUTOVALORES Y POLINOMIOS>>[a,r,k]=residue([1 0 0],[1 0 -1])a =-0.50000.5000r =-11k =1Es decir,x2x21 = 0.5x + 1 +0.5x 1 + 1La funcion residue act ua en MATLAB como su propia inversa, pues si se utiliza contres argumentos de entrada y dos de salida, es decir, de la forma [p,q]=residue(a,r,k),nos proporciona la funcion racional que tiene como descomposici on en fracciones simples losvectores a, r y k.>>[p,q]=residue(a,r,k)p =1.0000 0 0q =1 0 -14.3.3 Races de polinomiosSi el polinomio p(x) ha sido introducido en un vector p de la forma descrita anteriormente,las races (complejas) de p(x) pueden ser calculadas con la orden roots(p). Las races de p,que pueden estar repetidas, se almacenar an en un vector columna.Por ejemplo, las soluciones de la ecuaci on x21 = 0 se obtiene f acilmente:>>p=[1 0 -1]p =1 0 -1>>rp=roots(p)rp =-11Si el polinomio posee races complejas MATLABtambien nos las proporciona. Las racesde q(x) = x32x2+x 2 son:4.3. TRATAMIENTO DE POLINOMIOS 51>>q=[1 -2 1 -2]q =1 -2 1 -2>>rq=roots(q)rq =2.0000-0.0000 + 1.0000i-0.0000 - 1.0000iPodemos evaluar el valor de un polinomio p en un cierto punto x R con la ayuda de lafuncion polyval(p,x). De esta forma, por ejemplo, podemos comprobar que p y q se anulan(salvo errores de redondeo) en las componentes de rp y rq, respectivamente:>>polyval(p,rp(1)),polyval(p,rp(2))ans =0ans =0>>polyval(q,rq(1)),polyval(q,rq(2)),polyval(q,rq(3))ans =-6.6613e-15ans =0+ 2.2204e-16ians =0- 2.2204e-16iPuede tambien evaluarse el valor del polinomio en una serie de puntos, sin m as queintroducir estos puntos en un vector x y teclear la orden anterior. Los valores de r(x) =x2x + 1 para x = 1, x = sqrt(2) y x = 1/2 son>>r=[1 -1 1]r =1 -1 1>>x=[1 sqrt(2) -1/2]x =1.0000 1.4142 -0.5000>>polyval(r,x)ans =1.0000 1.5858 1.7500El algoritmo que MATLAB utiliza para calcular las races de un polinomio esta basadoen la funci on compan(p) que determina la matriz compa nera del polinomio p; esto es, la52 CAPITULO 4. AUTOVALORES Y POLINOMIOSmatriz cuyo polinomio caracterstico es, salvo constante multiplicativa, el polinomio dado.Por ejemplo, la matriz compa nera del polinomio p(x) = 2x22x + 4 es:>>p=[2 -2 4]p =2 -2 4>>A=compan(p)A =1 -21 0y su polinomio caracterstico es proporcional a p:>>pA=poly(A)pA =1 -1 2Una vez que MATLAB obtine la matriz compa nera de un polinomio p, con ayuda dela funcion eig, calcula los autovalores de la misma, que, coinciden, naturalmente, con lasraces de p.>>roots(p)ans =0.5000 + 1.3229i0.5000 - 1.3229i>>eig(A)ans =0.5000 + 1.3229i0.5000 - 1.3229i4.3.4 Aproximacion por polinomios en el sentido de los mnimos cuadradosDados dos vectores x e y, de la misma dimension, la instrucci on polyt(x,y,n) calcula el (oun) polinomio de grado n que mejor se aproxima (en el sentido de los minimos cuadrados)a los pares de puntos (x(i), y(i)). En particular, si x e y son vectores de n + 1 componentes(con todas las componentes de x distintas) la orden anterior nos proporciona el polinomioque interpola los valores (xi, yi), i = 1, . . . , n + 1.Vamos a aplicar la funci on polyta la resoluci on del siguiente problema:En un experimento para determinar la capacidad de orientaci on se coloca a unindividuo en una habitaci on especial y despues de un cierto tiempo en ella se lepide que encuentre el camino de salida de un laberinto. Se obtienen los siguientesresultados:4.3. TRATAMIENTO DE POLINOMIOS 53Tiempo en la habitacion (horas): 1 2 3 4 5 6Tiempo en salir del laberinto (minutos): 0.8 2.1 2.6 3 3.1 3.3Se pide:1. Encontrar la recta que mejor aproxime a los datos anteriores.2. Con la recta obtenida, estimar el tiempo que tardara en salir del laberinto una personaque ha permanecido en la habitacion 10 horas.Puesto que nos piden una recta debemos encontrar el polinomio de grado uno que mejoraproxime a los punto de la tabla anterior:>>x=1:6x =1 2 3 4 5 6>>y=[0.8 2.1 2.6 3 3.1 3.3]y =0.8000 2.1000 2.6000 3.0000 3.1000 3.3000>>recta=polyfit(x,y,1)recta =0.4543 0.8933>>rats(recta)ans =159/350 67/75Luego la recta que mejor aproxima, en el sentido de los mnimos cuadrados, viene dadapor la ecuaci on y = 159/350x + 67/75 y el tiempo estimado para salir del laberinto despuesde diez horas en la habitaci on se obtiene como sigue:>>estimado=polyval(recta,10)estimado =5.4362Es decir, el tiempo estimado para salir del laberinto es 5.4362 minutos.Una nueva estimaci on se puede obtener calculando el polinomio de interpolaci on de lospuntos (xi, yi) para i = 1, . . . , 6. Esto se consigue con la siguientes instrucciones:>>poliinterp=polyfit(x,y,5)poliinterp =0.0125 -0.2250 1.5542 -5.2250 9.0833 -4.4000>>rats(poliinterp)ans =1/80 -9/40 373/240 -209/40 109/12 -22/554 CAPITULO 4. AUTOVALORES Y POLINOMIOS1 2 3 4 5 6 7 8 9 1001234567Tiempo en la habitacionTiempo en el laberintoAproximacion por minimos cuadradosFigura 4.1: Recta de regresi on>>estimado2=polyval(poliinterp,10)estimado2 =118.1000Es decir, el polinomio de interpolaci on tiene por ecuacion y = 1/80x59/40x4+373/240x3209/40x2+109/12x22/5 y el tiempo estimado son 118.1 minutos3. La recta de mejor aprox-imacion puede contemplarse en la siguiente gura, que ha sido realizada con MATLAB. (Enel captulo dedicado a las posibilidades gr acas aprenderemos a generarla).4.3.5 La orden polyvalm y semejantesEn la subseccion anterior hemos visto como MATLAB puede propocionarnos el valor deun polinomio p en una cierta colecci on de puntos gracias a la funci on polyval.Pues biensi p(x) = cnxn+ cn1xn1+ + c1x + c0, el valor de p en la matriz A, i.e., p(A) =cnAn+cn1An1+ +c1A+c0 puede obtenerse con la funcion polyvalm(p,A).>>p=[1 2 -1]p =1 2 -1>>A=[1 2;-1 1]A =1 2-1 13Observese la diferencia tan enorme entre las dos estimaciones.4.3. TRATAMIENTO DE POLINOMIOS 55>>polyvalm(p,A)ans =0 8-4 0Se puede as comprobar el Teorema de Cayley-Hamilton que arma que el polinomiocaracterstico de una matriz se anula en dicha matriz. (Tengase en cuenta los errores deredondeo).>>pcA=poly(A)pcA =1.0000 -2.0000 3.0000>>polyvalm(pcA,A)ans =1.0e-15 *0.4441 00 0.4441La orden polyvalm nos permite evaluar un polinomio matricialmente, pero no s olopodemos evaluar polinomios matricialmente, sino que otras funciones elementales puedenser evaluadas de forma matricial. As por ejemplo, MATLAB posee las funciones expm,logm y sqrtm que determinan la exponencial matricial, el logaritmo matricial y la razcuadrada matricial, respectivamente.>>expoA=expm(A)expoA =0.4239 3.7972-1.8986 0.4239>>raizA=sqrtm(A)raizA =1.1688 + 0.0000i 0.8556 + 0.0000i-0.4278 + 0.0000i 1.1688 - 0.0000i>>logaritA=logm(A)logaritA =0.5493 - 0.0000i 1.3510 + 0.0000i-0.6755 + 0.0000i 0.5493 - 0.0000iNotese que, salvo errores de redondeo, sqrtm(A)*sqrt(A)=A y logm(expm(A))=A.>>logariteA=logm(expoA)logariteA =1.0000 2.0000 - 0.0000i-1.0000 - 0.0000i 1.0000 + 0.0000i>>raizA*raizA56 CAPITULO 4. AUTOVALORES Y POLINOMIOSans =1.0000 + 0.0000i 2.0000 + 0.0000i-1.0000 + 0.0000i 1.0000 - 0.0000iNo solo las anteriores funciones pueden ser evaluadas matricialmente, sino que cualquierfuncion elemental puede ser evaluada en una matriz. Esto se consigue con la ayuda de lafuncion de MATLAB funm(A,funci on) que determina el valor de funci on en la matrizA. Por el ejemplo, sen(A) es:>>sA=funm(A,sin)sA =1.8329 + 0.0000i 1.4786 - 0.0000i-0.7393 - 0.0000i 1.8329 - 0.0000iCaptulo 5Posibilidades gracasA continuacion detallamos algunas de las posibilidades de representaci on gr aca que nosofrece MATLAB. Como siempre recomendamos una viva lectura del manual para una visi onmas extensa de las posibilidades de visualizaci on gr aca.5.1 Gracos en el plano5.1.1 Poligonales y curvasLa curva m as simple que podemos dibujar es una poligonal.Para ello, basta introducir unvector M y teclear plot(M); esto produce la representaci on de la poligonal que une lospuntos (i, M(i)), i = 1, . . . , max(size(M)). La gura 5.1 recoge esta poligonal.>> M=[2 4 6 -2 0];>> plot(M)Podemos poner un ttulo a la graca y etiquetas a los ejes mediante las instrucciones:>> title(POLIGONAL)>> xlabel(eje de abcisa)>> ylabel(eje de ordenada)Para obtener un mallado del gr aco tecleamos>> gridDe manera an aloga, si introducimos dos vectores x e y, de la misma dimensi on, la in-strucci on plot(x,y) nos proporcionar a la gr aca que se obtiene al unir los puntos (x(i),y(i)).En la gura 5.2 representamos la curva y = x2para x [3, 4] con este procedimiento.>> x=-3:.1:4;>> px=x.^2-1;>> plot(x,px),title(PARABOLA),gtext(Figura 5.2)>> grid5758 CAPITULO 5. POSIBILIDADES GRAFICAS1 1.5 2 2.5 3 3.5 4 4.5 5-2-10123456POLIGONALeje de abcsisaeje de ordenadaFigura 5.1: Una poligonal-3 -2 -1 0 1 2 3 4-20246810121416PARABOLAFigura 5.2Figura 5.2: Una parabola5.1. GRAFICOS EN EL PLANO 59-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1-0.500.511.522.53PARBOLAFigura 5.3: Cambio en los ejesLa orden gtext(texto) permite situar el texto entre comillas en cualquier punto deun graco bidimensional, pues tecleando gtext(texto) despues de realizar un gr aco nosaparecer a este en pantalla y el vector puntero de nuestro raton.Seguidamente situamos elpuntero donde queramos poner el texto y pulsamos, por ultimo, el boton del raton paradisponer el texto en el lugar elegido.Para modicar la escala de los ejes en los que se representa el gr aco (bidimensional)podemos utilizar axis([xmin xmax ymin ymax]) para denir los intervalos [xmin,xmax] y[ymin,ymax] donde se mueven los valores de x e y respectivamente. As, las instrucciones>>plot(x,px),title(PARABOLA),grid>>axis([-2 2 -1 3])producen un cambio de escala en la gura 5.2 (ver gura 5.3). Para anular el efecto de estaorden (i.e., el cambio de escala) y volver a la escala por defecto tecleamos axis.MATLAB permite, mediante la orden plot(x,y,simb), elegir el tipo de lnea y el coloral representar una curva. En este caso, simb se trata de una cadena de uno o varios caracteresque determinan el tipo de lnea y/o el color elegidos.Tambien podemos dibujar simultaneamente varias curvas con una instruccion de la formaplot(x1,y1,simb1,x2,y2,simb2,...,xN,yN,simbN)que mostrara en pantalla todas las curvas (xI,yI) (con la opci on simbI) en unico gr aco.En la gura 5.4 se ilustra el uso conjunto de estas dos ultimas posibilidades.60 CAPITULO 5. POSIBILIDADES GRAFICAS-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1-0.500.511.522.53DISTINTOS TIPOS DE LINEASFigura 5.4: Distintos tipos de lnea>> t=-8:.2:8;>> Y1=sin(t);>> Y2=cos(t);>> r=1/16*t+1/2;>> plot(x,px,*,t,Y1,-.,t,Y2,o,t,r,:)>> axis([-2 2 -1 3])>> title(DISTINTOS TIPOS DE LINEA)5.1.2 Curvas en polaresPara dibujar una curva dada en coordenadas polares disponemos del comando polar(t,r)donde t representa el argumento y r el radio (m odulo). Como ejemplo, en la gura 5.5 serepresenta una espiral logartmica:>> th=0:.08:100;>> R=exp(0.1*th);>> polar(th,R)>> title(ESPIRAL LOGARITMICA)Para obtener una representaci on sin el sistema de referencia procederemos como se indicaa continuacion:>> clf>> axis off5.1. GRAFICOS EN EL PLANO 61ESPIRAL LOGARITMICA50001e+0041.5e+0042e+0042.5e+004302106024090270120300150330180 0Figura 5.5: Espiral logartmica>> hold on>> polar(th,R)>> title(ESPIRAL LOGARITMICA)>> hold offLa orden clf limpia la pantalla gr aca. El comando axis o desactiva los ejes delgraco que nos disponemos a realizar. La orden hold on hace que se superpongan en dichaventana todos los gr acos que se dibujen a continuacion. La orden hol o anula holdon. La utlizacion de estas dos ordenes reviste interes, adem as de en este caso concreto, enaquellos casos en los que interese visualizar simult aneamente distintas gr acas en una mismagura.5.1.3 Curvas en parametricasEl siguiente ejemplo ilustra la representaci on de una curva dada mediante sus ecuacionesparametricas.>> t=0:.1:2*pi;>> x=5*cos(t)-cos(5*t);>> y=5*sin(t)-sin(5*t);>> plot(x,y)>> grid>> title(EPICICLOIDE)>> axis(square)62 CAPITULO 5. POSIBILIDADES GRAFICASESPIRAL LOGARITMICAFigura 5.6: Espiral sin ejes-6 -4 -2 0 2 4 6-6-4-20246EPICICLOIDEFigura 5.7: Curva en parametricas5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 63-4 -3 -2 -1 0 1 2 3 4 5 60102030405060Figura 5.8: Diagrama de barras5.1.4 Histogramas y diagramas de barrasEn esta brevsima secci on estudiaremos dos formas m as de representacion bidimensional: lasordenes bar(x,y) y stairs(x,y) que producen diagramas de barras de distintos tipos. Verguras 5.8 y 5.9:>> x=-2:.2:4;>> y=exp(x);>>bar(x,y)>> stairs(x,y)5.2 Curvas en el espacio y supercies5.2.1 Curvas en parametricasLa representaci on de una curva en el espacio dada mediante sus ecuaciones parametricas sehace de modo similar al caso plano. Se utiliza la orden plot3>> t = 0:pi/50:10*pi;>> plot3(sin(t),cos(t),t);>>title(HELICE)64 CAPITULO 5. POSIBILIDADES GRAFICAS-2 -1 0 1 2 3 40102030405060Figura 5.9: Escalera-1-0.500.51-1-0.500.5105101520253035HELICEFigura 5.10: Curva en el espacio5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 65-10-50510-10-50510-0.4-0.200.20.40.60.81EL SOMBREROSuperficieFigura 5.11: Una curiosa supercie5.2.2 SuperciesPara representar una funcion Z = f(x, y) procedemos como sigue:1. Denimos el dominio en que se mueven las variables x e y, mediante[x,y]=meshgrid(valores de x,valores de y)2. Expresamos z como funcion de x e y.3. Dibujamos la supercie mediante la opci on mesh(x,y,z) o mesh(z). Con la primeraorden se tienen en cuenta los intervalos denidos para las variables independientes, perocon las segunda no.La gura 5.11 muestra el siguiente ejemplo:>> [x,y]=meshgrid(-8:.5:8,-8:.5:8);>> R=sqrt(x.^2+y.^2)+eps;>> z=sin(R)./R;>> mesh(x,y,z),title(EL SOMBRERO),text(-2.6,-10,-0.15,Superficie)Si escribimos meshgrid(x) equivale a introducir meshgrid(x,x), con intervalos igualespara las dos variables independientesLa orden text(x,y,z,texto) situa el texto en el punto de coordenadas (x, y, z)1. Siqueremos observar esta supercie desde otros puntos de vista no tenemos mas que elegir los1Tambien exite la orden text(x,y,texto) para gracos bidimensionales66 CAPITULO 5. POSIBILIDADES GRAFICASangulos de giro en horizontal y vertical que queremos aplicar a la gura. Conseguimos lagura girada tecleando, a continuacion de mesh(x,y,z), la orden view(al,el), siendo aly el los angulos elegidos.La pantalla gr aca puede ser dividida en varios trozos en los que se pueden realizardistintos gracos. Esto se consigue mediante una instrucci on del tipo subplot(ijk) seguidade una orden de dibujo: la pantalla gr aca quedara dividida en i j trozos y nuestro dibujoaparecer a en el k-esimo.La gura 5.12 combina las ordenes view y subplot:>> subplot(221),mesh(x,y,z),view(45,0)>> subplot(222),mesh(x,y,z),view(45,-25)>> subplot(223),mesh(x,y,z),view(45,-50)>> subplot(224),mesh(x,y,z),view(45,-75)5.2.3 Curvas de nivel y vector gradienteMATLAB permite dibujar las lneas de contorno de una supercie, las curvas de nivel yvectores gradiente.Esto se ilustra en los siguientes ejemplos:En primer lugar dibujamos en la gura 5.13 la supercie de ecuaci on z = xex2y2,utilizando mesh(x,y,z)>>[x,y] = meshgrid(-2:.1:2);>> z = x .* exp(-x.^2 - y.^2);>> mesh(x,y,z)>>title(SUPERFICIE)Para obtener las lneas de contorno escribiremos contour3(x,y,z)>> contour3(x,y,z)>> title(Lineas de contorno)Para obtener las curvas de nivel contour(x,y,z)>> contour(x,y,z)>> title(Curvas de nivel)Si quisieramos identicar las curvas de nivel deberamos utilizar la orden clabel. Parailustrarlo considerar el siguiente ejemplo:>> cs=contour(x,y,z);clabel(cs)>> title(Curvas de nivel)Para obtener la gr aca simult anea de la supercie y de las curvas de nivel utilizaremosmeshc(x,y,z)5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 67-10 0 10 -10 0 10-0.500.51-10010 -10010-0.500.51-10010 -10010-101-10010 -10010-101Figura 5.12: Distintos tipos de vista68 CAPITULO 5. POSIBILIDADES GRAFICAS-2-1012-2-1012-0.500.5SUPERFICIEFigura 5.13: z = ex2y2-2-1012-2-1012-0.4-0.200.20.4Lineas de contornoFigura 5.14: Representaci on realizada con contour35.2. CURVAS EN EL ESPACIO Y SUPERFICIES 69-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-2-1.5-1-0.500.511.52Curvas de nivelFigura 5.15: Utilizaci on del comando contour-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-2-1.5-1-0.500.511.52 -0.4-0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4Curvas de nivelFigura 5.16: Con clabel se etiquetan las curvas nivel70 CAPITULO 5. POSIBILIDADES GRAFICAS-2-1012-2-1012-0.500.5Superficie y curvas de nivelFigura 5.17: Gr aca realizada con meshc>> meshc(x,y,z)>> title(Superficie y curvas de nivel)Si queremos visualizar las curvas de nivel y los vectores gradiente utilizaremos las ordenesgradient y quiver. Esta ultima orden visualiza un vector cuyas componentes vienen dadaspor gradient>> [x,y] = meshgrid(-2:.1:2);>> z = x .* exp(-x.^2 - y.^2);>> [px,py] = gradient(z,.1,.1);>> contour(x,y,z);>> hold on, quiver(x,y,px,py), hold off>> title(Curvas de nivel y gradiente)En el siguiente ejemplo se dibujan las curvas de nivel identic andolas con la opci on man-ual de la orden clabel. Utilizando dicha opci on nos situamos en la vantana graca ypulsamos el rat on encima de la curva que deseemos, seguidamente aparecera junto a ella eln umero que le corresponda.>>[x,y] = meshgrid(-2:.1:2);>> z = x .* exp(-x.^2 - y.^2);>> [px,py] = gradient(z,.1,.1);>> cs=contour(x,y,z);clabel(cs,manual);5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 71-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-2-1.5-1-0.500.511.52Curvas de nivel y vector gradienteFigura 5.18: Utilizaci on de quiver>> hold on, quiver(x,y,px,py), hold off>>title(Curvas de nivel y gradiente)Para gracos tridimensionales las utilizacion de axis es similar al caso bidimensional.Para trabajar con distintas guras simult aneamente, en distintas ventanas, se utilizar a laorden gure(n).72 CAPITULO 5. POSIBILIDADES GRAFICAS-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-2-1.5-1-0.500.511.52Curvas de nivel y vector gradiente -0.1 -0.2 -0.3 -0.4 0.1 0.2 0.3 0.4Figura 5.19: El comando clabel con la opci on manualCaptulo 6Funciones y programas en Matlab.MFicheros6.1 Instrucciones en Matlab: input, if, error, while, break,pause, for . . .En este apartado exponemos el manejo de cheros y funciones dentro de una sesi on deMATLAB. Esta caracterstica es particularmente interesante, ya que nos permitira denirnuevas funciones: que podr an ser utilizadas posteriormente del mismo modo que aquellas deque disponemos en MATLAB; y crear lo que podemos llamar programas, que se ejecutar andentro de una sesion.Los cheros que podemos editar para su utilizaci on desde MATLAB ser an cheros detexto en ASCII, creados por un editor que queda a nuestra elecci on.La extensi on de estoscheros ser a .m.Como hemos advertido los cheros.m (o Mcheros) pueden crearse con dos nalidades:1. Para crear cheros de escritura o programas.2. Para denir funciones por parte del usuario.Los cheros de escritura o programas son cheros del tipo nombre.m que contienen unasucesion de instrucciones de MATLAB. Al teclear dentro de una sesion el nombre del cherose produce la ejecuci on secuencial de todas las instrucciones en el contenidas. Estos archivospueden ser utilizados de dos formas: Como cheros de datos. Como programas.Por ejemplo, si el Mchero matrices.m contiene7374 CAPITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROSA=[2 4 -5;8 -.07 1];B=[2 -3;0 4]al teclear>>matricesobtenemosB =2 -30 4La matriz A no aparece en pantalla debido al ; sin embargo, a partir de este momento, lasmatrices A y B podran ser utilizadas en la sesi on como si hubieran sido denidas de maneraexplcita. Naturalmente, esto resulta interesante, entre otras cosas, si vamos a trabajar conuna matriz sucientemente grande en distintas sesiones de MATLAB.Al disponer MATLAB de instrucciones del tipo IF, WHILE y FOR (an alogas a las quepodemos encontrar en lenguajes de programacion como FORTRAN o PASCAL) si un Mchero nombre.m contiene una sucesion de instrucciones de este tipo que describen unacierta tarea, al teclear dentro de una sesi on el nombre del chero, dichas instrucciones seejecutar an secuencialmente dando un resultado similar a la ejecuci on de un programa por uninterprete.Antes de continuar describiremos las instrucciones if, while y for anteriormentemencionadas y algunas otras que resultan utiles en este contexto.Para ello comentaremos,dentro de un ejemplo concreto, el uso y posibilidades de estas ordenes.El chero bg.m contiene:%BG: Metodo de biseccon o dicotomia.% El programa BG resuelve la ecuacion g(x)=0 (para una funcion% g que debe estar definida en un archivo.m) por el metodo% de dicotomia (o biseccion).gc=0;c=0;disp(Deme el extremo inferior del intervalo)a=input(a= );disp(Deme el extremo superior del intervalo)b=input(b= );if b0error(El intervalo podria no contener solucion)endi=0;while b-a>=epi=i+1;c(i)=(a+b)/2;gc(i)=feval(g,c(i));if gc(i)==0disp(La solucion se ha obtenido en uno de los puntos medios)disp(de los subintervalos)solucion=c(i)returnendif feval(g,a)*gc(i)>feval(sin,1/2)ans =0.4794>>feval(log,-1)ans =0 + 3.1416iEl conjunto de instruccionesif feval(g,a)*gc(i)bgDeme el extremo inferior del intervaloa= 1Deme el extremo superior del intervalob= -1??? Error using ==> bgIntervalo degeneradoLas instrucciones de tipo WHILE son f aciles de entender. La estructura general es:while condici oninstruccionesend78 CAPITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROSlo que provoca la ejecuci on de las instrucciones detalladas mientras la condici on se verique.En el programa bg el bloque de instrucciones WHILE es:while b-a>=epi=i+1;c(i)=(a+b)/2;gc(i)=feval(g,c(i));if gc(i)==0disp(La soluci n se ha obtenido en uno de los puntos medios)disp(de los subintervalos)solucion=c(i)endif feval(g,a)*gc(i)0b=c(i);elsea=c(i);endendLa instrucci on return detiene por completo la ejecuci on del programa. En nuestroejemplo se ha utilizado para romper el programa cuando la soluci on es trivial (i.e., algunosde los extremos del intervalo) o se ha alcanzado la soluci on exacta en los puntos medios delos subintervalos.Una vez que el ujo del programa llega a la a instrucioniop=menu(Desea la representacion graca de las Aproximaciones,...Si,No);aparece en pantalla2el siguiente men u:----- Desea la representacion grafica de las Aproximaciones -----1) Si2) NoSelect a menu number:y el programa se detiene moment aneamente a la espera de introducir uno de los valoresde opci on. Si introducimos el valor 1, entonces la variable iop tomara el valor 1 y larepresentaci on se llevara a cabo, debido a la inclusi on en el programa del bloque:2Si utilizamos MATLAB en un entorno de ventanas aparecer a una ventana con botones de opcion.6.1. INSTRUCCIONES ENMATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR. . .if iop==1plot(gc)gridtitle(Representacion graca de la aproximacion)endSi por el contrario seleccionamos el n umero 2, la representaci on no se realizara.Si se desea interrumpir por un momento el programa (por ejemplo,para comprobaralgunos datos) incluimos en el la orden pause que lo detendr a hasta que alguna teclasea pulsada. Tambien disponemos de la opci on pause(n) que lo detiene por n segundos.Para terminar comentamos los bucles FOR. La estructura de uno de estos bucles es:for expresi oninstruccionesendPor ejemplo, usando FOR podemos crear una matriz triangular inferior mediante dosbucles anidados:>> for i=1:4for j=1:1:iA(i,j)=1;endend>> AA =1 0 0 01 1 0 01 1 1 01 1 1 1Por ultimo, se nalamos que los programas en MATLAB, como el programa bg, noposeen variables internas al mismo. Esto es, cualquier variable denida en el programa pasa,automaticamente, a formar parte de las variables del espacio de trabajo. Por consiguiente, sien una sesion denimos la variable a como:>>a=[1 2;2 4]a =1 22 4y seguidamente calculamos la soluci on de log x = 0 en [1/2, 3] con la ayuda de bg:80 CAPITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS>>bgDeme el extremo inferior del intervaloa= 1/2Deme el extremo superior del intervalob= 3Introduzca el nombre del archivo donde se encuentra la funcionnombre de funcion= logDeme el valor del test de paradaep= 0.00001solucion =1.0000El numero de iteraciones es:i =18----- Desea la representacion grafica de las Aproximaciones -----1) Si2) NoSelect a menu number: 2aclaramos que, sin darnos cuenta, hemos perdido la matriz a, pues en nuestro programa estavariable va tomando los valores del extremo inferior de los subintervalos que se generan en elmetodo de biseccion:>>format long>>aa =0.99999237060547Si las variables denidas en una programa pasan a formar parte del espacio de trabajo,una vez que el programa se ha ejecutado completamente tenemos la capacidad de obtener losvalores de algunas variables denidas en el. Por ejemplo, podemos saber cual es el valor dec(9) en el programa bg:>>c(9)ans =1.00296.2. DEFINICION DE FUNCIONES 816.2 Denicion de funcionesPodemos utilizar Mcheros para denir nuevas funciones no incorporadas al conjunto defunciones MATLAB.Si queremos denir una funcion fun(x1,...,xN)=[y1,...,yM] con N matrices como argumen-tos de entrada y M matrices como argumentos de salida crearemos un Mchero de nombrefun.m (es esencial la correspondencia entre el nombre de la funci on y el del chero) cuyaprimera lnea debe serfunction [y1,...,yM]=fun(x1,...,xN)y las restantes contendr an la propia denici on de la funci on fun(x1,...,xN).Por ejemplo, si el chero house.m contiene:%HOUSE: Matriz de Householder% La funcion house(x) calcula la matriz de Householder% asociada al vector columna x (si x=0 se toma la identidad)function y=house(x)[m,n]=size(x);if any(x)==0,y=eye(m);return,endI=eye(m);N=x*x;y=I+(-2/N)*(x*x);y dentro de una sesion MATLABintroducimos un vector columna v y tecleamos H=house(v)la variable H tomara como valor la matriz de Householder asociada al vector v, es decir,H = I 2xxtxtx>> v=[1 4 -7 0];>> H=house(v)H =0.9697 -0.1212 0.2121 0-0.1212