Tesis Doctoral Computación de Altas Prestaciones para el
Transcription
Tesis Doctoral Computación de Altas Prestaciones para el
Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia Tesis Doctoral Computación de Altas Prestaciones para el Cálculo de Funciones de Matrices y su Aplicación a la Resolución de Ecuaciones Diferenciales presentado por: J. Javier Ibáñez González Director: Dr. D. Vicente Hernández García Valencia, 2006 Resumen La presente memoria se enmarca dentro de la línea de investigación de Computación de Altas Prestaciones para el Cálculo de Funciones de Matrices y su Aplicación a la Resolución de Ecuaciones Diferenciales. Este campo de investigación está teniendo un gran auge en los últimos años, ya que proporciona soluciones a cuestiones muy diversas como son la simulación de fenómenos físicos o la resolución de problemas de control. La tesis se centra, fundamentalmente, en el desarrollo de métodos y la implementación de algoritmos que calculan Funciones de Matrices, y su aplicación a la resolución de Ecuaciones Diferenciales Ordinarias (EDOs) y Ecuaciones Diferenciales Matriciales de Riccati (EDMRs). El punto de partida del trabajo desarrollado ha sido el estudio del estado del arte de cada una de esas áreas, proponiéndose nuevos métodos y algoritmos que, de algún modo, mejoran los ya existentes. También se han explorado diversos campos de aplicación de este tipo de aproximaciones. Uno de ellos, la propagación de rayos luminosos en fibras de cristal fotónico y la posibilidad de controlar su comportamiento usando medios periódicos, está siendo una de las perspectivas más prometedoras en la búsqueda de alternativas a la tecnología de los semiconductores. En este sentido, la Computación de Altas Prestaciones permite, mediante la simulación, conocer el comportamiento de la luz en esos medios, dando soporte experimental a las cuestiones teóricas que en la actualidad se están investigando. Para obtener un software de calidad, se ha utilizado un paradigma de ciclo de vida de tipo semiautomático. Además, se han realizado numerosas pruebas que han permitido determinar, por un parte, los parámetros óptimos de los algoritmos implementados y, por otra, analizar la precisión y eficiencia del código implementado. Resum La present memòria s’emmarca dins la línia d’investigació de Computació d’Altes Prestacions per al Càlcul de Funcions de Matrius i la seua Aplicació a la Resolució d’Equacions Diferencials. Este camp d’investigació està tenint una gran expansió en els últims anys, ja que proporciona solucions a qüestions molt diverses com són la simulació de fenòmens físics o la resolució de problemes de control. La tesi se centra, fonamentalment, en el desenvolupament de mètodes i la implementació de algoritmes que calculen Funcions de Matrius, i la seua aplicació a la resolució d’Equacions Diferencials Ordinàries (EDOs) i Equacions Diferencials Matricials de Riccati (EDMRs). El punt de partida del treball realitzat ha sigut l’estudi de l’estat de l’art de cada una d’eixes àrees, proposant-se nous mètodes i algoritmes que, d’alguna manera, milloren els ja existents. També s’han explorat diversos camps d’aplicació d’esta tipus d’aproximacions. Un d’ells, la propagació de rajos lluminosos en fibres de cristall fotònic i la possibilitat de controlar el seu comportament usant medis periòdics, està sent una de les perspectives més prometedores en la busca d’alternatives a la tecnologia dels semiconductors. En este sentit, la Computació d’Altes Prestacions permet, per mitjà de la simulació, conéixer el comportament de la llum en eixos medis, donant suport experimental a les qüestions teòriques que en l’actualitat s’estan investigant. Per a obtindre un software de qualitat, s’ha utilitzat un paradigma de cicle de vida de tipus semiautomàtic. A més, s’han realitzat nombroses proves que han permés determinar, per una part, els paràmetres òptims dels algoritmes implementats i, d’una altra, analitzar la precisió i eficiència del codi implementat. Abstract The present memory is framed in the research field of High-Performance Computing of Matrix Functions and its Application to the Solution of Differential Equations. This research field is having an important growth in the last years, since it provides solutions to very diverse questions, such the simulation of physical phenomena or the treatment of control problems. The thesis is focused, fundamentally, on the development of methods and the implementation of algorithms that compute Matrix Functions, and its application to the solution of Ordinary Differential Equations (ODEs) and Differential Matrix Riccati Equations (DMREs). The starting point of the developed work has been the study of the state-of-the-art of each one of those areas, setting out new methods and algorithms that, in some way, improve the existing ones. Diverse fields of application of this type of approaches have also been explored. One of them, the propagation of light beams in photonic crystal fibers and the possibility of controlling their behaviour using periodic means, is one of the most promising perspectives in the search of alternatives to the semiconductors technology. In this sense, the High-Performance Computing allows, by means of the simulation, to know the behaviour of the light in those means, giving experimental support to the theoretical questions that at the present time are the subject of research. In order to obtain quality software, a semiautomatic life cycle has been used. In addition, numerous tests have been carried out, which have allowed, on the one hand, to the determine optimal values for the parameters of the implemented algorithms and, on the other hand, to analyze the precision and efficiency of the implemented code. Agradecimientos Al llegar al final de un largo viaje, uno contempla todo el camino recorrido, y recuerda cada una de las etapas por las que ha ido pasando; en especial, suele recordar como comenzó y como ha llegado a esa meta final. Todo ese trayecto ha trascurrido por numerosas dificultades, pero gracias a la familia, amigos y compañeros de trabajo, ha llegado a buen término. Por todo ello quiero expresar mi más profundo agradecimiento a todos aquellos, que de alguna manera, han contribuido a este feliz desenlace. En primer lugar quiero agradecer especialmente toda la ayuda y apoyo que he recibido durante todo este tiempo a mi director de tesis Dr. Vicente Hernández García. De él quiero destacar su profundo conocimiento de las materias desarrolladas en la tesis, su rigurosidad científica, su clara visión de los aspectos que pudieran ser novedosos y sobre todo por la paciencia y confianza que siempre ha depositado en mí. Agradezco también a mis compañeros de viaje Enrique Arias y Jesús Peinado, por sus constantes apoyos y compartir con ellos tareas de investigación; a mi compañero de despacho Juan Garayoa, por todo lo compartido en los muchos años que nos conocemos y por la ayuda que siempre he tenido de él; a Pedro López, por su constante apoyo y sabios consejos; a Pedro Ruiz, por el camino que hemos iniciado y el que nos queda por recorrer; a mis compañeros de la asignatura de CNU Victor García e Ignacio Blanquer, por toda la ayuda que en numerosas ocasiones me han brindado. Tampoco quiero olvidar a mis compañeros del grupo de investigación Antonio Vidal, Vicente Vidal, José E. Román, David Guerrero, José Miguel Alonso, Fernando Alvarruiz, Gabriel García, Germán Vidal, etc., por todos los consejos y ayudas que en muchas ocasiones he recibido de ellos. En general, quiero agradecer a todos los compañeros del Departamento de Sistemas Informáticos y Computación de la Universidad Politécnica de Valencia por la ayuda que en algún momento me hayan podido dar. Quiero agradecer también toda la ayuda y colaboración de Albert Ferrando, Pedro Fernández de Córdoba y Mario Zacarés, que me ha permitido conocer un área de investigación tan importante como la Fotónica en la que aplicar los algoritmos de cálculo de Funciones de Matrices desarrollados en esta Tesis . Muchas gracias, como no podía ser menos, a mis amigos Dolores, Javier, Neri, Amalia, Miguel, Rosa, Pablo, José, Laura, Vicente, Juan, Manoli, Abelardo, Gloria, etc., por esos momentos que hemos compartido juntos y que espero sigamos disfrutando. Muchas gracias a mis padres Jacinto y Gloria por darme la vida, y todo el cariño y afecto que, de manera desinteresada, siempre me han mostrado. Gracias también a mi hermana Gloria, por todas las cosas compartidas y por el mutuo afecto que nos tenemos. Agradezco también la comprensión y ánimo que siempre me ha dado mi familia más cercana Pepe, Emilia, Pepe, Eli, Miguel, Cristina, Carlos, Lourdes, Carol, Toni, Andrés, Ani, Maria Jesús, Guillermo, Miguel Ángel, Maria José, Marivi, Silvia, Bernabé, etc., y mis sobrinos Isabel, Carlos, Patricia, Victor, Adrián, Javier, Maria Jesús, Guillermo. Por último, gracias a Mari, amiga, esposa y compañera por todo el cariño compartido desde nuestra adolescencia, y por todo el apoyo, paciencia y comprensión que siempre ha tenido conmigo, y a mis hijos Jorge y Álvaro, por el cariño que siempre recibo de ellos. ÍNDICE GENERAL Capítulo 1 Introducción......................................................................... 1 1.1 Resumen de Contenidos.................................................................................... 1 1.2 Objetivos y Aportaciones de la Tesis................................................................ 1 1.3 Metodología...................................................................................................... 4 1.4 Estructura de la Tesis....................................................................................... 7 Capítulo 2 Estado del Arte .................................................................. 11 2.1 Resumen de Contenidos.................................................................................. 11 2.2 Funciones de Matrices ................................................................................... 11 2.2.1 Definiciones y Propiedades ................................................................................................11 2.2.2 Funciones de Matrices más Usuales ...................................................................................14 2.2.2.1 Función Exponencial.................................................................................................14 2.2.2.2 Función Signo ...........................................................................................................15 2.2.2.3 Función Raíz Cuadrada .............................................................................................16 2.2.2.4 Función Raíz p-ésima................................................................................................19 2.2.2.5 Función Logaritmo....................................................................................................21 2.2.2.6 Funciones Seno y Coseno .........................................................................................22 2.2.3 Métodos Numéricos para el Cálculo de Funciones de Matrices .........................................23 2.2.3.1 Función Exponencial.................................................................................................23 2.2.3.1.1 Métodos Basados en las Series de Taylor ............................................................23 2.2.3.1.2 Métodos Basados en los Aproximantes de Padé ..................................................23 2.2.3.1.3 Métodos Basados en Integración Numérica .........................................................27 2.2.3.1.4 Métodos Polinomiales ..........................................................................................29 2.2.3.1.5 Métodos Basados en la Descomposición de Matrices ..........................................32 2.2.3.1.6 Métodos Basados en los Subespacios de Krylov..................................................36 2.2.3.2 Función Signo ...........................................................................................................37 2.2.3.3 Función Raíz Cuadrada .............................................................................................39 2.2.3.4 Función Raíz p-ésima de una Matriz.........................................................................41 2.2.3.5 Función Logaritmo....................................................................................................43 2.2.3.6 Función Coseno.........................................................................................................45 2.2.3.7 Caso General.............................................................................................................46 2.2.4 Software de Funciones de Matrices ....................................................................................47 2.2.4.1 Expokit......................................................................................................................47 2.2.4.2 Proyecto “Parallel Computation of Matrix Functions” .............................................47 2.2.4.3 Proyecto “Numerical Analysis of Matrix Functions” ...............................................48 2.3 Ecuaciones Diferenciales Ordinarias (EDOs) ............................................... 48 2.3.1 Definiciones y Propiedades ................................................................................................48 2.3.2 Métodos Numéricos para la Resolución de EDOs..............................................................49 2.3.3 Métodos de un solo Paso ....................................................................................................49 2.3.3.1 Métodos Basados en las Series de Taylor .................................................................49 2.3.3.2 Métodos de Runge-Kutta ..........................................................................................50 2.3.3.3 Métodos Multipaso Lineales .....................................................................................52 2.3.3.3.1 Métodos de Adams...............................................................................................52 2.3.3.3.2 Métodos BDF .......................................................................................................54 2.3.4 Linealización a Trozos de EDOs ........................................................................................55 2.3.5 Software para la Resolución de EDOs................................................................................56 2.4 Ecuaciones Diferenciales Matriciales de Riccati (EDMRs) .......................... 58 2.4.1 Definiciones y Propiedades ................................................................................................58 2.4.2 Métodos de Resolución de EDMRs....................................................................................60 2.4.2.1 Integración Directa....................................................................................................60 2.4.2.2 Métodos de Linealización .........................................................................................60 VII 2.4.2.2.1 Método de Davison-Maki.....................................................................................61 2.4.2.2.2 Procedimiento Iterativo Matricial ASP (Automatic Synthesis Program) .............62 2.4.2.3 Método BDF .............................................................................................................62 2.4.3 Métodos de Resolución de EDMRs Simétricas ..................................................................64 2.4.3.1 Métodos de Linealización .........................................................................................64 2.4.3.1.1 Método de la Exponencial no Negativa................................................................64 2.4.3.1.2 Método de Schur ..................................................................................................65 2.4.3.2 Método de Chandrasekhar.........................................................................................66 2.4.3.3 Algoritmo de Particionado Numérico (APN)............................................................68 2.4.3.4 Método Basado en la Ecuación Algebraica de Riccati (EAR) ..................................70 2.4.3.5 Método de Leipnik ....................................................................................................71 2.4.3.6 Método de la Raíz Cuadrada .....................................................................................72 2.4.3.7 Método de Rusnak ....................................................................................................73 2.4.3.8 Métodos Conservativos y Métodos Simplécticos .....................................................74 2.4.3.9 Métodos BDF para EDMRs de gran Escala..............................................................76 2.4.4 Aplicaciones .......................................................................................................................78 2.4.4.1 Problemas del Control Óptimo..................................................................................78 2.4.4.2 Problemas de Filtrado y Estimación..........................................................................79 2.4.4.3 Sistemas de Parámetros Distribuidos ........................................................................80 2.4.4.4 Reducción de Orden y Desacoplamiento ..................................................................81 2.4.4.5 Resolución de Problemas de Contorno .....................................................................82 2.4.5 Software para la Resolución de EDMRs ............................................................................83 2.5 Conclusiones................................................................................................... 84 Capítulo 3 Cálculo de Funciones de Matrices ................................... 87 3.1 Resumen de Contenidos.................................................................................. 87 3.2 Algoritmos Basados en los Aproximantes Diagonales de Padé..................... 90 3.2.1 Esquema General................................................................................................................90 3.2.2 Determinación de los Polinomios de la Aproximación Diagonal de Padé .........................92 3.2.3 Funciones Polinómicas y Racionales..................................................................................94 3.2.4 Cálculo de Funciones de Matrices ......................................................................................96 3.2.4.1 Función Exponencial.................................................................................................97 3.2.4.2 Función Potencia Fraccionaria ..................................................................................99 3.2.4.3 Función Logaritmo..................................................................................................102 3.2.4.4 Función Coseno.......................................................................................................104 3.2.4.5 Función Seno ..........................................................................................................106 3.3 Algoritmos Basados Descomposición Real de Schur de una matriz ............ 108 3.3.1 Esquema General..............................................................................................................108 3.3.2 Algoritmo Basado en la Reducción a una Forma Diagonal por Bloques..........................109 3.3.3 Algoritmos Basados en la Resolución de la Ecuación Conmutante .................................112 3.3.3.1 Algoritmos Orientados a Columnas y a Diagonales................................................113 3.3.3.1.1 Algoritmo Orientado a Columnas ......................................................................117 3.3.3.1.2 Algoritmo Orientado a Diagonales.....................................................................118 3.3.3.2 Algoritmos Orientados a Bloques ...........................................................................119 3.3.3.3 Algoritmo con Agrupación de Valores Propios Cercanos ......................................121 3.3.4 Algoritmo Basado en los Aproximantes Diagonales de Padé...........................................124 3.4 Conclusiones................................................................................................. 125 Capítulo 4 Linealización a Trozos .................................................... 129 4.1 Resumen de Contenidos................................................................................ 129 4.2 Métodos de Linealización a Trozos para EDOs........................................... 131 4.2.1 EDOs no Autónomas ........................................................................................................131 4.2.1.1 Método Basado en los Aproximantes Diagonales de Padé .....................................135 4.2.1.2 Método Basado en la Ecuación Conmutante...........................................................142 VIII 4.2.1.3 Método Basado en los Subespacios de Krylov .......................................................145 4.2.2 EDOs Autónomas .............................................................................................................149 4.2.2.1 Método Basado en los Aproximantes Diagonales de Padé .....................................151 4.2.2.2 Método Basado en la Ecuación Conmutante...........................................................153 4.2.2.3 Método Basado en los Subespacios de Krylov .......................................................155 4.3 Métodos de Linealización a Trozos de EDMRs ........................................... 158 4.3.1 Resolución de EDMRs con Coeficientes Variables..........................................................158 4.3.1.1 Método Basado en los Aproximantes Diagonales de Padé .....................................160 4.3.1.2 Método Basado en la Ecuación Conmutante...........................................................167 4.3.1.3 Método Basado en los Subespacios de Krylov .......................................................172 4.3.2 Resolución de EDMRs con Coeficientes Constantes .......................................................175 4.3.2.1 Método Basado en los Aproximantes Diagonales de Padé .....................................177 4.3.2.2 Método Basado en la Ecuación Conmutante...........................................................181 4.3.2.3 Método Basado en los Subespacios de Krylov .......................................................184 4.4 Conclusiones................................................................................................. 186 Capítulo 5 Resultados Experimentales ............................................ 189 5.1 Resumen de Contenidos................................................................................ 189 5.2 Cálculo de Funciones de Matrices ............................................................... 190 5.2.1 Funciones Polinómicas y Racionales................................................................................190 5.2.1.1 Resultados Funciones Polinómicas .........................................................................191 5.2.1.2 Resultados Funciones Racionales ...........................................................................194 5.2.2 Rutinas Basadas en los Aproximantes Diagonales de Padé..............................................200 5.2.3 Rutinas Basadas en la Descomposición real de Schur de una matriz ...............................210 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.4 5.4.1 5.4.2 5.5 5.5.1 5.5.2 5.6 Propagación de Ondas Monocromáticas en Fibras de Cristal Fotónico .... 214 Algoritmo Basado en la Diagonalización de una Matriz ..................................................216 Algoritmo Basado en los Aproximantes Diagonales de Padé...........................................217 Algoritmo Basado en la Iteración DB y en los Aproximantes Diagonales de Padé .........218 Resultados.........................................................................................................................218 Resolución de EDOs..................................................................................... 220 EDOs Autónomas .............................................................................................................222 EDOs no autónomas .........................................................................................................237 Resolución de EDMRs .................................................................................. 246 EDMRs con Coeficientes Constantes ...............................................................................249 EDMRs con Coeficientes Variables .................................................................................266 Conclusiones................................................................................................. 280 Capítulo 6 Conclusiones y Líneas Futuras de Investigación ......... 285 6.1 Resumen de Contenidos................................................................................ 285 6.2 Conclusiones Finales.................................................................................... 285 6.2.1 6.2.2 6.2.3 6.2.4 Funciones de Matrices ......................................................................................................285 Aplicación de las Funciones de Matrices .........................................................................286 Resolución de EDOs.........................................................................................................287 Resolución de EDMRs .....................................................................................................288 6.3 Publicaciones en el Marco de la Tesis ......................................................... 290 6.4 Líneas Futuras de Investigación .................................................................. 292 Apéndice A. Conceptos Básicos y Notaciones ................................. 295 Apéndice B. MATLAB...................................................................... 307 IX Resolución de EDOs .......................................................................................................................307 Funciones de Matrices ....................................................................................................................308 Apéndice C. BLAS y LAPACK........................................................ 311 BLAS 312 Convenciones en el BLAS .........................................................................................................312 Estructura del BLAS ..................................................................................................................313 LAPACK ........................................................................................................................................315 Estructura del LAPACK ............................................................................................................315 Tratamiento de Errores en el LAPACK .....................................................................................316 Equilibrado y Condicionamiento en LAPACK..........................................................................319 Proyector Espectral y Separación de Matrices ...........................................................................320 Otras Características del LAPACK............................................................................................322 Argumentos Matriciales ........................................................................................................322 Matrices de Trabajo...............................................................................................................322 Argumento Info .....................................................................................................................322 Determinación del Tamaño de Bloque Óptimo .....................................................................322 Prestaciones del LAPACK.........................................................................................................323 Apéndice D. SGI Altix 3700 .............................................................. 325 Arquitectura ....................................................................................................................................325 Software..........................................................................................................................................325 Compiladores .............................................................................................................................326 Librerías .....................................................................................................................................326 Bibliografía .............................................................................................. 327 X Capítulo 1: Introducción Capítulo 1 Introducción 1.1 Resumen de Contenidos Esta memoria se enmarca dentro de la línea de investigación de Computación de Altas Prestaciones para el Cálculo de Funciones de Matrices y su aplicación a la resolución de problemas que aparecen en ingeniería y en otras áreas de aplicación. Entre los problemas tratados en esta tesis se encuentran la Resolución de Ecuaciones Diferenciales Ordinarias (EDO), la Resolución de Ecuaciones Diferenciales Matriciales de Riccati (EDMRs) y la Simulación de la Propagación de Ondas en Fibras de Cristal Fotónico. Para ello, se han diseñado nuevos métodos y algoritmos, escritos en MATLAB y FORTRAN, que resuelven los problemas citados. La implementación de dichos algoritmos se ha realizado de manera eficiente y portable, desde un punto de vista computacional, al haber utilizado librerías optimizadas de BLAS (Basic Linear Algebra Subroutines) y LAPACK (Linear Algebra PACKage), hoy por hoy, los estándares más ampliamente utilizados en el desarrollo de software numérico de Altas Prestaciones. Este capítulo está estructurado en cuatro secciones. En la segunda sección se enumeran los objetivos que han servido de guía en el desarrollo de la tesis, describiendo además las aportaciones más relevantes de la misma. La tercera sección describe la metodología utilizada en el desarrollo del software. Para obtener un software de calidad es necesario utilizar metodologías procedentes de la Ingeniería del Software. Para ello se han aplicado métodos y técnicas que proceden de dicha disciplina, adaptándolos convenientemente para el desarrollo de Software de Computación Numérica de Altas Prestaciones. La última sección está dedicada a detallar el contenido de cada uno de los capítulos que conforman esta tesis, describiendo brevemente el contenido de los mismos. 1.2 Objetivos y Aportaciones de la Tesis Los objetivos generales que se han pretendido alcanzar al desarrollar esta tesis han sido: • Estudiar las propiedades numéricas de las Funciones de Matrices más usuales y así desarrollar nuevos algoritmos para su cálculo. • Resolver EDOs y EDMRs mediante técnicas que involucran Funciones de Matrices, desarrollando nuevos métodos y algoritmos. • Análisis y resolución de problemas reales en los que es necesario el cálculo de Funciones de Matrices. • Desarrollar un software de computación numérica de calidad, es decir, eficiente, de altas prestaciones, portable, robusto y correcto, para la resolución de los problemas citados. Todos estos objetivos se han alcanzado, como a continuación se detalla. 1 Capítulo 1: Introducción La necesidad de calcular Funciones de Matrices aparece en una gran variedad de aplicaciones, constituyendo una herramienta básica en el diseño de sistemas de control, problemas de convección difusión, estudio de fluidos, etc. En algunas de estas aplicaciones se requiere un tiempo de cálculo muy elevado, al aparecer en la resolución del problema matrices de gran dimensión, mientras que en otras es necesario realizar muchos cálculos por unidad de tiempo para, por ejemplo, poder interactuar sobre un sistema físico en tiempo real. En esta tesis se ha realizado un estudio completo de las funciones matriciales más utilizadas, proponiéndose la utilización de metodologías generales para el cálculo de las mismas. En la actualidad el paquete de software MATLAB tiene implementadas un amplio conjunto de Funciones de Matrices; sin embargo, únicamente se dispone de un reducido número de rutinas escritas en lenguajes de alto nivel que calculan algunas de las funciones matriciales más usuales. Entre las contribuciones de esta tesis para el cálculo de Funciones de Matrices se encuentran las siguientes: • Desarrollo de algoritmos, basados en metodologías generales, para el cálculo de Funciones de Matrices: algoritmos basados en los aproximantes diagonales de Padé de una función y algoritmos basados en la descomposición real de Schur de una matriz. • Se ha diseñado nuevos algoritmos basados en los aproximantes diagonales de Padé que permiten el cálculo eficiente de Funciones de Matrices como, por ejemplo, la potencia fraccionaria de una matriz (Algoritmo 3.7) o la función seno matricial (Algoritmo 3.10). • Se han diseñado nuevos algoritmos que utilizan la descomposición real de Schur de una matriz para calcular Funciones de Matrices. Entre estos algoritmos se encuentran el basado en la forma diagonal a bloques (Algoritmo 3.13 ), los basados en la Ecuación Conmutante (Algoritmo 3.15, Algoritmo 3.16, Algoritmo 3.17, Algoritmo 3.18), el basado en la agrupación en clusters de los valores propios cercanos de un matriz (Algoritmo 3.22) y el basado en los aproximantes diagonales de Padé (Algoritmo 3.23). • Diseño e implementación de funciones/rutinas escritas en MATLAB y FORTRAN, para el cálculo de Funciones de Matrices, basadas en las rutinas anteriores. • Estudio, diseño e implementación de rutinas de altas prestaciones que permiten la simulación de la propagación de ondas en fibras de cristal fotónico. Para la mayoría de las EDOs no lineales se desconoce su solución analítica y hay que utilizar técnicas numéricas para obtener soluciones aproximadas. Estas técnicas se basan en la transformación, mediante fórmulas de diferenciación o de integración numérica, de un problema continuo en otro discreto, siendo hasta ahora los métodos Runge-Kutta o BDF (Backward Differentiation Formulae) los más ampliamente utilizados. En esta tesis se propone resolver EDOs mediante la técnica de linealización a trozos. Esta técnica consiste en dividir el intervalo considerado en subintervalos más pequeños, de manera que en cada uno de ellos se realiza una aproximación lineal de la función que define a la EDO. Entre las aportaciones realizadas en esta tesis para la resolución de EDOs se encuentran las siguientes: • Demostración del Teorema 4.1 que permite resolver EDOs mediante la técnica de linealización a trozos de la función que define a la EDO, y en donde no se requiere que la matriz Jacobiana sea invertible. 2 Capítulo 1: Introducción • Desarrollo de dos nuevos métodos, basados en el teorema anterior, para la resolución de EDOs: − Método basado en el cálculo de la exponencial de una matriz a bloques, asociada al problema, mediante aproximantes diagonales de Padé. − Método basado en el cálculo del producto de la exponencial de una matriz a bloques por un vector mediante una aproximación basada en subespacios de Krylov. • Desarrollo de un método para la resolución de EDOs basado en la linealización a trozos y en la Ecuación Conmutante. En esta aproximación es necesario que la matriz Jacobiana sea invertible. • Para cada uno de los métodos anteriores se han desarrollo algoritmos para la resolución de EDOs no autónomas (Algoritmo 4.5, Algoritmo 4.7, Algoritmo 4.11) y para la resolución de EDOs autónomas (Algoritmo 4.14, Algoritmo 4.16 y Algoritmo 4.18). • Implementación de los algoritmos anteriores en MATLAB y FORTRAN, determinando los parámetros característicos de los diferentes métodos y optimizando sus costes espacial y temporal. Una de las ecuaciones diferenciales no lineales más usadas en el ámbito científico es la Ecuación Diferencial Matricial de Riccati (EDMR). Esta ecuación juega un papel fundamental en problemas de control óptimo y filtrado. Una de las técnicas ampliamente utilizadas para resolver dicha ecuación consiste en aplicar el método BDF. Este método está especialmente indicado para resolver EDMRs de tipo rígido. Otro de los métodos que se pueden aplicar en la resolución de EDMRs consiste en la vectorización de ecuaciones diferenciales matriciales, que permite convertir una EDMR en una EDO. En esta tesis se han desarrollado varios métodos de resolución de EDMRs que consisten en aplicar la linealización a trozos a la EDO anterior, utilizando técnicas especiales para la resolución eficiente de la misma. Entre las aportaciones relativas a la resolución de EDMRs se encuentran las siguientes: • Desarrollo de una nueva metodolgía para la resolución de EDMRs basada en la técnica de linealización a trozos. Esta metodología consiste, básicamente, en transformar la EDMR en una EDO de gran dimensión y aplicarle la linealización a trozos. • Desarrollo de tres métodos basados en la linealización a trozos. − Método basado en los aproximantes diagonales de Padé. El primer método consiste en calcular la solución aproximada de una EDMR en un instante determinado mediante el cálculo de dos exponenciales de matrices definidas a bloques. De este modo, se pasa de un problema vectorial de gran dimensión a otro matricial de menor dimensión. Este método está basado en dos teoremas desarrollados en el ámbito de esta tesis, Teorema 4.3 y Teorema 4.5, que se aplican, respectivamente, a EDMRs con coeficientes variables y a EDMRs con coeficientes constantes. − Método basado en la Ecuación Conmutante. Para el segundo método se han demostrado dos teoremas, uno para EDMRs con coeficientes variables (Teorema 4.4) y otro para EDMRs con coeficientes constantes (Teorema 4.6), que permiten transformar un problema vectorial de resolución de una 3 Capítulo 1: Introducción EDO de gran dimensión en otro matricial, consistente en resolver ecuaciones matriciales de Sylvester. − Método basado en los subespacios de Krylov. El tercer método está basado en el cálculo del producto de la exponencial de una matriz definida a bloques, obtenida en el proceso de vectorización, por un vector, utilizando para ello los subespacios de Krylov. • A partir de los métodos anteriores se han desarrollado seis nuevos algoritmos (Algoritmo 4.21, Algoritmo 4.23, Algoritmo 4.26, Algoritmo 4.29, Algoritmo 4.31, Algoritmo 4.33) y sus correspondientes implementaciones. A partir de las pruebas realizadas en el Capítulo 5, se puede comprobar que el coste computacional de las implementaciones basadas en los métodos de linealización a trozos resultan ser menores que las implementaciones basadas en el método BDF ([Diec92]), siendo además algo más precisas. Además, tienen un buen comportamiento cuando se aplican a EDMRs de tipo rígido. Hay que destacar que actualmente no se dispone de funciones escritas en MATLAB que resuelvan EDMRs y, en el caso de rutinas escritas en FORTRAN, tan sólo se dispone del paquete DRSOL (), pero únicamente para datos en simple precisión. Debido al gran número de algoritmos desarrollados e implementados, ha sido necesario utilizar una notación que permitiese conocer a partir del nombre de un algoritmo la finalidad del mismo y el método empleado. La nomenclatura utilizada para los algoritmos es txxyyyzzz, donde t indica el tipo de dato utilizado, xx indica el tipo de matriz, yyy indica el problema que se resuelve y zzz el método utilizado. Los valores de los tres primeros caracteres son: • t: tipo de dato utilizado. − t=s, datos reales de simple precisión; − t=d, datos reales de doble precisión; − t=c, datos complejos de simple precisión; − t=z, datos complejos de doble precisión. • xx: tipo de matriz. − xx=ge, indica matrices generales; − xx=ct, indica matrices casi triangulares superiores. La misma nomenclatura ha sido utilizada para nombrar a las funciones de MATLAB y a las rutinas en FORTRAN, de manera que para cada algoritmo se tiene una función en MATLAB y una rutina en FORTRAN con el mismo nombre. 1.3 Metodología Así como las metodologías para el desarrollo del software de gestión están muy avanzadas, el software científico adolece en la actualidad de herramientas que cubran todas las etapas para el desarrollo completo de una aplicación. Las técnicas más empleadas para el desarrollo del software de gestión no se pueden aplicar debido, fundamentalmente, a la propia naturaleza de las aplicaciones del cálculo científico que, en general, poseen muy pocas características en común. En esta tesis se aboga por 4 Capítulo 1: Introducción utilizar un ciclo de vida semiautomático consistente, básicamente, en dos etapas que a continuación se describen. Para la primera etapa se utiliza MATLAB pues dispone de un lenguaje de programación que permite expresar y desarrollar, de forma sencilla, algoritmos numéricos, disponiendo además de numerosas funciones del algebra matricial y de una potente herramienta de depuración de código que facilita el desarrollo de los mismos. En la segunda etapa se utiliza un lenguaje de alto nivel (FORTRAN) junto con las librerías BLAS y LAPACK. Estas librerías implementan, por una parte, las operaciones más comunes entre vectores y matrices y, por otra, disponen de numerosas rutinas que resuelven los problemas más comunes que aparecen en el algebra matricial. Esto posibilita escribir los programas en FORTRAN (o C) de forma modular, centrando la atención en los aspectos algorítmicos y no en los detalles del propio lenguaje utilizado. Otra ventaja adicional es que la mayor parte de los sistemas informáticos utilizados en computación disponen de librerías optimizadas de BLAS y LAPACK, con el consiguiente rendimiento de los códigos que utilizan a esas rutinas. De este modo, la combinación de estas herramientas posibilita la creación de software numérico robusto y de altas prestaciones de forma sistemática y sencilla. En la siguiente figura se muestra el ciclo de vida utilizado en el desarrollo del software numérico. Formulación del problema (1) Ajuste de los parámetros del algoritmo 1 (4) Descripción matemática del método (2) Ajuste de los parámetros del código (7) Algoritmo 1 Algoritmo 2 MATLAB (3) MATLAB (5) Código en lenguaje de alto nivel (6) Figura 1.1: Ciclo de vida utilizado en el desarrollo del software. En (1) se tiene claramente definido el problema que se quiere resolver. En (2) se realiza una descripción matemática del método que se va a implementar, partiendo de un estudio teórico de la viabilidad del mismo. En (3) se realiza un primer algoritmo, escrito en MATLAB, que implementa el método desarrollado en (2). A través de sucesivas pruebas se determinan, mediante (4), los valores óptimos de los parámetros característicos del método aplicado. Una vez se ha realizado este ajuste, se tiene un primer algoritmo escrito en MATLAB. Como paso intermedio para la codificación del algoritmo anterior en un lenguaje de alto nivel, se desarrolla un segundo algoritmo en (5) mediante la traducción del primer algoritmo, de manera que las operaciones que aparecen en él corresponden a operaciones básicas del BLAS y del LAPACK. En (6) se hace una codificación en un lenguaje de alto nivel en el que se hace una traducción del algoritmo desarrollado en (5) utilizando llamadas a BLAS o a LAPACK. La etapa (7) es necesaria, fundamentalmente, cuando se usan algoritmos orientados a bloques, en los que es necesario optimizar los accesos a memoria. 5 Capítulo 1: Introducción En la siguiente figura se muestra un ejemplo en el que aparece la codificación de un fragmento de un algoritmo según la metodología considerada. (3) G= A21+A22*X-X*A11-X*A12*X; (5) G=A21; G=A22*X+G; G=-X*A11+G; W=X*A12; G=-W*X+G; C C $ C $ C $ C $ (6) G=A21 CALL DCOPY(MN,WORK(NA21),1,WORK(NG),1) G=A22*X+G CALL DGEMM('N','N',M,N,M,ONE,WORK(NA22),M,X,M, ONE,WORK(NG),M) G=-X*A11+G CALL DGEMM('N','N',M,N,N,-ONE,X,M,WORK(NA11),N, ONE,WORK(NG),M) W=X*A12; CALL DGEMM('N','N',M,M,N,ONE,X,M,WORK(NA12),N, ZERO,WORK(NWORK),M) G=-W*X+G; CALL DGEMM('N','N',M,N,M,-ONE,WORK(NWORK),M,X,M, ONE,WORK(NG),M) Figura 1.2: Codificación de un fragmento de un algoritmo en las etapas (3), (5) y (6). Como se puede observar, el código de la etapa (3) se desglosa en varias líneas de código correspondiente al algoritmo de la etapa (5). El código obtenido en (6) es una traducción, línea a línea, del código de la etapa (5). Para las etapas (3) y (6) se ha dispuesto de un numeroso conjunto de pruebas que permiten validar el código desarrollado. Estas baterías de pruebas provienen, en algunos casos, de problemas reales y, en otros, de pruebas especiales que permiten comprobar la bondad de los algoritmos desarrollados. Entre las baterías de pruebas utilizadas se encuentran las siguientes: • Cálculo de Funciones de Matrices. − The Matrix Computation Toolbox for MATLAB ([High02]). Contiene una colección de funciones escritas en MATLAB para la generación de matrices de prueba, el cálculo de factorizaciones matriciales, la visualización de matrices, etc. − Además del anterior paquete, se han diseñado y utilizado, dentro del marco de la tesis, numerosas funciones/rutinas escritas en MATLAB y FORTRAN que 6 Capítulo 1: Introducción generan matrices especiales, idóneas para el estudio de Funciones de Matrices como, por ejemplo, matrices casi triangulares superiores, matrices de Hessenberg, matrices con valores propios múltiples, etc. • Resolución de EDOs. − Test Set for Initial Value Problems Solvers ([LiSw98]). Contiene una colección de problemas de valores iniciales para EDOs, Ecuaciones Diferenciales Implícitas (EDIs) y Ecuaciones Diferenciales Algebraicas (EDAs), escritos en FORTRAN y procedentes de problemas reales. • Resolución de EDMRs. − Time-Varying Riccati Differential Equations with Known Analytic Solutions ([Choi92]). Se trata de un artículo aparecido en la revista IEEE Transactions on Automatic Control, en el que se definen problemas de EDMRs con solución analítica conocida, ideales para su utilización en pruebas. − Numerical Integration of the Differential Riccati Equation and Some Related Issues ([Diec92]). Contiene una recopilación de varios problemas de EDMRs que provienen de problemas reales, además de una de las aproximaciones del método de resolución BDF más ampliamente utilizada. 1.4 Estructura de la Tesis El contenido de esta tesis se estructura en seis capítulos. El primero corresponde al actual capítulo, en el que se ha realizado una breve descripción de los objetivos planteados en esta tesis, se han enumerado las aportaciones realizadas y se ha explicado la metodología utilizada en el desarrollo e implementación de los algoritmos desarrollados. En el segundo capítulo se realiza una descripción del estado del arte correspondiente al cálculo de Funciones de Matrices y a la resolución de EDOs y EDMRs. En el caso de las Funciones de Matrices se describen algunas de las definiciones de función de una matriz, se enumeran sus propiedades más importantes y se describen los métodos más usuales para su cálculo. Para la resolución de EDOs se detallan únicamente aquellos aspectos de interés que posteriormente se utilizarán en el desarrollo e implementación de los nuevos métodos basados en la linealización a trozos. Por último, se realiza una descripción detallada del estado del arte correspondiente a la resolución de EDMRs, haciendo una breve exposición de sus principales propiedades, describiendo los métodos numéricos más destacados que se han ido utilizando a lo largo del tiempo y enumerando algunas de sus aplicaciones. El tercer capítulo está dedicado a describir los algoritmos desarrollados en esta tesis para el cálculo de Funciones de Matrices. Para ello se han desarrollado dos metodologías generales: una basada en los aproximantes diagonales de Padé y otra que utiliza la reducción a la forma real de Schur de una matriz. La primera metodología consiste, básicamente, en las siguientes etapas: 1.- minimizar la norma de la matriz considerada; 2.-determinar un polinomio de Taylor apropiado de la función; 3.- calcular, a partir del polinomio de Taylor, los polinomios de la aproximación diagonal de Padé de la función; 4.- obtener la aproximación diagonal de Padé de la función; y 5.- calcular la función de la matriz, teniendo en cuenta la reducción de la norma realizada en la primera etapa. Una vez realizada esta descripción se particulariza, dicho algoritmo general, al cálculo de algunas Funciones de Matrices: exponencial, logarítmica, potencia 7 Capítulo 1: Introducción fraccionaria, seno y coseno. La segunda metodología utiliza la forma real de Schur de una matriz para calcular, a partir de ella, la función de la matriz original. Los algoritmos que utilizan esta metodología suelen ser muy precisos y razonablemente eficientes. Entre estos algoritmos se encuentran los basados en la Ecuación Conmutante sin agrupación de valores propios (algoritmos orientados a columnas, a diagonales y a bloques), el algoritmo basado en la agrupación de valores propios cercanos, el algoritmo basado en la diagonalización a bloques de una matriz y el basado en el cálculo de Funciones de Matrices casi triangulares superiores mediante los aproximantes diagonales de Padé. El cuarto capítulo está dedicado a la resolución de EDOs y EDMRs mediante la técnica de linealización a trozos. En el caso de EDOs se demuestra el Teorema 4.1 y se presentan tres métodos, basados en él, que permiten resolver eficientemente EDOs: Método basado en los aproximantes diagonales de Padé, método basado en la Ecuación Conmutante y método basado en los subespacios de Krylov. Para la resolución de EDMRS se ha desarrollado una metodología consistente en transformar la EDMR en una EDO y aplicar a esta ecuación diferencial la técnica de linealización a trozos desarrollada para EDOs. Al aplicar la linealización a trozos, se obtiene una Ecuación Diferencial Lineal (EDL) de gran dimensión en cada subintervalo, por lo que se hace necesaria la aplicación de métodos especiales para su resolución. En este caso, en lugar de aplicar los métodos desarrollados para EDOs, se han desarrollado tres nuevos métodos: Método basado en los aproximantes diagonales de Padé, método basado en la Ecuación Conmutante y método basado en los subespacios de Krylov Todos los anteriores métodos se han particularizado para resolver EDOs autónomas y EDMRs con coeficientes constantes de modo que se han reducido los costes computacionales y de almacenamiento. En el quinto capítulo se detallan y analizan todas las pruebas realizadas. En primer lugar se describen brevemente los componentes software y hardware que, de algún modo, se han utilizado en el desarrollo e implementación de los algoritmos descritos en esta tesis. A continuación se describen las pruebas realizadas para el cálculo de Funciones de Matrices, comenzando con el cálculo de funciones polinómicas y racionales, continuando con el cálculo de funciones trascendentes mediante los aproximantes diagonales de Padé y mediante la descomposición real de Schur de una matriz. Para cada prueba se determinan los valores óptimos de los parámetros característicos de cada implementación. En tercer lugar se presenta un problema consistente en la simulación de la propagación de ondas monocromáticas en fibras de cristal fotónico. El interés del estudio es analizar dicha propagación sin hacer uso de experimentos reales con las consiguientes ventajas que esto supone. Para ello se analizan e implementan los métodos numéricos más adecuados para su simulación. A continuación se describen las pruebas realizadas para la resolución de EDOs, presentando el problema a resolver y sus orígenes. Para cada problema se comparan las funciones/rutinas implementadas, habiendo determinado previamente los valores óptimos de los parámetros característicos de cada función/rutina. Para esa comparación, se han realizado diversas pruebas en las que se varía el incremento de tiempo utilizado en la linealización a trozos, el tiempo final y el tamaño de problema. Del mismo modo, se realiza un estudio similar para la resolución de EDMRs. En el sexto capítulo se exponen las conclusiones de todo el trabajo realizado, se enumeran las publicaciones realizadas en el marco de esta tesis y se perfilan las posibles líneas de investigación futuras que se abren con la misma. 8 Capítulo 1: Introducción Al final de la tesis se han añadido cuatro apéndices que a continuación se detallan. En el primer apéndice se describen las definiciones, propiedades y teoremas que, de algún modo, se han utilizado en esta tesis, así como la notación empleada en la misma. En el segundo apéndice se realiza una descripción de MATLAB, como entorno de desarrollo y programación de algoritmos. En el tercer apéndice se describen BLAS y LAPACK, por ser las librerías utilizadas en el desarrollo eficiente y portable de software numérico de altas prestaciones. En el cuarto anexo se describen los componentes software y hardware que se han utilizado en el desarrollo e implementación de los algoritmos descritos en esta tesis: la máquina SGI Altix 3700, el compilador FORTRAN de Intel y las librerías SGI SCL (Scientific Computing Software Library) que contienen el BLAS y el LAPACK. 9 Capítulo 2: Estado del Arte Capítulo 2 Estado del Arte 2.1 Resumen de Contenidos En este capítulo se hace una revisión de las propiedades y métodos más relevantes para el cálculo de Funciones de Matrices, y la resolución de Ecuaciones Diferenciales Ordinarias (EDOs) y Ecuaciones Diferencial Matriciales de Riccati (EDMRs). Este capítulo se ha estructurado en cinco secciones. La segunda sección comienza con un estudio completo de las funciones matriciales más utilizadas, indicando sus orígenes y aplicaciones, haciendo además una breve descripción de los métodos que se han ido utilizando desde sus comienzos hasta nuestros días. Junto a la descripción de estos métodos se realiza un estudio comparativo de los mismos, para deducir cuáles son las mejores estrategias para el cálculo de Funciones de Matrices. La finalidad de este estudio es encontrar metodologías generales que permitan calcular eficientemente Funciones de Matrices, sin dejar de lado cada caso particular (tipo de función y matriz). En la tercera sección se describen únicamente aquellos aspectos de interés en la resolución de EDOs que, de alguna manera, se utilizan en los siguientes capítulos, especialmente los relacionados con el desarrollo e implementación de los nuevos métodos basados en la linealización a trozos. En la cuarta sección se comienza con una breve descripción de las principales propiedades de las EDMRs, detallando a continuación los métodos de resolución de EDMRs más conocidos, para finalizar con algunos ejemplos de aplicaciones de las mismas. En la última sección se exponen las conclusiones de este capítulo. 2.2 Funciones de Matrices 2.2.1 Definiciones y Propiedades De una manera informal, dada una función compleja de variable compleja f (z ) definida sobre el espectro de una matriz cuadrada A , la matriz f ( A) se puede obtener sustituyendo la variable z por la matriz A en la expresión que define a f ( z ) . Desde un punto de vista formal, f ( A) se puede definir utilizando diferentes aproximaciones. En [Rine78], Rinehart demostró la equivalencia entre ocho definiciones de funciones de matrices; quizás la más elegante de ellas, aunque no la más útil desde el punto de vista computacional, es la que se presenta en primer lugar. Definición 2.1 ([GoVa96], capítulo11). Sea A una matriz cuadrada definida en el conjunto de los números complejos C y f (z ) una función analítica definida en un abierto U ⊂C que contiene al espectro de A . Si Γ ⊂ U es una curva rectificable que rodea al espectro de A , entonces la matriz f ( A) se puede definir como 11 Capítulo 2: Estado del Arte f ( A) = 1 f ( z )( Iz − A) −1 dz . 2πi ∫Γ Según esta definición, el elemento (k , j ) de la matriz f ( A) viene dado por f kj = 1 −1 f ( z )ekT (Iz − A) e j dz , ∫ 2πi Γ siendo ek y e j , respectivamente, la k-ésima y la j-ésima columna de la matriz identidad I . Esta definición proviene del teorema integral de Cauchy, por lo que se trata de una definición independiente de la curva Γ . Una de las definiciones más utilizadas ([Gant90], [LaMi85]) es la basada en la forma canónica de Jordan de una matriz y en el polinomio de interpolación de grado mínimo de una función. Definición 2.2 ([Gant90], capítulo 5). Dada una función analítica f ( z ) definida en un abierto U ⊂C espectro de A ∈C nxn , se define la matriz f ( A) como que contiene al f ( A) = p( A) , siendo p( z ) el polinomio de grado mínimo que interpola a la función f ( z ) en el espectro de la matriz A ; es decir, p ( j ) (λi ) = f ( j ) (λi ) , j = 0,1,L, ni − 1 , i = 1,2,L, s , con s el número de valores propios distintos de A y ni la mayor de las dimensiones de los bloques de Jordan que contienen al valor propio λi . A partir de estas definiciones se pueden demostrar propiedades que permiten calcular y definir, de otras formas, las funciones de matrices. Propiedad 2.1 Dada A ∈C nxn y f ( z ) función analítica definida en un abierto U ⊂C que contiene al espectro de A , entonces f ( A) es solución de la ecuación ( 2.1 ) AX = XA , denominada ecuación conmutante. Propiedad 2.2 Sea A ∈C nxn y f ( z ) función analítica definida en un abierto U ⊂C que contiene al espectro de A . Si A = XBX −1 entonces f ( A) = Xf ( B) X −1 . 12 Capítulo 2: Estado del Arte Propiedad 2.3 Sea A ∈C nxn y f (z ) función analítica definida en un abierto U ⊂C que contiene al espectro de A . Si A = diag ( A1 , A2 ,L, Ar ) , con Ai ∈ C ni xni , i = 1,2,L, r , r ∑n i =1 i = n, entonces f ( A) = diag( f ( A1 ), f ( A2 ), L , f ( Ar )) . Corolario 2.1. Sea A ∈C nxn y f ( z ) una función analítica definida en un abierto U ⊂C que contiene al espectro de A . Si A = QSQ* es la descomposición de Schur de A , entonces f ( A) = Qf ( S )Q * . Corolario 2.2. Sea A ∈C nxn y f ( z ) una función analítica definida en un abierto U ⊂C que contiene al espectro de A . Si A = Xdiag( J λ1 , J λ2 , L , J λr ) X −1 ( 2.2 ) es la descomposición canónica de Jordan de la matriz A , entonces f ( A) = Xdiag( f ( J λ1 ), f ( J λ2 ), L , f ( J λr )) X −1 , ( 2.3 ) siendo ( ) ( 2.4 ) f J λi ⎡ ⎢ f (λi ) ⎢ ⎢ ⎢ 0 =⎢ ⎢ M ⎢ 0 ⎢ ⎢ 0 ⎣ f (1) (λi ) L 1! f (λi ) L O O f ( ni − 2) (λi ) (ni − 2)! f ( ni −3) (λi ) (ni − 3)! M L O f (λ i ) L L 0 (λi ) ⎤ ⎥ (ni − 1)! ⎥ f ( ni − 2) (λi ) ⎥ (ni − 2)! ⎥ ∈C ⎥ M ⎥ f (1) (λi ) ⎥ ⎥ 1! f (λi ) ⎥⎦ f ( ni −1) ni xni , i = 1,2,L, r . Otros autores definen las funciones de matrices a partir del concepto de función matricial primaria. Definición 2.3 ([HoJo91]). Sea A ∈C nxn y f ( z ) una función analítica definida en un abierto U ⊂C que contiene al espectro de A . Si ( 2.2 ) es la descomposición canónica de Jordan de la matriz A , se define la función matricial primaria de la matriz A como la matriz f ( A) obtenida a partir de las expresiones ( 2.3 ) y ( 2.4 ). 13 Capítulo 2: Estado del Arte Una última aproximación proviene de la definición de una función como suma de una serie de potencias. El siguiente teorema muestra la manera de definir funciones de matrices a partir de sumas de series de potencias de matrices. Teorema 2.1. Dada una matriz A ∈C nxn y f ( z ) una función analítica definida en un abierto U ⊂C que contiene al espectro de A , definida por ∞ f ( z ) = ∑ ck z k , k =0 entonces la serie de potencias ∞ ∑c A k =0 k k , es convergente, cumpliéndose además ([Rine78] que ∞ f ( A) = ∑ ck Ak . k =0 2.2.2 Funciones de Matrices más Usuales 2.2.2.1 Función Exponencial Entre las diferentes funciones de matrices, la función exponencial tiene una especial importancia debido a su relación con la resolución de sistemas de ecuaciones diferenciales lineales ([Bell83], [MoVa78]) que aparecen en la resolución de diversos modelos asociados a fenómenos físicos, químicos, biológicos, económicos, etc. ([Karl59], [Varg62]). Por ejemplo, la solución de la Ecuación Diferencial Lineal (EDL) ([Bell53]) dx(t ) = Ax(t ) + b(t ) , t ≥ 0 dt con x(0) = x0 , siendo A ∈ ℜ nxn y b ∈ ℜ n , viene dada por t v(t ) = e At x(0) + ∫ e A( t − s ) b( s )ds . 0 Una forma sencilla de definir la exponencial de una matriz consiste en considerar la serie de potencias ∞ 1 k z , k = 0 k! ez = ∑ y definir la exponencial de la matriz A como ∞ 1 k A . k = 0 k! eA = ∑ Esta serie resulta ser convergente para cualquier matriz cuadrada A . 14 Capítulo 2: Estado del Arte 2.2.2.2 Función Signo La función signo matricial, junto a la exponencial de una matriz, resulta ser una de las funciones matriciales que durante más tiempo y con mayor profundidad se ha investigado. Una de las primeras referencias acerca de la función signo matricial se encuentra en el trabajo realizado por Zolotarjov en el año 1877, en el que se caracterizaban las mejores aproximaciones racionales de la función signo escalar mediante el uso de funciones del tipo seno elíptico. Si embargo, el verdadero auge de esta función se encuentra en el trabajo desarrollado por Roberts. En 1971 Roberts realizó un informe técnico ([Robe71]) en el que se definía esta función y se describían sencillos algoritmos para el cálculo de la misma. En este trabajo también se desarrolló el escalado y la estimación del número de condición asociados a la función signo matricial. Este informe técnico no fue muy conocido por la comunidad científica hasta su publicación como artículo, en el año 1980, en la revista International Journal of Control [Robe80]. En 1971 Abramov ([Abra71]) también utilizó un método basado en el cálculo de la función signo matricial para revolver ciertos problemas de contorno asociados a la resolución de EDOs. Fruto del trabajo pionero de Roberts ha sido el desarrollo de numerosos campos de investigación relacionados con la función signo matricial: • Aproximación y condicionamiento de las funciones de matrices. • Aplicaciones en control como, por ejemplo, la resolución de la Ecuación Algebraica Matricial de Lyapunov (EAML) y la resolución de la Ecuación Algebraica Matricial de Riccati (EAMR). • Teoría de sistemas y cálculo matricial, aplicándose, por ejemplo, en el cálculo de subespacios invariantes. • Descomposiciones que aparecen en el cálculo de valores propios de una matriz. • Cálculo de la raíz cuadrada de una matriz. • Cálculo de la función sector de una matriz. A continuación se define la función signo matricial tal como aparece en [Robe80]. La función signo escalar se define como ⎧+ 1 si Re( z ) > 0 sign ( z ) = ⎨ . ⎩− 1 si Re( z ) < 0 Si A ∈C nxn no tiene valores propios imaginarios puros, entonces existe la función signo matricial de A y se puede definir a partir de la descomposición canónica de Jordan de A , como a continuación se detalla. Si A = Xdiag( J λ1 , J λ2 , L , J λr ) X −1 es la descomposición canónica de Jordan de la matriz A , entonces la función signo matricial de A se define como sign ( A) = Xdiag(sign( J λ1 ), sign( J λ2 ), L , sign( J λr )) X −1 . Al cumplirse que 15 Capítulo 2: Estado del Arte d (sign ( z ) ) = 0 , dz z = λi y teniendo en cuenta ( 2.4), entonces ( ) sign J λi 0 ⎡sign (λi ) ⎢ 0 sign (λi ) ⎢ =⎢ M M ⎢ 0 ⎢ 0 ⎢⎣ 0 0 ⎤ L 0 0 ⎥⎥ O M M ⎥ , i = 1,2,L, r . ⎥ sign (λi ) 0 ⎥ L 0 sign (λi )⎥⎦ 0 L 0 Es fácil comprobar que la función signo matricial cumple las siguientes propiedades. Propiedad 2.4. Si A ∈C nxn , entonces [sign ( A)]2 = I n . Propiedad 2.5. Si A ∈C nxn , entonces sign (cA) = sign (c)sign ( A) . Propiedad 2.6. Los valores propios de la matriz sign ( A) , A ∈C nxn , son ± 1 . 2.2.2.3 Función Raíz Cuadrada Uno de los métodos más usuales para calcular funciones de matrices consiste en realizar un escalado previo de la matriz, pues permite reducir su norma y así se pueden aplicar técnicas generales para el cálculo de funciones de matrices como, por ejemplo, las aproximaciones de tipo polinómico (aproximaciones de Taylor) o las aproximaciones de tipo racional (aproximantes de Padé). Por ejemplo, el escalado utilizado en el cálculo de la función logarítmica, se puede realizar utilizando la identidad log A = 2 j log A1 / 2 , j = 1,2,L , j en la que aparecen raíces cuadradas de matrices. Para definir la raíz cuadrada de una matriz es necesario que sea consistente con la definición correspondiente al caso escalar. Dada una matriz A ∈C nxn , una solución X ∈C nxn de la ecuación matricial cuadrática X 2 = A, se llama raíz cuadrada de A . Por ejemplo, fácilmente se puede comprobar que la matriz ⎡0 1 ⎤ A=⎢ ⎥ ⎣0 0⎦ no tiene raíces cuadradas, sin embargo, la matriz 16 Capítulo 2: Estado del Arte ⎡1 0⎤ A=⎢ ⎥ ⎣0 0 ⎦ admite como raíces cuadradas a las matrices ⎡1 0⎤ ⎡ − 1 0⎤ X1 = ⎢ , X2 = ⎢ ⎥ ⎥. ⎣0 0 ⎦ ⎣ 0 0⎦ Según esto, puede no existir la raíz cuadrada de A , o existir una o más raíces de ella. El siguiente teorema caracteriza las raíces cuadradas de una matriz cuadrada compleja y determina cuáles de ellas corresponden a funciones de matrices en el sentido de la Definición 2.2. Lema 2.1 ([Hig287]). Si λi ∈C es distinto de cero, entonces el bloque de Jordan ⎡λ i ⎢0 ⎢ J λi = ⎢ M ⎢ ⎢0 ⎢⎣ 0 1 λi M 0 0 0⎤ O 0 0 ⎥⎥ O O M ⎥ ∈C ⎥ L λi 1 ⎥ L 0 λi ⎥⎦ L 0 ni xni , tiene precisamente dos raíces cuadradas que son funciones de J λi en el sentido de la Definición 2.2, ( ) ( 2.5 ) f j J λi ⎡ ⎢ f j (λ i ) ⎢ ⎢ ⎢ 0 =⎢ ⎢ M ⎢ ⎢ 0 ⎢ ⎢⎣ 0 ( ni − 2 ) (1 ) f j (λ i ) fj (λ i ) 1! L f (λ i ) L O O (ni − 3)! M 0 L f j (λ i ) 0 L 0 (ni − 2)! ( ni − 3 ) f j (λ i ) (λ i ) ⎤ ⎥ (ni − 1)! ⎥ ( ni − 2 ) fj (λ i ) ⎥ ⎥ (ni − 2)! ⎥ ∈C ⎥ M (1) f j (λ i ) ⎥ ⎥ ⎥ 1! f j (λi ) ⎥⎦ fj ( ni −1) ni xni , j = 1,2 , donde f j (λ ) = λ denota una de las dos ramas de la función raíz cuadrada en el entorno de λi . Teorema 2.2 ([Hig287]). Sea A ∈C nxn una matriz no singular con la descomposición de Jordan A = XJX −1 = Xdiag( J λ1 , J λ2 , L , J λr ) X −1 , donde J λi ∈C r ni xni , ∑n i =1 i = n , y s ( s ≤ r ) el número de valores propios distintos de A . Se verifican entonces las siguientes propiedades: 17 Capítulo 2: Estado del Arte 1. A tiene precisamente 2 s raíces cuadradas que son funciones de A en el sentido de la Definición 2.2, dadas por F j = Xdiag( f j1 ( J λ1 ), f j2 ( J λ2 ), L , f jr ( J λr )) X −1 , j = 1,2,L,2 s , correspondientes a todas las posibles elecciones de j1 , j2 ,L, jr ( ji ∈ {1,2}, i = 1,2,L, r ), sujetas a la restricción de que jk = jl si λk = λl . 2. Si s < r , entonces A tiene raíces cuadradas que no son funciones de A en el sentido de la Definición 2.2. Estas raíces forman familias parametrizadas F j (U ) = XUdiag( f j1 ( J λ1 ), f j2 ( J λ2 ), L , f jr ( J λr ))U −1 X −1 , 2 s + 1 ≤ ji ≤ 2r , i = 1,2,L, r , siendo U una matriz no singular arbitraria que conmuta con diag( J λ1 , J λ2 , L , J λr ) , y para cada j existen unos índices k y l , dependientes de j , de manera que λk = λl y jk ≠ jl . Corolario 2.3 ([Hig287]). Si λk ∈C es distinto de cero, entonces las únicas raíces cuadradas de la matriz J λk del Lema 2.1 son las que aparecen en ( 2.5 ). Corolario 2.4 ([Hig287]). Si cada valor propio de A ∈C nxn aparece en un solo bloque de Jordan de la forma canónica de Jordan de A , entonces A tiene precisamente 2 r raíces cuadradas, todas ellas funciones de A en el sentido de la Definición 2.2. Corolario 2.5 ([Hig287]). Toda matriz hermítica y definida positiva tiene una única raíz cuadrada hermítica y definida positiva. A continuación se detallan varios teoremas acerca de la existencia de raíces de matrices cuadradas reales. Teorema 2.3 ([HoJo91], página 473). Sea una matriz A ∈ ℜ nxn . Existe una matriz B ∈ ℜ nxn , raíz cuadrada de A , si y solo si se cumplen las siguientes condiciones: 1. Dados los enteros r0 = n , rk = rango( A k ) , para k = 0,1,2,L , entonces la secuencia {rk − rk +1} para k = 0,1,2,L , no contiene dos apariciones consecutivas del mismo entero par y si además r0 − r1 es par, entonces r0 − 2r1 + r2 ≥ 1 . 2. Si ⎡λ i ⎢0 ⎢ J λi = ⎢ M ⎢ ⎢0 ⎢⎣ 0 1 λi M 0 0 0⎤ O 0 0 ⎥⎥ O O M ⎥ ∈C ⎥ L λi 1 ⎥ L 0 λi ⎥⎦ L 0 ni xni 18 Capítulo 2: Estado del Arte es un bloque de Jordan de A , con λi un valor propio real negativo de A , entonces A tiene un número par de bloques de Jordan de igual tamaño ni incluido J λi . Teorema 2.4 ([High87]). Sea A ∈ ℜ nxn una matriz no singular. Existe una matriz B ∈ ℜ nxn , raíz cuadrada real de la matriz A , si y solo si cada bloque de Jordan de la matriz A correspondiente a un valor propio real negativo, aparece un número impar de veces. La comprobación de la existencia de raíces cuadradas de una matriz, a partir de los teoremas anteriores, es complicada de manejar, fundamentalmente porque es necesario conocer la descomposición canónica de Jordan de la matriz considerada. El siguiente teorema, cuya demostración está basada en la descomposición real de Schur de una matriz, permite una comprobación más sencilla de la existencia de raíces cuadradas de matrices reales. Teorema 2.5 ([High87]). Sea A ∈ ℜ nxn una matriz no singular. Si A tiene un valor propio real negativo, entonces A no tiene raíces cuadradas que son funciones de A en el sentido de la Definición 2.2. Si A no tiene valores propios reales negativos, entonces existen exactamente 2 r + c raíces cuadradas reales que son funciones de A en el sentido de la Definición 2.2, siendo r el número de valores propios reales de A y c el número de pares de valores propios complejos conjugados. 2.2.2.4 Función Raíz p-ésima Dada una matriz A ∈C matriz A si cumple nxn , se dice que la matriz X ∈C X p nxn es una raíz p-ésima de la = A. Entre las aplicaciones que requieren el cálculo de las raíces p-ésimas de una matriz se encuentra el cálculo de la función sector definida por sec( A) = ( A p ) −1/ p A ([KoBa95], [ShTs84]). Otra posible aplicación aparece en el escalado de una matriz para el cálculo del logaritmo de una matriz. En este caso, se determina un entero positivo p de manera que log A = p log A1 / p , con || A1/ p || menor que un cierto valor ([ChHi01], [KeL289]). Al igual que ocurre en el caso particular de raíces cuadradas, la raíz p-ésima de una matriz puede no existir o tener una o más soluciones. Si A es no singular, entonces admite al menos una raíz p-ésima; en caso contrario, la matriz A admite raíces p-ésimas dependiendo de la estructura de los divisores elementales de A correspondientes a los valores propios nulos ([Gant90], sección 8.7). 19 Capítulo 2: Estado del Arte Definición 2.4 ([Smit03]). Sea A ∈C nxn una matriz no singular con valores propios λi , i = 1,L , n , de manera que arg(λi ) ≠ π , i = 1,L, n . La raíz p-ésima principal de A , denotada por A1 / p ∈C nxn , se define como la matriz que satisface las dos condiciones siguientes: 1. ( A1 / p ) p = A . 2. Los argumentos de los valores propios de la matriz A1 / p se encuentran en el intervalo ] − π / p, π / p[ . El siguiente teorema, generalización del Teorema 2.2, permite caracterizar las raíces pésimas de una matriz cuadrada compleja a partir de su descomposición de Jordan, y determina cuáles de ellas corresponden a funciones de matrices según la Definición 2.2. Lema 2.2 ([Smit03]). Si λi ∈C es distinto de cero, entonces el bloque de Jordan ⎡λ i ⎢0 ⎢ J λi = ⎢ M ⎢ ⎢0 ⎢⎣ 0 0⎤ O 0 0 ⎥⎥ O O M ⎥ ∈C ⎥ L λi 1 ⎥ L 0 λi ⎥⎦ 1 0 L λi M 0 0 ni xni , tiene precisamente p raíces p-ésimas que son funciones de J λi , definidas como ( ) f j J λi ⎡ ⎢ f j (λ i ) ⎢ ⎢ ⎢ 0 =⎢ ⎢ M ⎢ ⎢ 0 ⎢ ⎢⎣ 0 ( ni − 2 ) (1 ) f j (λ i ) fj (λ i ) 1! L f (λ i ) L O O (ni − 3)! M 0 L f j (λ i ) 0 L 0 (ni − 2)! ( ni − 3 ) f j (λ i ) (λ i ) ⎤ ⎥ (ni − 1)! ⎥ ( ni − 2 ) (λ i ) ⎥ fj ⎥ (ni − 2)! ⎥ ∈C ⎥ M (1) f j (λ i ) ⎥ ⎥ ⎥ 1! f j (λi ) ⎥⎦ fj ( ni −1) ni xni , j = 1,2,L, p , donde f j (λ ) = λ denota una de las p ramas de la función raíz p-ésima en el entorno p de λi . Teorema 2.6 ([Smit03]). Sea A ∈C nxn una matriz no singular con la descomposición de Jordan ( ) A = Xdiag J λ1 , J λ2 ,L, J λr X −1 , donde J λi ∈C r ni xni , ∑n i =1 i = n , y s ( s ≤ r ) el número de valores propios distintos de A Se verifican entonces las siguientes propiedades: 20 Capítulo 2: Estado del Arte 1. A tiene precisamente p s raíces de índice p , dadas por F j = Xdiag( f j1 ( J λ1 ), f j2 ( J λ2 ), L , f jr ( J λr )) X −1 , j = 1,2,L, p s , correspondientes a todas las posibles elecciones de j1 , j 2 ,L , j r , ji ∈ {1,2,L, p}, i = 1,2,L, r , sujetas a la restricción de que jk = jl si λk = λl . 2. Si s < r , entonces A tiene raíces p-ésimas que no son funciones de A . Estas raíces forman familias parametrizadas F j (U ) = XUdiag( f j1 ( J λ1 ), f j2 ( J λ2 ), L , f jr ( J λr ))U −1 X −1 , p s + 1 ≤ ji ≤ p r , donde ji ∈ {1,2,L, p}, i = 1,2,L, r , siendo U una matriz no singular arbitraria que conmuta con diag J λ1 , J λ2 ,L , J λr , y para cada j existen k y l , ( ) dependientes de j , de manera que λk = λl y jk ≠ jl . 2.2.2.5 Función Logaritmo Los logaritmos de matrices aparecen en algunos campos de la ingeniería, como los relacionados con la teoría de control. Por ejemplo, para un sistema físico gobernado por la EDL x& (t ) = Ax(t ) , x(0) = x 0 , en la que A ∈ ℜ nxn es una matriz desconocida, es posible determinar esta matriz A a partir de n observaciones, x1 , x 2 ,L, x n , del vector de estados x(t ) , producidas por n vectores de condiciones iniciales ([AlPr81], [SiSp76]). Puesto que la solución de la ecuación diferencial anterior es x(t ) = e At x0 , particularizando esta expresión para t = 1 y considerando como estados iniciales las columnas de la matriz identidad, se obtiene que B = eA , y, por tanto, A = log B , siendo B = [ x1 , x 2 , L, x n ] . El siguiente teorema caracteriza las condiciones de existencia del logaritmo de una matriz. Teorema 2.7 ([HoJo91], página 475). 1. Si A ∈C nxn es no singular, entonces existe al menos un matriz X ∈C nxn que verifica e X = A y es polinomial en A ; es decir, existe un polinomio p( z ) de manera que X = p( A) . 2. Si A ∈C eX = A. nxn es singular, entonces no existe ninguna matriz X ∈C nxn tal que 3. Si A ∈ ℜ nxn , entonces existe X ∈ ℜ nxn de manera que e X = A si y solo si se cumplen las dos condiciones siguientes: 21 Capítulo 2: Estado del Arte a. A es no singular. b. Si ⎡ λi ⎢0 ⎢ J λi = ⎢ M ⎢ ⎢0 ⎢⎣ 0 0⎤ O 0 0 ⎥⎥ O O M ⎥ ∈ C ni xni , ⎥ L λi 1 ⎥ L 0 λi ⎥⎦ 1 L λi M 0 0 0 es un bloque de Jordan de A , con λi un valor propio real negativo de A , entonces A tiene un número par de bloques de Jordan de igual tamaño ni , incluido J λi . 4. Si A ∈ ℜ nxn tiene algún valor propio real negativo, entonces ninguna solución real de e X = A puede ser polinomial en A o función matricial primaria de A . Como consecuencia de este teorema se tiene que si A ∈ ℜnxn no tiene valores propios reales negativos, entonces tiene un logaritmo real; es decir, existe una matriz L ∈ ℜ nxn de manera que e L = A . Pueden existir diferentes matrices que proporcionen el logaritmo de una matriz, pero sólo una de ellas tiene las partes imaginarias de sus valores propios en el intervalo ] − π , π [ . Esta matriz se denomina logaritmo principal de A y se denota con log A . 2.2.2.6 Funciones Seno y Coseno Las funciones matriciales trigonométricas juegan un papel fundamental en los sistemas diferenciales lineales de segundo orden. Por ejemplo, el problema d 2x + Ax = 0 , x(0) = x 0 , x' (0) = x0' , dt 2 con A ∈ ℜ nxn , tiene como solución x(t ) = cos( At ) y 0 + ( At ) −1 sen ( At ) x0' . Problemas más generales de este tipo, en los que aparece un término f (t ) en la parte derecha de la ecuación diferencial, proceden de la semidiscretización de la ecuación de ondas y de los sistemas mecánicos sin amortiguamiento. En tales casos, las soluciones pueden expresarse en función de términos que involucran senos y cosenos de matrices ([Serb79]). Las definiciones más usuales de la funciones seno y coseno de una matriz están basadas en las series de Taylor ∞ sen A = ∑ (−1) k k =0 A 2 k +1 (2k + 1)! y ∞ A2k cos A = ∑ (−1) . (2k )! k =0 k 22 Capítulo 2: Estado del Arte 2.2.3 Métodos Numéricos para el Cálculo de Funciones de Matrices 2.2.3.1 Función Exponencial 2.2.3.1.1 Métodos Basados en las Series de Taylor Sea f ( z ) una función analítica definida sobre el espectro de A ∈C nxn ∞ f ( z ) = ∑ ck z k . k =0 Según el Teorema 2.1, la matriz f ( A) se puede hallar mediante la expresión ∞ f ( A) = ∑ ck Ak . k =0 El valor aproximado de f ( A) se puede obtener truncando adecuadamente la serie anterior. Para ello se calculan los términos de la serie hasta que se encuentra un número natural L , de manera que la representación en coma flotante de la matriz S L sea igual a la representación en coma flotante de S L +1 ; es decir, fl ( S L ) = fl ( S L +1 ) , siendo L S L = ∑ ck Ak . k =0 El valor aproximado de f ( A) será, por lo tanto, fl ( S L ) . Este método puede producir un resultado inexacto debido, fundamentalmente, a los errores de redondeo causados cuando se desprecian los términos de la serie a partir de un cierto orden, y al problema de la cancelación de dígitos significativos que se produce cuando se suman y restan números del mismo orden de magnitud. Además, a medida que A es mayor o la dispersión de los valores propios de la matriz A aumenta, se tiene que los errores de redondeo y los costes computacionales aumentan. Se han diseñado diversos algoritmos basados en las aproximaciones de Taylor ([PChK91], [GoVa96]), que intentan evitar esos problemas, haciendo uso de la identidad e A = (e A / m ) . m El método de escalado y potenciación consiste en seleccionar un valor m como potencia de 2, m = 2 j , de manera que e A / m pueda calcularse con precisión y eficiencia, y entonces calcular (e A / m ) mediante potenciación repetida. m 2.2.3.1.2 Métodos Basados en los Aproximantes de Padé Los aproximantes de Padé de orden ( p, q ) de f ( z ) = e z son funciones racionales definidas como R pq ( z ) = N pq ( z ) / D pq ( z ) , donde 23 Capítulo 2: Estado del Arte ( p + q − k )! p! k z k = 0 ( p + q )! k!( p − k )! p N pq ( z ) = ∑ y ( p + q − k )!q! ( −z ) k . k = 0 ( p + q )! k!( q − k )! q D pq ( z ) = ∑ En particular, R p 0 ( z ) coincide con el polinomio de Taylor de grado p de la función ez . Los aproximantes de Padé permiten calcular aproximadamente la exponencial de una matriz A ∈C nxn mediante la expresión [ e A ≅ R pq ( A) = D pq ( A) ] [N −1 pq ] ( A) . El problema es que únicamente proporcionan buenas aproximaciones en un entorno del origen, tal como revela la igualdad 1 e A = R pq ( A) + (−1) q A p+ q +1 D pq ( A) −1 ∫ u p (1 − u ) q e A(1−u ) du ([GoVa96], capítulo 11). ( p + q )! 0 Una manera de evitar el problema anterior consiste en utilizar el método de escalado y potenciación, eligiendo para ello el menor entero positivo j de manera que || A || / m < 1 , siendo m = 2 j . Con este criterio, e A / m puede calcularse mediante los aproximantes de Taylor o de Padé. Esta última aproximación ha sido tratada por numerosos autores entre los que cabe destacar, por su análisis de errores, a Ward [Ward77], Kammler [Kamm76], Kallstrom [Kall73], Scraton [Scra71] y Shah [Shah71]. En [MoVa78] Moler y Van Loan demostraron que si || A ||∞ 1 ≤ , 2j 2 siendo A ∈C nxn , entonces existe E ∈C nxn tal que R pq = e A + E , AE = EA , || E ||∞ ≤ ε ( p, q ) || A ||∞ , ε ( p , q ) = 23 − ( p + q ) p!q! . ( p + q )!( p + q + 1)! Estos resultados permiten controlar el error que se puede cometer al calcular e A pues || e A − R pq ||∞ || e ||∞ A ≤ ε ( p, q ) || A ||∞ eε ( p ,q )|| A||∞ . Existen varias razones para utilizar los aproximantes diagonales de Padé ( p = q ) en lugar de los no diagonales ( p ≠ q ). Si p < q , entonces, aproximadamente, 2qn 3 flops 24 Capítulo 2: Estado del Arte son necesarios para calcular la aproximación de Padé de orden p + q , R pq ( A) . Sin embargo, la misma cantidad de flops son necesarios para calcular la aproximación de orden 2q > p + q , Rqq ( A) . La conclusión es análoga para p > q . Existen otros motivos para la utilización de aproximantes diagonales de Padé. Por ejemplo, si todos los valores propios de A están en el semiplano Re( z ) < 0 , entonces los aproximantes calculados con p > q suelen tener errores de redondeo más elevados debido a problemas de cancelación, mientras que con p < q se suelen producir mayores errores de redondeo debido al mal condicionamiento del denominador D pq ( A) . Existen ciertas aplicaciones donde la determinación de p y q se basan en el comportamiento de lim R pq (tA). t →∞ Si todos los valores propios de A están en el semiplano complejo izquierdo abierto, entonces lim e At = 0 , t →∞ y también lim R pq (tA) = 0 , si q > p. t →∞ Cuando q < p (incluyendo el caso q = 0 ) resulta que los aproximantes de Padé están acotados para valores de t elevados. Si p = q entonces los aproximantes están acotados cuando t tiende a infinito. En [MoVa78] se proponen los valores óptimos de q ( p = q ) y j en las aproximaciones de Padé y Taylor, en función de la norma de la matriz A . Esos valores están representados en la tabla que se presenta a continuación. (p,q) || A ||∞=10-2 || A ||∞=10-1 || A ||∞=100 || A ||∞=101 || A ||∞=102 || A ||∞=103 Tabla 2.1: ε=10-3 (1,0) (3,0) (2,1) (5,1) (2,5) (4,5) (2,8) (4,8) (2,11) (5,11) (1,0) (3,0) ε=10-6 (2,0) (4,0) (3,1) (7,1) (3,5) (6,5) (3,8) (5,9) (3,11) (7,11) (2,0) (4,0) ε=10-9 (3,0) (4,2) (4,1) (6,3) (4,5) (8,5) (4,8) (7,9) (4,11) (6,13) (3,0) (4,2) ε=10-12 (4,0) (4,4) (5,1) (8,3) (5,5) (7,7) (5,8) (9,9) (5,11) (8,13) (4,0) (4,4) ε=10-15 (4,0) (5,4) (6,1) (7,5) (6,5) (9,7) (6,8) (10,10) (6,11) (8,14) (4,0) (5,4) Parámetros óptimos de escalado y potenciación, en los aproximaciones de Padé y Taylor. 25 Capítulo 2: Estado del Arte Dada un pareja de valores ε y || A ||∞ , entonces el par de arriba muestra los valores (q, j ) óptimos asociados a la aproximación de Padé [R (A / 2 )] 2j j qq , y el de abajo especifica la elección más eficiente de (k , j ) correspondiente a la aproximación de Taylor [T (A / 2 )] j 2j k . A continuación se presenta un algoritmo ([GoVa96]) que calcula la exponencial de una matriz mediante aproximantes diagonales de Padé. F = dgeexp( A, δ ) . Entradas: Matriz A ∈ ℜ nxn , tolerancia δ ∈ ℜ + . Salida: 1 2 3 Matriz F = e A + E ∈ ℜ nxn de manera que || E ||∞ ≤ δ || A ||∞ . j = max(0,1 + floor(log 2 || A ||∞ )) A = A/ 2 j Calcular q de manera que sea el menor entero positivo tal que ε ( p , q ) = 23 − ( p + q ) 4 5 6 p!q! ≤δ ( p + q)!( p + q + 1)! D = In ; N = In ; X = In ; c = 1 Para k = 1 : q c(q − k + 1) c= 5.1 (2q − k + 1)k X = AX ; N = N + cX ; D = D + (−1) k cX 5.2 Para k = 1 : j F = F2 6.1 Algoritmo 2.1: Calcula la exponencial de una matriz mediante aproximantes diagonales de Padé. El coste del algoritmo anterior es 2(q + j + 1 / 3)n3 flops. En el capítulo 11 de [GoVa96] se señala la necesidad de utilizar técnicas especiales, basadas en el método de Horner y variantes, que permiten reducir el coste computacional de este método. Si, por ejemplo, q = 8 y se define D = Dqq ( A) y N = N qq ( A) , entonces N qq ( A) = U + AV y Dqq ( A) = U − AV , donde U = c0 I n + c2 A2 + (c4 I n + c6 A2 + c8 A4 ) A4 , y V = c1 I n + c3 A2 + (c5 I n + c7 A2 ) A4 , 26 Capítulo 2: Estado del Arte siendo ci , 0 ≤ i ≤ 8 , los coeficientes del polinomio N . Recientemente, Higham ([High04]) ha realizado una revisión del cálculo de exponenciales de matrices mediante aproximantes de Padé. En ese artículo Higham argumenta y justifica que la mejor elección del valor de los aproximantes de Padé es el de p = q = 13 , en lugar de los valores de 6 y 8 que otros autores anteriormente habían señalado. Además, para reducir el coste computacional, Higham utiliza técnicas de anidamiento para el cálculo de las matrices U y V ([PaSt73]). 2.2.3.1.3 Métodos Basados en Integración Numérica Como e At y e At x0 son soluciones de la EDL que tiene a la matriz A como matriz de coeficientes, es natural considerar métodos basados en la integración numérica. Los algoritmos de este tipo pueden tener un control del tamaño del paso automático, variando automáticamente el orden de la aproximación. Los métodos basados en fórmulas de un solo paso, fórmulas multipaso y fórmulas multipaso implícito (apartado 2.3.2) presentan ciertas ventajas. Son fáciles de utilizar para el cálculo de e At , sin embargo, requieren un alto coste computacional. Puesto que la ecuación de estados de un sistema dinámico lineal continuo es un caso particular de la EDO no lineal, x' (t ) = f (t , x(t ), u (t )), x(0) = x0 , su solución puede hallarse mediante métodos de integración numérica para este tipo de ecuaciones. Una desventaja de esta aproximación es la gran cantidad de operaciones necesarias, pues no hacen uso de la naturaleza especial del problema. Sin embargo, la implementación de un algoritmo que resuelva una EDO es necesaria en el caso de ecuaciones de estado o de problemas control con coeficientes variables. Los métodos numéricos para resolver la EDO x' (t ) = f (t , x(t )), x(0) = x0 , son discretos; es decir, son métodos que calculan una secuencia de aproximaciones x k = x(t k ) para un conjunto de puntos tk +1 = tk + ∆tk , k = 0,1,L, n − 1 , en donde el tamaño de paso ∆t k puede variar. En general, la aproximación x k +1 se calcula a partir de los valores previos x k , x k −1 , L, x0 . Los errores en la solución numérica de una EDO son el resultado del proceso de discretización (llamado error de truncamiento) y de los errores de redondeo. El error de discretización local es el error producido en un paso dado, considerando que son exactos los valores previos y que no hay errores de redondeo en los cálculos. Este error se puede determinar de la siguiente forma. Sea la función y k (t ) que satisface yk' (t ) = f (t , yk (t )) , yk (t k ) = xk . Entonces el error local d k está dado por d k = x k +1 − y k (t k +1 ) . 27 Capítulo 2: Estado del Arte De esta forma el error local es la diferencia entre la aproximación calculada y la solución teórica definida por la misma condición inicial en el instante t k +1 . El error de discretización global ek en el paso k es la diferencia entre la aproximación calculada x k (sin tener en cuenta los errores de redondeo) y la solución exacta x(t k ) determinada por la condición inicial x0 , es decir, ek = xk − x(t k ) . Claramente, el error global depende de todos los errores locales producidos en los pasos previos. Prácticamente, todos los códigos actuales que resuelven EDOs controlan el error local en cada instante, y no intentan controlar directamente el error global. Sin embargo, las propiedades de los errores de redondeo no son estudiadas en profundidad, en parte porque la exactitud requerida en el algoritmo de resolución de la EDO es menor que la precisión de la máquina. Métodos de Propósito General Muchas librerías que resuelven problemas de valores iniciales en EDOs, permiten calcular e At , para diferentes valores de t ∈ ℜ . El problema de utilizar estas librerías es que no se aprovecha la linealidad de la ecuación asociada al problema del cálculo de e At , y que los coeficientes que aparecen en ella son constantes. Métodos de Paso Único Dos técnicas clásicas para la resolución de ecuaciones diferenciales son los métodos de Taylor y Runge-Kutta de cuarto orden. Si se considera un tamaño de paso ∆t constante, entonces para la aproximación de Taylor de orden cuatro, se obtienen las ecuaciones xi +1 ⎛ ∆t 4 4 ⎞ ⎜ A ⎟⎟ xi = T4 (∆tA) xi , = ⎜ I + ∆tA + ... + 4 ! ⎠ ⎝ y para el método de Runge-Kutta de orden cuatro 1 1 1 1 xi +1 = xi + k1 + k 2 + k3 + k 4 , 6 3 3 6 siendo k1 = ∆tAxi , k 2 = ∆tA( xi + k1 / 2) , k 3 = ∆tA( xi + k 2 / 2), k 4 = ∆tA( xi + k 3 ) . En este caso, se puede comprobar que los dos métodos producirían idénticos resultados, si no fuese por los errores de redondeo. Como el tamaño del paso es fijo, la matriz T4 (∆tA) únicamente se calcula una vez. En tal caso, xi +1 se puede obtener a partir de xi con solo realizar un producto matriz-vector. El método de Runge-Kutta requiere cuatro de estos productos por paso. Considérese x(t ) para un valor particular de t , por ejemplo t = 1 . Si ∆t = 1 / m , entonces x(1) = x(m∆t ) ≅ xm = [T4 (∆tA)] x0 . m 28 Capítulo 2: Estado del Arte Consecuentemente, existe una conexión cercana entre este método y la aproximación de Taylor con escalado y potenciación antes comentada ([Mast69], [Whit69]). El escalado de ∆tA y su exponencial están aproximados por T4 (∆tA) . Sin embargo, incluso si m es una potencia de 2, [T4 (∆tA)] repetida. m no se obtiene normalmente mediante potenciación Métodos Multipaso Como es sabido, la posibilidad de aplicar métodos específicos multipaso para resolver problemas lineales con coeficientes constantes, tal como los basados en las fórmulas de Adams-Bashforth, no ha sido estudiada con detalle. Estos métodos no equivalen a los métodos que utilizan escalado y potenciación, puesto que la solución aproximada, para un tiempo dado, está definida en términos de soluciones aproximadas de varios tiempos anteriores. El algoritmo dependería de cómo se obtuviesen los vectores de comienzo y de cómo se determinasen el tamaño del paso y el orden. 2.2.3.1.4 Métodos Polinomiales Sea n −1 c( z ) = det( zI − A) = z n − ∑ ck z k , k =0 el polinomio característico de la matriz A ∈C nxn . Según el teorema de Cayley-Hamilton, se tiene que c( A) = 0 , y por lo tanto A n = c0 I + c1 A + L + cn−1 A n−1 . Luego cualquier potencia de A puede expresarse en términos de I , A,L, A n −1 , n −1 A k = ∑ β kj A j , j =0 por lo que e At es polinomial en A con coeficientes analíticos que dependen de t , ∞ n −1 ⎞ n −1 ⎛ ∞ t k Ak t k ⎛ n−1 tk ⎞ = ∑ ⎜⎜ ∑ β kj A j ⎟⎟ = ∑ ⎜⎜ ∑ β kj ⎟⎟ A j = ∑ α j A j . k! ⎠ k = 0 k! k = 0 k! ⎝ j = 0 j =0 ⎠ j =0 ⎝ k =0 ∞ ( 2.6 ) e At = ∑ Los siguientes métodos utilizan el polinomio característico para calcular la exponencial de una matriz. Método de Cayley-Hamilton Si se calcula una aproximación de ( 2.7 ) ∞ α j (t ) = ∑ β kj k =0 tk , k! entonces e At se puede obtener, de manera aproximada, a partir de la expresión ( 2.6 ). Los coeficientes β kj de ( 2.7 ) se pueden calcular del siguiente modo, 29 Capítulo 2: Estado del Arte δ kj si ⎧ ⎪ cj si ⎪ β kj = ⎨ c0 β k −1,n−1 si ⎪ ⎪⎩c j β k −1,n−1 + β k −1, j −1 si k < n, k = n, k > n, j = 0, k > n , j > 0. Una dificultad es que estas fórmulas recursivas son muy propensas a errores de redondeo. Por ejemplo, si A = (α ) es una matriz de orden 1, entonces β k0 = α k y (αt ) k k! k =0 ∞ α0 = ∑ resulta ser el desarrollo de Taylor de eαt , con lo cual existen los mismos problemas que se comentaron en el método de aproximaciones de Taylor. Otra dificultad de este método es que se debe conocer el polinomio característico de la matriz. Si λ1 , λ2 ,L, λn son los valores propios de una matriz cuadrada A , entonces el polinomio característico c( z ) se puede calcular a partir de n c( z ) = ∏ ( z − λi ) . i =1 Aunque los valores propios pueden calcularse de forma estable, no está claro si los coeficientes ci son aceptables. Otros métodos para el cálculo de c( z ) están descritos por Wilkinson en [Wilk92]. En este artículo, Wilkinson afirma que los métodos basados en fórmulas que obtienen los coeficientes ci a partir de funciones simétricas son inestables y costosos de implementar. Las técnicas basadas en transformaciones de semejanza fallan cuando A está próxima a ser derogatoria. En el método de Cayley-Hamilton, e At se expande en función de las matrices I , A,L, A n −1 . Si {A0 , A1 ,L, An } es un conjunto de matrices que generan el mismo subespacio, entonces existen funciones analíticas β j (t ) tales que n −1 e At = ∑ β j (t ) A j . j =0 La viabilidad de esta aproximación depende de la facilidad de generar A j y β j (t ) . Si se conocen los valores propios λ1 , λ2 ,L, λn de A , entonces se pueden aplicar cualquiera de los métodos que se presentan a continuación. Método de Interpolación de Lagrange Se basa en la expresión n e At = ∑ e j =1 λ jt n ∏ k =1 k≠ j A − λk I n . λ j − λk 30 Capítulo 2: Estado del Arte Método de Interpolación de Newton En este método la expresión utilizada es n j −1 j =2 k =1 e At = e λ1t I n + ∑ [λ1 , λ2 ,L, λ j ]∏ ( A − λ k I n ) . Las diferencias [λ1 , λ2 ,L, λ j ] dependen de t y se definen recursivamente mediante las expresiones e λ1t − e λ 2 t , [λ1 , λ2 ] = λ1 − λ2 [λ1 , λ2 , L , λk +1 ] = [λ1 , λ2 ,L, λk ] − [λ2 , λ3 ,L, λk +1 ] , k ≥ 2. λ1 − λk +1 En [Macd56] se analizan estas fórmulas cuando la matriz A tiene valores propios múltiples. Método de Vandermonde Existen otros métodos para calcular las matrices n Aj = ∏ k =1 k≠ j A − λk I n , j = 1,2,L, n , λ j − λk que son necesarias en el método de interpolación de Lagrange. Uno de estos métodos se basa en la determinación de la matriz de Vandermonde ⎡ 1 ⎢ λ ⎢ 1 V =⎢ M ⎢ n−2 ⎢λ1 ⎢⎣ λ1n −1 1 λ2 L 1 L λn −1 M O λ λ L λ n−2 2 n −1 2 M n −1 n −1 n n −1 λ 1 ⎤ λn ⎥⎥ M ⎥. n −1 ⎥ λn ⎥ λnn −1 ⎥⎦ Si v jk es el elemento ( j , k ) de V −1 , entonces n A j = ∑ v jk Ak −1 k =1 y ( 2.8 ) n e At = ∑ e j A j . λ t j =1 Cuando A tiene valores propios múltiples se puede utilizar la correspondiente matriz de Vandermonde para el cálculo de las matrices A j que aparecen en la expresión ( 2.8 ). Estos métodos polinomiales tienen un coste computacional elevado, O(n 4 ) , por lo que no son apropiados a menos que el valor de n sea pequeño. Si se almacenan las matrices A1 , A2 , L , An , entonces el coste de almacenamiento es del orden O(n 3 ) , mayor que el coste de almacenamiento necesario en los métodos no polinomiales. 31 Capítulo 2: Estado del Arte Los siguientes métodos no requieren el uso de los valores propios de A y, por lo tanto, desaparece el problema asociado a la multiplicidad de los mismos. Sin embargo, otras dificultades de la misma importancia aparecen en los algoritmos basados en estos métodos. Método Basado en Transformaciones Inversas de Laplace Si L[ ] representa a la transformada de Laplace, entonces los elementos de la matriz L[e At ] = ( sI n − A) −1 , son funciones racionales de s . En efecto, s n−k −1 Ak , k =0 c ( s ) n −1 ( sI n − A) −1 = ∑ donde n −1 c( s ) = det( sI n − A) = s n − ∑ ck s k , k =0 siendo cn −k = − traza ( Ak −1 A) , k = 1,2,L, n , k Ak = Ak −1 A − cn − k I n , k = 1,2,L, n , A0 = I n . Estas recurrencias, demostradas por Leverrier y Faddeeva [Fadd59], pueden utilizarse para evaluar e At mediante la expresión ⎡ s n−k −1 ⎤ = ∑L ⎢ ⎥ Ak , k =0 ⎣ c( s) ⎦ n −1 e At −1 donde las trasformadas inversas ⎡ s n − k −1 ⎤ L ⎢ ⎥ ⎣ c( s) ⎦ −1 pueden expresarse como series de potencias en t . Los problemas de este método son su elevado coste computacional, O(n 4 ) , y la gran influencia que tienen en él los errores de redondeo. 2.2.3.1.5 Métodos Basados en la Descomposición de Matrices Todos los métodos de descomposición están basados en hallar transformaciones de semejanza A = XBX −1 , de manera que el cálculo de f (B ) sea más sencillo que el de f ( A) , puesto que entonces, al aplicar la Propiedad 2.2, se tiene que f ( A) = Xf ( B) X −1 . 32 Capítulo 2: Estado del Arte Estos métodos resultan ser muy eficientes en problemas que involucran a matrices de dimensión elevada; además, si A es una matriz simétrica, entonces estos métodos proporcionan algoritmos simples y efectivos. El problema de estos métodos es que si la matriz X está mal condicionada, entonces se pueden producir errores de redondeo considerables. Métodos Basados en la Diagonalización de una Matriz Si A ∈C nxn tiene un conjunto de vectores propios {v1 , v2 , L , vn } linealmente independientes y se considera la matriz V = [v1 , v2 , L , vn ] , entonces se verifica la ecuación matricial AV = VD , siendo D = diag(λ1 , λ2 ,L, λn ) , con λ1 , λ2 ,L , λn los n valores propios de la matriz A . Por lo tanto, e A = Vdiag(eλ1 , e λ2 ,L, e λ n )V −1 . Si A es defectiva o está cerca de serlo, entonces cualquier error en A , incluyendo los errores de redondeo producidos en su cálculo y los errores de redondeo producidos en el cálculo de los vectores propios, pueden conducir a errores elevados en el cálculo de e At . Una forma de medir la cercanía a la defectividad es el cálculo del número de condición asociado a la matriz de vectores propios V cond(V ) =|| V || || V −1 || . Cuanto mayor sea este número más cerca se encuentra A de ser defectiva. Como el conjunto de matrices simples es un subconjunto denso del conjunto de matrices cuadradas, la mayoría de las matrices que aparecen en problemas de control o en otras áreas suelen ser simples. Además, se puede equilibrar la matriz A de manera que se minimice cond(V ) , con lo cual este método no es demasiado restrictivo. Si A tiene valores propios complejos y se desea evitar la aritmética compleja, es posible obtener la descomposición A = Vdiag( D1 , D2 ,L, Dr )V −1 , siendo Di , i = 1,2,L, r , bloques diagonales de dimensión 1x1 o 2x2 correspondientes a valores propios reales o a valores propios complejos conjugados, respectivamente. Aplicando la Propiedad 2.2 y la Propiedad 2.3, se tiene que e A = Vdiag(e D1 , e D2 ,L, e Dr )V −1 . Método de la Matriz Compañera Sea A ∈ ℜ nxn y B ∈ ℜ nxn la matriz compañera asociado al polinomio característico de A . Al ser B dispersa (véase Propiedad 6.2), pequeñas potencias de B tienen un coste menor que los usuales n 3 flops. Consecuentemente, se podría implementar el algoritmo de escalado y potenciación con un reducido coste computacional. Por otra parte, si A no es derogatoria, entonces se tiene que 33 Capítulo 2: Estado del Arte A = YBY −1 , por lo que al aplicar la Propiedad 2.2, se tiene e A = YeBY −1 . El problema de este método es que los algoritmos utilizados en la reducción de la matriz A a la forma compañera son extremadamente inestables y se deben evitar [Wilk92]. Si la ecuación diferencial original consiste en una sola ecuación lineal de orden n , escrita como un sistema lineal de ecuaciones de primer orden, entonces la matriz coeficiente del sistema está en la forma de matriz compañera. Consecuentemente, la reducción anterior no es necesaria. Por lo tanto, se podría utilizar eficazmente el método de la matriz compañera. A continuación se detalla un método para calcular e H , con H una matriz de Hessenberg inferior (las matrices compañeras son un caso particular de este tipo de matrices). Puesto que toda matriz A es similar a una matriz de Hessenberg inferior mediante una transformación ortogonal A = QHQ T , Q T Q = I n , entonces e A = Qe H Q T . Para cualquier función analítica f (z ) definida sobre el espectro de una matriz A , se tiene que A y f ( A) conmutan, en particular He H = e H H . Igualando las columnas k-ésimas en la igualdad anterior, se tiene que Hf k = n ∑h i = k −1 ik fi , k ≥ 2 , donde f k representa la columna k-ésima de e H . Si ninguno de los elementos superdiagonales de la matriz H es cero, entonces una vez se conoce f n las otras columnas se obtienen a partir de la expresión f k −1 = n ⎤ 1 ⎡ − Hf hik f i ⎥ , k = 2,3, L , n . ∑ k ⎢ hk −1k ⎣ i=k ⎦ Puesto que f n es igual a x(1) , siendo x(t ) la solución de la EDO x' (t ) = Hx(t ), x(0) = [0, 0, L ,0 , 1]T , entonces se puede utilizar uno de los métodos basados en la resolución de EDOs, comentados en 2.2.3.1.3, para el cálculo de f n . El problema de este método se presenta cuando se tiene un valor pequeño pero no despreciable de hk −1k . En este caso, los errores de redondeo producidos en el cálculo de 1 / hk −1k pueden producir un cálculo inexacto de e H . En resumen, los métodos para calcular e A que involucran la reducción de A a las formas de matriz compañera o de Hessenberg no resultan ser eficientes. 34 Capítulo 2: Estado del Arte Método Basado en la Forma Canónica de Jordan Según el Corolario 2.2, si una matriz A ∈C Jordan nxn admite la descomposición canónica de A = Xdiag( J λ1 , J λ2 , L , J λr ) X −1 , entonces e A = Xdiag(e λ1 , e J J λ2 L, e J λr ) X −1 . La dificultad de este método es que la forma canónica de Jordan no se puede calcular utilizando aritmética en coma flotante. Un simple error de redondeo puede producir que algunos valores propios múltiples se conviertan en distintos, o viceversa, alterando toda la estructura de diag( J λ1 , J λ2 , L , J λr ) y de X . En [GoWi76] y [KaRu74] se describen éstas y otras dificultades del método. Un algoritmo eficiente que calcula la forma canónica de Jordan de una matriz cuadrada compleja, se puede encontrar en [KaRu74]. En este artículo se modifica la definición de forma canónica de Jordan para que sea aplicable en el caso de trabajar con aritmética de precisión finita. Con esta definición se muestra la manera de realizar un algoritmo preciso y estable que calcule valores propios y cadenas de vectores principales asociados. Este algoritmo está basado en el cálculo de una secuencia de transformaciones de semejanza y sucesivas separaciones de rangos de subespacios nulos. Métodos Basados en la Descomposición real de Schur de una matriz Sea A ∈ ℜ nxn . Según el Teorema 6.7, A admite la descomposición real de Schur A = QSQ T , siendo Q ∈ ℜ nxn matriz ortogonal y S ∈ ℜ nxn una matriz casi triangular superior. Aplicando la Propiedad 2.2, se tiene que f ( A) se puede obtener a partir de la expresión f ( A) = Qf ( S )Q T . El problema ahora es el cálculo de f (S ) . Diversos métodos se pueden utilizar para dicho cálculo como, por ejemplo, los basados en la ecuación conmutante ( 2.1 ) (véanse [MaHI92], [Ibañ97]). Estos métodos se pueden aplicar de manera inmediata para A ∈C nxn ([DaH103]). Método Basado en la Diagonalización a Bloques de una Matriz Este método consiste en encontrar una transformación de semejanza de la matriz A ∈ ℜ nxn A = XBX −1 , siendo X ∈ ℜ nxn una matriz bien condicionada y B ∈ ℜ nxn una matriz diagonal por bloques, en la que cada bloque diagonal es casi triangular superior con valores propios cercanos o incluso múltiples. El tamaño de cada bloque debe ser tan pequeño como sea posible, manteniendo alguna cota superior para cond( S ) como, por ejemplo, cond( S ) < 100 . 35 Capítulo 2: Estado del Arte En este caso resulta que f ( A) = Xf ( B) X −1 , donde la matriz f (B ) tiene una estructura diagonal por bloques, tal como se representa en la Figura 2.1. Cada bloque diagonal de f (B ) se puede obtener a partir del correspondiente bloque de B , aplicando cualquiera de los métodos vistos anteriormente. Figura 2.1: Estructura a bloques de la matriz f (B) . Métodos de Separación Es conocido que la propiedad aditiva de la función exponencial no se verifica en el caso matricial, a menos que las matrices conmuten, es decir, e Bt e Ct = e ( B +C )t ⇔ BC = CB . Sin embargo, las exponenciales de las matrices B y C están relacionadas con la exponencial de la matriz B + C mediante, por ejemplo, la fórmula de Trotter [Trot59] ( e B +C = lim e B / m e C / m m →∞ ) m . Si las exponenciales de las matrices B y C se pueden calcular eficientemente, entonces se puede utilizar la aproximación e A ≅ (e B / m eC / m ) m para obtener la exponencial de la matriz A = B + C . Por ejemplo, si se definen la matrices B = ( A + AT ) / 2 y C = ( A − AT ) / 2 , entonces B es simétrica y C antisimétrica, por lo que se pueden calcular eficientemente e B y e C . 2.2.3.1.6 Métodos Basados en los Subespacios de Krylov Como se describió en el subapartado 2.2.2.1, la solución del problema de valores iniciales ( 2.9 ) x& (t ) = Ax(t ) , x(0) = x0 , está dada por x(t ) = e At x0 . 36 Capítulo 2: Estado del Arte En muchas ocasiones puede ser interesante calcular el producto e At x 0 sin hallar expresamente la matriz e At . A menudo, la matriz A es de gran dimensión y dispersa, como puede ocurrir, por ejemplo, en la discretización espacial de una ecuación en derivadas parciales. Una serie de métodos que calculan el producto e At v , A ∈ ℜ nxn y v ∈ ℜ n , están basados en los denominados subespacios de Krylov. Estos métodos consisten, básicamente, en obtener una aproximación de e At v a partir del subespacio de Krylov generado por los vectores {v, Av, A2 v, L , A p−1v} , siendo p un número entero positivo relativamente pequeño con relación a la dimensión de la matriz A . Entre estos métodos se encuentran el método de Lanczos, para el caso en que A sea simétrica, y el método de Arnoldi, para el caso en que A no sea simétrica. En este último método los valores propios de la matriz se aproximan mediante los valores propios de una matriz de Hessenberg de dimensión p . A partir del vector v se obtiene la reducción parcial de Hessenberg AV p = V p H p + h p +1, p v p +1e Tp , donde V p tiene p columnas ortonormales, H p es una matriz de Hessenberg superior de dimensión p , e p es la columna p-ésima de la matriz I n , y v p +1 es un vector unitario que satisface V pT v p +1 = 0 . La aproximación que se realiza es e At v ≅ βV p e H pt e1T , siendo β =|| v ||2 y e1 la primera columna de la matriz I n . Se pueden obtener muy buenas aproximaciones con valores de p relativamente pequeños, incluso se pueden disponer de cotas del error cometido en la aproximación. Por lo tanto, un problema de gran dimensión y disperso (cálculo de e At ), se reemplaza H t por un problema denso de pequeña dimensión (cálculo de e p ). Existen diversos artículos en los que se analizan estos métodos, entre los que cabe destacar [Kniz91] ,[GaSa92], [Saad92], [StLe96], [HoLS97] y [DrGr98]. 2.2.3.2 Función Signo La Propiedad 2.4 indica que la función signo matricial de una matriz coincide con la raíz cuadrada de la matriz identidad del mismo orden. Esta observación permitió a Roberts ([Robe71]) calcular el valor de la función signo matricial aplicando el método de Newton a la ecuación matricial X 2 −I = 0. Al aplicar este método, se obtiene la iteración X0 = A, X k +1 = 0.5( X k + X k−1 ) , k = 0,1,2,L , la cual converge cuadráticamente a la matriz sign ( A) , siempre que la matriz A no tenga valores propios imaginarios puros y la iteración anterior esté bien definida. Resultados más precisos pueden obtenerse si en lugar de utilizar la iteración anterior se utiliza la iteración 37 Capítulo 2: Estado del Arte X0 = A, X k +1 = X k − 0.5( X k − X k−1 ) , k = 0,1,2,L . Higham y Schreiber ([HiSh90]) sugieren utilizar una iteración que evita el cálculo de inversas. Esta iteración se obtiene a partir de la iteración anterior y de la aproximación de Schulz X k−1 ≅ X k + ( I n − X k2 ) X k . La iteración que se obtiene es X k +1 = 0.5 X k (3I n − X k2 ) , k = 0,1,2,L , la cual converge cuadráticamente a la matriz sign ( A) siempre que || I n − A2 ||< 1 y se cumplan además las condiciones necesarias de existencia de dicha función matricial. Pandey, Kenney y Laub ([PaKL90]) deducen una iteración, basada en una forma fraccionaria parcial explícita, definida por ( 2.10 ) X k +1 = p 1 1 X k ∑ ( X k2 + α i2 I n ) −1 , X 0 = A , p i =1 ξ i siendo ⎛ ξ i = 0.5⎜⎜1 + cos ⎝ (2i − 1)π 2p ⎞ 1 ⎟⎟ , α i2 = − 1 , i = 1,L, p . ξi ⎠ Kenney y Laub presentan en [KeLa91] una familia de iteraciones, basadas en la −1 / 2 aproximación de Padé de la función escalar f ( x) = (1 − x ) , definidas mediante la expresión X k +1 = X k pr ( X k2 )qs ( X k2 ) −1 , X 0 = A , donde p r y qs son polinomios de grados r y s , respectivamente. Aunque los métodos anteriores convergen cuadráticamente, esta convergencia no está asegurada en la práctica a causa de los errores cometidos en cada una de las iteraciones. Una técnica que mejora las iteraciones anteriores consiste en el escalado de las matrices que aparecen en cada iteración. Kenney y Laub presentan en [KeLa92] varios tipos de escalado que permiten mejorar las iteraciones del método de Newton sin escalado si y solo si los factores de escalado se encuentran entre el cuadrado del factor de escalado óptimo y 1. A continuación se presenta una definición del factor de escalado óptimo y una breve explicación de estas técnicas. La finalidad del método de Newton con escalado consiste en encontrar γ 1 ,L, γ k , L , de manera que la iteración X0 = A, X k +1 = 0.5[γ k X k + (γ k X k ) −1 ] , k = 0,1,2,L . converja hacia una matriz con valores propios ± 1 (véase [Balz80]). Los valores óptimos de escalado, llamados factores de escalado óptimos, se obtienen a partir del siguiente teorema. 38 Capítulo 2: Estado del Arte Teorema 2.8 ([KeLa92]). { Sean λ1( k ) , L, λ(mk ) } los iθ valores propios de la matriz X k . Si λ(jk ) = ± ρ j e j , donde ρ j > 0 , θ j < π / 2 , 1 ≤ j ≤ m , entonces el factor de escalado óptimo γ k* verifica (γ ) * 2 k ( 2.11 ) = 1 ⎛⎜ ρ i cos θ i − ρ j cos θ j ρ i ρ j ⎜⎝ ρ i cos θ j − ρ j cos θ i ⎞ ⎟, ⎟ ⎠ para una cierta pareja de valores i y j . El problema de encontrar los factores de escalado óptimos del Teorema 2.8 es que es necesario el conocimiento completo de los valores propios de la matriz X k , para k = 0,1,2,L , y además conocer la pareja de índices (i, j ) de la expresión ( 2.11 ). Por este motivo, Kenney y Laub desarrollaron en [KeLa92] una familia de métodos de escalado que son óptimos con respecto a una información incompleta de los valores propios de una matriz. Esta familia incluye métodos de escalado óptimos y semióptimos basados en la estimación de los valores propios dominantes de la matriz X k y de su inversa, vía el método de potencias ([GoVa96], página 330) y seleccionando los valores de escalado óptimo para esos valores propios según la expresión ( 2.11 ). Otras estrategias para la determinación de factores de escalado se basan en la determinación de factores de escalado en la descomposición polar de una matriz ([HoJo91], capítulo 6). Entre ellas cabe destacar ⎛ || X k−1 ||2 ⎞ ⎟⎟ ([Barr79]), • γ kB = ⎜⎜ ⎝ || X k ||2 ⎠ 1/ 4 • γ 1,∞ k ⎛ || X k−1 ||1|| X k−1 ||∞ ⎞ ⎟⎟ = ⎜⎜ || X || || X || k 1 k ∞ ⎠ ⎝ • γ k = det ( X k ) • γ F k −1 / n ⎛ || X k−1 || F = ⎜⎜ ⎝ || X k || F ([High86]), , siendo n la dimensión de la matriz X k ([Byer87]), 1/ 2 ⎞ ⎟⎟ ⎠ , siendo || || F norma de Frobenius ([KeLa92]). 2.2.3.3 Función Raíz Cuadrada Uno de los primeros intentos para el cálculo de raíces cuadradas de un matriz aparece en [BjHa83]. En este artículo Björck y Hammarling describen un método rápido y estable que calcula la raíz cuadrada de una matriz compleja mediante la descomposición real de Schur de una matriz. Aunque este método se puede aplicar a matrices reales con únicamente valores propios reales, fracasa cuando la matriz real tiene valores propios complejos. Higham propone en [Hig287] extender el método de Björck y Hammarling para matrices reales con valores propios reales o complejos que evita la aritmética compleja. Varios autores han utilizado el método de Newton para implementar algoritmos que calculan raíces cuadradas de una matriz. A continuación se describen algunos de ellos. Sea A ∈ C nxn y la ecuación matricial 39 Capítulo 2: Estado del Arte F(X ) = X 2 − A = 0. Aplicando el método de Newton, se obtiene la recurrencia X k +1 = X k − F ' ( X k ) −1 F ( X k ) , k = 0,1,2,... , donde F ' es la derivada de Fréchet ([Grif81]) de la función F . Mediante el cálculo de la derivada de Fréchet se llega a la recurrencia X k H k + H k X k = A − X k2 ⎫ ⎬, k = 0,1,2,L , X k +1 = X k + H k ⎭ siendo X 0 una matriz previamente seleccionada que suele coincidir con la propia matriz A o con la matriz identidad. Esta iteración converge cuadráticamente a una raíz cuadrada de A siempre que || X − X 0 || sea suficientemente pequeño y la transformación lineal F ' ( X ) sea no singular. El problema de la iteración anterior es que en cada iteración es necesario resolver una ecuación matricial de Sylvester para matrices densas, lo cual requiere la utilización del método de Bartels-Stewart ([BaSt71]) con el consiguiente alto coste computacional. Una posible mejora consiste en suponer que las matrices H k y X k conmutan, con lo que se pueden deducir las iteraciones Yk +1 = 0.5(Yk + Yk−1 A) , Z k +1 = 0.5( Z k + AZ k−1 ) , las cuales, en caso de converger, lo hacen hacia una raíz cuadrada de la matriz A . El problema de estas dos iteraciones es que son numéricamente inestables tal como se demuestra en [High84]. En este mismo artículo Higham demuestra que si se utilizan las iteraciones acopladas Y0 = A , Z 0 = I n , Yk +1 = 0.5(Yk + Z k−1 ) ⎫⎪ ⎬, k = 0,1,2, L , Z k +1 = 0.5( Z k + Yk−1 )⎪⎭ basadas en las iteraciones de Denman-Beavers (DB) ([DeBe76]), entonces se obtiene un algoritmo numéricamente estable. Si la matriz A no tiene valores propios reales negativos y todas las iteraciones están bien definidas, se puede demostrar que Yk → A1 / 2 , Z k → A −1 / 2 , cuando k → ∞ . Posteriormente en [Hig297], Higham establece nuevas iteraciones basadas en iteraciones utilizadas para la función signo matricial: • Un par de esas iteraciones acopladas, basadas en la iteración de Schulz de la función signo matricial, evitan el cálculo de inversas. Estas iteraciones se definen mediante las expresiones Y0 = A , Z 0 = I n , 40 Capítulo 2: Estado del Arte Yk +1 = 0.5Yk (3I n + Z k Yk ) ⎫ ⎬, k = 0,1,2, L . Z k +1 = 0.5(3I n + Z k Yk )Yk ⎭ Si || diag( A − I n , A − I n ) ||< 1 , entonces Yk y Z k convergen cuadráticamente a A1 / 2 y A −1 / 2 , respectivamente. • Otro par de iteraciones acopladas están basadas en la iteración ( 2.10 ). Estas iteraciones son Y0 = A , Z 0 = I n , ⎫ ⎪ ⎪ ⎬ , k = 0,1,2,L. p −1 ⎪ 1 1 2 Z k +1 = Z k ∑ Yk Z k + α i I n ⎪⎭ p i =1 ξi Yk +1 = ( 2.12 ) ( p 1 1 Yk ∑ Z kYk + α i2 I n p i =1 ξi ( ) −1 ) Si A no tiene valores propios reales negativos, entonces las iteraciones Yk y Z k definidas en ( 2.12 ) convergen a A1 / 2 y A−1 / 2 , respectivamente. Al igual que ocurre con la función signo matricial, es conveniente utilizar técnicas de escalado que aceleren la convergencia de los métodos descritos anteriormente. Estas técnicas aplicadas a la iteración DB se pueden expresar como Yk +1 = 0.5[γ k Yk + (γ k Z k ) −1 ] ⎫⎪ ⎬, k = 0,1,2, L . Z k +1 = 0.5[γ k Z k + (γ k Yk )]−1 ⎪⎭ De igual modo, se pueden utilizar técnicas del escalado para las iteraciones ( 2.12 ). Basándose en la técnica de escalado de la función signo matricial descrita en [Byer87], Higham, en ([Hig294], determina factores de escalado para el cálculo de raíces cuadradas de una matriz. En este artículo propone utilizar el factor de escalado γ k = det(Yk ) det( Z k ) −1 /( 2 n ) , De este modo, la descomposición LU se puede utilizar tanto para hallar las inversas de las matrices Yk y Z k como para determinar el factor γ k . Otra estrategia utilizada por Hoskins y D. J. Walton en [HoWa78] consiste en estimar el radio espectral ([HoJo91], capítulo 1) de las matrices Pk , Pk−1 , Qk y Qk−1 . 2.2.3.4 Función Raíz p-ésima de una Matriz En [HoWa79], Hoskins y Walton proponen la iteración X0 = A, X k +1 = 1 [( p − 1) X k + AX k1− p ] , p basada en el método de Newton, que permite calcular la raíz p-ésima de una matriz A simétrica y definida positiva. Sin embargo, como se demuestra en [Smit03], dicha iteración es inestable, a menos que A esté extremadamente bien condicionada. Además, 41 Capítulo 2: Estado del Arte esa iteración generalmente no converge para otros tipos de matrices que admiten raíces p-ésimas. En [TsSY88], Tsai, Shieh y Yates definen iteraciones cuya velocidad de convergencia es un parámetro. Las iteraciones acopladas que permiten una convergencia cuadrática a una raíz p-ésima se definen mediante las expresiones G0 = A , R0 = I n , Gk +1 = Gk [(2 I n + ( p − 2)Gk )( I n + ( p − 1)Gk ) −1 ] p ⎫⎪ ⎬ , k = 0,1,2,L , Rk +1 = Rk (2 I n + ( p − 2)Gk ) −1 ( I n + ( p − 1)Gk ) ⎪⎭ cumpliéndose que Gk → I n y Rk → A1 / p , cuando k → ∞ . La expresión integral 1/ p A = psen (π / p) π ∞ A∫ (x p + A) dx , −1 0 puede deducirse a partir de una identidad estándar en el campo complejo ([Bhat97], [MaHI92]). En [HaHS00], M. Hasan, J. Hasan y L. Scharenroich proponen calcular aproximadamente la integral anterior mediante cuadratura Gaussiana. En [Smit03], Smith muestra un método basado en la descomposición real de Schur de una matriz para el cálculo de raíces p-ésimas de una matriz que es estable numéricamente. A continuación se detalla ese método. Según el Teorema 6.7, dada una matriz A ∈ ℜ nxn , entonces existe una matriz casi triangular superior S ∈ ℜ nxn y una matriz ortogonal Q ∈ ℜ nxn de manera que A = QSQ T . Para calcular la raíz p-ésima U ∈ ℜ nxn de la matriz S , se siguen los siguientes pasos: 1 Determinar U ii y Rii(q ) ( i = 1,2,L, m , q = 1,2,L, p − 2 ) mediante las siguientes expresiones U ii = S ii1/ p , Rii(1) = U ii2 , L , Rii( p −2 ) = U iip −1 , i = 1,2,L, m . 2 Para k = 1 : n − 1 2.1 Para i = 1 : n − k 2.1.1 Calcular U i ,i + k , resolviendo las ecuaciones p −1 p −2 h =0 m =0 S ij = ∑ U iip −1−hU ijU hjj + ∑ U iip −2−m Bij( m ) , siendo Bij( m ) = (q) i ,i + k 2.1.2 Calcular R j −1 ∑U k = i +1 ik Rij( m ) . , q = 1,2,L, p − 2 mediante las expresiones q q −1 h =0 m =0 Rij( q ) = ∑ U iiq − hU ijU hjj + ∑ U iiq −1− m Bij( m ) . 42 Capítulo 2: Estado del Arte Una vez se ha determinado la matriz U ∈ ℜ nxn , la raíz p-ésima X se obtiene a partir de la expresión X = QUQ T . Recientemente en [BiHM04], Bini, Higham y Meini han presentado una variedad de fórmulas que permiten calcular la raíz p-ésima de una matriz mediante técnicas de integración numérica. 2.2.3.5 Función Logaritmo El logaritmo de una matriz A ∈C nxn cercana a la matriz identidad de orden n , puede encontrarse fácilmente utilizando la serie de Taylor log A = log( I n − B) = − B − B 2 / 2 − B 3 / 3 − L , siendo B = I n − A . Desafortunadamente, si A no se encuentra cerca de la matriz identidad, entonces los métodos basados en esta serie o no convergen o lo hacen muy lentamente. Una forma de solucionar este problema consiste en utilizar la igualdad ( 2.13 ) log A = 2 k log A1 / 2 , k pues al hacer k → ∞ se tiene que A1 / 2 → I n , y así se evita el problema comentado anteriormente. Este método, desarrollado por Kenney y Laub ([KeL289]), tiene como nombre “método inverso de escalado y potenciación”, puesto que se trata del proceso inverso al método de escalado y potenciación utilizado en el cálculo de la exponencial de una matriz. En ese artículo Kenney y Laub proponen calcular las raíces cuadradas mediante el método basado en la descomposición real de Schur de una matriz que se describe en [BjHa83] y [Hig287]. k Los métodos de cálculo de funciones de matrices basados en la descomposición real de Schur de una matriz tienen el problema de no funcionar bien cuando los valores propios de la matriz están cercanos entre sí ([BjHa83], [Parl76]). En [KeLa98] Kenney y Laub presentan un método, basado en esa descomposición, que evita este problema utilizando para ello una nueva expresión de la derivada de Fréchet ([Grif81]) del logaritmo en términos de la función τ ( x) = tanh( x) / x , junto a una aproximación de Padé de la función τ . En [ChHi01], Cheng, Higham, Kenney y Laub utilizan una variante del método inverso de escalado y potenciación en la que las raíces cuadradas se aproximan mediante una iteración matricial y ciertos parámetros se eligen dinámicamente para minimizar el coste computacional, y de este modo alcanzar la precisión necesaria. Para ello utilizan la fórmula log A = 2 s log Y ( s ) − E1 − 2 E 2 − L − 2 s −1 E s , Ei = log Y ( i ) Z ( i ) , donde Y (i ) y Z (i ) son los valores finales de una iteración del tipo DB aplicada a Y ( i −1) . Esta iteración está definida por las expresiones M k +1 = 0.5[ I n + 0.5( M k + M k−1 )] , M 0 = Y (i −1) Yk +1 = 0.5Yk ( I n + M k−1 ) , Y0 = Y ( i −1) , 43 Capítulo 2: Estado del Arte Z k +1 = 0.5Z k ( I n + M k−1 ) , Z 0 = I , siendo M k = Yk Z k . Tanto el método descrito en [KeL289] como el descrito en [ChHi01] deben evaluar un aproximante diagonal de Padé rm ( x) = p m ( x) / q m ( x) = log(1 + x) + O( x 2 m +1 ) , sobre matrices cuadradas A que cumplen la condición || A ||< 1 , siendo m ≤ 16 y || . || cualquier norma matricial subordinada. En los dos métodos anteriores la forma de calcular rm (x) está basada en el método de Horner modificado para el caso de funciones matriciales racionales. Sin embargo, varias alternativas se han realizado a la hora de calcular rm (x ) , como las propuestas por Dieci y Papini en [DiPa00]. Estos autores argumentan que para calcular aproximantes diagonales de Padé es preferible utilizar fórmulas de cuadratura, y de este modo evitar el mal condicionamiento que tienen las matrices que aparecen en el denominador de la expresión matricial de los aproximantes de Padé. Más recientemente Higham ([High01]) ha realizado un estudio de diversos métodos basados en los aproximantes de Padé, en las fracciones continuas y en las fracciones parciales: • Para los aproximantes de Padé, Higham analiza los métodos de Horner, PatersonStockmeyer-Van Loan ([Pate73]) y Van Loan ([VanL79]). • Para las fracciones continuas, Higham considera la fracción continua ([BaGr96]) rm ( x) = c1 x c2 x c3 x 1+ 1+ L 1+ , c2 m −1 x 1 + c2 m x donde c1 = 1 , c 2 j = j j , c 2 j +1 = , j = 1,2, L . 2(2 j − 1) 2(2 j + 1) • Para fracciones parciales, Higham define α (j m ) x , rm ( x) = ∑ ( m) j =1 1 + β j x m ) ) los pesos y β (m los nodos de la regla de cuadratura de Gausssiendo α (m j j Legendre en el intervalo [0,1] . Los resultados de este estudio confirman que los métodos basados en los aproximantes de Padé y el método basado en fracciones continuas sufren de una cierta inestabilidad cuando la norma de la matriz tiene un valor cercano a 1 y m es grande. Desde el punto de vista computacional, las mejores elecciones corresponden a las aproximaciones basadas en Padé y la correspondiente a la expansión en fracciones 44 Capítulo 2: Estado del Arte parciales; pero esta última implementación, junto con la versión de los aproximantes de Padé vía Paterson-Stockmeyer-Van Loan, son más ricas en operaciones del nivel 3 de BLAS. Desde el punto de vista de coste de almacenamiento, la elección del método de Padé vía Paterson-Stockmeyer-Van Loan es el peor, aunque para valores habituales de m ( m ≤ 16 ) el coste de almacenamiento puede ser admisible. El método basado en la expansión en fracciones parciales es fácilmente paralelizable y además no sufre de la inestabilidad cuando se tienen matrices con norma cercana a 1 y valores de m grandes. Finalmente, Higham concluye que, en términos generales, el mejor método es el de expansión en fracciones parciales, aunque en casos especiales, como por ejemplo cuando se utilizan máquinas de altas prestaciones en las que los productos de matrices son más rápidos que las inversiones y se dispone de suficiente memoria, el método de Paterson-Stockmeyer-Van Loan puede ser la mejor elección, siempre que || A || sea significativamente menor que uno. 2.2.3.6 Función Coseno El siguiente método calcula el coseno de una matriz A ∈C nxn mediante la aproximación de Padé. Aunque el algoritmo original se encuentra en [SeBl80], en este subapartado se describe una mejora de él ([Hig203]). Este algoritmo consta, básicamente, de cuatro etapas: Etapa 1: Reducir la norma de la matriz. Se aplican sucesivamente tres técnicas para reducir la norma de la matriz A : • En primer lugar se aplica una transformación de bajo coste que explota la relación de periodicidad de la función coseno, cos( A − πqI n ) = (−1) q cos( A) , q ∈ Z . El entero q se elige de manera que minimice el valor de || A − πqI n || . Este valor no es sencillo de calcular, a menos que se haga algún tipo de aproximación como la que se apunta en el citado artículo. Esta aproximación consiste en determinar el entero q más cercano a t = traza ( A) / n que minimice el valor de || A1 || , siendo A1 = A − πqI n . • A continuación se aplican técnicas de equilibrado sobre la matriz A1 obtenida en el paso anterior. El equilibrado de A1 consiste en encontrar una matriz diagonal D , de manera que la matriz A2 = D −1 A1D cumpla que para cada valor i , i = 1,2,L, n , la 1-norma de su i-ésima fila y la 1-norma de su i-ésima columna sean de magnitud semejante. • Por último, se realiza el escalado de la matriz A2 . Para ello se determina el valor de un entero j que cumpla 2 − j || A2 ||∞ ≤ 1 < 2 − j +1 || A2 ||∞ , y se define la matriz A3 = A2 / m , siendo m = 2 j . 45 Capítulo 2: Estado del Arte Etapa 2: Calcular la aproximación de Padé. El cálculo de los coeficientes de los polinomios que aparecen en la aproximación de Padé se realiza utilizando computación simbólica (Maple y Matemática). Con los valores calculados se obtiene la matriz B3 = R pq ( A3 ) ≅ cos A3 . Etapa 3: etapa. Aplicar las transformaciones inversas a las realizadas en la primera La transformación inversa del escalado consiste en determinar B2 = cos A2 a partir de B3 = cos A3 . Para ello, se utiliza el siguiente código: B2 = B3 Para i = 0 : j − 1 B2 = 2 B22 − I n . 2.1 1 2 Como se puede observar, el cálculo realizado en el bucle está basado en la identidad cos 2 B = 2 cos 2 B − I n , B ∈C nxn . Las otras dos transformaciones inversas consisten en determinar B1 a partir de B2 y B a partir de B1 , utilizando para ello las expresiones B1 = DB2 D −1 y B = (−1) q B1 . Esta última fórmula está basada en la identidad cos A = (−1) q cos( A − πqI n ) , A ∈C nxn . 2.2.3.7 Caso General En ([DaH103]), se detalla un método general para calcular funciones de matrices complejas basado en la forma de Schur. Este método utiliza la siguiente propiedad. Propiedad 2.7 ([Parl74]). Si S = [ S ij ] tiene una estructura triangular superior por bloques, entonces F = f (S ) tiene la misma estructura por bloques F = [ Fij ] , cumpliéndose que para i < j , j −1 S ii Fij − Fij S jj = ∑ Fik S kj − ( 2.14 ) k =i j ∑S k =i +1 ik Fkj . El algoritmo básicamente se divide en cuatro etapas: • Obtener la descomposición de Schur de la matriz A , A = QSQ * , con S ∈C nxn triangular superior y Q ∈C nxn unitaria. 46 Capítulo 2: Estado del Arte • Reordenar la forma de Schur de la matriz A , agrupando los valores propios cercanos. Para ello se calcula una transformación bien condicionada definida por una matriz V ∈ C nxn de manera que la matriz S = VSV −1 tenga los valores propios cercanos en el mismo cluster. Esta matriz puede estructurarse en bloques ( F = [ Fij ]mxm ) de tal modo que los bloques diagonales correspondan a los clusters de valores propios cercanos. • Calcular F = f (S ) , hallando los bloques diagonales, Fii = f ( S ii ) mediante la aproximación de Taylor adaptada a matrices triangulares superiores con valores propios cercanos, y los bloques no diagonales mediante la expresión ( 2.14 ). • Hallar B = f ( A) , calculando B = QV −1 FVQ * . A continuación se presenta el algoritmo de Schur-Parlet aparecido en [DaH103]. Entradas: Matriz A ∈C Salida: 1 2 3 nxn y f (z ) función analítica. Matriz B = f ( A) ∈C nxn . [Q, S ] = schur( A) [V , S ] = reorschur( S ) Calcular F = f (S ) : 3.1 Para i = 1 : m 3.1.1 Fii = f ( S ii ) 3.1.2 Para j = i − 1 : −1 : 1 3.1.2.1 Calcular Fij resolviendo la ecuación matricial de Sylvester j −1 S ii Fij − Fij S jj = ∑ S ik Fkj − k =i 4 j ∑F k =i +1 ik S kj B = QV −1 FVQ * Algoritmo 2.2: Algoritmo de Schur-Parlett. 2.2.4 Software de Funciones de Matrices El software disponible para el cálculo de funciones de matrices es escaso, salvo el disponible en entornos comerciales de desarrollo como MATLAB. 2.2.4.1 Expokit Se trata de un paquete de software numérico para el cálculo de exponenciales de matrices densas o dispersas, reales o complejas, escrito en FORTRAN y MATLAB, y disponible en http://www.maths.uq.edu.au/expokit/. Más concretamente, Expokit permite calcular exponenciales de matrices de pequeño tamaño, mediante aproximaciones de Chebyshev y de Padé, y productos de la forma e At v para A matriz dispersa y v vector, mediante un algoritmo basado en los subespacios de Krylov (procesos de Arnoldi y Lanczos). 2.2.4.2 Proyecto “Parallel Computation of Matrix Functions” Fruto de un proyecto de investigación denominado “Parallel Computation of Matrix Functions”, y desarrollado durante los años 1998 y 2001, se publicaron diversos 47 Capítulo 2: Estado del Arte artículos y se desarrollaron un conjunto de rutinas escritas en FORTRAN, denominado “LogPack”, que calculan logaritmos de matrices basados en el método de escalado inverso y potenciación ([ChHi01]). Estas rutinas se encuentran disponibles en la dirección de Internet http://www.ma.man.ac.uk/~higham/PCMF/. 2.2.4.3 Proyecto “Numerical Analysis of Matrix Functions” El proyecto de investigación “Numerical Analysis of Matrix Functions”, desarrollado durante los años 2001 y 2004, y auspiciado por la agencia de investigación “Engineering and Physical Sciences Research Council” (EPSRC), ha permitido un notable desarrollo teórico y práctico del cálculo de funciones de matrices: • Método general para el cálculo de funciones de matrices complejas ([DaH103]). • Métodos para calcular funciones trascendentes y raíces p-ésimas. • Técnicas que permiten obtener f ( A)b , siendo f ( z ) función analítica, A matriz cuadrada y b vector, sin calcular explícitamente f ( A) ([DaH203]). • Teoría de la perturbación y números de condición asociados al cálculo de funciones de matrices ([Davi04]). • Teoría y métodos para las funciones matriciales no primarias ([HiMN03], [HiMN03], [DaSm02]). El software disponible (http://www.maths.man.ac.uk/~higham/NAMF/), consiste en un conjunto de ficheros de tipo “M” y de tipo “MEX” de MATLAB, para el cálculo de funciones de matrices basados en el Algoritmo 2.2. 2.3 Ecuaciones Diferenciales Ordinarias (EDOs) 2.3.1 Definiciones y Propiedades La forma general de una EDO con valores iniciales es x' (t ) = f (t , x(t )) , t 0 ≤ t ≤ t f , ( 2.15 ) x(t 0 ) = x0 , siendo x(t ) ∈ ℜ n y f una función vectorial. Definición 2.5 Se dice que una función f (t , x) satisface la condición de Lipschitz con respecto a la variable x en el dominio [t 0 , t f ]xℜ n , si verifica que existe una constante K > 0 , denominada constante de Lipschitz de la función f (t , x) , de manera que || f (t , x1 ) − f (t , x2 ) ||≤ K || x1 − x2 || , ∀(t , x) ∈ [t 0 , t f ]xℜ n . Teorema 2.9 [Flet80]) Sea f (t , x) continua y lipschitziana en el dominio [t 0 , t f ]xℜ n , entonces la EDO de valores iniciales ( 2.15 ) tiene una única solución en [t 0 , t f ]xℜ n . 48 Capítulo 2: Estado del Arte Cuando se aplican métodos numéricos para la resolución de EDOs es necesario, en ocasiones, exigir a f (t , x) condiciones más fuertes que la continuidad y ser lipschitziana. Por ejemplo, exigir que f (t , x) sea analítica o que sea diferenciable hasta un cierto orden. Un concepto muy utilizado en la resolución numérica de EDOs es el de problemas de tipo rígido (“stiff” en inglés). Aunque no existe una definición de tal concepto, cada autor sugiere una aproximación de su significado intuitivo. Esto es así porque, aún no siendo posible dar su definición rigurosa y que ésta sea aplicada en teoremas o propiedades, su uso es muy útil cuando se trata de analizar las propiedades numéricas de un determinado método de resolución de EDOs. Dos aproximaciones se presentan a continuación. Una de ellas fue la primera que introdujo este concepto aplicado a cualquier tipo de ecuaciones diferenciales y la segunda a EDOs. • “Las ecuaciones diferenciales de tipo rígido son aquellas ecuaciones donde ciertos métodos implícitos, en particular los métodos BDF, funcionan mejor, normalmente mucho mejor, que los métodos explícitos” (Curtiss y Hirschfelder, 1985). • “Se dice que una EDO es rígida si su solución numérica para algunos métodos requiere (quizás en una porción del intervalo donde está definida la solución) una disminución del tamaño de paso para evitar la inestabilidad” ([Iser98]). 2.3.2 Métodos Numéricos para la Resolución de EDOs Los métodos numéricos más utilizados para la resolución de la EDO ( 2.15 ) se suelen clasificar en dos grandes grupos (véase [AsPe91]): métodos de un solo paso, como el método de Euler, los θ-métodos y los métodos de Runge-Kutta, y métodos de varios pasos o multipaso como los métodos de Adams-Basforth, Adams-Moulton y BDF. Estos métodos conducen a una ecuación en diferencias, representada por un sistema de ecuaciones algebraicas, cuya solución permite obtener valores aproximados a la solución del problema original en un conjunto discreto de puntos. Si se desean aproximaciones continuas en un intervalo, la solución en los puntos discretos puede ser interpolada, aunque también se han desarrollado métodos de Runge-Kutta continuos capaces de proporcionar soluciones aproximadas en los puntos intermedios. 2.3.3 Métodos de un solo Paso Estos métodos se caracterizan por utilizar únicamente información del paso anterior. Un paso típico de estos métodos consiste en obtener una aproximación xn ≅ x(t n ) a partir de la aproximación xn−1 obtenida en el paso anterior. 2.3.3.1 Métodos Basados en las Series de Taylor Si se trunca el desarrollo en serie de Taylor de la función x(t ) alrededor del punto t n−1 , se tiene ( 2.16 ) xn = xn −1 + hxn' −1 + h 2 '' h p p) xn −1 + L + xn −1 , p! 2! siendo h = t n − t n−1 . Si las derivadas parciales con respecto a x y a t se evalúan en el punto (t n−1 , y n−1 ) , entonces 49 Capítulo 2: Estado del Arte xn' −1 = f (t n−1 , xn−1 ) ≡ f , xn'' −1 = f t + f y f , xn'''−1 = f tt + 2 f ty f + f y f t + f yy f 2 + f y2 f , etc. La sustitución de las expresiones anteriores en ( 2.16 ) permite obtener el valor de xn . Aunque el error cometido en un paso puede ser muy pequeño, el problema es que se deben conocer las derivadas parciales de la función f (t , x) hasta un cierto orden. 2.3.3.2 Métodos de Runge-Kutta Definición 2.6 Un método de Runge-Kutta de s etapas se define a partir de las siguientes expresiones s X i = xn−1 + h∑ aij f (t n−1 + c j h, X j ) , 1 ≤ i ≤ s , j =1 s xn = xn−1 + h∑ bi f (t n−1 + ci h, X i ) . i =1 Los métodos de Runge-Kutta se pueden representar a partir de los coeficientes aij y bi , como c1 c2 M cs a11 a21 M a s1 b1 L a1s L a2 s O M , L a ss L bs a12 a22 M as 2 b2 siendo s ci = ∑ aij , i = 1,2, L , s . j =1 Definición 2.7 El método de Runge-Kutta se dice explícito si aij = 0 para todo j ≥ i . Algunos ejemplos clásicos de los métodos de Runge-Kutta se muestran a continuación. • Método de Euler hacia adelante. 0 0 1 • . Familia uniparamétrica de métodos de segundo orden. 0 0 α α 1− 1 2α 0 0 . 1 2α 50 Capítulo 2: Estado del Arte • Método trapezoidal explícito ( α = 1 ). • Método del punto medio explícito ( α = 1 / 2 ). • Familia uniparamétrica de métodos de tercer orden de tres etapas. 0 2 3 2 3 • 0 2 3 2 1 − 3 4α 1 4 0 0 0 0 1 . 0 4α 3 −α α 4 Método de Runge-Kutta clásico de cuarto orden. 0 1 2 1 2 1 0 1 2 0 0 0 0 0 0 0 0. 1 1 3 0 1 6 1 2 0 1 3 0 0 1 6 Definición 2.8 El método de Runge-Kutta se dice implícito si aij ≠ 0 para algún j ≥ i . La mayor parte de los métodos de Runge-Kutta implícitos provienen de métodos basados en fórmulas de cuadratura, algunos de los cuales se presentan a continuación. • Métodos de Gauss. • Método del punto medio implícito. 1 2 • 1 2. 1 Métodos de Radau: Corresponden a fórmulas de orden 2 s − 1 que provienen de fórmulas de cuadratura donde uno de los extremos está incluido ( c1 = 0 o cs = 0 ). • Método de Euler hacia atrás. 1 1 1 • . Método de Lobatto: Corresponden a fórmulas de orden 2 s − 2 que provienen de fórmulas de cuadratura en las que la función es muestreada en ambos lados del intervalo. • Método trapezoidal. 51 Capítulo 2: Estado del Arte 0 1 0 1 2 1 2 0 1 . 2 1 2 • Método de Lobatto para s = 3 . 0 1 2 1 0 5 24 1 6 1 6 0 1 3 2 3 2 3 0 1 − 24 1 . 6 1 6 2.3.3.3 Métodos Multipaso Lineales Definición 2.9 Un método multipaso lineal de k pasos se define a partir de la expresión ( 2.17 ) k k j =0 j =0 ∑ α j xn− j =h∑ β j f n− j , siendo f n − j = f (tn − j , xn − j ) , y α j y β j , para j = 0,1, L , k , parámetros característicos del método. En la expresión anterior se supone que α 0 ≠ 0 (para evitar el escalado se elige α 0 = 1 ) y | α k | + | β k |≠ 0 . Definición 2.10 Un método multipaso se dice explícito si β 0 = 0 . En caso contrario, se dice que el método es implícito. 2.3.3.3.1 Métodos de Adams Si se integra la EDO ( 2.15 ), se tiene que x(tn ) = x(tn −1 ) + tn ∫ f (t , x(t ))dt . t n −1 En estos métodos, el integrando f (t , x(t )) se aproxima mediante un polinomio interpolador utilizando como puntos base algunos valores f (ti , xi ) calculados previamente. Según esto, los valores de los parámetros α j en los métodos Adams son α 0 = 1 , α1 = −1 y α j = 0 para j > 1 . 52 Capítulo 2: Estado del Arte Los métodos de Adams explícitos, denominados también métodos de Adams-Bashforth, se obtienen interpolando f (t , x) a partir de los valores previos de f (t , x) en los instantes t n−1 , t n−2 , L , t n−k . Estos métodos se definen a partir de la fórmula k xn = xn−1 + h∑ β j f n− j , j =1 donde ⎛ i ⎞ ⎟⎟γ i , i = j −1⎝ j − 1⎠ k −1 β j = (−1) j −1 ∑ ⎜⎜ ⎛− s⎞ ⎟ds . i ⎟⎠ 0⎝ 1 γ i = (−1) ∫ ⎜⎜ i Esta fórmula corresponde a un método de k pasos puesto que utiliza información de los k instantes anteriores t n−1 , t n−2 , L , t n−k . El método de Adams-Bashforth de un paso corresponde al método de Euler hacia delante. Si se considera k = 2 , γ 0 = 1 y γ 1 = 1 / 2 , se obtiene la fórmula de AdamsBashforth de dos pasos 1 ⎛3 ⎞ xn = xn−1 + h⎜ f n−1 − f n−2 ⎟ . 2 ⎝2 ⎠ La fórmula de Adams-Bashforth de tres pasos viene dada por 16 5 ⎛ 23 ⎞ xn = xn −1 + h⎜ f n −1 − f n−2 + f n −3 ⎟ . 12 12 ⎝ 12 ⎠ En la siguiente tabla vienen reflejados los valores característicos de las fórmulas de Adams-Bashforth hasta seis pasos. β=1 k β=2 β=3 β=4 β=5 β=6 1 1 2 3/2 -1/2 3 23/12 -16/12 5/12 4 55/24 -59/24 37/24 -9/24 5 1901/720 -2774/720 2616/720 -1274/720 251/720 6 4277/1440 -7923/1440 9982/1440 -7298/1440 2877/1440 -475/1440 Tabla 2.2: Coeficientes del método de Adams-Bashforth. Los métodos de Adams implícitos, denominados también métodos de Adams-Moulton, se caracterizan por interpolar la función f (t , x) en puntos base de instantes anteriores, y 53 Capítulo 2: Estado del Arte por tanto con valores conocidos, y en el correspondiente al instante t n , con valor desconocido. La fórmula que los define viene dada por k xn = xn−1 + h∑ β j f n− j . j =0 En la siguiente tabla vienen reflejados los valores característicos de las fórmulas de Adams-Moulton hasta seis pasos. β1 β2 β3 β4 β5 β6 r=1 k=1 1 r=2 k=1 1/2 1/2 r=3 k=2 5/12 8/12 -1/12 r=4 k=3 9/24 19/24 -5/24 1/24 r=5 k=4 251/720 646/720 -264/720 106/720 -19/720 -482/1440 -173/1440 r=6 k=5 475/1440 1427/1440 -798/1440 Tabla 2.3: 27/1440 Coeficientes del método de Adams-Moulton, siendo r el orden del método. 2.3.3.3.2 Métodos BDF Se trata de la familia de métodos más utilizada para problemas de tipo rígido. Los métodos BDF se caracterizan porque f (t , x) se evalúa únicamente en el extremo de la derecha del paso (tn , xn ) . Estos métodos se obtienen al derivar el polinomio que interpola los valores anteriores de x , e igualar la derivada de x en t n a f (tn , xn ) . La fórmula que define al método BDF de orden r ≥ 1 es ( 2.18 ) r xn = ∑ α j xn − j + hβ f (tn , xn ) . j =1 Los coeficientes α j , para j = 1,2, L , r , y β se muestran en la siguiente tabla. 54 Capítulo 2: Estado del Arte β α1 r =1 1 1 r=2 2/3 4/3 -1/3 r =3 6/11 18/11 -9/11 2/11 r=4 12/25 48/25 -36/25 16/25 r =5 60/137 300/137 -300/137 200/137 -75/137 12/137 Tabla 2.4: α2 α3 α4 α5 -3/25 Coeficientes del método BDF. 2.3.4 Linealización a Trozos de EDOs La resolución de EDOs que se presenta en este apartado ([Garc98]), se basa en la aproximación, en cada subintervalo, de la ecuación diferencial no lineal por una Ecuación Diferencial Lineal (EDL). Sea la EDO con valores iniciales x' (t ) = f (t , x(t )) , t ∈ [t 0 , t f ] , ( 2.19 ) x(t0 ) = x0 ∈ ℜ n , cumpliendo f (t , x) las condiciones necesarias para que el problema anterior tenga solución y además sea única. Dada una partición t 0 < t1 < L < t l −1 < t l = t f , es posible aproximar la EDO ( 2.19 ) mediante el conjunto de EDLs resultantes de la aproximación lineal de f (t , x(t )) en cada subintervalo, es decir, ( 2.20 ) y ' (t ) = f i + J i ( y (t ) − yi ) + gi (t − ti ) , t ∈ [t i , t i +1 ] , y (t i ) = yi , i = 0,1,L, l − 1 , siendo f i = f (ti , yi ) ∈ ℜ n , Ji = ∂f (ti , yi ) ∈ ℜ nxn la matriz Jacobiana de la función f (t , x) evaluada en (t i , y i ) , ∂x gi = ∂f (ti , yi ) ∈ ℜ n el vector gradiente de la función f (t , x) evaluado en (t i , yi ) . ∂t Para resolver la EDO ( 2.19 ), en primer lugar se resuelve la EDL asociada al primer subintervalo y ' (t ) = f 0 + J 0 ( y (t ) − y0 ) + g 0 (t − t0 ) , t ∈ [t 0 , t1 ] , con valor inicial y (t 0 ) = y0 = x(t 0 ) = x0 . La solución viene dada por 55 Capítulo 2: Estado del Arte t y (t ) = y0 + ∫ e J 0 ( t −τ ) [ f 0 + g 0 (τ − t 0 )]dτ , t ∈ [t 0 , t1 ] , t0 lo que permite calcular y1 = y (t1 ) . A continuación se resuelve la EDL asociada al segundo subintervalo y ' (t ) = f1 + J1 ( y (t ) − y1 ) + g1 (t − t1 ) , t ∈ [t1 , t 2 ] , con valor inicial y (t1 ) = y1 , obteniéndose la solución t y (t ) = y1 + ∫ e J1 ( t −τ ) [ f1 + g1 (τ − t1 )]dτ , t ∈ [t1 , t 2 ] . t1 En general, la solución de la EDL asociada al i-ésimo subintervalo ( 2.21 ) y ' (t ) = f i + J i ( y (t ) − yi ) + gi (t − ti ) , t ∈ [ti , ti +1 ] , 0 ≤ i < l , con valor inicial y (t i ) = yi , resulta ser t ( 2.22 ) y (t ) = yi + ∫ e J i (t −τ ) [ f i + g i (τ − t i )]dτ , t ∈ [ti , ti +1 ] . ti Si J i es invertible, entonces y (t ) se puede obtener mediante la expresión ( 2.23 ) y (t ) = yi − J i−1[ f i + g i (t − t i ) − J i−2 g i + e J i (t −ti ) ( J i−1 f i + J i−2 g i )] . Teorema 2.10 ([Garc98]). Dada la EDO con valores iniciales x' (t ) = f (t , x(t )) , x(t 0 ) = x0 , con x = x(t ) ∈ ℜ n , t ∈ [t 0 , t f ] . Si las derivadas parciales de segundo orden de f (t , x) están acotadas en [t 0 , t f ]xℜ n , entonces el método de linealización a trozos es convergente, verificándose además que [ ] C∆t 2 Kn∆t x(t n ) − y n ≤ e −1 , K siendo y n la solución aproximada obtenida mediante el método de linealización a trozos en el instante t n , ∆t = max(∆ti ) , ∆t i = t i +1 − t i , con K y C constantes 0≤i <l dependientes del problema. 2.3.5 Software para la Resolución de EDOs Existe en la actualidad una gran cantidad de software que permite resolver EDOs para problemas rígidos y no rígidos, así como para problemas de pequeña y gran dimensión. Este software se puede dividir en cuatro grupos: • Entornos de programación comerciales como MATLAB (www.mathworks.com), Mathematica (www.wolfram.com) y Maple (www.maplesoft.com). La ventaja de 56 Capítulo 2: Estado del Arte estos programas es su fiabilidad, facilidad de uso, el disponer de numerosas herramientas y tener un excelente control de calidad y soporte. • Entornos de programación de dominio público como Scilab (www.scilab.org) y Octave (www.octave.org). Se trata de paquetes de software con algunas de las ventajas anteriores, siendo además gratuitos. • Librerías de software numérico, como el desarrollado por la empresa NAG (Numerical Algorithms Group, www.nag.co.uk) o IMSL de la empresa Absoft Corporation (www.absoft.com). Estas librerías, escritas en FORTRAN y en C, contienen numerosas rutinas que permiten resolver problemas numéricos muy diversos entre los que se encuentra la resolución de EDOs. Las ventajas de estos códigos son su fiabilidad, rapidez y el control de calidad y soporte que supone tener el respaldo de dos grandes empresas. • Colecciones de códigos de libre distribución. En este grupo se encuentran varios paquetes disponibles en www.netlib.org/ode (NETLIB) como los que a continuación se describen. • ODEPACK. Es uno de los paquetes de software más difundido para la resolución de EDOs. Desarrollado por Alan C. Hindmarsh ([Hind83], [RaHi93], [BrHi89]), este paquete tiene sus orígenes en 1976 fruto del esfuerzo por obtener una colección de rutinas que resolviesen EDOs con valores iniciales, y la finalidad de establecer un estándar para este tipo de problemas. Consta de un código básico, llamado LSODE, y ocho variantes de él, denominados LSODES, LSODA, LSODAR, LSODPK, LSODKR, LSODI, LSOIBT, y LSODIS, que permiten resolver problemas rígidos o no rígidos de EDOs, tanto en forma explícita ( x' (t ) = f (t , x) ), como en forma lineal implícita ( A(t , x) x' (t ) = f (t , x) ). LSODE utiliza métodos de Adams, para la resolución de EDOs de tipo no rígido, y métodos BDF y Gear, para la resolución de EDOs rígidas. • RKSUITE. Desarrollado por R. W. Brankin, I. Gladwell y L. F. Shampine, contiene un conjunto de rutinas escritas en FORTRAN basadas en métodos Runge-Kutta ([BrGS92]). • Rutinas epsode.f, vode.f, svode, svodpk.f, vode.f y vodpk.f. Rutinas escritas en FORTRAN y desarrolladas por Peter N. Brown y Alan C. Hindmarsh, que resuelven problemas de valores iniciales de EDOs de tipo rígido o no rígido mediante algoritmos basados en el método BDF ([ByHi75], [HiBy75], [Hind74]). • Rutinas ode.f, sderoot.f y sode.f. Desarrolladas por Shampine y Gordon, resuelven problemas de valores iniciales de EDOs mediante métodos de Adams ([ShGo75]). • Rutinas rkf45.f y srkf45.f. Rutinas desarrolladas por H. A. Watts y L. F. Shampine, resuelven problemas de valores iniciales de EDOs mediante el método Runge-Kutta-Fehlberg (4,5) ([Fehl69], [ShWD76]. 57 Capítulo 2: Estado del Arte 2.4 Ecuaciones (EDMRs) Diferenciales Matriciales de Riccati 2.4.1 Definiciones y Propiedades Se conoce con el nombre de Ecuación Diferencial Matricial de Riccati (EDMR) a una ecuación diferencial matricial cuadrática de primer orden ( 2.24 ) X ' (t ) = Q(t ) + X (t ) A(t ) + B(t ) X (t ) − X (t ) R(t ) X (t ) , t0 ≤ t ≤ t f , X (t 0 ) = X 0 ∈ ℜ mxn , siendo A(t ) ∈ ℜ nxn , B(t ) ∈ ℜ mxm , Q(t ) ∈ ℜ mxn , R (t ) ∈ ℜ nxm y X (t ) ∈ ℜ mxn . Teorema 2.11: Existencia y unicidad de la solución. Sea F (t , X (t )) la función definida por la parte derecha de la EDMR ( 2.24 ), F (t , X (t )) = Q(t ) + X (t ) A(t ) + B (t ) X (t ) − X (t ) R(t ) X (t ) , ( 2.25 ) y los vectores x(t ) = vec( X (t )) y f (t , x(t )) = vec( F (t , X (t ))) , entonces si f ij y ∂f ij ∂x pq , para i, p = 1,2, L , m y j , q = 1,2, L , n , son funciones continuas en la región [t0 , t f ] × ℜ , entonces la EDMR ( 2.24 ) tiene una única solución en una cierta región incluida en [t0 , t f ] × ℜ mxn que contiene al punto (t0 , X 0 ) . Existe una importante conexión entre las EDMRs y las Ecuaciones Diferenciales Matriciales Lineales (EDMLs), como lo demuestra el siguiente teorema. Teorema 2.12 ([AnMo71]). Sea la EDMR ( 2.26 ) X ' (t ) = Q(t ) + X (t ) A(t ) + B(t ) X (t ) − X (t ) R(t ) X (t ) , t0 ≤ t ≤ t f , −1 con la condición inicial X (t 0 ) = V0U 0 , y la EDML ( 2.27 ) d ⎡U (t )⎤ ⎡− A(t ) R(t )⎤ ⎡U (t )⎤ = , t0 ≤ t ≤ t f , dt ⎢⎣V (t ) ⎥⎦ ⎢⎣ Q(t ) B(t )⎥⎦ ⎢⎣V (t ) ⎥⎦ con condición inicial ⎡U (t0 )⎤ ⎡U 0 ⎤ ⎢V (t ) ⎥ = ⎢ V ⎥ , ⎣ 0 ⎦ ⎣ 0⎦ siendo U 0 ,U (t ) ∈ ℜ nxn ( U 0 invertible) y V0 ,V (t ) ∈ ℜ mxn . Suponiendo que la solución de ( 2.26 ) existe y es única en el intervalo [t 0 , t f ] , entonces la solución de ( 2.27 ) tiene la propiedad de que U (t ) es invertible y que 58 Capítulo 2: Estado del Arte X (t ) = V (t )U −1 (t ) , t ∈[t0 , t f ] . ( 2.28 ) Recíprocamente, si la solución de ( 2.27 ) tiene la propiedad de que U (t ) es invertible en el intervalo [t 0 , t f ] , entonces la única solución de ( 2.26 ) está dada por ( 2.28 ). Un tipo especial de EDMRs son las denominadas EDMRs simétricas que se presentan a continuación. Definición 2.11 Una EDMR se dice simétrica, si se puede expresar como ( 2.29 ) X ' (t ) = Q(t ) + X (t ) A(t ) + AT (t ) X (t ) − X (t ) R(t ) X (t ) , t0 ≤ t ≤ t f , X (t0 ) = X 0 , siendo Q(t ), A(t ), R(t ) ∈ ℜ nxn , con Q(t ) y R(t ) simétricas. Algunos de los métodos de resolución de EDMRs se basan en el siguiente teorema. Teorema 2.13 ([Lain76]) Sea la EDMR simétrica ( 2.30 ) ∂X (t , t0 ) = Q(t ) + X (t , t0 ) A(t ) + AT (t ) X (t , t0 ) − X (t , t0 ) R(t ) X (t , t0 ) , t0 ≤ t ≤ t f , ∂t X (t0 , t0 ) = X 0 ∈ ℜ nxn . La solución de la EDMR simétrica ( 2.30 ) puede obtenerse a partir de la resolución del Sistema de Ecuaciones en Derivadas Parciales (SEDP) ( 2.31 ) ∂X (t , t0 ) = −Φ (t , t0 ) X (t 0 , t 0 )Φ T (t , t0 ) , X (t 0 , t 0 ) = X 0 , t ≥ t 0 , ∂t 0 y ( 2.32 ) [ ] ∂Φ(t , t0 ) = AT (t ) − X (t , t 0 ) R(t ) Φ(t , t0 ) , Φ(t0 , t0 ) = I n , ∂t donde ( 2.33 ) X (t 0 , t 0 ) = ∂X (t , t 0 ) = Q(t 0 ) + X 0 A(t 0 ) + AT (t 0 ) X 0 − X 0 R (t 0 ) X 0 . ∂t 0 t =t 0 Para EDMRs con coeficientes constantes, se cumple que X (t , t 0 ) = X (t − t 0 ) = X (t ) , Φ(t , t 0 ) = Φ (t − t 0 ) = Φ(t ) , y el sistema formado por las ecuaciones ( 2.31 ) y ( 2.32 ) se reduce al Sistema de Ecuaciones Diferenciales Ordinarias (SEDO) dX (t ) = Φ (t ) X (t 0 , t 0 )Φ T (t ) , X (t 0 ) = X 0 , t ≥ t 0 , dt 59 Capítulo 2: Estado del Arte [ ] dΦ(t ) = AT (t ) − X (t ) R Φ(t ) , Φ (t 0 ) = I n , t ≥ t 0 . dt El siguiente teorema demuestra que la solución de la EDMR simétrica ( 2.30 ) se expresa en términos de la solución de la misma EDMR pero con una condición inicial diferente. La solución X (t , t 0 ) cuando se expresa en términos de otra EDMR se denomina solución particionada generalizada. Teorema 2.14 ([Lain76]) La solución X (t , t 0 ) de la EDMR ( 2.30 ) se puede expresar como ( 2.34 ) [ X (t , t 0 ) = X n (t , t 0 ) + Φ n (t , t 0 ) Ο n (t , t 0 ) + X r−1 ] −1 Φ Tn (t , t 0 ) , donde ∂Ο n (t , t 0 ) = Φ Tn (t , t 0 ) R(t )Φ n (t , t 0 ) , Ο n (t 0 , t 0 ) = 0 , ∂t [ ] ∂Φ n (t , t0 ) = AT (t ) − X n (t , t0 ) R(t ) Φ n (t , t0 ) , Φ n (t 0 , t 0 ) = I n , ∂t siendo X (t 0 , t 0 ) = X n + X r . La matriz X n (t , t 0 ) es la solución de la EDMR ( 2.30 ) pero con una condición inicial distinta, es decir, X n (t , t 0 ) es la solución de la EDMR ∂X n (t , t 0 ) = Q(t ) + X n (t , t 0 ) A(t ) + A(t )T X n (t , t 0 ) − X n (t , t 0 ) R(t ) X n (t , t 0 ) , ∂t X n (t 0 , t 0 ) = X n . 2.4.2 Métodos de Resolución de EDMRs 2.4.2.1 Integración Directa La forma más simple de resolver EDMRs consiste en convertir la ecuación ( 2.24 ) en el sistema de ecuaciones diferenciales vectoriales de tamaño mn ( 2.35 ) x'ij = qij + X i A j + Bi X j − X i RX j , para i = 1, L , m y j = 1, L, n , donde X i y Bi representan, respectivamente, las filas i-ésimas de las matrices X y B , y X j y A j , las columnas j-ésimas de las matrices X y A . El problema de este método es que el tamaño de este sistema de ecuaciones diferenciales es excesivamente grande cuando m y n son elevados; además, si el sistema es rígido, entonces la complejidad computacional es muy elevada. 2.4.2.2 Métodos de Linealización Estos métodos se basan en el Teorema 2.12 para convertir una EDMR en una EDML. Si en la fórmula ( 2.28 ) se consideran X (t 0 ) = X 0 , U 0 = I n y V0 = X 0 , y la matriz fundamental Φ de la EDMR se divide a bloques 60 Capítulo 2: Estado del Arte ⎡ Φ (t , t ) Φ12 (t , t 0 ) ⎤ Φ (t , t 0 ) = ⎢ 11 0 ⎥, ⎣Φ 21 (t , t 0 ) Φ 22 (t , t 0 )⎦ conforme a la matriz ⎡− A(t ) R(t )⎤ M =⎢ ⎥, ⎣ Q(t ) B(t )⎦ entonces, según el Teorema 2.12, se tiene que la solución de la EDMR ( 2.24 ) es ( 2.36 ) X (t ) = [Φ 21 (t , t0 ) + Φ 22 (t , t0 ) X 0 ][Φ11 (t , t0 ) + Φ12 (t , t0 ) X 0 ] . −1 2.4.2.2.1 Método de Davison-Maki En el caso de EDMRs con coeficientes constantes se puede considerar, sin pérdida de generalidad, que t0 = 0 . En tal caso, la solución X (t ) de la expresión ( 2.36 ) puede obtenerse fácilmente teniendo en cuenta que matriz fundamental Φ(t ) coincide con la exponencial de la matriz Mt . En [DaMa73], Davison y Maki proponen calcular X (t ) utilizando un tamaño de paso constante ∆t = tf , k∈N , 2k de manera que se produzca un error de truncamiento menor que una cierta cota positiva elegida previamente, siguiendo el siguiente esquema: • Calcular la exponencial matricial Φ (∆t ) = e M∆t mediante, por ejemplo, las aproximaciones de Padé. • En los siguientes pasos, se calcula Φ(2i +1 ∆t ) a partir de Φ(2i ∆t ) mediante las expresiones Φ (2 i +1 ∆t ) = Φ(2 i ∆t )Φ(2 i ∆t ) , i = 0,1, L , k − 1 . En [KeLe85], Kenney y Leipnik proponen utilizar un tamaño de paso constante ∆t = tf k , k∈N , de manera que se produzca un error de truncamiento menor que una cierta cota positiva elegida previamente, siguiendo el siguiente esquema: • • Calcular la exponencial matricial Φ (∆t ) = e M∆t mediante, por ejemplo, las aproximaciones de Padé. En los siguientes pasos, se calcula Φ((i + 1)∆t ) a partir de Φ(i∆t ) mediante las expresiones Φ((i + 1)∆t ) = Φ(i∆t )Φ(∆t ) , i = 1,2, L , k − 1 . 61 Capítulo 2: Estado del Arte 2.4.2.2.2 Procedimiento Iterativo Matricial ASP (Automatic Synthesis Program) Este método, debido a Kalman y Englar ([KaEn66]), fue posteriormente utilizado por Kenney y Leipnik (KeLe85]), bajo el nombre de método de Davison-Maki modificado, para resolver EDMRs con t 0 = 0 . Como la matriz fundamental tiene estructura de semigrupo con el producto de matrices, entonces Φ(t k +1 ,0) = Φ (t k +1 , t k )Φ (t k ,0) , por lo que ⎡ I n ⎤ ⎡ Φ11 (t k +1 , tk ) Φ12 (tk +1 , tk ) ⎤ ⎡U (tk )⎤ ⎡U (t k +1 )⎤ ⎡ In ⎤ ⎢V (t ) ⎥ = Φ (tk +1 ,0) ⎢ X ⎥ = Φ (tk +1 , t k )Φ (tk ,0) ⎢ X ⎥ = ⎢Φ (t , t ) Φ (t , t )⎥ ⎢V (t ) ⎥ . 22 k +1 k ⎦ ⎣ k ⎦ ⎣ k +1 ⎦ ⎣ 0⎦ ⎣ 0 ⎦ ⎣ 21 k +1 k Por lo tanto, (2.37) X (tk +1 ) = V (tk +1 )U −1 (tk +1 ) = [Φ 21 (tk +1 , tk ) + Φ 22 (tk +1 , tk ) X (tk )][Φ11 (tk +1 , tk ) + Φ12 (tk +1 , tk ) X (tk )]−1. Si la EDMR tiene coeficientes constantes y se considera un tamaño de paso constante ∆t , entonces X (t k +1 ) se puede obtener fácilmente puesto que los valores de Φ ij (t k +1 , t k ) son independientes de k . En este método se pueden destacar las siguientes cuestiones: • Al contrario de lo que ocurre con el método de Davison-Maki, en el método ASP no hace falta actualizar la exponencial matricial. • Para pequeños valores de ∆t , se tiene que Φ 11 (.,.) → I n , Φ 12 (.,.) → 0 nxm , Φ 21 (.,.) → 0 mxn , Φ 22 (.,.) → I m ; por lo tanto, la matriz Φ 11 (t k +1 , t k ) + Φ 12 (t k +1 , t k ) X (t k ) está bien condicionada. • Aunque en principio hay que calcular la exponencial de una matriz de orden 2n , se puede modificar el método para que sólo hagan falta calcular exponenciales de matrices de orden igual a n (véase subapartado 2.4.3.5). 2.4.2.3 Método BDF En el subapartado 2.3.3.3.2 se comentó la resolución de EDOs mediante el método BDF. Este método se puede adaptar para resolver eficientemente EDMRs, resultando ser especialmente útil cuando se trata de resolver problemas de tipo rígido. Existen varios algoritmos basados en este método entre los que cabe destacar el desarrollado en [Diec92]. Si en la ecuación ( 2.24 ) se define F (t , X ) como la parte derecha de la misma, es decir, F (t , X ) = Q(t ) + XA(t ) + B (t ) X − XR(t ) X , y se realiza una partición del intervalo de tiempo [t 0 , t f ] , entonces la solución aproximada en el instante t k ( X k ) se obtiene mediante la resolución de la ecuación implícita 62 Capítulo 2: Estado del Arte r X k = ∑ α j X k − j + hβF (tk , X k ) , ( 2.38 ) j =1 donde α j , j = 1,2,L, r , y β son los coeficientes que aparecen en la Tabla 2.4, siendo r el orden del método BDF. Si se sustituye el valor de F (t , X ) en la ecuación ( 2.38 ), entonces se obtiene la Ecuación Algebraica Matricial de Riccati (EAMR) ( 2.39 ) r − X k + ∑ α j X k − j + hβ [Q(t k ) + X k A(t k ) + B(t k ) X k − X k R (t k ) X k ] . j =1 Aplicando el método de Newton a la ecuación anterior, se tiene que ( 2.40 ) r Gˆ ('l ) ( X k( l +1) − X k( l ) ) = − X k( l ) + hβ F (tk , X k( l ) ) + ∑ α j X k − j , j =1 donde Gˆ (' l ) es una aproximación de la derivada de Fréchet ([Grif81], página 310) G('l ) . A partir de la ecuación ( 2.40 ), se obtiene la ecuación matricial de Sylvester ( 2.41 ) Cˆ 22Yk( l +1) − Yk( l +1) Cˆ11 = H k( l ) , con Cˆ 22 = C 22 − X k( l ) C12 ∈ R mxm , Cˆ11 = C11 + C12 X k(l ) ∈ R nxn , r H k( l ) = − X k( l ) + hβF (t k , X k(l ) ) + ∑ α j X k − j ∈ R mxn , j =1 y Yk( l +1) = X k( l +1) − X k( l ) ∈ R mxn , siendo C11 = −hβA(t k ) + 0.5 I n , C12 = hβR(t k ) , r C 21 = hβQ(t k ) + ∑ α j X k − j , j =1 C 22 = hβB (t k ) − 0.5I m . Por lo tanto, para encontrar la solución en un cierto instante es necesario resolver varias veces la ecuación ( 2.41 ) hasta que se alcance la convergencia de Yk( l ) . Esta ecuación se puede resolver mediante el algoritmo de Bartels-Stewart [BaSt72]. 63 Capítulo 2: Estado del Arte 2.4.3 Métodos de Resolución de EDMRs Simétricas 2.4.3.1 Métodos de Linealización 2.4.3.1.1 Método de la Exponencial no Negativa En [Vaug69], Vaughan señala que el cálculo de X (t ) mediante la expresión ( 2.36 ) puede dar lugar a un método inestable para valores elevados de t , proponiendo un método que puede evitar ese problema para el caso de EDMRs simétricas con coeficientes constantes. La EDML asociada a la EDMR simétrica ( 2.29 ) es ( 2.42 ) d ⎡U (t )⎤ ⎡− A R ⎤ ⎡U (t )⎤ = , t0 ≤ t ≤ t f , dt ⎢⎣V (t ) ⎥⎦ ⎢⎣ Q AT ⎥⎦ ⎢⎣V (t ) ⎥⎦ ⎡U (t0 )⎤ ⎡ I n ⎤ ⎢V (t ) ⎥ = ⎢ X ⎥ , ⎣ 0 ⎦ ⎣ 0⎦ siendo ⎡− A R ⎤ M =⎢ , T⎥ ⎣Q A ⎦ ( 2.43 ) una matriz Hamiltoniana (Definición 6.24). Por lo tanto, si λ es un valor propio de M , entonces − λ también lo es. Sea W la matriz no singular que diagonaliza a la matriz M, ⎡D 0 ⎤ W −1MW = ⎢ ⎥, ⎣ 0 − D⎦ donde D es la forma canónica de Jordan correspondiente a los valores propios que se encuentran en el semiplano complejo derecho. Realizando el cambio de variable ( 2.44 ) ⎡U ⎤ ⎡W11 W12 ⎤ ⎡U ⎤ ⎡U ⎤ ⎢V ⎥ = W ⎢ ⎥ = ⎢W W ⎥ ⎢ ⎥ , ⎣ ⎦ 22 ⎦ ⎣V ⎦ ⎣V ⎦ ⎣ 21 la ecuación ( 2.42 ) se convierte en ( 2.45 ) d ⎡U (t )⎤ ⎡ D 0 ⎤ ⎡U (t )⎤ ⎢ ⎥= ⎢ ⎥, dt ⎣V (t ) ⎦ ⎢⎣ 0 − D ⎥⎦ ⎣V (t ) ⎦ ⎡ In ⎤ ⎡U (t0 )⎤ −1 ⎢ ⎥ = W ⎢X ⎥ . ⎣V (t0 ) ⎦ ⎣ 0⎦ Las soluciones de este sistema desacoplado son U (t ) = e DtU (t 0 ) , V (t ) = e − DtV (t 0 ) . A partir de la condición inicial de ( 2.45 ), se tiene que I n = W11U (t 0 ) + W12V (t 0 ) , X 0 = W21U (t 0 ) + W22V (t 0 ) , por lo que V (t 0 ) = RU (t 0 ) , 64 Capítulo 2: Estado del Arte donde R = −[W22 − X 0W12 ] [W21 − X 0W11 ] , −1 por lo tanto V (t )U −1 (t ) = e − Dt Re − Dt . De la ecuación ( 2.44 ), se tiene que U (t ) = W11U (t ) + W12V (t ) , V (t ) = W21U (t ) + W22V (t ) , y por lo tanto X (t ) = V (t )U −1 (t ) = [W21 + W22V (t )U −1 (t )][W11 + W12V (t )U −1 (t )]−1 = [W21 + W22 e −tD Re −tD ][W11 + W12 e − Dt Re − Dt ]−1 . De este método se pueden destacar los siguientes aspectos: • Al tender t a infinito, no hay crecimiento exponencial en la fórmula que define a X (t ) y, por tanto, se evita los problemas que aparecen en el método de DavisonMaki. −1 • La solución estable puede obtenerse fácilmente pues resulta ser igual a W21W11 . • Un problema de este método es que el cálculo de la matriz de trasformación W puede estar mal condicionado. 2.4.3.1.2 Método de Schur Este método es aplicable a EDMRs simétricas con coeficientes constantes. La matriz Hamiltoniana M de la expresión ( 2.43 ) se puede reducir, mediante transformaciones de semejanza ortogonales definidas por una matriz K , a una forma triangular superior a bloques ⎡S K T MK = ⎢ 11 ⎣0 S12 ⎤ , S 22 ⎥⎦ de manera que los valores propios S11 se encuentran en el semiplano complejo derecho, y los valores propios de S 22 en el semiplano complejo izquierdo. Si se considera la transformación ⎡U (t )⎤ ⎡U (t )⎤ ⎥, ⎢V (t ) ⎥ = K ⎢ ⎣ ⎦ ⎣V (t ) ⎦ entonces la EDML ( 2.42 ) queda como ( 2.46 ) d ⎡U (t )⎤ ⎡ S11 ⎢ ⎥= dt ⎣V (t ) ⎦ ⎢⎣ 0 S12 ⎤ ⎡U (t )⎤ , S 22 ⎥⎦ ⎢⎣V (t ) ⎥⎦ I ⎡U (t0 )⎤ T⎡ n ⎤ ⎢ ⎥ = K ⎢ ⎥. ⎣X0⎦ ⎣V (t0 ) ⎦ A partir de ( 2.46 ) se obtiene la EDML 65 Capítulo 2: Estado del Arte dV (t ) = S 22V (t ) , dt cuya solución es V (t ) = e S22tV (t 0 ) , ( 2.47 ) así como la EDML dU (t ) = S11U (t ) + S12e S 22 tV (t0 ) , dt cuya solución viene dada por t ( 2.48 ) U (t ) = e U (t0 ) + ∫ e S11 ( t −τ ) S12e S 22τ V (t0 )dτ . S11t t0 Si se realiza una división a bloques de la matriz K , conforme a la división a bloques de la matriz M , entonces K se puede expresar como ⎡K K = ⎢ 11 ⎣ K 21 K12 ⎤ . K 22 ⎥⎦ Teniendo en cuenta la EDML ( 2.46 ), se tiene que ( 2.49 ) V (t0 ) = RU (t 0 ) , siendo R = −[ K 22 − X 0 K12 ]−1[ K 21 − X 0 K11 ] . Teniendo en cuenta las expresiones ( 2.47 ), ( 2.48 ) y ( 2.49 ), se deduce que −1 ( 2.50 ) X (t ) = V (t )U (t ) −1 = e S22t t ⎡ ⎤ S ( t −τ ) S τ −S t ⎢ I n + R ∫ e 11 S12 e 22 dτ ⎥ Re 11 , ⎢⎣ ⎥⎦ t0 por lo que X (t ) se obtiene a partir de X (t ) mediante la expresión X (t ) = V (t )U (t ) −1 = [ K 21 + K 22 X (t )][ K11 + K12 X (t )]−1 . De este método se pueden destacar los siguientes aspectos: • La ventaja de este método es que la matriz ortogonal K se puede calcular mediante un método estable. • Una forma efectiva de calcular la integral que aparece en ( 2.50 ) puede encontrarse en [VanL78]. 2.4.3.2 Método de Chandrasekhar Este método es particularmente útil en problemas de control óptimo y filtrado puesto que, en estos casos, la matriz R(t ) de la EDMR simétrica ( 2.29 ) se expresa como el producto R (t ) = H T (t ) R1−1 (t ) H (t ) , 66 Capítulo 2: Estado del Arte donde H (t ) ∈ ℜ pxn , R1 (t ) ∈ ℜ pxp . El método de Chandrasekhar se basa en el Teorema 2.13 y en el lema que aparece a continuación. Lema 3 ([Lain76]). Si W ∈ ℜ nxn es una matriz simétrica de rango r , entonces existen unas matrices L1 ∈ ℜ nxl y L2 ∈ ℜ nx ( r −l ) , siendo l el número de valores propios positivos de la matriz W , de manera que W = L1 LT1 − L2 LT2 . Si se aplica el lema anterior a la matriz simétrica X (t 0 , t 0 ) de la ecuación ( 2.33 ), se tiene que ⎡I ( 2.51 ) X (t0 , t0 ) = [L1 (t 0 ) L2 (t 0 )] ⎢ m ⎣0 0 ⎤ [L1 (t0 ) L2 (t0 )]T = L(t0 ) SLT (t0 ) , ⎥ − I r −m ⎦ donde r es el rango de X (t 0 , t 0 ) , L1 (t0 ) ∈ ℜnxl y L2 (t0 ) ∈ ℜ nx ( r − l ) . Sustituyendo ( 2.51 ) en ( 2.31 ) y multiplicando a la derecha de esta ecuación por H T (t ) R1−1 (t ) , se tiene que ( 2.52 ) ∂K (t , t0 ) = −ΥK (t , t0 ) SYKT (t , t0 ) H T (t ) R1−1 (t ) , ∂t0 K (t 0 , t 0 ) = X 0 H T (t 0 ) R1−1 (t 0 ) , donde K (t , t 0 ) = X (t , t 0 ) H T (t ) R1−1 (t ) ∈ ℜ nxp , ( 2.53 ) ΥK (t , t 0 ) = Φ k (t , t 0 ) L(t 0 ) ∈ ℜ nxr . Derivando la ecuación anterior respecto de t y haciendo uso de la ecuación ( 2.32 ), se obtiene ( 2.54 ) ∂ΥK (t , t 0 ) = [ AT (t ) − K (t , t 0 ) H (t )]ΥK (t , t 0 ) , ∂t ΥK (t 0 , t 0 ) = L(t 0 ) . Por lo tanto, las matrices K (t , t0 ) y ΥK (t , t0 ) se pueden calcular resolviendo las ecuaciones diferenciales ( 2.52 ) y ( 2.54 ). La solución X (t , t0 ) puede obtenerse a partir de ( 2.31 ) utilizando una fórmula de cuadratura en la ecuación diferencial ( 2.55 ) ∂X (t , t 0 ) = −ΥK (t , t 0 ) SΥKT (t , t 0 ) . ∂t 0 Las ecuaciones en derivadas parciales dadas en ( 2.52 ) y ( 2.54 ) no se pueden resolver con facilidad para EDMRs con coeficientes variables, incluso en el caso en que el 67 Capítulo 2: Estado del Arte número de ecuaciones sea significativamente pequeño. Para el caso de EDMRs con coeficientes constantes, las EDPs se reducen a EDOs puesto que K y ΥK se pueden considerar funciones de t − t 0 . Por lo tanto, ∂K (t , t0 ) ∂K (t − t 0 ) ∂K (t − t 0 ) dK (t ) = , =− =− ∂t 0 dt ∂t0 ∂t luego ( 2.52 ) y ( 2.54 ) se convierten en dK (t ) = ΥK (t ) SYKT (t ) H T R −1 , K (t 0 ) = P0 H T R −1 , dt [ ] dΥK (t ) = AT − K (t ) H ΥK (t ) , ΥK (t 0 ) = L(t 0 ) , dt y X (t ) se puede obtener integrando ΥK (t ) SYKT (t ) . En este método se puede destacar que: • Si X 0 = 0 , entonces la matriz X (t 0 , t 0 ) = Q es semidefinida positiva y la matriz S de la ecuación ( 2.55 ) es igual a la matriz identidad de rango r , siendo r el rango de la matriz Q . • Si se utiliza un método directo de integración, entonces el número total de ecuaciones a integrar es n( p + r ) puesto que K ∈ ℜ nxp y ΥK ∈ ℜ nxr . Si p + r << (n + 1) / 2 , entonces el número de ecuaciones en este método es mucho menor que los obtenidos mediante un método directo de integración. La desigualdad es satisfecha si tanto el parámetro p como el parámetro r son pequeños comparados con n . De este modo, sólo para algunas clases especiales de EDMRs es interesante utilizar este método. En la implementación de un filtro de Kalman únicamente es necesario conocer la matriz de ganancia K (t , t 0 ) , no siendo imprescindible calcular la matriz X (t , t 0 ) . • 2.4.3.3 Algoritmo de Particionado Numérico (APN) Este método, basado en el Teorema 2.14, fue sugerido por Lainiotis ([Lain76]) para resolver EDMRs simétricas. Supóngase que el intervalo de integración se divide en k subintervalos [t 0 , t1 ],L, [t k −1 , t f ] . Las soluciones en los nodos están dadas por las siguientes fórmulas recursivas obtenidas a partir de la ecuación ( 2.34 ): ( 2.56 ) X (t i +1 , t 0 ) = X n (t i +1 , t i ) + Φ n (t i +1 , t i )[Ο n (t i +1 , t i ) + X r−1 (t i +1 , t 0 )] −1 Φ Tn (t i +1 , t i ) . De acuerdo con el Teorema 2.14, X n (t i +1 , t i ) , Φ n (t i +1 , t i ) y Ο n (t i +1 , t i ) se obtienen mediante la integración de las siguientes ecuaciones diferenciales ( 2.57 ) ∂Ο n (t , t i ) = Φ Tn (t , t i ) R(t )Φ n (t , t i ) , Ο n (ti , ti ) = 0n , ∂t ( 2.58 ) ∂Φ n (t , ti ) = [ AT (t ) − X n (t , ti ) R(t )]Φ n (t , ti ) , Φ n (ti , ti ) = I n , ∂t ( 2.59 ) ∂X n (t , ti ) = Q(t ) + X n (t , ti ) A(t ) + AT (t ) X n (t , ti ) − X n (t , ti ) R (t ) X n (t , ti ), ∂ti 68 Capítulo 2: Estado del Arte X n (t i , t i ) = X ni , en cada uno de los subintervalos [ti , ti +1 ] . La condición inicial X ni en la última ecuación se elige de manera que la matriz X r (ti , t 0 ) = X (ti , t 0 ) − X ni sea no singular. Para calcular eficientemente las matrices X n (ti +1 , ti ) , Φ n (ti +1 , ti ) y Ο n (ti +1 , ti ) se puede aplicar el Teorema 2.13 a X n (t , ti ) y Φ n (t , ti ) . En cuyo caso, ( 2.57 ), ( 2.58 ) y ( 2.59 ) se convierten en las ecuaciones ∂Ο n (t , ti ) = Φ Tn (t , ti ) R(t )Φ n (t , ti ) , Ο n (t i , t i ) = 0 , ∂t ∂Φ n (t , ti ) = [ AT (t ) − X n (t , ti ) R(t )]Φ n (t , ti ) , Φ n (t i , t i ) = I n , ∂t ∂X n (t , ti ) = Φ n (t , ti ) X n (ti , ti )Φ Tn (t , ti ) , X n (ti , ti ) = X ni , ∂ti donde X n (t i , t i ) = ∂X n (t , t i ) ∂t i t =t i = Q(t i ) + X n (t i , t i ) A(t i ) + AT (t i ) X n (t i , t i ) − X n (t i , t i ) R(t i ) X n (t i , t i ). Si se elige convenientemente la condición inicial X ni , entonces las ecuaciones anteriores pueden resolverse mediante el método de Chandrasekhar. Respecto de este método se pueden destacar las siguientes cuestiones: • • La integración en cada subintervalo [ti , ti +1 ] es independiente de la integración en los otros subintervalos; por lo tanto, estas integraciones se pueden realizar en paralelo. Las soluciones vienen dadas por las operaciones recursivas de las soluciones elementales de la ecuación ( 2.56 ). Este método se puede aplicar a EDMRs con coeficientes periódicos ([SpGu79]). Si la longitud de los subintervalos es múltiplo del periodo y se elige la misma condición inicial X ni para cada subintervalo, entonces únicamente es necesario calcular X n (t , ti ) , Φ n (t , ti ) y Ο n (t , ti ) en el primer subintervalo. La solución en los siguientes subintervalos están dados por la siguiente fórmula recursiva ( 2.60 ) X ((i + 1)∆ ) = X n (∆ ) +Φ n (∆ )[I n + X (i∆ )Ο n (∆)] X (i∆ )Φ T (∆) , −1 siendo X (k∆ ) = X (k ,0 ) y ∆ = t k +1 − t k . • La ecuación anterior se puede aplicar también a EDMRs con coeficientes constantes. 69 Capítulo 2: Estado del Arte • Desde un punto de vista computacional, el cálculo de X n (t , ti ) , Φ n (t , ti ) y Ο n (t , ti ) es costoso puesto que se debe resolver un sistema de ecuaciones en derivadas parciales no lineal. 2.4.3.4 Método Basado en la Ecuación Algebraica de Riccati (EAR) Este método ([AnMo71]) se aplica a la EDMR simétrica X ' = G T G + XA + AT X − XHH T X , t ≥ 0 , ( 2.61 ) X (0) = X 0 , siendo ( A, H ) estabilizable, (G, A) observable y X 0 matriz definida positiva. Lema 4 ([Wonh68]) Si ( A, H ) es estabilizable y (G, A) es completamente observable, entonces la EAR Q + XA + AT X − XRX = 0 ( 2.62 ) tiene una única solución definida positiva de manera que el sistema en bucle cerrado definido por K = A − RX es asintóticamente estable. Si se aplica el lema anterior, considerando X la solución definida positiva de la EAR G T G + XA + AT X − XHH T X = 0 , ( 2.63 ) entonces, utilizando las ecuaciones ( 2.61 ) y ( 2.63 ) y llamando A = A − HH T X , se tiene que ( 2.64 ) d ( X − X ) = ( X − X ) A + A T ( X − X ) − ( X − X ) HH T ( X − X ) . dx Si X − X es no singular y se define Z (t ) = ( X − X ) −1 , entonces ⎡d ⎤ Z ' = −( X − X ) −1 ⎢ ( X − X )⎥ ( X − X ) −1 , ⎣ dx ⎦ por lo que la ecuación ( 2.64 ) se reduce a ( 2.65 ) − Z ' = A Z + ZA T − HH T , Z (0) = ( X 0 − X ) −1 , t > 0 . Puesto que A es estable, entonces existe una única solución definida positiva de la Ecuación Algebraica Matricial de Lyapunov (EAML) 0 = A Z + ZA T − HH T . ( 2.66 ) Restando las ecuaciones ( 2.66 ) y ( 2.65 ), se obtiene la Ecuación Diferencial Matricial de Lyapunov (EDML) − d (Z − Z ) = A (Z − Z ) + (Z − Z ) A T , t > 0 dt con ( X 0 − X ) −1 − Z como condición inicial. Por lo tanto, 70 Capítulo 2: Estado del Arte [ ] [ ] Z − Z = e − A t ( X 0 − X ) −1 − Z e − A t , T luego ( ) −Z) e X = X + Z + e − A t ( X 0 − X ) −1 − Z e − A ( 2.67 ) ( = X + e A t e A t Z e A t + ( X 0 − X ) −1 T T T t −1 −1 At . Una desventaja de este método es el elevado coste computacional del cálculo de X , Z y de la exponencial matricial que aparece en la ecuación ( 2.67 ). Una versión de este método puede encontrase en [Laub82]. 2.4.3.5 Método de Leipnik Este método, debido a Leipnik ([Leip85]), permite resolver EDMRs simétricas con coeficientes constantes. Lema 5 ([Leip85]) Sean C y D matrices cuadradas y ⎡C D ⎤ N =⎢ ⎥ ( N matriz bisimétrica), ⎣D C ⎦ entonces ⎡E Nn = ⎢ ⎣F F⎤ , E ⎥⎦ siendo E = 0.5[(C + D) n + (C − D) n ] , F = 0.5[(C + D) n − (C − D) n ] . Sea la EDMR simétrica con coeficientes constantes ( 2.68 ) X ' = Q + XA + AT X − XRX , X (0) = X 0 , t ≥ 0 , siendo X 0 matriz definida positiva. Si se realiza la transformación ( 2.69 ) X = Z T X 1Z + H , siendo H simétrica, entonces ( 2.68 ) queda como ( 2.70 ) X 1' = Q1 + X 1 A1 + A1T X 1 − X 1 R1 X 1 , X 1 (0) = Z −T ( X 0 − H ) Z −1 , t > 0 . siendo A1 = Z ( A − RH ) Z −1 , R1 = ZRZ T , Q1 = Z −T (Q + HA + AT H − HRH ) Z −1 . 71 Capítulo 2: Estado del Arte Como consecuencia de una propiedad descrita en [Copp74], se tiene que si el par ( A, R ) es controlable, entonces existen la solución maximal X + y la solución minimal X − de la EAR asociada a la EDMR ( 2.68 ). Eligiendo Z y H de manera que ZTZ = H= 1 (X + − X −) , 2 1 (X + + X −) , 2 entonces A1T = − A1 , R1 = Q1 . Por lo tanto, la ecuación ( 2.70 ) se reduce a ( 2.71 ) X 1' = − A1 X 1 + X 1 A1 − X 1R1 X 1 , X 1 (0) = Z −T ( X 0 − H ) Z −1 , t > 0 . Utilizando el Teorema 2.12, se tiene que el EDML asociado a la EDMR anterior es ( 2.72 ) d ⎡U ⎤ ⎡ A1 − R1 ⎤ ⎡U ⎤ , = dt ⎢⎣V ⎥⎦ ⎢⎣− R1 A1 ⎥⎦ ⎢⎣V ⎥⎦ ⎡U (0)⎤ ⎡ I n ⎤ ⎢V (0) ⎥ = ⎢ X (0)⎥ . ⎣ ⎦ ⎣ 1 ⎦ Puesto que la matriz coeficiente de la ecuación ( 2.72 ) es bisimétrica, entonces se puede aplicar el Lema 5, con lo que e ⎡ A1 ⎢ ⎣ − R1 − R1 ⎤ ⎥t A1 ⎦ ⎡ E (t ) E 2 (t )⎤ =⎢ 1 ⎥, ⎣ E 2 (t ) E1 (t ) ⎦ donde [ ] [ ] E1 (t ) = 1 ( A1 + R1 ) t e + e( A1 − R1 )t , 2 E 2 (t ) = 1 ( A1 − R1 ) t e − e ( A1 + R1 ) t . 2 La solución X 1 se obtiene a partir de la fórmula ( 2.28 ) y X a partir de ( 2.69 ). Una ventaja de este método es que la solución X se puede obtener calculando exponenciales de matrices de tamaño n . Sin embargo, este método requiere el cálculo de las soluciones maximal y minimal de una EAR. Además, si estas soluciones están cercanas entre sí, entonces la matriz Z puede estar mal condicionada. 2.4.3.6 Método de la Raíz Cuadrada Este método, debido a Morf, Ley y Kailath ([MoLK78]), es aplicable a la EDMR con coeficientes variables ( 2.73 ) X ' (t ) = G T (t )G (t ) + X (t ) A(t ) + AT (t ) X (t ) − X (t ) H (t ) H T (t ) X (t ) , t 0 ≤ t ≤ t f , X (0) = X 0 , 72 Capítulo 2: Estado del Arte siendo X 0 matriz definida positiva. En tal caso, la solución X (t ) se puede comprobar que es definida positiva (véase subapartado 2.4.3.8). Luego dicha solución se puede expresar como X (t ) = S T (t ) S (t ) , ( 2.74 ) y la condición inicial como X (t 0 ) = S T (t 0 ) S (t 0 ) , donde S (t ) (no singular) se puede elegir de manera que sea triangular inferior con elementos positivos en la diagonal principal (factorización de Cholesky). La EDMR ( 2.73 ) se convierte entonces en la ecuación X ' (t ) = S 'T (t ) S (t ) + S T (t ) S ' (t ) = G T (t )G (t ) + S T (t ) S (t ) A(t ) + AT (t ) S T (t ) S (t ) − S T (t ) S (t ) H (t ) H T (t ) S T (t ) S (t ). Multiplicando la ecuación anterior a la izquierda por S −T (t ) y a la derecha por S −1 (t ) , se obtiene S −T (t ) S 'T (t ) + S ' (t ) S −1 (t ) = C (t ) , donde C (t ) = G T (t )G (t ) + A (t ) + A T (t ) + H (t ) H T (t ) , siendo A (t ) = S (t ) A(t ) S −1 (t ) , H (t ) = S (t ) H (t ) , G (t ) = G (t ) S −1 (t ) . Puesto que S (t ) es triangular inferior, entonces S ' (t ) S −1 (t ) se puede elegir de manera que coincida con la parte triangular inferior de la matriz C (t ) , es decir, 1 ⎡ ⎤ S ' (t ) = ⎢C L (t ) + C D (t )⎥ S (t ) , S (t 0 ) = S 0 , 2 ⎣ ⎦ siendo C L (t ) la parte estrictamente triangular inferior de la matriz C (t ) y C D (t ) la diagonal de la matriz C (t ) . Una vez se ha calculado S (t ) , por ejemplo, mediante integración directa, X (t ) se puede calcular a partir de la expresión ( 2.74 ). Este método puede mejorar el condicionamiento del la EDMR ( 2.73 ), sin embargo, puede tener problemas si la matriz S (t ) está mal condicionada. 2.4.3.7 Método de Rusnak Este método, debido a Rusnak ([Rusn88]), se aplica a la EDMR con coeficientes constantes definida por ( 2.61 ), suponiendo que ( A, H ) es estabilizable y (G, A) detectable. La solución analítica de la ecuación ( 2.61 ) viene dada por la expresión −1 t ⎡ ⎤ T K ( t −t o ) ( 2.75 ) X (t ) = X + e ( X 0 − X ) ⎢ I n + ∫ e K (τ −t0 ) Re K (τ −t0 ) dτ ( X 0 − X )⎥ e K (t −to ) , t ≥ t 0 , ⎢⎣ ⎥⎦ t0 T 73 Capítulo 2: Estado del Arte donde X es la única solución semidefinida positiva de la EAR ( 2.63 ) y K = A − RX . Si se considera un tamaño de paso constante e igual a ∆t , entonces, teniendo en cuenta ( 2.75 ), se obtiene la siguiente fórmula recursiva T Xˆ l +1 = e K ∆t Xˆ l ( I n + DXˆ l ) −1 e K∆t , l = 0,1,2,L , siendo Xˆ 0 = X 0 − X , Xˆ n = X (t n ) − X y ∆t D = ∫ e Kτ Re K τ dτ . T 0 Respecto de este método se pueden realizar dos puntualizaciones: • Puesto que la matriz D → 0 a medida que ∆t → 0 , entonces la matriz I n + DXˆ l está bien condicionada para pequeños valores de ∆t . • Es necesario calcular la solución X de la EAMR ( 2.63 ) para poder obtener la solución X (t ) de la ecuación ( 2.61 ). 2.4.3.8 Métodos Conservativos y Métodos Simplécticos Más que un método, se trata de una familia de métodos que tienen en común la conservación de la simetría y el carácter semidefinido positivo de la solución. Teorema 2.15 ([DiEi94]) Sea la EDMR simétrica ( 2.76 ) X ' (t ) = A(t ) X (t ) + X (t ) AT (t ) − X (t ) B(t ) X (t ) + C (t ) , X (0) = X 0 , t ≥ 0 , en donde la condición inicial X 0 es una matriz simétrica semidefinida positiva, entonces la solución X (t ) es simétrica y semidefinida positiva para todo t > 0 . Además, si X ( s ) o C ( s) son definidas positivas para un cierto s ≥ 0 , entonces X (t ) es definida positiva para todo t ≥ s . Lo que se busca en estos métodos es aplicar algoritmos que preserven la propiedad de que las soluciones encontradas para instantes de tiempo t > 0 conserven la propiedad de ser definidas o semidefinidas positivas. En [DiEi94] se proponen varios de estos métodos. El primero de ellos está basado en el método de linealización de EDMRs. Por el Teorema 2.12, se tiene que la EDML asociada a la EDMR ( 2.76 ) es ( 2.77 ) C (t ) ⎤ ⎡Y (t ) ⎤ ⎡Y ' (t ) ⎤ ⎡ A(t ) = ⎢ Z ' (t )⎥ ⎢ B(t ) − AT (t )⎥ ⎢ Z (t )⎥ , ⎣ ⎦ ⎣ ⎦⎣ ⎦ ⎡Y (0) ⎤ ⎡ X 0 ⎤ ⎢ Z (0)⎥ = ⎢ I ⎥ , ⎣ ⎦ ⎣ ⎦ con ( 2.78 ) X (t ) = Y (t ) Z −1 (t ) , la solución de la EDMR ( 2.76 ). 74 Capítulo 2: Estado del Arte Una aproximación consiste en utilizar métodos de discretización para resolver la EDML ( 2.77 ), y calcular entonces X (t ) mediante la expresión ( 2.78 ). Por ejemplo, si se utilizan métodos de Gauss (aproximantes diagonales de Padé), entonces sus coeficientes satisfacen ([Sanz92]) M ij = bi aij + b j a ji − bi b j = 0 , ∀i, j = 1, L , k , ( 2.79 ) por lo que se trata de métodos Runge-Kutta simplécticos, siendo b j ≥ 0 . Teorema 2.16 ([DiEi94]) La aplicación de un método Runge-Kutta que satisfaga ( 2.79 ) con b j ≥ 0 a la EDML definida en ( 2.77 ) produce soluciones aproximadas que son simétricas y semidefinidas positivas. Otro método que se encuentra en [DiEi94] consiste en expresar la EDMR ( 2.76 ) como X ' (t ) = [ A(t ) − 0.5 X (t ) B(t )] X (t ) + X (t )[ A(t ) − 0.5 X (t ) B(t )]T + C (t ) . La solución de la ecuación anterior es t ( 2.80 ) X (t ) = Φ (t , s ) X ( s )Φ T (t , s ) + ∫ Φ (t ,τ )C (τ )Φ T (t ,τ )dτ , s siendo Φ(t ,τ ) la solución de la EDML ( 2.81 ) ∂Φ (t ,τ ) = [A(t ) − 0.5 X (t ) B(t )]Φ (t ,τ ) , Φ (τ ,τ ) = I n . ∂t Para obtener una solución aproximada X k +1 que sea definida positiva, a partir de otra X k que sea definida positiva, se pueden seguir los siguientes pasos: • • • Aplicar cualquier método para resolver ( 2.81 ). Obtener las correspondientes soluciones, utilizando cualquier otro método. Utilizar una fórmula en la que los pesos para la integración de ( 2.80 ) sean positivos. Si se resuelve la ecuación ( 2.81 ) por la regla implícita del punto medio y se utiliza la regla trapezoidal para calcular X (t ) en ( 2.80 ), se obtiene un método de segundo grado. La regla del punto medio para ( 2.81 ) requiere una aproximación de Ο(h 2 ) para X (t k + h / 2) . El esquema resultante es −1 Φ k +1 / 2 ⎡ h⎛ 1 h⎛ 1 ⎞⎤ ⎡ ⎞⎤ = ⎢ I − ⎜ Ak − Bk X k ⎟⎥ ⎢ I n + ⎜ Ak − Bn X k ⎟⎥ , 4⎝ 2 4⎝ 2 ⎠⎦ ⎣ ⎠⎦ ⎣ h ⎤ h ⎡ X k +1 / 2 = Φ k +1 / 2 ⎢ X k + C k ⎥ Φ Tk +1 / 2 + C k +1 / 2 , 4 ⎦ 4 ⎣ −1 ⎡ 1 1 h⎛ h⎛ ⎞⎤ ⎡ ⎞⎤ Φ k = ⎢ I − ⎜ Ak +1 / 2 − Bk +1 / 2 X k +1 / 2 ⎟⎥ ⎢ I + ⎜ Ak +1 / 2 − Bk +1 / 2 X k +1 / 2 ⎟⎥ , 2⎝ 2 2⎝ 2 ⎠⎦ ⎣ ⎠⎦ ⎣ 75 Capítulo 2: Estado del Arte h ⎤ h ⎡ X k +1 = Φ k ⎢ X k + C k ⎥ Φ Tk + C k +1 . 2 ⎦ 4 ⎣ Un estudio más completo sobre métodos simplécticos y su aplicación a la resolución de EDMRs que conserven la simetría y la positividad de la solución pueden encontrarse en [SaCa94] o [Mart99]. 2.4.3.9 Métodos BDF para EDMRs de gran Escala En [BeMe04] se sugiere resolver EDMRs de gran escala mediante el método NewtonADI (Alternating Directions Implicit) de rango pequeño ([Benn02], [Benn02]). Estas ecuaciones proceden de la semidiscretización de problemas de control óptimo de ecuaciones en derivadas parciales de tipo parabólico hiperbólico como, por ejemplo, la ecuación de calor, la ecuación de ondas, etc. Sea la EDMR simétrica X ' (t ) = Q(t ) + X (t ) A(t ) + AT (t ) X (t ) − X (t ) RX (t ) , t0 ≤ t ≤ t f , X (t0 ) = X 0 . Aplicando el método BDF y reagrupando adecuadamente los términos de la ecuación, se tiene obtiene la EAMR r ( 2.82 ) hβ Qk + ∑ α j X k − j + (hβAk − 0.5 I n )T X k + X k (hβ Ak − 0.5 I n ) − X k (hβ Rk ) X k = 0 . j =1 Suponiendo que Qk = CkT Ck , Ck ∈ ℜ pxn , Rk = Bk BkT , Bk ∈ ℜnxm , X k = Z k Z kT , Bk ∈ ℜ nxz k , la EAMR ( 2.82 ) se puede escribir como ( 2.83 ) Cˆ kT Cˆ k + Aˆ kT Zˆ k Zˆ kT + Zˆ k Zˆ kT Aˆ k − Zˆ k Zˆ kT Bˆ k Bˆ kT Zˆ k Zˆ kT = 0 , siendo Aˆ k = hβAk − 0.5 I n , Bˆ k = hβ Bk , Cˆ k = [ hβ Ck , α1 Z k −1 ,L, α r Z k − r ] . Si, por simplicidad de notación, la ecuación ( 2.83 ) se escribe como 0 = F ( P) = C T C + AT P + PA − PBBT P = 0 , y se aplica el método de Newton, se tiene que X l +1 = X l + N l , siendo N l = ( F 'Pl ) −1 F ( Pl ) , 76 Capítulo 2: Estado del Arte con F 'Pl la derivada de Fréchet en la dirección Pl , definida como F 'P : Q ⎯ ⎯→( A − BBT P)Q + Q( A − BBT P)T . Un paso de la iteración de Newton, partiendo de una matriz P0 , quedaría como 1 Al = A − BBT Pl . 2 3 Calcular N l resolviendo la ecuación de Lyapunov AlT N l + N l Al = − F ( Pl ) . Pl +1 = Pl + N l . Eligiendo un valor suficientemente pequeño del incremento de tiempo y eligiendo P0 = X k −1 , se puede conseguir que Ai , i ≥ 0 , sean estables y que Pl converja cuadráticamente a P* = X k +1 ≅ X (t k +1 ) . Para que este método sea aplicable en problemas de gran escala es necesario utilizar un método que resuelva ecuaciones de Lyapunov, de manera que explote la estructura dispersa y de rango pequeño de las matrices Al . En primer lugar, la ecuación de Lyapunov del paso se puede escribir como AlT Pl +1 + Pl +1 Al = −C T C − Pl BBT Pl := −WlWlT . Suponiendo Pl = Z l Z lT para rango( Z l ) << n y observando que rango(Wl ) ≤ m + p << n , entonces basta utilizar un método numérico que resuelva la ecuación de Lyapunov anterior como, por ejemplo, una versión modificada del método ADI para ecuaciones de Lyapunov que tengan la forma FQ + QF T = −WW T , con F estable y W ∈ ℜ nxnw . La iteración ADI se puede escribir como ([Wach88]) ( F T + p j I n )Q j −1 = −WW T − Q j −1 ( F − p j I n ) , 2 ( F T + p j I n )QTj = −WW T − Q j −1 ( F − p j I n ) , 2 donde p denota el complejo conjugado de p ∈C . Si los parámetros p j se eligen de manera apropiada, entonces lim Q j = Q j →∞ con un razón de convergencia superlineal. Comenzando la iteración anterior con Q0 = 0n y observando que para F estable, entonces Q es semidefinida positiva, se tiene que Q j = Y jY jT para una cierta matriz Y j ∈ ℜ nxr j . Sustituyendo esta factorización en la iteración anterior, reagrupando los términos y combinando los dos pasos de la iteración, se obtiene una iteración ADI factorizada de 77 Capítulo 2: Estado del Arte manera que en cada paso de la iteración se obtienen nw columnas de un factor de rango completo Q , como a continuación se muestra: V1 = − 2real( p1 ) ( F T + p1 I n ) −1W ; Y1 = V1 Para j = 2,3,.... 1 2 real( p j ) 2.1 Vj = 2.2 Y j = [Y j −1 V j ] . real( p j −1 ) [ I n − ( p j + p j −1 )( F T + p j I n ) −1 ]V j −1 Si en la iteración anterior se alcanza la convergencia después de jmax pasos, entonces Y jmax = [V1 , V2 , L , V jmax ] ∈ ℜ nxjmax nw , donde V j ∈ ℜnxnw . Para un valor grande de n y uno pequeño de nw , se puede esperar que rj = jmax nw << n , de manera que se ha obtenido una aproximación Y j max de rango pequeño de un factor Y de la solución, es decir, Q = YY T ≈ Y j max Y jTmax . En el caso en que rj = jmax nw sea grande, se puede aplicar técnicas de compresión ([GuSA03]) para reducir el número de columnas de la matriz Y j max , sin añadir un error significativo. 2.4.4 Aplicaciones Las EDMRs tienen numerosas aplicaciones en ingeniería y en ciencias aplicadas como, por ejemplo, control óptimo, filtrado óptimo, problemas de valores de contorno, perturbaciones singulares, etc. En este apartado se describen algunas de ellas. 2.4.4.1 Problemas del Control Óptimo En este subapartado se describe la aplicación de EDMRs al problema del sistema de regulador óptimo lineal cuadrático. Sea la EDL de orden n x' (t ) = A(t ) x(t ) + B(t )u (t ) , x(t 0 ) = x0 , t 0 ≤ t ≤ t f , y el índice de coste cuadrático tf 1 1 J = ∫ [ xT (t )Q(t ) x(t ) + u T (t ) R(t )u (t )]dt + x T (t f ) Sx(t f ) , 2 t0 2 siendo • x(t ) ∈ ℜ n , el vector de estados; • A(t ) ∈ ℜ nxn , la matriz de estados; • B(t ) ∈ ℜ nxm , la matriz de entradas (controles); • u (t ) ∈ ℜ m , el vector de entradas (controles); • J ∈ ℜ , el índice de coste; 78 Capítulo 2: Estado del Arte • Q(t ) ∈ ℜ nxn semidefinida positiva, la matriz de pesos correspondientes a los estados; • R (t ) ∈ ℜ mxm definida positiva, la matriz de pesos correspondientes a los controles; y • S ∈ ℜ nxn semidefinida positiva, la matriz de pesos correspondientes al valor final. El objetivo es determinar el control óptimo u (t ) que minimice el valor de J . Puede demostrarse ([Kalm61]) que la ley de control óptimo u (t ) viene dada por u (t ) = − R −1 (t ) B T (t ) P(t ) x(t ) , t 0 ≤ t ≤ t f , ( 2.84 ) y que la matriz del sistema en bucle cerrado resulta ser ( 2.85 ) K (t ) = A(t ) − B(t ) R −1 (t ) B T (t ) P(t ) , t 0 ≤ t ≤ t f , donde P(t ) satisface la EDMR ( 2.86 ) P' (t ) = − AT (t ) P(t ) − P(t ) A(t ) + P(t ) B(t ) R −1 (t ) BT (t ) P(t ) − Q(t ) , t 0 ≤ t ≤ t f P (t f ) = S . 2.4.4.2 Problemas de Filtrado y Estimación En este subapartado se describe la aplicación de EDMRs al problema de estimación de mínimos cuadrados de sistemas lineales en tiempo continuo. En este caso x(t ) ∈ ℜ n es un vector generado aleatoriamente por la EDL x' (t ) = F (t ) x(t ) + G (t )u (t ) , E [x(t0 )] = x0 , siendo E [x ] el valor esperado de x(t ) , y la señal observada z (t ) ∈ ℜ p viene dada por z (t ) = H (t ) x(t ) + v(t ) . Los vectores u (t ) ∈ ℜ m y v(t ) ∈ ℜ p corresponden a ruidos blancos independientes con medias igual a 0 y matrices de covarianza definidas por las expresiones cov[u (t ), u (τ )] = Q(t )δ (t − τ ) , cov[v(t ), v(τ )] = R (t )δ (t − τ ) , cov[u (t ), v(τ )] = 0 , para todo t y τ , siendo Q(t ) ∈ ℜ nxn semidefinida positiva y R (t ) ∈ ℜ nxn definida x (t1 | t ) de x(t1 ) a partir de los datos positiva. El objetivo es encontrar una estimación ~ observados {z (τ ), t 0 ≤ t ≤ t} , de manera que E[|| x(t1 ) − ~ x (t1 | t ) || 22 ] , t1 ≥ t , tenga un valor mínimo. 79 Capítulo 2: Estado del Arte x (t | t ) está Para t1 = t puede demostrarse ([KaBu61]) que la estimación óptima ~ generada por el sistema lineal dinámico d~ x (t | t ) = F (t ) ~ x (t | t ) + K (t ) ~ z (t | t ) , ~ x (t 0 | t 0 ) = x0 , dt ~z (t | t ) = z (t ) − H (t ) ~ x (t | t ) . La matriz de ganancias K (t ) viene dada por la expresión K (t ) = P(t ) H T (t ) R −1 (t ) , siendo P (t ) = cov[x(t ) − ~ x (t | t ), x(t ) − ~ x (t | t )] la solución de la EDMR P' (t ) = F (t ) P(t ) − P(t ) F T (t ) − P(t ) H T (t ) R −1 (t ) H (t ) P(t ) + G (t )Q(t )G T (t ) , P (t 0 ) = P0 = cov[x(t 0 ) − x0 , x(t 0 ) − x0 ] , t ≥ t 0 . 2.4.4.3 Sistemas de Parámetros Distribuidos El siguiente ejemplo muestra la aplicación de EDMRs al problema de control óptimo en sistemas de parámetros distribuidos ([Hunt79]). Sea el sistema parabólico de parámetros distribuidos ∂x( y, t ) ∂ 2 x( y, t ) = + u ( y, t ) , t 0 ≤ t ≤ t f , 0 ≤ y ≤ L , ∂y ∂y 2 con condiciones de contorno ∂x(0, t ) ∂x( L, t ) = 0, = 0, ∂t ∂y y la condición inicial x( y,0) = f ( y ) . El objetivo es encontrar un control óptimo u (t ) de manera que el funcional tf L J= ( ) 1 qx 2 ( y, t ) + ru 2 ( y, t ) dydt , ∫ ∫ 200 tenga un valor mínimo. Si se utiliza una fórmula en diferencias centrales que aproxime ∂2x y se considera ∂y 2 ∆y = L /(n + 1) , se obtiene la EDL ( 2.87 ) x' (t ) = Ax(t ) + u (t ) , donde 80 Capítulo 2: Estado del Arte 0 ⎡− 2 2 ⎢ 1 −2 1 ⎢ ⎢0 1 −2 1 ⎢ A= M M M (∆y ) 2 ⎢ ⎢0 0 0 ⎢ 0 0 ⎢0 ⎢0 0 0 ⎣ L O O L L L 0 0 0⎤ 0 0 0 ⎥⎥ 0 0 0⎥ ⎥ O M M ⎥ ∈ ℜ ( n+ 2) x ( n + 2) . −2 1 0⎥ ⎥ 1 −2 1 ⎥ 0 2 − 2⎥⎦ El vector de estados x(t ) es igual a [ x0 (t ), x1 (t ),L, xn +1 (t )]T , donde x i (t ) = x(i∆y, t ) , i = 0,1, L , n + 1 . El vector de control u (t ) es igual a [u0 (t ), u1 (t ),L, un +1 (t )]T , donde ui (t ) = u (i∆y, t ) , i = 0,1, L , n + 1 . Con la aproximación anterior y utilizando la regla trapezoidal para la integración de y , el funcional de coste se convierte en tf ( 2.88 ) ∆y J= [ xT (t )Qx(t ) + u T (t ) Ru (t )]dt , ∫ 2 0 donde Q R = = diag (0.5, 1, L, 1, 0.5) . q r El procedimiento estándar de optimización para ( 2.87 ) y ( 2.88 ) consiste en resolver hacia atrás la EDMR ( 2.86 ), siendo P(t f ) = 0 . El control óptimo y la trayectoria de estado óptima están gobernados por las ecuaciones ( 2.84 ) y ( 2.85 ), respectivamente. 2.4.4.4 Reducción de Orden y Desacoplamiento La reducción de orden y desacoplamiento de sistemas lineales, vía transformaciones de Riccati ([Chan69], [Sibu66], [SBIK76]), ha demostrado ser una potente herramienta analítica utilizada en matemáticas e ingeniería. Sea la EDL ( 2.89 ) d ⎡u (t )⎤ ⎡− A(t ) R(t )⎤ ⎡u (t )⎤ ⎡ f (t )⎤ = + , dt ⎢⎣ v(t ) ⎥⎦ ⎢⎣ Q(t ) B(t )⎥⎦ ⎢⎣ v(t ) ⎥⎦ ⎢⎣ g (t ) ⎥⎦ donde u (t ) ∈ ℜ n , v(t ) ∈ ℜ m , Q(t ) ∈ ℜ mxn y B (t ) ∈ ℜ mxm . f (t ) ∈ ℜ n , ⎡u (t0 )⎤ ⎡u0 ⎤ ⎢ v(t ) ⎥ = ⎢ v ⎥ , t ≥ t 0 , ⎣ 0 ⎦ ⎣ 0⎦ g (t ) ∈ ℜ m , A(t ) ∈ ℜ nxn , R (t ) ∈ ℜ nxm , Esta ecuación se puede reducir a un sistema triangular superior a bloques ( 2.90 ) 0 nxm ⎤ ⎡ f (t )⎤ R (t ) ⎤ ⎡uˆ (t )⎤ ⎡ I n d ⎡uˆ (t )⎤ ⎡ R (t ) X (t ) − A(t ) , +⎢ =⎢ ⎥ ⎢ ⎥ ⎥ ⎢ 0 B (t ) − X (t ) R (t )⎦ ⎣ vˆ(t ) ⎦ ⎣ X (t ) I m ⎥⎦ ⎢⎣ g (t ) ⎥⎦ dt ⎣ vˆ(t ) ⎦ ⎣ 81 Capítulo 2: Estado del Arte 0 nxm ⎤ ⎡u0 ⎤ ⎡uˆ (t 0 )⎤ ⎡ I n = ⎢ vˆ(t ) ⎥ ⎢− X (t ) I ⎥ ⎢ v ⎥ , t ≥ t 0 , 0 m ⎦⎣ 0 ⎦ ⎣ 0 ⎦ ⎣ mediante la transformación 0 nxm ⎤ ⎡uˆ (t )⎤ ⎡u (t )⎤ ⎡ I n = ⎢ v(t ) ⎥ ⎢ X (t ) I ⎥ ⎢ vˆ(t ) ⎥ , m ⎦⎣ ⎦ ⎦ ⎣ ⎣ siendo X (t ) la solución de la EDMR X ' (t ) = Q(t ) + X (t ) A(t ) + B(t ) X (t ) − X (t ) R(t ) X (t ) , t0 ≤ t ≤ t f , X (t 0 ) = X 0 , donde la condición inicial X 0 se puede elegir arbitrariamente. Por otra parte, la ecuación ( 2.90 ) puede reducirse a la ecuación ( 2.91 ) 0 nxm ⎤ ⎡u (t )⎤ d ⎡u (t )⎤ ⎡ R (t ) X (t ) − A(t ) =⎢ ⎢ ⎥ 0 mxn B (t ) − X (t ) R (t )⎥⎦ ⎢⎣ v (t ) ⎥⎦ dt ⎣ v (t ) ⎦ ⎣ ⎡ I + S (t ) X (t ) − S (t )⎤ ⎡ f (t )⎤ +⎢ n , t ≥ t0 , I m ⎥⎦ ⎢⎣ g (t ) ⎥⎦ ⎣ − X (t ) ( 2.92 ) ⎡u (t 0 )⎤ ⎡ I m + S (t 0 ) X (t0 ) − S (t 0 )⎤ ⎡u0 ⎤ , ⎢ v (t ) ⎥ = ⎢ − X (t0 ) I n ⎥⎦ ⎢⎣ v0 ⎥⎦ ⎣ 0 ⎦ ⎣ mediante la transformación ⎡uˆ (t )⎤ ⎡ I n ⎢ vˆ(t ) ⎥ = ⎢0 ⎦ ⎣ mxn ⎣ S (t )⎤ ⎡u (t )⎤ . I m ⎥⎦ ⎢⎣ v (t ) ⎥⎦ La matriz S (t ) resulta ser la solución de la Ecuación Diferencial Matricial de Sylvester (EDMS) S ' (t ) = R(t ) + [− A(t ) + R(t ) X (t )]S (t ) − S (t )[ B(t ) − X (t ) R(t )] , t0 ≤ t ≤ t f , S (t 0 ) = S 0 , donde S 0 puede elegirse de manera arbitraria. Este proceso puede adicionalmente llevarse a cabo desacoplando los sistemas diagonales a bloques individuales del sistema desacoplado ( 2.91 ). El precio pagado por esta reducción es el cálculo de la solución de las anteriores ecuaciones matriciales diferenciales de Sylvester y Riccati. 2.4.4.5 Resolución de Problemas de Contorno Sea el problema de contorno definido como ( 2.93) ⎡ y1' (t ) ⎤ ⎡ A11 ⎢ ' ⎥=⎢ ⎣ y2 (t )⎦ ⎣ A21 [B11 A12 ⎤ ⎡ y1 (t ) ⎤ , t0 ≤ t ≤ t f , A22 ⎥⎦ ⎢⎣ y2 (t )⎥⎦ ⎡ y (t ) ⎤ B12 ] ⎢ 1 0 ⎥ = β1 , ⎣ y 2 (t 0 )⎦ 82 Capítulo 2: Estado del Arte donde A11 ∈ ℜ nxn , A12 ∈ ℜ nxm , A21 ∈ ℜ mxn , A22 ∈ ℜ mxm , B11 ∈ ℜ mxn , B12 ∈ ℜ mxm , B21 ∈ ℜ nxn , B22 ∈ ℜ nxm , β 1 ∈ ℜ m , β 2 ∈ ℜ n , y1 ∈ ℜ n y y 2 ∈ ℜ m . Este problema de contorno se puede desacoplar en un problema de valores iniciales y otro de valores finales mediante el cambio de variable definido como ⎡ w1 (t ) ⎤ ⎡ y1 (t ) ⎤ −1 ⎢ w (t )⎥ = S (t ) ⎢ y (t )⎥ , ⎣ 2 ⎦ ⎣ 2 ⎦ siendo 0 nxm ⎤ ⎡ I ∈ ℜ ( n + m ) x ( n + m ) , X (t ) ∈ ℜ mxn , S (t ) = ⎢ n ⎥ ⎣ X (t ) I m ⎦ de manera que ⎡ w1' (t ) ⎤ ⎡ w1 (t ) ⎤ ⎢ ' ⎥ = A (t ) ⎢ ⎥, w t ( ) w t ( ) ⎣ 2 ⎦ ⎣ 2 ⎦ ( 2.94 ) con ⎡ A + A12 X (t ) A (t ) = S −1 (t ) AS (t ) − S −1 (t ) S ' (t ) = ⎢ 11 0 mxn ⎣ A12 ⎤ . A22 − X (t ) A12 ⎥⎦ Para que esto sea posible (véase [KeLe82], [DESS82]) es necesario que X (t ) sea la solución de la EDMR ( 2.95 ) X ' (t ) = A21 + A22 X (t ) − X (t ) A11 − X (t ) A12 X (t ) , t0 ≤ t ≤ t f , X 0 = X (t 0 ) = − B12−1 B11 , siendo ( 2.96 ) [0 B12 ]w(t 0 ) = β1 , [ B21 + B22 X (t f ) B22 ]w(t f ) = β 2 . Por lo tanto, para resolver el problema de contorno ( 2.93 ) se siguen los siguientes pasos: 1. 2. Resolver la EDMR ( 2.95 ). A partir de ( 2.94 ) se tiene las EDOs w2' (t ) = [ A22 − X (t ) A12 ]w2 (t ) , w1' (t ) = [ A11 + A12 X (t )]w1 (t ) + A12 w2 (t ) . Teniendo en cuenta las condiciones dadas en (2.97), se calcularía w2 desde t0 hasta t f y, a continuación, w2 (t ) desde t f hasta t0 . 3. Calcular y (t ) = S (t ) w(t ) . 2.4.5 Software para la Resolución de EDMRs En la actualidad, el único paquete de dominio público disponible para la resolución de EDMRs es DRESOL (Differential Riccati Equations SOLver). 83 Capítulo 2: Estado del Arte DRESOL se compone de un conjunto de subrutinas escritas en FORTRAN 77 para datos de simple precisión. Básicamente, utiliza el método BDF ([Diec92]) de manera que en cada paso del mismo se resuelve una Ecuación Algebraica Matricial de Riccati (EAMR) mediante el método de Newton. Al utilizar el método de Newton es necesario resolver una Ecuación Algebraica Matricial de Lyapunov (EAML) o de Sylvester (EAMS), según sea simétrica o no simétrica la EDMR considerada. Basado en el paquete LSODE ([Hind83]), DRSOL presenta mejoras sobre el anterior, respetando algunos aspectos del mismo, como los heurísticos utilizados a la hora de elegir el orden del método, la estimación del error local o la elección automática del tamaño de paso. Este paquete data del año 1992, por lo que, en cierto modo, se encuentra actualmente desfasado al utilizar la librería EISPACK ([SBDG76]) en lugar de la librería LAPACK, sucesora de la anterior y con notables mejoras sobre la primera. En esta tesis se ha realizado una implementación basada en este paquete ([AHIP05]), que aunque no presenta los heurísticos anteriormente comentados en cuanto a la selección del orden del método y del tamaño del paso, presenta notables mejoras al utilizar los núcleos computaciones BLAS y LAPACK (véanse el Algoritmo 5.6 y el Algoritmo 5.7). 2.5 Conclusiones En este capítulo se ha realizado una revisión del estado del arte concerniente, fundamentalmente, a las tres áreas de investigación tratadas en esta tesis: cálculo de Funciones de Matrices, resolución de EDOs y resolución de EDMRs. En la primera sección se han descrito los métodos más relevantes para el cálculo de las funciones matriciales más usuales. Posiblemente pueden existir otros métodos pero no tienen la importancia de los descritos en esa sección. No se puede asegurar cual es el mejor método, pues la eficiencia y precisión de cualquiera de ellos depende de la matriz y de la función considerada. Como se puede fácilmente observar, los métodos son muy dependientes de la función considerada aunque emergen dos métodos que se aplican en muchas ocasiones y que, en general, suelen presentar buenas cualidades numéricas: métodos basados en la descomposición real de Schur de una matriz y métodos basados en las aproximaciones racionales de Padé. Se puede constatar, por todo el estudio realizado, que en la actualidad se dispone de un número muy reducido de rutinas que implementan funciones de matrices, a excepción de las funciones incorporadas en MATLAB. En la segunda sección se ha descrito brevemente la resolución de EDOs. Más que un estado del arte se ha pretendido dar una visión general de su problemática, describiendo aquellos métodos más usuales en la resolución de EDOs. Además, se ha presentado una metodología de resolución de EDOs, basada en la linealización a trozos, que no siendo muy utilizada en la actualidad parece que puede llegar a ser una alternativa fiable a los métodos clásicos de resolución de EDOs. En la actualidad se dispone de numeroso software para la resolución de EDOs tanto de dominio público como comercial. En la última sección se ha realizado un exhaustivo estudio de los métodos de resolución de EDMRs. Entre ellos se pueden destacar los métodos BDF, que pueden utilizarse tanto en el caso general como en el caso de EDMRs simétricas, y los métodos simplécticos, que solo se pueden utilizar para EDMRs simétricas. De hecho, las aportaciones en los últimos años se dirigen, fundamentalmente, en esos dos caminos aunque no hay que descartar las modificaciones de métodos clásicos de resolución de EDMRs, sobre todo los que utilizan la linealización de EDMRs. No se dispone apenas 84 Capítulo 2: Estado del Arte de software para la resolución de EDMRs, a pesar de que existen numerosos métodos dedicados a ellas. Es razonable pensar, por todo lo comentado en este capítulo, que es posible desarrollar un software de calidad y de altas prestaciones que cubra las numerosas lagunas que en la actualidad existen en relación al cálculo de Funciones de Matrices y la resolución de EDOs y EDMRs. 85 Capítulo 3: Cálculo de Funciones de Matrices Capítulo 3 Cálculo de Funciones de Matrices 3.1 Resumen de Contenidos En este capítulo se describen los algoritmos desarrollados en esta tesis para el cálculo de Funciones de Matrices. Estos algoritmos se basan en las dos metodologías más utilizadas para abordar este tipo de problemas: aproximaciones de Padé y la descomposición real de Schur de una matriz. El interés de aplicar metodologías generales de resolución de problemas computacionales reside en utilizar el mismo código para diferentes tipos de problemas; en nuestro caso, utilizar el mismo código para el cálculo de diferentes Funciones de Matrices. Por tanto, es necesario diseñar algoritmos, basados en estas metodologías, que permitan calcular Funciones de Matrices cualesquiera. Como se ha descrito en el Capítulo 2, las aproximaciones de Padé son muy utilizadas en el cálculo de Funciones de Matrices: función exponencial, función logarítmica y función coseno. El algoritmo general basado en esta metodología consiste, básicamente, en reducir adecuadamente la norma de la matriz, determinar el polinomio de Taylor de grado 2l + 1 de la función, determinar los polinomios de grado l asociados a la aproximación diagonal de Padé, aplicar el algoritmo básico de Padé a la matriz obtenida en el primer paso y, por último, aplicar las transformaciones inversas de las aplicadas en la primera etapa. Se podría pensar que lo que es apropiado, desde un punto de vista computacional, para unas funciones (o matrices) también lo es para otras. Esto es así en numerosas ocasiones pero no siempre. Por ello, es necesario adecuar algunas de las etapas de estos algoritmos a la función (o matriz) considerada. La otra metodología se basa en la forma real de Schur de una matriz. Los algoritmos basados en esta metodología se caracterizan por ser, en general, muy precisos y razonablemente eficientes. Estos algoritmos constan básicamente de dos etapas: determinación de la descomposición real de Schur de la matriz y el cálculo de la función de la matriz considerada a partir de su forma real de Schur. Los algoritmos que se describen en este capítulo se han desarrollado para matrices reales. La adaptación de los algoritmos basados en las aproximaciones diagonales de Padé para matrices complejas es inmediata. La formulación de los algoritmos basados en la forma de Schur de una matriz compleja es más sencilla que la correspondiente a la forma real de Schur de matrices reales, pues en la primera se obtiene una matriz triangular superior y en la segunda una matriz casi triangular superior. Este capítulo está estructurado en cuatro secciones. En la segunda sección se describe, en primer lugar, un algoritmo general para el cálculo de Funciones de Matrices basado en los aproximantes diagonales de Padé. En segundo lugar se muestra la manera de obtener los polinomios de la aproximación diagonal de Padé a partir del polinomio de Taylor de grado 2l + 1 de la función considerada. En tercer lugar se analizan los métodos más eficientes para calcular funciones racionales de matrices. Esta etapa corresponde a una de las partes más costosas del algoritmo. Entre estos métodos se analizan versiones de los métodos de Horner y Paterson-Stockmeyer-Van Loan. Se 87 Capítulo 3: Cálculo de Funciones de Matrices utilizan dos descomposiciones de matrices para resolver el sistema lineal que aparece en esos métodos: la descomposición LU y la descomposición QR. En cuarto lugar se aplica el algoritmo general para el cálculo de las funciones matriciales exponencial, logarítmica, potencia fraccionaria, seno y coseno. Para cada una de ellas se adapta adecuadamente cada una de las etapas de algoritmo general. En la tercera sección se describen los algoritmos para el cálculo de Funciones de Matrices basados en la descomposición real de Schur de una matriz. Se comienza describiendo un esquema genérico de los algoritmos basados en esa metodología. Estos algoritmos obtienen f ( A) , con A matriz cuadrada real, realizando la descomposición real de Schur de la matriz A y calculando a continuación f ( A) a partir de f (S ) , siendo S la forma real de Schur de A . Los algoritmos desarrollados para esa metodología han sido: • Algoritmo basado en la forma diagonal por bloques. Obtiene, a partir de la forma real de Schur de la matriz A , una matriz B , diagonal por bloques, de manera que los valores propios de bloques diagonales distintos están suficientemente separados. La matriz f (B ) se obtiene calculando el valor de f sobre cada uno de los bloques diagonales de B siendo, por tanto, f (B) también diagonal por bloques. Finalmente, el valor de f ( A) se obtiene a partir de f (B) . • Algoritmos basados en la Ecuación Conmutante orientados a columnas y a diagonales. Estos algoritmos calculan f (S ) columna a columna o diagonal a diagonal, determinando, por una parte, los bloques diagonales f ( S ii ) a partir de los correspondientes S ii , y los no diagonales f ( S ij ) mediante la resolución de una ecuación matricial de Sylvester. • Algoritmos basados en la Ecuación Conmutante orientados a bloques. En este caso se realiza una división a bloques de la matriz S utilizando esquemas similares a los descritos en el caso anterior, pero teniendo en cuenta que los bloques pueden tener ahora cualquier dimensión. • Algoritmo basado en la agrupación en cluster de los valores propios de la matriz. Cuando la matriz A , y por tanto la matriz S , tienen valores propios cercanos entre sí, es conveniente agruparlos de manera que la resolución de la Ecuación Conmutante se realice con precisión. Este algoritmo realiza reordenaciones en los elementos de la matriz S , mediante transformaciones ortogonales de semejanza, de manera que los valores propios cercanos se encuentren en un mismo bloque diagonal. De este modo, la matriz S se puede estructurar por bloques y aplicar un esquema semejante al utilizado en los algoritmos orientados a bloques. • Algoritmo basado en los aproximantes diagonales de Padé. En este algoritmo se calcula f ( S ) mediante la adaptación de los aproximantes diagonales de Padé a matrices casi triangulares superiores. La última sección está dedicada a resaltar los aspectos de mayor interés de los algoritmos descritos, comentando brevemente las características de los mismos y comparándolos de manera teórica. Como ya se mencionó en la sección 1.1 del tema de introducción, la nomenclatura utilizada para los algoritmos desarrollados en esta tesis es txxyyyzzz, donde t indica el tipo de dato utilizado, xx indica el tipo de matriz, yyy indica el problema que resuelve y 88 Capítulo 3: Cálculo de Funciones de Matrices zzz el método utilizado. El significado de los seis últimos caracteres para los algoritmos que calculan Funciones de Matrices es: • yyy: función considerada. − Para los algoritmos que resuelven la Ecuación Conmutante por columnas, diagonales, bloques de columnas y bloques de diagonales se tiene que yyy=fun de manera que la función es pasada como argumento de entrada de la rutina. − Para el resto de algoritmos se utiliza la siguiente nomenclatura: yyy=fex, indica la función e A ; yyy=fax, indica la función a A ; yyy=fcs, indica la función cos A ; yyy=fsn, indica la función sen A ; yyy=fln, indica la función ln A ; yyy=flg, indica la función log a A ; yyy=fpt, indica la función Aa ; yyy=fpf, indica la función yyy=frc, indica la función p Aq , q / p ≠ 1/ 2 ; A. • zzz: método utilizado. − dbe: indica que se utiliza el método DB (Denman and Beavers) con escalado optimizado para el cálculo de la raíz cuadrada de una matriz; − psv: indica que se utiliza el método de Paterson-Stockmeyer-Van Loan para el cálculo de la aproximación diagonal de Padé; − hlu: indica que se utiliza el método de Horner y la descomposición LU con pivotamiento parcial de filas para la resolución del sistema de ecuaciones lineales que aparece en la aproximación diagonal de Padé; − hqr: indica que se utiliza el método de Horner y la descomposición QR para la resolución del sistema de ecuaciones lineales que aparece en la aproximación diagonal de Padé; − plu: indica que se utiliza el método de Paterson-Stockmeyer-Van Loan y la descomposición LU con pivotamiento parcial de filas para la resolución del sistema de ecuaciones lineales que aparece en la aproximación diagonal de Padé; − pqr: indica que se utiliza el método de Paterson-Stockmeyer-Van Loan y la descomposición QR para la resolución del sistema de ecuaciones lineales que aparece en la aproximación diagonal de Padé. − scc: algoritmo basado en la descomposición real de Schur de una matriz y en la resolución de la ecuación conmutante orientada a columnas; − scd: algoritmo basado en la descomposición real de Schur de una matriz y en la resolución de la ecuación conmutante orientada a diagonales; 89 Capítulo 3: Cálculo de Funciones de Matrices − sbc: algoritmo basado en la descomposición real de Schur de una matriz y en la resolución de la ecuación conmutante orientada a bloques de columnas; − sbd: algoritmo basado en la descomposición real de Schur de una matriz y en la resolución de la ecuación conmutante orientada a bloques de diagonales; − scl: algoritmo basado en la descomposición real de Schur de una matriz y en la resolución de la ecuación conmutante, con agrupación de valores propios en clusters; − sph: algoritmo basado en la descomposición real de Schur de una matriz y en los aproximantes diagonales de Padé, utilizando el método de Horner; − spp: algoritmo basado en la descomposición real de Schur de una matriz y en los aproximantes diagonales de Padé, utilizando el método de PatersonStockmeyer-Van Loan; − sdb: algoritmo basado en la descomposición real de Schur de una matriz y en la diagonalización a bloques de la matriz. 3.2 Algoritmos Basados en los Aproximantes Diagonales de Padé 3.2.1 Esquema General En este apartado se describe un esquema general, basado en los aproximantes diagonales de Padé, que permite calcular funciones de matrices f ( A) , siendo A ∈ ℜ nxn y f (z ) una función analítica definida sobre el espectro de A . Esta metodología se puede aplicar a funciones analíticas entre las que se encuentran las siguientes: • función exponencial, • función logarítmica, • potencias de exponente fraccionario, • funciones trigonométricas seno y coseno. Las etapas básicas de ese esquema se presentan a continuación: 1. Reducir la norma de la matriz. Cuando se utilizan aproximantes de Padé es conveniente transformar la matriz A en otra matriz A de norma más pequeña. Esto está motivado por el hecho de que los desarrollos en serie de Taylor de la función y, por consiguiente, el desarrollo correspondiente de Padé, están centrados en cero. En el caso de funciones de matrices, los aproximantes diagonales de Padé permiten buenas aproximaciones siempre y cuando la norma de la matriz A sea pequeña. Existen numerosos artículos en los que se utiliza esta técnica: • Exponencial: [MoVa78], [MoVa03]. • Logaritmo: [KeL289], [High01]. • Coseno: [SeBl80]. 90 Capítulo 3: Cálculo de Funciones de Matrices 2. Determinar los coeficientes del desarrollo de Taylor de la función. En esta etapa se determina el polinomio de Taylor correspondiente a la función considerada. Si se desea obtener una aproximación diagonal de Padé de orden (l , l ) , entonces el grado del polinomio de Taylor debe ser 2l + 1 . 3. Determinar los polinomios de la aproximación diagonal de Padé. Hay muchos motivos que justifican el interés de utilizar aproximantes diagonales de Padé ([MoVa78], [KeL289], [High01]), fundamentalmente porque permiten calcular funciones de matrices con una precisión semejante a la de otros métodos pero con un menor coste computacional. Aunque hay ciertos estudios sobre cuál puede ser el grado óptimo de los polinomios de la aproximación de Padé, éste depende de la matriz y de la función considerada. Como se comentó en el Capítulo 2, recientemente se han revisado criterios teóricos, que hace algunos años se consideraban válidos, en cuanto a la elección de ese grado para la exponencial de una matriz. Por ello, se ha considerado más apropiado hacer variable ese grado para poder determinar de manera experimental cuál puede ser su valor óptimo. 4. Aplicar el algoritmo básico de Padé a la matriz A obtenida en la primera etapa. En esta etapa se aplica el método clásico de aproximantes de Padé, utilizando técnicas que minimizan el número de operaciones (véase por ejemplo [PaSt73] o [VanL79]). El aproximante diagonal de Padé aplicado a la matriz A se define como r ( A ) = [q( A )]−1 p( A ) , siendo p y q los polinomios de grado l obtenidos a partir del polinomio de Taylor a(x) de la función f (x) . En definitiva, f ( A ) se puede calcular aproximadamente mediante la expresión f ( A ) ≅ r ( A ) = [q( A )]−1 p( A ) . 5. Aplicar las transformaciones inversas de las aplicadas en la primera etapa. En esta etapa se aplican las transformaciones necesarias a la matriz obtenida en la cuarta etapa, de manera que se tengan en cuenta las transformaciones aplicadas sobre la matriz A. A continuación se presenta el algoritmo general que calcula funciones de matrices mediante aproximantes diagonales de Padé. Para cada etapa del algoritmo se detalla la el resultado obtenido después de haber aplicado los pasos necesarios. 91 Capítulo 3: Cálculo de Funciones de Matrices Entradas: Matriz A ∈ ℜ nxn , grado l ∈ Z + de los polinomios de la aproximación diagonal de Padé, función analítica f ( x) . Salida: 1 2 3 4 5 Matriz B = f ( A) ∈ ℜ nxn . Aplicar transformaciones que disminuyan || A || : A . Encontrar el polinomio de Taylor de grado 2l + 1 de la función f ( x) : a( x) . Encontrar los polinomios de grado l de la aproximación diagonal de Padé: p ( x) , q ( x) . Calcular la aproximación de Padé r ( x) = p( x) / q( x) sobre la matriz A : B = r( A) . Aplicar las transformaciones inversas de las aplicadas en la etapa 1 sobre la matriz B : B . Algoritmo 3.1: Algoritmo general para el cálculo de funciones de matrices basado en los aproximantes diagonales de Padé. 3.2.2 Determinación de los Polinomios de la Aproximación Diagonal de Padé En este apartado se describe la manera de calcular los polinomios de grado l de la aproximación diagonal de Padé de una función analítica f ( x) . Sea f ( x) una función real que admite el desarrollo en series de potencias ∞ f ( x) = ∑ a k x k k =0 con radio de convergencia R , y la aproximación racional de f (x) r ( x) = p ( x) , q ( x) siendo l p( x) = p0 + p1 x + L + pl x l = ∑ pi x i , i =0 l q ( x) = q0 + q1 x + L + ql x l = ∑ q j x j j =0 y f k ) (0) = r k ) (0) , k = 0,1,L,2l . Considerando la función z ( x) = f ( x)q ( x) − p ( x) = ⎞ l ⎛ 2l ⎞⎛ l = ⎜ ∑ ak x k + s2l +1 ( x) ⎟⎜⎜ ∑ q j x j ⎟⎟ − ∑ pi x i = ⎝ k =0 ⎠⎝ j = 0 ⎠ i =0 l ⎞ l ⎛ 2l ⎞⎛ l = ⎜ ∑ ak x k ⎟⎜⎜ ∑ q j x j ⎟⎟ − ∑ pi x i + s2l +1 ( x)∑ q j x j , j =0 ⎝ k =0 ⎠⎝ j = 0 ⎠ i =0 92 Capítulo 3: Cálculo de Funciones de Matrices se obtiene la expresión ( 3.1 ) l ⎞ l ⎛ 2l ⎞⎛ l ⎜ ∑ ak x k ⎟⎜⎜ ∑ q j x j ⎟⎟ − ∑ pi x i + s2l +1 ( x)∑ q j x j = z ( x) , j =0 ⎝ k =0 ⎠⎝ j = 0 ⎠ i =0 cumpliéndose además que z k ) (0) = 0 , k = 0,1, L,2l . Sustituyendo x por 0, se obtiene la ecuación a0 q0 − p0 = 0 . ( 3.2 ) Derivando la expresión ( 3.1 ) l veces y sustituyendo x por 0, se obtienen las ecuaciones a1q0 + a0 q1 − p1 = 0, ( 3.3 ) M al −1q0 + al −2 q1 + L + a1ql −2 + a0 ql −1 − pl −1 = 0, al q0 + al −1q1 + L + a1ql −1 + a0 ql − pl = 0. La ecuación ( 3.2 ) y las ecuaciones ( 3.3 ) se pueden expresar en forma matricial como ( 3.4 ) ⎡ p 0 ⎤ ⎡ a0 ⎢ p ⎥ ⎢a ⎢ 1⎥ ⎢ 1 ⎢ M ⎥=⎢ M ⎢ ⎥ ⎢ ⎢ pl −1 ⎥ ⎢al −1 ⎢⎣ pl ⎥⎦ ⎢⎣ al 0 a0 L L 0 0 M O M al − 2 L a 0 al −1 L a1 0 ⎤ ⎡ q0 ⎤ 0 ⎥⎥ ⎢⎢ q1 ⎥⎥ M ⎥⎢ M ⎥ . ⎥⎢ ⎥ 0 ⎥ ⎢ql −1 ⎥ a0 ⎥⎦ ⎢⎣ ql ⎥⎦ Hallando las derivadas de órdenes l + 1,L,2l de la expresión ( 3.1 ) y sustituyendo x por 0, se tiene el sistema de ecuaciones lineales al +1q0 + al q1 + al −1q2 + L + a2 ql −1 + a1ql = 0 ⎫ al + 2 q0 + al +1q1 + al q2 + L + a3 ql −1 + a2 ql = 0 ⎪⎪ ⎪ M ⎬. a2l −1q0 + a2l −2 q1 + a2l −3 q2 + L + al ql −1 + al −1ql = 0⎪ ⎪ a2l q0 + a2l −1q1 + a2l −2 q2 + L + al +1ql −1 + al ql = 0 ⎪⎭ Como se tienen l ecuaciones con l + 1 incógnitas, es necesario dar un valor a una de las incógnitas. Tomando q 0 = 1 , entonces el sistema anterior se expresa en forma matricial como ( 3.5 ) ⎡ al ⎢a ⎢ l +1 ⎢ M ⎢ ⎢ a2l −2 ⎢⎣ a2l −1 al −1 L a2 al L a3 M O L M al a 2 l −3 a2l −2 L al +1 a1 ⎤ ⎡ q1 ⎤ ⎡ − al +1 ⎤ a2 ⎥⎥ ⎢⎢ q2 ⎥⎥ ⎢⎢ − al + 2 ⎥⎥ M ⎥⎢ M ⎥ = ⎢ M ⎥ . ⎥⎢ ⎥ ⎢ ⎥ al −1 ⎥ ⎢ql −1 ⎥ ⎢− a2l −1 ⎥ al ⎥⎦ ⎢⎣ ql ⎥⎦ ⎢⎣ − a2l ⎥⎦ Por lo tanto, los coeficientes de los polinomios p( x) y q( x) se obtienen resolviendo la ecuación matricial ( 3.5 ) y realizando el producto que aparece en la expresión ( 3.4 ). El algoritmo correspondiente a esta etapa se presenta a continuación. 93 Capítulo 3: Cálculo de Funciones de Matrices [ p, q ] = dlacp(a) Entrada: Vector a ∈ ℜ2l +1 que contienen a los coeficientes del polinomio de Taylor a ( x) de grado 2l + 1 de f ( x) . Salidas: Vectores p, q ∈ ℜ l +1 que contienen a los coeficientes de los polinomios p( x) y q( x) , de grados igual a l , del aproximante diagonal de Padé de f (x) . 1 2 Resolver la ecuación ( 3.5 ) para encontrar los coeficientes del polinomio q ( x) . Calcular el producto matriz por vector que aparece en la expresión ( 3.4 ) para encontrar los coeficientes del polinomio p( x) . Algoritmo 3.2: Cálculo de los polinomios de la aproximación diagonal de Padé de una función analítica f ( x) . El coste aproximado del algoritmo anterior es 8l 3 + l 2 flops. 3 3.2.3 Funciones Polinómicas y Racionales En este apartado se detallan dos métodos que permiten calcular funciones racionales de matrices. Esto es necesario para el cálculo de funciones de matrices basado en los aproximantes de Padé (cuarta etapa del Algoritmo 3.1). Aunque la descripción se va a realizar para funciones racionales, es fácil ver su extensión para el caso de funciones polinómicas. El primero se obtiene aplicando el método de Horner para funciones racionales. B = dgefrahor ( p, q, A ) . Entradas: Matriz A ∈ ℜ nxn , polinomios p( x) y q( x) de grado l ∈ Z + . Salida: 1 2 3 4 Matriz B = r ( A ) , con r ( x) = p( x) / q( x) . P = pl I n Q = ql I n Para i = l − 1 : −1 : 0 P = A P + pi I n 3.1 Q = A Q + qi I n 3.2 Calcular B resolviendo la ecuación QB = P Algoritmo 3.3: Cálculo de la función racional de una matriz mediante el método de Horner. El coste aproximado del algoritmo anterior es 8⎤ 3 ⎡ ⎢⎣2(l − 1) + 3 ⎥⎦ n flops. El segundo método está basado en el anidamiento de productos, denominado método de Paterson-Stockmeyer-Van Loan, ([PaSt73], [VanL79]). 94 Capítulo 3: Cálculo de Funciones de Matrices Si l p ( A ) = ∑ pi A i , i =0 entonces realizando agrupamientos de s términos, se tiene que l c i =0 k =0 p ( A ) = ∑ p i A i = ∑ Bk ( A s ) k , ( 3.6 ) con c = int(l / s ) y ⎧⎪ p sk I n + L + p sk +1 A + p sk + s −1 A s −1 , k = 0,1,L, c − 1 Bk = ⎨ . ⎪⎩ p sc I n + L + pl −1 A l − sc−1 + pl A l − sc , k = c Por ejemplo, para l = 7 y s = 3 se tiene la siguiente expresión p ( A ) = p0 I n + p1 A + p 2 A 2 + p3 A 3 + p 4 A 4 + p5 A 5 + p6 A 6 + p7 A 7 = p0 I n + p1 A + p2 A 2 + [ p3 + p4 A + p5 A 2 + p6 A 3 + p7 A 4 ] A 3 = p0 I n + p1 A + p2 A 2 + [ p3 + p4 A + p5 A 2 + ( p6 I n + p7 A ) A 3 ] A 3 . De igual modo, para l q( A ) = ∑ qi A i i =0 se obtiene una expresión similar a ( 3.6 ). El algoritmo asociado a este método es el siguiente. 95 Capítulo 3: Cálculo de Funciones de Matrices B = dgefrapsv( s, p, q, A ) . Entradas: Factor s ∈ Z + de agrupamiento, polinomios p(x) y q(x) de grados iguales a l ∈ Z + , matriz A ∈ ℜ nxn . Salida: 1 2 3 4 5 6 7 Matriz r ( A ) , con r ( x) = p( x) / q( x) . c = int(l / s) r = mod(l , s ) Y1 = A Para k = 2 : s Yk = A Yk −1 4.1 Si r ≠ 0 P = pl −r I n + pl −r +1Y1 + L + pl Yr 5.1 5.2 Q = ql −r I n + ql − r +1Y1 + L + ql Yr Si No 6.1 P = 0n 6.2 Q = 0n Para k = 1 : c 7.1 P = ps ( c −k ) I n + L + ps ( c −k )+ s −1Ys −1 + Ys P 7.2 8 Q = qs ( c−k ) I n + L + qs ( c−k )+ s −1Ys −1 + Ys Q Calcular r ( A ) resolviendo la ecuación Qr ( A ) = P . Algoritmo 3.4: Cálculo de la función racional de una matriz mediante el método de Paterson-Stockmeyer-Van Loan. Para calcular Yk , k = 2,3,L, s , son necesarios 2( s − 1)n 3 flops. Si se supone que s divide a l , entonces el coste del bucle 7 es [ ] 2l ⎡ 2n ⎤ 2n 3 + 2sn 2 = 2n 2 l ⎢ + 2⎥ . s ⎣ s ⎦ Por lo tanto, el coste aproximado del algoritmo anterior es 2nl ⎡ 2n ⎤ ⎡ ⎤ C ( s ) = 2( s − 1)n 3 + 2n 2 l ⎢ + 2⎥ = 2n 2 ⎢( s − 1)n + + 2l ⎥ flops. s ⎦ ⎣ s ⎦ ⎣ El valor mínimo de la expresión anterior se obtiene cuando s = 2l . Si se elige convenientemente el factor s de agrupamiento, se tiene que el algoritmo basado en el método de Paterson-Stockmeyer-Van Loan tiene un menor coste computacional que el algoritmo basado en el método de Horner, a costa de aumentar el coste espacial 3.2.4 Cálculo de Funciones de Matrices En este apartado se describe la aplicación del esquema descrito en el apartado 3.2.13.1 a varias funciones de matrices. 96 Capítulo 3: Cálculo de Funciones de Matrices 3.2.4.1 Función Exponencial Etapa 1: Reducir la norma de la matriz. Las técnicas de reducción de la norma de una matriz, además de ser eficientes, deben poderse corregir al final del algoritmo, para así obtener la exponencial de la matriz inicial. Para la exponencial de una matriz se pueden aplicar tres técnicas que se pueden utilizar conjuntamente: • Minimizar la norma de la matriz A ante traslaciones del tipo A − tI n ([Ward77]). • Equilibrar la matriz ([Ward77]). • Escalar la matriz ([MoVa78], [MoVa03]). La primera técnica consiste en minimizar la norma de la matriz A ante todas las posibles traslaciones del tipo A − tI n . El cálculo que conduce a la obtención de la traslación que minimiza a la norma de la matriz no es sencillo; sin embargo, se puede aproximar dicha traslación calculando la media de los valores propios de la matriz. Como la suma de los valores propios de una matriz coincide con la traza de la matriz, entonces la media de los valores propios coincide con traza ( A) / n , por lo que se puede considerar la transformación definida por la matriz A1 = A − tI n , siendo t= traza ( A) . n La segunda técnica consiste en minimizar la 1-norma de la matriz A1 , ante todas las posibles transformaciones de semejanza diagonales. Esta técnica, conocida con el nombre de equilibrado de la matriz, consiste en encontrar una matriz diagonal D invertible de manera que la 1-norma de la matriz A2 = D −1 A1D tenga el menor valor posible. La tercera técnica consiste en el escalado de la matriz. Para ello se elige un valor de m que sea potencia de 2 ( m = 2 j ), de manera que e A2 / m pueda calcularse con precisión y eficiencia. Un criterio, comúnmente utilizado, consiste en elegir m de manera que la matriz A = A2 / m tenga una norma menor que una cierta cantidad, por ejemplo, menor que 1. En resumen, en esta etapa se aplican las siguientes transformaciones: A ⇒ A1 = A − tI n ⇒ A2 = D −1 A1 D ⇒ A = A2 / m . Etapa 2: Calcular el polinomio de Taylor. Si se desea obtener una aproximación diagonal de Padé de orden (l , l ) , es necesario que el polinomio de Taylor sea de grado 2l + 1 . En el caso de la función exponencial resulta ser el polinomio ( 3.7 ) a ( x) = 1 + x + 1 2 1 3 1 x + x +L+ x 2 l +1 . 2! 3! (2l + 1)! 97 Capítulo 3: Cálculo de Funciones de Matrices Etapa 3: Calcular los polinomios de la aproximación diagonal de Padé. Se aplica el Algoritmo 3.2 para encontrar, a partir del polinomio de Taylor de la segunda etapa, los polinomios p(x) y q (x) de la función racional de Padé r ( x) = p ( x) / q ( x) . Etapa 4: Calcular la aproximación diagonal de Padé de la matriz A . Se calcula B = r ( A ) utilizando, por ejemplo, el Algoritmo 3.4. Etapa 5: Aplicar las transformaciones inversas de las realizadas en la etapa 1. Los pasos que se deben realizar en esta etapa corresponden a las transformaciones inversas de las aplicadas en la primera etapa; así pues, habrá que determinar las siguientes transformaciones: B = e A ⇒ B2 = e A2 ⇒ B1 = e A1 ⇒ B = e A . La primera transformación consiste en calcular B2 a partir de B : ( ) B2 = e A2 = e mA = e A m = Bm , m = 2j . La segunda transformación consiste en calcular B1 a partir de B2 : −1 B1 = e A1 = e DA2 D = De A2 D −1 = DB2 D −1 . Por último, la tercera transformación consiste en calcular B a partir de B1 : B = e A = e A1 +tI n = e t e A1 = e t B1 , t = traza( A) / n . El algoritmo que calcula la exponencial de una matriz mediante aproximantes diagonales de Padé aparece a continuación. 98 Capítulo 3: Cálculo de Funciones de Matrices B = dgefexpsv( s, l , A) . Entradas: Factor de agrupamiento s ∈ Z + , grado l ∈ Z + de los polinomios de la aproximación diagonal de Padé, matriz A ∈ ℜ nxn . Salida: 1 2 3 4 5 Matriz B = e A ∈ ℜ nxn . Reducir la norma de la matriz A : 1.1 t = traza ( A) / n 1.2 A1 = A − tI n 1.3 [ A2 , D ] = dgebal ( A1 ) (equilibrado de la matriz A1 ) j = max(0,1 + floor (log 2 || A ||∞ )) 1.4 A = A2 / 2 j 1.5 a = dlaexp(l ) (determina los coeficientes del polinomio de Taylor según la expresión ( 3.7 )) [ p, q] = dlacp(a) (determina los polinomios de la aproximación diagonal de Padé mediante el Algoritmo 3.2) B = dgefrapsv( s, p, q, A ) (calcula la aproximación diagonal de Padé mediante el Algoritmo 3.4) Aplicar las transformaciones inversas a las aplicadas en la primera etapa: 5.1 Calcular B2 = B m , m = 2 j , mediante potenciación sucesiva: 5.1.1 B2 = B 5.1.2 Para k = 1 : j 5.1.2.1 B2 = B22 5.2 B1 = DB2 D −1 5.3 B = e t B1 Algoritmo 3.5: Cálculo de la exponencial de una matriz mediante los aproximantes diagonales de Padé. El coste aproximado del algoritmo anterior es 3 2nl ⎤ 8l ⎡ 2n 2 ⎢( s − 1)n + + l 2 flops. + 2l + nj ⎥ + s ⎦ 3 ⎣ 3.2.4.2 Función Potencia Fraccionaria En este subapartado se particulariza el Algoritmo 3.1 a la función f ( x) = x c / d = d x c , con c, d ∈ Z . Etapa 1: Reducir la norma de la matriz. Para reducir la norma de A ∈ ℜ nxn se determina un entero positivo j de manera que la matriz A1 = A1 / m , m = 2 j , tenga una norma cercana a 1. De este modo, ( Ac / d = d Ac = d A1/ m ) cm = d A1 cm = d (I n + A1 − I n ) cm = d (I n + A ) cm = (I n + A ) d , cm 99 Capítulo 3: Cálculo de Funciones de Matrices siendo A = A1 − I n . La matriz A1 se puede obtener mediante el cálculo sucesivo de raíces cuadradas, (j A1 = A1/ m = A1/ 2 = L A , j utilizando la iteración DB con escalado descrita en el subapartado 2.2.3.3. Resumiendo, en esta etapa se realizan las transformaciones siguientes: A ⇒ A1 = A1 / m ⇒ A = A1 − I n . Etapa 2: Calcular el polinomio de Taylor. El polinomio de Taylor de grado 2l + 1 , que permite calcular la aproximación diagonal de Padé de orden (l , l ) , de la función ( 3.8 ) a ( x) = 1 + d (1 + x )k = (1 + x) k / d , con k = cm , es k k ⎛k k ⎞ 2l +1 ⎞ 2 ⎛k ⎞⎛ k ⎞ ⎛k x+ ⎜ − 1⎟ x + L + ⎜ − 1⎟⎜ − 2 ⎟ L ⎜ − 2l ⎟ x . 1! d 2! d ⎝ d (2l + 1)!d ⎝ d ⎠ ⎠⎝ d ⎠ ⎝d ⎠ Etapa 3: Calcular los polinomios de la aproximación diagonal de Padé. Se aplica el Algoritmo 3.2 para encontrar los polinomios p( x) y q( x) de la aproximación diagonal de Padé r ( x) = p( x) / q( x) . Etapa 4: Calcular la aproximación diagonal de Padé de la matriz A . Se calcula B = r ( A ) utilizando, por ejemplo, el Algoritmo 3.4. Etapa 5: Aplicar las transformaciones inversas de las realizadas en la etapa 1. Los pasos que se deben realizar en esta etapa deben corresponder a las transformaciones inversas de las aplicadas en la primera etapa. Para la potencia fraccionaria se calcula B = d Ac a partir de B = d ( I n + A ) cm , utilizando las transformaciones B ⇒ B1 ⇒ B . La primera transformación consiste en calcular B1 a partir de B : B1 = d A1cm = d ( I n + A ) cm = B . La segunda transformación consiste en calcular B a partir de B1 : ( B = d Ac = d A1/ m ) cm = d A1 cm = B1 . Por lo tanto, se puede eliminar la quinta etapa pues B = B . En primer lugar se presenta un algoritmo que calcula la raíz cuadrada de una matriz mediante una variante de la iteración DB con escalado. Este algoritmo se ha optimizado al resolver un sistema lineal en lugar de calcular las dos matrices inversas que aparecen en el método DB. 100 Capítulo 3: Cálculo de Funciones de Matrices B = dgefrcdbe( A, tol , maxiter ) . Entradas: Matriz A ∈ ℜ nxn , tolerancia tol ∈ ℜ + , número máximo de iteraciones maxiter ∈ Z + . Salida: 1 2 3 4 5 6 Matriz B = A. M =A Y=A Z = In cont = 1 k =1 Mientras cont == 1 −1 /( 2 n ) 6.1 γ = det( M ) 1 6.2 W= 6.3 6.4 Calcular X resolviendo la ecuación MX = W W=X ⎛ 1 ⎞ M = 0.25⎜⎜ 2 I n + γ 2 M + W ⎟⎟ γ ⎠ ⎝ W = γ In + W Y = 0.5YW Z = 0.5ZW W = M − In k = k +1 Si || W ||1 < tol o k > maxiter 6.11.1 cont = 0 6.5 6.6 6.7 6.8 6.9 6.10 6.11 γ In Algoritmo 3.6: Calcula la raíz cuadrada de una matriz mediante el método DB con escalado optimizado. El coste aproximado del algoritmo anterior es 20 3 kn flops, 3 donde k es el número de iteraciones necesarias para alcanzar la convergencia. El algoritmo que calcula la potencia fraccionaria de una matriz mediante aproximantes diagonales de Padé aparece a continuación. 101 Capítulo 3: Cálculo de Funciones de Matrices B = dgefpfpsv( s, l , c, d , A) . Entradas: Factor de agrupamiento s ∈ Z + , grado l ∈ Z + de los polinomios de la aproximación diagonal de Padé, c, d ∈ Z que definen la potencia fraccionaria de exponente c / d , matriz A ∈ ℜ nxn . Salida: 1 Matriz B = d Ac . Reducir la norma de la matriz A : j = max(0,1 + floor (log 2 || A ||∞ )) 1.1 1.2 A1 = A1/ 2 : 1.2.1 A1 = A 1.2.2 Para i = 1 : j j A1 = dgefrcdbe( A1 ,10 −15 ,100) (calcula A1 = A1 mediante el Algoritmo 3.6) a = dlafrp(l ) (determina los coeficientes del polinomio de Taylor según la expresión ( 3.8)) [ p, q] = dlacp(a) (determina los polinomios de la aproximación diagonal de Padé mediante el Algoritmo 3.2) B = dgefrapsv ( s, p, q, A1 ) (calcula la aproximación diagonal de Padé mediante el Algoritmo 3.4) 1.2.2.1 2 3 4 Algoritmo 3.7: Cálculo de la potencia fraccionaria de una matriz mediante los aproximantes diagonales de Padé. El coste aproximado del algoritmo anterior es 2nl 10n ⎤ 8 3 2 ⎡ + 2l + 2n 2 ⎢( s − 1)n + K j ⎥ + l + l flops, s 3 ⎣ ⎦ 3 siendo K j el número total de iteraciones necesarias para calcular las j raíces cuadradas del bucle 1.2.2. 3.2.4.3 Función Logaritmo Etapa 1: Reducir la norma de la matriz. Para reducir la norma de A ∈ ℜ nxn se determina un entero positivo j de manera que la matriz A1 = A1 / m , m = 2 j , tenga una norma cercana 1. De este modo, ( ) log A = m log A1 / m = m log( A1 ) = m log(I n + A1 − I n ) = m log(I n + A ) , siendo A = A1 − I n . La matriz A1 se puede obtener mediante el cálculo sucesivo de raíces cuadradas, ya que (j A1 = A1/ m = A1/ 2 = L A . j Resumiendo, en esta etapa se realizan las transformaciones siguientes: A ⇒ A1 = A1 / m ⇒ A = A1 − I n . 102 Capítulo 3: Cálculo de Funciones de Matrices Etapa 2: Calcular el polinomio de Taylor. El polinomio de Taylor de grado 2l + 1 , que permite calcular el aproximante diagonal de Padé de orden (l , l ) , de la función log(1 + x) es ( 3.9 ) a ( x) = 1 + x − 1 2 1 3 1 4 1 x + x − x +L+ x 2l +1 . 2 3 4 2l + 1 Etapa 3: Calcular los polinomios de la aproximación diagonal de Padé. Se aplica el Algoritmo 3.2 para encontrar los polinomios p( x) y q( x) de la aproximación diagonal de Padé r ( x) = p( x) / q( x) . Etapa 4: Calcular la aproximación diagonal de Padé de la matriz A . Se calcula B = r ( A ) utilizando, por ejemplo, el Algoritmo 3.4. Etapa 5: Aplicar las transformaciones inversas de las realizadas en la etapa 1. Los pasos que se deben realizar en esta etapa corresponden a las transformaciones inversas de las aplicadas en la primera etapa. En primer lugar se calcula B = log A a partir de B = log( I n + A ) , utilizando las transformaciones B ⇒ B1 ⇒ B . La primera transformación consiste en calcular B1 a partir de B : B1 = log A1 = log( I n + A ) = B . La segunda transformación consiste en calcular B a partir de B1 : B = log A = m log A1/ m = m log A1 = mB1 . El algoritmo para el cálculo del logaritmo de una matriz aparece a continuación. 103 Capítulo 3: Cálculo de Funciones de Matrices B = dgeflgpsv( s, l , A) . Entradas: Factor de agrupamiento s ∈ Z + , grado l ∈ Z + de los polinomios de la aproximación diagonal de Padé, matriz A ∈ ℜ nxn . Salida: 1 Matriz B = log A ∈ ℜ nxn . Reducir la norma de la matriz A : j = max(0,1 + floor (log 2 || A ||∞ )) 1.1 1.2 A1 = A1 / 2 : 1.2.1 A1 = A 1.2.2 Para i = 1 : j j 1.2.2.1 2 3 4 5 A1 = dgefrcdbe( A1 ,10 −15 ,100) mediante el Algoritmo 3.6) (calcula A1 = A1 A = A1 − I n . 1.3 a = dlalog (l ) (determina los coeficientes del polinomio de Taylor según la expresión ( 3.9 )) [ p, q] = dlacp(a) (determina los polinomios de la aproximación diagonal de Padé mediante el Algoritmo 3.2) B = dgefrapsv( s, p, q, A ) (calcula la aproximación diagonal de Padé mediante el Algoritmo 3.4) Aplicar las transformaciones inversas a las aplicadas en la primera etapa: B = mB 5.1 Algoritmo 3.8: Cálculo del logaritmo de una matriz mediante los aproximantes diagonales de Padé. El coste aproximado del algoritmo anterior es 2nl ⎛ ⎞ 8 + 2l + 2nK j ⎟ + l 3 + l 2 flops, 2n 2 ⎜ ( s − 1)n + s ⎝ ⎠ 3 siendo K j el número total de iteraciones necesarias para calcular las j raíces cuadradas del bucle 1.2.2. 3.2.4.4 Función Coseno El cálculo del coseno de una matriz que se describe a continuación está basado, fundamentalmente, en el método descrito en el subapartado 2.2.3.6. Etapa 1: Reducir la norma de la matriz. Para reducir la norma de la matriz A , mediante transformaciones de bajo coste, se explota la relación de periodicidad de la función coseno cos( A − πqI n ) = (−1) q cos A , q ∈ Z , siendo q el entero más cercano a traza ( A) / n que hace menor el valor de || A1 || , donde A1 = A − πqI n . A continuación se determina una matriz diagonal D de manera que A2 = D −1 A1 D esté equilibrada. 104 Capítulo 3: Cálculo de Funciones de Matrices Por último, se elige m = 2 j tal que la matriz A = A2 / m tenga una norma menor que 1. Resumiendo, en esta etapa se realizan las transformaciones siguientes A ⇒ A1 = A − πqI n ⇒ A2 = D −1 A1 D ⇒ A = A2 / m . Etapa 2: Cálculo del polinomio de Taylor. El polinomio de Taylor de grado 2l + 1 que permite calcular el aproximante diagonal de Padé de orden (l , l ) de la función cos x , es ( 3.10 ) a ( x) = 1 − 1 2 1 2l x + L + (−1) l x + 0 ⋅ x 2l +1 . 2! (2l )! Etapa 3: Cálculo de los polinomios de la aproximación diagonal de Padé. Se aplica el Algoritmo 3.2 para encontrar los polinomios p(x) y q(x) de la función racional de Padé r ( x) = p( x) / q( x) . Etapa 4: Cálculo de la aproximación diagonal de Padé de la matriz A . Se calcula B = r ( A ) aplicando, por ejemplo, el Algoritmo 3.4. Etapa 5: Aplicación de las transformaciones inversas de las realizadas en la primera etapa. Las transformaciones que se deben aplicar en esta etapa son: B = cos A ⇒ B2 = cos A2 ⇒ B1 = cos A1 ⇒ B = cos A . Como B2 = cos A2 = cos(2 j A ) , entonces B2 se puede obtener aplicando j veces la fórmula del coseno del ángulo doble para matrices: B2 = B Para i = 1 : j B2 = 2 B22 − I n . En la segunda transformación se debe calcular B1 = cos A1 a partir de B2 = cos A2 : B1 = cos A1 = cos( DA2 D −1 ) = D cos( A2 ) D −1 = DB2 D −1 . En la tercera transformación se debe calcular B = cos A a partir de B1 = cos A1 : B = cos A = cos( A1 + πqI n ) = (−1) q cos A1 = (−1) q B1 . 105 Capítulo 3: Cálculo de Funciones de Matrices B = dgefcspsv( s, l , A) . Entradas: Factor de agrupamiento s ∈ Z + , grado l ∈ Z + de los polinomios de la aproximación diagonal de Padé, matriz A ∈ ℜ nxn . Salida: Matriz B = cos A . 1 2 3 4 5 Reducir la norma de la matriz A : 1.1 Determinar el entero q más cercano a traza ( A) / n que minimice A − πqI n 1 A1 = A − πqI n 1.2 [ A2 , D ] = dgebal ( A1 ) (equilibrado de la matriz A1 ) 1.3 1.4 j = max(0,1 + floor(log 2 || A2 || ∞ )) 1.5 A = A2 / 2 j a = dlacos(l ) (determina los coeficientes del polinomio de Taylor según la expresión ( 3.10 )) [ p, q] = dlacp(a) (determina los polinomios de la aproximación diagonal de Padé mediante el Algoritmo 3.2) B = dgefrapsv( s, p, q, A ) (calcula la aproximación diagonal de Padé mediante el Algoritmo 3.4) Aplicar transformaciones inversas a las aplicadas en la primera etapa: B2 = cos(2 j A ) : 5.1 5.1.1 B2 = B 5.1.2 Para i = 1 : j 5.1.2.1 B2 = 2 B22 − I n 5.2 5.3 B1 = DB2 D −1 B = (−1) q B1 Algoritmo 3.9: Cálculo del coseno de una matriz mediante los aproximantes diagonales de Padé. El coste aproximado del algoritmo anterior es 2nl ⎡ ⎤ 8 2n 2 ⎢( s − 1)n + + 2l + nj ⎥ + l 3 + l 2 flops. s ⎦ 3 ⎣ 3.2.4.5 Función Seno La aplicación del Algoritmo 3.1 a la función seno resulta complicada debido a que en la quinta etapa es necesario aplicar la identidad sen 2 A = 2senA cos A . En lugar de ello, se puede calcular el seno de una matriz como a continuación se muestra. Puesto que las matrices π 2 In y A conmutan, entonces 106 Capítulo 3: Cálculo de Funciones de Matrices ⎛π ⎞ ⎛π ⎞ ⎛π ⎞ ⎛π ⎞ ⎛π ⎞ cos⎜ I n − A ⎟ = cos⎜ I n ⎟ cos A + sen⎜ I n ⎟sen = cos⎜ ⎟ I n cos A + sen⎜ ⎟ I n senA ⎝2⎠ ⎝2⎠ ⎝2 ⎠ ⎝2 ⎠ ⎝2 ⎠ = sen A. Por lo tanto, senA se puede obtener mediante una adaptación del Algoritmo 3.9. B = dgefsnpsv( s, l , A) . Entradas: Factor de agrupamiento s ∈ Z + , grado l ∈ Z + de los polinomios de la aproximación diagonal de Padé, matriz A ∈ ℜ nxn . Salida: Matriz B = sen A . 1 2 3 4 5 6 A= π In − A 2 Reducir la norma de la matriz A : 2.1 Determinar q entero más cercano a traza ( A) / n que minimice A − πqI n 1 2.2 A1 = A − πqI n 2.3 [ A2 , D ] = dgebal ( A1 ) (equilibrado de la matriz A1 ) j = max(0,1 + floor(log 2 || A2 || ∞ )) 2.4 2.5 A = A2 / 2 j a = dlacos(l ) (determina los coeficientes del polinomio de Taylor según la expresión ( 3.10 )) [ p, q] = dlacp(a) (determina los polinomios de la aproximación diagonal de Padé mediante el Algoritmo 3.2) B = dgefrapsv( s, p, q, A ) (calcula la aproximación diagonal de Padé mediante el Algoritmo 3.4) Aplicar transformaciones inversas a las aplicadas en la primera etapa: B2 = cos( A2 ) : 6.1 6.1.1 B2 = B 6.1.2 Para i = 1 : j 6.1.2.1 B2 = 2 B22 − I n 6.2 6.3 B1 = DB2 D −1 B = (−1) q B1 Algoritmo 3.10: Cálculo del seno de una matriz mediante los aproximantes diagonales de Padé. El coste aproximado del algoritmo anterior es 2nl ⎡ ⎤ 8 + 2l + nj ⎥ + l 3 + l 2 flops. 2n 2 ⎢( s − 1)n + s ⎣ ⎦ 3 107 Capítulo 3: Cálculo de Funciones de Matrices 3.3 Algoritmos Basados Descomposición Real de Schur de una matriz 3.3.1 Esquema General Se pueden desarrollar varios algoritmos a partir de la descomposición real de Schur de una matriz A ∈ ℜ nxn . Conocida dicha descomposición, se determina el valor de la función sobre la forma real de Schur de la matriz considerada y se calcula f ( A) a partir de la matriz anterior. A continuación se describe detalladamente el esquema correspondiente. Según el Teorema 6.7, A se puede descomponer como A = QSQ T , siendo Q ∈ ℜ nxn ortogonal y S ∈ ℜ nxn casi triangular superior. Por la Propiedad 2.2, se tiene que si f ( z ) es analítica sobre un abierto que contiene al espectro de A , entonces f ( A) se puede calcular como f ( A) = Qf ( S )Q T . El algoritmo general que calcula funciones de matrices mediante la forma real de Schur de una matriz se muestra a continuación. Entrada: Matriz A ∈ ℜ nxn . Salida: 1 2 3 Matriz B = f ( A) ∈ ℜ nxn . [Q, S ] = schur ( A) (obtiene la matriz ortogonal Q ∈ ℜ nxn y la matriz casi triangular S ∈ ℜ nxn de la descomposición real de Schur de la matriz A ). Calcular F = f (S ) . Calcular B = QFQ T . Algoritmo 3.11: Algoritmo general para el cálculo de funciones de matrices basado en la descomposición real de Schur de una matriz. El coste del algoritmo anterior es: • Primera etapa: El cálculo de la forma real de Schur está basado en el algoritmo iterativo QR de coste estimado de 25n 3 flops (véase [BlDo99]), siendo n la dimensión de la matriz A . Este coste se ha determinado de forma heurística, puesto que al ser un método iterativo el número de flops depende de la velocidad de convergencia de la forma Hessenberg superior a la forma casi triangular superior de la matriz A . • Segunda etapa: El coste computacional de F = f (S ) depende del método usado para su cálculo. • Tercera etapa: Para obtener B es necesario realizar el producto de una matriz densa por una matriz casi triangular superior ( B = QF ) y el producto de dos matrices densas ( B = BQ T ). El coste aproximado de esta etapa es 8 3 n flops. 3 108 Capítulo 3: Cálculo de Funciones de Matrices Diversos métodos se pueden utilizar para el cálculo de f (S ) , algunos se pueden encontrar en [Iba97] y [High03], y otros se introducen en este capítulo. 3.3.2 Algoritmo Basado en la Reducción a una Forma Diagonal por Bloques Una primera estrategia para calcular f ( S ) consiste en reducir la matriz S a una matriz diagonal por bloques D , utilizando para ello una transformación no ortogonal de semejanza definida por una matriz invertible Y ∈ ℜ nxn bien condicionada de manera que los valores propios cercanos se encuentren en el mismo bloque diagonal, y tal que la separación entre bloques diagonales distintos sea lo suficientemente grande. De esta forma, se tiene que ( 3.11 ) S = YDY −1 , D = diag( D1 , D2 , L , D p ) , Di ∈ ℜni xni , 1 ≤ i ≤ p , p ∑n i =1 i = n, y entonces f (S ) se puede calcular mediante la expresión f ( S ) = Yf ( D)Y −1 = Ydiag ( f ( D1 ),L, f ( D p ))Y −1 , donde cada bloque diagonal f ( Di ) , i = 1,2,L, p , se puede obtener utilizando, por ejemplo, aproximantes de Padé. Si la matriz S se puede dividir en bloques, ( 3.12 ) ⎡ S11 ⎢0 S=⎢ ⎢ M ⎢ ⎣⎢ 0 S12 L S1 p ⎤ S 22 L S 2 p ⎥⎥ n xn , Sij ∈ ℜ i j , 1 ≤ i ≤ j ≤ p , M O M ⎥ ⎥ 0 L S pp ⎦⎥ p ∑n i =1 i = n, de manera que los conjuntos de valores propios de los bloques diagonales, λ (S11 ), λ (S 22 ),L, λ (S pp ) , sean disjuntos dos a dos, entonces existe una transformación de semejanza, definida mediante una matriz invertible Y ∈ ℜ nxn , de manera que ( 3.13 ) Y −1 SY = diag( S11 , S 22 ,L, S pp ) ([GoVa96], Teorema 7.1.6). La forma de obtener la matriz Y se describe a continuación. En primer lugar, la matriz identidad de orden n se divide en bloques I n = [ E1 , E2 , L , E p ] , Ei ∈ ℜ nxni , i = 1,L, p , y se definen las matrices Yij ∈ ℜ nxn , como Yij = I n + Ei Z ij E Tj , 1 ≤ i < j ≤ p , siendo Z ij ∈ ℜ ni xn j matrices a determinar. Si se fijan los valores de i y de j , entonces la matriz Yij coincide con la matriz identidad excepto que su bloque (i, j ) es igual a Z ij , es decir, 109 Capítulo 3: Cálculo de Funciones de Matrices ⎡ I n1 ⎢M ⎢ ⎢0 ⎢ Yij = ⎢ M ⎢0 ⎢ ⎢M ⎢0 ⎣ L 0 O M L I ni O M L 0 O M L 0 L 0 O M L Z ij O M L In j O M L 0 L 0⎤ O M ⎥⎥ L 0⎥ ⎥ O M ⎥. L 0⎥ ⎥ O M ⎥ L I n p ⎥⎦ Si se define S = Yij−1SYij , entonces se tiene que Yij S = SYij , es decir, ⎡ I n1 ⎢M ⎢ ⎢0 ⎢ ⎢M ⎢0 ⎢ ⎢M ⎢0 ⎣ ⎡ S11 ⎢M ⎢ ⎢0 ⎢ =⎢ M ⎢0 ⎢ ⎢M ⎢0 ⎣ L 0 O M L I ni O M L 0 O M L 0 L 0 O M L Z ij O M L Inj O M L 0 L S1i O M L Sii O M L 0 O M L L S1 j O M L Sij O M L S jj O M 0 L 0 L 0 ⎤ ⎡ S11 O M ⎥⎥ ⎢⎢ M L 0 ⎥⎢ 0 ⎥⎢ O M ⎥⎢ M L 0 ⎥⎢ 0 ⎥⎢ O M ⎥⎢ M L I n p ⎥⎦ ⎢⎣ 0 L S1 p ⎤ ⎡ I n1 ⎢ O M ⎥⎥ ⎢ M L Sip ⎥ ⎢ 0 ⎥⎢ O M ⎥⎢ M L S jp ⎥ ⎢ 0 ⎥⎢ O M ⎥⎢ M L S pp ⎥⎦ ⎢⎣ 0 L S1i L S1 j L S1 p ⎤ ⎥ O M O M O M ⎥ L S ii L Sij L Sip ⎥ ⎥ O M O M O M ⎥ L 0 L S jj L S jp ⎥ ⎥ O M O M O M ⎥ L 0 L 0 L S pp ⎥⎦ ⎤ ⎥ ⎥ ⎥ ⎥ ⎥. ⎥ ⎥ O M ⎥ L I n p ⎥⎦ L 0 O M L I ni O M L 0 L 0 L O M O L Z ij L O M O L In j L O L O L M 0 M 0 0 M 0 M 0 Por tanto, los bloques de las matrices S y S , se relacionan entre sí mediante las siguientes igualdades: • Bloques diagonales, S kk = S kk , k = 1,2,L, p . • Bloques no diagonales, S ij = S ii Z ij − Z ij S jj + S ij , 1 ≤ i < j ≤ p , S kj = S ki Z ij + S kj , k = 1,2,L, i − 1 , S ik = S ik − Z ij S jk , k = j + 1, j + 2,L, p . De este modo, el bloque S ij se puede anular si Z ij es solución de la ecuación matricial de Sylvester S ii Z ij − Z ij S jj = − S ij , donde S ii ∈ ℜ ni xni y S jj ∈ ℜ n j xn j son matrices casi triangulares superiores y S ij ∈ ℜ ni xn j . 110 Capítulo 3: Cálculo de Funciones de Matrices Por lo tanto, definiendo la matriz Y como ⎡ I n1 ⎢0 p p Y = ∏∏ Yij = ⎢ ⎢M i =1 j > i ⎢ ⎣⎢ 0 Z12 I n2 M 0 L Z1 p ⎤ L Z 2 p ⎥⎥ , O M ⎥ ⎥ L I n p ⎦⎥ se puede comprobar que Y −1 SY = diag( S11 , S 22 ,L, S pp ) . A continuación se detalla el algoritmo que permite obtener la transformación de semejanza definida por la matriz Y . [Q, S ] = dlasbd (Q, S ) . Entradas: Matriz casi triangular superior S ∈ ℜ nxn y matriz ortogonal Q ∈ ℜ nxn procedentes de la descomposición real de Schur de la matriz A ∈ ℜ nxn . Salidas: Q es sobrescrita por la matriz QY y S es sobrescrita por la matriz diag( S11 , S 22 ,L, S pp ) , de manera que Q −1 SQ = diag( S11 , S 22 ,L, S pp ) . 1 Para j = 2 : p 1.1 Para i = 1 : j − 1 1.1.1 Calcular Z resolviendo la ecuación matricial de Sylvester S ii Z − ZS jj = − S ij 1.1.2 Para k = j + 1 : p 1.1.2.1 S ik = S ik − ZS jk 1.1.2.2 Para k = 1 : p 1.1.2.2.1 Qkj = Qki Z + Qkj Algoritmo 3.12: Reducción a la forma diagonal por bloques de una matriz casi triangular superior. El número de flops de este algoritmo depende de los tamaños de los bloques diagonales de la matriz S . La elección de la división en bloques de la matriz S determina la sensibilidad de las ecuaciones matriciales de Sylvester que aparecen en el Algoritmo 3.12. Esto afecta al número de condición de la matriz Y y a la estabilidad numérica del proceso de diagonalización por bloques de la matriz S . Esto es debido a que el error relativo de la ~ solución Z obtenida al resolver la ecuación matricial de Sylvester ( 3.14 ) S ii Z − ZS jj = − S ij , satisface que ( 3.15 ) ~ || Z − Z || F || S || F ≅u ([GoNV79]), || Z || F sep( S ii , S jj ) siendo 111 Capítulo 3: Cálculo de Funciones de Matrices sep( S ii , S jj ) = min X ≠0 || S ii X − XS jj || F || X || F ([Varah79]), la separación que existe entre los bloques diagonales S ii y S jj , y u el error de redondeo unidad ([GoVa96], página 61). Si los conjuntos λ ( S ii ) y λ ( S jj ) están muy cercanos, entonces se pueden producir grandes errores en la obtención de la diagonalización por bloques, puesto que al cumplirse que sep( S ii , S jj ) = min || S ii X − XS jj || F || X || F X ≠0 ≤ min | λ − µ | , λ∈λ (Tii ) µ∈λ (T jj ) se tiene que sep( S ii , S jj ) puede ser pequeña, por lo que si Z ij es la solución de la ecuación ( 3.14 ), entonces Z ij tendrá una gran norma, con lo que la matriz Y estará mal condicionada por ser el producto de matrices de la forma ⎡ I Z ij ⎤ Yij = ⎢ ⎥. ⎣0 I ⎦ Puesto que en la forma real de Schur de una matriz A los valores propios cercanos no están necesariamente en el mismo bloque diagonal, es necesario reordenar los bloques diagonales 1x1 o 2x2 mediante transformaciones de semejanza ([NgPa87]) de manera que los valores propios cercanos estén agrupados. De este modo, la separación entre bloques será suficientemente grande con la consiguiente disminución del error cometido. El siguiente algoritmo calcula funciones de matrices mediante la diagonalización a bloques de una matriz. B = dgefunsbd ( f , A) . Entrada: Función f (x) , matriz A ∈ ℜ nxn . Salida: Matriz B = f ( A) ∈ ℜ nxn . 2 3 [Q, S ] = schur ( A) (obtiene las matrices Q y S de la descomposición real de Schur de la matriz A ) [Q, S ] = dlasbd (Q, S ) (Algoritmo 3.12) Calcular F = diag( f ( S11 ),L, f ( S pp )) 4 Calcular B = QFQ −1 1 Algoritmo 3.13: Cálculo de funciones de matrices basado en la descomposición real de Schur de una matriz y en la forma diagonal a bloques. 3.3.3 Algoritmos Basados en la Resolución de la Ecuación Conmutante En este apartado se describen varios algoritmos basados en la descomposición real de Schur de una matriz y en la ecuación conmutante. 112 Capítulo 3: Cálculo de Funciones de Matrices 3.3.3.1 Algoritmos Orientados a Columnas y a Diagonales Sea ⎡ S11 ⎢0 ( 3.16 ) S = ⎢ ⎢ M ⎢ ⎣0 S12 L S1m ⎤ S 22 L S 2 m ⎥⎥ ∈ ℜ nxn , S jj ∈ ℜ ó S jj ∈ ℜ 2 x 2 , j = 1,2, L , m , M O M ⎥ ⎥ 0 L S mm ⎦ la forma real de Schur de la matriz A y ⎡ F11 ⎢0 ( 3.17 ) F = f ( S ) = ⎢ ⎢ M ⎢ ⎣0 F12 L F1m ⎤ F22 L F2 m ⎥⎥ ∈ ℜ nxn , F jj ∈ ℜ ó F jj ∈ ℜ 2 x 2 , j = 1,2, L , m , M O M ⎥ ⎥ 0 L Fmm ⎦ con igual estructura por bloques que la matriz S . Teniendo en cuenta que las matrices S y F conmutan (Propiedad 2.1), se tienen que los bloques diagonales F jj , j = 1,2,L, m , se pueden calcular mediante la expresión F jj = f ( S jj ) , ( 3.18 ) y el resto de bloques Fij , 1 ≤ i < j ≤ n , resolviendo las ecuaciones matriciales de Sylvester j −1 ( 3.19 ) Sii Fij − Fij S jj = ∑ Fik S kj − k =i j ∑S k = i +1 ik Fkj . Para calcular el bloque Fij es necesario haber calculado previamente los bloques que se encuentran a su izquierda y debajo de él, tal como se indica en la siguiente figura. F Fij Fik, i ≤k<j Fkj, i<k≤j Figura 3.1: Dependencia de datos en el cálculo de Fij , 1 ≤ i < j ≤ m . En los algoritmos orientados a columnas, filas o diagonales es necesario determinar los bloques diagonales de orden 2x 2 de la matriz F , correspondientes a valores propios conjugados de la matriz S (expresión ( 3.18)). A continuación se describe un método 113 Capítulo 3: Cálculo de Funciones de Matrices descrito en [Ibañ97] que permite calcular la matriz F jj = f ( S jj ) , siendo S jj un bloque diagonal de orden 2x 2 . Sea ⎡ s k ,k S jj = ⎢ ⎣ sk +1,k sk ,k +1 ⎤ , sk +1,k +1 ⎥⎦ y ⎡ f k ,k F jj = ⎢ ⎣ f k +1,k f k ,k +1 ⎤ = f k +1,k +1 ⎥⎦ ⎛ ⎡ s k ,k f ⎜⎢ ⎜ sk +1,k ⎝⎣ sk ,k +1 ⎤ ⎞ ⎟ sk +1,k +1 ⎥⎦ ⎟⎠ el correspondiente bloque de la matriz F . Sin pérdida de generalidad, se puede suponer que los bloques diagonales 2x 2 tienen los elementos diagonales iguales y los no diagonales de igual valor absoluto pero con distinto signo (véase la función schur de MATLAB y la rutina dgees de LAPACK), es decir, sk +1,k +1 = sk ,k , | sk +1,k |=| sk ,k +1 | , sk +1,k sk ,k +1 < 0 . Si se definen a ≡ sk ,k , b ≡ sk ,k +1 , c ≡ sk +1,k y se considera la descomposición en valores propios ⎡a b ⎤ ⎡ bc ⎢c a⎥ = ⎢ ⎣ ⎦ ⎣ c −1 b ⎤ ⎡ z 0 ⎤ ⎡ bc ⎥ ⎢ ⎥⎢ − bc ⎦ ⎣0 z ⎦ ⎣ c b ⎤ ⎥, − bc ⎦ donde z = a + bc y z el complejo conjugado de z , entonces se cumple que ⎡ f k ,k ⎢f ⎣ k +1,k f k ,k +1 ⎤ = f k +1,k +1 ⎥⎦ ⎛ ⎡a b ⎤ ⎞ ⎡ bc f ⎜⎜ ⎢ ⎥ ⎟⎟ = ⎢ ⎝ ⎣c a⎦ ⎠ ⎣ c −1 b ⎤ ⎛ ⎡ z 0 ⎤ ⎞ ⎡ bc ⎥ f ⎜⎢ ⎥ ⎟⎢ − bc ⎦ ⎜⎝ ⎣0 z ⎦ ⎟⎠ ⎣ c b ⎤ ⎥ − bc ⎦ y ⎛ ⎡ z 0⎤ ⎞ ⎡ f ( z ) f ⎜⎜ ⎢ ⎥ ⎟⎟ = ⎢ ⎝ ⎣0 z ⎦ ⎠ ⎣ 0 0 ⎤ ⎡ f ( z) = f ( z )⎥⎦ ⎢⎣ 0 0 ⎤ . f ( z )⎥⎦ Luego ⎡ f k ,k ⎢f ⎣ k +1,k ( 3.20 ) ⎡ f k ,k ⎢f ⎣ k +1,k f k ,k +1 ⎤ 1 ⎡ bc = ⎢ f k +1,k +1 ⎥⎦ bc ⎣ c b ⎤ ⎡ f ( z) ⎥⎢ − bc ⎦ ⎣ 0 0 ⎤ ⎡ bc ⎢ f ( z )⎥⎦ ⎣ c b ⎤ ⎥, − bc ⎦ 1 ⎡ ⎤ − Re( f ( z )) | bc | Im( f ( z ))⎥ f k ,k +1 ⎤ ⎢ c = ⎥. f k +1,k +1 ⎥⎦ ⎢⎢ 1 ⎥ − | bc | Im( f ( z )) Re( f ( z )) ⎣ b ⎦ Para determinar los bloques no diagonales de la matriz F que aparecen en los algoritmos orientados a columnas y diagonales que se presentan en este subapartado, es necesario resolver ecuaciones matriciales casi triangulares superiores de Sylvester. Estas 114 Capítulo 3: Cálculo de Funciones de Matrices ecuaciones se pueden resolver mediante el método que se presenta a continuación. Sea la ecuación matricial de Sylvester AX − XB = C , ( 3.21 ) donde ⎡ A11 ⎢0 A=⎢ ⎢ M ⎢ ⎣0 Aij ∈ ℜ mi xm j A1r ⎤ L A2 r ⎥⎥ ∈ ℜ mxm , O M ⎥ ⎥ L Arr ⎦ A12 L A22 M 0 , para i, j = 1,L, r , y mi y m j iguales a 1 o 2; y ⎡ B11 ⎢0 B=⎢ ⎢ M ⎢ ⎣0 Bij ∈ ℜ ni xn j B12 L B1s ⎤ B22 L B2 s ⎥⎥ ∈ ℜ nxn , ⎥ M O M ⎥ 0 L Bss ⎦ , para i, j = 1, L , s , y ni y n j iguales a 1 o 2; y C ∈ ℜ mxn . Las matrices C y X se dividen en rxs bloques de tamaños 1x1 o 2x2 de acuerdo a la división por bloques de las matrices A y B , ⎡C11 C12 ⎢C C22 C = ⎢ 21 ⎢ M M ⎢ ⎣ C r 1 Cr 2 ⎡ X 11 ⎢X X = ⎢ 21 ⎢ M ⎢ ⎣ X r1 siendo Cij , X ij ∈ ℜ mi xn j L C1s ⎤ L C2 s ⎥⎥ , O M ⎥ ⎥ L Crs ⎦ X 12 L X 1s ⎤ X 22 L X 2 s ⎥⎥ , M O M ⎥ ⎥ X r 2 L X rs ⎦ , para i = 1, L , s , j = 1, L , r . El bloque X ij se puede obtener igualando los bloques (i, j ) de la ecuación ( 3.21 ) tal y como se muestra a continuación. r s k =1 k =1 r j k =i k =1 ∑ Aik X kj + ∑ X ik Bkj = Cij , ∑ Aik X kj + ∑ X ik Bkj = Cij , Aii X ij + r j −1 k =i +1 k =1 ∑ Aik X kj + X ij B jj + ∑ X ik Bkj = Cij , 115 Capítulo 3: Cálculo de Funciones de Matrices Aii X ij + X ij B jj = Cij − ( 3.22 ) r j −1 k =i +1 k =1 ∑ Aik X kj − ∑ X ik Bkj . Aplicando la función vec , se tiene j −1 r ⎛ ⎞ ⎜ vec( Aii X ij + X ij B jj ) = vec⎜ Cij − ∑ Aik X kj − ∑ X ik Bkj ⎟⎟ , k =i +1 k =1 ⎝ ⎠ j −1 r ⎛ ⎞ ( I j ⊗ Aii + B Tjj ⊗ I i )vec( X ij ) = vec⎜⎜ Cij − ∑ Aik X kj − ∑ X ik Bkj ⎟⎟ , k =i +1 k =1 ⎝ ⎠ ( 3.23 ) donde I i e I j representan las matrices identidad de dimensiones, respectivamente, iguales a las de las matrices Aii y B jj . Basta resolver la ecuación ( 3.23 ) y calcular X ij como X ij = mat mi xn j ( vec( X ij )) . A continuación se muestra el algoritmo que resuelve la ecuación casi triangular de Sylvester ( 3.21 ). X = dtrsyl ( A, B, C ) . Entradas: Matrices casi triangulares superiores A ∈ ℜ mxm y B ∈ ℜ nxn , matriz C ∈ ℜ mxn . Salida: Matriz X ∈ ℜ mxn solución de la ecuación matricial casi triangular de Sylvester AX + XB = C . 1 Dividir la matriz A en r × r bloques de tamaños 1x1 o 2x2 en función de que los valores propios sean reales o complejos conjugados: A = [ Aij ] , ( Aij ∈ ℜ o Aij ∈ ℜ 2 x 2 ) 2 Dividir la matriz B en s × s bloques de tamaños 1x1 o 2x2 en función de que los valores propios sean reales o complejos conjugados: B = [ Bij ] , ( Bij ∈ ℜ o Bij ∈ ℜ 2 x 2 ) 3 Dividir la matriz C y X en r × s bloques de tamaños 1x1 o 2x2 en función de la división por bloques de las matrices A y B : C = [Cij ] , X = [ X ij ] 4 Para i = r : −1 : 1 4.1 Para j = 1 : s 4.1.1 Cij = Cij − r j −1 k =i +1 k =1 ∑ Aik X kj − ∑ X ik Bkj 4.1.2 cij = vec(Cij ) 4.1.3 M ij = I j ⊗ Aii + B Tjj ⊗ I i 4.1.4 Calcular xij resolviendo la ecuación Mxij = cij 4.1.5 X ij = mat mi xn j ( xij ) Algoritmo 3.14: Resolución de la ecuación casi triangular de Sylvester. 116 Capítulo 3: Cálculo de Funciones de Matrices El coste computacional aproximado del algoritmo anterior está comprendido entre 1 2 (mn 2 + m 2 n) y (mn 2 + m 2 n) flops. 2 3 3.3.3.1.1 Algoritmo Orientado a Columnas En este algoritmo se calcula, en primer lugar, el bloque diagonal de la primera columna, continuando con los bloques que se encuentran en los sucesivos bloques de columnas. Para cada bloque de columnas se calcula, en primer lugar, el bloque diagonal y, a continuación, los bloques que se encuentran por encima en sentido ascendente tal como se indica en la siguiente figura. F Figura 3.2: Orden de cálculo de los bloques de la matriz F . Los bloques de la diagonal principal se obtienen a partir de la expresión ( 3.18 ) y el resto de los bloques resolviendo la ecuación matricial de Sylvester ( 3.19 ). Para este algoritmo se puede, o bien calcular el miembro de la derecha en el momento en que se va a resolver la ecuación matricial de Sylvester, o bien haberlo calculado previamente. En el algoritmo que se presenta a continuación se ha elegido la primera estrategia. F = dqtfunscc(S ) . Entradas: Matriz casi triangular superior S ∈ ℜ nxn . Salida: 1 2 Matriz casi triangular superior F = f ( S ) ∈ ℜ nxn . Dividir la matriz S en mxm bloques, de manera que los bloques diagonales sean 1x1 o 2x 2 , correspondientes a valores propios reales o complejos conjugados, respectivamente. Para j = 1 : m 2.1 F jj = f ( S jj ) 2.2 Para i = j − 1 : −1 : 1 j −1 2.2.1 Fij = ∑ Fik S kj − k =i 2.2.2 j ∑S k = i +1 ik Fkj Fij = dtrsyl ( Sii ,− S jj , Fij ) (Algoritmo 3.14) Algoritmo 3.15: Cálculo de la función de una matriz casi triangular superior basado en la resolución de la ecuación conmutante orientado a columnas. 117 Capítulo 3: Cálculo de Funciones de Matrices El coste computacional aproximado del algoritmo anterior se encuentra entre n3 n 2 n3 + flops. + n2 y 3 2 2 3.3.3.1.2 Algoritmo Orientado a Diagonales En este caso los bloques se calculan por diagonales. Se comienza con la diagonal principal y se continúa con las diagonales que se encuentran encima de ella. Para cada diagonal los bloques se calculan de arriba hacia abajo. F 1 2 3 4 5 Figura 3.3: Orden de cálculo de los bloques de la matriz F . Los bloques de la diagonal principal se calculan utilizando la expresión ( 3.18 ). Los bloques del resto de las diagonales se calculan mediante la resolución de la ecuación matricial de Sylvester ( 3.19 ). Al igual que en el caso anterior, se puede, o bien calcular el miembro de la derecha en el momento en que se va a resolver la ecuación matricial de Sylvester, o haberlo calculado previamente. En el algoritmo que se presenta a continuación se ha elegido esa segunda estrategia. En la siguiente figura se muestra el bloque que se ha calculado y los bloques que se actualizan a partir de él. F Fij Fik, j<k≤m Fkj, 1≤k<i Figura 3.4: Bloques Fik y Fkj que se actualizan a partir de Fij . A continuación se presenta el algoritmo que calcula funciones de matrices casi triangulares superiores basado en la resolución de la ecuación conmutante orientada a diagonales. 118 Capítulo 3: Cálculo de Funciones de Matrices F = dqtfunscd (S ) . Entradas: Matriz casi triangular superior S ∈ ℜ nxn . Salida: 1 2 Matriz casi triangular superior F = f ( S ) ∈ ℜ nxn . Dividir la matriz S en mxm bloques, de manera que los bloques diagonales sean 1x1 o 2x 2 , correspondientes a valores propios reales o complejos conjugados, respectivamente. Para k = 1 : m 2.1 Para j = k : m 2.1.1 i = j − k + 1 2.1.2 Si k > 1 2.1.2.1 Fij = dtrsyl ( Sii ,− S jj , Fij ) (Algoritmo 3.14) 2.1.3 Si no 2.1.3.1 F jj = f ( S jj ) 2.1.4 Actualizar los bloques F1 j , L , Fi −1 j 2.1.5 Actualizar los bloques Fij +1 ,L , Fim Algoritmo 3.16: Cálculo de la función de una matriz casi triangular superior basado en la resolución de la ecuación conmutante orientado a diagonales. El coste computacional aproximado del algoritmo anterior se encuentra entre n3 n 2 n3 + y + n 2 flops. 2 2 3 3.3.3.2 Algoritmos Orientados a Bloques Sea r el tamaño de bloque elegido. Debido a la presencia de elementos subdiagonales no nulos en la forma real de Schur de la matriz S , los tamaños de los bloques diagonales no serán uniformes; es decir, los bloques diagonales de la matriz S podrán tener dimensiones rxr o (r + 1) x(r + 1) , salvo el bloque diagonal situado en la última fila y columna de bloques que puede tener una dimensión distinta, como resultado del encaje final de la división por bloques con la dimensión de la matriz inicial. El resto de bloques de S se obtienen dividiendo la matriz en bloques rectangulares de acuerdo a los bloques diagonales; de este modo, la matriz S queda dividida sxs bloques. Para la matriz F se utiliza la misma estructura de bloques. Si se identifican los bloques diagonales en la ecuación FS = SF , se obtiene F jj = f ( S jj ) , j = 1,2,L, s . Esta ecuación puede resolverse utilizando cualquiera de los algoritmos comentados anteriormente (orientados a columnas u orientados a diagonales). Los bloques no diagonales se obtienen resolviendo la ecuación casi triangular superior de Sylvester j −1 S ii Fij − S ij T jj = ∑ Fik S kj − k =i j ∑S k =i +1 ik Fkj . 119 Capítulo 3: Cálculo de Funciones de Matrices Razonando como en el subapartado anterior, se pueden deducir varios algoritmos: orientados a filas, orientados a columnas y orientados a diagonales. A continuación se presenta el algoritmo orientado a columnas de bloques. F = dqtfunscb(r , S ) . Entradas: Tamaño de bloque r ∈ Z + , matriz casi triangular superior S ∈ ℜ nxn . Salida: 1 2 Matriz casi triangular superior F = f ( S ) ∈ ℜ nxn . Dividir S y F en sxs bloques de tamaños rxr o (r + 1) x(r + 1) (salvo los bloques S ss y Fss que tendrán las dimensiones adecuadas) Para j = 1 : s 2.1 F jj = dqtfunsc( S jj ) (Algoritmo 3.15) 2.2 Para i = j − 1 : −1 : 1 j −1 2.2.1 Fij = ∑ Fik S kj − k =i 2.2.2 j ∑S k = i +1 ik Fkj Fij = dtrsyl ( Sii ,− S jj , Fij ) (Algoritmo 3.14) Algoritmo 3.17: Calcula la función de una matriz casi triangular superior mediante la resolución de la ecuación conmutante orientado a columnas de bloques. El coste computacional aproximado del algoritmo anterior es ⎛ 2 1⎞ 3 ⎜ + ⎟n flops. ⎝3 s⎠ El algoritmo orientado a diagonales de bloques se presenta a continuación. F = dqtfunsdb(S ) . Entradas: Tamaño de bloque r ∈ Z + , matriz casi triangular superior S ∈ ℜ nxn . Salida: 1 2 Matriz casi triangular superior F = f ( S ) ∈ ℜ nxn . Dividir S y F en sxs bloques de tamaños rxr o (r + 1) x(r + 1) (salvo los bloques S ss y Fss que tendrán las dimensiones adecuadas) Para k = 1 : s 2.1 Para j = k : s 2.1.1 i = j − k + 1 2.1.2 Si k > 1 2.1.2.1 Fij = dtrsyl ( Sii ,− S jj , Fij ) (Algoritmo 3.14) 2.1.3 Si no 2.1.3.1 Fjj = dtrfunsc ( S jj ) (Algoritmo 3.15) 2.1.4 Actualizar los bloques F1 j ,L, Fi −1 j 2.1.5 Actualizar los bloques Fij +1 ,L, Fis Algoritmo 3.18: Algoritmo para el cálculo de la función de una matriz casi triangular superior basado en la resolución de la ecuación conmutante orientado a diagonales de bloques. 120 Capítulo 3: Cálculo de Funciones de Matrices El coste computacional aproximado del algoritmo anterior es ⎛ 2 1⎞ 3 ⎜ + ⎟n flops. ⎝3 s⎠ 3.3.3.3 Algoritmo con Agrupación de Valores Propios Cercanos En este subapartado se describe el algoritmo que consiste en agrupar en clusters los valores propios cercanos de la forma real de Schur de una matriz, realizando a continuación las reordenaciones necesarias de manera que la matriz obtenida quede dividida en bloques, estando los valores del mismo cluster en el mismo bloque diagonal. A partir de ahí, se pueden utilizar estrategias similares a las utilizadas en los algoritmos a bloques descritos en el subapartado 3.3.3.2. El siguiente algoritmo determina un vector g que contiene los índices de comienzo de los bloques diagonales de la forma real de Schur S de la matriz A ∈ ℜ nxn . g = dlagbs (vr , vi) Entradas: Vectores vr , vi ∈ ℜ n que contienen, respectivamente, la parte real y la parte imaginaria de los valores propios de la forma real de Schur S ∈ ℜ nxn de la matriz A ∈ ℜ nxn . Salida: 1 2 3 4 5 Vector g ∈ ℜm que contiene los índices de los bloques 1x1 o 2x2 de la matriz S . m=0 i1 = 1 i2 = i1 + 1 Mientras i1 ≤ n m = m +1 4.1 g (m) = i1 4.2 4.3 Si vi(i2 ) ≠ 0 4.3.1 i1 = i2 + 1 4.4 Si no 4.4.1 i1 = i2 4.5 i1 = i2 + 1 Si i1 ≤ n m = m +1 5.1 5.2 g (m) = i1 Algoritmo 3.19: Determina los bloques diagonales de la forma real de Schur de una matriz. Una vez se conoce el vector g , se deben determinar los clusters de valores propios. Estas agrupaciones en clusters se realizan de manera que dos valores propios se encuentran en el mismo cluster, siempre que disten entre sí un valor menor que un valor de tolerancia predefinido, no necesariamente pequeño. En el siguiente algoritmo se 121 Capítulo 3: Cálculo de Funciones de Matrices determina un vector de enteros positivos c ∈ Z p de manera que c(k ) , 1 ≤ k ≤ p , indica a qué cluster pertenece el grupo de valores propios definidos por g (k ) . c = dlagc(vr , vi, g , tol ) . Entradas: Vectores vr , vi ∈ ℜn que contienen, respectivamente, la parte real y la parte imaginaria de los valores propios de la matriz casi triangular superior S ∈ ℜnxn , vector g ∈ ℜm que contiene los índices de los bloques de la expresión ( 6.2 ) y la tolerancia tol ∈ ℜ + . Salida: 1 2 Vector de enteros positivos c ∈ Z p que contiene los índices de los clusters. p=0 Para k = 1 : m 2.1 Si c(k ) = 0 2.1.1 p = p + 1 2.1.2 c(k ) = p 2.2 vk = vr ( g (k )) + abs(vi( g (k ))i 2.3 Para j = k + 1 : m 2.3.1 vj = vr ( g ( j )) + abs(vi( g ( j ))i 2.3.2 Si abs(vk − vj ) < tol 2.3.2.1 c( j ) = c(k ) Algoritmo 3.20: Determina los cluster de la forma real de Schur de una matriz. Conocida la división en clusters de los valores propios de la matriz S , se realizan los intercambios necesarios de bloques diagonales de manera que los valores propios con el mismo índice de cluster se encuentren en el mismo bloque diagonal. Estos intercambios se realizan utilizando transformaciones de semejanza ortogonales. Al final de este proceso se obtiene una matriz S , divida en bloques conforme a la división en clusters de los valores propios de S , y una matriz ortogonal Q de modo que S = Q S Q T . El siguiente algoritmo lleva a cabo el proceso descrito en el párrafo anterior. 122 Capítulo 3: Cálculo de Funciones de Matrices [ S , Q , g , c] = dlabex( S , Q, g , c) . Entradas: Matriz casi triangular superior S ∈ ℜnxn , matriz ortogonal Q ∈ ℜ nxn , vector g ∈ ℜm que contiene los índices de los bloques de la matriz S , vector c ∈ ℜ p que contiene los índices de los clusters. Salidas: Matriz casi triangular superior S ∈ ℜnxn con los bloques diagonales correspondientes a valores propios en el mismo cluster, matriz ortogonal Q ∈ ℜ nxn ( S = Q S Q T ), vector g ∈ ℜm que contiene los índices de los bloques de la matriz S , vector c ∈ ℜ p que contiene los índices de los clusters de la matriz S . 1. 2. 3. 4. 5 6 S =S Q = In cont = true Mientras cont cont = false 4.1 4.2 Para k = 1 : m − 1 4.2.1 Si c(k ) > c(k + 1) 4.2.1.1 Intercambiar los bloques diagonales de la matriz S apuntados por g (k ) y g (k + 1) actualizando adecuadamente la matriz Q y el vector g 4.2.1.2 caux = c(k ) 4.2.1.3 c(k ) = c(k + 1) 4.2.1.4 c(k + 1) = caux 4.2.1.5 cont = true k =1 Para j = 2 : m 6.1 Si c( j ) ≠ c(k ) 6.1.1 k = k + 1 6.1.2 g (k ) = g ( j ) 6.1.3 c(k ) = c( j ) Algoritmo 3.21: Reordenación de la forma real de Schur para la agrupación en clusters de los valores propios cercanos. Una vez se han determinado S y Q se aplica un esquema semejante al utilizado en el Algoritmo 3.17 o en el Algoritmo 3.18. A continuación se presenta el algoritmo completo. 123 Capítulo 3: Cálculo de Funciones de Matrices [ F , Q] = dqtfunscc( S , Q, f , tol ) . Entradas: Matriz casi triangular superior S ∈ ℜnxn y matriz ortogonal Q ∈ ℜ nxn procedentes de descomposición real de Schur de la matriz A ∈ ℜ nxn , función f ( z ) , tolerancia tol ∈ ℜ + . Salida: Matriz casi triangular superior F = f ( S ) ∈ ℜnxn , matriz ortogonal actualizada Q ∈ ℜ nxn . 1 2 3 4 g = dlagbs(vr , vi) (Algoritmo 3.19) c = dlagc(vr , vi, g , tol ) (Algoritmo 3.20) [ S , Q, g , c] = dlabex( S , Q, g , c) (Algoritmo 3.21) Para k = 1 : p 4.1 Para j = k : p 4.1.1 i = j − k + 1 4.1.2 Si k > 1 4.1.2.1 Fij = dtrsyl ( Sii ,− S jj , Fij ) (Algoritmo 3.14) 4.1.3 Si no 4.1.3.1 Calcular F jj = f ( S jj ) (se puede utilizar, por ejemplo, cualquier algoritmo basado en los aproximantes diagonales de Padé) 4.1.4 Actualizar los bloques F1 j ,L, Fi −1 j 4.1.5 Actualizar los bloques Fij +1 ,L, Fip Algoritmo 3.22: Calcula funciones de matrices mediante la agrupación en cluster de los valores propios cercanos de un matriz. El coste computacional depende del número de reordenaciones realizadas. Si no hubiese reordenaciones, el coste computacional coincidiría con el correspondiente al algoritmo orientado a bloques. 3.3.4 Algoritmo Basado en los Aproximantes Diagonales de Padé Este método consiste en calcular f ( S ) mediante una variante del método de los aproximantes diagonales de Padé para matrices casi triangulares superiores. El algoritmo resultante se presenta a continuación. 124 Capítulo 3: Cálculo de Funciones de Matrices B = dqtfunspp ( A) . Entrada: Matriz A ∈ ℜ nxn y función f (x) . Salida: 1 2 3 Matriz B = f ( A) ∈ ℜ nxn . [Q, S ] = schur ( A) (obtiene la matriz casi triangular superior S ∈ ℜnxn y matriz ortogonal Q ∈ ℜ nxn procedentes de descomposición real de Schur de la matriz A ∈ ℜ nxn ) F = f ( S ) (se puede utilizar, por ejemplo, cualquier algoritmo basado en los aproximantes diagonales de Padé adaptado a matrices casi triangulares superiores) B = QFQT Algoritmo 3.23: Algoritmo para el cálculo de funciones de matrices basado en la descomposición real de Schur de una matriz y en los aproximantes diagonales de Padé. 3.4 Conclusiones La primera aportación de este capítulo es la implementación de un algoritmo general, basado en los aproximantes diagonales de Padé, que permite calcular funciones analíticas de matrices. Aunque hay dos etapas que dependen de la función y de la matriz considerada (reducción de la norma de la matriz y aplicación de las transformaciones inversas), siempre es posible utilizar estrategias que lo permitan; por ejemplo, el escalado y potenciación para las exponenciales, escalado para las funciones logarítmicas y con radicales, etc. Basta conocer el desarrollo en serie de Taylor de la función, para así determinar la aproximación diagonal de Padé y de ahí calcular la función matricial correspondiente. Esto permite aplicar el método de los aproximantes diagonales de Padé a otras funciones matriciales distintas de las mencionadas en el Capítulo 2. Por ejemplo, se ha presentado una forma de calcular potencias fraccionarias de una matriz basada en los aproximantes diagonales de Padé. También se ha demostrado una fórmula que permite calcular el seno de una matriz mediante un nuevo algoritmo basado en los aproximantes diagonales de Padé. La segunda aportación de este capítulo ha sido el diseño de varios algoritmos para el cálculo de Funciones de Matrices basados en la forma real de Schur S de una matriz cuadrada. Las estrategias utilizadas han sido: 1. Diagonalización a bloques de la matriz. Consiste en obtener una forma diagonal a bloques de la matriz A de manera que cada bloque contiene a los valores propios que se encuentran próximos entre sí. En este caso el valor F = f ( A) se obtiene a partir del valor de la función sobre su forma diagonal a bloques. 2. Ecuación Conmutante. a. Sin agrupación de valores propios. Algoritmo orientado a columnas: De izquierda a derecha, se obtienen sucesivamente las columnas de bloques de la matriz F . Para cada columna se calcula, en primer lugar, el bloque diagonal F jj utilizando la expresión 125 Capítulo 3: Cálculo de Funciones de Matrices F jj = f ( S jj ) , continuando con los bloques que se encuentran por encima de F jj , resolviendo para ello ecuaciones matriciales de Sylvester. Algoritmo orientado a filas: De abajo hacia arriba, se obtienen sucesivamente las filas de bloques de la matriz F . Para cada fila de bloques se calcula, en primer lugar, el bloque diagonal F jj utilizando la expresión F jj = f ( S jj ) , continuando con los bloques que se encuentran a la derecha de F jj , resolviendo para ello ecuaciones matriciales de Sylvester. Algoritmo orientado a diagonales: En primer lugar se determinan los bloques diagonales F jj utilizando la expresión F jj = f ( S jj ) , calculando a continuación las superdiagonales de abajo hacia arriba resolviendo para ello ecuaciones matriciales de Sylvester. Algoritmos orientados a bloques: A partir de un tamaño dado r , la matriz S se divide en bloques de manera que los valores propios conjugados se deben encontrar en el mismo bloque diagonal. De este modo, los bloques diagonales son de tamaño rxr o (r + 1) x(r + 1) , salvo el último bloque que tendrá la dimensión adecuada. A continuación se obtienen los bloques diagonales F jj = f ( S jj ) utilizando para ello otros algoritmos para el cálculo de Funciones de Matrices como, por ejemplo, los aproximantes de Padé o los algoritmos orientados a columnas o diagonales. Según la forma de calcular los bloques de la matriz F , se pueden utilizar tres algoritmos: algoritmo orientado a columnas de bloques, algoritmo orientado a filas de bloques y algoritmo orientado a diagonales de bloques. b. Con agrupación de valores propios. En aquellas ocasiones en que la matriz S tiene valores propios cercanos entre sí, es conveniente agruparlos de manera que la resolución de la Ecuación Conmutante se realice con precisión. Para ello se deben realizar reordenaciones en la matriz S , utilizando transformaciones ortogonales de semejanza, de manera que los valores propios cercanos se encuentren en un mismo bloque diagonal. De este modo, la matriz S se puede estructurar por bloques de manera que los bloques diagonales se encuentren suficientemente separados entre sí. Estas agrupaciones se deben realizar teniendo en cuenta que el maximizar la separación entre los bloques diagonales puede conducir a obtener grandes bloques con valores propios cercanos, con el consiguiente aumento de las reordenaciones de los valores propios sobre la diagonal de S . Una vez se ha realizado la división en bloques de la matriz S , los bloques diagonales F jj = f ( S jj ) se pueden calcular utilizando, por ejemplo, los algoritmos basados en la aproximación diagonal de Padé. Según el orden utilizado en el cálculo de bloques, se pueden obtener tres algoritmos: algoritmo orientado a columnas de bloques, algoritmo orientado a filas de bloques o algoritmo orientado a diagonales de bloques. 3. Aproximantes de Padé Este método consiste en calcular f (S ) mediante una variante del método de los aproximantes diagonales de Padé para matrices casi triangulares superiores. 126 Capítulo 3: Cálculo de Funciones de Matrices Los algoritmos basados en la descomposición real de Schur de una matriz son computacionalmente más costosos que los basados en los aproximantes diagonales de Padé, aunque en muchas ocasiones son más precisos que estos últimos. A continuación se comparan los algoritmos basados en la descomposición real de Schur de una matriz. • Aunque los algoritmos orientados a filas y a columnas tienen una formulación similar, la forma de acceder a los datos es distinta. Como cabe esperar ([Ibañ97]), si se utiliza el lenguaje de programación FORTRAN se obtienen mejores prestaciones al utilizar un algoritmo orientado a columnas, y si el lenguaje utilizado es C las mejores prestaciones se obtienen un algoritmo orientado a filas. En este capítulo se han descrito únicamente los algoritmos orientados a columnas puesto que en las implementaciones se ha utilizado el lenguaje FORTRAN. • Los algoritmos orientados a bloques resultan ser habitualmente más eficientes que los orientados a filas o columnas, pues hacen uso de la memoria caché de los ordenadores. De este modo, si se elige convenientemente el tamaño de bloque, se produce una mayor localidad de datos y, por tanto, un menor intercambio de datos entre la memoria principal y la memoria secundaria. • Los algoritmos con un menor coste computacional corresponden a los basados en la Ecuación Conmutante sin reordenación de valores propios y al basado en los aproximantes diagonales de Padé. El problema de los primeros es que no se pueden utilizar si la matriz tiene valores propios cercanos. Para el segundo método es necesario adaptar, convenientemente, los algoritmos basados en las aproximaciones de Padé para el caso de matrices casi triangulares superiores. 3. Los algoritmos que tienen un mayor coste computacional corresponden al basado en diagonalización a bloques de la matriz y al basado en la Ecuación Conmutante con agrupación en clusters de los valores propios. La ventaja de estos algoritmos, frente al resto de los algoritmos basados en la Ecuación Conmutante, es que se pueden aplicar para cualquier matriz incluso si sus valores propios están muy próximos entre sí. 127 Capítulo 4: Linealización a Trozos Capítulo 4 Linealización a Trozos 4.1 Resumen de Contenidos En la formulación de modelos de muchos problemas científicos y técnicos aparecen EDOs cuya solución analítica no es conocida. Es por ello que la comunidad investigadora asociada a este campo viene realizando, desde hace tiempo, un gran esfuerzo en el estudio de métodos numéricos que permitan la resolución aproximada de las mismas. En los últimos años un gran número de libros y artículos se han ocupado del estudio de métodos numéricos para la integración de EDOs, especialmente las de tipo rígido. Los más usados en la práctica son los de tipo implícito, especialmente los basados en métodos lineales multipaso, como por ejemplo los métodos Backward Differentiation Formulae (BDF),[HaWa96], por ser muy eficientes para un gran número de problemas de tipo rígido. La Ecuación Diferencial Matricial de Riccati (EDMR) aparece frecuentemente en las ciencias aplicadas y en la ingeniería. Esta ecuación juega un papel fundamental en problemas de control óptimo, filtrado, estimación, y en la resolución de ciertos problemas de contorno de ecuaciones diferenciales. Una de las técnicas, ampliamente utilizadas para resolver dicha ecuación, consiste en aplicar el método BDF. Este método está especialmente indicado para resolver EDMRs de tipo rígido. Otro de los métodos que se pueden aplicar en la resolución de EDMRs consiste en la vectorización de ecuaciones diferenciales matriciales que consiste en convertir una EDMR en otra de tipo vectorial y aplicar un método de resolución de EDOs. El problema que se plantea en este caso es la gran dimensión de la EDO vectorial obtenida. En este capítulo se describen nuevos métodos para la resolución de EDOs y EDMRs. En esta tesis se ha optado por profundizar en la metodología basada en la linealización a trozos para el desarrollo de nuevos algoritmos que sean competitivos, en términos computacionales, frente a otros que se han venido utilizando tradicionalmente En el caso de EDOs se demuestra un nuevo teorema (Teorema 4.1) que permite utilizar la técnica de linealización a trozos, aunque la matriz Jacobiana sea singular. Como consecuencia de este teorema se desarrollan tres nuevos métodos: método basado en los aproximantes diagonales de Padé, método basado en la Ecuación Conmutante y método basado en los subespacios de Krylov. En el caso de EDMRs se ha desarrollado una nueva metodología, no realizada hasta ahora, basada en la técnica de linealización a trozos. Esta metodología consiste, básicamente, en transformar la EDMR en una EDO de gran dimensión y aplicarle la linealización a trozos. Debido a la gran complejidad computacional y la gran cantidad de memoria necesaria, se han desarrollado métodos especiales para la resolución de la EDO anterior. El primero de ellos está basado en un un nuevo teorema (Teorema 4.3) que permite transformar un problema vectorial de gran dimensión en otro matricial consistente en el cálculo de una expresión en la que aparecen bloques de las exponenciales de dos 129 Capítulo 4: Linealización a Trozos matrices. Adaptando convenientemente el método de los aproximantes de Padé para matrices definidas a bloques, se obtiene un algoritmo eficiente en términos de costes computacionales y de almacenamiento. El segundo método es consecuencia de un teorema basado en la Ecuación Conmutante (Teorema 4.4) que permite transformar el problema vectorial de gran dimensión en otro matricial consistente la resolución de tres ecuaciones matriciales de Sylvester. El tercer método consiste en calcular la aproximación de la solución en un cierto instante de tiempo mediante el producto de la exponencial de una matriz definida a bloques por un vector, utilizando para ello una adaptación basado en el método de los subespacios de Krylov. La naturaleza especial de los métodos de linealización a trozos ha hecho necesario modificar, adecuadamente, los algoritmos desarrollados para utilizarlos en la resolución de EDOs autónomas y de EDMRs con coeficientes constantes, explotando las características de este tipo de ecuaciones para así disminuir los costes computacionales y de almacenamiento necesarios. El contenido de este capítulo está estructurado en cuatro secciones. En la segunda sección se describen los tres métodos de linealización a trozos, anteriormente comentados, para la resolución de EDOs y la adaptación de los mismos en la resolución de EDOs autónomas. De igual modo, en la tercera sección se detallan los tres métodos de resolución de EDMRs basados en la linealización a trozos y su adaptación a la resolución de EDMRs con coeficientes constantes. En la última sección se exponen las conclusiones de este capítulo. Como se describió en la sección 1.1, la nomenclatura utilizada para los algoritmos desarrollados en esta tesis es: txxyyyzzz, siendo t el tipo de dato utilizado, xx el tipo de matriz, yyy el problema que resuelve y zzz el método utilizado. El significado de los seis últimos caracteres para los algoritmos que resuelven EDOs y EDMRs es: • yyy: función considerada. − yyy=edo para los algoritmos que resuelven EDOs; − yyy=dmr para los algoritmos que resuelven EDMRs. • zzz: método utilizado. − bdf: indica que se utiliza el método BDF para la resolución de EDOs; − lpn: indica que se utiliza el método de linealización a trozos basado en los aproximantes diagonales de Padé para la resolución de EDOs no autónomas; − lcn: indica que se utiliza el método de linealización a trozos basado en la Ecuación Conmutante para la resolución de EDOs no autónomas; − lkn: indica que se utiliza el método de linealización a trozos basado en los subespacios de Krylov para la resolución de EDOs no autónomas; − lpa: indica que se utiliza el método de linealización a trozos basado en los aproximantes diagonales de Padé para la resolución de EDOs autónomas; − lca: indica que se utiliza el método de linealización a trozos basado en la Ecuación Conmutante para la resolución de EDOs autónomas; 130 Capítulo 4: Linealización a Trozos − lka: indica que se utiliza el método de linealización a trozos basado en los subespacios de Krylov para la resolución de EDOs autónomas; − bdv: indica que se utiliza el método BDF para la resolución de EDMRs con coeficientes variables; − lpv: indica que se utiliza el método de linealización a trozos basado en los aproximantes diagonales de Padé para la resolución de EDMRs con coeficientes variables; − lcv: indica que se utiliza el método de linealización a trozos basado en la Ecuación Conmutante para la resolución de EDMRs con coeficientes variables; − lkv: indica que se utiliza el método de linealización a trozos basado en los subespacios de Krylov para la resolución de EDMRs con coeficientes variables; − bdc: indica que se utiliza el método BDF para la resolución de EDMRs con coeficientes constantes; − lpc: indica que se utiliza el método de linealización a trozos basado en los aproximantes diagonales de Padé para la resolución de EDMRs con coeficientes constantes; − lcc: indica que se utiliza el método de linealización a trozos basado en la Ecuación Conmutante para la resolución de EDMRs con coeficientes constantes; − lkc: indica que se utiliza el método de linealización a trozos basado en los subespacios de Krylov para la resolución de EDMRs con coeficientes constantes. 4.2 Métodos de Linealización a Trozos para EDOs 4.2.1 EDOs no Autónomas Sea la EDO con valores iniciales ( 4.1 ) x' (t ) = f (t , x(t )) , t ∈ [t 0 , t f ] , x(t0 ) = x0 ∈ ℜ n , cumpliendo f (t , x) las hipótesis del Teorema 2.10 (página 56). Aplicando la técnica de linealización a trozos descrita en el apartado 2.3.4, se tiene que dada una partición t 0 < t1 < L < t l −1 < t l = t f , es posible aproximar la EDO ( 4.1 ) mediante el conjunto de EDLs resultantes de la aproximación lineal de f (t , x(t )) en cada subintervalo, es decir, ( 4.2 ) y ' (t ) = f i + J i ( y (t ) − yi ) + gi (t − ti ) , t ∈ [t i , t i +1 ] , y (t i ) = yi , i = 0,1,L, l − 1 , siendo f i = f (ti , yi ) ∈ ℜ n , 131 Capítulo 4: Linealización a Trozos Ji = ∂f (ti , yi ) ∈ ℜ nxn , ∂x gi = ∂f (ti , yi ) ∈ ℜ n . ∂t Si J i es invertible, entonces la solución de la EDL ( 4.2 ) es y (t ) = yi − J i−1[ f i + g i (t − t i ) − J i−2 g i + e J i (t −ti ) ( J i−1 f i + J i−2 g i )] . A continuación se enuncia y demuestra un teorema que permite obtener la solución de la EDL ( 4.2 ) aunque J i no sea invertible. Teorema 4.1. La solución de la EDL ( 4.2 ) se puede expresar como y (t ) = yi + F12( i ) (t − ti ) f i + F13( i ) (t − ti ) gi , donde F12( i ) (t − ti ) y F13( i ) (t − ti ) son, respectivamente, los bloques (1,2) y (1,3) de la matriz eCi (t − t i ) , con ⎡Ji C i = ⎢⎢0 n ⎢⎣0 n 0n ⎤ I n ⎥⎥ . 0 n ⎥⎦ In 0n 0n Demostración. La solución de la EDL ( 4.2 ) es t y (t ) = yi + ∫ e J i (t −τ ) [ f i + g i (τ − t i )]dτ . ti Si en la expresión anterior se realiza el cambio de variable s = τ − ti , y se define θ = t − ti , entonces ds = dτ , t − τ = t − s − ti = θ − s , por lo tanto θ ( 4.3 ) y (t ) = yi + ∫ e 0 J i (θ − s ) θ [ f i + g i s ]ds = yi + ∫ e 0 J i (θ − s ) θ ds f i + ∫ e J i (θ − s ) sdsg i . 0 Si se considera la matriz triangular superior a bloques definida por 132 Capítulo 4: Linealización a Trozos ⎡Ji C i = ⎢⎢0 n ⎢⎣0 n ( 4.4 ) In 0n 0n 0n ⎤ I n ⎥⎥ , 0 n ⎥⎦ entonces la exponencial de la matriz Ciθ , tiene la forma e Ciθ ( 4.5 ) ⎡ F11( i ) (θ ) F12( i ) (θ ) F13(i ) (θ )⎤ ⎥ ⎢ F22( i ) (θ ) F23(i ) (θ )⎥ , = ⎢ 0n ⎢ 0n F33(i ) (θ )⎥⎦ 0n ⎣ siendo F jk(i ) (θ ) , 1 ≤ j ≤ k ≤ 3 , matrices cuadradas de orden n dependientes del parámetro θ . Como de Ciθ = Ci e Ciθ , e Ciθ dθ θ =0 = I 3n , entonces ⎡ dF11(i ) (θ ) ⎢ dθ ⎢ ⎢ 0 n ⎢ ⎢ ⎢ 0n ⎣ dF12( i ) (θ ) dθ dF22( i ) (θ ) dθ 0n dF13( i ) (θ ) ⎤ dθ ⎥⎥ ⎡ J i dF23( i ) (θ ) ⎥ ⎢ = 0n dθ ⎥ ⎢ dF33( i ) (θ ) ⎥ ⎢⎣0n ⎥ dθ ⎦ In 0n 0n 0n ⎤ ⎡ F11(i ) (θ ) F12( i ) (θ ) F13( i ) (θ )⎤ ⎥ ⎢ I n ⎥⎥ ⎢ 0n F22( i ) (θ ) F23( i ) (θ )⎥ 0n ⎥⎦ ⎢⎣ 0n 0n F33( i ) (θ )⎥⎦ ⎡ J i F11( i ) (θ ) J i F12( i ) (θ ) + F22( i ) (θ ) J i F13( i ) (θ ) + F23( i ) (θ )⎤ ⎥ ⎢ 0n F33(i ) (θ ) = ⎢ 0n ⎥. ⎥ ⎢ 0n 0n 0n ⎦ ⎣ Igualando los bloques correspondientes en ambos miembros de la expresión anterior, se obtienen las EDMLs ( 4.6 ) dF11( i ) = J i F11( i ) (θ ) , F11( i ) (0) = I n , dθ ( 4.7 ) dF22(i ) (θ ) = 0 , F22( i ) (0) = I n , dθ ( 4.8 ) dF33(i ) (θ ) = 0 , F33( i ) (0) = I n , dθ ( 4.9 ) dF23( i ) (θ ) = F33( i ) (θ ) , F23( i ) (0) = 0 n , dθ ( 4.10 ) dF12( i ) (θ ) = J i F12( i ) (θ ) + F22( i ) (θ ) , F12( i ) (0) = 0 n , dθ ( 4.11 ) dF13(i ) (θ ) = J i F13( i ) (θ ) + F23(i ) (θ ) , F13( i ) (0) = 0 n , dθ 133 Capítulo 4: Linealización a Trozos Resolviendo las EDMLs ( 4.6 ), ( 4.7 ) y ( 4.8 ), se tiene que F11( i ) (θ ) = e J iθ , F22( i ) (θ ) = I n , F33( i ) (θ ) = I n . Resolviendo las EDMLs ( 4.9 ) ( 4.10 ) y ( 4.11 ), resulta que F23( i ) (θ ) = θI n , θ F12( i ) (θ ) = ∫ e J i (θ − s ) ds , ( 4.12 ) 0 θ F13( i ) (θ ) = ∫ e J i (θ − s ) sds , ( 4.13 ) 0 y por lo tanto e C iθ ⎡ J iθ ⎢e ⎢ = ⎢ 0n ⎢0 ⎢ n ⎢⎣ θ ∫e J i (θ − s ) θ ds 0 In 0n ⎤ J i (θ − s ) e sds ⎥ ∫0 ⎥ θI n ⎥. ⎥ In ⎥ ⎥⎦ Teniendo en cuenta las expresiones ( 4.3 ), ( 4.12 ) y ( 4.13 ) se deduce que la solución de la EDL ( 4.2 ) viene dada por y (t ) = yi + F12( i ) (θ ) f i + F13( i ) (θ ) g i . Como θ = t − t i , entonces y (t ) = yi + F12( i ) (t − ti ) f i + F13( i ) (t − ti ) gi , con lo que queda demostrado el teorema. Según el teorema anterior, la solución aproximada en el instante ti +1 de la EDO ( 4.1 ) se puede obtener a partir de la solución aproximada en ti , utilizando la expresión ( 4.14 ) yi +1 = yi + F12( i ) (∆ti ) f i + F13( i ) (∆ti ) g i , con ∆ti = ti +1 − ti , siendo F12( i ) (∆ti ) y F13( i ) (∆ti ) , respectivamente, los bloques (1,2) y (1,3) de la matriz e Ci ∆ti , donde ( 4.15 ) ⎡ Ji Ci = ⎢⎢0 n ⎢⎣0 n In 0n 0n 0n ⎤ I n ⎥⎥ . 0 n ⎥⎦ El siguiente algoritmo calcula, aproximadamente, la solución de la EDO ( 4.1 ) mediante el método de linealización a trozos basado en el cálculo de la exponencial de la matriz definida a bloques Ci ∆ti . 134 Capítulo 4: Linealización a Trozos y = dgeedolgn(t , data, x0 ) Entradas: Vector de tiempos t ∈ ℜ l +1 , función data que calcula J (t , x) ∈ ℜ nxn , f (t , x) ∈ ℜ n y g (t , x) ∈ ℜ n , vector inicial x0 ∈ ℜ n . Salidas: Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . 1 2 y 0 = x0 Para i = 0 : l − 1 2.1 [ J , f , g ] = data (ti , yi ) . ∆t = ti +1 − ti 2.2 2.3 2.4 2.5 ⎡J C = ⎢⎢0 n ⎢⎣0 n F = eC∆t yi +1 = yi In 0n 0n 0n ⎤ I n ⎥⎥ 0 n ⎥⎦ + F12 f + F13 g Algoritmo 4.1: Resolución de EDOs mediante el método de linealización a trozos basado en el cálculo de la exponencial de una matriz. El problema de calcular yi +1 en el Algoritmo 4.1 son los elevados costes computacionales y de almacenamiento necesarios para obtener eC∆t . 4.2.1.1 Método Basado en los Aproximantes Diagonales de Padé En este subapartado se describe la manera de obtener la aproximación yi +1 de la expresión ( 4.14 ) sin el cálculo explícito de la exponencial de la matriz Ci ∆ti , utilizando para ello una adaptación a bloques del método de los aproximantes diagonales de Padé. Puesto que el cálculo de la exponencial de una matriz se debe realizar muchas veces, no hace falta calcular cada vez los coeficientes de los polinomios de la aproximación diagonal de Padé de la función exponencial. Además, ya que los coeficientes de los términos de grado cero de los polinomios de la aproximación diagonal de Padé son iguales a 1, tan sólo hace falta calcular los correspondientes a los términos de grado mayor que cero. En el siguiente algoritmo se calculan dichos coeficientes. 135 Capítulo 4: Linealización a Trozos [c1 , c2 ] = dlapex(q ) Entrada: Grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé. Salida: 1 2 3 Vectores c1 , c2 ∈ ℜ q que contienen los coeficientes de los términos de grado mayor que 0 correspondientes a los polinomios de la aproximación diagonal de Padé de la función exponencial. c1 (1) = 0.5 c2 (1) = −0.5 Para k = 2 : q 3.1 3.2 q − k +1 c1 (k − 1) (2q − k + 1)k c2 (k ) = (−1) k c1 (k ) c1 (k ) = Algoritmo 4.2: Obtiene los polinomios de la aproximación diagonal de Padé de la función exponencial. A continuación se presenta una modificación del Algoritmo 2.1 en el que se dan, como datos de entrada, los coeficientes de los términos de grado mayor que cero de los polinomios que definen la aproximación diagonal de Padé de la función exponencial. F = dlaexp( A, c1 ,c 2 ) . Entradas: Matriz A ∈ ℜ nxn , vectores c1 , c2 ∈ ℜ q que contienen los coeficientes de los términos de grado mayor que cero de los polinomios que definen la aproximación diagonal de Padé de la función exponencial. Salida: 1 2 3 4 5 6 7 8 Matriz F = e A ∈ ℜ nxn . nor =|| A ||∞ j A = max(0,1 + int(log 2 (nor ))) 1 s = jA 2 A = sA X=A N = I n + c1 (1) A D = I n + c2 (1) A Para k = 2 : q 8.1 X = XA N = N + c1 (k ) X 8.2 D = D + c2 (k ) X 8.3 9 Calcular F resolviendo la ecuación DF = N 10 Para k = 1 : j A 10.1 F = F 2 Algoritmo 4.3: Calcula la exponencial de una matriz, a partir de los polinomios de la aproximación diagonal de Padé de la función exponencial. El coste aproximado del algoritmo anterior es 136 Capítulo 4: Linealización a Trozos 2(q + j A + 1 / 3)n 3 flops, siendo j A = max(0,1 + int(log 2 (|| A || ∞ ))) . A continuación se describe la manera de adaptar el algoritmo anterior para calcular únicamente los bloques (1,2) y (1,3) de la exponencial de la matriz ⎡Ji A = ⎢⎢0 n ⎢⎣0 n ( 4.16 ) 0n ⎤ I n ⎥⎥ . 0 n ⎥⎦ In 0n 0n Sean ⎡ X 11 X = ⎢⎢ 0 n ⎢⎣ 0 n ⎡ N11 N = ⎢⎢ 0 n ⎢⎣ 0 n X 13 ⎤ X 23 ⎥⎥ , X 33 ⎥⎦ X 12 X 22 0n N13 ⎤ N 23 ⎥⎥ , N 33 ⎥⎦ N12 N 22 0n ⎡ D11 D = ⎢⎢ 0 n ⎢⎣ 0 n D13 ⎤ D23 ⎥⎥ , D33 ⎥⎦ D12 D22 0n ⎡ E11 E = ⎢⎢ 0 n ⎢⎣ 0 n E13 ⎤ E23 ⎥⎥ , E33 ⎥⎦ E12 E22 0n las matrices que aparecen en el Algoritmo 4.3, cuando éste se aplica a la matriz definida en ( 4.16 ). 4 A = sA . ⎡ sJ i A = sA = ⎢⎢ 0 n ⎢⎣ 0 n sI n 0n 0n 0n ⎤ sI n ⎥⎥ . 0 n ⎥⎦ Haciendo J i = sJ i , se tiene después de este paso 5 ⎡Ji A = ⎢⎢0 n ⎢⎣0 n sI n ⎡ Ji X = ⎢⎢0 n ⎢⎣0 n sI n 0n 0n 0n ⎤ sI n ⎥⎥ . 0 n ⎥⎦ X = A. 0n 0n 0n ⎤ sI n ⎥⎥ . 0 n ⎥⎦ 137 Capítulo 4: Linealización a Trozos 6 N = I n + c1 (1) A . ⎡ N11 ⎢0 ⎢ n ⎢⎣ 0 n N12 N 22 0n N13 ⎤ ⎡ I n + c1 (1) J i 0n N 23 ⎥⎥ = ⎢⎢ 0n N 33 ⎥⎦ ⎢⎣ c1 (1) sI n In 0n ⎤ c1 (1) sI n ⎥⎥ , I n ⎥⎦ 0n luego N11 = I n + c1 (1) J i , N 12 = c1 (1) sI n , N13 = 0 n , N 22 = I n , N 23 = c1 (1) sI n , N 33 = I n . 7 D = I n + c2 (1) A . ⎡ D11 ⎢0 ⎢ n ⎢⎣ 0 n D12 D22 0n D13 ⎤ ⎡ I n + c2 (1) J i 0n D23 ⎥⎥ = ⎢⎢ 0n D33 ⎥⎦ ⎢⎣ c2 (1) sI n In 0n ⎤ c2 (1) sI n ⎥⎥ , I n ⎥⎦ 0n luego D11 = I n + c2 (1) J i , D12 = c 2 (1) sI n , D13 = 0 n , D22 = I n , D23 = c 2 (1) sI n , D33 = I n . 8.1 ⎡ X 11 ⎢0 ⎢ n ⎢⎣ 0n X = XA . X 12 X 22 0n X 13 ⎤ ⎡ X 11 X 23 ⎥⎥ = ⎢⎢ 0n X 33 ⎥⎦ ⎢⎣ 0n X 12 X 22 0n X 13 ⎤ ⎡ J i X 23 ⎥⎥ ⎢⎢0n X 33 ⎥⎦ ⎢⎣0n sI n 0n 0n 0 n ⎤ ⎡ X 11 J i sI n ⎥⎥ = ⎢⎢ 0n 0 n ⎥⎦ ⎢⎣ 0n sX 11 0n 0n sX 12 ⎤ 0n ⎥⎥. 0n ⎥⎦ Teniendo en cuenta las dependencias de datos, la forma de calcular X ij , 1 ≤ i ≤ j ≤ 3 , dentro del bucle 8 es X 13 = sX 12 , X 12 = sX 11 , X 11 = X 11 J i , 138 Capítulo 4: Linealización a Trozos 8.2. siendo X 22 , X 23 y X 33 matrices nulas. N = N + c1 (k ) X . ⎡ N11 ⎢0 ⎢ n ⎢⎣ 0 n N12 N 22 0n N13 ⎤ ⎡ N11 + c1 (k ) X 11 N 23 ⎥⎥ = ⎢⎢ 0n N 33 ⎥⎦ ⎢⎣ 0n N12 + c1 (k ) X 12 N 22 0n N13 + c1 (k ) X 13 ⎤ ⎥. N 23 ⎥ ⎥⎦ N 33 Por lo tanto, las matrices N 22 , N 23 y N 33 no variaran dentro del bucle, conteniendo el valor previo N 22 = I n , N 23 = c1 (1) sI n , N 33 = I n . 8.3. D = D + c2 (k ) X . ⎡ D11 ⎢0 ⎢ n ⎢⎣ 0n D12 D22 0n D13 ⎤ ⎡ D11 + c2 (k ) X 11 D23 ⎥⎥ = ⎢⎢ 0n D33 ⎥⎦ ⎢⎣ 0n D12 + c2 (k ) X 12 D22 0n D13 + c2 (k ) X 13 ⎤ ⎥. D23 ⎥ ⎥⎦ D33 Por lo tanto, las matrices D22 , D23 y D33 no variaran dentro del bucle, conteniendo el valor previo, D22 = I n , D23 = c2 (1) sI n , D33 = I n . 9 Calcular F resolviendo ecuación DF = N . ⎡ D11 ⎢0 ⎢ n ⎢⎣ 0n D12 In 0n D13 ⎤ ⎡ F11 c2 (1) sI n ⎥⎥ ⎢⎢ 0n I n ⎥⎦ ⎢⎣ 0n F12 F22 0n F13 ⎤ ⎡ N11 F23 ⎥⎥ = ⎢⎢ 0n F33 ⎥⎦ ⎢⎣ 0n N12 In 0n N13 ⎤ c1 (1) sI n ⎥⎥. I n ⎥⎦ luego D11 F11 = N11 , D11 F12 + D12 F22 = N12 , D11 F13 + D12 F23 + D13 F33 = N13 , F22 = I n , F23 + c2 (1) sF33 = c1 (1) sI n , F33 = I n . 139 Capítulo 4: Linealización a Trozos Teniendo en cuenta que c1 (1) = 0.5 y c2 (1) = −0.5 , entonces F23 = sI n . Por lo tanto, las matrices F11 , F12 y F13 se pueden obtener resolviendo las ecuaciones D11 F11 = N11 , D11 F12 = N12 − D12 , D11 F13 = N13 − sD12 − D13 . Luego sólo basta conocer de los pasos anteriores N11 , N12 , N13 , D11 , D12 y D13 , para determinar F11 , F12 y F13 en el paso 9. 10.1. F = F2 Realizando el producto por bloques ⎡ F11 ⎢0 ⎢ n ⎢⎣ 0 n F12 F22 0n F13 ⎤ ⎡ F11 F23 ⎥⎥ = ⎢⎢ 0 n F33 ⎥⎦ ⎢⎣ 0 n F12 F22 0n F13 ⎤ ⎡ F11 F23 ⎥⎥ ⎢⎢ 0 n F33 ⎥⎦ ⎢⎣ 0 n F12 F22 0n F13 ⎤ F23 ⎥⎥ , F33 ⎥⎦ e igualando los bloques correspondientes se tiene F11 = F112 , F12 = F11 F12 + F12 F22 , F13 = F11 F13 + F12 F23 + F13 F33 , F22 = F222 , F23 = F22 F23 + F23 F33 , F33 = F332 . Teniendo en cuenta que antes de entrar en el bucle F22 = I n y F33 = I n , entonces en cualquier paso del bucle se tiene que F22 = I n y F33 = I n . Según esto, el valor de F23 es F23 = F23 + F23 = 2F23 , Sabiendo que F23 = sI n antes de entrar en el bucle, entonces al cabo de k iteraciones resulta F23 = 2 k sI n . Atendiendo a la dependencia de datos, la forma de calcular F11 , F12 y F13 es F13 = F11 F13 + F12 F23 + F13 , F12 = F11 F12 + F12 , F11 = F112 . 140 Capítulo 4: Linealización a Trozos A continuación se muestra la correspondiente adaptación a bloques del Algoritmo 4.3, según los pasos anteriormente desarrollados. yi +1 = dlaop3( J , f , g , yi , ∆t , c1 , c2 ) . Entradas: Matriz J ∈ ℜ nxn , vector f ∈ ℜ n , vector g ∈ ℜ n , vector yi ∈ ℜ n , incremento de tiempo ∆t ∈ ℜ , vectores c1 , c2 ∈ ℜ q que contienen los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación de Padé de la función exponencial. Salida: Vector yi +1 ∈ ℜ n de la expresión ( 4.14 ). 1 nor = ∆t || J || ∞ 2 j J∆t = max(0,1 + int(log 2 (nor ))) ; s = 3 4 5 6 X 11 = J ; X 12 = sI n ; X 13 = 0 n ∆t ; J i = sJ 2 j J∆t 8 N11 = I n + c1 (1) J ; N12 = c1 (1) sI n ; N13 = 0 n D11 = I n + c2 (1) J ; D12 = c2 (1) sI n ; D13 = 0 n Para k = 2 : q 6.1 X 13 = sX 12 ; X 12 = sX 11 ; X 11 = X 11 J i N11 = N11 + c1 (k ) X 11 ; N12 = N12 + c1 (k ) X 12 ; N13 = N13 + c1 (k ) X 13 6.2 D11 = D11 + c2 (k ) X 11 ; D12 = D12 + c2 (k ) X 12 ; D13 = D13 + c2 (k ) X 13 6.3 Calcular F11 , F12 y F13 , resolviendo las ecuaciones: D11 F11 = N11 7.1 7.2 D11 F12 = N12 − D12 7.3 D11 F13 = N13 − sD12 − D13 Para k = 1 : j J∆t 9 8.1 F13 = F11 F13 + sF12 + F13 ; F12 = F11 F12 + F12 ; F11 = F112 8.2 s = 2s yi +1 = yi + F12 f + F13 g 7 Algoritmo 4.4: Calcula la solución aproximada en el instante t i +1 de una EDO no autónoma mediante la modificación a bloques del Algoritmo 4.3. El coste aproximado del algoritmo anterior es 1⎞ ⎛ 2⎜ q + 3 j J∆t + ⎟n 3 flops, 3⎠ ⎝ siendo j J∆t = max(0,1 + int(log 2 (|| J∆t || ∞ ))) . A continuación se presenta el algoritmo que resuelve EDOs mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé. 141 Capítulo 4: Linealización a Trozos y = dgeedolpn(t,data, x0 , q) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data que calcula f (t , x) ∈ ℜ n , J (t , x) ∈ ℜ nxn y g (t , x) ∈ ℜ n , vector inicial x0 ∈ ℜ n , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salidas: Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . 1 2 3 [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) y 0 = x0 Para i = 0 : l − 1 3.1 [ J , f , g ] = data (ti , yi ) 3.2 3.3 ∆t = ti +1 − ti yi +1 = dlaop3( J , f , g , yi , ∆t , c1 , c2 ) (Algoritmo 4.4) Algoritmo 4.5: Resolución de EDOs no autónomas mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé. 4.2.1.2 Método Basado en la Ecuación Conmutante En este subapartado se describe la forma de obtener la solución aproximada yi +1 de la expresión ( 4.14 ) mediante la ecuación conmutante. Por la Propiedad 2.1, se tiene que las matrices ⎡Ji C i = ⎢⎢0 n ⎢⎣0 n In 0n 0n 0n ⎤ I n ⎥⎥ 0 n ⎥⎦ y e Ci ∆ti ⎡e J i ∆ti ⎢ = ⎢ 0n ⎢ 0n ⎣ F12( i ) (∆ti ) F13( i ) (∆ti )⎤ ⎥ In I n ∆ti ⎥ 0n I n ⎥⎦ conmutan, por lo que ⎡ Ji ⎢0 ⎢ n ⎢⎣0n In 0n 0n ⎡e J i ∆t i ⎢ = ⎢ 0n ⎢ 0n ⎣ 0n ⎤ ⎡e J i ∆t i ⎢ I n ⎥⎥ ⎢ 0n 0n ⎥⎦ ⎢⎣ 0n F12( i ) (∆ti ) F13( i ) (∆ti )⎤ ⎥ In I n ∆ti ⎥ 0n I n ⎥⎦ F12(i ) (∆ti ) F13(i ) (∆ti )⎤ ⎡ J i ⎥ In I n ∆ti ⎥ ⎢⎢0n 0n I n ⎥⎦ ⎢⎣0n In 0n 0n 0n ⎤ I n ⎥⎥. 0n ⎥⎦ Igualando los bloques (1,2) y (1,3) de la expresión anterior, se tiene que J i F12( i ) (∆ti ) + I n = e J i ∆ti , 142 Capítulo 4: Linealización a Trozos J i F13(i ) (∆ti ) + I n ∆ti = F12( i ) (∆ti ) , y de aquí las expresiones ( 4.17 ) J i F12(i ) (∆ti ) f i = (e J i ∆ti − I n ) f i , ( 4.18 ) J i F12(i ) (∆ti ) g i = (e J i ∆ti − I n ) g i , ( 4.19 ) J i F13(i ) (∆ti ) g i = ( F12( i ) (∆ti ) − I n ∆ti ) g i = F12( i ) (∆ti ) g i − ∆ti g i , Por lo tanto, yi +1 = yi + F12( i ) (∆ti ) f i + F13( i ) (∆ti ) g i se puede calcular del siguiente modo: • Calcular xi = F12(i ) (∆ti ) f i resolviendo la ecuación J i xi = (e J i ∆ti − I n ) f i . • Calcular zi = F12(i ) (∆ti ) g i resolviendo la ecuación, J i zi = (e J i ∆ti − I n ) g i . • Calcular wi = F13( i ) (∆ti ) g i resolviendo la ecuación J i wi = zi − ∆ti gi . • Calcular yi +1 = yi + xi + wi . Supóngase que J i sea invertible. Puesto que se deben resolver tres sistemas de ecuaciones lineales con la misma matriz de coeficientes, se puede utilizar la descomposición LU sin pivotamiento, para reducir el coste computacional del cálculo de yi +1 , tal como se muestra en el siguiente algoritmo. Si J i fuese singular cabría la posibilidad de realizar una aproximación basada en la descomposición en valores singulares (Teorema 6.8) de la matriz J i . 143 Capítulo 4: Linealización a Trozos yi +1 = dlaoc3( J , f , g , yi , ∆t , c1 , c2 ) . Entradas: Matriz J ∈ ℜ nxn , vector f ∈ ℜ n , vector g ∈ ℜ n , vector yi ∈ ℜ n , incremento de tiempo ∆t ∈ ℜ , vectores c1 , c2 ∈ ℜ q que contienen los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación de Padé de la función exponencial. Salida: 1 2 3 4 5 6 7 8 9 Vector yi +1 ∈ ℜ n de la expresión ( 4.14 ). E = dlaexp( J∆t , c1 ,c 2 ) (Algoritmo 4.3) [ L, U ] = lu ( J ) Calcular x resolviendo el sistema lineal triangular inferior Lx = ( E − I n ) f Calcular x resolviendo el sistema lineal triangular superior Ux = x Calcular z resolviendo el sistema lineal triangular inferior Lz = ( E − I n ) g Calcular z resolviendo el sistema lineal triangular superior Uz = z Calcular w resolviendo el sistema lineal triangular inferior Lw = z − ∆tg Calcular w resolviendo el sistema lineal triangular superior Uw = w yi +1 = yi + x + w Algoritmo 4.6: Calcula la solución aproximada en el instante t i +1 de una EDO no autónoma mediante la ecuación conmutante. El coste computacional aproximado del algoritmo anterior es 2⎞ ⎛ 2⎜ q + j J∆t + ⎟n 3 flops, 3⎠ ⎝ siendo j J∆t = max(0,1 + int(log 2 (|| J∆t || ∞ ))) . A continuación se muestra el algoritmo que resuelve EDOs no autónomas mediante el método de linealización a trozos basado en la ecuación conmutante y = dgeedolcn(t, data, x0 , q) . Entradas: Vector de tiempos t ∈ ℜ l +1 , función data que calcula f (t , x) ∈ ℜ n , J (t , x) ∈ ℜ nxn y g (t , x) ∈ ℜ n , vector inicial x0 ∈ ℜ n , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salidas: Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . 1 2 3 [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) y 0 = x0 Para i = 0 : l − 1 3.1 [ J , f , g ] = data (ti , yi ) . 3.2 3.3 ∆t = ti +1 − ti yi +1 = dlaoc3( J , f , g , yi , ∆t , c1 , c2 ) (Algoritmo 4.6) Algoritmo 4.7: Resolución de EDOs no autónomas mediante el método de linealización a trozos basado en la ecuación conmutante. 144 Capítulo 4: Linealización a Trozos 4.2.1.3 Método Basado en los Subespacios de Krylov El vector yi +1 que aparece en ( 4.14 ), solución aproximada en el instante t i +1 de la EDO ( 4.1 ), se puede expresar como yi +1 = yi + F12(i ) (∆t i ) f i + F13( i ) (∆t i ) g i = yi + e Ci ∆ti vi , ( 4.20 ) siendo ⎡Ji C i = ⎢⎢0 n ⎢⎣0 n In 0n 0n 0n ⎤ I n ⎥⎥ , 0 n ⎥⎦ ⎡0 nx1 ⎤ vi = ⎢⎢ f i ⎥⎥ . ⎢⎣ g i ⎥⎦ El producto e Ci ∆ti vi de la expresión ( 4.20 ) se puede obtener mediante una modificación del método basado en los subespacios de Krylov que se describe a continuación. Dados A ∈ ℜ nxn y v ∈ ℜ n , se pretende calcular, de manera aproximada, el vector e A v . Para ello se trata de obtener una aproximación del tipo e A v ≈ Pp −1 ( A)v , siendo Pp −1 un polinomio de grado p − 1 , con p << n . Si se considera el subespacio de Krylov K p generado por los vectores v, Av,L , A p −1v , entonces se puede obtener una base ortonormal {v1 , v2 , L , v p } de K p aplicando el método de Arnoldi. Entradas: Matriz A ∈ ℜ nxn , vector v ∈ ℜ n , dimensión p ∈ Z + del subespacio de Krylov . Salida: Base ortonormal {v1 , v2 , L , v p } . 1 2 v1 = v/||v||2 Para j = 1 : p w = Av j 2.1 2.2 Para i = 1 : j 2.2.1 hij = wT vi 2.2.2 w = w − hij vi 2.3 h j +1 j = w 2 2.4 v j +1 = w / h j +1 Algoritmo 4.8: Método de Arnoldi. 145 Capítulo 4: Linealización a Trozos Sea V p la matriz cuyas columnas son los vectores de la base ortonormal {v1 , v2 , L , v p } obtenida en el algoritmo anterior, es decir, V p = [v1 , v2 ,L, v p ] ∈ ℜ nxp . Si vopt = V p xopt es la mejor aproximación a e A v de un vector perteneciente a K p , entonces se cumple que || vopt − e A v ||2 = minn || y − e A v ||2 , y∈ℜ por lo que xopt es la solución del sistema de ecuaciones normales V pT V p xopt = V pT e A v . La solución del sistema anterior viene dada por xopt = (V p V p ) −1V pT e A v = V p e A v , T T por lo tanto vopt = V p xopt = V pV p e A v . T Si se define β =|| v ||2 , entonces v = βV p e1 , siendo e1 = [1, 0, L , 0]T ∈ ℜ p , por lo que vopt = β V pV p e AV p e1 . T ( 4.21 ) Por otra parte, si se considera la matriz H = [hij ] obtenida a partir del método de Arnoldi, entonces se cumple la siguiente relación AV p = V p H p + h p +1 p v p +1e Tp , siendo H p la matriz de Hessenberg obtenida al considerar las p primeras columnas y p primeras filas de la matriz H . Además, por la ortogonalidad de las columnas de la matriz V p , se tiene H p = V pT AV p , por lo que ( 4.22 ) e Hp = V pT e AV p . Finalmente, teniendo en cuenta las expresiones ( 4.21 ) y ( 4.22 ), se obtiene que e A v ≅ vopt = βV p e p e1 . H Este resultado conduce al siguiente algoritmo. 146 Capítulo 4: Linealización a Trozos w = dlaexpkry( A,v,p,tol , c1 , c2 ) . Entradas: Matriz A ∈ ℜ nxn , vector v ∈ ℜ n , dimensión p ∈ Z + del subespacio de Krylov, tolerancia tol ∈ ℜ + , vectores c1 , c2 ∈ ℜ q que contienen los coeficientes de los términos de grado mayor que cero de los polinomios que definen la aproximación diagonal de Padé de la función exponencial. Salida: 1 2 3 4 Vector w = e A v ∈ ℜ n . β = ||v||2 Si β == 0 w=0 2.1 2.2 Salir del Algoritmo V (:,1) = v/β Para j = 1 : p 4.1 w = AV (:, j ) 4.2 Para i = 1 : j 4.2.1 H (i, j ) = wT V (:, i ) 4.2.2 w = w − H (i, j )V (:, i ) s= w2 4.3 Si s < tol 4.4.1 p = j 4.4.2 Salir del bucle 4.5 H ( j + 1, j ) = s 4.6 V (:, j + 1) = w / s H (1 : p,1 : p ) = dlaexp( H (1 : p,1 : p ), c1 ,c 2 ) (Algoritmo 4.3) w = β V (:,1 : p ) H (1 : p,1) 4.4 5 6 Algoritmo 4.9: Calcula el producto de la exponencial de una matriz por un vector, mediante los subespacios de Krylov. El siguiente algoritmo permite calcular el vector yi +1 de la expresión ( 4.20 ) mediante una adaptación a bloques del Algoritmo 4.9, minimizando los costes computacionales y de almacenamiento. 147 Capítulo 4: Linealización a Trozos yi +1 = dlaok 3( J , f , g , yi , ∆t , p, tol , c1 , c2 ) . Entradas: Matriz J ∈ ℜ nxn , vector f ∈ ℜ n , vector g ∈ ℜ n , vector yi ∈ ℜ n , incremento de tiempo ∆t ∈ ℜ , dimensión p ∈ Z + del subespacio de Krylov, tolerancia tol ∈ ℜ + , vectores c1 , c2 ∈ ℜ q que contienen a los coeficientes de los términos de grado mayor que cero de los polinomios que definen la aproximación diagonal de Padé de la función exponencial. Salida: 1 2 3 4 5 Vector yi +1 ∈ ℜ n de la expresión ( 4.20 ). V (1 : n,1) = 0 n ; V (n + 1 : 2n,1) = f ; V (2n + 1 : 3n,1) = g β =|| V (n + 1 : 3n,1) ||2 Si β = = 0 3.1 Salir V (2n + 1 : 3n,1) = V (2n + 1 : 3n,1) / β Para j = 1 : p 5.1 w(1 : n) = JV (1 : n, j ) + V (n + 1 : 2n, j ) ; w(n + 1 : 2n) = V (2n + 1 : 3n, j ) 5.2 w(1 : 2n) = ∆tw(1 : 2n) ; w(2n + 1 : 3n) = 0 n 5.3 Para i = 1 : j 5.3.1 H (i, j ) = wT V (1 : 3n, i ) 5.3.2 w = w − H (i, j )V (1 : 3n, i ) 5.4 s= w2 Si s < tol 5.5.1 p = j 5.5.2 Salir del bucle 5.6 H ( j + 1, j ) = s V (1 : 3n, j + 1) = w / s 5.7 H (1 : p,1 : p ) = dlaexp( H (1 : p,1 : p ), c1 ,c 2 ) (Algoritmo 4.2) yi +1 = yi + βV (1 : n,1 : p) H (1 : p,1) 5.5 6 7 Algoritmo 4.10: Calcula la solución aproximada en el instante t i +1 de una EDO no autónoma mediante la modificación a bloques del Algoritmo 4.9. El coste computacional aproximado del algoritmo anterior es 2n 2 p + 6np( p + 1) + 2(q + j H p + 1 / 3) p 3 flops, siendo j H p = max(0,1 + int(log 2 (|| H p ||))) . A continuación se presenta el algoritmo completo para la resolución de EDOs no autónomas basado en el método de linealización a trozos mediante los subespacios de Krylov. 148 Capítulo 4: Linealización a Trozos y = dgeedolkn(t,data, x0 , p, tol , q) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data que calcula f (t , x) ∈ ℜ n , J (t , x) ∈ ℜ nxn y g (t , x) ∈ ℜ n , vector inicial x0 ∈ ℜ n , dimensión p ∈ Z + del subespacio de Krylov, tolerancia tol ∈ ℜ + , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salidas: Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) y 0 = x0 Para i = 0 : l − 1 3.1 [ J , f , g ] = data (ti , yi ) . 1 2 3 3.2 3.3 ∆t = ti +1 − ti yi +1 = dlaok 3( J , f , g , yi , ∆t , tol , c1 , c2 ) (Algoritmo 4.10) Algoritmo 4.11: Resolución de EDOs no autónomas mediante el método de linealización a trozos basado en los subespacios de Krylov. 4.2.2 EDOs Autónomas Sea la EDO con valores iniciales ( 4.23 ) x' (t ) = f ( x(t )) , t ∈ [t 0 , t f ] , x(t0 ) = x0 ∈ ℜ n , cumpliendo f (x) las hipótesis del Teorema 2.10 (página 56), es decir, las derivadas parciales de segundo orden de f (x) están acotadas en ℜ n . Dada una partición t 0 < t1 < L < t l −1 < t l = t f , entonces la ecuación anterior se puede aproximar mediante el conjunto de EDLs resultantes de la aproximación lineal de f ( x(t )) en cada subintervalo, es decir, ( 4.24 ) y ' (t ) = f i + J i ( y (t ) − yi ) , t ∈ [t i , t i +1 ] , y (t i ) = yi , i = 0,1,L, l − 1 , siendo f i = f ( yi ) ∈ ℜ n , Ji = ∂f ( yi ) ∈ ℜ nxn . ∂x La solución analítica de la EDL y ' (t ) = f i + J i ( y (t ) − yi ) , t ∈ [ti , ti +1 ] , 0 ≤ i < l , con valor inicial y (t i ) = yi , resulta ser t ( 4.25 ) y (t ) = yi + ∫ e J i ( t −τ ) fi dτ , t ∈ [ti , ti +1 ] , ti 149 Capítulo 4: Linealización a Trozos por lo que se pueden obtener las soluciones aproximadas y0 , y1 ,L, yl resolviendo, sucesivamente, las EDLs en cada uno de los subintervalos [ti , ti +1 ] , i = 0,1,L, l − 1 . Teorema 4.2. La solución de la EDL de valores iniciales ( 4.26 ) y ' (t ) = f i + J i ( y (t ) − yi ) , t ∈ [ti , ti +1 ] , y (t i ) = yi , es ( 4.27 ) y (t ) = yi + F12(i ) (t − ti ) f i , donde F12( i ) (t − ti ) es el bloque (1,2) de la matriz eCi ( t − t i ) , con ( 4.28 ) ⎡J Ci = ⎢ i ⎣0 n In ⎤ . 0 n ⎥⎦ Demostración. Basta aplicar el Teorema 4.1, para el caso particular en que gi = 0nx1 ∈ ℜ n . Según el teorema anterior, la solución aproximada en el instante ti +1 de la EDO ( 4.23 ) se puede obtener a partir de la solución aproximada en ti utilizando la expresión ( 4.29 ) yi +1 = yi + F12(i ) (∆ti ) f i , donde ∆ti = ti +1 − ti , siendo F12( i ) (∆ti ) el bloque (1,2) de la matriz eCi ∆t i , con ⎡J Ci = ⎢ i ⎣0 n In ⎤ . 0 n ⎥⎦ El siguiente algoritmo calcula la solución de la EDO ( 4.23 ) mediante el método de linealización a trozos basado en el cálculo de la exponencial de una matriz. 150 Capítulo 4: Linealización a Trozos y = dgeedolga(t, data, x0 ) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data que calcula f (t , x) ∈ ℜ n y J (t , x) ∈ ℜ nxn , vector inicial x0 ∈ ℜ n . Salidas: Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . 1 2 y 0 = x0 Para i = 0 : l − 1 2.1 [ J , f ] = data (ti , yi ) 2.3 ⎡ J In ⎤ C=⎢ ⎥ ⎣0 n 0 n ⎦ ∆t = ti +1 − ti 2.4 2.5 F = eC∆t Calcular yi +1 = yi + F12 f (expresión ( 4.29)) 2.2 Algoritmo 4.12: Algoritmo básico para la resolución de EDOs autónomas mediante el método de linealización a trozos basado en el cálculo de la exponencial de una matriz. El problema de calcular yi +1 son los elevados costes computacionales y de almacenamiento necesarios para realizar el producto de la exponencial de una matriz de dimensión 2n por un vector de dimensión 2n . 4.2.2.1 Método Basado en los Aproximantes Diagonales de Padé El vector yi +1 de la expresión ( 4.29 ), solución aproximada en el instante t i +1 de la EDO ( 4.23 ), se puede calcular sin obtener explícitamente la exponencial de la matriz Ci ∆ti mediante una adaptación a bloques del método de los aproximantes diagonales de Padé. Razonando del mismo modo que el utilizado en la obtención del Algoritmo 4.4, se tiene el siguiente algoritmo. 151 Capítulo 4: Linealización a Trozos yi +1 = dlaop 2( J , f , yi , ∆t , c1 , c2 ) . Entradas: Matriz J ∈ ℜ nxn , vector f ∈ ℜ n , vector yi ∈ ℜ n , incremento de tiempo ∆t ∈ ℜ , vectores c1 , c2 ∈ ℜ q que contienen los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación de Padé de la función exponencial. Salida: Vector yi +1 ∈ ℜmxn de la expresión ( 4.29 ). 1 nor = ∆t || J ||∞ 2 j J∆t = max(0,1 + int(log 2 (nor ))) ; s = 3 4 5 6 X 11 = J ; X 12 = sI n 7 8 9 ∆t ; J = sJ 2j N11 = I n + c1 (1) J ; N12 = c1 (1) sI n D11 = I n + c2 (1) J ; D12 = c2 (1) sI n Para k = 2 : q X 12 = sX 11 ; X 11 = X 11 J 6.1 N11 = N11 + c1 (k ) X 11 ; N12 = N12 + c1 (k ) X 12 6.2 D11 = D11 + c2 (k ) X 11 ; D12 = D12 + c2 (k ) X 12 6.3 Calcular F11 y F12 resolviendo las ecuaciones (mediante descomposición LU de D11 ): D11 F11 = N11 7.1 D11 F12 = N12 − D12 7.2 Para k = 1 : j F12 = F11 F12 + F12 ; F11 = F112 8.1 s = 2s 8.2 yi +1 = yi + F12 f Algoritmo 4.13: Calcula la solución aproximada en el instante t i +1 de una EDO autónoma mediante la modificación a bloques del método de los aproximantes diagonales de Padé. El coste aproximado del algoritmo anterior es 1⎞ ⎛ 2⎜ q + 2 j J∆t + ⎟n 3 flops, 3⎠ ⎝ siendo j J∆t = max(0,1 + int(log 2 (|| J∆t || ∞ ))) . A continuación se presenta el algoritmo que resuelve EDOs autónomas mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé. 152 Capítulo 4: Linealización a Trozos y = dgeedolpa(t,data, x0 , q) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data que calcula f (t , x) ∈ ℜ n y J (t , x) ∈ ℜ nxn , vector inicial x0 ∈ ℜ n , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salidas: Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) y 0 = x0 Para i = 0 : l − 1 3.1 [ J , f ] = data (ti , yi ) 1 2 3 3.2 3.3 ∆t = ti +1 − ti yi +1 = dlaop 2( J , f , yi , ∆t , c1 , c2 ) (Algoritmo 4.13) Algoritmo 4.14: Resolución de EDOs autónomas mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé. 4.2.2.2 Método Basado en la Ecuación Conmutante En este subapartado se describe la manera de obtener la solución aproximada yi +1 de la expresión ( 4.29 ) mediante la ecuación conmutante. Por la Propiedad 2.1, se tiene que las matrices ⎡J Ci = ⎢ i ⎣0 n In ⎤ 0 n ⎥⎦ y ⎡e J i ∆ti e Ci ∆ti = ⎢ ⎣ 0n F12( i ) (∆ti )⎤ ⎥ In ⎦ conmutan, por lo que ⎡ Ji ⎢0 ⎣ n I n ⎤ ⎡e J i ∆ti ⎢ 0 n ⎥⎦ ⎣ 0 n F12( i ) (∆ti )⎤ ⎡e J i ∆ti ⎥=⎢ I n ⎦ ⎣ 0n F12(i ) (∆ti )⎤ ⎡ J i ⎥⎢ I n ⎦ ⎣0 n In ⎤ . 0 n ⎥⎦ Igualando los bloques (1,2) de la expresión anterior, se tiene que J i F12( i ) (∆ti ) + I n = e J i ∆ti , o bien ( 4.30 ) J i F12(i ) (∆ti ) f i = (e J i ∆ti − I n ) f i . Si J i es invertible, entonces yi +1 se puede calcular del siguiente modo: • Calcular xi = F12(i ) (∆ti ) f i resolviendo la ecuación J i xi = (e J i ∆ti − I n ) f i . • Calcular yi +1 = yi + xi . 153 Capítulo 4: Linealización a Trozos A continuación se muestra un algoritmo que calcula el vector yi +1 mediante la ecuación conmutante. yi +1 = dlaoc 2( J , f , yi , ∆t , c1 , c2 ) . Entradas: Matriz J ∈ ℜ nxn , vector f ∈ ℜ n , vector yi ∈ ℜ n , incremento de tiempo ∆t ∈ ℜ , vectores c1 , c2 ∈ ℜ q que contienen los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación de Padé de la función exponencial. Salida: 1 2 3 4 5 Vector yi +1 ∈ ℜ n de la expresión ( 4.29 ). E = dlaexp( J∆t , c1 ,c 2 ) (Algoritmo 4.3) [ L, U ] = lu ( J ) Calcular x resolviendo el sistema lineal triangular inferior Lx = ( E − I n ) f Calcular x resolviendo el sistema lineal triangular superior Ux = x yi +1 = yi + x Algoritmo 4.15: Calcula la solución aproximada en el instante t i +1 de una EDO autónoma mediante la ecuación conmutante. El coste computacional aproximado del algoritmo anterior es 2⎞ ⎛ 2⎜ q + j J∆t + ⎟n 3 flops, 3⎠ ⎝ siendo j J∆t = max(0,1 + int(log 2 (|| J∆t || ∞ ))) . A continuación se presenta el algoritmo que resuelve EDOs mediante el método de linealización a trozos basado en la ecuación conmutante. y = dgeedolca(t, data, x0 , q ) . Entradas: Vector de tiempos t ∈ ℜ l +1 , función data que calcula f (t , x) ∈ ℜ n y J (t , x) ∈ ℜ nxn , vector inicial x0 ∈ ℜ n , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salidas: Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . 1 2 3 [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) y 0 = x0 Para i = 0 : l − 1 3.1 [ J , f ] = data (ti , yi ) 3.2 3.3 ∆t = ti +1 − ti y i +1 = dlaoc 2( J , f , y i , ∆t , c1 , c 2 ) (Algoritmo 4.15) Algoritmo 4.16: Resolución de EDOs autónomas mediante el método de linealización a trozos basado en la ecuación conmutante. 154 Capítulo 4: Linealización a Trozos 4.2.2.3 Método Basado en los Subespacios de Krylov El vector yi +1 de la expresión ( 4.29 ), solución aproximada en el instante t i +1 de la EDO ( 4.23 ), se puede expresar como y i +1 = y i + F12( i ) (∆t i ) f i = y i + e Ci ∆ti vi , ( 4.31 ) donde ⎡J Ci = ⎢ i ⎣0 n In ⎤ , 0 n ⎥⎦ ⎡0 ⎤ vi = ⎢ nx1 ⎥ . ⎣ fi ⎦ Para calcular yi +1 , según la expresión anterior, es necesario calcular el producto de la exponencial de una matriz por un vector. Para calcular e Ci ∆ti vi de forma eficiente se realiza la siguiente adaptación a bloques del Algoritmo 4.9: ⎡J A=⎢ i ⎣0 n 1 In ⎤ ⎡ J ∆t ∆t i = ⎢ i i ⎥ 0n ⎦ ⎣ 0n I n ∆t i ⎤ ⎡0 ⎤ , v = ⎢ nx1 ⎥ . ⎥ 0n ⎦ ⎣ fi ⎦ I n ∆t i ⎤ ⎡ J = 0 n ⎥⎦ ⎢⎣0 n β = ||v||2 . β = ||f i||2 . 3 V (:,1) = v/β . ⎡ V (1 : n,1) ⎤ ⎡ 0 nx1 ⎤ ⎢V (n + 1 : 2n,1)⎥ = ⎢ f / β ⎥ . ⎣ ⎦ ⎣ i ⎦ 4.1 w = AV (:,1) . ⎡ w(1 : n) ⎤ ⎡ J ⎢ w(n + 1 : 2n)⎥ = ⎢0 ⎣ ⎦ ⎣ n 4.2.1 ∆t ∆tI n ⎤ ⎡ 0 nx1 ⎤ ⎡ f i ⎤ ⎢ = β ⎥. ⎥ 0 n ⎥⎦ ⎢⎣ f i / β ⎥⎦ ⎢ ⎣ 0 nx1 ⎦ H (1,1) = wT V (:,1) . ⎡ ∆t H (1,1) = wT V (:,1) = ⎢ f T ⎣β ⎤ ⎡ 0 ⎤ ⎡0 ⎤ 0 nx1 ⎥ ⎢ nx1 ⎥ = ⎢ nx1 ⎥ . ⎦ ⎣ f i / β ⎦ ⎣0 nx1 ⎦ 4.2.2 w = w − H (1,1)V (:,1) (no se modifica el vector w ). 4.3 s =|| w || 2 . s =|| w ||2 = 4.5 ∆t β || f i ||2 = ∆t β β = ∆t . H (2,1) = s . H (2,1) = ∆t . 4.6 V (:,2) = w / s . 155 Capítulo 4: Linealización a Trozos ⎡ ∆t ⎤ ⎡ fi / β ⎤ ⎡ V (1 : n,2) ⎤ ⎢ fi ⎥ ⎢V (n + 1 : 2n,2)⎥ = w / s = ⎢ β ⎥ / ∆t = ⎢ 0 ⎥ . ⎣ ⎦ ⎣ nx1 ⎦ ⎣ 0 nx1 ⎦ 4.1 w = AV (:, j ) , j > 1 . ⎡ w(1 : n) ⎤ ⎡ J ⎢ w(n + 1 : 2n)⎥ = ⎢0 ⎣ ⎦ ⎣ n ∆tI n ⎤ ⎡V (1; n, j )⎤ ⎡ JV (1; n, j )⎤ . = 0 n ⎥⎦ ⎢⎣ 0 nx1 ⎥⎦ ⎢⎣ 0 nx1 ⎥⎦ 4.2.1 H (1, j ) = wT V (:, j ) , j > 1 . 4.2.2 ⎡V (1 : n,1)⎤ T 01xn ⎢ ⎥ = w(1 : n) V (1 : n,1) = 0 . 0 nx1 ⎣ ⎦ w = w − H (1, j )V (:,1) , j > 1 (no se modifica el vector w ). 4.2.1 H (i, j ) = wT V (:, j ) , i > 1 , j > 1 . [ ] H (1, j ) = w(1 : n)T [ H (i, j ) = w(1 : n)T 4.2.2 ] ⎡V (1 : n, i )⎤ 01xn ⎢ = w(1 : n)T V (1 : n, i ) . ⎥ ⎣ 0 nx1 ⎦ w = w − H (i, j )V (:, i ) i > 1 , j > 1 . ⎡V (1 : n, i )⎤ ⎡ w(1 : n) − H (i, j ) JV (1 : n, j )⎤ ⎡ w(1 : n) ⎤ ⎡ w(1 : n)⎤ ⎥=⎢ ⎥. ⎢ w(n + 1 : 2n)⎥ = ⎢ 0 ⎥ − H (i, j ) ⎢ 0 0 nx1 nx1 ⎣ ⎦ ⎣ n ⎦ ⎣ ⎦ ⎣ ⎦ 4.3 s =|| w || 2 . s =|| w || 2 =|| w(1 : n) || 2 . 4.5 H ( j + 1, j ) = s , j > 1 . 4.6 V (:, j + 1) = w / s , j > 1 . ⎡ w(1 : n) / s ⎤ ⎡ V (1 : n, j + 1) ⎤ ⎡ w(1 : n)⎤ ⎥. ⎢V (n + 1 : 2n, j + 1)⎥ = ⎢ 0 ⎥ / s = ⎢ 0 n n ⎣ ⎦ ⎣ ⎦ ⎣ ⎦ El siguiente algoritmo calcula el vector yi +1 de la expresión ( 4.31 ) mediante una adaptación a bloques del Algoritmo 4.9, minimizando los costes computacionales y de almacenamiento. 156 Capítulo 4: Linealización a Trozos yi +1 = dlaok 2( J , f , yi , ∆t , p, tol , c1 , c2 ) . Entradas: Matriz J ∈ ℜ nxn , vector f ∈ ℜ n , yi ∈ ℜ n , incremento de tiempo ∆t ∈ ℜ , dimensión p ∈ Z + del subespacio de Krylov, tolerancia tol ∈ ℜ + , vectores c1 , c2 ∈ ℜ q que contienen los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación de Padé de la función exponencial. Salida: 1 2 3 4 5 6 7 8 9 Vector yi +1 ∈ ℜ n de la expresión ( 4.31 ). β =|| f ||2 Si β == 0 2.1 Salir V (1 : n,1) = 0 n V (1 : n,2) = f / β H (1,1) = 0 ; H (2,1) = ∆t J = J∆t Para j = 2 : p w = JV (1 : n, j ) 7.1 H (1, j ) = 0 7.2 7.3 Para i = 2 : j 7.3.1 H (i, j ) = wT V (1 : n, i ) 7.3.2 w = w − H (i, j )V (1 : n, i ) s =|| w || 2 7.4 7.5 Si s < tol 7.5.1 p = j 7.5.2 Salir del bucle 7.6 H ( j + 1, j ) = s 7.7 V (1 : n, j + 1) = w / s H (1 : p,1 : p ) = dlaexp( H (1 : p,1 : p ), c1 ,c 2 ) (Algoritmo 4.3) yi +1 = yi + βV (1 : n,1 : p) H (1 : p,1) Algoritmo 4.17: Calcula la solución aproximada en el instante t i +1 de una EDO autónoma mediante la modificación a bloques del Algoritmo 4.9. El coste computacional aproximado del algoritmo anterior es 2n( p − 1)(n + p) + 2(q + j H p + 1 / 3) p 3 flops, siendo j H p = max(0,1 + int(log 2 (|| H p ||))) . A continuación se presenta el algoritmo completo que resuelve EDOs autónomas basada en la linealización a trozos mediante los subespacios de Krylov. 157 Capítulo 4: Linealización a Trozos y = dgeedolka(t,data, x0 , p, tol , q) . Entradas: Vector de tiempos t ∈ ℜ l +1 , función data que calcula f ( y ) ∈ ℜ n y J (t , y ) ∈ ℜ nxn , vector inicial x0 ∈ ℜ n , dimensión p ∈ Z + del subespacio de Krylov, tolerancia tol ∈ ℜ + , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salidas: Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) y 0 = x0 Para i = 0 : l − 1 3.1 [ J , f ] = data (ti , yi ) 1 2 3 3.2 3.3 ∆t = ti +1 − ti yi +1 = dlaok 2( J , f , yi , ∆t , tol , c1 , c2 ) (Algoritmo 4.17) Algoritmo 4.18. Resolución de EDOs autónomas mediante el método de linealización a trozos basado en los subespacios de Krylov. 4.3 Métodos de Linealización a Trozos de EDMRs 4.3.1 Resolución de EDMRs con Coeficientes Variables Sea la EDMR ( 4.32 ) X ' (t ) = A21 (t ) + A22 (t ) X (t ) − X (t ) A11 (t ) − X (t ) A12 (t ) X (t ) , t0 ≤ t ≤ t f , con valor inicial X (t 0 ) = X 0 ∈ ℜ mxn , donde A11 (t ) ∈ ℜ nxn , A12 (t ) ∈ ℜ nxm , A21 (t ) ∈ ℜ mxn y A22 (t ) ∈ ℜ mxm . Al aplicar la función vec a la EDMR ( 4.32 ), se obtiene la EDO ( 4.33 ) x' = f (t , x) , x0 = vec( X 0 ) , x = x(t ) ∈ ℜ mn , siendo ( 4.34 ) f (t , x) = vec( A21 (t ) + A22 (t ) X − XA11 (t ) − XA12 (t ) X ) , o bien, utilizando la Propiedad 6.7 y la Propiedad 6.8 del producto de Kronecker, ( 4.35 ) f (t , x) = vec( A21 (t )) + [ I n ⊗ A22 (t ) − A11T (t ) ⊗ I m ]x − [ I n ⊗ ( XA12 (t ))]x o ( 4.36 ) f (t , x) = vec( A21 (t )) + [ I n ⊗ A22 (t ) − A11T (t ) ⊗ I m ]x − [( A12 (t ) X ) T ⊗ I m ]x . Supóngase que las segundas derivadas de las funciones de matrices Aij (t ) , para i, j = 1,2 , están acotadas en [t 0 , t f ] . Considerando la partición t 0 < t1 < L < t l −1 < t l = t f y aplicando la linealización a trozos, se obtiene el conjunto de EDLs resultantes de la aproximación lineal de f (t , x) en cada subintervalo, 158 Capítulo 4: Linealización a Trozos ( 4.37 ) y ' (t ) = f i + J i ( y (t ) − yi ) + g i (t − t i ) , t ∈ [t i , t i +1 ] , y (t i ) = yi , i = 0,1,L, l − 1 , siendo f i = vec( A21 (ti ) + A22 (ti )Yi − Yi A11 (ti ) − Yi A12 (ti )Yi ) , ( 4.38 ) ( ) ' ' (ti ) + A22 (ti )Yi − Yi A11' (ti ) − Yi A12' (ti )Yi , Aij' (t ) = ( 4.39 ) g i = vec A21 dAij (t ) dt , i, j = 1,2 . t = ti Según el Teorema 2.10 (página 56), la solución de la EDL ( 4.37 ) es ( 4.40 ) yi +1 = yi + F12( i ) (∆ti ) f i + F13( i ) (∆ti ) g i , donde F12( i ) (∆ti ) y F13(i ) (∆ti ) son, respectivamente, los bloques (1,2) y (1,3) de la exponencial de la matriz e Ci ∆ti , siendo ⎡ Ji Ci = ⎢⎢0 mn ⎢⎣0 mn ( 4.41 ) I mn 0 mn 0 mn 0 mn ⎤ I mn ⎥⎥ , 0 mn ⎥⎦ con ( 4.42 ) Ji = ∂f (ti , yi ) = I n ⊗ Ai − BiT ⊗ I m , ∂x Ai = A22 (t i ) − Yi A12 (t i ) , Bi = A11 (t i ) + A12 (t i )Yi . Aplicando el operador mat mxn en la expresión ( 4.40 ), se tiene que la solución aproximada en el instante t i +1 de la EDMR ( 4.32 ) se puede obtener como ( 4.43 ) Yi +1 = Yi + mat mxn ( F12(i ) (∆ti ) f i + F13( i ) (∆ti ) g i ) . A continuación se presenta un algoritmo básico que resuelve EDMRs con coeficientes variables basado en la linealización a trozos. 159 Capítulo 4: Linealización a Trozos Y = dgedmrlgv(t , data, datad , X 0 ) Entradas: Vector de tiempos t ∈ ℜl +1 , matrices A11 (t ) ∈ ℜ nxn , A12 (t ) ∈ ℜ nxm , A21 (t ) ∈ ℜ mxn , matrices coeficiente de la EDMR ' ' A21 (t ) ∈ ℜ mxn , A22 (t ) ∈ ℜ mxm , matriz inicial Salida: coeficiente de la EDMR A22 (t ) ∈ ℜ mxm , derivadas de las A11' (t ) ∈ ℜ nxn , A12' (t ) ∈ ℜ nxm , X 0 ∈ ℜ mxn . Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . Y0 = X 0 Para i = 0 : l − 1 2.1 f = vec( A21 (ti ) + A22 (ti )Yi − Yi A11 (ti ) − Yi A12 (ti )Yi ) 1 2 2.2 2.3 2.4 ' ' g = vec( A21 (ti ) + A22 (ti )Yi − Yi A11' (ti ) − Yi A12' (ti )Yi ) A = A22 (ti ) − Yi A12 (ti ) B = A11 (ti ) + A12 (ti )Yi 2.5 J = I n ⊗ A − BT ⊗ I m 2.6 2.7 2.8 2.9 I mn ⎡ J C = ⎢⎢0 mn 0 mn ⎢⎣0 mn 0 mn ∆ti = ti +1 − ti 0 mn ⎤ I mn ⎥⎥ 0 mn ⎥⎦ F = e C∆ti Yi +1 = Yi + mat mxn ( F12 f i + F13 gi ) (véase ( 4.43 )) Algoritmo 4.19: Resolución de EDMRs con coeficientes variables basada en la linealización a trozos. El problema del algoritmo anterior son los elevados costes computacionales y de almacenamiento necesarios para realizarlo. En los siguientes subapartados se presentan tres métodos que calculan la matriz Yi +1 de la expresión ( 4.43 ), reduciendo dichos costes. 4.3.1.1 Método Basado en los Aproximantes Diagonales de Padé Una forma de resolver la EDMR ( 4.32 ) se basa en el teorema que aparece en este subapartado. Lema 4.1 ([Bern05], página 422]) Sean A ∈ ℜ mxm y B ∈ ℜ nxn , entonces e I n ⊗ A+ B ⊗ I m = e B ⊗ e A . Teorema 4.3. La matriz Yi +1 que aparece en la expresión ( 4.43 ), solución aproximada en el instante ti +1 de la EDMR ( 4.32 ), se puede calcular como ( 4.44 ) Yi +1 = Yi + ( F12(i ) (∆ti ) + H13( i ) (∆ti ))( F22( i ) (∆ti )) −1 , 160 Capítulo 4: Linealización a Trozos donde F12( i ) (∆ti ) y F22( i ) (∆ti ) son, respectivamente, los bloques (1,2) y (2,2) de la matriz e Ci ∆ti , con ⎡ A Ci = ⎢ i ⎣0 nxm ( 4.45 ) Fi ⎤ , Bi ⎥⎦ y H 13( i ) (∆t i ) el bloque (1,3) de la matriz e Di ∆ti , con ( 4.46 ) ⎡ Ai Di = ⎢⎢0 nxm ⎢⎣0 nxm Gi Bi 0 nxn 0 mxn ⎤ I n ⎥⎥ , Bi ⎥⎦ siendo Fi = A21 (ti ) + A22 (ti )Yi − Yi A11 (ti ) − Yi A12 (ti )Yi , ' ' Gi = A21 (ti ) + A22 (ti )Yi − Yi A11' (ti ) − Yi A12' (ti )Yi , Ai = A22 (ti ) − Yi A12 (t i ) , Bi = A11 (t i ) + A12 (t i )Yi . Demostración. Al aplicar la linealización a trozos a la EDMR ( 4.32 ) se obtiene en [t i , t i +1 ] la EDL y ' (t ) = f i + J i ( y (t ) − yi ) + g i (t − t i ) , y (t i ) = yi que tiene como solución analítica t y (t ) = yi + ∫ e J i ( t −τ ) [ f i + g i (τ − t i )]dτ . ti Si se realiza el cambio de variable s = τ − ti , y se define θ = t − ti , entonces ds = dτ , t − τ = t − s − ti = θ − s , por lo que, aplicando el lema anterior, se tiene que 161 Capítulo 4: Linealización a Trozos θ y (t ) = yi + ∫ e J i (θ − s ) 0 θ f i ds + ∫ e J i (θ − s ) g i sds 0 θ = yi + ∫ e ( I n ⊗ Ai − Bi 0 θ ( = yi + ∫ e T ⊗ I m )(θ − s ) − BiT (θ − s ) θ f i ds + ∫ e ( I n ⊗ Ai − Bi T ⊗ I m )(θ − s ) g i sds 0 ⊗e Ai (θ − s ) 0 ) f ds + ∫ (e θ − BiT (θ − s ) i ) ⊗ e Ai (θ −s ) g i sds. 0 Por tanto, si se define Fi = mat mxn ( f i ) y Gi = mat mxn ( g i ) , entonces, según la Propiedad 6.8, se tiene ( 4.47 ) θ θ 0 0 Y (t ) = Yi + ∫ e Ai (θ − s ) Fi e − Bi (θ − s ) ds + ∫ e Ai (θ − s ) Gi e − Bi (θ − s ) sds . Para calcular la primera integral de la expresión anterior, se considera la matriz triangular superior a bloques definida en ( 4.45 ), ⎡ A Ci = ⎢ i ⎣0 nxm Fi ⎤ , Bi ⎥⎦ y la exponencial de la matriz Ciθ , e Ciθ ⎡ F11(i ) (θ ) F12( i ) (θ )⎤ =⎢ ⎥. F22( i ) (θ )⎦ ⎣ 0 nxm Derivando respecto de θ en ambos miembros de la igualdad anterior, se tiene que de Ciθ = Ce Ciθ , dθ por lo que ( 4.48 ) ⎡ dF11( i ) (θ ) ⎢ ⎢ dθ ⎢ 0 nxm ⎣⎢ dF12(i ) (θ ) ⎤ ⎥ dθ ⎥ = ⎡ Ai (i ) dF22 (θ ) ⎥ ⎢⎣0 nxm dθ ⎦⎥ Fi ⎤ ⎡ F11( i ) (θ ) F12( i ) (θ )⎤ ⎢ ⎥ Bi ⎥⎦ ⎣ 0 nxm F22( i ) (θ )⎦ ⎡ Ai F11( i ) (θ ) =⎢ ⎣ 0 nxm Ai F12( i ) (θ ) + Fi F22( i ) (θ )⎤ ⎥. Bi F22(i ) (θ ) ⎦ Igualando los bloques (1,1), (1,2) y (2,2) de ambos miembros de la ecuación anterior, y teniendo en cuenta que e Cθ θ =0 = I m+n , se obtienen las siguientes EDMLs ( 4.49 ) dF11(i ) (θ ) = Ai F11( i ) (θ ) , F11( i ) (0) = I m , dθ ( 4.50 ) dF22(i ) (θ ) = Bi F22( i ) (θ ) , F22( i ) (0) = I n , dθ 162 Capítulo 4: Linealización a Trozos ( 4.51 ) dF12(i ) (θ ) = Ai F12(i ) (θ ) + Fi F22( i ) (θ ) , F12( i ) (0) = 0 mxn . dθ Resolviendo en primer lugar las EDMLs ( 4.49 ) y ( 4.50 ), se tiene que F11( i ) (θ ) = e Aiθ , F22( i ) (θ ) = e Biθ . Sustituyendo F22( i ) (θ ) = e Biθ en ( 4.51 ), se obtiene la EDML dF12(i ) (θ ) = Ai F12( i ) (θ ) + Fi e Biθ , F12( i ) (0) = 0 mxn , dθ por lo tanto θ F12( i ) (θ ) = ∫ e Ai (θ − s ) Fi e Bi s ds . ( 4.52 ) 0 Para calcular la segunda integral que aparece en la expresión ( 4.47 ), se considera la matriz triangular superior a bloques definida en ( 4.46 ), ⎡ Ai Di = ⎢⎢0 nxm ⎢⎣0 nxm 0 mxn ⎤ I n ⎥⎥ , Bi ⎥⎦ Gi Bi 0 nxn y la exponencial de la matriz Diθ , e Diθ ( 4.53 ) ⎡ H 11( i ) (θ ) H 12( i ) (θ ) H 13(i ) (θ )⎤ ⎢ ⎥ (i ) (i ) = ⎢ 0 nxm (θ ) H 23 (θ )⎥ , H 22 ⎢ 0 nxm 0 nxn H 33(i ) (θ )⎥⎦ ⎣ siendo H (jki ) (θ ) , 1 ≤ j ≤ k ≤ 3 , matrices de dimensiones conformes a la expresión anterior, dependientes del parámetro θ . Como de Diθ = Ce Diθ , e Diθ dθ θ =0 = I m+2 n , entonces ⎡ dH 11( i ) (θ ) ⎢ ⎢ dθ ⎢ 0 nxm ⎢ ⎢ ⎢ 0 nxm ⎣ dH 12(i ) (θ ) dθ (i ) dH 22 (θ ) dθ 0 nxn dH 13( i ) (θ ) ⎤ ⎥ dθ ⎥ ⎡ Ai (i ) dH 23 (θ ) ⎥ ⎢ = 0 nxm dθ ⎥ ⎢ dH 33( i ) (θ ) ⎥ ⎢⎣0 nxm ⎥ dθ ⎦ ⎡ Ai H 11( i ) (θ ) ⎢ = ⎢ 0 nxm ⎢ 0 nxm ⎣ Gi Bi 0 nxn (i ) Ai H 12( i ) (θ ) + Gi H 22 (θ ) (i ) Bi H 22 (θ ) 0 nxn 0 mxn ⎤ ⎡ H 11( i ) (θ ) H 12( i ) (θ ) H 13( i ) (θ )⎤ ⎢ ⎥ (i ) (i ) I n ⎥⎥ ⎢ 0 nxm H 22 (θ ) H 23 (θ )⎥ Bi ⎥⎦ ⎢⎣ 0 nxm H 33( i ) (θ )⎥⎦ 0 nxn (i ) Ai H 13( i ) (θ ) + Gi H 23 (θ )⎤ ⎥ (i ) (i ) Bi H 23 (θ ) + H 33 (θ ) ⎥. ⎥ Bi H 33( i ) (θ ) ⎦ 163 Capítulo 4: Linealización a Trozos Igualando los bloques correspondientes de ambos miembros de la ecuación anterior, se tienen las EDMLs ( 4.54 ) dH 11( i ) (θ ) = Ai H 11( i ) (θ ) , H 11( i ) (0) = I m , dθ ( 4.55 ) (i ) dH 22 (θ ) (i ) (i ) = Bi H 22 (θ ) , H 22 (0) = I n , dθ ( 4.56 ) dH 33( i ) (θ ) = Bi H 33( i ) (θ ) , H 33(i ) (0) = I n , dθ ( 4.57 ) dH 12(i ) (θ ) (i ) = Ai H 12( i ) (θ ) + Gi H 22 (θ ) , H 12(i ) (0) = 0 mxn , dθ ( 4.58 ) (i ) dH 23 (θ ) (i ) (i ) = Bi H 23 (θ ) + H 33( i ) (θ ) , H 23 (0) = 0 nxn , dθ ( 4.59 ) dH 13(i ) (θ ) (i ) = Ai H 13( i ) (θ ) + Gi H 23 (θ ) , H 13( i ) (0) = 0 mxn . dθ Resolviendo las EDMLs ( 4.54 ), ( 4.55 ) y ( 4.56 ), se tiene que H 11( i ) (θ ) = e Aiθ , (i ) H 22 (θ ) = e Biθ , H 33(i ) (θ ) = e Biθ . (i ) (θ ) = e Biθ en ( 4.57 ), se obtiene la EDML Sustituyendo H 22 dH 12( i ) (θ ) = Ai H 12( i ) (θ ) + Gi e Biθ , H 12( i ) (0) = 0 mxn , dθ por lo tanto, θ H (θ ) = ∫ e Ai (θ − s ) Gi e Bi s ds . (i ) 12 o Sustituyendo H 33(i ) (θ ) = e Biθ en ( 4.58 ), se obtiene la EDML (i ) dH 23 (θ ) (i ) (i ) = Bi H 23 (θ ) + e Biθ , H 23 (θ ) = 0 nxn , dθ por lo que resolviéndola se tiene que (i ) H 23 (θ ) = e Biθ θ . (i ) (θ ) = e Biθ θ en ( 4.59 ), se obtiene la EDML Por último, sustituyendo H 23 dH 13( i ) (θ ) = Ai H 13( i ) (θ ) + Gi e Biθ θ , H 13( i ) (0) = 0 mxn , dθ cuya solución viene dada por 164 Capítulo 4: Linealización a Trozos θ ( 4.60 ) H (θ ) = ∫ e Ai (θ − s ) Gi e Bi s sds . (i ) 13 0 Teniendo en cuenta las expresiones ( 4.47 ), ( 4.52 ) y( 4.60 ), se tiene que ( 4.61 ) (i ) Y (t ) = Yi + F12( i ) (θ )[ F22( i ) (θ )]−1 + H 13( i ) (θ )[ H 22 (θ )]−1 , y como además (i ) H 22 (θ ) = F22( i ) (θ ) = e Biθ , entonces Y (t ) = Yi + [ F12( i ) (θ ) + H 13( i ) (θ )][ F22( i ) (θ )]−1 . Por último, si en la expresión ( 4.44 ) se sustituye t por t i +1 , resulta ( 4.62 ) Yi +1 = Yi + [ F12( i ) (∆t i ) + H 13( i ) (∆t i )][ F22( i ) (∆t i )]−1 , siendo ∆t i = t i +1 − t i , con lo que queda demostrado el teorema. Puesto que los bloques diagonales (1,1) y (2,2) de las matrices Ci y Di que aparecen en las expresiones ( 4.45 ) y ( 4.46 ) son iguales, entonces los bloques diagonales (1,1) y (2,2) de las matrices e Ci ∆t y e Di ∆t son iguales, por lo que es posible una adaptación a bloques del Algoritmo 4.3 que permita calcular a la vez F12( i ) (∆ti ) y H 13(i ) (∆ti ) . Realizando un razonamiento semejante al utilizado en la obtención del Algoritmo 4.4, se deduce el siguiente algoritmo. 165 Capítulo 4: Linealización a Trozos Yi +1 = dlabp3( A, B, F , G, Yi , ∆t , c1 , c2 ) . Entradas: Matriz A ∈ ℜ mxm , matriz B ∈ ℜ nxn , matriz F ∈ ℜ mxn , matriz G ∈ ℜ mxn , matriz Yi ∈ ℜ mxn , incremento de tiempo ∆t ∈ ℜ , vectores c1 , c2 ∈ ℜ q coeficientes de los términos de grado mayor que 0 de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salida: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Matriz Yi +1 ∈ ℜ mxn de la expresión ( 4.44 ). norA =|| A ||∞ ; norB =|| B ||∞ ; norF =|| F ||∞ ; norG =|| G ||∞ nor = max(norA + norG, norB + 1) ; nor = ∆t max(nor , norA + norF ) ∆t j = max(0,1 + int(log 2 (nor ))) ; s = j 2 A = sA ; B = sB ; F = sF ; G = sG X 11 = A ; X 12 = G ; Y12 = F ; X 22 = B ; X 13 = 0 mxn ; X 23 = sI n N11 = I m + c1 (1) X 11 ; N12 = c1 (1) X 12 ; M 12 = c1 (1)Y12 N13 = c1 (1) X 13 ; N 22 = I n + c1 (1) X 22 ; N 23 = c1 (1) X 23 D11 = I m + c2 (1) X 11 ; D12 = c2 (1) X 12 ; P12 = c2 (1)Y12 D13 = c2 (1) X 13 ; D22 = I n + c2 (1) X 22 ; D23 = c2 (1) X 23 Para k = 2 : q X 11 = AX 11 ; X 12 = AX 12 + GX 22 ; Y12 = AX 12 + FX 22 10.1 X 13 = AX 13 + GX 23 ; X 23 = BX 23 + sX 22 ; X 22 = BX 22 10.2 N11 = N11 + c1 (k ) X 11 ; N12 = N12 + c1 (k ) X 12 ; M 12 = M 12 + c1 (k ) X 12 10.3 N13 = N13 + c1 (k ) X 13 ; N 22 = N 22 + c1 (k ) X 22 ; N 23 = N 23 + c1 (k ) X 23 10.4 D11 = D11 + c2 (k ) X 11 ; D12 = D12 + c 2 (k ) X 12 ; P12 = P12 + c2 (k ) X 12 10.5 D13 = D13 + c2 (k ) X 13 ; D22 = D22 + c2 (k ) X 22 ; D23 = D23 + c2 (k ) X 23 10.6 Calcular F11 resolviendo la ecuación D11 F11 = N11 Calcular F22 resolviendo la ecuación D22 F22 = N 22 Calcular F12 resolviendo la ecuación D11 F12 = N12 − D12 F22 Calcular G12 resolviendo la ecuación D11G12 = M 12 − E12 F22 Calcular F23 resolviendo la ecuación D22 F23 = N 23 − D23 F22 Calcular F13 resolviendo la ecuación D11 F13 = N13 − D12 F23 − D13 F22 Para k = 1 : j 17.1 F13 = F11 F13 + F12 F23 + F13 F22 ; F12 = F11 F12 + F12 F22 2 17.2 G12 = X 11G12 + G12 X 22 ; F23 = F22 F23 + F23 F22 ; F11 = F11 ; F22 = F22 18 Calcular Yi +1 resolviendo la ecuación F22Yi +1 = G12 + F13 19 Yi +1 = Yi +1 + Yi 2 Algoritmo 4.20: Calcula la solución aproximada en el instante t i +1 de una EDMR con coeficientes variables mediante la modificación a bloques del Algoritmo 4.3. El coste computacional aproximado del algoritmo anterior es 166 Capítulo 4: Linealización a Trozos (2m 3 + 4m 2 n + 8mn 2 + 4n 3 )q + (2m 3 + 3m 2 n + 8mn 2 + 6n 3 ) j 2 4 + m 3 + 2m 2 n − 6mn 2 + m 3 flops. 3 3 El siguiente algoritmo resuelve EDMRs con coeficientes variables mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé. Y = dgedmrlpv(t , data, datad , X 0 , q) . Entradas: Vector de tiempos t ∈ ℜ l +1 , función data(t ) que calcula las matrices coeficiente de la EDMR A11 (t ) ∈ ℜ nxn , A12 (t ) ∈ ℜ nxm , A21 (t ) ∈ ℜ mxn , A22 (t ) ∈ ℜ mxm , función datad (t ) que calcula las derivadas de las matrices ' (t ) ∈ ℜ mxn , coeficiente de la EDMR A11' (t ) ∈ ℜ nxn , A12' (t ) ∈ ℜ nxm , A21 ' A22 (t ) ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé. Salida: 1 2 3 Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) Y0 = X 0 Para i = 0 : l − 1 3.1 [ A11 , A12 , A21 , A22 ] = data (t ) A22 = A22 − Yi A12 3.2 G = A21 + A22Yi 3.3 G = G − Yi A11 3.4 [ A11 , A12 , A21 , A22 ] = datad (t ) 3.5 A22 = A22 − Yi A12 3.6 F = A21 + A22Yi 3.7 F = F − Yi A11 3.8 A11 = A11 + A12Yi 3.9 3.10 ∆t = ti +1 − ti 3.11 Yi +1 = dlabp3( A22 , A11 , F , G, Yi , ∆t , c1 , c2 ) . Algoritmo 4.21: Resolución de EDMRs con coeficientes variables mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé. El coste aproximado por iteración del algoritmo anterior es 8m 2 n + 6mn 2 +coste( data )+coste( datad )+coste(Algoritmo 4.20) flops. 4.3.1.2 Método Basado en la Ecuación Conmutante El método que se presenta en este subapartado es consecuencia del siguiente teorema, cuya demostración está basada en la ecuación conmutante. 167 Capítulo 4: Linealización a Trozos Teorema 4.4. Si las matrices Ai y Bi que aparecen en ( 4.42 ) no tienen valores propios en común, entonces la matriz Yi +1 que aparece en la expresión ( 4.43 ), solución aproximada en el instante ti +1 de la EDMR ( 4.32 ), se puede calcular como Yi +1 = Yi + W f + Wg , ( 4.63 ) siendo W f la solución de la ecuación matricial de Sylvester AiW f − W f Bi = e Ai ∆t i Fi e − Bi ∆t i − Fi ( 4.64 ) y Wg la solución de la ecuación matricial de Sylvester AiW g − W g Bi = Wi − Gi ∆t i , ( 4.65 ) donde Wi es la solución de la ecuación matricial de Sylvester AiWi − Wi Bi = e Ai ∆t i Gi e − Bi ∆t i − Gi . ( 4.66 ) Demostración. Por la Propiedad 2.1, las matrices Ci ∆ti (expresión ( 4.41 )) y eCi ∆ti conmutan, luego ⎡ Ji ⎢0 ⎢ mn ⎢⎣0 mn I mn 0 mn 0 mn 0 mn ⎤ ⎡e J i ∆ti ⎢ I mn ⎥⎥ ⎢ 0 mn 0 mn ⎥⎦ ⎢⎣ 0 mn F12(i ) I mn 0 mn F13(i ) ⎤ ⎡e J i ∆ti ⎥ ⎢ I mn ∆ti ⎥ = ⎢ 0 mn I mn ⎥⎦ ⎢⎣ 0 mn F12( i ) I mn 0 mn F13(i ) ⎤ ⎡ J i ⎥ I mn ∆ti ⎥ ⎢⎢0 mn I mn ⎥⎦ ⎢⎣0 mn I mn 0 mn 0 mn 0 mn ⎤ I mn ⎥⎥ , 0 mn ⎥⎦ en donde se ha simplificado la notación escribiendo F12( i ) y F13(i ) , en lugar de F12(i ) (∆ti ) y F13(i ) (∆ti ) , respectivamente. Igualando los bloques (1,2) de ambos miembros de la ecuación, se obtiene J i F12(i ) + I mn = e J i ∆ti , J i F12( i ) = e J i ∆ti − I mn , y de aquí ( 4.67 ) J i F12( i ) f i = e J i ∆ti f i − f i . De igual modo, igualando los bloques (1,3), resulta que J i F13(i ) + I mn ∆t i = F12( i ) , J i F13(i ) = F12(i ) − I mn ∆t i , o bien ( 4.68 ) J i F13(i ) gi = F12( i ) gi − ∆ti gi . Si se definen ( 4.69 ) w f = F12( i ) fi y W f = mat mxn ( w f ) , 168 Capítulo 4: Linealización a Trozos y se desarrolla la parte izquierda de la ecuación ( 4.67 ) se deduce, por la Propiedad 6.8, que ( 4.70 ) ( ) J i F12(i ) f i = J i w f = I n ⊗ Ai − BiT ⊗ I m w f = vec(AiW f − W f Bi ), Desarrollando la parte derecha de la ecuación ( 4.67 ), y teniendo en cuenta el Lema 4.1 y la Propiedad 6.8, se obtiene T ( 4.71 ) ( ) e J i ∆ti f i − f i = e (I n ⊗ Ai − Bi ⊗I m )∆ti f i − f i = e − Bi ∆ti ⊗ e Ai ∆ti f i − f i ( ) T = vec e Ai ∆ti Fi e − Bi ∆ti − Fi , siendo Fi = mat mxn ( f i ) . Teniendo en cuenta ( 4.67 ) y las igualdades ( 4.70 ) y ( 4.71 ), se tiene ( ) vec(AiW f − W f Bi ) = vec e Ai ∆ti Fi e − Bi ∆ti − Fi , por lo que W f se puede calcular resolviendo la ecuación matricial de Sylvester ( 4.64), AiW f − W f Bi = e Ai ∆t i Fi e − Bi ∆t i − Fi . De igual modo, si se definen wi = F12( i ) gi y Wi = mat mxn ( wi ) , entonces la matriz Wi se puede calcular mediante la resolución de la ecuación matricial de Sylvester ( 4.66 ), AiWi − Wi Bi = e Ai ∆t i Gi e − Bi ∆t i − Gi , siendo Gi = mat mxn ( g i ) . Realizando un desarrollo similar para la expresión ( 4.68 ), se tiene que si se definen ( 4.72 ) wg = F13(i ) g i y W g = mat mxn ( wg ) , entonces Wg se puede obtener resolviendo la ecuación matricial de Sylvester ( 4.65 ), ( 4.73 ) AiW g − W g Bi = Wi − Gi ∆t i . Teniendo en cuenta las expresiones ( 4.43 ), ( 4.69 ) y ( 4.72 ), se tiene Yi +1 = Yi + mat mxn ( F12( i ) f i ) + mat mxn ( F13( i ) g i ) = Yi + W f + Wg , con lo que queda demostrado el teorema. Obsérvese que para calcular la matriz Yi +1 del teorema anterior es necesario resolver las ecuaciones matriciales de Sylvester ( 4.64 ), ( 4.65 ) y ( 4.66 ) con las mismas matrices coeficiente Ai y Bi . Teniendo en cuenta este hecho, se puede reducir el coste computacional para calcular Yi +1 del modo que a continuación se muestra. Sean 169 Capítulo 4: Linealización a Trozos Ai = Qa Ai QaT , Bi = Qb Bi QbT , respectivamente, las descomposiciones reales de Schur de las matrices Ai y Bi , con Qa y Qb matrices ortogonales, y Ai y Bi matrices casi triangulares superiores. Sustituyendo las expresiones anteriores en la ecuación ( 4.64 ), resulta Qa Ai QaT W f − W f Qb Bi QbT = Qa e Ai ∆ti QaT Fi Qb e − Bi ∆ti QbT − Fi , por lo que Ai QaT W f Qb − QaT W f Qb Bi = e Ai ∆ti QaT Fi Qb e − Bi ∆ti − QaT Fi Qb . Llamando X = QaT W f Qb , F = QaT Fi Qb , E a = e Ai ∆ti , Eb = e − Bi ∆ti . se obtiene la ecuación casi triangular superior de Sylvester ( 4.74 ) Ai X − XBi = E a FEb − F . Aplicando los mismos pasos a la ecuación ( 4.66 ), se deduce que Qa Ai QaT Wi − Wi Qb Bi QbT = Qa e Ai ∆ti QaT Gi Qb e − Bi ∆ti QbT − Gi , Ai QaT Wi Qb − QaT Wi Qb Bi = e A1∆ti QaT Gi Qb e − Bi ∆ti − QaT Gi Qb , Ai Z − ZBi = E a GEb − G , siendo Z = QaT Wi Qb , G = QaT Gi Qb , E a = e Ai ∆ti , Eb = e − Bi ∆ti . Por último, la ecuación matricial de Sylvester ( 4.65 ) queda como Qa Ai QaT Wg − Wg Qb Bi QbT = Wi − Gi ∆ti , Ai QaT Wg Qb − QaT Wg Qb Bi = QaT Wi Qb − QaT Gi Qb ∆ti , ( 4.75 ) AiY − YBi = Z − G∆ti , siendo 170 Capítulo 4: Linealización a Trozos Y = QaT Wg Qb , Z = QaT Wi Qb , G = QaT Gi Qb . Por lo tanto Yi +1 = Yi + W f + Wg = Yi + Qa XQbT + QaYQbT = Yi + Qa ( X + Y )QbT . El siguiente algoritmo calcula la matriz Yi +1 de la expresión ( 4.63), según el método descrito en los párrafos anteriores. Yi +1 = dlabc3( A, B, F , G, Yi , ∆t , c1 , c2 ) . Entradas: Matriz A ∈ ℜ mxm , matriz B ∈ ℜ nxn , matriz F ∈ ℜ mxn , matriz G ∈ ℜ mxn , matriz Yi ∈ ℜ mxn , incremento de tiempo ∆t ∈ ℜ , vectores c1 , c2 ∈ ℜ q que contienen a los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salida: Matriz Yi +1 ∈ ℜ mxn (véase expresión ( 4.63)). 1 2 3 4 [Qa , A] = schur ( A) ( descomposición real de Schur de la matriz A ) [Qb , B ] = schur ( B ) (descomposición real de Schur de la matriz B ) Ea = dqtexppad ( A∆t , c1 , c2 ) (modificación del Algoritmo 2.1) Eb = dqtexppad ( B∆t , c1 , c2 ) (modificación del Algoritmo 2.1) 5 6 7 8 9 10 11 F = QaT FQb ; F = Ea FEb − F F = dtrsyl ( A,− B, F ) (Algoritmo 3.14) G = QaT GQb ; W = G ; G = Ea GEb − G G = dtrsyl ( A,− B, G ) (Algoritmo 3.14) G = G − W∆t G = dtrsyl ( A,− B, G ) (Algoritmo 3.14) Yi +1 = Yi + Qa (F + G )QbT Algoritmo 4.22: Calcula la solución aproximada en el instante t i +1 de una EDMR con coeficientes variables mediante la ecuación conmutante. Notas: • La exponencial de una matriz casi triangular superior ( dqtexppad ) se puede obtener mediante una modificación del Algoritmo 2.1 para el caso de matrices casi triangulares superiores. Para optimizar el código anterior es necesario que las operaciones con matrices se hagan de tal modo que se explote la estructura casi triangular superior de las mismas. De este modo, el coste del cálculo de la exponencial de una matriz se puede reducir aproximadamente a la mitad, por lo que el coste aproximado del algoritmo anterior es 27m 3 + 11m 2 n + 11nm 2 + 27n 3 +coste(Algoritmo 2.1) flops. 171 Capítulo 4: Linealización a Trozos • Si las matrices A y B Yi +1 = Yi + F∆t + 0.5G (∆t ) 2 . del algoritmo anterior son nulas, entonces • Si las matrices A y B del algoritmo anterior tienen algún valor propio muy cercano, entonces sería conveniente utilizar el Algoritmo 4.20 o el Algoritmo 4.25 que se describe en el siguiente subapartado. A continuación se muestra el algoritmo completo que resuelve EDMRs mediante el método de linealización a trozos basado en la ecuación conmutante. Y = dgedmrlcv(t , data, datad , X 0 , q) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data (t ) que calcula las matrices coeficiente de la EDMR A11 (t ) ∈ ℜ nxn , A12 (t ) ∈ ℜ nxm , A21 (t ) ∈ ℜ mxn , A22 (t ) ∈ ℜ mxm , función datad (t ) que calcula las derivadas de las matrices ' (t ) ∈ ℜ mxn , coeficiente de la EDMR A11' (t ) ∈ ℜ nxn , A12' (t ) ∈ ℜ nxm , A21 ' A22 (t ) ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé. Salida: Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) Y0 = X 0 Para i = 0 : l − 1 3.1 [ A11 , A12 , A21 , A22 ] = data (t i ) 1 2 3 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 A22 = A22 − Yi A12 G = A21 + A22Yi G = G − Yi A11 [ A11 , A12 , A21 , A22 ] = datad (t i ) A22 = A22 − Yi A12 F = A21 + A22Yi F = F − Yi A11 A11 = A11 + A12Yi ∆t = ti +1 − ti Yi +1 = dlabc3( A22 , A11 , F , G, Yi , ∆t , c1 , c2 ) (Algoritmo 4.22) Algoritmo 4.23: Resolución de EDMRs con coeficientes variables mediante el método de linealización a trozos basado en la ecuación conmutante. El coste computacional aproximado por iteración del algoritmo anterior es 8m 2 n + 6mn 2 +coste( data )+coste( datad )+coste(Algoritmo 4.22) flops. 4.3.1.3 Método Basado en los Subespacios de Krylov La matriz Yi +1 de la expresión ( 4.43 ), solución aproximada en el instante t i +1 de la EDMR ( 4.32 ), se puede expresar como ( 4.76 ) Yi +1 = Yi + mat mxn ( F12(i ) (∆t i ) f i + F13(i ) (∆t i ) g i ) = Yi + mat mxn (e Ci ∆ti vi ) , 172 Capítulo 4: Linealización a Trozos siendo ⎡ Ji Ci = ⎢⎢0 mn ⎢⎣0 mn I mn 0 mn 0 mn 0 mn ⎤ I mn ⎥⎥ 0 mn ⎥⎦ y ⎡0 mnx1 ⎤ vi = ⎢⎢ f i ⎥⎥ . ⎢⎣ g i ⎥⎦ El coste de almacenamiento de la matriz Jacobiana J i (véase expresión ( 4.42 ) es excesivamente alto, del orden de (mn) 2 números en coma flotante. Teniendo en cuenta que dicha matriz únicamente es necesaria para calcular el producto matriz por vector que aparece en los algoritmos basados en los subespacios de Krylov, sería interesante realizar dicho cálculo sin la formación explícita de la matriz Jacobiana, reduciendo de esta forma el coste de almacenamiento. El algoritmo que se muestra a continuación calcula el producto J i vi , con vi ∈ ℜ mn , sin formar explícitamente la matriz Jacobiana. w = dlapkv( A, B, v) . Entradas: Matriz A ∈ ℜ mxm , matriz B ∈ ℜ nxn , vector v ∈ ℜ mn . Salida: 1 ( ) Vector w = I n ⊗ A − B T ⊗ I m v ∈ ℜ mn . Para i = 1 : n i1 = (i − 1)m + 1 1.1 i2 = im 1.2 w(i1 : i2 ) = Av(i1 : i2 ) 1.3 1.4 Para j = 1 : n 1.4.1 j1 = ( j − 1)m + 1 1.4.2 j2 = jm 1.4.3 w(i1 : i2 ) = − B( j , i )v( j1 : j2 ) + w(i1 : i2 ) Algoritmo 4.24: Cálculo del producto de la matriz Jacobiana de una EDMR por un vector. El coste computacional aproximado del algoritmo anterior es 2m 2 n + 2mn 2 flops. El siguiente algoritmo calcula la matriz Yi +1 de la expresión ( 4.76 ) mediante una adaptación a bloques del Algoritmo 4.9, minimizando con ello los costes computacionales y de almacenamiento. 173 Capítulo 4: Linealización a Trozos Yi +1 = dlabk 3( A, B, F , G, Yi , ∆t , p, tol , c1 , c2 ) . Entradas: Matriz A ∈ ℜ mxm , matriz B ∈ ℜ nxn , matriz F ∈ ℜ mxn , matriz G ∈ ℜ mn , matriz Yi ∈ ℜ mn , incremento de tiempo ∆t ∈ ℜ , dimensión p ∈ Z + del subespacio de Krylov, tolerancia tol ∈ ℜ + , vectores c1 , c2 ∈ ℜ q que contienen a los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salida: 1 2 3 4 5 6 7 8 Matriz Yi +1 ∈ ℜ mxn de la expresión ( 4.76 ). f = vec( F ) ; g = vec(G ) V (1 : mn,1) = 0 nm ; V (mn + 1 : 2mn,1) = f ; V (2mn + 1 : 3mn,1) = g β =|| V (:,1) ||2 Si β = = 0 Salir del algoritmo V (mn + 1 : 3mn) = V (mn + 1 : 3mn) / β Para j = 1 : p w(1 : mn) = dlapkv( A, B, V (1 : mn, j )) (Algoritmo 4.24) 6.1 w(1 : mn) = w(1 : mn) + V (mn + 1 : 2mn, j ) 6.2 w(mn + 1 : 2mn) = V (2mn + 1 : 3mn, j ) 6.3 6.4 w(2mn + 1 : 3mn) = 0 nm ; w(1 : 2mn) = ∆tw(1 : 2mn) 6.5 Para i = 1 : j 6.5.1 H (i, j ) = wT V (1 : 3mn, i ) ; w = w − H (i, j )V (1 : 3mn, i ) s =|| w2 || 6.6 6.7 Si s < tol 6.7.1 p = j 6.7.2 Salir del bucle 6.8 H ( j + 1, j ) = s 6.9 V (1 : 3mn, j + 1) = w / H ( j + 1, j ) H (1 : p,1 : p ) = dlaexp( H (1 : p,1 : p ), c1 ,c 2 ) (Algoritmo 4.3) Yi +1 = Yi + βmat mxn (V (1 : mn,1 : p) H (1 : p,1)) Algoritmo 4.25: Calcula la solución aproximada en el instante t i +1 de una EDMR con coeficientes variables mediante la modificación a bloques del Algoritmo 4.9. El coste computacional aproximado del algoritmo anterior es 2m 2 np + 2mn 2 p + 6mnp( p + 1) +coste(Algoritmo 4.3) flops. El algoritmo completo que resuelve EDMRs con coeficientes variables basado en los subespacios de Krylov se muestra a continuación. 174 Capítulo 4: Linealización a Trozos Y = dgedmrlkv(t , data, datad , X 0 , p, tol , q) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data (t ) que calcula las matrices coeficiente de la EDMR A11 (t ) ∈ ℜ nxn , A12 (t ) ∈ ℜ nxm , A21 (t ) ∈ ℜ mxn , A22 (t ) ∈ ℜ mxm , función datad (t ) que calcula las derivadas de las matrices ' (t ) ∈ ℜ mxn , coeficiente de la EDMR A11' (t ) ∈ ℜ nxn , A12' (t ) ∈ ℜ nxm , A21 ' A22 (t ) ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn , dimensión p ∈ Z + del subespacio de Krylov, tolerancia tol ∈ ℜ + , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé. Salida: Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) Y0 = X 0 Para i = 0 : l − 1 3.1 [ A11 , A12 , A21 , A22 ] = data (ti ) 1 2 3 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 A22 = A22 − Yi A12 G = A21 + A22Yi G = G − Yi A11 [ A11 , A12 , A21 , A22 ] = datad (ti ) A22 = A22 − Yi A12 F = A21 + A22Yi F = F − Yi A11 A11 = A11 + A12Yi ∆t = ti +1 − ti Yi +1 = dlabk 3( A22 , A11 , F , G, Yi , ∆t , p, tol , c1 , c2 ) Algoritmo 4.26: Resolución de EDMRs con coeficientes variables mediante el método de linealización a trozos basado en los subespacios de Krylov. El coste computacional aproximado por iteración del algoritmo anterior es 8m 2 n + 6mn 2 +coste( data )+coste( datad )+coste(Algoritmo 4.25) flops. 4.3.2 Resolución de EDMRs con Coeficientes Constantes Sea la EDMR con coeficientes constantes ( 4.77 ) X ' (t ) = A21 + A22 X (t ) − X (t ) A11 − X (t ) A12 X (t ), t0 ≤ t ≤ t f , X (t 0 ) = X 0 ∈ ℜ mxn , siendo A11 ∈ R nxn , A12 ∈ R nxm , A21 ∈ R mxn , A22 ∈ R mxm . Aplicando la función vec a la EDMR ( 4.77 ), se obtiene la EDO autónoma ( 4.78 ) x' (t ) = f ( x(t )) , x0 = vec( X 0 ) , x = x(t ) , siendo 175 Capítulo 4: Linealización a Trozos f ( x) = vec( A21 + A22 X − XA11 − XA12 X ) , ( 4.79 ) o bien, utilizando la Propiedad 6.7 y la Propiedad 6.8 del producto de Kronecker, f ( x) = vec( A21 ) + [ I n ⊗ A22 − A11T ⊗ I m ]x − [ I n ⊗ ( XA12 )]x ( 4.80 ) o bien f ( x) = vec( A21 ) + [ I n ⊗ A22 − A11T ⊗ I m ]x − [( A12 X ) T ⊗ I m ]x . ( 4.81 ) Como se cumplen las hipótesis del Teorema 2.10 (página 56), considerando la partición t 0 < t1 < L < t l −1 < t l = t f y aplicando la linealización a trozos, se obtiene el conjunto de EDLs resultantes de la aproximación lineal de f (t , x) en cada subintervalo, ( 4.82 ) y ' (t ) = f i + J i ( y (t ) − yi ) , t ∈ [t i , t i +1 ] , y (t i ) = yi , i = 0,1,L, l − 1 . siendo ( 4.83 ) ( 4.84 ) f i = vec( A21 + A22Yi − Yi A11 − Yi A12Yi ) , Ji = ∂f ( yi ) = I n ⊗ Ai − BiT ⊗ I m , ∂x donde ( 4.85 ) Ai = A22 − Yi A12 , Bi = A11 + A12Yi . Aplicando el Teorema 4.2, se tiene que la solución de la EDL ( 4.82 ) es ( 4.86 ) y (t ) = yi + F12(i ) (t − ti ) f i , siendo F12( i ) el bloque (1,2) de la matriz eCiθ , donde ( 4.87 ) ⎡J Ci = ⎢ i ⎣0 mn I mn ⎤ . 0 mn ⎥⎦ En particular, ( 4.88 ) yi +1 = yi + F12( i ) (∆t i ) f i , siendo ∆ti = ti +1 − ti . Por lo tanto, la solución aproximada en el instante t i +1 de la EDMR ( 4.77 ) en el instante ti +1 se puede expresar como ( 4.89 ) Yi +1 = Yi + mat mxn ( F12( i ) (∆t ) vec( F )) . A continuación se presenta un algoritmo, basado en la linealización a trozos, que resuelve EDMRs con coeficientes constantes. 176 Capítulo 4: Linealización a Trozos Y = dgedmrlgc(t , data, X 0 ) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data que obtiene las matrices coeficiente de la EDMR A11 ∈ ℜ nxn , A12 ∈ ℜ nxm , A21 ∈ ℜ mxn , A22 ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn . Salida: Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . [ A11 , A12 , A21 , A22 ] = data () Y0 = X 0 Para i = 0 : l − 1 3.1 A22 = A22 − Yi A12 1 2 3 3.2 3.3 4.4 3.5 F = A21 + A22Yi F = F − Yi A11 A11 = A11 + A12Yi ∆t = ti +1 − ti 3.6 Yi +1 = Yi + mat mxn ( F12( i ) (∆t ) vec( F )) (expresión ( 4.89 )) Algoritmo 4.27: Resolución de EDMRs con coeficientes constantes mediante la linealización a trozos. 4.3.2.1 Método Basado en los Aproximantes Diagonales de Padé Una forma de calcular la matriz Yi +1 de la expresión ( 4.89 ) se basa en el teorema que se presenta a continuación. Teorema 4.5. La matriz Yi +1 que aparece en la expresión ( 4.89 ), solución aproximada en el instante t i +1 de la EDMR con coeficientes constantes ( 4.77 ), se puede calcular utilizando la expresión ( 4.90 ) Yi +1 = Yi + F12(i ) (∆t i )[ F22( i ) (∆t i )]−1 , donde F12(i ) (∆ti ) y F22(i ) (∆ti ) son, respectivamente, los bloques (1,2) y (2,2) de la matriz e Ci ∆ti , con ( 4.91 ) ⎡ A Ci = ⎢ i ⎣0 nxm Fi ⎤ , Bi ⎥⎦ siendo Fi = A21 + A22Yi − Yi A11 − Yi A12Yi , Ai = A22 − Yi A12 , Bi = A11 + A12Yi . Demostración. Al aplicar la linealización a trozos a la EDMR ( 4.77 ) se obtiene en [t i , t i +1 ] la EDL 177 Capítulo 4: Linealización a Trozos y ' (t ) = f i + J i ( y (t ) − y i ) , y (t i ) = yi que tiene como solución analítica t y (t ) = yi + ∫ e J i ( t −τ ) f i dτ . ( 4.92 ) ti Si se realiza el cambio de variable s = τ − ti y se define θ = t − ti , entonces ds = dτ , t − τ = t − s − ti = θ − s , por lo que, aplicando el Lema 4.1, se tiene que la expresión ( 4.92 ) queda como t y (t ) = y i + ∫ e J i ( t −τ ) ( = y i + ∫ e − Bi dτ f i = y i + ∫ e J i (θ − s ) 0 ti θ θ T (θ − s ) θ f i ds = y i + ∫ e ( I n ⊗ Ai − Bi T ⊗ I m )(θ − s ) f i ds 0 ) ⊗ e Ai (θ − s ) f i ds. 0 Por tanto, si se define Fi = mat mxn ( f i ) , entonces, según la Propiedad 6.8, θ ( 4.93 ) Y (t ) = Yi + ∫ e Ai (θ − s ) Fi e − Bi (θ − s ) ds 0 es la solución aproximada de la EDMR ( 4.77 ) en el intervalo [t i , t i +1 ] . Para calcular la integral que aparece en la expresión ( 4.93 ), se considera la matriz triangular superior a bloques definida en ( 4.91 ), ⎡ A Ci = ⎢ i ⎣0 mxn Fi ⎤ , Bi ⎥⎦ y la exponencial de la matriz Ciθ , ⎡ F ( i ) (θ ) F12( i ) (θ )⎤ e Ciθ = ⎢ 11 ⎥. F22( i ) (θ )⎦ ⎣ 0 nxm Derivando respecto de θ en ambos miembros de la igualdad anterior, se tiene que de Ciθ = Ce Ciθ , dθ por lo que 178 Capítulo 4: Linealización a Trozos ( 4.94 ) ⎡ dF11( i ) (θ ) ⎢ ⎢ dθ ⎢ 0 nxm ⎣⎢ dF12(i ) (θ ) ⎤ ⎥ dθ ⎥ = ⎡ Ai dF22(i ) (θ ) ⎥ ⎢⎣0 nxm dθ ⎦⎥ Fi ⎤ ⎡ F11( i ) (θ ) F12( i ) (θ )⎤ ⎢ ⎥ Bi ⎥⎦ ⎣ 0 nxm F22( i ) (θ )⎦ ⎡ A F ( i ) (θ ) = ⎢ i 11 ⎣ 0 nxm Ai F12( i ) (θ ) + Fi F22( i ) (θ )⎤ ⎥. Bi F22(i ) (θ ) ⎦ Igualando los bloques (1,1), (1,2) y (2,2) de ambos miembros de la ecuación anterior y teniendo en cuenta que e Cθ θ =0 = I m+ n , se obtienen las siguientes EDMLs con valores iniciales: ( 4.95 ) dF11(i ) (θ ) = Ai F11( i ) (θ ) , F11( i ) (0) = I m , dθ ( 4.96 ) dF22(i ) (θ ) = Bi F22( i ) (θ ) , F22( i ) (0) = I n , dθ ( 4.97 ) dF12(i ) (θ ) = Ai F12(i ) (θ ) + Fi F22( i ) (θ ) , F12( i ) (0) = 0 mxn . dθ Resolviendo en primer lugar las EDMLs( 4.95 ) y ( 4.96 ), se tiene que F11( i ) (θ ) = e Aiθ , F22( i ) (θ ) = e Biθ . ( 4.98 ) Sustituyendo F22( i ) (θ ) = e Biθ en ( 4.97 ), se obtiene la EDML dF12(i ) (θ ) = Ai F12( i ) (θ ) + Fi e Biθ , F12( i ) (0) = 0 mxn , dθ por lo tanto, (i) 12 F ( 4.99 ) (θ ) = θ ∫e Ai ( θ − s ) Fi e Bi s ds . o Teniendo en cuenta las expresiones ( 4.93 ), ( 4.98 ) y ( 4.99 ), se tiene que θ θ 0 0 ( ) −1 Y (t ) = Yi + ∫ e Ai (θ − s ) Fi e − Bi (θ − s ) ds = Yi + ∫ e Ai (θ − s ) Fi e Bi s dse − Biθ = Yi + F12( i ) (θ ) F22(i ) (θ ) . Por último, si en la anterior expresión se sustituye t por t i +1 , resulta ( 4.100 ) ( Yi +1 = Yi + F12( i ) (∆ti ) F22(i ) (∆ti ) ) −1 , siendo ∆t i = t i +1 − t i , con lo que queda demostrado el teorema. El siguiente algoritmo calcula la matriz Yi +1 de la expresión ( 4.90 ), utilizando una adaptación a bloques del Algoritmo 4.3. 179 Capítulo 4: Linealización a Trozos Yi +1 = dlabp 2( A, B, F , Yi , ∆t , c1 , c2 ) . Entradas: Matriz A ∈ ℜ mxm , matriz B ∈ ℜ nxn , matriz F ∈ ℜ mxn , matriz Yi ∈ ℜ mxn , incremento de tiempo ∆t ∈ ℜ , vectores c1 , c2 ∈ ℜ q que contienen a los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salida: Matriz Yi +1 ∈ ℜ mxn de la expresión ( 4.100 ). ( nor = [ A F ] 2 j = max(0,1 + int(log 2 (nor ))) ∆t s= j 2 A = sA ; B = sB ; F = sF X 11 = A ; X 12 = F ; X 22 = B N11 = I m + c1 (1) X 11 ; N12 = c1 (1) X 12 ; N 22 = I n + c1 (1) X 22 3 4 5 6 7 8 ∞ ; nor = ∆t max nor , [ B I n ] ) 1 ∞ D11 = I m + c2 (1) X 11 ; D12 = c2 (1) X 12 ; D22 = I n + c2 (1) X 22 Para k = 2 : q X 12 = AX 12 + FX 22 ; X 11 = AX 11 ; X 22 = BX 22 8.1 8.2 N11 = N11 + c1 (k ) X 11 ; N12 = N12 + c1 (k ) X 12 ; N 22 = N 22 + c1 (k ) X 22 8.3 D11 = D11 + c2 (k ) X 11 ; D12 = D12 + c2 (k ) X 12 ; D22 = D22 + c2 (k ) X 22 9 Calcular X 11 resolviendo la ecuación D11 X 11 = N11 10 Calcular X 22 resolviendo la ecuación D22 X 22 = N 22 11 Calcular X 12 resolviendo la ecuación D11 X 12 = N12 − D12 X 22 12 Para k = 1 : j 12.1 X 12 = X 11 X 12 + X 12 X 22 2 2 12.2 X 11 = X 11 ; X 22 = X 22 13 Calcular Yi +1 resolviendo la ecuación X 22Yi +1 = X 12 14 Yi +1 = Yi +1 + Yi Algoritmo 4.28: Calcula la solución aproximada en el instante t i +1 de una EDMR con coeficientes constantes mediante la modificación a bloques del Algoritmo 4.3. El coste computacional aproximado en flops del algoritmo anterior es ( 4.101 ) 4 2 (2m 3 + 2m 2 n + 2mn 2 + 2n 3 )(q + j ) + m 3 − 2m 2 n + 2mn 2 + n 3 flops. 3 3 El siguiente algoritmo resuelve EDMRs con coeficientes constantes mediante el método de linealización a trozos con aproximantes diagonales de Padé. 180 Capítulo 4: Linealización a Trozos Y = dgedmrlpc(t , data, X 0 , q ) . Entradas: Instantes de tiempo t i ( 0 ≤ i ≤ l ), función data que obtiene las matrices coeficiente de la EDMR A11 ∈ ℜ nxn , A12 ∈ ℜ nxm , A21 ∈ ℜ mxn , A22 ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salida: 1 2 3 4 Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) [ A11 , A12 , A21 , A22 ] = data () Y0 = X 0 Para i = 0 : l − 1 4.1 A22 = A22 − Yi A12 4.2 4.3 4.4 4.5 4.6 F = A21 + A22Yi F = F − Yi A11 A11 = A11 + A12Yi ∆t = ti +1 − ti Yi +1 = dlabp 2( A22 , A11 , F , Yi , ∆t , c1 , c2 ) (Algoritmo 4.28) Algoritmo 4.29: Resolución de EDMRs con coeficientes constantes mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé. El coste en flops por iteración es 4m 2 n + 4mn 2 +coste(Algoritmo 4.28) flops. 4.3.2.2 Método Basado en la Ecuación Conmutante El método que se describe en este subapartado es consecuencia del siguiente teorema, cuya demostración está basada en la ecuación conmutante. Teorema 4.6. Si las matrices Ai y Bi que aparecen en ( 4.85 ) no tienen valores propios en común, entonces la matriz Yi +1 que aparece en la expresión ( 4.89 ), solución aproximada en el instante t i +1 de la EDMR con coeficientes ( 4.77 ), se puede calcular como ( 4.102 ) Yi +1 = Yi + Wi , siendo Wi la solución de la ecuación matricial de Sylvester ( 4.103 ) AiWi − Wi Bi = e Ai ∆t i Fi e − Bi ∆t i − Fi . Demostración. Según la Propiedad 2.1, la matriz Ci de la expresión ( 4.87 ) conmuta con la matriz eCi ∆t i , por lo que 181 Capítulo 4: Linealización a Trozos ⎡ Ji ⎢0 ⎣ mn I mn ⎤ ⎡e J i ∆ti ⎢ 0 mn ⎥⎦ ⎣ 0 mn F12( i ) ⎤ ⎡e J i ∆ti ⎥=⎢ I mn ⎦ ⎣ 0 mn F12( i ) ⎤ ⎡ J i ⎥⎢ I mn ⎦ ⎣0 mn I mn ⎤ , 0 mn ⎥⎦ en donde se ha simplificado la notación escribiendo F12( i ) en lugar de F12(i ) (∆ti ) . Igualando los bloques (1,2) de los dos miembros de la ecuación anterior, se tiene que J i F12( i ) + I mn = e J i ∆ti , con lo que J i F12( i ) = e J i ∆ti − I mn , o bien J i F12( i ) f i = e J i ∆t i f i − f i . ( 4.104 ) Desarrollando el miembro izquierdo de la ecuación ( 4.104 ), y teniendo en cuenta la Propiedad 6.8, se tiene que ( 4.105 ) ( ) J i F12( i ) f i = J i wi = I n ⊗ Ai − BiT ⊗ I m wi = vec( AiWi − Wi Bi ) , siendo Wi = mat mxn ( wi ) . Desarrollando el miembro derecho de la ecuación ( 4.104 ), y tendiendo en cuenta el Lema 4.1 y la Propiedad 6.8, se tiene que e J i ∆ti f i − f i = e (I n ⊗ Ai − Bi ⊗I m )∆ti f i − f i T ( 4.106 ) ( ) ( ) = e − Bi ∆ti ⊗ e Ai ∆ti f i − f i = vec e A∆ti Fi e − B∆ti − Fi , T siendo Fi = mat mxn ( f i ) . A partir de ( 4.104 ) y teniendo en cuenta las expresiones ( 4.105 ) y ( 4.106 ), se tiene ( ) vec( AiWi − Wi Bi ) = vec e Ai ∆ti Fi e − Bi ∆ti − Fi , por lo que Wi se obtiene resolviendo la ecuación matricial de Sylvester ( 4.103), AiWi − Wi Bi = e Ai ∆t i Fi e − Bi ∆t i − Fi , con lo que queda demostrado el teorema. La ecuación matricial de Sylvester ( 4.103) se puede resolver como a continuación se muestra. Sean Ai = Qa Ai QaT , Bi = Qb Bi QbT , respectivamente, las descomposiciones reales de Schur de las matrices Ai y Bi , con Qa y Qb matrices ortogonales, y Ai y Bi matrices casi triangulares superiores. Sustituyendo las expresiones anteriores en la ecuación ( 4.103 ), se tiene que 182 Capítulo 4: Linealización a Trozos Qa AiQaTWi − WiQb BiQbT = Qa e Ai ∆t i QaT FiQb e − Bi ∆t i QbT − Fi , y multiplicando la ecuación anterior a la izquierda por QaT y a la derecha Qb , se tiene AiQaTWiQb − QaTWiQb Bi = e Ai ∆t i QaT FiQb e − Bi ∆t i − QaT FiQb . Llamando C = e Ai ∆t i QaT FiQb e − Bi ∆t i − QaT FiQb , W1 = QaTWiQb , se obtiene la ecuación casi triangular de Sylvester AiW1 − W1Bi = C , con lo que Wi se puede obtener resolviendo la ecuación anterior mediante el Algoritmo 3.14, y calculando Wi = QaW1QbT . El siguiente algoritmo calcula la matriz Yi +1 de la expresión ( 4.102 ), según el método descrito en los párrafos anteriores. Yi +1 = dlabc 2( A, B, F , Yi , ∆t , c1 , c2 ) . Entradas: Matriz A ∈ ℜ mxm , matriz B ∈ ℜ nxn , matriz F ∈ ℜ mxn , matriz Yi ∈ ℜ mxn , incremento de tiempo ∆t ∈ ℜ , vectores c1 , c2 ∈ ℜ q que contienen a los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salida: Matriz Yi +1 ∈ ℜ mxn (véase expresión ( 4.102 )). 1 2 3 4 [Qa , A] = schur ( A) ( descomposición real de Schur de la matriz A ) [Qb , B ] = schur ( B ) ( descomposición real de Schur de la matriz B ) Ea = dqtexppad ( A∆t , c1 , c2 ) (modificación del Algoritmo 2.1) Eb = dqtexppad ( B∆t , c1 , c2 ) (modificación del Algoritmo 2.1) 5 6 7 8 F = QaT FQb F = Ea FEb − F F = dtrsyl ( A,− B, F ) (Algoritmo 3.14) Yi +1 = Yi + Qa FQbT Algoritmo 4.30: Calcula la solución aproximada en el instante t i +1 de una EDMR con coeficientes constantes mediante la ecuación conmutante. Notas: • La exponencial de una matriz casi triangular superior ( dqtexppad ) se puede obtener mediante una modificación del Algoritmo 2.1 para el caso de matrices casi triangulares superiores. El coste aproximado del algoritmo anterior es 29m 3 + 2m 2 n + 6mn 2 + 25n 3 +coste(Algoritmo 2.1) flops. 183 Capítulo 4: Linealización a Trozos • Si las matrices A y B del algoritmo anterior son nulas, entonces Yi +1 = Yi + F∆t . • Si las matrices A y B del algoritmo anterior tienen algún valor propio muy cercano, entonces sería conveniente utilizar el Algoritmo 4.28 o el Algoritmo 4.32 que se describe en el siguiente subapartado. Y = dgedmrlcc(t , data, X 0 , q) . Entradas: Instantes de tiempo t i ( 0 ≤ i ≤ l ), función data que obtiene las matrices coeficiente de la EDMR A11 ∈ ℜ nxn , A12 ∈ ℜ nxm , A21 ∈ ℜ mxn , A22 ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salida: 1 2 3 4 Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) [ A11 , A12 , A21 , A22 ] = data () Y0 = X 0 Para i = 0 : l − 1 4.1 A22 = A22 − Yi A12 4.2 4.3 4.4 4.5 4.6 F = A21 + A22Yi F = F − Yi A11 A11 = A11 + A12Yi ∆t = ti +1 − ti Yi +1 = dlabc 2( A22 , A11 , F , Yi , ∆t , c1 , c2 ) (Algoritmo 4.30) Algoritmo 4.31: Resolución de EDMRs con coeficientes constantes mediante el método de linealización a trozos basado en la ecuación conmutante. El coste aproximado por iteración del algoritmo anterior es 4m 2 n + 4mn 2 +coste(Algoritmo 4.30) flops. 4.3.2.3 Método Basado en los Subespacios de Krylov La matriz Yi +1 de la expresión ( 4.89 ), solución aproximada en el instante t i +1 de la EDMR ( 4.77 ), se puede expresar como ( 4.107 ) Yi +1 = Yi + mat mxn ( F12( i ) (∆t ) vec( F )) = Yi + mat mxn (e Ci ∆ti vi ) , siendo ⎡J Ci = ⎢ i ⎣0 mn I mn ⎤ 0 mn ⎥⎦ y ⎡0 ⎤ vi = ⎢ mnx1 ⎥ . ⎣ fi ⎦ 184 Capítulo 4: Linealización a Trozos El siguiente algoritmo calcula la matriz Yi +1 de la expresión ( 4.107 ) mediante una adaptación a bloques del Algoritmo 4.9, minimizando con ello los costes computacionales y de almacenamiento. Yi +1 = dlabk 2( A, B, F , Yi , ∆t , p, tol , c1 , c2 ) . Entradas: Matriz A ∈ ℜ mxm , matriz B ∈ ℜ nxn , matriz F ∈ ℜ mxn , matriz Yi ∈ ℜ mxn , incremento de tiempo ∆t ∈ ℜ , dimensión p ∈ Z + de los subespacios de Krylov, tolerancia tol ∈ ℜ + , vectores c1 , c2 ∈ ℜ q que contienen a los coeficientes de los términos de grado mayor que cero de los polinomios de la aproximación diagonal de Padé de la función exponencial. Salida: 1 2 3 4 5 6 7 8 Matriz Yi +1 ∈ ℜ mxn de la expresión ( 4.107 ). f = vec( F ) β =|| f ||2 Si β = = 0 3.1 Salir del algoritmo. H (1,1) = 0 ; H (2,1) = ∆t V (:,1) = 0 mn ; V (:,2) = f / β ; A = A∆t ; B = B∆t Para j = 2 : p w = dlapkv( A, B, V (:, j )) (Algoritmo 4.24) 6.1 H (i, j ) = 0 6.2 6.3 Para i = 2 : j 6.3.1 H (i, j ) = wT V (:, i ) 6.3.2 w = w − H (i, j )V (:, i ) s =|| w ||2 6.4 6.5 Si s < tol 6.5.1 p = j 6.5.2 Salir del bucle 6.6 H ( j + 1, j ) = s V (:, j + 1) = w / s 6.7 H (1 : p,1 : p ) = dlaexp( H (1 : p,1 : p ), c1 ,c 2 ) (Algoritmo 4.3) Yi +1 = Yi + βmat mxn (V (:,1 : p) H (1 : p,1)) Algoritmo 4.32: Calcula la solución aproximada en el instante t i +1 de una EDMR con coeficientes constantes mediante la modificación a bloques del Algoritmo 4.9. El coste computacional aproximado en flops del algoritmo anterior es 2mn 2 p + 2n 2 mp + 2mnp( p + 1) +coste(Algoritmo 2.1) flops. Por último, se presenta el algoritmo que resuelve EDMRs con coeficientes constantes mediante el método de linealización a trozos basado en los subespacios de Krylov. 185 Capítulo 4: Linealización a Trozos Y = dgedmrlkc(t , data, X 0 , p, tol , q) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data que obtiene las matrices coeficiente de la EDMR A11 ∈ ℜ nxn , A12 ∈ ℜ nxm , A21 ∈ ℜ mxn , A22 ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn , dimensión p ∈ Z + del subespacio de Krylov, tolerancia tol ∈ ℜ + , grado q ∈ Z + de los polinomios de la aproximación diagonal de Padé. Salida: 1 2 3 4 Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . [c1 , c2 ] = dlapex(q ) (Algoritmo 4.2) [ A11 , A12 , A21 , A22 ] = data () Y0 = X 0 Para i = 0 : l − 1 4.1 A = A22 − Yi A12 4.2 4.3 4.4 4.5 4.6 F = A21 + AYi F = F − Yi A11 B = A11 + A12Yi ∆t = ti +1 − ti Yi +1 = dlabk 2( A, B, F , Yi , ∆t , p, tol , c1 , c2 ) (Algoritmo 4.32) Algoritmo 4.33: Resolución de EDMRs con coeficientes constantes mediante el método de linealización a trozos basado en los subespacios de Krylov. El coste aproximado por iteración del algoritmo anterior es 4m 2 n + 4mn 2 +coste(Algoritmo 4.32) flops. 4.4 Conclusiones En este capitulo se han desarrollado nuevos métodos y algoritmos que resuelven EDOs y EDMRs basados en la técnica de linealización a trozos. Para la resolución de EDOs se han desarrollado tres métodos basados en la linealización a trozos comentada en el apartado 2.3.4. En dos de los métodos desarrollados no es necesario que la matriz Jacobiana sea invertible. Estos métodos se basan en el Teorema 4.1 que permite obtener la solución aproximada de la EDO en cada subintervalo mediante el cálculo de la exponencial de la matriz definida a bloques que aparece en dicho teorema. El primero de ellos está basado en los aproximantes diagonales de Padé y el segundo en los subespacios de Krylov. Para cada uno de ellos se ha diseñado un algoritmo que permite resolver eficientemente, en términos de almacenamiento y coste, EDOs. A partir del Teorema 4.1 también se ha presentado otro método, basado en la Ecuación Conmutante, que es formalmente equivalente al cálculo de la solución analítica en cada subintervalo, pero realizando dicho cálculo de manera que se reduce su coste computacional. En este método es necesario que la matriz Jacobiana sea invertible. Para la resolución de EDMRs se ha desarrollado una nueva metodología basada en la técnica de linealización a trozos. Esta metodología consiste, básicamente, en transformar la EDMR en una EDO y aplicar a esta ecuación la técnica de linealización a 186 Capítulo 4: Linealización a Trozos trozos de EDOs. Puesto que la EDL así obtenida es de gran dimensión, se hace necesaria la aplicación de métodos especiales para su resolución. El primer método está basado en el Teorema 4.3 que permite transformar el problema vectorial de gran dimensión en uno de tipo matricial. Este teorema muestra la manera de calcular la aproximación de la solución en un cierto instante, a partir de la aproximación en el instante anterior, mediante el cálculo de las dos exponenciales de matrices definidas a bloques que aparecen en dicho teorema. Por lo tanto, ha sido necesario desarrollar un algoritmo que calculase, de manera eficiente, dicha aproximación, realizando para ello una modificación del método de los aproximantes diagonales de Padé para el cálculo simultáneo de ciertos bloques de las exponenciales de las dos matrices mencionadas anteriormente. El segundo método consiste en aplicar la Ecuación Conmutante a la matriz que aparece al aplicar el Teorema 4.1 tras el proceso de vectorización. Al aplicar la citada ecuación, se demuestra que, para poder determinar la solución aproximada en un instante de tiempo, es necesario resolver ecuaciones del tipo Sylvester; de este modo, se ha trasformado un problema vectorial de gran dimensión a otro de tipo matricial. Correspondientemente, se ha desarrollado un algoritmo que permite calcular eficientemente la solución en un cierto instante mediante la resolución de tres ecuaciones matriciales de Sylvester, reduciendo las matrices coeficiente de estas ecuaciones matriciales a la forma real de Schur y aplicando, a continuación, una adaptación del método de Bartels-Stewart. El tercer y último método calcula el producto de la exponencial de una matriz definida a bloques, obtenida en el proceso de vectorización, por un vector, aplicando para ello una adaptación a bloques del método de proyección basado en los subespacios de Krylov. Tanto para EDOs autónomas como para EDMRs con coeficientes constantes ha sido necesario adaptar, convenientemente, los anteriores algoritmos, optimizando con ello los costes computacionales y de almacenamiento. El coste computacional de los métodos desarrollados (tanto para la resolución de EDOs como para la resolución de EDMRs) y la precisión de los mismos dependen de ciertos parámetros característicos que a continuación se citan. • Métodos basados en los aproximantes diagonales de Padé: grado de los polinomios de la aproximación diagonal de Padé. • Métodos basados en Ecuación Conmutante: grado de los polinomios de la aproximación diagonal de Padé. • Métodos basados en los subespacios de Krylov: dimensión de los subespacios de Krylov, grado de los polinomios de la aproximación diagonal de Padé y la tolerancia. Como los valores óptimos de los citados parámetros dependen del problema considerado, es difícil pronosticar, a priori, cuál es el mejor método y cuáles son los valores óptimos de sus parámetros característicos. Otro aspecto de interés, nada trivial, es que es posible diseñar una rutina/función “inteligente” capaz de elegir, en función del problema, el mejor de los tres métodos desarrollados incluidos los valores adecuados de sus parámetros característicos. Esto es posible ya que los algoritmos desarrollados tienen la misma estructura, cosa obvia pues parten de una misma metodología, diferenciándose únicamente en la manera de calcular la correspondiente aproximación en un cierto instante. 187 Capítulo 4: Linealización a Trozos Por todo ello, es necesario establecer y realizar una serie de pruebas que permitan “dar respuesta” a varias de las cuestiones surgidas con estos nuevos métodos. 188 Capítulo 5: Resultados Experimentales Capítulo 5 Resultados Experimentales 5.1 Resumen de Contenidos En este capítulo se presentan los resultados experimentales obtenidos en la resolución de diferentes problemas de test con los algoritmos descritos en el Capítulo 3 y en el Capítulo 4. Las implementaciones de los algoritmos se han realizado tanto en MATLAB como en FORTRAN. Las implementaciones en MATLAB se han realizado sobre un ordenador portátil Toshiba con procesador Intel Movile a 2Ghz y 512 Mb de memoria. En las pruebas realizadas se han utilizado la versión 7, por poseer potentes herramientas de depuración de código, y la versión 5.3, por disponer de una función que permite calcular el número de flops de los códigos escritos en MATLAB. Las implementaciones en FORTRAN se han realizado sobre un nodo de un SGI Altix 3700 [SGIAltix], utilizando la versión 8.1 del compilador FORTRAN de Intel y la versión 1.5.1 de la librería SCSL para las llamadas a BLAS y LAPACK, todo ello incluido en el software de esa máquina. Para cada tipo de prueba se han elegido ejemplos característicos que permitiesen determinar, por una parte, la precisión de los algoritmos implementados y, por otra, determinar la eficiencia de los mismos. Hay que destacar tanto la gran cantidad de pruebas realizadas como la amplia gama de las mismas. Por ejemplo, se han analizado casos de estudio en los que la solución analítica es conocida y así probar la precisión de los algoritmos implementados. Se han seleccionado también problemas con altos costes computacionales eligiendo para ello problemas de gran dimensión. En el caso de la resolución de EDOs y EDMRs se han utilizado casos de estudio que corresponden a problemas de tipo rígido y no rígido, comparándolos con métodos establecidos y muy usados como los basados en el método BDF. Además, para cada prueba realizada se han determinado los valores óptimos, en cuanto a precisión y eficiencia, de los parámetros característicos de cada una de las implementaciones de manera que la comparación reflejase, lo más fielmente posible, el comportamiento de cada uno de los algoritmos implementados. El contenido de este capítulo está estructurado en seis secciones. En la segunda sección se comparan las diferentes implementaciones realizadas en FORTRAN para el cálculo de Funciones de Matrices. En la tercera sección se analizan los resultados obtenidos en la simulación de la propagación de ondas en fibras de cristal fotónico. En las secciones cuarta y quinta se comparan las prestaciones obtenidas por las funciones y rutinas que resuelven EDOs y EDMRs, tanto a nivel de costes en flops, utilizando MATLAB, como de tiempos de ejecución, utilizando las implementaciones en FORTRAN. En la sexta sección se resumen los resultados más destacados de las pruebas realizadas. La nomenclatura utilizada para las funciones implementadas en MATLAB y las rutinas implementadas en FORTRAN están descritas en las secciones 1.1, 3.1 y 4.1. 189 Capítulo 5: Resultados Experimentales 5.2 Cálculo de Funciones de Matrices En esta sección se presentan los resultados correspondientes a las implementaciones en MATLAB y FORTRAN de los algoritmos que calculan funciones de matrices. Sea A ∈ ℜ nxn y f una función matricial. Si B ∈ ℜ nxn es la matriz obtenida al utilizar un algoritmo que calcula f ( A) , se define el error relativo asociado a la 1-norma como Er = || f ( A) − B ||1 . || f ( A) ||1 En la mayoría de las ocasiones no es posible determinar dicho error puesto que f ( A) no es conocida. Por ello, en lugar de obtener dicho error, se considerará el error relativo cometido en la ecuación conmutante Ec = || AB − BA ||1 . || AB) ||1 Este error, como se pone de manifiesto en los resultados obtenidos, guarda una relación cercana con el error relativo Er . 5.2.1 Funciones Polinómicas y Racionales En este apartado se muestran los resultados correspondientes a las implementaciones de en MATLAB y FORTRAN correspondientes a los algoritmos del Capítulo 3 que calculan funciones polinómicas y racionales de matrices. Para estas implementaciones se han utilizado los métodos de Horner y Paterson-Stockmeyer-Van Loan. En el caso de las funciones racionales aparece un sistema lineal q( A) X = p( A) (siendo p y q los polinomios que definen la función racional), que se resuelve utilizando la descomposición LU con pivotamiento parcial de filas o la descomposición QR. Las rutinas que se van analizar son: • dgefpohor: Calcula B = p ( A) con p polinomio y A ∈ ℜnxn mediante el método de Horner. • dgefpopsv: Calcula B = p ( A) con p polinomio y A ∈ ℜnxn mediante el método de Paterson-Stockmeyer-Van Loan. • dgefrahlu: Calcula p ( A) / q ( A) con p y q polinomios y A ∈ ℜnxn mediante el método de Horner, utilizando la descomposición LU con pivotamiento parcial de filas para la resolución del sistema de ecuaciones lineales q( A) X = p( A) . • dgefrahqr: Calcula p ( A) / q( A) con p y q polinomios y A ∈ ℜnxn mediante el método de Horner, utilizando la descomposición QR para la resolución del sistema de ecuaciones lineales q( A) X = p( A) . • dgefraplu: Calcula p ( A) / q ( A) con p y q polinomios y A ∈ ℜnxn mediante el método de Paterson-Stockmeyer-Van Loan, utilizando la descomposición LU con pivotamiento parcial de filas para la resolución del sistema de ecuaciones lineales q( A) X = p( A) . 190 Capítulo 5: Resultados Experimentales • dgefrapqr: Calcula p ( A) / q( A) con p y q polinomios y A ∈ ℜnxn mediante el método de Paterson-Stockmeyer-Van Loan, utilizando la descomposición QR para la resolución del sistema de ecuaciones lineales q( A) X = p( A) . Puesto que el coste computacional y de almacenamiento en los algoritmos basados en el método de Paterson-Stockmeyer-Van Loan dependen del factor de agrupamiento s y del grado de los polinomios de la aproximación diagonal de Padé, se ha considerado conveniente variar esos valores y de este modo comprobar experimentalmente cuáles son sus valores óptimos en función del tamaño de la matriz. 5.2.1.1 Resultados Funciones Polinómicas En las pruebas realizadas se ha variado el grado g de los polinomios entre 5 y 14, el factor de agrupamiento s entre 2 y 8, y la dimensión de la matriz n entre 100 y 1000 en pasos de 100. Además, los coeficientes de la matriz y del polinomio se han generado aleatoriamente en el intervalo [-1,1]. Debido a la gran cantidad de resultados obtenidos únicamente se muestran los tiempos de ejecución correspondientes a matrices aleatorias de dimensiones 500 y 1000. Las precisiones obtenidas en todos los casos para la ecuación conmutante han sido del orden de 10 −14 . En la siguiente tabla se presentan los tiempos de ejecución de las rutinas dgefpohor y dgefpopsv. Te g=5 g=6 g=7 g=8 g=9 dgefpohor 0.508 0.508 0.51 0.51 0.513 dgefpopsv s=2 0.444 0.444 0.447 0.449 0.449 dgefpopsv s=3 0.378 0.38 0.382 0.382 0.385 dgefpopsv s=4 0.437 0.439 0.441 0.444 0.446 dgefpopsv s=5 0.435 0.435 0.438 0.44 0.442 dgefpopsv s=6 0.494 0.496 0.496 0.499 0.501 dgefpopsv s=7 0.49 0.493 0.495 0.495 0.497 dgefpopsv s=8 0.549 0.552 0.554 0.556 0.556 Tabla 5.1: Tiempos de ejecución, en segundos, de las rutinas dgefpohor y dgefpopsv, para una matriz aleatoria de dimensión igual a 500, variando el grado g del polinomio entre 5 y 9, y el factor s de agrupamiento entre 2 y 8. 191 Capítulo 5: Resultados Experimentales Te g=10 g=11 g=12 g=13 g=14 dgefpohor 0.513 0.515 0.515 0.518 0.518 dgefpopsv s=2 0.451 0.453 0.453 0.456 0.458 dgefpopsv s=3 0.387 0.389 0.389 0.392 0.394 dgefpopsv s=4 0.446 0.448 0.45 0.453 0.455 dgefpopsv s=5 0.444 0.447 0.447 0.449 0.451 dgefpopsv s=6 0.503 0.506 0.508 0.51 dgefpopsv s=7 0.5 0.51 0.502 0.504 0.507 0.509 dgefpopsv s=8 0.559 0.561 0.563 0.566 0.568 Tabla 5.2: Tiempos de ejecución, en segundos, de las rutinas dgefpohor y dgefpopsv, para una matriz aleatoria de dimensión igual a 500, variando el grado g del polinomio entre 10 y 14, y el factor s de agrupamiento entre 2 y 8. Te g=5 g=6 g=7 dgefpohor 3.6434 3.6437 3.6436 3.6431 3.6435 dgefpopsv s=2 3.1991 3.1983 3.199 g=8 g=9 3.1983 3.1986 dgefpopsv s=3 2.7534 2.7537 2.7536 2.7537 2.7532 dgefpopsv s=4 3.1946 3.1941 3.1943 3.1944 3.1946 dgefpopsv s=5 3.1925 3.1924 3.1923 3.1921 3.1922 dgefpopsv s=6 3.6333 3.6334 3.6333 3.633 3.6336 dgefpopsv s=7 3.6311 3.6311 3.6314 3.6314 3.6313 dgefpopsv s=8 4.0722 4.0723 4.0722 4.0719 4.0721 Tabla 5.3: Tiempos de ejecución, en segundos, de las rutinas dgefpohor y dgefpopsv, para una matriz aleatoria de dimensión igual a 1000, variando el grado g del polinomio entre 5 y 9, y el factor s de agrupamiento entre 2 y 8. 192 Capítulo 5: Resultados Experimentales Te g=10 g=11 g=12 g=13 g=14 dgefpohor 3.6435 3.6434 3.6435 3.6432 3.6433 dgefpopsv s=2 3.1986 3.1983 3.1987 3.1984 3.1988 dgefpopsv s=3 2.7532 2.7537 2.7537 2.7538 2.7535 dgefpopsv s=4 3.1946 3.1945 3.1943 3.1941 3.1945 dgefpopsv s=5 3.1922 3.1924 3.1923 3.1921 3.1924 dgefpopsv s=6 3.6336 3.6334 3.6334 3.633 3.6329 dgefpopsv s=7 3.6313 3.6309 3.6309 3.6314 3.6316 dgefpopsv s=8 4.0721 4.0725 4.0723 4.072 Tabla 5.4: 4.0723 Tiempos de ejecución, en segundos, de las rutinas dgefpohor y dgefpopsv, para una matriz aleatoria de dimensión igual a 1000, variando el grado g del polinomio entre 10 y 14, y el factor s de agrupamiento entre 2 y 8. De las anteriores tablas se pueden extraer las siguientes conclusiones: • Los menores tiempos de ejecución corresponden a la rutina dgefpopsv con un factor de agrupamiento igual a 3. • El tiempo de ejecución no varía apenas cuando se aumenta el grado del polinomio. En la siguientes figuras se muestran los tiempos de ejecución de las rutinas dgefpohor y dgefpopsv (s=3), para matrices de dimensiones 500 y 1000, variando el grado g del polinomio entre 5 y 14. 193 Capítulo 5: Resultados Experimentales Dimensión de la matriz n=500 0.7 dgefpohor dgefpopsv (s=3) 0.65 0.6 Tiempo (segundos) 0.55 0.5 0.45 0.4 0.35 0.3 0.25 0.2 5 6 Figura 5.1: 7 8 9 10 Grado g 11 12 13 14 Tiempos de ejecución, en segundos, de las rutinas dgefpohor y dgefpopsv (s=3), para una matriz aleatoria de dimensión igual a 500, variando el grado g del polinomio entre 5 y 14. Dimensión de la matriz n=500 5 dgefpohor dgefpopsv (s=3) Tiempo (segundos) 4.5 4 3.5 3 2.5 2 5 Figura 5.2: 5.2.1.2 6 7 8 9 10 Grado g 11 12 13 14 Tiempos de ejecución, en segundos, de las rutinas dgefpohor y dgefpopsv (s=3), para una matriz aleatoria de dimensión igual a 1000, variando el grado g del polinomio entre 5 y 14. Resultados Funciones Racionales En este estudio se han considerado sólo funciones racionales donde los polinomios del numerador y del denominador tienen grados iguales. El grado g de los polinomios se ha variado entre 5 y 9, el factor de agrupamiento s entre 2 y 8 y la dimensión de la matriz 194 Capítulo 5: Resultados Experimentales entre 100 y 1000 en pasos de 100. Además, los coeficientes de la matriz y de los polinomios se han generado aleatoriamente en el intervalo [-1,1]. En primer lugar se presentan dos tablas en las que se muestran los errores relativos de la ecuación conmutante para tamaños de matrices 500 y 1000, correspondientes a las rutinas dgefrahqr, dgefrahlu, dgefrapqr y dgefraplu. Ec g=5 g=6 g=7 g=8 g=9 dgefrahqr 8.29e-10 1.21e-09 2.59e-07 2.44e-06 9.24e-06 dgefrahlu 2.88e-10 1.30e-09 1.76e-07 1.51e-06 2.16e-05 dgefrapqr s=2 8.59e-10 4.14e-09 1.95e-07 4.37e-06 3.59e-06 dgefraplu s=2 1.32e-09 6.99e-09 2.41e-07 4.37e-06 4.25e-06 dgefrapqr s=3 7.72e-10 3.45e-09 3.8e-07 dgefraplu s=3 3.68e-06 1.15e-06 1.12e-09 4.90e-09 3.27e-07 4.46e-06 2.64e-06 dgefrapqr s=4 7.21e-10 4.99e-09 2.32e-07 3.18e-06 6.28e-06 dgefraplu s=4 1.51e-09 5.06e-09 2.94e-07 3.24e-06 3.17e-06 dgefrapqr s=5 5.66e-10 3.23e-09 2.11e-07 2.51e-06 2.20e-06 dgefraplu s=5 9.66e-10 5.12e-09 2.87e-07 3.63e-06 5.80e-06 dgefrapqr s=6 5.54e-10 2.93e-09 3.18e-07 3.05e-06 5.84e-06 dgefraplu s=6 1.00e-09 4.53e-09 3.61e-07 3.76e-06 4.97e-06 dgefrapqr s=7 5.54e-10 2.51e-09 1.96e-07 3.05e-06 8.5e-06 dgefraplu s=7 1.00e-09 5.31e-09 0.20e-07 3.91e-06 3.18e-06 dgefrapqr s=8 5.54e-10 2.51e-09 1.45e-07 2.31e-06 2.53e-06 dgefraplu s=8 Tabla 5.5: 1.00e-09 5.31e-09 4.32e-07 3.27e-06 4.67e-06 Errores relativos cometidos en la ecuación conmutante, correspondientes a las rutinas dgefrahqr, dgefrahlu, dgefrapqr y dgefraplu, para una matriz aleatoria de dimensión igual a 500, variando el grado g de los polinomios entre 5 y 9, y el factor s de agrupamiento entre 2 y 8. 195 Capítulo 5: Resultados Experimentales Ec g=5 g=6 g=7 g=8 g=9 dgefrahqr 6.93e-09 2.58e-07 1.84e-07 1.42e-4 2.54e-3 dgefrahlu 1.01e-08 6.71e-07 2.12e-07 1.33e-4 4.11e-3 dgefrapqr s=2 5.17e-09 2.22e-07 5.63e-07 2.25e-4 2.82e-3 1.45e-08 5.37e-07 1.36e-06 3.66e-4 3.63e-03 dgefrapqr s=3 5.25e-09 2.05e-07 5.62e-07 1.74 e-4 1.93e-03 1.34e-08 4.99e-07 8.71e-07 3.26e-4 3.40e-03 dgefrapqr s=4 5.46e-09 1.89e-07 4.17e-07 1.43e-4 2.12e-03 dgefraplu s=2 dgefraplu s=3 2.89e-4 3.57e-03 dgefrapqr s=5 4.51e-09 1.71e-07 4.21e-07 1.36e-4 1.47e-03 1.47e-08 4.28e-07 1.47e-06 3.07e-4 3.59e-03 dgefrapqr s=6 4.77e-09 1.42e-07 3.61e-07 1.59e-4 1.93e-03 dgefraplu s=4 dgefraplu s=5 1.47e-08 4.75e-07 1.2e-06 4.83e-07 9.97e-07 3.41e-4 2.83e-03 dgefrapqr s=7 4.77e-09 1.41e-07 3.42e-07 1.25e-4 1.55e-03 dgefraplu s=6 dgefraplu s=7 1.3e-08 1.3e-08 4.85e-07 7.88e-07 3.26e-4 4.23e-03 dgefrapqr s=8 4.77e-09 1.41e-07 3.62e-07 7.98e-05 1.66e-03 dgefraplu s=8 Tabla 5.6: 1.3e-08 4.85e-07 1e-06 2.69e-4 3.30e-03 Errores cometidos en la ecuación conmutante correspondientes a las rutinas dgefrahqr, dgefrahlu, dgefrapqr y dgefraplu, para una matriz aleatoria de dimensión igual a 1000, variando el grado g del polinomio entre 5 y 9, y el factor s de agrupamiento entre 2 y 8. A continuación se presentan dos tablas y dos gráficas en las que aparecen los tiempos de ejecución correspondientes a las rutinas dgefrahqr, dgefrahlu, dgefrapqr y dgefraplu, considerando matrices aleatorias de dimensiones 500 y 1000, variando el grado g de los polinomios entre 5 y 9, y el factor s de agrupamiento entre 2 y 8. 196 Capítulo 5: Resultados Experimentales Te g=5 g=6 g=7 g=8 g=9 dgefrahqr 0.934 1.060 1.190 1.320 1.440 dgefrahlu 0.787 0.914 1.040 1.170 1.300 dgefrapqr s=2 0.561 0.685 0.690 0.813 0.818 dgefraplu s=2 0.414 0.537 0.543 0.666 0.671 dgefrapqr s=3 0.503 0.626 0.631 0.636 0.759 dgefraplu s=3 0.355 0.478 0.483 0.488 0.611 dgefrapqr s=4 0.560 0.565 0.569 0.693 0.698 dgefraplu s=4 0.413 0.417 0.422 0.546 0.551 dgefrapqr s=5 0.618 0.624 0.628 0.633 0.638 dgefraplu s=5 0.471 0.476 0.481 0.486 0.491 dgefrapqr s=6 0.558 0.682 0.687 0.692 0.696 dgefraplu s=6 0.411 0.534 0.54 0.545 0.549 dgefrapqr s=7 0.617 0.622 0.745 0.750 0.755 dgefraplu s=7 0.470 0.474 0.598 0.603 0.608 dgefrapqr s=8 0.676 0.681 0.686 0.809 0.814 dgefraplu s=8 Tabla 5.7: 0.529 0.533 0.538 0.662 0.667 Tiempos de ejecución, en segundos, de las rutinas dgefrahqr, dgefrahlu, dgefrapqr y dgefraplu, para una matriz aleatoria de dimensión igual a 500, variando el grado g de los polinomios entre 5 y 9, y el factor s de agrupamiento entre 2 y 8. 197 Capítulo 5: Resultados Experimentales Te g=5 g=6 g=7 g=8 g=9 dgefrahqr 0.934 1.06 1.19 1.32 1.44 dgefrahlu 0.787 0.914 1.04 1.17 1.30 dgefrapqr s=2 0.561 0.685 0.69 dgefraplu s=2 0.813 0.818 0.414 0.537 0.543 0.666 0.671 dgefrapqr s=3 0.503 0.626 0.631 0.636 0.759 dgefraplu s=3 0.355 0.478 0.483 0.488 0.611 dgefrapqr s=4 0.56 dgefraplu s=4 0.565 0.569 0.693 0.698 0.413 0.417 0.422 0.546 0.551 dgefrapqr s=5 0.618 0.624 0.628 0.633 0.638 dgefraplu s=5 0.471 0.476 0.481 0.486 0.491 dgefrapqr s=6 0.558 0.682 0.687 0.692 0.696 dgefraplu s=6 0.411 0.534 0.54 0.545 0.549 dgefrapqr s=7 0.617 0.622 0.745 0.75 dgefraplu s=7 0.47 0.755 0.474 0.598 0.603 0.608 dgefrapqr s=8 0.676 0.681 0.686 0.809 0.814 dgefraplu s=8 Tabla 5.8: 0.529 0.533 0.538 0.662 0.667 Tiempos de ejecución, en segundos, de las rutinas dgefrahqr, dgefrahlu, dgefrapqr y dgefraplu, para una matriz aleatoria de dimensión igual a 1000, variando el grado g de los polinomios entre 5 y 9, y el factor s de agrupamiento entre 2 y 8. 198 Capítulo 5: Resultados Experimentales Dimensión de la matriz n=500 1.2 dgefraplu(s=3) dgefraplu(s=4) dgefraplu(s=5) 1.1 1 Tiempo (segundos) 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 5 6 Figura 5.3: 7 8 9 10 Grado g 11 12 13 14 Tiempos de ejecución, en segundos, de la rutina dgefraplu, para una matriz aleatoria de dimensión igual a 500, variando el grado g de los polinomios entre 5 y 14, y el factor s de agrupamiento entre 3 y 5. Dimensión de la matriz n=1000 8 dgefraplu(s=3) dgefraplu(s=4) dgefraplu(s=5) Tiempo (segundos) 7 6 5 4 3 2 5 Figura 5.4: 6 7 8 9 10 Grado g 11 12 13 14 Tiempos de ejecución, en segundos, de la rutina dgefraplu, para una matriz aleatoria de dimensión igual a 1000, variando el grado g de los polinomios entre 5 y 14, y el factor s de agrupamiento entre 3 y 5. De las tablas y gráficas anteriores se pueden extraer varias conclusiones: 199 Capítulo 5: Resultados Experimentales • Se produce una pérdida de precisión a medida que aumenta el grado del polinomio y la dimensión de la matriz. • Las rutinas que utilizan la descomposición QR tienen un error algo menor que las rutinas que utilizan la descomposición LU con pivotamiento parcial de filas, aunque estas últimas son más rápidas que las primeras. • Las rutinas basadas en el método de Paterson-Stockmeyer-Van Loan tienen, en general, un tiempo de ejecución menor que las rutinas que utilizan el método de Horner, siendo la rutina dgefraplu la que presenta mejores resultados cuando se eligen factores de agrupamiento s comprendidos entre 3 y 5. 5.2.2 Rutinas Basadas en los Aproximantes Diagonales de Padé Para el cálculo de funciones de matrices basadas en la aproximación diagonal de Padé, se han utilizado las siguientes variantes: • Resolución del sistema de ecuaciones lineales, que aparece en la aproximación diagonal de Padé mediante la descomposición LU con pivotamiento parcial de filas o mediante la descomposición QR. • Utilización del método de Horner o del método de Paterson-Stockmeyer-Van Loan. En función de estas variantes se han obtenido 4 rutinas que implementan la misma función matricial. En la siguiente figura aparecen las citadas aproximaciones. ⎧ ⎧Descomposición LU ⎪Método de Paterson - Stockmeyer - Van Loan ⎨ ⎩Descomposición QR ⎪ Cálculo de f(A)⎨ ⎪Método de Horner ⎧Descomposición LU ⎨ ⎪ ⎩Descomposición QR ⎩ Figura 5.5: Rutinas que calculan funciones de matrices mediante los aproximantes diagonales de Padé. Se han realizado pruebas para todas las implementaciones de los algoritmos descritos en el Capítulo 3, pero únicamente se presentan los resultados correspondientes a la función exponencial y a la potencia fraccionaria de una matriz. El grado g de los polinomios de la aproximación diagonal de Padé se ha variado entre 5 y 14, y el factor s de agrupamiento entre 2 y 8. Los coeficientes de las matrices se han generado aleatoriamente en el intervalo [−10,10] , y sus dimensiones se han variado entre 100 y 1000 en pasos de 100. Los errores que se han calculado para cada prueba han sido: • Error relativo (Er), comparando la solución obtenida con los métodos basados en los aproximantes diagonales de Padé con la solución obtenida utilizando un método basado en la descomposición real de Schur de una matriz (estos métodos son más precisos que los basados en la aproximación de Padé). • Error relativo en la ecuación conmutante (Ec). En las siguientes tablas se muestran los errores Er y Ec para tamaños de matrices 100, 500 y 1000 correspondientes a las rutinas dgefexhlu. Únicamente se ha tenido en cuenta el valor de agrupamiento s=2, pues para los otros valores los resultados son semejantes. 200 Capítulo 5: Resultados Experimentales g=5 g=6 g=7 g=8 g=9 Er .337e-12 .277e-12 .335e-12 .169e-12 .261e-12 Ec .297e-13 .260e-13 .150e-13 .182e-13 .202e-13 Tabla 5.9: Errores relativos de la rutina dgefexhlu para una matriz aleatoria de dimensión igual a 100, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 9. g=10 g=11 g=12 g=13 g=14 Er .177e-12 .384e-12 .101e-12 .291e-12 .259e-12 Ec .252e-13 .204e-13 .150e-13 .146e-13 .234e-13 Tabla 5.10: Errores relativos de la rutina dgefexhlu para una matriz aleatoria de dimensión igual a 100, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 10 y 14. g=5 g=6 g=7 g=8 g=9 Er .834e-12 .595e-12 .607e-12 .125e-11 .334e-12 Ec .657e-13 .856e-13 .688e-13 .495e-13 .517e-13 Tabla 5.11: Errores relativos de la rutina dgefexhlu para una matriz aleatoria de dimensión igual a 500, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 9. g=10 g=11 g=12 g=13 g=14 Er .647e-12 .306e-12 .232e-12 .150e-11 .830e-12 Ec .557e-13 .624e-13 .620e-13 .651e-13 .953e-13 Tabla 5.12: Errores relativos de la rutina dgefexhlu para una matriz aleatoria de dimensión igual a 500, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 10 y 14. 201 Capítulo 5: Resultados Experimentales g=5 g=6 g=7 g=8 g=9 Er .104e-11 .178e-11 .556e-12 .709e-12 .145e-11 Ec .730e-13 .154e-12 .102e-12 .107e-12 .186e-12 Tabla 5.13: Errores relativos de la rutina dgefexhlu para una matriz aleatoria de dimensión igual a 1000, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 9. g=10 g=11 g=12 g=13 g=14 Er .818e-12 .812e-12 .102e-11 .718e-12 .130e-12 Ec .162e-12 .861e-13 .112e-12 .915e-13 .126e-12 Tabla 5.14: Errores relativos de la rutina dgefexhlu para una matriz aleatoria de dimensión igual a 1000, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 10 y 14. De las tablas anteriores se desprenden las siguientes conclusiones: • Los errores relativos Er y Ec aumentan moderadamente a medida que aumenta la dimensión de la matriz. • Los errores relativos Er y Ec son similares, siendo estos últimos algo menores. • Con un valor del grado g de la aproximación diagonal igual a 7 se obtiene una precisión aceptable. En las siguientes tablas se muestran los tiempos de ejecución de las rutinas dgefexhlu, dgefexhqr, dgefexplu y dgefexpqr, para tamaños de matrices iguales a 500 y 1000. Estas rutinas se describen a continuación. • dgefexhlu: Calcula la exponencial de una matriz mediante aproximantes diagonales de Padé, utilizando el método de Horner y la descomposición LU con pivotamiento parcial de filas en la resolución del sistema de ecuaciones lineales asociado. • dgefexhqr: Calcula la exponencial de una matriz mediante aproximantes diagonales de Padé, utilizando el método de Horner y la descomposición QR en la resolución del sistema de ecuaciones lineales que aparece en el método anterior. • dgefexplu: calcula la exponencial de una matriz mediante aproximantes diagonales de Padé, utilizando el método de Paterson-Stockmeyer-Van Loan y la descomposición LU con pivotamiento parcial de filas en la resolución del sistema de ecuaciones lineales asociado. dgefexpqr: Calcula la exponencial de una matriz mediante aproximantes diagonales de Padé, utilizando el método de Paterson-Stockmeyer-Van Loan y la descomposición QR en la resolución del sistema de ecuaciones lineales asociado. 202 Capítulo 5: Resultados Experimentales Te g=5 dgefexhlu 1.45 1.57 1.7 dgefexhqr 1.6 dgefexplu s=2 1.15 1.32 1.28 1.41 1.41 dgefexpqr s=2 1.3 dgefexplu s=3 g=6 g=7 g=8 g=9 1.82 1.96 1.73 1.85 1.98 2.16 1.46 1.44 1.58 1.57 1.09 1.22 1.22 1.28 1.35 dgefexpqr s=3 1.25 1.37 1.37 1.38 1.5 dgefexplu s=4 1.15 1.15 1.16 1.28 1.29 dgefexpqr s=4 1.3 dgefexplu s=5 1.31 1.36 1.44 1.45 1.21 1.21 1.23 1.22 1.23 dgefexpqr s=5 1.36 1.36 1.37 1.37 1.38 dgefexplu s=6 1.14 1.27 1.28 1.29 1.28 dgefexpqr s=6 1.29 1.42 1.43 1.44 1.44 dgefexplu s=7 1.2 1.21 1.33 1.34 1.34 dgefexpqr s=7 1.36 1.36 1.49 1.49 1.5 dgefexplu s=8 1.33 1.27 1.27 1.4 1.47 dgefexpqr s=8 1.42 1.42 1.42 1.55 1.55 Tabla 5.15: Tiempos de ejecución, en segundos, de las rutinas dgefexhlu, dgefexhqr, dgefexplu y dgefexpqr, para una matriz aleatoria de dimensión igual a 500, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 9, y el factor de agrupamiento s entre 2 y 8. 203 Capítulo 5: Resultados Experimentales Te g=10 g=11 g=12 g=13 g=14 dgefexhlu 2.07 2.2 2.32 2.49 2.59 dgefexhqr 2.23 2.34 2.48 2.59 2.76 dgefexplu s=2 1.55 1.54 1.67 1.67 1.8 1.7 1.82 1.83 1.96 1.36 1.36 1.49 1.49 1.5 dgefexpqr s=3 1.51 1.52 1.64 1.64 1.65 1.3 1.43 1.43 1.43 dgefexpqr s=4 1.45 1.45 1.58 1.58 1.59 1.35 1.36 1.36 1.37 1.37 dgefexpqr s=5 1.51 1.51 1.51 1.52 1.53 1.29 1.29 1.42 1.42 1.43 dgefexpqr s=6 1.46 1.49 1.57 1.58 1.59 1.4 1.36 1.41 1.36 1.56 dgefexpqr s=7 1.5 1.51 1.52 1.51 1.64 1.41 1.41 1.42 1.42 1.42 dgefexpqr s=8 1.56 1.57 1.57 1.66 1.58 dgefexpqr s=2 1.69 dgefexplu s=3 dgefexplu s=4 dgefexplu s=5 dgefexplu s=6 dgefexplu s=7 dgefexplu s=8 1.29 Tabla 5.16: Tiempos de ejecución, en segundos, de las rutinas dgefexhlu, dgefexhqr, dgefexplu y dgefexpqr, para una matriz aleatoria de dimensión igual a 500, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 10 y 14, y el factor de agrupamiento s entre 2 y 8.. 204 Capítulo 5: Resultados Experimentales Te g=5 dgefexhlu 11.2 12 dgefexhqr 12.3 13.2 14.2 14.9 16 dgefexplu s=2 8.95 9.76 9.84 10.7 10.7 dgefexpqr s=2 10 dgefexplu s=3 g=6 g=7 g=8 13 13.9 14.9 10.9 11 8.47 9.3 g=9 11.8 11.8 9.37 9.34 10.3 dgefexpqr s=3 9.55 10.4 10.5 10.5 11.5 dgefexplu s=4 8.89 8.84 8.93 9.77 9.86 dgefexpqr s=4 10.1 10.1 10.1 10.9 11 dgefexplu s=5 9.35 9.31 9.37 9.33 9.39 dgefexpqr s=5 10.6 10.5 10.5 10.5 10.5 8.9 9.73 9.82 9.76 9.84 dgefexpqr s=6 10 10.9 10.9 10.9 10.9 dgefexplu s=6 dgefexplu s=7 9.34 9.27 10.3 10.2 10.3 dgefexpqr s=7 10.4 10.4 11.4 11.3 11.4 dgefexplu s=8 9.79 9.71 9.81 10.6 10.8 dgefexpqr s=8 10.9 10.8 11 11.8 11.8 Tabla 5.17: Tiempos de ejecución, en segundos, de las rutinas dgefexhlu, dgefexhqr, dgefexplu y dgefexpqr, para una matriz aleatoria de dimensión igual a 1000, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 9, y el factor de agrupamiento s entre 2 y 8.. 205 Capítulo 5: Resultados Experimentales Te g=10 g=11 g=12 g=13 g=14 dgefexhlu 15.6 16.7 17.3 18.4 19.1 dgefexhqr 16.8 17.8 18.4 19.5 20.2 dgefexplu s=2 11.6 11.7 12.4 12.5 13.3 dgefexpqr s=2 12.7 12.8 13.5 13.6 14.4 10.2 10.3 11.1 11.2 11.1 dgefexpqr s=3 11.3 11.4 12.1 12.2 12.2 9.77 9.82 10.6 10.7 10.6 10.9 11.7 11.8 11.7 10.2 10.2 10.2 10.3 10.2 dgefexpqr s=5 11.4 11.3 11.2 11.3 11.3 9.78 9.79 10.6 10.7 10.6 dgefexpqr s=6 10.9 10.9 11.7 11.8 11.7 10.3 10.2 10.2 10.3 11.1 dgefexpqr s=7 11.3 11.3 11.2 11.3 12.1 10.7 10.7 10.6 10.7 10.6 dgefexpqr s=8 11.8 11.7 11.7 11.8 11.7 dgefexplu s=3 dgefexplu s=4 dgefexpqr s=4 11 dgefexplu s=5 dgefexplu s=6 dgefexplu s=7 dgefexplu s=8 Tabla 5.18: Tiempos de ejecución, en segundos, de las rutinas dgefexhlu, dgefexhqr, dgefexplu y dgefexpqr, para una matriz aleatoria de dimensión igual a 1000, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 10 y 14, y el factor de agrupamiento s entre 2 y 8. La rutina más rápida es dgefexplu, siempre que se elija un valor adecuado para su factor de agrupamiento s (por ejemplo, entre 3 y 6). A continuación se muestran dos gráficas en las que aparecen los tiempos de ejecución, en segundos, de la rutina dgefexplu, para matrices aleatorias de dimensiones 500 y 1000, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 14, y el factor de agrupamiento s entre 3 y 6. 206 Capítulo 5: Resultados Experimentales Dimensión de la matriz n=500 1.5 1.45 dgefexplu(s=3) dgefexplu(s=4) dgefexplu(s=5) dgefexplu(s=6) 1.4 Tiempo (segundos) 1.35 1.3 1.25 1.2 1.15 1.1 1.05 1 5 6 Figura 5.6: 7 8 9 10 Grado g 11 12 13 14 Tiempos de ejecución, en segundos, de la rutina dgefexplu para una matriz aleatoria de dimensión igual a 500, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 14, y el factor s de agrupamiento entre 3 y 6. Dimensión de la matriz n=1000 12 dgefexplu(s=3) dgefexplu(s=4) dgefexplu(s=5) dgefexplu(s=6) 11.5 Tiempo (segundos) 11 10.5 10 9.5 9 8.5 8 5 Figura 5.7: 6 7 8 9 10 Grado g 11 12 13 14 Tiempos de ejecución, en segundos, de la rutina dgefexplu para una matriz aleatoria de dimensión igual a 1000, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 14, y el factor s de agrupamiento entre 3 y 6. De las tablas y gráficas anteriores se desprenden las siguientes conclusiones: 207 Capítulo 5: Resultados Experimentales • Para un mismo valor de s, el tiempo de ejecución menor corresponde a la rutina dgefexplu. • Los valores de s con menores tiempos de ejecución se encuentran entre 3 y 6. Por último, se presentan los resultados correspondientes a la rutina dgefpfplu. Esta rutina calcula potencias fraccionarias de una matriz mediante aproximantes diagonales de Padé, utilizando el método Paterson-Stockmeyer-Van Loan y la descomposición LU con pivotamiento parcial de filas en la resolución del sistema de ecuaciones lineales que aparece en el método. En los resultados que se presentan a continuación se ha considerado el caso particular de calcular la raíz cúbica de una matriz. En la siguiente tabla se muestran el error Er = || B 3 − A ||1 || A ||1 y el error Ec correspondiente a la ecuación conmutante. g=5 g=6 g=7 g=8 g=9 Er 0.544e-07 0.266e-09 0.893e-12 0.194e-12 0.195e-12 Ec 0.241e-12 0.241e-12 0.241e-12 0.240e-12 0.245e-12 Tabla 5.19: Errores Er y Ec de la rutina dgefpfhlu para una matriz aleatoria de dimensión igual a 100, considerando un factor de agrupamiento s igual a 2 y variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 9. g=10 g=11 g=12 g=13 g=14 Er 0.195e-12 0.195e-12 0.195e-12 0.195e-12 0.194e-12 Ec 0.241e-12 0.240e-12 0.241e-12 0.242e-12 0.241e-12 Tabla 5.20: Errores Er y Ec de la rutina dgefpfhlu para una matriz aleatoria de dimensión igual a 100, considerando un factor de agrupamiento s igual a 2 y variando el grado g de los polinomios de la aproximación diagonal de Padé entre 10 y 14. En las siguientes tablas se muestran los tiempos de ejecución de la rutina dgefpfhlu para una matriz aleatoria de dimensión igual a 100, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 9, y el factor de agrupamiento s entre 2 y 8. 208 Capítulo 5: Resultados Experimentales Te g=5 g=6 g=7 g=8 g=9 dgefpfplu s=2 3.2186 3.2317 3.2335 3.2162 3.3020 dgefpfplu s=3 3.2170 3.2147 3.2160 3.2155 3.2168 dgefpfplu s=4 3.3049 3.2177 3.2143 3.2947 3.2157 dgefpfplu s=5 3.2174 3.2497 3.2757 3.2169 3.2378 dgefpfplu s=6 3.2310 3.2354 3.2143 3.2892 dgefpfplu s=7 3.2339 3.2322 3.2592 dgefpfplu s=8 3.2190 3.2244 Tabla 5.21: Tiempos de ejecución de la rutina dgefpfhlu, para una matriz aleatoria de dimensión igual a 100, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 5 y 9, y el factor de agrupamiento s entre 2 y 8. g=10 g=11 g=12 g=13 g=14 dgefpfplu s=2 3.2500 3.2206 3.2194 3.2202 3.2764 dgefpfplu s=3 3.2327 3.2322 3.2310 3.2352 3.2780 dgefpfplu s=4 3.2298 3.2190 3.2169 3.2177 3.2565 dgefpfplu s=5 3.2608 3.2144 3.2157 3.3472 3.2166 dgefpfplu s=6 3.2164 3.2879 3.5763 3.2243 3.2343 dgefpfplu s=7 3.2725 3.2746 3.2620 3.2612 3.2157 dgefpfplu s=8 3.2540 3.2169 3.2306 3.2347 3.2661 Tabla 5.22: Tiempos de ejecución de la rutina dgefpfhlu , para una matriz aleatoria de dimensión igual a 100, variando el grado g de los polinomios de la aproximación diagonal de Padé entre 10 y 14, y el factor de agrupamiento s entre 2 y 8. Varias conclusiones se pueden extraer de estas cuatro últimas tablas: • La precisión obtenida es algo menor que la obtenida en el cálculo de la exponencial de una matriz. • Se obtiene una precisión aceptable a partir de los aproximantes diagonales de Padé de grado 7. 209 Capítulo 5: Resultados Experimentales • Los tiempos de ejecución son similares, independientemente del grado de los polinomios del aproximante diagonal de Padé y del factor de agrupamiento. • Los tiempos de ejecución de la rutina dgefpfplu para un tamaño de matriz igual a 100 son mayores que los tiempos de ejecución de la rutina dgefexhlu para un tamaño de matriz igual a 500. Las dos últimas conclusiones son consecuencia del mayor coste computacional de la rutina dgefpfplu, asociado al cálculo de la raíz cuadrada de una matriz, etapa necesaria para la reducción inicial de la norma de la matriz. 5.2.3 Rutinas Basadas en la Descomposición real de Schur de una matriz En este apartado se muestran las pruebas realizadas sobre las rutinas anteriores, salvo las correspondientes a las rutinas basadas en la agrupación de valores propios (rutinas dgeyyyscl), debido a que se ha comprobado que a partir de dimensiones de orden superior a 20, se comete un gran error a menos que se elija una agrupación mayor, coincidente en la mayoría de los casos con un único bloque. En tales casos es más eficiente utilizar directamente las rutinas basadas en los aproximantes diagonales de Padé (rutinas dgeyyysph y dgeyyyspp), puesto que estas rutinas no necesitan reordenaciones. La justificación de este comportamiento se encuentra en que el error cometido al resolver una ecuación matricial de Sylvester Tii X − XT jj = Fij , satisface que ~ || Fij || F || X − X || F ≅u . | X || F sep(Tii , T jj ) Por lo tanto, para dimensiones grandes y en funciones del tipo exponencial, el error puede ser muy grande debido tanto al valor de sep(Tii , T jj ) como al valor de || Fij ||F . Las pruebas se han realizado para la función exponencial. El motivo es que la precisión y las prestaciones obtenidas para otras funciones son semejantes, dadas las características de los algoritmos basados en la descomposición real de Schur de una matriz, con la única excepción del basado en los aproximantes diagonales de Padé. En las pruebas realizadas se ha utilizado la rutina dgefexplu (s=3, g=7) para compararla con las rutinas anteriormente mencionadas. Una de las medidas utilizadas para determinar la precisión de los algoritmos implementados es el error relativo cometido. Esto no siempre es posible, puesto que la solución exacta únicamente se puede conocer en determinados casos y para matrices de pequeña dimensión, exceptuando, evidentemente, el caso de exponenciales de matrices diagonales. Por ello, en algunas de las pruebas se han utilizado matrices cuya exponencial es conocida. En primer lugar se presentan los resultados obtenidos en cuanto a precisión, determinando el error relativo en el cálculo de la exponencial y el error relativo en la ecuación conmutante. Para ello se han generado matrices de la mayor dimensión posible que pudieran ser calculadas de manera exacta por MATLAB, utilizando las funciones de MATLAB sym y double que permiten pasar, respectivamente, datos de doble 210 Capítulo 5: Resultados Experimentales precisión a forma simbólica y datos de forma simbólica a doble precisión. Se han considerado las matrices A40 ∈ ℜ 40 x 40 ⎧aij = 0, i > j ⎪ ⎨aii = i, ⎪a = −1, i < j ⎩ ij y A70 ∈ ℜ 70 x 70 ⎧aij = 0, i > j ⎪ . ⎨aii = 1, ⎪a = −1, i < j ⎩ ij Aunque se han realizado pruebas en las que los parámetros característicos de cada una de ellas se han variado, únicamente se van a presentar aquellos que han obtenido buenos resultados en cuanto a precisión y coste computacional. Según esto, para las rutinas orientadas a bloques, dgefunsbc y dgefunsbd, se ha elegido un tamaño de bloque tb igual a 6 mientras que para las rutinas basadas en los aproximantes diagonales de Padé, dgefunsph y dgefunspp, se ha elegido un grado g=7 de los polinomios de la aproximación diagonal de Padé y un factor de agrupamiento s=4 para la rutina dgefunspp. En las siguiente tablas se muestran los errores Er y Ec al calcular f ( A40 ) y f ( A70 ) . Er Ec dgefexplu: g=7, s=3 0.31100e-15 0.22725e-13 dgefunscd 0.47810e-16 0.10017e-15 dgefunscc 0.33498e-16 0.50839e-16 dgefunsbd: tb= 6 0.44342e-16 0.93251e-16 dgefunsbc: tb= 6 0.35363e-16 0.48357e-16 dgeexpsdb 0.24563e-16 0.33250e-14 dgeexpsph: g=7 0.17226e-15 0.13560e-13 dgeexpspp: g=7, s=4 0.50249e-15 0.22583e-13 Tabla 5.23: Errores correspondientes al cálculo de f ( A40 ) mediante las rutinas dgefexplu, dgefunscd, dgefunscc, dgefunsbd, dgefunsbc, dgefunsdb, dgeexpsph y dgeexpspp. 211 Capítulo 5: Resultados Experimentales Er dgefexplu: g=7, s=3 Ec 0.21248e-15 0.45270e-13 dgefunscd Error Error dgefunscc Error Error dgefunsbd: tb= 6 Error Error dgefunsbc: tb= 6 Error Error dgeexpsdb 0.33016e-15 0.10266e-13 dgeexpsph: g=7 0.33016e-15 0.10266e-13 dgeexpspp: g=7, s=4 0.31550e-15 0.19864e-13 Tabla 5.24: Errores correspondientes al cálculo de f ( A70 ) mediante las rutinas dgefexplu, dgefunscd, dgefunscc, dgefunsbd, dgefunsbc, dgefunsdb, dgeexpsph y dgeexpspp. A continuación se presentan los errores relativos cometidos en la ecuación conmutante correspondientes a las rutinas que calculan la exponencial de matrices aleatorias de tamaños 500 y 1000. Ec 500 1000 dgefexplu: g=7, s=3 0.12378e-13 0.80748e-13 dgefunscd 0.59172e-14 0.98738e-14 dgefunscc 0.59172e-14 0.98738e-14 dgefunsbd: tb= 6 0.59369e-14 0.98059e-14 dgefunsbc: tb= 6 0.59381e-14 0.98646e-14 dgeexpsdb 0.68640e-14 0.15640e-13 dgeexpsph: g=7 0.67320e-14 0.12915e-13 dgeexpspp: g=7, s=4 0.75899e-14 0.15556e-13 Tabla 5.25: Errores cometidos (ecuación conmutante) por las rutinas dgefexplu, dgefunscd, dgefunscc, dgefunsbd, dgefunsbc, dgefunsdb, dgeexpsph y dgeexpspp en el cálculo de la exponencial de dos matrices aleatorias de dimensiones 500 y 1000. 212 Capítulo 5: Resultados Experimentales Los algoritmos se pueden clasificar, según su precisión, en tres grupos: • Grupo 1: rutina dgefexplu, basada en los aproximantes diagonales de Padé, y rutinas dgeexpsph y dgefunspp, basadas en la descomposición real de Schur de una matriz y en los aproximantes diagonales de Padé. • Grupo 2: rutinas dgefunscd, dgefunscc, dgefunsbd y dgefunsbc, basadas en la descomposición real de Schur de una matriz y en la ecuación conmutante. • Grupo 3: rutina dgeexpsdb, basada en la diagonalización por bloques de una matriz. A partir de las tablas anteriores se pueden extraer las siguientes conclusiones: • Los errores relativos cometidos en el cálculo de la función de una matriz y en la ecuación conmutante son similares, aunque este último es algo mayor que el primero. Esto es especialmente útil cuando no es conocido el valor exacto de la solución, pues permite conocer, aproximadamente, el error relativo cometido en el cálculo de funciones de matrices a partir del error cometido en la ecuación conmutante. • Las rutinas del grupo 2 son algo más precisas que las restantes siempre y cuando las matrices no presenten valores propios cercanos. • La rutina del grupo 3 es algo más precisa que las rutinas del grupo 1. • Para matrices con valores propios separados, los errores relativos cometidos por las rutinas de los grupos 2 y 3 son de magnitudes semejantes. • Para matrices con valores propios cercanos, las rutinas del grupo 2 presentan un elevado error. A continuación se muestran los tiempos de ejecución de las rutinas analizadas. Te 500 1000 dgefexplu g=7, s=3 1.0618 9.5562 dgefunscd 5.2754 108.28 dgefunscc 5.5376 119.61 dgefunsbd, tb= 6 4.8406 94.051 dgefunsbc, tb= 6 4.9379 98.215 dgefunsdb 5.5266 120.32 dgefunsph,g=7 4.9282 120.10 dgefunspp,g=7,s=4 6.0002 116.56 Tabla 5.26: Tiempos de ejecución, en segundos, de las rutinas dgefexplu, dgefunscd, dgefunscc, dgefunsbd, dgefunsbc, dgefunsdb, dgeexpsph y dgeexpspp, aplicadas al cálculo de la exponencial de dos matrices aleatorias de dimensiones 500 y 1000. 213 Capítulo 5: Resultados Experimentales De la tabla anterior se pueden extraer las siguientes conclusiones en cuanto a tiempos de ejecución: • La rutina dgefexplu, basada en los aproximantes diagonales de Padé, es la más rápida. • Las rutinas basadas en la resolución de la ecuación conmutante por bloques (dgefunsbd, dgefunsbc) se encuentran en segundo lugar. • Las rutinas basadas en la resolución de la ecuación conmutante por diagonales y columnas (dgefunscd, dgefunscc), junto con las rutinas basadas en la descomposición real de Schur de una matriz y en los aproximantes diagonales de Padé (dgeexpsph, dgeexpspp) se encuentran en tercer lugar. • La rutina basada en la diagonalización por bloques (dgefunsdb) es la más lenta. La justificación de estos resultados es que los algoritmos basados en los aproximantes diagonales de Padé son menos costosos que los basados en la descomposición real de Schur de una matriz y, siempre que se utilizan algoritmos orientados a bloques se obtienen tiempos de ejecución menores que los correspondientes a columnas o diagonales, debido a la localidad de los datos. 5.3 Propagación de Ondas Monocromáticas en Fibras de Cristal Fotónico En esta sección se desarrolla un estudio completo del uso de funciones de matrices en la simulación de la propagación de ondas en fibras de cristal fotónico. Las Fibras de Cristal Fotónico (FCF) fueron propuestas y fabricadas por primera vez en 1996 ([RuBi95]). Desde entonces, el interés sobre esta nueva tecnología ha ido creciendo debido a sus fascinantes propiedades. Las especiales características de guiado de la luz de las FCF como son, entre otras, la propagación monomodo o la dispersión ultraplana en un amplio rango de longitudes de onda, tienen potenciales aplicaciones en una gran variedad de campos que van desde las comunicaciones ópticas hasta la fabricación de dispositivos optoelectrónicos. Las propiedades de propagación del campo electromagnético en estos sistemas vienen determinadas por la configuración particular de la estructura dieléctrica transversal. Una FCF está constituida por una fibra delgada de sílice que presenta una distribución periódica de agujeros de aire que se extienden a lo largo de toda su longitud. Tal y como se muestra en la siguiente figura, la periodicidad transversal se pierde, en general, por la ausencia de uno de estos agujeros, lo que conlleva la aparición de un defecto. La ruptura de la periodicidad genera la localización de la luz en la región del defecto. 214 Capítulo 5: Resultados Experimentales Sílice Defecto Aire Figura 5.8: Fibra de cristal fotónico. La estructura de agujeros de aire constituye una red caracterizada geométricamente por la separación entre agujeros Λ y el radio a de los mismos. Típicamente Λ oscila entre 2 µm y 3 µm y el radio a entre 0,2 µm y 1,0 µm. Cuando la potencia incidente en la fibra es suficientemente alta, las propiedades de propagación se ven modificadas por la presencia de fenómenos de carácter no lineal. Bajo estas condiciones, las propiedades ya no dependen exclusivamente de las características de la fibra, sino que también entra en juego el propio campo propagante. Este régimen de propagación es intrínsecamente más complejo, y en el caso de las FCC, da lugar a espectaculares fenómenos como la generación de supercontínuo ([Coen01]), consistente en la formación de un amplio espectro al propagarse pulsos de alta potencia por el interior de la FCC, o la propagación de solitones espaciales (FeZF03], [FeZF04]), que consisten en estructuras espaciales localizadas que se propagan no linealmente sin deformarse. El problema consiste en modelizar la propagación no lineal de un campo monocromático en un medio inhomogéneo (la inhomogeneidad se debe a la estructura periódica de agujeros de aire). La evolución no lineal del campo eléctrico a lo largo de la fibra, viene descrita por la ecuación diferencial ∂ − i φ ( x, y, z ) = L(φ ( x, y, z ))φ ( x, y, z ) , z ( 5.1 ) donde L = ∇ t2 + k 02 n02 ( x, y ) + 3k 02 γ Χ (3) ∆( x, y ) | φ ( x, y, z ) | 2 , siendo ∂2 ∂2 + , ∂x 2 ∂y 2 • ∇ t2 = • k 0 = 2π / λ ( λ ≈ 1µm longitud de onda), • γ Χ (3) ≈ 10 −3 , 215 Capítulo 5: Resultados Experimentales • ⎧1.45 sílice n0 ( x, y )⎨ (índices de refracción), aire ⎩1 • ⎧1 sílice ∆ ( x, y ) = ⎨ . ⎩0 aire Las soluciones estacionarias, o solitones espaciales, de la ecuación diferencial anterior, vienen dados por la expresión φ ( x , y , z ) = Φ ( x , y ) e iβ z . Mediante técnicas iterativas de resolución de problemas de autovalores no lineales, se ha comprobado que existen dichas soluciones para diversas geometrías de la fibra. Una propiedad fundamental de estas soluciones es su estabilidad, entendiendo ésta como la robustez de la estructura espacial frente a perturbaciones. La solución es estable, si tras perturbar ligeramente el campo y dejarlo evolucionar a través de la fibra, vuelve asintóticamente al estado estacionario. Así pues, para comprobar la estabilidad, se ha de simular numéricamente la propagación a lo largo de la fibra mediante la ecuación ( 5.1 ) de la solución solitónica ligeramente perturbada, tanto en amplitud como en fase φ ( x, y,0) = Φ S ( x, y ) + δΦ . Realizando una aproximación de grado 0 en la ecuación diferencial ( 5.1 ), se tiene que el valor aproximado de φ en z + h es φ ( x, y , z + h ) = e i L (φ ( x , y , z ))h φ ( x, y , z ) , lo que permite analizar la evolución de φ a lo largo del eje z. Se trata pues de diseñar algoritmos estables y eficientes que permitan calcular la matriz ei Ah , siendo A = L(φ ) una matriz compleja densa, no necesariamente simétrica, de elevada norma, con valores propios múltiples, y donde h muy pequeño del orden 10 −9 . 5.3.1 Algoritmo Basado en la Diagonalización de una Matriz Se trata de obtener la descomposición A = VDV −1 , siendo ⎡λ1 0 ⎢0 λ 2 D=⎢ ⎢M M ⎢ ⎣0 0 0⎤ L 0 ⎥⎥ , O M⎥ ⎥ L λn ⎦ L una matriz diagonal, λi , i = 1,2, L , n , los valores propios de la matriz A y V matriz no singular cuyas columnas coinciden con los vectores propios de A . A partir de la descomposición anterior se calcula ei Ah = Ve i V −1 , Dh 216 Capítulo 5: Resultados Experimentales siendo ei Dh ⎡e i λ1 h ⎢ 0 =⎢ ⎢ M ⎢ ⎣⎢ 0 ⎤ ⎥ ⎥. ⎥ ⎥ i λ h L e n ⎦⎥ 0 e L L O i λ2 h M 0 A continuación se presenta el algoritmo que calcula ei de la matriz A . 0 0 M Ah mediante la diagonalización B = zgefereig( A, h) . Entradas: Matriz A ∈C nxn Matriz B = ei Ah Salida: , tamaño del paso h ∈ ℜ + . ∈C nxn . 1 Obtener la matriz V y el vector λ ∈ ℜ n de valores propios de la matriz A de manera que A = VDV −1 : 1.1 [V , λ ] = zgeev( A) 2 Calcular V = Vdiag (e 2.1 Para j = 1 : n i λ1 h ,e i λ2 h ,L, e i λn h ): i λ h 3 2.1.1 V (1 : n, j ) = V (1 : n, j )e j Calcular B resolviendo el sistema de ecuaciones lineales BV = V Algoritmo 5.1: Cálculo de la función f ( A) = e i matriz. Ah mediante la diagonalización de una 5.3.2 Algoritmo Basado en los Aproximantes Diagonales de Padé Este algoritmo calcula f ( A) = e i Ah mediante el Algoritmo 3.1 particularizado a la función f ( z ) = e i zh . 217 Capítulo 5: Resultados Experimentales B = zgeferpad ( A, h, l ) . Entradas: Matriz A ∈C nxn , tamaño del paso h ∈ ℜ + , grado l ∈ Z + de los polinomios de la aproximación diagonal de Padé. Salida: 1 2 3 4 Matriz B = ei Ah ∈C nxn . Aplicar transformaciones que disminuyan || A || : 1.1 Determinar h1 ∈ ℜ + de manera que la matriz A1 = Ah1 tenga una norma aproximadamente igual a 1, de este modo se tiene que ih Ah ih A ei Ah = e 2 1 = e 2 1 , siendo h2 = h / h1 . Encontrar el polinomio de Taylor a( x) de grado 2l + 1 de la función f ( z ) = e i z h2 . Encontrar los polinomios p(x) y q (x) del aproximante diagonal de Padé de grado l a partir del polinomio de Taylor a (x) . Calcular la aproximación de Padé B = r ( A1 ) = p ( A1 ) / q( A1 ) . Algoritmo 5.2: Cálculo de la función f ( A) = e i de Padé. Ah mediante aproximantes diagonales 5.3.3 Algoritmo Basado en la Iteración DB y en los Aproximantes Diagonales de Padé Este algoritmo consta de dos etapas. En la primera etapa se calcula B = A mediante el método iterativo DB con escalado (véase subapartado 2.2.3.3). En la segunda etapa se calcula C = e iA1h mediante los aproximantes diagonales de Padé. A continuación se muestra este algoritmo completo. B = zgeferdbp( A, h, l ) . Entradas: Matriz A ∈C nxn , tamaño del paso h ∈ ℜ + , grado l ∈ Z + de los polinomios del aproximante diagonal de Padé. Salida: 1 2 Matriz B = ei Ah ∈C nxn . A1 = dgefrcdbe( A,10 −15 ,100) (calcula A1 = A mediante Algoritmo 3.6 de la página 101) B = zgfexppsv( A) (calcula B = eiA1h mediante la adaptación para matrices complejas del Algoritmo 3.5 de la página 99) Algoritmo 5.3: Cálculo de la función f ( A) = e i Ah mediante la iteración DB con escalado y los aproximantes diagonales de Padé. 5.3.4 Resultados Las matrices utilizadas en la pruebas se han obtenido a partir de los datos del problema planteado, siendo sus tamaños iguales a 127, 271, 331, 721, 1027, 1261, 1387 y 1951. Las mejores prestaciones del algoritmo basado en los aproximantes diagonales de Padé (zgeferpad) se obtienen cuando el grado de los polinomios de la aproximación diagonal de Padé es igual a 9. En el caso del algoritmo basado en la iteración DB con escalado y 218 Capítulo 5: Resultados Experimentales en los aproximantes diagonales de Padé (zgeferdbp), las mejoras prestaciones se obtienen para un grado igual a 3. Como medida del error cometido en el cálculo de ei Ah se ha considerado el error relativo correspondiente a la ecuación conmutante, ya que la solución exacta no es conocida. De las pruebas realizadas se puede concluir que los algoritmos más precisos han resultado ser el Algoritmo 5.1 (zgefereig) y el Algoritmo 5.3 (zgeferdbp). En la siguiente tabla se muestran los tiempos de ejecución de las rutinas implementadas. Te n=127 n=271 n=331 n=721 n=1027 n=1261 n=1387 n=1951 zgefereig 0.093 0,163 1.469 22.15 64.847 114.53 156.37 402.90 zgeferpad 0.031 0.083 1.417 17.70 51.527 94.32 122.30 331.57 zgeferdbp 0.027 0.064 1.007 10.96 29.703 54.66 70.68 194.25 Tabla 5.27: Tiempos de ejecución, en segundos, de las rutinas zgefereig, zgeferpad y zgeferdbp. Como se puede observar en la tabla anterior, la rutina más rápida corresponde al Algoritmo 5.3 (zgeferdbp). A continuación se muestran la relación entre los tiempos de ejecución, en segundos, de las rutinas zgeferpad y zgeferdbp frente a la rutina zgefereig. Para ello se ha dividido el tiempo de ejecución de la rutina zgefereig (T) entre los tiempos de ejecución de las rutinas zgeferpad y zgeferdbp (Ti). T/Ti n=127 n=271 n=331 n=721 n=1027 n=1261 n=1387 n=1951 zgeferpad 3.000 1,964 1.037 1.251 1.259 1.214 1.279 1.215 zgeferdbp 3.444 2,547 1.459 2.021 2.183 2.095 2.212 2.074 Tabla 5.28: Relación entre el tiempo de ejecución de la rutina zgefereig (T) y los tiempos de ejecución (Ti) de las rutinas zgeferpad y zgeferdbp. 219 Capítulo 5: Resultados Experimentales zgeferpad zgeferdbp 4,000 3,500 3,000 T/Ti 2,500 2,000 1,500 1,000 0,500 0,000 n=127 n=271 n=331 n=721 n=1027 n=1261 n=1387 n=1951 Dimensión Figura 5.9: Relación entre el tiempo de ejecución de la rutina zgefereig (T) y los tiempos de ejecución (Ti) de las rutinas zgeferpad y zgeferdbp. Como conclusión, se puede decir que la rutina que presenta un mejor comportamiento, en cuanto a precisión y menores tiempos de ejecución, es la correspondiente al algoritmo basado en la iteración DB con escalado y en los aproximantes diagonales de Padé (zgeferdbp). 5.4 Resolución de EDOs En las pruebas realizadas se han comparado los algoritmos descritos en la sección 4.2 con un algoritmo basado en el método BDF (véase subapartado 2.3.3.3.2). Este algoritmo se muestra continuación. 220 Capítulo 5: Resultados Experimentales Y = dgeedobdf (data, t , x0 , r , tol , maxiter ) . Entradas: Función data (t , x) que devuelve la matriz Jacobiana J (t , x) ∈ ℜnxn y el vector f (t , x) ∈ ℜ n , vector de tiempos t ∈ ℜ l +1 , vector inicial x0 ∈ ℜ n , orden r ∈ Z + del método BDF, tolerancia tol ∈ ℜ + del método BDF, número máximo de iteraciones maxiter ∈ Z + del método BDF. Salida: 1 2 3 Matriz Y = [ y 0 , y1 ,L , y l ] ∈ ℜ nx (l +1) , yi ∈ ℜ n , i = 0,1, L , l . Inicializar α y β con los valores dados en la Tabla 2.4 (página 55) y0 = x0 ; j = 0 Para i = 0 : l − 1 3.1 ∆t = ti +1 − ti 3.2 j = j + 1 ; p = min(r , j ) 3.3 Para k = p : −1 : 2 3.3.1 X (1 : n, k ) = X (1 : n, k − 1) 3.4 X (1 : n,1) = yi ; f 0 = α p1 X (1 : n,1) 3.5 3.6 3.7 3.8 Para k = 2 : p 3.5.1 f 0 = f 0 + α pk X (1 : n, k ) yi +1 = yi k =1 Mientras k ≤ maxiter (método de Newton) 3.8.1 [ J , f ] = data(ti , yi +1 ) 3.8.2 y = − yi +1 + f 0 β p f 3.8.3 3.9 J = I n − ∆tβ p J 3.8.4 Determinar ∆y resolviendo la ecuación J∆y = y 3.8.5 Si norm(∆y ) < tol 3.8.5.1 Salir fuera del bucle 3.8.6 yi +1 = yi + ∆y 3.8.7 k = k + 1 Si k = = maxiter 3.9.1 error (no hay convergencia) Algoritmo 5.4: Resolución de EDOs mediante el método BDF. Una breve descripción de los algoritmos implementados y de sus parámetros característicos aparece a continuación. • dgeedobdf: Resuelve EDOs mediante el método BDF. − r: orden del método BDF. − tol: tolerancia utilizada en el método de Newton. − maxiter: Número máximo de iteraciones utilizado en el método de Newton. • dgeedolpn y dgeedolpa : Resuelven EDOs, no autónomas y autónomas, mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé de la función exponencial. 221 Capítulo 5: Resultados Experimentales − q: grado de los polinomios de la aproximación diagonal de Padé de la función exponencial. • dgeedolcn y dgeedolca: Resuelven EDOs, no autónomas y autónomas, mediante el método de linealización a trozos basado en la ecuación conmutante. − q: grado de los polinomios de la aproximación diagonal de Padé de la función exponencial. • dgeedolkn y dgeedolka: Resuelven EDOs, no autónomas y autónomas, mediante el método de linealización a trozos basado en los subespacios de Krylov. − p: dimensión del subespacios de Krylov. − tol: tolerancia en el método de los subespacios de Krylov. − q: grado de los polinomios de la aproximación diagonal de Padé de la función exponencial. Para cada caso de estudio se han determinado los valores de los parámetros característicos que ofrecen mayor precisión con un menor coste computacional, habiéndose realizado hasta tres tipos de pruebas: • Fijar el tamaño del problema y el instante de tiempo, variando el incremento de tiempo. • Fijar el tamaño del problema y el incremento de tiempo, variando el instante de tiempo. • Fijar el instante de tiempo y el incremento de tiempo, variando el tamaño del problema. Para cada prueba se muestran: • Tabla que contiene los errores relativos cometidos. • Tabla con los costes computacionales en flops. • Tabla en la que se muestra la relación entre el coste computacional, en flops, del algoritmo basado en el método BDF y los costes computacionales, en flops, de los algoritmos basados en la linealización a trozos. • Gráfica que muestra la relación entre el coste computacional, en flops, del algoritmo basado en el método BDF y los costes computacionales, en flops, de los algoritmos basados en la linealización a trozos. En los casos de estudio que no tienen solución analítica conocida se ha considerado como solución exacta, en un instante determinado, la obtenida a partir de la función de MATLAB ode15s (véase Tabla 6.1, página 308). 5.4.1 EDOs Autónomas Problema 5.1: El primer caso de estudio de una EDO autónoma ([Garc98]), corresponde a una EDO definida como x' = − x3 , t ≥ 0, 2 con la condición inicial 222 Capítulo 5: Resultados Experimentales x(0) = 1 . La solución de esta EDO es x(t ) = 1 1+ t . Los valores elegidos para los parámetros característicos se muestran a continuación. • dgeedobdf: r=2, tol=1e-6, maxiter=100. • dgeedolpa: q=1. • dgeedolca: q=1. • dgeedolpa: p=2, tol=1e-6, q=1. En la primera prueba se considera t=5 y se varía el incremento de tiempo ∆t. ∆t=0.1 Er ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 3.883e-05 1.306e-05 6.563e-07 1.688e-07 6.905e-09 1.731e-09 dgeedolpa 4.467e-05 1.101e-05 4.353e-07 1.087e-07 4.342e-09 1.085e-09 dgeedolca 4.467e-05 1.101e-05 4.353e-07 1.087e-07 4.342e-09 1.085e-09 dgeedolka 4.467e-05 1.101e-05 4.353e-07 1.087e-07 4.342e-09 1.085e-09 Tabla 5.29: Errores relativos en el instante de tiempo t=5, variando ∆t. Flops ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 2958 5058 21998 43998 219998 439998 dgeedolpa 1351 2701 13501 27001 135001 270001 dgeedolca 1051 2101 10501 21001 105001 210001 dgeedolka 3600 7200 36001 72001 360001 720001 Tabla 5.30: Número de flops en el instante de tiempo t=5, variando ∆t. 223 Capítulo 5: Resultados Experimentales ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 F/Fi dgeedolpa 2.189 1.873 1.629 1.629 1.630 1.630 dgeedolca 2.814 2.407 2.095 2.095 2.095 2.095 dgeedolka 0.822 0.703 0.611 0.611 0.611 0.611 Tabla 5.31: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar ∆t. Flops(dgeedobdf)/Flops(dgeedolpa) Flops(dgeedobdf)/Flops(dgeedolca) Flops(dgeedobdf)/Flops(dgeedolk a) 2.5 F/Fi 2 1.5 1 0.5 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.10: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar ∆t. En la segunda prueba se considera ∆t=0.1 y se varía el tiempo t. 224 Capítulo 5: Resultados Experimentales Er t=10 t=20 t=30 t=40 t=50 t=60 dgeedobdf 2.343e-05 2.540e-05 2.034e-05 1.659e-05 1.392e-05 1.197e-05 dgeedolpa 2.653e-05 1.454e-05 1.001e-05 7.626e-06 6.160e-06 5.167e-06 dgeedolca 2.653e-05 1.454e-05 1.001e-05 7.626e-06 6.160e-06 5.167e-06 dgeedolka 2.653e-05 1.454e-05 1.001e-05 7.626e-06 6.160e-06 5.167e-06 Tabla 5.32: Errores relativos al considerar ∆t=0.1 y variar el tiempo t. Flops t=5 t=10 t=15 t=20 t=25 t=30 dgeedobdf 5158 9558 13958 18358 22758 27158 dgeedolpa 2701 5401 8101 10801 13501 16201 dgeedolca 2101 4201 6301 8401 10501 12601 dgeedolka 7200 14400 21600 28800 36000 43200 Tabla 5.33: Número de flops al considerar ∆t=0.1 y variar el tiempo t. F/Fi t=5 t=10 t=15 t=20 t=25 t=30 dgeedolpa 1.910 1.770 1.723 1.700 1.686 1.676 dgeedolca 2.455 2.275 2.215 2.185 2.167 2.155 dgeedolka 0.716 0.664 0.646 0.637 0.632 0.629 Tabla 5.34: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. 225 Capítulo 5: Resultados Experimentales 2.6 Flops(dgeedobdf )/Flops(dgeedolpa) Flops(dgeedobdf )/Flops(dgeedolca) Flops(dgeedobdf )/Flops(dgeedolk a) 2.4 2.2 2 F/Fi 1.8 1.6 1.4 1.2 1 0.8 5 10 15 20 25 30 t Figura 5.11: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • A medida que se incrementa el tiempo, los errores relativos cometidos por los algoritmos basados en la linealización a trozos son algo menores que los cometidos por el algoritmo basado en el método BDF (dgeedobdf). • Los algoritmos de linealización a trozos basados en los aproximantes diagonales de Padé (dgeedolpa) y en la ecuación conmutante (dgeedolca) tienen un coste computacional menor que el algoritmo basado en el método BDF (dgeedobdf). • El mayor coste computacional corresponde al algoritmo de linealización a trozos basado en los subespacios de Krylov (dgeedolka). Problema 5.2: El segundo caso de estudio de una EDO autónoma corresponde a la ecuación logística ([Garc98]) definida como x' = λx(1 − x) , t ≥ 0 , con la condición inicial x(0) = x 0 . La solución de esta EDO es x(t ) = x0 . (1 − x0 )e −λt + x0 En las pruebas realizadas se ha considerado λ = 2 y x0 = 2 . Los valores elegidos para los parámetros característicos se muestran a continuación. • dgeedobdf: r=2, tol=1e-6, maxiter=100. 226 Capítulo 5: Resultados Experimentales • dgeedolpa: q=1. • dgeedolca: q=1. • dgeedolpa: p=2, tol=1e-6, q=1. En la primera prueba se considera t=5 y se varía el incremento de tiempo ∆t. ∆t=0.1 Er ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 3.397e-06 7.848e-07 2.876e-08 7.096e-09 2.807e-10 7.013e-11 dgeedolpa 7.486e-07 1.887e-07 7.566e-09 1.892e-09 7.567e-11 1.892e-11 dgeedolca 7.486e-07 1.887e-07 7.566e-09 1.892e-09 7.567e-11 1.892e-11 dgeedolka 7.486e-07 1.887e-07 7.566e-09 1.892e-09 7.567e-11 1.892e-11 Tabla 5.35: Errores relativos en el instante de tiempo t=5, variando ∆t. Flops ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 2598 4918 21898 41398 189078 364338 dgeedolpa 1351 2701 13501 27001 135001 270001 dgeedolca 1051 2101 10501 21001 105001 210001 dgeedolka 3601 7201 36001 72001 360001 720001 Tabla 5.36: Número de flops en el instante de tiempo t=5, variando ∆t. F/Fi ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedolpa 1.923 1.821 1.622 1.533 1.401 1.349 dgeedolca 2.472 2.341 2.085 1.971 1.801 1.735 dgeedolka 0.721 0.683 0.608 0.575 0.525 0.506 Tabla 5.37: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar ∆t. 227 Capítulo 5: Resultados Experimentales Flops(dgeedobdf )/Flops(dgeedolpa) Flops(dgeedobdf )/Flops(dgeedolca) Flops(dgeedobdf )/Flops(dgeedolk a) F/Fi 2 1.5 1 0.5 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.12: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar ∆t. En la segunda prueba se considera ∆t=0.1 y se varía el tiempo t. Er t=3 t=6 t=9 t=12 t=15 t=18 dgeedobdf 1.142e-04 5.437e-07 1.933e-09 6.109e-12 1.887e-14 2.220e-16 dgeedolpa 2.472e-05 1.212e-07 4.461e-10 1.460e-12 4.441e-15 2.220e-16 dgeedolca 2.472e-05 1.212e-07 4.461e-10 1.460e-12 4.441e-15 2.220e-16 dgeedolka 2.472e-05 1.212e-07 4.461e-10 1.460e-12 4.441e-15 2.220e-16 Tabla 5.38: Errores relativos al considerar ∆t =0.1 y variar el tiempo t. 228 Capítulo 5: Resultados Experimentales t=3 t=15 t=18 dgeedobdf 1718 2978 3698 4418 5138 5858 dgeedolpa 811 1621 2431 3241 4051 4861 dgeedolca 631 1261 1891 2521 3151 3781 Flops t=6 t=9 t=12 dgeedolka 2161 4321 6481 8641 10801 12961 Tabla 5.39: Número de flops al considerar ∆t=0.1 y variar el tiempo t. t=3 F/Fi t=6 t=9 t=12 t=15 t=18 dgeedolpa 2.118 1.837 1.521 1.363 1.268 1.205 dgeedolca 2.723 2.362 1.956 1.752 1.631 1.549 dgeedolka 0.795 0.689 0.571 0.511 0.476 0.452 Tabla 5.40: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. 3 Flops(dgeedobdf )/Flops(dgeedolpa) Flops(dgeedobdf )/Flops(dgeedolca) Flops(dgeedobdf )/Flops(dgeedolk a) 2.5 F/Fi 2 1.5 1 0.5 0 2 4 6 8 10 t 12 14 16 18 Figura 5.13: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. 229 Capítulo 5: Resultados Experimentales De los resultados obtenidos se pueden extraer las siguientes conclusiones: • Los errores relativos cometidos por los algoritmos basados en el método de linealización son algo menores que los cometidos por el algoritmo basado en el método BDF (dgeedobdf). • Los algoritmos de linealización a trozos basados en los aproximantes diagonales de Padé (dgeedolpa) y en la ecuación conmutante (dgeedolca) tienen costes computacionales menores que el algoritmo basado en el método BDF (dgeedobdf). • El mayor coste computacional corresponde al algoritmo basado en la linealización a trozos mediante los subespacios de Krylov (dgeedolka). Problema 5.3: El tercer caso de estudio corresponde a una EDO autónoma no lineal de orden seis de tipo rígido ([LiSw98]) definida como x' = f ( x) , t ≥ 0 , x = x(t ) ∈ ℜ 6 , 0 ≤ t ≤ 180 , con la condición inicial x(0) = [0.437, 0.00123, 0, 0, 0, 0.367]T , siendo ⎡ − 2r1 + r2 − r3 − r4 ⎤ ⎢ − 0 .5 r − r − 0 .5 r + F ⎥ 1 4 5 in ⎥ ⎢ ⎥ ⎢ r1 − r2 + r3 f ( x) = ⎢ ⎥, − r2 − r3 − 2r4 ⎥ ⎢ ⎥ ⎢ r2 − r3 + 2r5 ⎥ ⎢ − r5 ⎦⎥ ⎣⎢ donde ri , i = 1,2,3,4,5 , y Fin son variables auxiliares dadas por r1 = k1 y14 y 20.5 , r2 = k 2 y 3 y 4 , r3 = k2 y1 y5 , K r4 = k 3 y1 y 42 , r5 = k 4 y 66 y 20.5 , ⎛ p(CO2 ) ⎞ Fin = klA⎜ y2 ⎟ . ⎝ H ⎠ Los valores de los parámetros k1 , k 2 , k 3 , k 4 , K , KlA , p (CO2 ) y H son k1 k2 k3 k4 = 18.7, = 0.58, = 0.09, = 0.42, K = 34.4, klA = 3.3, p (CO2 ) = 3.3 H = 737. 230 Capítulo 5: Resultados Experimentales El problema proviene del centro de investigación Akzo Novel Central Research de Arnhem, en el que se modela un proceso químico (para más detalles, véase [LiSw98]). Puesto que la matriz Jacobiana es en ocasiones singular, no se puede utilizar el método de linealización a trozos basado en la ecuación conmutante (dgeedolca). En las pruebas realizadas se comparan los otros tres métodos, siendo los valores elegidos para los parámetros característicos los que se muestran a continuación. • dgeedobdf: r=2, tol=1e-6, maxiter=100. • dgeedolpa: q=1. • dgeedolka: p=3, tol=1e-6, q=1. En la primera prueba se considera t=5 y se varía el incremento de tiempo ∆t. ∆t=0.1 Er ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 7.418e-05 2.369e-05 1.235e-06 3.239e-07 1.254e-08 2.384e-09 dgeedolpa 1.348e-04 3.640e-05 9.074e-07 2.351e-07 8.720e-09 1.445e-09 dgeedolka 4.615e-04 9.971e-05 4.416e-06 1.130e-06 4.511e-08 1.054e-08 Tabla 5.41: Errores relativos en el instante de tiempo t=5, variando ∆t. Flops ∆t=0.1 dgeedobdf 68915 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 134645 651012 1302056 6510424 13020896 dgeedolpa 231607 373113 964537 1929081 9645449 19290913 dgeedolka 33832 332848 665698 3328477 6656950 66898 Tabla 5.42: Número de flops en el instante de tiempo t=5, variando ∆t. F/Fi ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedolpa 0.298 0.361 0.675 0.675 0.675 0.675 dgeedolka 2.037 2.013 1.956 1.956 1.956 1.956 Tabla 5.43: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar ∆t. 231 Capítulo 5: Resultados Experimentales 2 Flops(dgeedobdf )/Flops(dgeedolpa) Flops(dgeedobdf )/Flops(dgeedolk a) F/Fi 1.5 1 0.5 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.14: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar ∆t. En la segunda prueba se considera ∆t=0.01 y se varía el tiempo t. t=5 Er t=10 t=15 t=20 t=25 t=30 dgeedobdf 1.236e-06 1.218e-06 1.080e-06 9.033e-07 7.314e-07 5.838e-07 dgeedolpa 9.084e-07 9.398e-07 8.524e-07 7.170e-07 5.791e-07 4.585e-07 dgeedolka 4.417e-06 4.625e-06 4.350e-06 3.961e-06 3.169e-06 2.508e-06 Tabla 5.44: Errores relativos al considerar ∆t=0.01 y variar el tiempo t. Flops t=5 t=10 t=15 t=20 t=25 t=30 dgeedobdf 651012 1301512 1952012 2602668 3253168 3903668 dgeedolpa 964537 1928537 2892537 3856693 4820693 5784693 dgeedolka 332848 665848 998848 1331848 1664848 1997848 Tabla 5.45: Número de flops al considerar ∆t=0.01 y variar el tiempo t. 232 Capítulo 5: Resultados Experimentales F/Fi t=5 t=10 t=15 t=20 t=25 t=30 dgeedolpa 0.675 0.675 0.675 0.675 0.675 0.675 dgeedolka 1.956 1.955 1.954 1.954 1.954 1.954 Tabla 5.46: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.01 y variar el tiempo t. 2 1.8 1.6 Flops(dgeedobdf )/Flops(dgeedolpa) Flops(dgeedobdf )/Flops(dgeedolk a) F/Fi 1.4 1.2 1 0.8 5 10 15 20 25 30 t Figura 5.15: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.01 y variar el tiempo t. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • No se puede utilizar el algoritmo de linealización a trozos basado en la ecuación conmutante (dgeedolca), por ser la matriz jacobiana no singular. • Los errores relativos cometidos por los otros tres algoritmos son semejantes, aunque algo mayores en el caso del algoritmo de linealización a trozos basado en los subespacios de Krylov (dgeedolka). • El algoritmo con menor coste computacional es el de linealización a trozos basado en los subespacios de Krylov (dgeedolka) y el de mayor coste computacional el de linealización a trozos basado en los aproximantes diagonales de Padé (dgeedolpa). Problema 5.4: El cuarto caso de estudio proviene de una EDO autónoma no lineal de tipo rígido ([LiSw98]) definida como 233 Capítulo 5: Resultados Experimentales x' = f ( x) , t ≥ 0 , x = x(t ) ∈ ℜ 8 , 0 ≤ t ≤ 321.8122 , con la condición inicial x(0) = [1, 0, 0, 0, 0, 0, 0, 0.0057]T , siendo − 1.71 y1 + 0.43 y2 + 8.32 y3 + 0.0007 ⎤ ⎡ ⎥ ⎢ 1.71 y1 − 8.75 y2 ⎥ ⎢ ⎥ ⎢ − 10.03 y3 + 0.43 y4 + 0.035 y5 ⎥ ⎢ 8.32 y2 + 1.71 y3 − 1.12 y4 ⎥. ⎢ f ( x) = ⎥ ⎢ − 1.745 y5 + 0.43 y6 + 0.43 y7 ⎥ ⎢ ⎢− 280 y6 y8 + 0.69 y4 + 1.71 y5 − 0.43 y6 + 0.69 y7 ⎥ ⎥ ⎢ 280 y6 y8 − 1.81y7 ⎥ ⎢ − 280 y6 y8 + 1.81y7 ⎥⎦ ⎢⎣ El problema describe la manera en que la luz se ve envuelta en un proceso de morfogénesis (para más detalles, véase [LiSw98]). Puesto que la matriz Jacobiana es en ocasiones singular, no se puede utilizar el método de linealización a trozos basado en la ecuación conmutante (dgeedolca). En las pruebas realizadas se comparan los otros tres métodos, siendo los valores elegidos para los parámetros característicos los que se muestran a continuación. • dgeedobdf: r=3, tol=1e-6, maxiter=100. • dgeedolpa: q=1. • dgeedolka: p=4, tol=1e-6, q=1. En la primera prueba se considera t=5 y se varía el incremento de tiempo ∆t. Er ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 4.247e-04 1.060e-04 4.104e-06 1.021e-06 4.066e-08 1.015e-08 dgeedolpa 4.357e-05 1.526e-05 4.833e-07 1.464e-07 5.852e-09 1.460e-09 dgeedolka 5.783e-05 1.040e-05 5.151e-07 1.366e-07 5.767e-09 1.450e-09 Tabla 5.47: Errores relativos en el instante de tiempo t=5, variando ∆t. 234 Capítulo 5: Resultados Experimentales ∆t=0.1 Flops ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 1807166 18073278 dgeedobdf 103407 198194 903502 dgeedolpa 563229 919485 2320075 3237239 16186679 32373499 dgeedolka 87281 628419 6281415 158617 1256679 9036520 12562747 Tabla 5.48: Número de flops en el instante de tiempo t=5, variando ∆t. ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 F/Fi dgeedolpa 0.184 0.216 0.389 0.558 0.558 0.558 dgeedolka 1.185 1.250 1.438 1.438 1.439 1.439 Tabla 5.49: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar ∆t. Flops(dgeedobdf )/Flops(dgeedolpa) Flops(dgeedobdf )/Flops(dgeedolk a) F/Fi 1 0.5 0 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.16: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar ∆t. En la segunda prueba se considera ∆t=0.01 y se varía el tiempo t. 235 Capítulo 5: Resultados Experimentales Er t=50 t=100 t=150 t=200 t=250 t=300 dgeedobdf 1.860e-06 2.294e-06 2.989e-06 4.276e-06 7.425e-06 2.406e-05 dgeedolpa 7.245e-07 8.936e-07 1.164e-06 1.665e-06 2.892e-06 9.380e-06 dgeedolka 9.694e-07 1.195e-06 1.556e-06 2.221e-06 3.806e-06 9.309e-06 Tabla 5.50: Errores relativos al considerar ∆t=0.01 y variar el tiempo t. Flops t=50 dgeedobdf 9039384 t=100 t=150 t=200 18079194 27118984 36158864 t=250 t=300 45198754 54238534 dgeedolpa 31963104 58718104 85473104 106785016 122975016 139165016 dgeedolka 3260055 5465055 7670055 9875055 12080055 14285055 Tabla 5.51: Número de flops al considerar ∆t=0.01 y variar el tiempo t. F/Fi t=50 t=100 t=150 t=200 t=250 t=300 dgeedolpa 0.283 0.308 0.317 0.339 0.368 0.390 dgeedolka 2.773 3.308 3.536 3.662 3.742 3.797 Tabla 5.52: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.01 y variar el tiempo t. 236 Capítulo 5: Resultados Experimentales 4 3.5 3 Flops(dgeedobdf)/Flops(dgeedolpa) Flops(dgeedobdf)/Flops(dgeedolk a) F/Fi 2.5 2 1.5 1 0.5 0 50 100 150 200 250 300 t Figura 5.17: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.01 y variar el tiempo t. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • No se puede utilizar el algoritmo de linealización a trozos basado en la ecuación conmutante (dgeedolca), por ser la matriz jacobiana no singular. • Los errores relativos cometidos por los otros tres algoritmos son semejantes, aunque algo mayores en el caso del algoritmo basado en el método BDF (dgeedobdf). • El algoritmo con menor coste computacional es el de linealización a trozos basado en los subespacios de Krylov (dgeedolka), y el de mayor coste computacional el de linealización a trozos basado en los aproximantes diagonales de Padé (dgeedolpa). 5.4.2 EDOs no autónomas Problema 5.5: El primer caso de estudio de una EDO no autónoma ([Garc98]) corresponde a una EDO definida como x' = (t − x) 2 + 1 , t ≥ 3 , con la condición inicial x(3) = 2 . 237 Capítulo 5: Resultados Experimentales La solución de esta EDO es x(t ) = t + 1 . 2−t Los valores elegidos para los parámetros característicos se muestran a continuación. • dgeedobdf: r=2, tol=1e-6, maxiter=100. • dgeedolpn: q=1. • dgeedolcn: q=1. • dgeedolkn: p=3, tol=1e-6, q=1. En la primera prueba se considera t=4 y se varia el incremento de tiempo ∆t. Er ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 3.694e-04 8.889e-05 3.557e-06 8.908e-07 3.570e-08 8.926e-09 dgeedolpn 1.269e-16 1.269e-16 1.269e-16 2.538e-16 1.269e-16 6.344e-16 dgeedolcn 1.269e-16 1.269e-16 7.613e-16 dgeedolkn 1.269e-16 1.269e-16 0 0 3.806e-16 6.344e-16 1.269e-16 7.613e-16 6.344e-16 Tabla 5.53: Errores relativos en el instante de tiempo t=4, variando ∆t. Puesto que para un incremento de tiempo igual a 0.1 los métodos de linealización a trozos presentan un error muy pequeño, solo se van a representar lo resultados obtenidos para este incremento. Flops ∆t=0.1 dgeedobdf 2958 dgeedolpn 1351 dgeedolcn 1051 dgeedolkn 3600 Tabla 5.54: Número de flops para t=4 y ∆t=0.1. 238 Capítulo 5: Resultados Experimentales ∆t=0.1 F/Fi dgeedolpn 2.189 dgeedolcn 2.814 dgeedolkn 0.822 Tabla 5.55: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=4 y ∆t=0.1. En la segunda prueba se considera ∆t=0.1 y se varía el tiempo t. t=3.5 Er t=4 t=4.5 t=5 t=5.5 t=6 dgeedobdf 1.463e-03 3.694e-04 1.081e-04 2.951e-05 2.748e-06 6.608e-06 1.269e-16 0 dgeedolcn 1.567e-16 1.269e-16 0 dgeedolkn 1.567e-16 1.269e-16 0 dgeedolpn 0 0 0 1.545e-16 1.903e-16 3.407e-16 1.545e-16 0 0 1.545e-16 Tabla 5.56: Errores relativos al considerar ∆t=0.1 y variar el tiempo t. Flops t=3.5 t=4 t=4.5 t=5 t=5.5 t=6 dgeedobdf 318 638 958 1278 1598 1918 dgeedolpn 166 330 495 660 824 989 dgeedolcn 136 271 406 541 676 811 dgeedolkn 1736 3471 5206 6956 8706 10456 Tabla 5.57: Número de flops al considerar ∆t=0.1 y variar el tiempo t. 239 Capítulo 5: Resultados Experimentales F/Fi t=3.5 t=4 t=4.5 t=5 t=5.5 t=6 dgeedolpn 1.916 1.933 1.935 1.936 1.939 1.939 dgeedolcn 2.338 2.354 2.360 2.362 2.364 2.365 dgeedolkn 0.183 0.184 0.184 0.184 0.184 0.183 Tabla 5.58: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. 2.5 2 1.5 F/Fi Flops(dgeedobdf )/Flops(dgeedolpn) Flops(dgeedobdf )/Flops(dgeedolcn) Flops(dgeedobdf )/Flops(dgeedolk n) 1 0.5 0 3.5 4 4.5 5 5.5 6 t Figura 5.18: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • Los errores relativos cometidos por los algoritmos de linealización a trozos son mucho menores que los cometidos por el algoritmo basado en el método BDF (dgeedobdf). • Los algoritmos de linealización a trozos basados en los aproximantes diagonales de Padé (dgeedolpn) y en la ecuación conmutante (dgeedolcn) tienen un coste computacional menor que el algoritmo basado en el método BDF (dgeedobdf). • El mayor coste computacional corresponde al algoritmo de linealización a trozos basado en los subespacios de Krylov (dgeedolkn). 240 Capítulo 5: Resultados Experimentales Problema 5.6: El segundo caso de estudio de una EDO no autónoma ([AsPe91], página 153) corresponde a una EDO definida como x' = λ ( x − sen t ) + cos t , t ≥ 0 , con la condición inicial x(0) = 1 , cuya solución viene dada por la expresión x(t ) = e λt + sen t . En las pruebas realizadas se ha considerado λ = 2 , siendo los valores elegidos para los parámetros característicos los que se muestran a continuación. • dgeedobdf: r=3, tol=1e-6, maxiter=100. • dgeedolpn: q=1. • dgeedolcn: q=1. • dgeedolkn: p=3, tol=1e-6, q=1. En la primera prueba se considera t=5 y se varía el incremento de tiempo ∆t. ∆t=0.1 Er ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 4.705e-02 9.254e-03 2.803e-04 6.702e-05 1.996e-03 6.421e-07 dgeedolpn 3.380e-02 8.302e-03 3.301e-04 8.251e-05 1.995e-03 8.250e-07 dgeedolcn 3.380e-02 8.302e-03 3.301e-04 8.251e-05 1.995e-03 8.250e-07 dgeedolkn 3.380e-02 8.302e-03 3.301e-04 8.251e-05 1.995e-03 8.250e-07 Tabla 5.59: Errores relativos en el instante de tiempo t=5, variando el incremento de tiempo ∆t. Flops ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgeedobdf 2543 5093 25493 50993 254942 509993 dgeedolpn 1851 3701 18501 37001 184964 370001 dgeedolcn 1301 2601 13001 26001 129975 260001 dgeedolkn 15136 28126 133379 264460 1292732 2555052 Tabla 5.60: Número de flops en el instante de tiempo t=5, variando el incremento de tiempo ∆t. 241 Capítulo 5: Resultados Experimentales ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 F/Fi dgeedolpn 1.374 1.376 1.378 1.378 1.378 1.378 dgeedolcn 1.955 1.958 1.961 1.961 1.961 1.962 dgeedolkn 0.168 0.181 0.191 0.193 0.197 0.200 Tabla 5.61: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar el incremento de tiempo ∆t. F/Fi 1.5 Flops(dgeedobdf)/Flops(dgeedolpn) Flops(dgeedobdf)/Flops(dgeedolcn) Flops(dgeedobdf)/Flops(dgeedolk n) 1 0.5 0 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.19: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=5 y variar el incremento de tiempo ∆t. En la segunda prueba se varía el tiempo t entre 5 y 30. Por problemas de convergencia en el método BDF, se ha aumentado el número de iteraciones maxiter a 10000. Se ha comprobado que aunque el incremento de tiempo se disminuyera, el método BDF no converge para valores de tiempo mayores que 15. En las siguientes tablas se muestran los resultados obtenidos al considerar ∆t=0.1. 242 Capítulo 5: Resultados Experimentales t=5 Er t=10 t=15 t=20 dgeedobdf 4.705e-02 6.383e-02 8.542e-01 Error t=25 t=30 Error Error dgeedolpn 3.380e-02 6.906e-02 1.055e-01 6.464e-02 3.274e-02 2.452e-04 dgeedolcn 3.380e-02 6.906e-02 1.055e-01 6.464e-02 3.274e-02 2.452e-04 dgeedolkn 3.380e-02 6.906e-02 1.055e-01 6.464e-02 3.274e-02 2.444e-04 Tabla 5.62: Errores relativos al considerar ∆t=0.1 y variar el tiempo t. t=5 t=10 dgeedobdf 2542 5092 217069 217069 217069 217069 dgeedolpn 1901 3801 5701 7563 9463 11363 dgeedolcn 1351 2701 4051 5374 6724 8074 43510 53860 64210 Flops t=15 dgeedolkn 12553 22939 33325 t=20 t=25 t=30 Tabla 5.63: Número de flops al considerar ∆t=0.1 y variar el tiempo t. F/Fi t=5 t=10 t=15 t=20 t=25 t=30 dgeedolpn 1.337 1.340 38.076 28.701 22.939 19.103 dgeedolcn 1.882 1.885 53.584 40.392 32.283 26.885 dgeedolkn 0.203 0.222 6.514 4.989 4.030 3.381 Tabla 5.64: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. 243 Capítulo 5: Resultados Experimentales 60 50 F/Fi 40 30 20 Flops(dgeedobdf )/Flops(dgeedolpn) Flops(dgeedobdf )/Flops(dgeedolcn) Flops(dgeedobdf )/Flops(dgeedolk n) 10 0 5 10 15 20 25 30 t Figura 5.20: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgeedobdf) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • El algoritmo basado en el método BDF (dgeedobdf) tiene problemas de convergencia. En caso de convergencia del método BDF, los errores relativos cometidos por los cuatro algoritmos son similares. • Los algoritmos con menor coste computacional corresponden al de linealización a trozos basado en los aproximante diagonales de Padé (dgeedolpn) y al de linealización a trozos basado en la ecuación conmutante (dgeedolcn). El algoritmo con mayor coste computacional corresponde al de linealización a trozos basado en los subespacios de Krylov (dgeedolkn). Problema 5.7: El tercer caso de estudio de una EDO no autónoma ([LiSw98]), corresponde a una EDO de tipo rígido definida como x' = f (t , x) , x = x(t ) ∈ ℜ 2 N , 0 ≤ t ≤ 20 , con la condición inicial x(0) = [0, v0 , 0, v0 , L ,0, v0 ]T ∈ ℜ 2 N , siendo N = 200 . La función f está definida como f 2 j −1 = α j y 2 j +1 − y 2 j −3 2∆ς + βj y 2 j −3 − 2 y 2 j −1 + y 2 j +1 (∆ς ) 2 − ky2 j −1 y 2 j , f 2 j = −ky2 j y 2 j −1 , 244 Capítulo 5: Resultados Experimentales siendo αj = 2( j∆ς − 1) 3 , c2 βj = ( j∆ς − 1) 4 , c2 Los valores de j se encuentran comprendidos entre 1 y N , ∆ς = 1 / N . y −1 (t ) = φ (t ) , y 2 N +1 = y 2 N −1 , siendo ⎧2 , t ∈ (0,5] . ⎩0, t ∈ (5,20] φ (t ) = ⎨ Este problema proviene del estudio de la penetración de anticuerpos irradiados en un tejido que está infectado por un tumor, procedente de los laboratorios de investigación Akzo Nobel. Los valores elegidos de k , v 0 y c han sido 100, 1 y 4, respectivamente. Este caso de estudio es interesante pues permite comparar los algoritmos para EDOs de gran dimensión. Puesto que la solución analítica no es conocida, se presentan únicamente los resultados correspondientes a los tiempos de ejecución de las implementaciones realizadas en FORTRAN, aunque se ha comprobado que las soluciones dadas por las implementaciones han sido similares. Al ser la matriz Jacobiana singular, el algoritmo basado en la linealización a trozos mediante la ecuación conmutante (dgeedolpn) no se puede utilizar. Los valores elegidos para los parámetros característicos son los siguientes: • dgeedobdf: r=2, tol=1e-14, maxiter=100. • dgeedolpn: q=1. • dgeedolkn: p=2, tol=1e-14, q=1. En la siguiente tabla se muestran los tiempos de ejecución, en segundos, de las tres implementaciones en FORTRAN al considerar ∆t=1.0e-6 y variar el tiempo. Te t=1.0e-5 t=1.0e-4 t=1.0e-3 t=1.0e-2 t=1.0e-1 dgeedobdf 0.85619 8.5590 74.806 734.80 7333.9 dgeedolpn 0.79621 7.9022 78.901 783.92 7908.3 dgeedolkn 0.45720e-02 0.45450e-01 .45433 4.5451 45.468 Tabla 5.65: Tiempos de ejecución, en segundos, al considerar ∆t=1.0e-6 y variar el tiempo t. 245 Capítulo 5: Resultados Experimentales Te/Tei t=1.0e-5 t=1.0e-4 t=1.0e-3 t=1.0e-2 t=1.0e-1 dgeedolpn 1.08 1.08 0.95 0.94 0.93 dgeedolkn 187.27 188.32 164.65 161.67 161.30 Tabla 5.66: Relación entre el tiempo de ejecución (Te) de la implementación basada en el método BDF (dgeedobdf) y el tiempo de ejecución (Tei) de las implementaciones basadas en la linealización a trozos, al considerar ∆t=1.0e-6 y variar el tiempo t. De los resultados obtenidos se deduce que la rutina de linealización a trozos basada en los subespacios de Krylov ha resultado ser, aproximadamente, 160 veces más rápida que las otras dos rutinas. Este resultado reafirma el hecho de que para problemas de mediana o gran dimensión, el algoritmo basado en la linealización a trozos mediante los subespacios de Krylov tiene un coste computacional menor o mucho menor que los correspondientes al resto de los algoritmos. 5.5 Resolución de EDMRs En las pruebas realizadas se han comparado los algoritmos descritos en el 4.3 con dos algoritmos basados en el método BDF (véase subapartado 2.4.2.3, página 62). En estos algoritmos se debe resolver la ecuación matricial de Sylvester. Aunque MATLAB dispone de la función lyap, que permite resolver ecuaciones matriciales de Sylvester y ecuaciones de matriciales Lyapunov, en las pruebas se ha utilizado la función dgesyl, que a continuación se muestra, por tener un coste computacional menor que la función lyap. X = dgesyl ( A, B, C ) . Entradas: Matrices A ∈ ℜ mxm , B ∈ ℜ nxn y C ∈ ℜ mxn . Salida: Matriz X ∈ ℜ mxn AX + XB = C . solución de la ecuación matricial de Sylvester 1 2 [Qa , A] = schur ( A) [Qb , B] = schur ( B) 3 4 5 C = QaT CQb C = dtrsyl ( A, B, C ) (Algoritmo 3.14, página 116) C = Qa CQbT Algoritmo 5.5: Resolución de la ecuación matricial de Sylvester. A continuación se presentan dos algoritmos que resuelven EDMRs, uno para coeficientes variables y otro para coeficientes constantes, mediante el método BDF. 246 Capítulo 5: Resultados Experimentales Y = dgedmrbdv(t , data, X 0 , r , tol , maxiter ) . Entradas: Vector de tiempos t ∈ ℜl +1 , función data (t ) que calcula las matrices coeficiente de la EDMR A11 (t ) ∈ ℜ nxn , A12 (t ) ∈ ℜ nxm , A21 (t ) ∈ ℜ mxn , A22 (t ) ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn , orden r ∈ Z + del método BDF, tolerancia tol ∈ ℜ + del método BDF, número máximo de iteraciones maxiter ∈ Z + del método BDF. Salida: 1 2 3 Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . Inicializar α y β con los valores dados en la Tabla 2.4 Y0 = X 0 ; j = 0 Para i = 0 : l − 1 3.1 ∆t = ti +1 − ti ; j = j + 1 ; p = min(r , j ) 3.2 Para k = p : −1 : 2 3.2.1 X (1 : m,1 : n, k ) = X (1 : m,1 : n, k ) 3.3 X (1 : m,1 : n,1) = Yi ; C 0 = α p1 X (1 : m,1 : n,1) 3.4 3.5 3.6 3.7 3.8 3.9 Para k = 2 : p 3.4.1 C 0 = C 0 + α pk X (1 : m,1 : n, k ) [ A11 , A12 , A21 , A22 ] = data (t i ) C11 = ∆tβ r A11 + 0.5I n ; C12 = ∆tβ r A12 ; C 22 = ∆tβ r A22 − 0.5I n k =0 Mientras k < maxiter (método de Newton) 3.8.1 k = k + 1 3.8.2 A = C 22 − Yi C12 3.8.3 B = −C0 + Yi − ∆tβ (r1 )( A21 + A22Yi − Yi A11 − Yi A12Yi ) 3.8.4 ∆Y = dgesyl( A, B, C ) 3.8.5 Si norm(∆Y ) < tol 3.8.5.1 Salir fuera del bucle 3.8.6 Yi +1 = Yi + ∆Y Si k = = maxiter 3.9.1 error (no hay convergencia) Algoritmo 5.6: Resolución de EDMRs con coeficientes variables mediante el método BDF. 247 Capítulo 5: Resultados Experimentales Y = dgedmrbdc(t , data, X 0 , r , tol , maxiter ) . Entradas: Vector de tiempos t ∈ ℜ l +1 , función data (t ) que devuelve las matrices coeficiente de la EDMR A11 ∈ ℜ nxn , A12 ∈ ℜ nxm , A21 ∈ ℜ mxn , A22 ∈ ℜ mxm , matriz inicial X 0 ∈ ℜ mxn , orden r ∈ Z + del método BDF, tolerancia tol ∈ ℜ + del método BDF, número máximo de iteraciones maxiter ∈ Z + del método BDF. Salida: 1 2 3 Matriz a bloques Y = [Y0 , Y1 , L , Yl ] ∈ ℜ ( m×n )×( l +1) , Yi ∈ ℜ mxn , i = 0,1, L, l . Inicializar α y β con los valores dados en la Tabla 2.4 (página 55) [ A11 , A12 , A21 , A22 ] = data (t ) ; Y0 = X 0 ; j = 0 Para i = 0 : l − 1 3.1 ∆t = ti +1 − ti 3.2 j = j + 1 ; p = min(r , j ) 3.3 Para k = p : −1 : 2 3.3.1 X (1 : m,1 : n, k ) = X (1 : m,1 : n, k ) 3.4 X (1 : m,1 : n,1) = Yi ; C0 = α p1 X (1 : m,1 : n,1) 3.5 3.6 3.7 3.8 3.9 Para k = 2 : p 3.5.1 C0 = C0 + α pk X (1 : m,1 : n, k ) C11 = ∆tβ r A11 + 0.5I n ; C12 = ∆tβ r A12 ; C 22 = ∆tβ r A22 − 0.5I n k =0 Mientras k < maxiter (método de Newton) 3.8.1 k = k + 1 3.8.2 A = C 22 − Yi C12 3.8.3 B = −C0 + Yi − ∆tβ (r1 )( A21 + A22Yi − Yi A11 − Yi A12Yi ) 3.8.4 ∆Y = dgesyl ( A, B, C ) 3.8.5 Si norm(∆Y ) < tol 3.8.5.1 Salir fuera del bucle 3.8.6 Yi +1 = Yi + ∆Y Si k = = maxiter 3.9.1 error (no hay convergencia) Algoritmo 5.7: Resolución de EDMRs con coeficientes constantes mediante el método BDF. Una breve descripción de los algoritmos implementados y de sus parámetros característicos aparece a continuación. • dgedmrbdv y dgedmrbdc: Resuelven EDMRs mediante el método BDF. − r: orden del método BDF. − tol: tolerancia utilizada en el método de Newton. − maxiter: número máximo de iteraciones utilizado en el método Newton. • dgedmrlpv y dgedmrlpc: Resuelven EDMRs, de coeficientes variables y de coeficientes constantes, mediante el método de linealización a trozos basado en los aproximantes diagonales de Padé de la función exponencial. 248 Capítulo 5: Resultados Experimentales − q: grado de los polinomios de la aproximación diagonal de Padé de la función exponencial. • dgedmrlcv y dgedmrlcc: Resuelven EDMRs, de coeficientes variables y de coeficientes constantes, mediante el método de linealización a trozos basado en la ecuación conmutante. − q: grado de los polinomios de la aproximación diagonal de Padé de la función exponencial. • dgedmrlkv y dgedmrlkc: Resuelven EDMRs, de coeficientes variables y de coeficientes constantes, mediante el método de linealización a trozos basado en los subespacios de Krylov. − p: dimensión del subespacio de Krylov. − tol: tolerancia en el método de los subespacio de Krylov. − q: grado de los polinomios de la aproximación diagonal de Padé de la función exponencial. Para cada caso de estudio se han determinado los valores de los parámetros característicos que ofrecen mayor precisión con un menor coste computacional, habiéndose realizado tres tipos de pruebas: • Fijar el tamaño del problema y el instante de tiempo, variando el incremento de tiempo. • Fijar el tamaño del problema y el incremento de tiempo, variando el instante de tiempo. • Fijar el instante de tiempo y el incremento de tiempo, variando el tamaño del problema. Para cada prueba se muestran: • Tabla que contiene los errores relativos cometidos. • Tabla con los costes computacionales en flops o tiempos de ejecución en segundos. • Tabla en la que se presentan la relación entre el coste computacional del algoritmo basado en el método BDF y los correspondientes a los algoritmos basados en la linealización a trozos. • Gráfica que muestra la relación entre el coste computacional del algoritmo basado en el método BDF y los correspondientes a los algoritmos basados en la linealización a trozos. 5.5.1 EDMRs con Coeficientes Constantes Problema 5.8: El primer caso de estudio de EDMRs con coeficientes constantes proviene de un problema de ecuaciones diferenciales con condiciones de contorno que puede verse en [Prue86]. La EDMR está definida para t ≥ 0 mediante las matrices coeficiente 0⎤ 0⎤ ⎡ 0 ⎡ 0 1⎤ ⎡ 0 1⎤ ⎡ 0 A11 = ⎢ , A12 = ⎢ , A21 = ⎢ , A22 = ⎢ ⎥ ⎥ ⎥ ⎥, ⎣− 100 − 1⎦ ⎣100 0⎦ ⎣10 0⎦ ⎣− 10 − 1⎦ 249 Capítulo 5: Resultados Experimentales y la condición inicial ⎡ 0 0⎤ X (0) = ⎢ ⎥. ⎣ − 1 0⎦ La solución aproximada de la EDMR es ⎡1 0.110⎤ X =⎢ ⎥, ⎣0 − 0.1 ⎦ ( 5.2 ) siempre que el valor de t sea elevado. Los valores elegidos para los parámetros característicos se muestran a continuación. • dgedmrbdc: r=3, tol=1e-6, maxiter=100. • dgedmrlpc: q=1. • dgedmrlcc: q=1. • dgedmrlkc: p=3, tol=1e-6, q=1. En la primera prueba se considera t=1 y se varía el incremento de tiempo ∆t. ∆t=0.1 Er ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgedmrbdc 2.450e-01 9.783e-02 5.439e-03 1.399e-03 1.338e-04 1.803e-04 dgedmrlpc 1.243e-01 3.284e-02 1.076e-03 2.694e-04 3.883e-05 3.817e-05 dgedmrlcc 1.229e-01 2.857e-02 8.464e-04 2.694e-04 3.883e-05 3.817e-05 dgedmrlkc 7.258e-02 1.727e-02 7.122e-04 1.810e-04 3.831e-05 3.821e-05 Tabla 5.67: Errores relativos en el instante de tiempo t=1, variando el incremento de tiempo ∆t. ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 Flops dgedmrbdc 30498 38816 150240 287912 1214363 2335679 dgedmrlpc 4667 8101 36995 73981 370423 740975 dgedmrlcc 9171 17517 87948 173892 872894 1740458 dgedmrlkc 5899 10705 52840 105742 526430 1037864 Tabla 5.68: Número de flops en el instante de tiempo t=1, variando el incremento de tiempo ∆t. 250 Capítulo 5: Resultados Experimentales ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 F/Fi dgedmrlpc 6.535 4.792 4.061 3.892 3.278 3.152 dgedmrlcc 3.325 2.216 1.708 1.656 1.391 1.342 dgedmrlkc 5.170 3.626 2.843 2.723 2.307 2.250 Tabla 5.69: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1 y variar el incremento de tiempo ∆t. Flops(dgedmrbdc )/Flops(dgedmrlpc ) Flops(dgedmrbdc )/Flops(dgedmrlcc ) Flops(dgedmrbdc )/Flops(dgedmrlk c ) 6.5 6 5.5 5 F/Fi 4.5 4 3.5 3 2.5 2 1.5 1 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.21: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1 y variar ∆t. En la segunda prueba se considera ∆t=0.1 y se varía el tiempo t. 251 Capítulo 5: Resultados Experimentales t=5 Er t=10 t=15 t=20 t=25 t=30 dgedmrbdc 5.727e-03 3.884e-05 9.581e-06 9.581e-06 9.581e-06 9.581e-06 dgedmrlpc 2.556e-03 1.724e-05 1.161e-07 7.812e-10 5.258e-12 3.561e-14 dgedmrlcc 2.523e-03 1.702e-05 1.146e-07 7.713e-10 5.191e-12 3.498e-14 dgedmrlkc 1.417e-03 9.520e-06 6.389e-08 4.290e-10 2.887e-12 1.972e-14 Tabla 5.70: Errores relativos al considerar ∆t=0.1 y variar el tiempo t. Flops t=5 t=10 t=15 t=20 t=25 t=30 dgedmrbdc 94799 159837 200219 231569 262919 294269 dgedmrlpc 22187 44087 65987 87887 dgedmrlcc 44074 88043 132908 176516 219373 262641 dgedmrlkc 20057 35407 50407 68071 109787 131687 97279 126703 Tabla 5.71: Número de flops al considerar ∆t=0.1 y variar el tiempo t. F/Fi t=5 t=10 t=15 t=20 t=25 t=30 dgedmrlpc 4.273 3.625 3.034 2.635 2.395 2.235 dgedmrlcc 2.151 1.815 1.506 1.312 1.199 1.120 dgedmrlkc 4.726 4.514 3.972 3.402 2.703 2.323 Tabla 5.72: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. 252 Capítulo 5: Resultados Experimentales 5 Flops(dgedmrbdc )/Flops(dgedmrlpc ) Flops(dgedmrbdc )/Flops(dgedmrlcc ) Flops(dgedmrbdc )/Flops(dgedmrlk c ) 4.5 4 F/Fi 3.5 3 2.5 2 1.5 1 5 10 15 20 25 30 t Figura 5.22: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • A medida que se incrementa el tiempo, los errores relativos cometidos por los algoritmos basados en la linealización son menores que el correspondiente al algoritmo basado en el método BDF (dgedmrbdc). • Los algoritmos basados en la linealización a trozos tienen un coste computacional menor que el correspondiente al método BDF (dgedmrbdc), destacando entre ellos el basado en los subespacios de Krylov (dgedmrlpc), seguido por el basado en los aproximantes diagonales de Padé (dgedmrlpc). Problema 5.9: El segundo caso de estudio de EDMRs con coeficientes constantes ([Meyer73]) consiste en la EDMR definida por A11 = A22 = 0 n , A12 = A21 = αI n , X 0 = 0 n , donde el tamaño del problema puede hacerse tan grande como se quiera, siendo α > 0 un parámetro característico del problema. La solución a este problema está dada por [ X (t ) = α ( X 0 + I )eαt − α ( X 0 − I )e −αt ] [α ( X −1 0 ] + I )eαt + α ( X 0 − I )e −αt , lo que permite determinar los errores cometidos en la resolución de la ecuación. Los valores elegidos para los parámetros característicos en este caso de estudio se muestran a continuación. • dgedmrbdc: r=2, tol=1e-6, maxiter=100. • dgedmrlpc: q=1. 253 Capítulo 5: Resultados Experimentales • dgedmrlcc: q=1. • dgedmrlkc: p=2, tol=1e-6, q=1. En la primera prueba se comparan los cuatro algoritmos al considerar n=2 y t=1, variando el incremento de tiempo ∆t. ∆t=0.1 Er ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgedmrbdc 1.551e-03 3.241e-04 3.137e-05 7.862e-06 3.151e-07 7.880e-08 dgedmrlpc 1.552e-03 3.825e-04 1.513e-05 3.779e-06 1.510e-07 3.774e-08 dgedmrlcc 1.552e-03 3.825e-04 1.513e-05 3.779e-06 1.510e-07 3.774e-08 dgedmrlkc 1.845e-03 4.599e-04 1.838e-05 4.595e-06 1.838e-07 4.595e-08 Tabla 5.73: Errores relativos para n=2 y t=1, variando el incremento de tiempo ∆t. ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 Flops dgedmrbdc 13519 26147 87427 174827 874027 1748027 dgedmrlpc 2385 4765 23805 47605 238005 476005 dgedmrlcc 4853 10123 52283 104983 526583 1053583 dgedmrlkc 2874 5734 28614 57214 286014 572014 Tabla 5.74: Número de flops para n=2 y t=1, variando el incremento de tiempo ∆t. F/Fi ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgedmrlpc 5.668 5.487 3.673 3.672 3.672 3.672 dgedmrlcc 2.786 2.583 1.672 1.665 1.660 1.659 dgedmrlkc 4.704 4.560 3.055 3.056 3.056 3.056 Tabla 5.75: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, t=1 y variar el incremento de tiempo ∆t. 254 Capítulo 5: Resultados Experimentales Flops(dgedmrbdc )/Flops(dgedmrlpc ) Flops(dgedmrbdc )/Flops(dgedmrlcc ) Flops(dgedmrbdc )/Flops(dgedmrlk c ) 5.5 5 4.5 F/Fi 4 3.5 3 2.5 2 1.5 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.23: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. En la segunda prueba se comparan los cuatro algoritmos para n=2 y ∆t=0.1, variando el instante t de tiempo. t=5 Er t=10 t=15 t=20 t=25 t=30 dgedmrbdc 9.511e-06 4.718e-06 4.722e-06 4.722e-06 4.722e-06 4.722e-06 dgedmrlpc 1.228e-06 8.956e-11 5.662e-15 2.220e-16 2.220e-16 2.220e-16 dgedmrlcc 1.228e-06 8.956e-11 5.662e-15 2.220e-16 2.220e-16 2.220e-16 dgedmrlkc 2.994e-06 2.674e-10 1.799e-14 2.220e-16 2.220e-16 2.220e-16 Tabla 5.76: Errores relativos para n=2 y ∆t=0.1, variando el tiempo t. 255 Capítulo 5: Resultados Experimentales t=5 Flops t=10 t=15 t=20 t=25 t=30 dgedmrbdc 54095 82243 104343 126443 148543 170643 dgedmrlpc 11905 23805 35705 47605 59505 dgedmrlcc 25933 52283 78633 104983 131333 157683 dgedmrlkc 14314 28614 42914 57214 71514 71405 85814 Tabla 5.77: Número de flops para n=2 y ∆t=0.1, variando el tiempo t. F/Fi t=5 t=10 t=15 t=20 t=25 t=30 dgedmrlpc 4.544 3.455 2.922 2.656 2.496 2.390 dgedmrlcc 2.086 1.573 1.327 1.204 1.131 1.082 dgedmrlkc 3.779 2.874 2.431 2.210 2.077 1.989 Tabla 5.78: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, ∆t=0.1 y variar el tiempo t. 5 Flops(dgedmrbdc )/Flops(dgedmrlpc ) Flops(dgedmrbdc )/Flops(dgedmrlcc ) Flops(dgedmrbdc )/Flops(dgedmrlk c ) 4.5 4 F/Fi 3.5 3 2.5 2 1.5 1 5 10 15 20 25 30 t Figura 5.24: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, ∆t=0.1 y variar el tiempo. 256 Capítulo 5: Resultados Experimentales En la tercera prueba se comparan los cuatro algoritmos considerando t=1, ∆t=0.1, y variar el tamaño n del problema. n=5 Er n=10 n=15 n=20 n=25 n=30 dgedmrbdc 1.551e-03 1.551e-03 1.551e-03 1.551e-03 1.551e-03 1.551e-03 dgedmrlpc 1.552e-03 1.552e-03 1.552e-03 1.552e-03 1.552e-03 1.552e-03 dgedmrlcc 1.552e-03 1.552e-03 1.552e-03 1.552e-03 1.552e-03 1.552e-03 dgedmrlkc 1.845e-03 1.845e-03 1.845e-03 1.845e-03 1.845e-03 1.845e-03 Tabla 5.79: Errores relativos para t=1 y ∆t=0.1, variando el tamaño n del problema. n=5 Flops n=10 n=15 n=20 n=25 n=30 dgedmrbdc 138530 906335 2830190 6437095 12254050 20808055 dgedmrlpc 25086 170161 540286 1240461 2375686 4050961 dgedmrlcc 48962 314197 972482 2200817 4176202 7075637 dgedmrlkc 23907 153402 478947 1090542 2078187 3531882 Tabla 5.80: Número de flops para t=1 y ∆t=0.1, variando el tamaño n del problema. F/Fi n=5 dgedmrlpc 5.84 n=10 n=15 n=20 n=25 n=30 5.69 5.63 5.60 5.58 5.57 dgedmrlcc 3.16 3.21 3.23 3.23 3.24 3.24 dgedmrlkc 6.48 6.47 6.46 6.45 6.45 6.44 Tabla 5.81: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1, ∆t=0.1 y variar el tamaño n del problema. 257 Capítulo 5: Resultados Experimentales 6 5.5 5 Flops(dgedmrbdc)/Flops(dgedmrlpc) Flops(dgedmrbdc)/Flops(dgedmrlcc) Flops(dgedmrbdc)/Flops(dgedmrlkc) F/Fi 4.5 4 3.5 3 2.5 5 10 15 20 25 30 n Figura 5.25: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, ∆t=0.1 y variar el tamaño n del problema. Para comprobar el comportamiento de los algoritmos cuando el tamaño de la matriz es elevado, se han realizado pruebas con las implementaciones FORTRAN para tamaños del problema 500 y 1000. A continuación se presentan los resultados obtenidos en cuanto a precisión y tiempos de ejecución en segundos. Er n=500 n=1000 dgedmrbdc 2.1568E-05 2.1568E-05 dgedmrlpc 1.2019E-05 1.2019E-05 dgedmrlcc 1.2019E-05 1.2019E-05 dgedmrlkc 1.9543E-05 1.9543E-05 Tabla 5.82: Errores relativos para t=1 y ∆t=0.01, variando el tamaño n del problema. 258 Capítulo 5: Resultados Experimentales Te n=500 n=1000 dgedmrbdc 449.07 6544 dgedmrlpc 73.335 498.42 dgedmrlcc 189.91 3128.5 dgedmrlkc 42.062 350.02 Tabla 5.83: Tiempos de ejecución, en segundos, al considerar t=1, ∆t=0.01 y variar el tamaño n del problema. Te/Tei n=500 n=1000 dgedmrlpc 6,12 13,13 dgedmrlcc 2,36 2,09 dgedmrlkc 10,68 18,70 Tabla 5.84: Relación entre el tiempo de ejecución (Te) de la implementación basada en el método BDF (dgedmrbdc) y el tiempo de ejecución (Tei) de las implementaciones basadas en la linealización a trozos, al considerar t=1, ∆t=0.01 y variar el tamaño n del problema. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • A medida que se incrementa el tiempo, los errores relativos cometidos por los algoritmos basados en la linealización a trozos se hacen más pequeños que el correspondiente al método BDF (dgedmrbdc). • Los algoritmos que utilizan linealización a trozos tienen un coste computacional menor que el correspondiente al método BDF (dgedmrbdc). − Cuando se disminuye el incremento de tiempo ∆t, la razón de flops de esos algoritmos respecto al basado en el método BDF va disminuyendo hasta llegar a un incremento de 0.01, a partir del cual dicha razón apenas varía. − Cuando se aumenta el tiempo, la razón de flops de esos algoritmos respecto al basado en el método BDF va disminuyendo, a costa de alcanzar una mayor precisión. − Cuando se aumenta el tamaño del problema, la razón de flops de esos algoritmos respecto al basado en el método BDF es prácticamente constante. − Para tamaños elevados del problema, los algoritmos que utilizan la linealización a trozos tienen tiempos de ejecución menores que el correspondiente al método BDF. • El menor coste computacional corresponde al algoritmo basado en la linealización a trozos mediante los subespacios de Krylov (dgedmrlkc), seguido de cerca por el 259 Capítulo 5: Resultados Experimentales algoritmo basado en la linealización a trozos mediante los aproximantes diagonales de Padé (dgedmrlpc). • El menor tiempo de ejecución corresponde a la implementación basada en linealización a trozos mediante los subespacios de Krylov (dgedmrlkc), seguida muy de cerca por la implementación basada en la linealización a trozos mediante los aproximantes diagonales de Padé (dgedmrlpc). Los tiempos de ejecución de dichas rutinas han sido mucho menores que el tiempo de ejecución de la implementación basada en el método BDF (dgedmrbdc). Problema 5.10: El tercer caso de estudio de EDMRs con coeficientes constantes ([ChAL90]) corresponde a una EDMR no simétrica definida como X ' (t ) = X (t ) + T2k X (t ) − X (t )T2k X (t ) + k 2T2k ; X (0) = I 2k , t ≥ 0. siendo X (t ) , T2k ∈ ℜ 2 k y a ∈ ℜ . La matriz T2k se define inductivamente ⎡− 1 1⎤ T2 = ⎢ 2 ⎥ , ⎣ a 1⎦ ⎡ − T k −1 T2k = ⎢ 2 2 ⎣a T2k −1 T2k −1 ⎤ , k ≥ 2. T2k −1 ⎥⎦ La solución analítica de la ecuación anterior es X (t ) = I 2 k + donde ω = (a 2 + 1) k +1 2 (a 2 + 1) ω tanh(ωt )T2 k , . Los valores elegidos para los parámetros característicos se muestran a continuación. • dgedmrbdc: r=2, tol=1e-6, maxiter=100. • dgedmrlpc: q=1. • dgedmrlcc: q=1. • dgedmrlkc: p=2, tol=1e-6, q=2. En la primera prueba se comparan los cuatro algoritmos al considerar n=2, t=1 y variar el incremento de tiempo ∆t. ∆t=0.1 Er ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgedmrbdc 3.547e-04 2.993e-05 1.545e-07 1.029e-08 4.109e-09 1.043e-09 dgedmrlpc 2.657e-05 7.145e-06 2.846e-07 7.088e-08 2.825e-09 7.060e-10 dgedmrlcc 2.755e-05 7.190e-06 2.846e-07 7.088e-08 2.825e-09 7.060e-10 dgedmrlkc 3.139e-05 1.649e-05 7.038e-07 1.763e-07 7.057e-09 1.764e-09 Tabla 5.85: Errores relativos para n=2 y t=1, variando el incremento de tiempo ∆t. 260 Capítulo 5: Resultados Experimentales ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 Flops dgedmrbdc 19664 29578 120215 228289 992986 1985986 dgedmrlpc 2790 5102 27035 57801 321771 648317 dgedmrlcc 4940 10228 53422 117426 653121 1285987 dgedmrlkc 2987 5735 28615 57215 286015 572015 Tabla 5.86: Número de flops para n=2 y t=1, variando el incremento de tiempo ∆t. ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 F/Fi dgedmrlpc 7.048 5.797 4.447 3.950 3.086 3.063 dgedmrlcc 3.981 2.892 2.250 1.944 1.520 1.544 dgedmrlkc 6.583 5.157 4.201 3.990 3.472 3.472 Tabla 5.87: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, t=1 y variar el incremento de tiempo ∆t. Flops(dgedmrbdc )/Flops(dgedmrlpc ) Flops(dgedmrbdc )/Flops(dgedmrlcc ) Flops(dgedmrbdc )/Flops(dgedmrlk c ) 7 6.5 6 5.5 F/Fi 5 4.5 4 3.5 3 2.5 2 1.5 1 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.26: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.1 y variar el tiempo t. 261 Capítulo 5: Resultados Experimentales En la segunda prueba se comparan los cuatro algoritmos al considerar n=2 y ∆t=0.1, y variar el tiempo t. t=5 Er t=10 t=15 t=20 t=25 t=30 dgedmrbdc 1.067e-07 1.067e-07 1.067e-07 1.067e-07 1.067e-07 1.067e-07 dgedmrlpc 9.233e-18 9.233e-18 9.233e-18 9.233e-18 9.233e-18 9.233e-18 dgedmrlcc 7.648e-18 7.648e-18 7.648e-18 7.648e-18 7.648e-18 7.648e-18 dgedmrlkc 3.376e-18 3.376e-18 3.376e-18 3.376e-18 3.376e-18 3.376e-18 Tabla 5.88: Errores relativos para n=2 y ∆t=0.1, variando el tiempo t. Flops t=5 t=10 t=15 t=20 t=25 t=30 dgedmrbdc 43800 69100 94400 119700 145000 170300 dgedmrlpc 12692 24542 36392 48242 60092 dgedmrlcc 26198 52548 78898 105248 131598 157948 dgedmrlkc 12703 17953 23203 28453 33703 71942 38953 Tabla 5.89: Número de flops para n=2 y ∆t=0.1, variando el tiempo t. F/Fi t=5 t=10 t=15 t=20 t=25 t=30 dgedmrlpc 3.451 2.816 2.594 2.481 2.413 2.367 dgedmrlcc 1.672 1.315 1.196 1.137 1.102 1.078 dgedmrlkc 3.448 3.849 4.068 4.207 4.302 4.372 Tabla 5.90: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, ∆t=0.1 y variar el tiempo t. 262 Capítulo 5: Resultados Experimentales 4.5 4 3.5 Flops(dgedmrbdc )/Flops(dgedmrlpc ) Flops(dgedmrbdc )/Flops(dgedmrlcc ) Flops(dgedmrbdc )/Flops(dgedmrlk c ) F/Fi 3 2.5 2 1.5 1 5 10 15 20 25 30 t Figura 5.27: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, ∆t=0.1 y variar el tiempo. En la tercera prueba se comparan los cuatro algoritmos al considerar t=1 y ∆t=0.1, y variar el tamaño n del problema. n=2 Er n=4 n=8 n=16 n=32 dgedmrbdc 3.547e-04 7.562e-05 1.749e-05 8.870e-06 1.197e-08 dgedmrlpc 2.657e-05 5.455e-10 7.497e-18 2.057e-17 5.686e-17 dgedmrlcc 2.755e-05 5.377e-10 3.193e-17 2.010e-17 5.395e-17 dgedmrlkc 3.139e-05 5.377e-10 3.192e-17 2.000e-17 5.542e-17 Tabla 5.91: Errores relativos para t=1 y ∆t=0.1, variando el tamaño n del problema. 263 Capítulo 5: Resultados Experimentales n=2 Flops n=4 n=8 n=16 n=32 dgedmrbdc 19664 161923 1426730 13748067 124472608 dgedmrlpc 2790 23548 273024 3062132 32756918 dgedmrlcc 4940 30462 224468 1646839 13805349 dgedmrlkc 2987 13907 83587 576243 4265235 Tabla 5.92: Número de flops para t=1 y ∆t=0.1, variando el tamaño n del problema. n=2 n=8 n=16 n=32 dgedmrlpc 7.048 6.876 5.226 4.490 3.800 dgedmrlcc 3.981 5.316 6.356 8.348 9.016 F/Fi n=4 dgedmrlkc 6.583 11.643 17.069 23.858 29.183 Tabla 5.93: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1, ∆t=0.1 y variar el tamaño n del problema. 30 25 20 F/Fi Flops(dgedmrbdc)/Flops(dgedmrlpc) Flops(dgedmrbdc)/Flops(dgedmrlcc) Flops(dgedmrbdc)/Flops(dgedmrlkc) 15 10 5 0 0 5 10 15 20 25 30 35 n Figura 5.28: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdc) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, ∆t=0.1 y variar el tamaño n del problema. 264 Capítulo 5: Resultados Experimentales Para comprobar el comportamiento de las implementaciones en FORTRAN cuando el tamaño de la matriz es elevado, se han realizado pruebas con un tamaño del problema igual a 512. A continuación se presentan los resultados obtenidos en cuanto a precisión y tiempos de ejecución en segundos. n=512 Er dgedmrbdc 5.8356e-07 dgedmrlpc 1.9944e-15 dgedmrlcc 9.6766e-15 dgedmrlkc 9.9517e-15 Tabla 5.94: Errores relativos para t=1, ∆t=0.1 y n=512. Te n=512 dgedmrbdc 47870.00 dgedmrlpc 579.98 dgedmrlcc 456.08 dgedmrlkc 136.17 Tabla 5.95: Tiempos de ejecución en segundos, considerando t=1, ∆t=0.1 y n=512. Te/Tei n=512 dgedmrlpc 82,54 dgedmrlcc 104,96 dgedmrlkc 351,55 Tabla 5.96: Relación entre el tiempo de ejecución (Te) de la implementación basada en el método BDF (dgedmrbdc) y el tiempo de ejecución (Tei) de las implementaciones basadas en la linealización a trozos, al considerar t=1, ∆t=0.01 y n=512. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • Los errores relativos cometidos por algoritmos basados en la linealización a trozos, son mucho menores que los errores relativos cometidos por el algoritmo basado en el método BDF (dgedmrbdc). 265 Capítulo 5: Resultados Experimentales − A medida que se incrementa el tiempo, los errores relativos cometidos por los algoritmos basados en la linealización a trozos se hacen más pequeños que los errores relativos cometidos por el algoritmo basado en el método BDF (dgedmrbdc). − A medida que se aumenta el tamaño del problema, los errores relativos cometidos por los algoritmos basados en la linealización a trozos se hacen más pequeños que los errores relativos cometidos por el algoritmo basado en el método BDF (dgedmrbdc). • Los algoritmos que utilizan linealización a trozos tienen un coste computacional menor que el correspondiente al método BDF (dgedmrbdc). − Cuando se disminuye el incremento de tiempo, la razón de flops de esos algoritmos respecto al basado en el método BDF, va disminuyendo hasta llegar a un incremento de 0.001, a partir del cual dicha razón apenas varía. − Cuando se aumenta el tiempo, la razón de flops del algoritmo de linealización basado en los subespacios de Krylov con respecto al basado en el método BDF, aumenta. Para los otros dos algoritmos de linealización esa razón disminuye ligeramente. − Cuando se aumenta el tamaño del problema, la razón de flops de los algoritmos de linealización basados en los subespacios de Krylov (dgedmrlkc) y en la ecuación conmutante (dgedmrlpc), con respecto al basado en el método BDF, aumentan. Para el otro algoritmo de linealización (dgedmrlcc) esa razón disminuye ligeramente. • Los tiempos de ejecución de las implementaciones basadas en la técnica de linealización a trozos han sido mucho menores que el tiempo de ejecución de la implementación basada en el método BDF (dgedmrbdc). Entre estas implementaciones destaca la basada en los subespacios de Krylov (dgedmrlkc), pues su tiempo de ejecución es mucho menor que la implementación del método BDF (la relación de tiempos es aproximadamente igual a 351 para una dimensión igual a 512). 5.5.2 EDMRs con Coeficientes Variables Problema 5.11: El primer caso de estudio de EDMRs con coeficientes variables corresponde a un problema de tipo test, ampliamente utilizado, conocido como “knee problem” ([DEES82]). Se trata de una EDMR definida como εx' = ε − tx + x 2 , 0 < ε << 1 , x(−1) = −1 , asociada a la matriz de coeficientes variables ⎡ a (t ) a12 (t ) ⎤ ⎡t / ε A(t ) = ⎢ 11 ⎥=⎢ ⎣a 21 (t ) a 22 (t )⎦ ⎣ 1 − 1/ ε ⎤ , n = m = 1, −1 ≤ t ≤ 1 . 0 ⎥⎦ La solución x = t es estable para valores anteriores a 0 y la solución x ≅ 0 es estable a partir de tiempos mayores o iguales a 0. En las pruebas realizadas se ha considerado un valor ε igual a 1e-4. Los valores de los parámetros característicos de cada método aparecen a continuación. • dgedmrbdv: r=2, tol=1.0e-6, maxiter=100. 266 Capítulo 5: Resultados Experimentales • dgedmrlpv: q=1. • dgedmrlcv: q=1. • dgedmrlkv: p=3, tol=1.0e-5, q=1. En la primera prueba se comparan los cuatro algoritmos considerando t=1 y variando el incremento de tiempo entre 0.1 y 0.05, ya que para valores menores la precisión obtenida es la misma. ∆t=0.1 Er ∆t=0.05 dgedmrbdv 5.001e-05 5.001e-05 dgedmrlpv Error 4.917e-05 dgedmrlcv 4.391e-05 4.988e-05 dgedmrlkv 4.326e-05 4.988e-05 Tabla 5.97: Errores relativos para t=1, variando el incremento de tiempo ∆t. Flops ∆t=0.1 ∆t=0.05 dgedmrbdv 7203 12140 dgedmrlpv 3426 8145 dgedmrlcv 5049 9704 dgedmrlkv 18728 35018 Tabla 5.98: Número de flops para t=1, variando el incremento de tiempo ∆t. F/Fi ∆t=0.1 ∆t=0.05 dgedmrlpv 2.102 1.490 dgedmrlcv 1.427 1.251 dgedmrlkv 0.385 0.347 Tabla 5.99: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1 y variar el incremento de tiempo ∆t. 267 Capítulo 5: Resultados Experimentales Flops(dgedmrbdv)/Flops(dgedmrlpv) Flops(dgedmrbdv)/Flops(dgedmrlcv) Flops(dgedmrbdv)/Flops(dgedmrlk v) 2 F/Fi 1.5 1 0.5 0.1 0.05 ∆t Figura 5.29: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1 y variar el incremento de tiempo ∆t. En la segunda prueba se comparan los cuatro algoritmos para ∆t=0.001, variando el instante t de tiempo. t=5 Er t=10 t=15 t=20 t=25 t=30 dgedmrbdv 1.054e-05 5.538e-06 3.538e-06 2.538e-06 2.538e-06 2.538e-06 dgedmrlpv 1.000e-05 5.000e-06 3.333e-06 2.500e-06 2.000e-06 1.667e-06 dgedmrlcv 1.000e-05 5.000e-06 3.333e-06 2.500e-06 2.000e-06 1.667e-06 dgedmrlkv 1.000e-05 5.000e-06 3.333e-06 2.500e-06 2.000e-06 1.667e-06 Tabla 5.100: Errores relativos considerando variando el tiempo t. ∆t=0.001 y 268 Capítulo 5: Resultados Experimentales t=5 Flops t=10 t=15 t=20 t=25 t=30 dgedmrbdv 767164 1252569 1737731 2222812 2707812 3192812 dgedmrlpv 830433 1698033 2623233 3593233 4563233 5603633 dgedmrlcv 1380595 2566392 3762989 4967989 6172989 7391186 dgedmrlkv 2700889 5365589 8127489 10964989 14303381 17818899 Tabla 5.101: Número de flops considerando ∆t=0.001 y variando el tiempo t. F/Fi t=5 t=10 t=15 t=20 t=25 t=30 dgedmrlpv 0.924 0.738 0.662 0.619 0.593 0.570 dgedmrlcv 0.556 0.488 0.462 0.447 0.439 0.432 dgedmrlkv 0.284 0.233 0.214 0.203 0.189 0.179 Tabla 5.102: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.001 y variar el tiempo t. 1 Flops(dgedmrbdv)/Flops(dgedmrlpv) Flops(dgedmrbdv)/Flops(dgedmrlcv) Flops(dgedmrbdv)/Flops(dgedmrlk v) 0.9 0.8 0.7 F/Fi 0.6 0.5 0.4 0.3 0.2 0.1 5 10 15 20 25 30 t Figura 5.30: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar ∆t=0.001 y variar el tiempo t. 269 Capítulo 5: Resultados Experimentales A partir de las tablas anteriores se pueden extraer las siguientes conclusiones: • Los algoritmos con menor error relativo corresponden al algoritmo basado en el método BDF (dgedmrbdv), y a los algoritmos basados en la linealización a trozos mediante los subespacios de Krylov (dgedmrlkv) y mediante la ecuación conmutante (dgedmrlcv). En el algoritmo basado en la linealización a trozos mediante los aproximantes diagonales de Padé (dgedmrlpv) se produce un error cuando el incremento de tiempo considerado es igual a 0.1. • Los menores costes computacionales corresponden al algoritmo basado en el método BDF (dgedmrbdv). • Los algoritmos más rápidos corresponden a los basados en la linealización a trozos mediante los aproximantes diagonales de Padé (dgedmrlpv) y mediante la educación conmutante (dgedmrlcv). Problema 5.12: El segundo caso de estudio de EDMRs con coeficientes variables ([BrLo87]) proviene de un problema de tipo rígido con valores de contorno. La correspondiente EDMR tiene como matrices coeficiente a ⎡− t / 2ε A11 (t ) = ⎢ ⎣ 0 0 ⎤ 0⎤ ⎡1 / 2 1⎤ ⎡0 t / 2ε ⎤ ⎡1 / ε , A21 (t ) = ⎢ , A22 (t ) = ⎢ , A12 (t ) = ⎢ , ⎥ ⎥ ⎥ 0⎦ 0 ⎥⎦ ⎣ 0 1⎦ ⎣0 ⎣ 0 1/ ε ⎦ siendo 0 < ε << 1 , t ≥ −1 , con valor inicial ⎡0 0 ⎤ X0 = ⎢ ⎥. ⎣0 0 ⎦ A medida que t se aleja del cero, la solución se aproxima a la matriz ⎡t / 2 X (t ) = ⎢ ⎣ 0 ε⎤ ⎥. ε⎦ En las pruebas realizadas se ha considerado un valor ε igual a 1e-4. Los valores de los parámetros característicos de cada método aparecen a continuación. • dgedmrbdv: r=3, tol=1.0e-14, maxiter=100. • dgedmrlpv: q=3. • dgedmrlcv: q=1. • dgedmrlkv: p=5, tol=1.0e-14, q=1. En la primera prueba se comparan los cuatro algoritmos al considerar t=1 y variar el incremento de tiempo. 270 Capítulo 5: Resultados Experimentales ∆t=0.1 ∆t=0.05 ∆t=0.01 dgedmrbdv 1.414 1.414 2.221e-16 1.112e-16 9.811e-18 2.088e-14 dgedmrlpv Error Error 1.511e-07 7.592e-08 9.814e-09 5.285e-09 dgedmrlcv 6.296e-08 2.220e-16 1.110e-16 1.110e-16 1.112e-16 1.119e-16 dgedmrlkv 6.283e-08 4.577e-16 Er 0 ∆t=0.005 ∆t=0.001 ∆t=0.0005 2.047e-16 3.261e-16 7.625e-16 Tabla 5.103: Errores relativos para t=1, variando el incremento de tiempo ∆t. ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 Flops dgedmrbdv 429587 789544 3587274 6860624 dgedmrlpv 324533 570077 1982885 3257621 dgedmrlcv 23235 46671 229231 454631 2240655 4453399 dgedmrlkv 95517 168559 575794 1068339 3986117 7035878 Tabla 5.104: Número de flops para t=1, variando el incremento de tiempo ∆t. F/Fi ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgedmrlpv 1.324 1.385 1.809 2.106 dgedmrlcv 1.874 1.737 1.601 1.541 dgedmrlkv 0.746 0.739 0.900 0.975 Tabla 5.105: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1 y variar el incremento de tiempo ∆t. 271 Capítulo 5: Resultados Experimentales Flops(dgedmrbdv)/Flops(dgedmrlpv) Flops(dgedmrbdv)/Flops(dgedmrlcv) Flops(dgedmrbdv)/Flops(dgedmrlk v) 2 F/Fi 1.5 1 0.01 0.005 0.001 0.0005 ∆t Figura 5.31: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1 y variar el incremento de tiempo ∆t. En la segunda prueba se comparan los cuatro algoritmos al considerar n=2, ∆t=0.001 y variar el tiempo t. t=0.1 Er t=0.2 t=0.3 t=0.4 t=0.5 t=0.6 dgedmrbdv 1.776e-06 1.693e-15 1.693e-15 2.772e-16 1.964e-14 5.013e-15 dgedmrlpv 8.942e-05 1.971e-06 1.971e-06 1.490e-06 1.197e-06 2.502e-07 dgedmrlcv 4.671e-12 dgedmrlkv 3.226e-12 1.154e-16 1.154e-16 1.059e-15 2.220e-16 3.706e-15 0 0 1.386e-16 6.933e-18 1.849e-16 Tabla 5.106: Errores relativos para n=2 y ∆t=0.001, variando el tiempo t. 272 Capítulo 5: Resultados Experimentales t=0.1 Flops t=0.2 t=0.3 t=0.4 t=0.5 t=0.6 dgedmrbdv 246065 292485 292485 315695 336187 354867 dgedmrlpv 170291 199275 199275 215825 232375 250493 dgedmrlcv 125493 148329 148329 159835 171357 182879 dgedmrlkv 388879 428862 428862 447606 469102 487842 Tabla 5.107: Número de flops para n=2 y ∆t=0.001, variando el tiempo t. t=0.1 F/Fi t=0.2 t=0.3 t=0.4 t=0.5 t=0.6 dgedmrlpv 1.445 1.468 1.468 1.463 1.447 1.417 dgedmrlcv 1.961 1.972 1.972 1.975 1.962 1.940 dgedmrlkv 0.633 0.682 0.682 0.705 0.717 0.727 Tabla 5.108: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considera n=2, ∆t=0.001 y variar el tiempo t. 2 1.8 Flops(dgedmrbdv)/Flops(dgedmrlpv) Flops(dgedmrbdv)/Flops(dgedmrlcv) Flops(dgedmrbdv)/Flops(dgedmrbk v) 1.6 F/Fi 1.4 1.2 1 0.8 0.1 0.15 0.2 0.25 0.3 0.35 t 0.4 0.45 0.5 0.55 0.6 Figura 5.32: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, ∆t=0.001 y variar el tiempo t. 273 Capítulo 5: Resultados Experimentales A partir de las tablas anteriores se pueden extraer las siguientes conclusiones: • Los algoritmos con menor error relativo corresponden a los basados en la linealización a trozos mediante los subespacios de Krylov (dgedmrlkv) y mediante la ecuación conmutante (dgedmrlcv). − En el algoritmo basado en el método BDF (dgedmrbdv) se producen grandes errores para incrementos de tiempo iguales a 0.1 y a 0.05. − En el método de linealización a trozos basado en los aproximantes diagonales de Padé (dgedmrlpv) se producen elevados errores cuando los incrementos de tiempo son iguales a 0.1 y a 0.05, debido a que la norma de la matriz Jacobiana es elevada, por lo que el cálculo de su exponencial produce un error de overflow. • Los algoritmos con menores costes corresponden a los basados en la linealización a trozos mediante la ecuación conmutante (dgedmrlcv) y mediante los aproximantes diagonales de Padé (dgedmrlpv). • El algoritmo basado en la linealización a trozos mediante los subespacios de Krylov (dgedmrlkv) tiene un coste computacional mayor que el basado en el método BDF (dgedmrbdv). Problema 5.13: El tercer caso de estudio de EDMRs con coeficientes variables ([Choi92]), corresponde a una EDMR definida como X ' (t ) = − X (t )T2 k (t ) + T2 k (t ) X (t ) − b(t ) X 2 (t ) − b(t ) I 2 k ; X (0) = I 2 k , t ≥ 0. donde X (t ) ∈ ℜ 2 , y T2 k ∈ ℜ2 está definida como k k ⎡ a(t ) b(t ) ⎤ T2 = ⎢ ⎥, ⎣− b(t ) a(t )⎦ T2 k = T2 ⊗ I 2 k −1 + I 2 ⊗ T2 k −1 , k ≥ 2 , siendo a (t ) = cos t y b(t ) = sen t . La solución analítica de la ecuación anterior es X (t ) = 1 + tan(cos t − 1) I k. 1 − tan(cos t − 1) 2 Los valores de los parámetros característicos de cada método aparecen a continuación. • dgedmrbdv: r=3, tol=1.0e-14, maxiter=100. • dgedmrlpv: q=2. • dgedmrlcv: q=2. • dgedmrlkv: p=3, tol=1.0e-14, q=1. En la primera prueba se comparan los cuatro algoritmos al considerar n=4 (k=2), t=1 y variar el incremento de tiempo ∆t. 274 Capítulo 5: Resultados Experimentales ∆t=0.1 Er ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgedmrbdv 2.018e-02 4.726e-03 2.066e-04 5.217e-05 2.103e-06 5.269e-07 dgedmrlpv 5.335e-03 1.174e-03 5.061e-05 1.277e-05 5.147e-07 1.289e-07 dgedmrlcv 7.419e-02 2.240e-02 1.554e-03 4.563e-04 2.437e-05 6.751e-06 dgedmrlkv 4.718e-03 1.023e-03 4.386e-05 1.106e-05 4.457e-07 1.117e-07 Tabla 5.109: Errores relativos para n=2 y t=1, variando el incremento de tiempo ∆t. ∆t=0.1 Flops ∆t=0.05 ∆t=0.01 dgedmrbdv 433518 744608 109554 ∆t=0.005 ∆t=0.001 ∆t=0.0005 2817685 5650073 28126108 55959494 575795 5820995 dgedmrlpv 57102 dgedmrlcv 119068 226544 1254024 2529762 12931608 26110356 dgedmrlkv 48163 477419 4818236 91570 1158595 959731 11654823 9646194 Tabla 5.110: Número de flops para n=4 y t=1, variando el incremento de tiempo ∆t. F/Fi ∆t=0.1 ∆t=0.05 ∆t=0.01 ∆t=0.005 ∆t=0.001 ∆t=0.0005 dgedmrlpv 7.592 6.797 4.894 4.877 4.832 4.801 dgedmrlcv 3.641 3.287 2.247 2.233 2.175 2.143 dgedmrlkv 9.001 8.132 5.902 5.887 5.837 5.801 Tabla 5.111: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=4, t=1 y variar el incremento de tiempo ∆t. 275 Capítulo 5: Resultados Experimentales Flops(dgedmrbdv)/Flops(dgedmrlpv) Flops(dgedmrbdv)/Flops(dgedmrlcv) Flops(dgedmrbdv)/Flops(dgedmrlk v) 9 8.5 8 7.5 7 F/Fi 6.5 6 5.5 5 4.5 4 3.5 3 2.5 2 0.1 0.05 0.01 0.005 0.001 0.0005 ∆t Figura 5.33: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=4, ∆t=0.1 y variar el incremento de tiempo ∆t. En la segunda prueba se comparan los cuatro algoritmos para n=4 (k=2), ∆t=0.1, variando el instante t de tiempo. t=5 Er t=10 t=15 t=20 t=25 t=30 dgedmrbdv 7.687e-02 1.466e-02 1.245e-02 1.836e-02 9.549e-03 2.215e-02 dgedmrlpv 1.153e-02 1.081e-03 7.964e-04 3.157e-04 4.040e-03 1.190e-02 dgedmrlcv 5.057e-01 2.223e-01 2.455e-01 8.954e-01 3.474e-01 7.782e-01 dgedmrlkv 8.781e-03 2.464e-03 5.066e-04 4.081e-05 3.526e-03 1.072e-02 Tabla 5.112: Errores relativos para n=4 y ∆t=0.1, variando el tiempo t. 276 Capítulo 5: Resultados Experimentales t=5 Flops t=10 t=15 t=20 t=25 t=30 dgedmrbdv 1934113 3797375 5680701 7503707 9382353 11245258 dgedmrlpv 296418 594418 885286 dgedmrlcv 584064 1078179 1505781 1938668 2438424 2957326 dgedmrlkv 241197 482487 723781 1178658 1477726 1776762 960212 1201523 1442843 Tabla 5.113: Número de flops para n=4 y ∆t=0.1, variando el tiempo t. F/Fi t=5 t=10 t=15 t=20 t=25 t=30 dgedmrlpv 6.525 6.388 6.417 6.366 6.349 6.329 dgedmrlcv 3.311 3.522 3.773 3.871 3.848 3.803 dgedmrlkv 8.019 7.870 7.849 7.815 7.809 7.794 Tabla 5.114: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=2, ∆t=0.1 y variar el tiempo t. 9 Flops(dgedmrbdv)/Flops(dgedmrlpv) Flops(dgedmrbdv)/Flops(dgedmrlcv) Flops(dgedmrbdv)/Flops(dgedmrlk v) 8 F/Fi 7 6 5 4 3 5 10 15 20 25 30 t Figura 5.34: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar n=4, ∆t=0.1 y variar el tiempo t. 277 Capítulo 5: Resultados Experimentales En la tercera prueba se comparan los cuatro algoritmos considerando t=1 y ∆t=0.1, variando el tamaño n del problema. n=2 Er n=4 n=8 n=16 n=32 n=64 dgedmrbdv 2.018e-02 2.018e-02 2.018e-02 2.018e-02 2.018e-02 2.018e-02 dgedmrlpv 5.374e-03 5.335e-03 5.303e-03 5.326e-03 5.497e-03 4.523e-03 dgedmrlcv 3.004e-02 7.419e-02 1.359e-01 2.153e-01 3.126e-01 4.283e-01 dgedmrlkv 4.718e-03 4.718e-03 4.718e-03 4.718e-03 4.718e-03 4.718e-03 Tabla 5.115: Errores relativos para t=1 y ∆t=0.1, variando el tamaño n del problema. n=2 Flops n=4 n=8 n=16 n=32 n=64 dgedmrbdv 28919 433518 1331590 8717740 61494024 463083648 dgedmrlpv 10027 57102 376523 2714671 20575955 194870615 dgedmrlcv 15390 119068 480837 2834634 20135747 149904917 dgedmrlkv 11863 48163 1525323 10347743 75449843 250743 Tabla 5.116: Número de flops para t=1 y ∆t=0.1, variando el tamaño n del problema. F/Fi n=2 n=4 n=8 n=16 n=32 n=64 dgedmrlpv 2.884 7.592 3.537 3.211 2.989 2.376 dgedmrlcv 1.879 3.641 2.769 3.075 3.054 3.089 dgedmrlkv 2.438 9.001 5.311 5.715 5.943 6.138 Tabla 5.117: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1, ∆t=0.1 y variar el tamaño n del problema. 278 Capítulo 5: Resultados Experimentales 10 Flops(dgedmrbdv)/Flops(dgedmrlpv) Flops(dgedmrbdv)/Flops(dgedmrlcv) Flops(dgedmrbdv)/Flops(dgedmrlk v) 9 8 7 F/Fi 6 5 4 3 2 1 0 10 20 30 40 50 60 70 n Figura 5.35: Relación entre el número de flops (F) del algoritmo basado en el método BDF (dgedmrbdv) y el número de flops (Fi) de los algoritmos basados en la linealización a trozos, al considerar t=1, ∆t=0.1 y variar el tamaño n del problema. Para comprobar el comportamiento de las rutinas implementadas cuando el tamaño de la matriz es elevado, se han realizado pruebas con las implementaciones FORTRAN para tamaños del problema 512 y 1024. Los valores elegidos para los parámetros característicos se muestran a continuación. • dgedmrbdv: r=2, tol=1e-13, maxiter=100. • dgedmrlpv: q=2. • dgedmrlcv: q=3. • dgedmrlkv: p=3, tol=1e-13, q=1. A continuación se presentan los resultados obtenidos en cuanto a precisión y tiempos de ejecución en segundos. Er n=512 n=1024 dgedmrbdv 1.1616E-04 1.1616E-04 dgedmrlpv 5.3723E-05 5.4718E-05 dgedmrlcv 5.2306E-03 5.4516E-03 dgedmrlkv 4.4898E-04 44898E-05 Tabla 5.118: Errores relativos para t=1 y ∆t=0.01, variando el tamaño n del problema. 279 Capítulo 5: Resultados Experimentales Te n=512 n=1024 dgedmrbdv 1666.5 65757 dgedmrlpv 194.61 1501.4 dgedmrlcv 2834.5 29099 dgedmrlkv 181.12 1460.3 Tabla 5.119: Tiempos de ejecución en segundos, considerando t=1, ∆t=0.01 y variar el tamaño n del problema. Te/Tei n=512 n=1024 dgedmrlpc 8.56 43.80 dgedmrlcc 0.59 2.26 dgedmrlkc 9.20 45.03 Tabla 5.120: Relación entre el tiempo de ejecución (Te) de la implementación basada en el método BDF (dgedmrbdv) y el tiempo de ejecución (Tei) de las implementaciones basadas en la linealización a trozos, al considerar t=1, ∆t=0.01 y variar el tamaño n del problema. De los resultados obtenidos se pueden extraer las siguientes conclusiones: • Los algoritmos con menor error relativo corresponden a los algoritmos basados en la linealización a trozos mediante los subespacios de Krylov (dgedmrlkv) y mediante aproximantes diagonales de Padé, seguidos muy de cerca por el algoritmo basado en el método BDF (dgedmrbdv). Los peores resultados se obtienen para el caso de linealización a trozos mediante la ecuación conmutante (dgedmrlcv). • Los menores costes computacionales corresponden al método de linealización a trozos basado en los subespacios de krylov (dgedmrlkv), seguido muy de cerca por el basado en los aproximantes diagonales de Padé (dgedmrlpv). Los mayores costes computacionales corresponden al algoritmo basado en el método BDF (dgedmrbdv). • Para tamaños elevados del problema, las implementaciones basadas en los algoritmos que utilizan la linealización a trozos tienen tiempos de ejecución mucho menores que la implementación basada en el método BDF (dgedmrbdv), destacando la basada en los subespacios de krylov (dgedmrlkv) y la basada los aproximantes diagonales de Padé (dgedmrlpv). 5.6 Conclusiones Como se ha podido comprobar a lo largo del desarrollo de este capítulo, se han realizado un gran número de pruebas para comparar los algoritmos implementados, 280 Capítulo 5: Resultados Experimentales determinando para cada algoritmo los valores óptimos de sus parámetros característicos. A continuación se sintetizan los resultados más destacables de las pruebas realizadas. • Funciones de matrices. − Los algoritmos basados en los aproximantes diagonales de Padé presentan una buena precisión. En cuanto a eficiencia destacan las implementaciones basadas en el método de Paterson-Stockmeyer-Van Loan, eligiendo para ello un factor adecuado de agrupamiento comprendido entre 3 y 5. − Los algoritmos basados en la descomposición real de Schur de una matriz son, en general, más precisos que los métodos basados en aproximantes diagonales de Padé. En cuanto a eficiencia destacan la implementación que utiliza los aproximantes diagonales de Padé y la implementación basada en la resolución por bloques de la Ecuación Conmutante. − Las implementaciones basadas en los aproximantes diagonales de Padé son más rápidas que las implementaciones basadas en la descomposición real de Schur de una matriz. • Resolución de EDOs. − Los valores óptimos de los parámetros característicos han sido, en la mayoría de los casos, valores pequeños. A modo de resumen, se citan a continuación los valores más habituales. dgeedobdf: r=2, 3; tol=1e-6; maxiter=100. dgeedolpa-dgeedolpn: q=1. dgeedolca-dgeedolcn: q=1. dgeedolpa- dgeedolpn: p=2, 3, 4; tol=1e-6; q=1. − En las pruebas realizadas sobre EDOs autónomas se ha podido comprobar que los errores relativos cometidos por los algoritmos basados en los métodos de linealización a trozos son similares a los cometidos por el algoritmo basado en el método BDF, aunque en el caso del algoritmo basado en la linealización a trozos mediante la Ecuación Conmutante este sólo se puede utilizar si la matriz Jacobiana es invertible y está bien condicionada. − En las pruebas realizadas sobre EDOs autónomas siempre ha sido posible encontrar un algoritmo basado en la linealización a trozos que tuviese un coste computacional menor que el basado en el método BDF. Para problemas de pequeña dimensión destacan los algoritmos basados en los aproximantes diagonales de Padé y en la Ecuación Conmutante. Para problemas de mayor dimensión destaca la implementación basada en los subespacios de Krylov, por tener un coste computacional menor que los costes computacionales correspondientes al resto de algoritmos. − En las pruebas realizadas sobre EDOs no autónomas, se tiene que los errores relativos cometidos por los algoritmos basados en los métodos de linealización a trozos son algo menores que los cometidos por el algoritmo basado en el método BDF, exceptuando el caso del algoritmo basado en el método de linealización a trozos mediante la Ecuación Conmutante, por necesitar que la matriz Jacobiana sea invertible y esté bien condicionada. 281 Capítulo 5: Resultados Experimentales − En las pruebas realizadas sobre EDOs no autónomas siempre ha sido posible encontrar un método basado en la linealización a trozos que tuviese un coste computacional menor que el basado en el método BDF. Para problemas de pequeña dimensión destacan el algoritmo basado en los aproximantes diagonales de Padé y el basado en la Ecuación Conmutante. Para problemas de mayor dimensión destaca el algoritmo basado en los subespacios de Krylov. Cabe destacar, en este sentido, los resultados obtenidos en el tercer caso de estudio de EDOs no autónomas, al tener que el tiempo de ejecución de la implementación basada en los subespacios de Krylov es mucho menor que la implementación basada en los otros métodos. − Tanto los algoritmos basados en los métodos de linealización a trozos como el basado en el método BDF presentan un buen comportamiento en problemas de tipo rígido. • Resolución de EDMRs. − Los valores óptimos de los parámetros característicos han sido, en la mayoría de los casos, valores pequeños. A modo de resumen, se citan a continuación los valores más habituales. dgedmrbdc: r=2, 3; tol=1e-6, 1e-14; maxiter=100. dgedmrlpc-dgedmrlpv: q=1,2. dgedmrlcc-dgedmrlcv: q=1,2,3. dgedmrlpc-dgedmrlpv: p=2, 3, 5; tol=1e-6, 1e-14; q=1,2. − En las pruebas realizadas sobre EDMRs con coeficientes constantes se tiene que los errores relativos cometidos por los cuatro algoritmos son similares, salvo el segundo caso de estudio en el que el algoritmo basado en el método BDF y el basado en la linealización a trozos mediante los aproximantes diagonales de Padé presentan grandes errores, si el incremento de tiempo es del orden de décimas. − En las pruebas realizadas sobre EDMRs con coeficientes constantes ha resultado que los algoritmos basados en la linealización a trozos tienen un coste computacional menor que el basado en el método BDF. Entre ellos destacan los algoritmos basados en los aproximantes diagonales de Padé y en los subespacios de Krilov, sobresaliendo este último cuando se consideran problemas de gran dimensión. − El tiempo de ejecución del método de linealización a trozos basado en los subespacios de Krylov, cuando se aplica sobre EDMRs con coeficientes constantes de mediana o gran dimensión, es menor que el tiempo de ejecución del resto de las implementaciones. Cabe destacar, en este sentido, los resultados obtenidos en el segundo y tercer caso de estudio (Problema 5.9, Problema 5.10) cuando se considera un tamaño del problema elevado, al tener que el tiempo de ejecución de la implementación basada en los subespacios de Krylov ha sido mucho menor que la implementación basada en el método BDF. − En las pruebas realizadas sobre EDMRs con coeficientes variables, salvo un caso de estudio de pequeña dimensión (Problema 5.11), los algoritmos basados en la linealización a trozos tienen un coste computacional menor que el basado en el método BDF. 282 Capítulo 5: Resultados Experimentales Para problemas de pequeña dimensión destacan los basados en los aproximantes diagonales de Padé y en la Ecuación Conmutante. Para problemas de mayor dimensión destaca el método basado en los subespacios de Krylov. En este sentido se pueden resaltar los resultados obtenidos en el tercer caso de estudio de EDMRs con coeficientes variables cuando se consideran tamaños del problema igual 1024, al tener que el tiempo de ejecución de la implementación basada en los subespacios de Krylov ha resultado ser unas cuarenta y cinco veces menor que el tiempo de ejecución de la implementación basada en el método BDF. − Tanto los algoritmos basados en la linealización a trozos como los basados en el método BDF presentan un buen comportamiento en problemas de tipo rígido. 283 Capítulo 6: Conclusiones y Líneas Futuras de Investigación Capítulo 6 Conclusiones y Líneas Futuras de Investigación 6.1 Resumen de Contenidos En este capítulo se resume el trabajo realizado en esta tesis, describiendo brevemente los resultados más destacados y perfilando las futuras líneas de investigación. La segunda sección está dedicada a resumir las aportaciones realizadas en el marco de esta tesis y los excelentes resultados obtenidos en las diferentes implementaciones. En la tercera sección se detallan las publicaciones realizadas durante el periodo de realización de la tesis, muchas de las cuales han servido como base de la misma. En la cuarta sección se enumeran las posibles líneas de investigación que se pueden abrir a partir de este trabajo. 6.2 Conclusiones Finales En el marco de esta tesis se han desarrollado nuevos métodos y algoritmos para el cálculo de Funciones de Matrices y la aplicación de Funciones de Matrices a la simulación y la resolución de EDOs y EDMRs. Para cada algoritmo desarrollado se ha implementado una función en MATLAB y una rutina en FORTRAN. De este modo se dispone en la actualidad de tres librerías, escritas en MATLAB y FORTRAN, que permiten calcular Funciones de Matrices y resolver EDOs y EDMRs. Las librerías obtenidas tienen las características propias de un software de computación numérica de calidad: eficientes, de altas prestaciones, portables, robustas y correctas. Esto ha sido posible al utilizar un ciclo de vida que permite automatizar el desarrollo de software numérico y disponer de herramientas que lo posibilitan como el entorno MATLAB y las librerías de computación numérica de altas prestaciones BLAS y LAPACK. 6.2.1 Funciones de Matrices Para el cálculo de Funciones de Matrices se han desarrollado dos metodologías generales, basadas en los aproximantes diagonales de Padé y en la descomposición real de Schur de una matriz, que calculan eficientemente Funciones de Matrices. La metodología basada en los aproximantes diagonales de Padé ha permitido poder calcular funciones especiales de matrices, como las potencias fraccionarias, de una manera nunca realizada hasta ahora. También se puede destacar, como aspecto novedoso, el cálculo de la función seno matricial mediante esta metodología. En general, esta metodología permite calcular funciones analíticas de matrices de manera eficiente. Esto ha sido posible porque la parte más costosa de los algoritmos basados en esta metodología (cálculo de la aproximación de Padé) se ha realizado de la manera más eficiente posible (método de Paterson-Stockmeyer-Van Loan). 285 Capítulo 6: Conclusiones y Líneas Futuras de Investigación Se han diseñado nuevos algoritmos para el cálculo de Funciones de Matrices que utilizan la descomposición real de Schur de una matriz como, por ejemplo, el basado en la diagonalización a bloques de una matriz, los basados en la Ecuación Conmutante (orientados a columnas, diagonales y a bloques), los basados en la agrupación en cluster de los valores propios cercanos y el basado en los aproximantes diagonales de Padé. El diseño de estos nuevos algoritmos ha conducido a la implementación de funciones/rutinas basadas en dichas metodologías, escritas en MATLAB y FORTRAN, que calculan Funciones de Matrices. Las rutinas implementadas en FORTRAN utilizan las librerías de computación numérica BLAS y LAPACK, con la consiguiente portabilidad y eficiencia del código implementado. En este sentido cabe destacar el hueco cubierto por este software desarrollado, ya que en la actualidad se dispone de un número muy limitado de rutinas que calculan Funciones de Matrices. Para analizar las prestaciones de los algoritmos implementados se han realizado una gran cantidad de pruebas que han permitido comprobar la eficiencia y la precisión de las rutias implementas. Estas pruebas además han permitido determinar los valores de los parámetros característicos de algunas de las implementaciones. También se ha podido comprobar cuáles pueden ser las mejores implementaciones para una determinada función y una matriz dada. Por lo tanto, se puede diseñar un algoritmo que determine, a partir de la función y de la matriz considerada, cuál es el mejor método y cuáles los valores óptimos de sus parámetros característicos. En cuanto a los resultados obtenidos se puede afirmar que se han desarrollado implementaciones muy eficientes, en términos de almacenamiento y coste computacional, destacando las basadas en los aproximantes diagonales de Padé por su rapidez y las basadas en la descomposición real de Schur de una matriz por su precisión. 6.2.2 Aplicación de las Funciones de Matrices Se ha realizado un estudio completo del uso de Funciones de Matrices en la simulación de la propagación de ondas en fibras de cristal fotónico. Las especiales características de guiado de la luz de las fibras de cristal fotónico tienen potenciales aplicaciones en una gran variedad de campos que van desde las comunicaciones ópticas hasta la fabricación de dispositivos optoelectrónicos. Las propiedades de propagación del campo electromagnético en estos sistemas vienen determinadas por la configuración particular de la estructura dieléctrica transversal. A partir de un modelo que representa la propagación no lineal de un campo monocromático en un medio inhomogéneo, se analiza la evolución no lineal del campo eléctrico a lo largo de la fibra. Esta evolución consiste en un proceso iterativo en el que en cada paso se calcula la exponencial de la raíz cuadrada de una matriz de gran dimensión obtenida a partir del paso anterior. Esto supone un alto coste computacional que puede acarrear semanas o incluso meses de simulaciones. Se trataba, pues, de implementar un algoritmo que, manteniendo la precisión adecuada, tuviese un tiempo de ejecución lo menor posible. Partiendo de una implementación previa, basada en la diagonalización de una matriz, se realizó un estudio en profundidad determinando otras posibilidades: método basado en los aproximantes diagonales de Padé y método basado en la iteración DB con aproximantes diagonales de Padé. Tal como muestran los resultados, la implementación basada en la iteración DB con aproximantes diagonales de Padé resultó tener un tiempo de ejecución aproximadamente igual a la mitad del tiempo de ejecución de la primera implementación basada en la diagonalización de la matriz. 286 Capítulo 6: Conclusiones y Líneas Futuras de Investigación 6.2.3 Resolución de EDOs En esta tesis se ha aplicado la técnica de linealización a trozos para resolver EDOs con una nueva aproximación basada en el Teorema 4.1, desarrollado en el ámbito de esta tesis, el cual permite resolver EDOs aunque la matriz Jacobiana que aparece en cada iteración sea singular. Consecuencia de este teorema ha sido el desarrollo de nuevos método de resolución de EDOs. Estos métodos se basan en calcular en cada iteración una expresión en la que aparecen dos bloques de la exponencial de una matriz. Estos métodos se describen a continuación: • Método basado en los aproximantes diagonales de Padé. En este método se calculan los bloques que aparecen en la expresión que define la nueva aproximación, sin el cálculo explicito de la exponencial que los contiene. Para ello se realiza una adaptación de los aproximantes diagonales de Padé. Para reducir los costes computacionales y de almacenamiento, se ha adaptado adecuadamente el método anterior cuando se aplica sobre EDOs autónomas. • Método basado en los subespacios de Krylov. En este método se trasforma la expresión que define a la nueva aproximación en el producto de la exponencial de una matriz definida a bloques por un vector. Para calcular eficientemente dicho producto, se utiliza una aproximación basada en subespacios de Krylov. Es posible adaptar el método anterior para resolver EDOs autónomas, reduciendo con ello los costes computacionales y de almacenamiento. • Método basado en la Ecuación Conmutante En este método se aplica la Ecuación Conmutante a la matriz Jacobiana, para encontrar los bloques que aparecen en la expresión que define la nueva aproximación. En este caso es necesario que la matriz Jacobiana sea invertible. Al igual que ocurre en los otros dos métodos, se han reducido los costes computacionales y de almacenamiento cuando se resuelven EDOs autónomas, adaptando para ello el método anterior. Para cada uno de los métodos anteriores se ha desarrollo un algoritmo que permite resolver EDOs: • EDOs no autónomas: Algoritmo 4.5, Algoritmo 4.7 y Algoritmo 4.11. • EDOs autónomas: Algoritmo 4.14, Algoritmo 4.16 y Algoritmo 4.18. Además, se han implementado los algoritmos anteriores en MATLAB y FORTRAN, determinando los parámetros característicos de cada uno de ellos y optimizando sus costes espaciales y temporales. Se han presentado siete casos de estudio, realizando una gran variedad de pruebas sobre ellos. Los resultados obtenidos han mostrado por una parte, cuáles suelen ser los valores óptimos de los parámetros característicos y, por otra, las ventajas que tienen frente a un método clásico de resolución de EDOs (método BDF). Hay que resaltar dos aspectos en este sentido: • Se han elegido algunos casos de estudio que corresponden a problemas de tipo rígido. • Se han seleccionado algunos casos de estudios en los que la solución analítica es conocida, y así poder comprobar la precisión de los algoritmos implementados. 287 Capítulo 6: Conclusiones y Líneas Futuras de Investigación • Se ha elegido un caso de estudio que corresponde a un problema de gran dimensión, y así comprobar la eficiencia de los métodos implementados para este tipo de problemas. • Para cada caso de estudio se han determinado los valores óptimos de los parámetros característicos de todos los códigos implementados para, de este modo, no favorecer a uno de ellos frente al resto. • Aunque se han analizado más casos de estudio que los presentados en esta tesis, se ha podido constatar que los resultados obtenidos en estos otros casos han resultado ser similares. A continuación se hace un breve resumen de los resultados obtenidos: • Para un mismo incremento de tiempo, la precisión obtenida en los algoritmos basados en la linealización a trozos de EDOs ha resultado ser similar e incluso mayor que la obtenida en el algoritmo basado en el método BDF. • Los algoritmos basados en los métodos de linealización tienen un excelente comportamiento en la resolución de EDOs de tipo rígido. • Para cada uno de los caso de estudios considerados, al menos uno de los algoritmos basados en la linealización a trozos ha tenido un coste computacional menor que el correspondiente al método BDF. • Para problemas de pequeña dimensión han destacado, en cuanto coste computacional, los algoritmos basados en la linealización a trozos mediante los aproximantes diagonales de Padé y mediante la Ecuación Conmutante. • Para problemas de mediano y gran tamaño, destaca la implementación basada en la linealización a trozos mediante los subespacios de Krylov, por tener un tiempo de ejecución mucho menor que los tiempos de ejecución correspondientes a las otras implementaciones. 6.2.4 Resolución de EDMRs Se ha desarrollado una nueva metodología para la resolución de EDMRs que consiste en la vectorización y posterior aplicación de la linealización a trozos de EDOs. Debido al enorme coste computacional y de almacenamiento necesarios, se han desarrollado tres nuevos métodos de resolución de EDMRs. Entre las aportaciones de esta tesis en relación a la resolución de EDMRs se encuentran las siguientes: − Demostración de cuatro teoremas (Teorema 4.3, Teorema 4.4, Teorema 4.5, Teorema 4.6) que permiten, mediante su aplicación, resolver EDMRs tal como a continuación se detalla. • Desarrollo de tres nuevos métodos, basados en la linealización a trozos, para la resolución de EDMRs: − Método basado en los aproximantes diagonales de Padé. En cada iteración se calculan ciertos bloques de dos exponenciales matriciales, utilizando para ello aproximaciones diagonales de Padé. Este método está basado en el Teorema 4.3, el cual permite transformar un problema vectorial de gran dimensión, problema que aparece al aplicar la linealización a trozos a la EDO obtenida por vectorización de la EDMR, en un problema matricial. Para EDMRs con coeficientes constantes es necesario reducir tanto el número de operaciones como la memoria necesaria. Por ello se demuestra una adaptación del 288 Capítulo 6: Conclusiones y Líneas Futuras de Investigación Teorema 4.3 para EDMRs con coeficientes constantes (Teorema 4.5). En este caso sólo se calculan dos bloques de una exponencial matricial. − Método basado en la Ecuación Conmutante. Este método se basa en el Teorema 4.4, el cual permite trasformar un problema vectorial de gran dimensión en un problema matricial consistente en resolver tres ecuaciones matriciales de Sylvester. Para EDMRs con coeficientes constantes se demuestra el Teorema 4.6, el cual permite reducir el número de operaciones y la memoria necesaria, pues en este caso sólo hace falta resolver una ecuación matricial de Sylvester. − Método basado en los subespacios de Krylov. Al igual que en los métodos anteriores, se aplica el método de linealización a trozos a la EDO obtenida tras la vectorización de la EDMR. En este caso la solución aproximada en un instante de tiempo se obtiene al multiplicar la exponencial de una matriz a bloques de gran dimensión por un vector. Para calcular el producto anterior se realiza una adaptación del método de los subespacios de Krylov aplicado a matrices definidas a bloques. Para reducir el número de operaciones y la memoria necesaria, se realiza también una adaptación de este método para el caso de EDMRs con coeficientes constantes. • Desarrollo de seis algoritmos basados en los métodos anteriores: − EDMRs con coeficientes variables: Algoritmo 4.21, Algoritmo 4.23 y Algoritmo 4.26. − EDMRs con coeficientes constantes: Algoritmo 4.27, Algoritmo 4.29 y Algoritmo 4.31. • Desarrollo de funciones/rutinas escritas en MATLAB y FORTRAN que permiten resolver EDMRs. Hay que destacar que actualmente no se dispone de funciones escritas en MATLAB que resuelvan EDMRs y, en el caso de rutinas escritas en FORTRAN, tan sólo se dispone del paquete DRSOL, pero únicamente para datos en simple precisión. En esta tesis se han presentado seis casos de estudio, realizando una gran variedad de pruebas sobre ellos. Los resultados obtenidos han mostrado, por una parte, cuáles suelen ser los valores óptimos de los parámetros característicos de cada uno de los métodos y, por otra, las ventajas que tienen frente a un método BDF. Cabe mencionar también que se han elegido los valores óptimos de parámetros característicos, de manera que no se ha favorecido a uno de los algoritmos (o implementaciones) frente a los demás. Aunque en la tesis se han reflejado seis casos de estudio, se han analizado más casos, habiéndose obtenido resultados similares. En cuanto a los casos de estudio cabe destacar: • Se han elegido algunos casos de estudio que corresponden a problemas de tipo rígido. • Se han seleccionado algunos casos de estudios en los que la solución analítica es conocida, y así poder comprobar la precisión de los algoritmos implementados. • Se han elegido tres casos de estudio que corresponden a problemas de gran dimensión, y así comprobar la eficiencia de los métodos implementados para este tipo de problemas. Dos de ellos corresponde a EDMRs con coeficientes constantes y otro a EDMRs con coeficientes variables. A continuación se resumen brevemente los resultados obtenidos: 289 Capítulo 6: Conclusiones y Líneas Futuras de Investigación • Los algoritmos basados en la linealización a trozos tienen una precisión similar e incluso mayor que los algoritmos basados en el método BDF. En un caso de estudio (Problema 5.12), se ha podido comprobar que para incrementos de tiempo del orden de una décima se ha producido error en la implementación del método BDF, no así en dos implementaciones de los métodos de linealización a trozos (implementación basada en la Ecuación Conmutante e implementación basada en los subespacios de Krylov). • Los algoritmos basados en los métodos de linealización tienen un excelente comportamiento en la resolución de EDMRs de tipo rígido. • El coste computacional de los algoritmos basados en la linealización a trozos es menor que el coste computacional de los algoritmos basados en el método BDF. Este es un aspecto a destacar, puesto que los algoritmos basados en el método BDF se encuentran entre los más utilizados, actualmente, en la resolución de EDMRs. • Para EDMRs con coeficientes constantes, los algoritmos basados en los métodos de linealización tienen un coste computacional menor que el algoritmo basado en el método BDF. Entre ellos destacan el basado en los subespacios de Krylov, fundamentalmente por su buen comportamiento a medida que el tamaño del problema se va haciendo mayor, y el basado en los aproximantes diagonales de Padé. En este sentido, se ha comprobado que para tamaños elevados de un problema, el tiempo de ejecución de la implementación basada en los subespacios de Krylov ha sido mucho menor que la implementación basada en el método BDF. • Para EDMRs con coeficientes variables, el algoritmo basado en el método de linealización a trozos mediante los subespacios de Krylov, presenta, en general, menores errores que los otros algoritmos. Los algoritmos basados en los métodos de linealización a trozos presentan costes computacionales menores que el basado en el método BDF, destacando el basado en la Ecuación Conmutante y el basado en los subespacios de Krylov. Para tamaños elevados de un problema, el tiempo de ejecución de la implementación basada en los subespacios de Krylov ha sido mucho menor que la implementación basada en el método BDF. 6.3 Publicaciones en el Marco de la Tesis • M. Marqués, Vicente Hernández García, J. Javier Ibáñez González, “Parallel Algorithms for Computing Functions of Matrices on Shared Memory Multiprocessors”. Parallel Computing and Transputer Applications, IO Press, pp. 157-166, 1992. • Vicente Hernández García, J. Javier Ibáñez González, G. Quintana, A.M. Vidal, V. Vidal, “Experiencias Docentes Sobre el Uso del LAPACK en Multiprocesadores con Memoria Compartida”. Jornadas sobre Nuevas Tecnologías en la Enseñanza de las Matemáticas en la Universidad. E.T.S.I. de Telecomunicación Universidad Politécnica de Valencia, pp. 163-178, 1993. • Vicente Hernández García, J. Javier Ibáñez González, “Calculo de la Exponencial de una Matriz: Algoritmos Paralelos Basados en la Descomposición Real de Schur”. Informe Técnico/Technical Report DSIC-II-36/93, Departamento de Sistemas Informáticos y Computación, Universidad Politécnica de Valencia, Valencia 1993. 290 Capítulo 6: Conclusiones y Líneas Futuras de Investigación • Juan Carlos Fernández, Enrique S. Quintana, Vicente Hernández, Javier Ibáñez, “Algoritmos Paralelos para la Resolución de la Ecuación Conmutante Sobre Multiprocesadores con Memoria Distribuida". Informe Técnico/Technical Report DSIC-II-12/95, Departamento de Sistemas Informáticos y Computación, Universidad Politécnica de Valencia, Valencia 1995. • Enrique Arias Antúnez, Vicente Hernández García, J. Javier Ibáñez González, “Discretization of Continuous-Time Linear Control Systems: A High Performance Computing Approach”. 3rd Portuguese Conference on Automatic Control: CONTROLO’98, pp. 47-51, 1998. • Enrique Arias Antúnez, Vicente Hernández García, J. Javier Ibáñez González, “Algoritmos Secuencial y Paralelo para la Resolución del Problema de la Discretización de Sistemas Lineales Continuos”. Informe Técnico/Technical Report DSIC-II-45/98, Departamento de Sistemas Informáticos y Computación, Universidad Politécnica de Valencia, Valencia 1998. • Enrique Arias Antúnez, Vicente Hernández García, J. Javier Ibáñez González, “Distributed Memory Parallel Algoritms for Computing Integrals Involving the Matrix Exponential”. First Niconet Workshop on Numerical Software in Control Engineering, Universidad Politécnica de Valencia, Diciembre de1998. • Enrique Arias Antúnez, Vicente Hernández García, J. Javier Ibáñez González, “Un Algoritmo Paralelo para el Cálculo de Exponenciales de Matrices e Integrales con Exponenciales de Matrices”. X Jornadas de Paralelismo, La Manga del Mar Menor, pp. 55-60, Septiembre de 1999. • Enrique Arias Antúnez, Vicente Hernández García, J. Javier Ibáñez González, “Algoritmos Paralelos para el Cálculo de Integrales con Exponenciales de Matrices”. Informe Técnico/Technical Report DSIC-II-20/99, Departamento de Sistemas Informáticos y Computación, Universidad Politécnica de Valencia, Valencia 1999. • Enrique Arias Antúnez, Vicente Hernández García, Ignacio Blanquer Espert, J. Javier Ibáñez González, “Nonsingular Jacobian Free Piecewise Linearization of Ordinary Differential Equations (EDO)”. Second Niconet Workshop on Numerical Software in Control Engineering, Institut National de Recherche en Informatique et en Automatique, pp. 1-5, Diciembre de1999. • E. Arias, V. Hernández, J. J. Ibáñez, “Non Singular Jacobian Free Piecewise Linealization of the State Equation”. Controlo’2000: 4th Portuguese Conference on Automatic Control, pp. 630-635, October of 2000. • E. Arias, V. Hernández, J. J. Ibáñez, “Algoritmos de Altas Prestaciones para la Resolución de Ecuaciones Diferenciales Ordinarias y Algebraicas”. XII Jornadas de Paralelismo. Valencia, pp. 205-209, Septiembre del 2001. • E. Arias, V. Hernández, J. J. Ibáñez, “High Performance Algorithms for Computing Nonsingular Jacobian Free Piecewise Linealization of Differential Algebraic Equations”. Integral Methods in Science and Engineering, Analytic and Numerical Techniques, Birkhäuser Boston, pp. 7-12, 2004. • E. Arias, V. Hernández, J. J. Ibáñez and J. Peinado, “Solving Differential Riccati Equations by Using BDF Methods”. Technical Report, DSIC-II/05/05, Universidad Politécnica de Valencia, 2005. 291 Capítulo 6: Conclusiones y Líneas Futuras de Investigación 6.4 Líneas Futuras de Investigación Las líneas futuras de investigación se centrarán en la aplicación del cálculo de Funciones de Matrices en la resolución de problemas de ingeniería, la aplicación de la linealización a trozos y de otras metodologías para la resolución de ecuaciones diferenciales vectoriales y matriciales, y, fundamentalmente, el desarrollo e implementación de los algoritmos paralelos correspondientes a los métodos desarrollados en esta tesis. Aplicación del cálculo de Funciones de Matrices a la resolución de problemas de ingeniería. Se trata de abordar el análisis de problemas reales en los que aparece la necesidad de calcular Funciones de Matrices. Para cada problema de este tipo se debe realizar un estudio de cuál es el algoritmo óptimo para ese problema y su posterior implementación. En la actualidad se han realizado diversas implementaciones en este sentido: simulación de la propagación de ondas en fibras de cristal fotónico o ajuste dinámico de los parámetros de control para cambios en los periodos de muestreo en sistemas de control. Aplicación del cálculo de Funciones de Matrices a la resolución de problemas de ingeniería en los que aparezca la necesidad de resolver EDOs con valores iniciales o valores de contorno. Se trata de resolver nuevos o antiguos problemas en los que es necesario resolver EDOs, aplicando para ello las técnicas desarrolladas en esta tesis. En particular, para problemas de valores de contorno se puede aplicar la técnica que consiste en desacoplar la ecuación diferencial en dos problemas, uno de valores iniciales y otro de valores finales, mediante la resolución de una EDMR (véase subapartado 2.4.4.5). Aplicación de la linealización a trozos para la resolución de ecuaciones diferenciales. Por una parte, se trataría de mejorar los algoritmos ya desarrollados, en cuanto a la elección de un tamaño variable del incremento de tiempo, aprovechar la estructura dispersa de muchos de estos problemas, para diseñar adaptaciones de los algoritmos desarrollados, etc. Por otra parte, se trataría de aplicar técnicas similares, pero para la resolución de otros tipos de ecuaciones diferenciales como: Ecuaciones Diferenciales Matriciales de Sylvester (EDMSs). Ecuaciones Diferenciales Matriciales Lineales (EDMLs). Ecuaciones Diferenciales Algebraicas (EDAs). Etc. Desarrollo de nuevos métodos de resolución de EDOs y EDMOs basados en aproximaciones cuadráticas. Se trataría de realizar una aproximación cuadrática a trozos de la función vectorial/matricial que define a la EDO/EDMO. En este caso la complejidad matemática y computacional es mayor, al aparecer términos cuadráticos, en donde además de la matriz Jacobiana aparece la matriz Hessiana de la función que define a la EDO/EDMO. Es por ello que, quizás, su aplicación esté más limitada que el caso de linealización a trozos, pero las ventajas, en cuanto a precisión, pueden resultar interesantes para el desarrollo de nuevos métodos de resolución de ecuaciones diferenciales. 292 Capítulo 6: Conclusiones y Líneas Futuras de Investigación Implementaciones paralelas de los algoritmos. Es indudable que los procesadores secuenciales actuales más rápidos, aún utilizando técnicas de segmentación o de computación vectorial, están limitados por su velocidad de reloj. La única manera posible de incrementar la capacidad de procesamiento es utilizar sistemas multiprocesador, de memoria compartida o distribuida, al poder utilizar de manera “cooperativa” varios procesadores. En la actualidad, existen numerosos sistemas multiprocesador muy rápidos y a un precio muy asequible. Por otra parte, en los últimos tiempos se ha desarrollado software estándar para la programación paralela de esos sistemas entre los que destaca el ScaLapack ([ScLA97]). Una línea de investigación claramente definida es el desarrollo e implementación de algoritmos paralelos para la resolución de todos los problemas planteados en esta tesis: • En el caso de Funciones de Matrices hay que destacar el potencial de los algoritmos paralelos basados en los aproximantes diagonales de Padé, aunque no hay que descartar los basados en la descomposición real de Schur de una matriz. El código que aparece en los algoritmos basados en los aproximantes diagonales de Padé corresponde a operaciones básicas del tipo matriz-matriz o matriz-vector, y a la resolución de sistemas de ecuaciones lineales. En el caso de los algoritmos basados en la descomposición real de Schur de una matriz, además de las operaciones antes mencionadas, necesitan del cálculo de la descomposición real de Schur de una matriz. Con las herramientas actualmente disponibles para el desarrollo de software paralelo, como es el caso del ScaLapack, los códigos que contienen operaciones básicas de matrices y vectores y la resolución de sistemas de ecuaciones lineales, suelen ser muy eficientes en sistemas multiprocesador. En el caso de la obtención de la forma real de Schur, los códigos no son tan eficientes debido a las características del algoritmo iterativo QR que utiliza. Hay que mencionar al respecto que, aunque no se han incluido en esta tesis implementaciones paralelas, se han realizado algunas implementaciones de algoritmos paralelos basados, tanto en la descomposición real de Schur de una matriz, como en los aproximantes diagonales de Padé. • En el caso de la resolución de EDOs y EDMRs, destacan los métodos basados en los subespacios de Krylov y en los aproximantes diagonales de Padé, pues contienen operaciones básicas del tipo matriz-matriz o matriz-vector, y la resolución de sistemas de ecuaciones lineales. En el caso de los métodos BDF existentes y el método de linealización a trozos basado en la Ecuación Conmutante, la paralelización de los códigos no será tan eficiente, por tener que utilizar la descomposición real de Schur de una matriz a la hora de resolver la ecuación matricial de Sylvester. 293 Apéndice A: Conceptos Básicos y Notaciones Apéndice A. Conceptos Básicos y Notaciones Las matrices y vectores que aparecen en esta tesis, se encuentran definidas sobre un cuerpo F , que puede ser el cuerpo de los números complejos C o el cuerpo de los números reales ℜ . Un vector de dimensión n de sobre el cuerpo F se denotará como v = [vi ] ∈ F , n o bien como ⎡ v1 ⎤ ⎢v ⎥ v = ⎢ 2⎥ ∈F ⎢M⎥ ⎢ ⎥ ⎣vn ⎦ Una matriz A de orden mxn sobre un cuerpo F A = [aij ] ∈ F n . se denotará como mxn , o bien ⎡ a11 a12 ⎢a a22 A = ⎢ 21 ⎢ M M ⎢ ⎣am1 am 2 L a1n ⎤ L a2 n ⎥⎥ . O M ⎥ ⎥ L amn ⎦ Con I n se representa a la matriz identidad de orden n , ⎡1 ⎢0 In = ⎢ ⎢M ⎢ ⎣0 Con 0mxn ∈ F mxn 0 L 0⎤ 1 L 0⎥⎥ . M O M⎥ ⎥ 0 L 1⎦ se representa a la matriz nula de dimensión mxn , 0mxn en particular, 0 n ∈ F nxn ⎡0 ⎢0 =⎢ ⎢M ⎢ ⎣0 0 L 0⎤ 0 L 0⎥⎥ ∈F M O M⎥ ⎥ 0 L 0⎦ mxn , representa a la matriz nula de orden n . Una notación muy usada en computación numérica es la notación de los “dos puntos”. Esta notación permite referenciar fácilmente submatrices, y en particular filas o columnas de una matriz, como a continuación se detalla. 295 Apéndice A: Conceptos Básicos y Notaciones Dada una matriz A = [aij ] ∈ F mxn , se denota con A(i1 : i2 , j1 : j2 ) , para 1 ≤ i1 ≤ i2 ≤ m y 1 ≤ j1 ≤ j2 ≤ n , a la submatriz de A que consiste en seleccionar los elementos de A cuyos índices de filas se encuentran entre i1 e i2 , y cuyos índices de columnas se encuentran entre j1 y j2 , es decir, ⎡ ai1 j1 L ai1 j2 ⎤ ⎢ ⎥ A(i1 : i2 , j1 : j2 ) = ⎢ M O M ⎥ . ⎢ai j L ai j ⎥ 2 2 ⎦ ⎣ 21 De este modo, A(1 : m, j ) denota a la columna j-ésima de la matriz A y A(i,1 : n) la fila i-ésima de la matriz A . A continuación se presentan algunos conceptos básicos del algebra matricial que se utilizarán en esta tesis, junto con algunas de sus propiedades. Definición 6.1. Se denomina traza de una matriz A = [aij ] ∈ F nxn ,a traza ( A) = a11 + a22 + L + ann ∈ F . Definición 6.2. A = [aij ] ∈ F nxn es una matriz diagonal si aij = 0 , ∀i ≠ j , para i, j = 1,2,L, n . Definición 6.3. A∈F nxn es diagonal por bloques si es de la forma ⎡ A1 ⎢0 A=⎢ ⎢M ⎢ ⎣0 donde Ai ∈ F ni xni , i = 1,2,L, r , siendo Para expresar que A ∈ F siguientes notaciones: nxn 0 A2 M 0 r ∑n i =1 0⎤ L 0 ⎥⎥ , O M⎥ ⎥ L Ar ⎦ L i = n. es una matriz diagonal por bloques se suelen utilizar las A = diag( A1 , A2 ,L, Ar ) o A = A1 ⊕ A2 ⊕ L ⊕ Ar , indicando que A es la denominada suma directa de las matrices A1 , A2 ,L, Ar . 296 Apéndice A: Conceptos Básicos y Notaciones Definición 6.4. A = [aij ] ∈ F nxn es una matriz triangular superior si aij = 0 , ∀i > j , i, j = 1,2,L, n . Definición 6.5. A = [aij ] ∈ F nxn es una matriz casi triangular superior si tiene la forma ⎡ A11 ⎢0 A=⎢ ⎢ M ⎢ ⎣0 donde Aij ∈ F ni xn j A1r ⎤ L A2 r ⎥⎥ , O M ⎥ ⎥ L Arr ⎦ A12 L A22 M 0 , para i, j = 1,L, r , siendo ni , n j ∈ {1,2} . Definición 6.6. A = [aij ] ∈ F nxn es una matriz triangular inferior si aij = 0 , ∀i < j ; i, j = 1,2,L, n . Si además, aii = 1 , i = 1,2, L , n , se dice que A es triangular inferior unidad. Definición 6.7. A = [aij ] ∈ F nxn es una matriz superior de Hessenberg si aij = 0 , ∀i > j + 1 ; i, j = 1,2,L, n . Definición 6.8. A = [aij ] ∈ F nxn es una matriz inferior de Hessenberg si aij = 0 , ∀j > i + 1 ; i, j = 1,2,L, n . Definición 6.9. Dada una matriz A = [a ij ] ∈ F mxn , se define la matriz traspuesta de A como AT = [bij ] ∈ F nxm , siendo bij = a ji , i = 1,2, L , n , j = 1,2,L, m . Según esto, un vector se puede representar como v = [v1 , v2 ,L, vn ] ∈ F T n , siendo vi ∈ F , i = 1,2,L, n . Definición 6.10. Una matriz A = [aij ] ∈ F nxn se dice que es simétrica si 297 Apéndice A: Conceptos Básicos y Notaciones AT = A . Definición 6.11. Dada una matriz A = [aij ] ∈C mxn , la matriz conjugada de A se define como A = [aij ] ∈C , mxn donde aij , i = 1,2,L, m , j = 1,2,L, n , es el complejo conjugado de aij . Definición 6.12. Dada una matriz A ∈C mxn , se define la matriz conjugada traspuesta de A como A* = A T ∈C mxn . Definición 6.13. Una matriz A ∈C mxn , se dice que es hermítica si A* = A . Definición 6.14. Una matriz A ∈ ℜ nxn se dice ortogonal si A−1 = AT . Definición 6.15. Una matriz A ∈C nxn se dice unitaria si A −1 = A * . Definición 6.16. Se define la matriz de Vandermonde asociada a c1 , c 2 , L , c n −1 , c n ∈ F , como ⎡ 1 ⎢ c ⎢ 1 V =⎢ M ⎢ n−2 ⎢c1 ⎢⎣ c1n −1 1 L c2 L cn −1 M c O M L cnn−−11 c cnn−1 n−2 2 n −1 2 1 1 ⎤ cn ⎥⎥ M ⎥ ∈F n −1 ⎥ cn ⎥ cnn −1 ⎥⎦ nxn . Definición 6.17 ([HoJo99], página 38). Se denomina polinomio característico de A ∈ F mxn , al polinomio n −1 p(λ ) = det(λI n − A) = λn − ∑ ck λk . k =0 Definición 6.18. A cada una de las raíces del polinomio característico de la matriz A ∈ F nxn se le denomina valor propio de A . Si λ es un valor propio de A , entonces existe al menos 298 Apéndice A: Conceptos Básicos y Notaciones un vector no nulo x ∈ F que n , denominado vector propio de A asociado a λ , de manera Ax = λx . Definición 6.19. Dada una matriz A ∈ F valores propios. nxn , se denomina espectro A al conjunto λ ( A) de todos sus Propiedad 6.1 ([BaSa98], página 313). Si A ∈ F nxn , entonces los coeficientes del polinomio característico de A son ck = traza k +1 ( A) , k = 1,L, n − 1 , c0 = det( A), siendo traza k +1 ( A) la suma de todos los menores principal de orden k + 1 de A que contienen en su diagonal principal k + 1 elementos de la diagonal principal de A . Definición 6.20. Se dice que la matriz B ∈ F nxn es semejante a la matriz A ∈ F no singular X ∈ F nxn de manera que nxn , si existe una matriz B = XAX −1 . Definición 6.21. Se dice que una función f (x) es analítica en un abierto U del cuerpo F , si se puede expresar en la forma ∞ f ( x) = ∑ ck x k , x ∈ U , k =0 siendo ck ∈ F , k ≥ 0 . Teorema 6.1 (descomposición canónica de Jordan). Si A ∈ F ( 6.1 ) nxn , entonces existe una matriz no singular X ∈ F nxn de manera que X −1 AX = diag( J λ1 , J λ2 ,L, J λr ) , donde J λi denota al i-ésimo bloque de Jordan de A, ⎡ λi ⎢0 ⎢ J λi = ⎢ M ⎢ ⎢0 ⎢⎣ 0 1 λi M 0 0 0⎤ O 0 0 ⎥⎥ O O M ⎥ ∈F ⎥ L λi 1 ⎥ L 0 λi ⎥⎦ L i = 1,2,L, r , 0 r ∑n i =1 i ni xni , = n. 299 Apéndice A: Conceptos Básicos y Notaciones La matriz diag( J λ1 , J λ2 , L , J λr ) se denomina forma canónica de Jordan de la matriz A . Definición 6.22. Una matriz A ∈ F nxn es derogatoria si existe un valor propio λ de A , que aparece, al menos, en dos bloques distintos de la forma canónica de Jordan de A. Definición 6.23. Sean A ∈ F nxn y n −1 p(λ ) = λn − ∑ ck λk , k =0 su polinomio característico. Se define la matriz compañera asociada a p(λ ) , como ⎡0 ⎢0 ⎢ B=⎢M ⎢ ⎢0 ⎢⎣c0 1 L 0 0 O 0 M O O 0 L 0 c1 L cn − 2 0 ⎤ 0 ⎥⎥ M ⎥ ∈C ⎥ 1 ⎥ cn −1 ⎥⎦ nxn . Si n es elevado, entonces la matriz B es dispersa pues tiene un porcentaje alto de elementos nulos Propiedad 6.2 Dadas las matrices A y B de la Definición 6.23, entonces A y B tienen el mismo polinomio característico. Propiedad 6.3 Sean A y B las matrices de la Definición 6.23. Si V es la matriz de Vandermonde correspondiente a los valores propios de B , entonces V −1BV está en la forma de Jordan. Propiedad 6.4 Sean A y B las matrices de la Definición 6.23. Si A no es derogatoria, entonces A es semejante a una matriz compañera; en caso contrario, A es semejante a una suma directa de matrices compañeras. Definición 6.24 Se dice que la matriz ⎡M M = ⎢ 11 ⎣ M 21 M 12 ⎤ ∈ ℜ 2 nx 2 n , ⎥ M 22 ⎦ M 11 , M 12 , M 21 , M 22 ∈ ℜ nxn , es Hamiltoniana si cumple que J −1 M T J = − M , 300 Apéndice A: Conceptos Básicos y Notaciones siendo ⎡0 J =⎢ n ⎣− I n In ⎤ . 0 n ⎥⎦ Definición 6.25 Se dice que la matriz ⎡M M = ⎢ 11 ⎣ M 21 M 12 ⎤ ∈ ℜ 2 nx 2 n , M 22 ⎥⎦ M 11 , M 12 , M 21 , M 22 ∈ ℜ nxn , es simpléctica si cumple que J −1 M T J = M −1 , siendo In ⎞ ⎟. 0 n ⎟⎠ ⎛ 0 J = ⎜⎜ n ⎝− In Definición 6.26. Se define la función diag : F n de manera que dado v = [v1 , v2 , L , vn ] ∈ F T ⎯ ⎯→ F n nxn , , entonces ⎡v1 0 ⎢0 v 2 diag(v) = ⎢ ⎢M M ⎢ ⎣0 0 0⎤ L 0 ⎥⎥ . O M⎥ ⎥ L vn ⎦ L Teorema 6.2 (Descomposición LU sin pivotamiento). Si la matriz A = [aij ] ∈ F nxn verifica que det( A(1 : i,1 : i)) ≠ 0 , i = 1,2, L , n , entonces existe una matriz triangular inferior unidad L ∈ F U ∈ F nxn de manera que nxn y una matriz triangular superior A = LU , siendo esta descomposición única. Definición 6.27. Se dice que P ∈ ℜ nxn es una matriz permutación, si cada columna (o fila) de P , contiene un solo elemento igual a 1, siendo el resto de los elementos de dicha fila (o columna) iguales a 0. Esto es, si (α1 , α 2 , L , α n ) es una permutación de (1,2, L , n) , entonces P = [eαT1 , eαT2 , L , eαTn ] , 301 Apéndice A: Conceptos Básicos y Notaciones siendo eαT i , i = 1,2, L , n , la columna de índice α i de la matriz identidad I n . Teorema 6.3 (Descomposición LU con pivotamiento parcial de filas). Si la matriz A ∈ F nxn es invertible, entonces existe una matriz de permutación P ∈ ℜ nxn , una matriz triangular inferior unidad L ∈ F nxn y una matriz triangular superior U ∈ F nxn , de manera que PA = LU , siendo esta descomposición única. Teorema 6.4 (Descomposición QR). Dada una matriz A ∈C nxn , existe una matriz unitaria Q ∈C superior R ∈C nxn , de manera que nxn y una matriz triangular A = QR . Si además A es no singular, entonces R puede elegirse de manera que todos sus elementos diagonales sean positivos y, por tanto, dicha descomposición será única. Teorema 6.5 (Descomposición real QR). Dada una matriz A ∈ ℜ nxn , existe una matriz ortogonal Q ∈ ℜ nxn y una matriz triangular superior R ∈ ℜ nxn , de manera que A = QR . Si además A es no singular, entonces R puede elegirse de manera que todos sus elementos diagonales sean positivos y, por tanto, dicha descomposición será única. Teorema 6.6 (Descomposición de Schur). Dada una matriz A ∈C nxn , existe una matriz unitaria Q ∈C nxn y una matriz triangular superior T ∈C nxn , denominada forma de Schur de A , de manera que A = QTQ * , donde los elementos de la diagonal de la matriz T coinciden con los valores propios de la matriz A . Teorema 6.7 (Descomposición real de Schur de una matriz). Dada una matriz A ∈ ℜ nxn , existe una matriz ortogonal Q ∈ ℜ nxn y una matriz casi triangular superior S ∈ ℜ nxn , denominada forma real de Schur de A , de manera que ( 6.2 ) ⎡ S11 ⎢0 A = QSQ T = Q ⎢ ⎢ M ⎢ ⎣0 S12 L S1m ⎤ S 22 L S 2 m ⎥⎥ T Q , M O M ⎥ ⎥ 0 L S mm ⎦ 302 Apéndice A: Conceptos Básicos y Notaciones donde cada bloque diagonal S ii , para i = 1,2, L , m , es de orden 1x1 ó 2x 2 . Los bloques diagonales de orden 1x1 corresponden a valores propios reales de A y los de orden 2x 2 a un par de valores propios complejos conjugados de A . Teorema 6.8 (Descomposición en Valores Singulares). Si A ∈ ℜ mxn , entonces existen dos matrices ortogonales U ∈ ℜ mxm y V ∈ ℜ nxn de manera que U T AV = diag(σ 1 , σ 2 , L , σ p ) ∈ ℜ pxp , p = min(m, n) , siendo σ 1 ≥ σ 2 ≥ L ≥ σ p ≥ 0 los llamados valores singulares de la matriz A . Como consecuencia de este teorema, se define la Descomposición en Valores Singulares (DVS) de la matriz A , como A = UΣV T , siendo Σ = diag(σ 1 , σ 2 , L , σ p ) ∈ ℜ pxp . Definición 6.28. Dadas las matrices A = [aij ] ∈ F mxn y B = [bij ] ∈ F pxq , se define la matriz producto de Kronecker de A por B como ⎡ a11B a12 B ⎢a B a B 22 A ⊗ B = ⎢ 21 ⎢ M M ⎢ ⎣am1B am 2 B L a1n B ⎤ L a2 n B ⎥⎥ ∈F O M ⎥ ⎥ L amn B ⎦ mpxnq . Propiedad 6.5. Si A ∈ F mxn y B, C ∈ F pxq , entonces A ⊗ (B + C) = A ⊗ B + A ⊗ C . Propiedad 6.6. Si A, B ∈ F mxn y C, D ∈ F pxq , entonces ( A ⊗ B)(C ⊗ D) = AC ⊗ BD . Definición 6.29. Una norma vectorial en F n es una función F n ⎯⎯→ ℜ , que verifica las siguientes propiedades: 1. || x ||≥ 0, ∀x ∈ F n , 2. || x ||= 0 si y solo si x es el vector nulo, 303 Apéndice A: Conceptos Básicos y Notaciones 3. || αx ||=| α | || x || , ∀α ∈ F , ∀x ∈ F 4. || x + y ||≤|| x || + || y || , ∀x, y ∈ F n n , . Definición 6.30. Dado un entero positivo p , se define la p-norma vectorial en F n como || x || p = p | x1 | p + | x2 | p + L + | xn | p , siendo x = [ x1 , x2 , L , xn ]T ∈ F n . En particular, se define la ∞-norma como || x ||∞ = lim p | x1 | p + | x2 | p + L + | xn | p = max (| xi |) . p →∞ 1≤i ≤ n Definición 6.31. Una norma matricial en F mxn es una función F nxn ⎯⎯→ ℜ , que verifica las siguientes propiedades: 1. || A ||≥ 0 , ∀A ∈ F mxn . 2. || A ||= 0 si y solo si A = 0 mxn . 3. || αA ||=| α | || A || , ∀α ∈ F , ∀A ∈ F 4. || A + B ||≤|| A || + || B || , ∀A, B ∈ F mxn mxn . . Definición 6.32. Se define la norma matricial subordinada || || M a la norma vectorial || ||v , como || A || M = max(|| Ax ||v ) , A ∈ F mxn || x||v =1 siendo x ∈ F n , . Definición 6.33. Dado un entero positivo p , se define la p-norma matricial sobre F || A || p = max(|| Ax || p ) , A ∈ F mxn || x|| p =1 siendo x ∈ F n mxn como , . Definición 6.34. Se define la norma de Frobenius de una matriz A = [aij ] ∈ F || A || F = m n ∑∑ | a i =1 j =1 ij mxn como |2 . 304 Apéndice A: Conceptos Básicos y Notaciones Definición 6.35. Se denomina número de condición de una matriz invertible A ∈ F norma matricial subordinada || || , al número real nxn relativo a la cond || || ( A) =|| A || || A −1 || . En particular, con cond p ( A) se designa al número de condición de la matriz A asociado a la p-norma matricial. Definición 6.36. Se define la función vec , vec : F mxn ⎯ ⎯→ F como la aplicación que a una matriz A = [aij ] ∈ F mn mxn , , le asocia como imagen el vector vec( A) ∈ F mn que se obtiene colocando las columnas de A una a continuación de otra en el orden natural, es decir, vec( A) = [a11 , a21 , L , am1 , a12 , a22 , L, am 2 , L , a1n , a2 n , L, amn ]T . Propiedad 6.7 Si A, B ∈ F mxn , entonces vec( A + B) = vec( A) + vec( B) . Propiedad 6.8 Si A ∈ F mxn , B∈F nxp y C ∈F pxq , entonces vec( ABC ) = (C T ⊗ A) vec( B) . Definición 6.37. Dados dos enteros positivos m y n , se define la función mat mxn , mat mn : F mn ⎯ ⎯→ F mxn , como la aplicación que a un vector de tamaño mn v = [v1 , v2 , L, vm , vm+1 , vm+ 2 , L, v2 m , L , vmn−m+1 , vmn−m+ 2 , L , vmn ]T ∈ F mn , le asocia como imagen la matriz mxn que se obtiene colocando las componentes de v, una a continuación de otra en el orden natural, en columnas de tamaño m, es decir, ⎡ v1 ⎢v mat mxn (v) = ⎢ 2 ⎢M ⎢ ⎣v m vm+1 L vmn−n−1 ⎤ vm + 2 vmn−n ⎥⎥ ∈ ℜ mxn . ⎥ O ⎥ v2 m vmn ⎦ 305 Apéndice A: Conceptos Básicos y Notaciones Definición 6.38. Un flop es el tiempo necesario para realizar una operación aritmética (suma, resta, producto o división) en coma flotante. 306 Apéndice B: Rutinas Auxiliares Apéndice B. MATLAB MATLAB (MAThematical LABoratory) es un entorno de programación que permite realizar cálculos científicos y de ingeniería basados en vectores y matrices. Se puede trabajar con él de forma interactiva o utilizando un intérprete de un lenguaje propio que lleva incorporado. Se distingue de otros lenguajes, como FORTRAN o C, porque opera en un nivel superior, pues permite realizar operaciones básicas entre vectores y matrices, incorporando además un gran número de funciones cuyos argumentos son vectores y matrices. Por otra parte, MATLAB dispone de numerosas herramientas de desarrollo y depuración de código que lo hacen muy útil en el desarrollo de algoritmos. En la actualidad MATLAB se ha convertido en el estándar de desarrollo de algoritmos en computación numérica. Trefethen llega a afirmar en la introducción de [Tref00] que “con MATLAB ha nacido una nueva era en la computación científica porque puede hacer una cantidad astronómica de cálculos con muy pocas líneas de programa y en unos pocos segundo de tiempo”. Charles F. Van Loan en [VanL00] afirma que “MATLAB ha cambiado la forma de calcular e investigar en las ciencias de la computación”. J. Higham, inminente investigador de funciones matrices, ha utilizado extensamente este software en todos sus trabajos, habiendo publicado recientemente un libro sobre MATLAB ([HiHi00]). MATLAB se ha convertido en una poderosa herramienta para investigar y resolver problemas prácticos sobre todo con el desarrollo de las Toolbox. Las Toolbox contienen funciones de MATLAB que resuelven problemas aplicados a diferentes áreas. Resolución de EDOs MATLAB es capaz de calcular la evolución en el tiempo de la solución de EDOs lineales y no lineales con valores iniciales ( 6.3 ) x' (t ) = f (t , x(t )) , t 0 ≤ t ≤ t f , x(t 0 ) = x0 , siendo x(t ) ∈ ℜ n y f (t , x) una función vectorial. La sintaxis básica de las funciones que resuelven EDOs en MATLAB es la siguiente: [t , Y ] = solvername(' F ' , tspan, y0 ) . • solvername : nombre de la función de MATLAB que resuelve la EDO. • F : nombre del fichero que contiene la definición de la función f ( x, t ) . • tspan : vector que indica los instantes en los que se va a evaluar la función. Si contiene sólo dos números, éstos representan el comienzo y el final del intervalo de integración. Si contiene más de dos elementos, indica en qué instantes se quiere obtener la solución, • y0 : vector columna con el valor inicial. 307 Apéndice B: Rutinas Auxiliares • Y : matriz con tantas filas como tiempos de salida y tantas columnas como dimensión del vector y 0 . • t : vector que contiene los instantes en los que se obtiene la solución. En la siguiente tabla se muestran las funciones que resuelven EDOs en MATLAB. Función Tipo de problema Método utilizado ode45 no rígido Runge-Kutta de orden 4 y 5 ode23 no rígido Runge-Kutta de orden 2 y 3 ode113 no rígido Métodos lineales multipaso de órdenes 1 a 13 ode15s rígido BDF de órdenes 1 a 5 ode23s rígido Rosembrock modificados de orden 2 y 3 ode23t poco rígido Regla de los trapecios ode23tb rígido Tabla 6.1: Runge-Kutta implícito de orden 2 y 3 Funciones de MATLAB para la resolución de EDOs. MATLAB permite utilizar una sintaxis más completa para la resolución de EDOs: [t , Y , s ] = solvername(' F ' , tspan, y0 , options ) . • s : vector que contiene ciertos resultados estadísticos de la integración. • options : estructura definida por la función odeset, que permite definir ciertas características del método utilizado en la función. La sintaxis de odeset es options = odeset (' param1 ' , val1 , ' param2 ' , val2 , L) o bien options = odeset (oldopt , ' param1 ' , val1 , ' param2 ' , val2 , L) . Entre los parámetros más importantes de esta función se encuentran los siguientes: • Tratamiento del error: RelTol , AbsTol . El test de error está acotado por err (i ) ≤ max( AbsTol , RelTol | x(i ) |) . • Para el paso: InitialStep , MaxStep . • Matriz Jacobiana: Jacobian , JConstant , JPattern , Vectorized . • Especificación de la salida: OutputFcn , OutputSel , Refine , Stats . Funciones de Matrices MATLAB posee numerosas funciones de matrices, las cuales se detallan a continuación: 308 Apéndice B: Rutinas Auxiliares • Función exponencial. B = expm(A) calcula B = e A . Esta función utiliza la aproximación de Padé con escalado y potenciación. • Función logaritmo. B = logm(A) calcula el logaritmo principal de la matriz A , utilizando para ello el Algoritmo 2.2. Si la matriz A es singular o tiene algún valor propio en el semieje real negativo, entonces B no se puede calcular, devolviendo logm un mensaje de error. La función logm también admite la sintaxis [B, exitflag] = logm(A), devolviendo, además del logaritmo principal en caso de existir, el entero exitflag que describe la condición de salida de logm: • • Si exitflag = 0, el logaritmo principal se ha podido calcular. • Si exitflag = 1, alguna evaluación de la serie de Taylor, utilizada en el cálculo de Fii = f (Tii ) mediante el Algoritmo 2.2, no converge. Incluso en este caso, el valor devuelto puede ser exacto. Función raíz cuadrada. B = sqrtm(A) calcula la raíz cuadrada principal de la matriz A . Si A tiene algún valor propio con parte real negativa entonces la matriz devuelta en B es compleja. Si A es singular entonces A no puede tener una raíz cuadrada, mostrando sqrtm un mensaje de error. La función sqrtm también admite otras sintaxis. • [ X , r ] = sqrtm( A) . En este caso no se muestran mensajes de error, devolviendo en r el valor del residuo || A − X 2 || F . || A || F • [ X ,α , c] = sqrtm( A) . En este caso en α se devuelve un factor de estabilidad y en c una estimación del número de condición asociado a la raíz cuadrada X . El residuo está acotado aproximadamente por n α ε y el error relativo cometido al calcular la raíz cuadrada está acotado aproximadamente por ncε , siendo n la dimensión de la matriz A y ε el redondeo unidad ([GoVa96], página 61). Si X es real, simétrica y definida positiva, o compleja, hermítica y definida positiva, entonces también es posible calcular su raíz cuadrada. • Funciones en general. funm(A,fun) calcula f ( A) para una función dada en el argumento fun. La implementación de esta función está basada en el Algoritmo 2.2. Esta función debe admitir un desarrollo en serie de Taylor con un radio de convergencia infinito, excepto para fun = @log, la cuál es tratada de forma especial. Los posibles valores de fun son 309 Apéndice B: Rutinas Auxiliares @exp, @log, @sin, @cos, @sinh y @cosh. Admite además otras sintaxis que permiten controlar ciertos parámetros para el cálculo de la función matricial. 310 Apéndice C: BLAS y LAPACK Apéndice C. BLAS y LAPACK La clave para utilizar eficientemente ordenadores de altas prestaciones es evitar referencias innecesarias a memoria. En la mayoría de los ordenadores, los datos fluyen desde memoria a registros de la máquina o viceversa. Este flujo de datos puede ser más costoso que las operaciones aritméticas entre los datos. Por lo tanto, las prestaciones de los algoritmos pueden estar determinadas por la cantidad de tráfico hacia memoria más que por el número de operaciones en coma flotante realizadas. Este coste motiva la reestructuración de los algoritmos existentes en base a diseñar otros nuevos que minimicen dicho movimiento. Una forma de conseguir eficiencia en la solución de problemas del álgebra lineal es utilizar BLAS (Basic Linear Algebra Subroutines). En 1973, Hanson, Krogh y Lawson describieron las ventajas de utilizar un conjunto de rutinas básicas para problemas del álgebra lineal. El BLAS ha tenido mucho éxito en este sentido y se ha utilizado en una gran diversidad de software numérico y muchos de los algoritmos publicados por ACM Transactions on Mathematical Software. Las rutinas del BLAS ayudan a la claridad, portabilidad, modularidad y mantenimiento del software, y, además, se ha convertido en un estándar en lo referente a operaciones vectoriales y matriciales. El deseo de obtener software numérico que pueda ser utilizado por una gran variedad de sistemas informáticos ha culminado en la disponibilidad comercial de una variedad de librerías (por ejemplo, NAG e IMSL) y también de software de dominio público (por ejemplo, LINPACK, EISPACK, NETLIB). Un intento de obtener un software numérico que fuera portable en sistemas MIMD (Multiple Instruction Multiple Data) fue la creación del LAPACK. El desarrollo del LAPACK ha sido un paso natural después de que las especificaciones de los niveles BLAS 2 y BLAS 3 fueran diseñadas entre 198486 y 1987-88. La investigación de algoritmos numéricos paralelos continuó varios años, haciendo posible la construcción de un nuevo paquete de software que sustituyese al LINPACK y EISPACK, permitiendo una mayor eficiencia en el uso de las nuevas computadoras de altas prestaciones. La propuesta inicial del LAPACK fue especificada, aunque todavía el BLAS 3 se estaba desarrollando, en un proyecto financiado por la National Science Foundation (USA). El LAPACK, escrito en FORTRAN 77 estándar para datos en simple y en doble precisión de números reales y complejos, implementa un gran número de algoritmos que resuelven problemas típicos del álgebra lineal entre los que se encuentran: la resolución de sistemas lineales de ecuaciones, las descomposiciones matriciales (LU, Cholesky, QR), el cálculo de valores propios y singulares de una matriz, etc. Las matrices utilizadas en dichos algoritmos se subdividen en bloques de tamaño adecuado y se utilizan rutinas del BLAS para la realización de operaciones básicas entre ellos. Para obtener una alta eficiencia en la ejecución de las rutinas del LAPACK sobre máquinas paralelas, ya sea sobre procesadores vectoriales o multiprocesadores con o sin registros vectoriales, es necesario disponer de una versión optimizada del BLAS que permita el uso eficaz del hardware. Por lo tanto, el paralelismo en la ejecución de dichas rutinas se encuentra en las llamadas al BLAS, estando oculto este paralelismo a los ojos del usuario. 311 Apéndice C: BLAS y LAPACK Inicialmente las rutinas del LAPACK se diseñaron específicamente para que se ejecutaran eficientemente sobre multiprocesadores con memoria compartida. Por ello, se basan en algoritmos orientados a bloques, es decir, las matrices se dividen en bloques, y las operaciones básicas que aparecen en los algoritmos son productos y actualizaciones de matrices y vectores. Estas operaciones utilizan llamadas al BLAS 2 (operaciones del tipo matriz-vector) o al BLAS 3 (operaciones del tipo matriz-matriz). El uso de tamaños adecuados de bloques es fundamental para el rendimiento de las rutinas. Estos tamaños dependen, fundamentalmente, de la máquina sobre la que se utilizan. En www.netlib.org/lapack/ se puede encontrar el manual completo de LAPACK en formato html, los códigos fuentes de BLAS y LAPACK, algunas librerías compiladas para varias arquitecturas y sistemas operativos, etc. Una forma sistemática de obtener software de altas prestaciones consiste en implementar los algoritmos, expresados por ejemplo en MATLAB, en un lenguaje de alto nivel, utilizando núcleos computacionales de altas prestaciones como BLAS y LAPACK. Si se dispone de librerías optimizadas para una determinada arquitectura de BLAS y LAPACK se obtiene un software eficiente y de altas prestaciones. Además, se posibilita el posterior desarrollo de implementaciones paralelas utilizando, por ejemplo, la librería SCALAPACK ([ScLA97]) con la consiguiente ganancia en velocidad. BLAS Convenciones en el BLAS Los nombres de las rutinas del BLAS tienen la forma xyyzz. La primera letra del nombre (x) indica el tipo de dato utilizado y su precisión: S: real en simple precisión. D: real en doble precisión. C: complejo en simple precisión. Z: complejo en doble precisión. En BLAS 2 y BLAS 3, las dos siguientes letras (yy) indican el tipo de matriz utilizada y las dos últimas el problema que resuelven; así por ejemplo, MM indica producto de dos matrices, MV producto de matriz por un vector, SM resolución de un sistema lineal triangular múltiple, SV resolución de un sistema lineal triangular, etc. El BLAS 1 suele tener una notación propia para todas las letras (salvo la primera). GE: general GB: general banda SY: simétrica SB: simétrica banda SP: simétrica empaquetada HE: hermitiana HB: hermitiana banda HP: hermitiana empaquetada TR: triangular Tabla 6.2: TB: triangular banda TP: triangular empaquetada Valores de yy en los nombres de las rutinas del BLAS2 y del BLAS3. 312 Apéndice C: BLAS y LAPACK Estructura del BLAS BLAS 1. El conjunto de rutinas de este nivel resuelven problemas básicos de complejidad lineal como, por ejemplo, las operaciones el producto escalar de vectores, la actualización de un vector a partir de otro, generación de rotaciones, cálculo de normas vectoriales, etc. Las principales subrutinas y funciones son: _AXPY : y = αx + y , _SCAL : x = αx , _SWAP : intercambia x e y , _COPY : y = x, _DOT : realiza el producto escalar x T y , _NRM2 : calcula la 2-norma de x , _ROT : genera una rotación en el plano, donde x e y son vectores y α un escalar. BLAS 2. Versiones especiales del BLAS 1, en algunos casos versiones en código máquina, se han implementado sobre un gran número de máquinas, por lo que se ha mejorado la eficiencia del BLAS 1. Sin embargo, en algunas arquitecturas modernas, el uso del BLAS 1 no es el mejor camino para mejorar la eficiencia de códigos de alto nivel. Por ejemplo, en máquinas vectoriales se necesita optimizar operaciones del tipo matrizvector para aprovechar la potencial eficiencia de la máquina, sin embargo, el uso del BLAS 1 inhibe esta optimización, puesto que el BLAS 1 oculta al compilador la naturaleza de estas operaciones. Para resolver esta problemática se diseñó el BLAS 2, el cual implementa un conjunto reducido de operaciones matriz-vector que aparecen muy a menudo en la implementación de muchos algoritmos del álgebra lineal. Las operaciones que implementan estas subrutinas tienen un coste cuadrático. Los tres siguientes tipos de operaciones básicas son implementados en este nivel: • • • Operaciones del tipo matriz-vector. • _GEMV : y = αop( A) x + β y . • _TRMV : x = op( A) x ( A triangular). Actualizaciones de rango uno o rango dos. • _GER : A = αxy T + A . • _SYR2 : A = αxy T + αyx T + A ( A simétrica). Resolución de sistemas de ecuaciones lineales triangulares. • _TRSV : x = op( A −1 ) x ( A triangular). 313 Apéndice C: BLAS y LAPACK En las expresiones anteriores A es una matriz, x e y vectores, α y β escalares y op( X ) = X , X T , X * . BLAS 3. Muchos algoritmos pueden codificarse de manera que la mayor parte del cálculo vectorial o matricial se realice mediante llamadas al BLAS 2. Cuando se trabaja con máquinas vectoriales es aconsejable utilizar longitudes de vectores tan grandes, como sea posible, y así los resultados son calculados sobre un vector (fila o columna) de una sola vez, de manera que las prestaciones aumentan al reutilizar los registros vectoriales en lugar de devolver sus valores a memoria. Desafortunadamente la aproximación anterior no es apropiada en los ordenadores con una jerarquía de memorias o en ordenadores con procesamiento en paralelo. Para estas arquitecturas es preferible dividir la matriz o matrices en bloques y realizar las operaciones de tipo matriz-matriz sobre bloques. Organizando los cálculos de este modo, se posibilita la completa reutilización de los datos de aquellos bloques que se encuentran en la memoria caché. Esta aproximación evita el excesivo movimiento de datos desde y hacia la memoria. Sobre arquitecturas que permiten el procesamiento en paralelo, el paralelismo se puede explotar de dos formas: (1) las operaciones sobre diferentes bloques puede realizarse en paralelo (concurrencia), y (2) las operaciones vectoriales y escalares en cada bloque pueden realizarse sobre los registros vectoriales (vectorización). El BLAS 3 se diseñó con el objeto de llevar a cabo operaciones matriz-matriz y así diseñar algoritmos por bloques que permitiesen la realización de un número mayor de operaciones sobre las memoria caché. Las rutinas se han desarrollado de forma similar a la realizada en los niveles 1 y 2 del BLAS, reemplazando los vectores x e y por matrices A , B y C . La ventaja de diseñar el software de manera consistente con el nivel 2 del BLAS es que es más fácil recordar las secuencias de llamadas y las convenciones en los parámetros. Las principales subrutinas de BLAS 3 son las siguientes: • • • Producto matriz-matriz. • _GEMM: C = αop( A)op( B ) + β C . • _TRMM: C = αop( A) B + βC , C = αop( A) B ( A triangular). Actualizaciones de rango k de una matriz simétrica. • _SYRK: C = αAA T + βC , C = αAT A + β C ( C simétrica). • _SYRK2: C = αAB T + αBA T + βC ( C simétrica). Resolución de múltiples sistemas lineales triangulares de ecuaciones. • _ TRSM : B = αop ( A −1 ) B, B = Bop( A −1 ) ( A triangular). En las expresiones anteriores A , B y C son matrices, α y β escalares y op( X ) = X , X T , X * . 314 Apéndice C: BLAS y LAPACK LAPACK Estructura del LAPACK Las rutinas del LAPACK se clasifican en: • Rutinas driver: Estas rutinas resuelven un problema completo, por ejemplo, la resolución de un sistema lineal de ecuaciones o el cálculo de los valores propios de una matriz real simétrica. • Rutinas computacionales: Estas rutinas resuelven diferentes tareas computacionales, por ejemplo, la factorización LU, la reducción de una matriz simétrica a la forma tridiagonal, etc. Cada rutina driver llama a una secuencia de rutinas computacionales para realizar su función. • Rutinas auxiliares. Estas rutinas se clasifican como sigue: • Rutinas que realizan subtareas de algoritmos orientados a bloques, en particular, rutinas que implementan versiones de algoritmos no orientadas a bloques. • Rutinas que realizan algunos cálculos computacionales muy comunes de bajo nivel, por ejemplo, el escalado de una matriz, el cálculo de normas matriciales, la generación de matrices elementales de Householder, etc. Algunas de estas rutinas pueden tener interés para los analistas numéricos o desarrolladores del software, y pueden considerarse como futuras ampliaciones del BLAS. • Rutinas que amplían al BLAS como, por ejemplo, rutinas que realizan rotaciones en el plano complejo u operaciones del tipo matriz-vector que involucran matrices complejas simétricas (no existen rutinas en el BLAS que realicen estas funciones). El LAPACK dispone de rutinas que trabajan con datos en simple y en doble precisión de números reales y complejos. En la mayoría de los casos hay rutinas semejantes para los diferentes tipos de datos, pero existen algunas excepciones. Por ejemplo, para la resolución de sistemas lineales de ecuaciones indefinidos y simétricos, existen rutinas que resuelven sistemas simétricos complejos y hermíticos complejos, puesto que ambos tipos de sistemas complejos aparecen en aplicaciones prácticas. Sin embargo, no hay un caso complejo análogo al de la rutina que calcula los valores propios de una matriz tridiagonal simétrica, puesto que toda matriz hermitiana compleja se puede reducir a una matriz real tridiagonal simétrica. Las rutinas que realizan la misma función para datos reales y complejos, siempre que esto sea posible, han sido codificadas para mantener una correspondencia cercana entre ellas. Sin embargo, en algunas áreas, especialmente en problemas de valores propios no simétricos, la correspondencia es necesariamente más lejana. Las versiones en doble precisión se han generado automáticamente, utilizando el Toolpack/1 (véase [Poll89]). Las rutinas de doble precisión para matrices complejas requieren el tipo de datos no estándar COMPLEX*16, el cual se encuentra disponible para la mayoría de máquinas. Los nombres de las rutinas driver y computacionales tienen la forma xyyzzz, siendo el sexto carácter un blanco para ciertas rutinas driver. Las tres primeras letras tienen el mismo significado que el utilizado en la denominación de las rutinas del BLAS 2 y del BLAS 3; la primera letra (x) para indicar el tipo de dato y las dos siguientes (yy) para indicar el tipo de matriz, apareciendo otros tipos de matrices, además de los que 315 Apéndice C: BLAS y LAPACK aparecen en la Tabla 6.2 (véase [ABBD92], página 9). Las siguientes tres letras (zzz) indican la función o algoritmo que implementan. Por ejemplo, con xyySVX se referencian a todas las rutinas driver “expertas“ para la resolución de sistemas lineales de ecuaciones, y con xyySV a todas las rutinas driver “simples” que resuelven sistemas lineales de ecuaciones. Los nombres de rutinas auxiliares siguen un esquema similar excepto que las letras yy son normalmente LA. Hay dos tipos de excepciones a esta regla. Las rutinas que implementan versiones no orientadas a bloques de un algoritmo orientado a bloques, tienen nombres similares a las rutinas que implementan los algoritmos orientados a bloques, con el sexto carácter igual a 2. Por ejemplo, la rutina SGETF2 es una versión no orientada a bloques de la rutina SGETRF (esta rutina calcula la descomposición LU con pivotamiento parcial de filas de una matriz). La otra excepción la presentan ciertas rutinas que pueden ser vistas como extensiones del BLAS utilizando, en este caso, un esquema similar al usado en las rutinas del BLAS. A continuación se detallan los problemas resueltos por algunas de las rutinas del LAPACK. Rutinas driver. • Resolución de múltiples sistemas lineales de ecuaciones. • Resolución del problema lineal de mínimos cuadrados. • Obtención de los valores propios (factorización de Schur) y singulares (descomposición en valores singulares) de una matriz. • Obtención de los valores propios generalizados de una matriz. Rutinas computacionales: • Resolución de un sistema lineal de ecuaciones. • Factorizaciones ortogonales de una matriz: QR, RQ, LQ y QL. • Resolución de problemas parciales relacionados con el cálculo de valores propios y singulares: equilibrado de una matriz, cálculo de números de condición y subespacios invariantes de una matriz, etc. Tratamiento de Errores en el LAPACK Además de proporcionar rutinas más rápidas que las que se tenían anteriormente, el LAPACK añade, al software de computación numérica anterior, unas cotas de error más precisas y comprensibles. Las cotas de error tradicionales están basadas en el hecho de que los algoritmos en el LAPACK, al igual que los de sus predecesores LINPACK y EISPACK, son estables “hacia atrás”. Las cotas de error dadas por algunas rutinas del LAPACK dependen de algoritmos que satisfacen una condición más fuerte de estabilidad, llamada estabilidad hacia atrás relativa a las componentes. La rutina del LAPACK _LAMCH permite calcular toda una serie de parámetros característicos de la máquina sobre la que se implementa el LAPACK. A continuación se presenta un análisis de errores estándar para la evaluación de una función escalar y = f (z ) . Sea alg(z ) la salida de una rutina que implementa a f (z ) , 316 Apéndice C: BLAS y LAPACK incluyendo los errores de redondeo. Si alg( z ) = f ( z + δ ) , con δ pequeño, entonces se dice que alg es un algoritmo estable hacia atrás para f (z ) o que el error hacia atrás δ es pequeño. En otras palabras, alg(z ) es el valor exacto de f (z ) para una entrada ligeramente perturbada z + δ (algunas veces los algoritmos satisfacen únicamente alg( z ) = f ( z + δ ) + ν , donde δ y ν son pequeños, aunque esto no cambia significativamente el análisis de error). Si se supone que f ( z ) es derivable, entonces se puede realizar la aproximación f ( z + δ ) ≈ f ( z ) + f ′( z )δ , por lo que se puede estimar el error cometido a partir de la expresión alg( z ) − f ( z ) = f ( z + δ ) − f ( z ) ≈ f ′( z )δ . Por lo tanto, si δ es pequeño y la derivada f ' ( z ) no es elevada, entonces el error alg( z ) − f ( z ) será pequeño. En general, solo es necesario que se cumpla la condición de Lipschitz, para utilizar la constante de Lipschitz en lugar de f ' ( z ) en la obtención de la cota del error. El error relativo cometido será alg( z ) − f ( z ) f ′( z ) z δ ≤ ≡ κ ( f , z) | δ / z | , f ( z) f ( z) z donde κ ( f , z ) es el número de condición de f (z ) y | δ / z | el error relativo regresivo de z . Por lo tanto, se puede obtener una cota del error multiplicando el número de condición por el error regresivo. El problema está mal condicionado si su número de condición es grande, y mal formulado si su número de condición es infinito (o no existe). Si f (z ) es una función vectorial, entonces f ' ( z ) es la matriz Jacobiana, de manera que los valores absolutos anteriores se sustituyen por p-normas vectoriales y matriciales. En este caso, se puede hablar de estabilidad regresiva. Por ejemplo, un método estable para resolver sistemas de ecuaciones lineales Ax = b , permite obtener una solución x' que satisface ( A + E ) x' = b + f siendo || E ||∞ || A ||∞ y || f ||∞ || b ||∞ valores cercanos a la precisión de la máquina ε . La mayor parte de los algoritmos en el LAPACK son estables en el sentido descrito: cuando se aplican sobre una matriz A , producen resultados exactos para una matriz ligeramente perturbada A + E , donde el cociente 317 Apéndice C: BLAS y LAPACK || E ||∞ || A ||∞ está cercano a ε . Hay algunas matizaciones a esta afirmación. Cuando se calcula la inversa de una matriz, la matriz de error regresivo E es pequeña considerando que las columnas de la matriz inversa se calculan una a una, con una E diferente para cada columna. Esto mismo es cierto en el cálculo de vectores propios de una matriz no simétrica. Cuando se calculan los valores y vectores propios de A − λB , AB − λI , con A simétrica y B simétrica y definida positiva (utilizando las rutinas xSYGV o xHEGV), entonces el método puede no ser estable hacia atrás, si B tiene un número de condición elevado, aunque también se tengan cotas de error útiles. La resolución de la ecuación matricial de Sylvester AX + XB = C , puede no ser estable hacia atrás, aunque otra vez se obtengan cotas del error útiles para X. El cálculo de números de condición puede ser a veces muy costoso. Por ejemplo, el coste aritmético de resolver el sistema Ax = b es de orden n 3 y el del cálculo de κ ∞ ( A) es exactamente tres veces mayor. En este caso, κ ∞ ( A) puede ser estimado con un coste de orden n 2 . En general, los números de condición y las cotas de error se basan en la estimación de números de condición ([Hage84], [High873], [High882]). El precio pagado por utilizar estimadores es que el error puede ser subestimado en algunas ocasiones. Años de experiencia confirman la exactitud de los estimadores utilizados, aunque se pueden construir ejemplos en los que no ocurre esto ([High902]). El anterior análisis de errores tiene un inconveniente: Si se utiliza la ∞-norma para medir el error regresivo, entonces entradas de igual magnitud en δ contribuyen de igual manera a la cota del error final κ ( f , z) = || δ || . || z || Esto indica que si z es disperso o tiene algunas entradas pequeñas, entonces un algoritmo estable hacia atrás puede producir grandes cambios comparados con los valores originales. Si estos valores son conocidos exactamente por el usuario, puede ocurrir que estos errores sean inaceptables o que las cotas de error sean inaceptablemente elevadas. Sea, por ejemplo, Ax = b un sistema diagonal de ecuaciones lineales. Cada componente de la solución del sistema anterior se puede calcular mediante eliminación Gaussiana xi = bi . aii La cota de error usual es aproximadamente igual a 318 Apéndice C: BLAS y LAPACK εκ ( A) = ε max i | aii | min i | aii | , la cual puede sobrestimar el error verdadero. El LAPACK resuelve este problema utilizando algunos algoritmos cuyo error regresivo δ es un pequeño cambio relativo en cada componente de z ( | δ i |= O(ε ) | zi | ). Este error regresivo tiene en cuenta tanto la estructura dispersa de z como la información de las pequeñas entradas. Estos algoritmos son estables hacia atrás relativos a las componentes. Además, las cotas del error reflejan estos errores regresivos más pequeños. Si los datos de entrada tienen una incertidumbre independiente en cada componente, cada componente debe tener al menos una incertidumbre relativa pequeña, puesto que cada una ellas es un número en coma flotante. En este caso, el algoritmo contribuye a una incertidumbre extra que no es mucho peor que la incertidumbre de los datos de entrada, de manera que se podría decir que la respuesta dada por un algoritmo estable hacia atrás relativo a las componentes es tan exacta como la que garantiza el dato. Cuando se resuelve el sistema lineal Ax = b utilizando, por ejemplo, la rutina driver “experta” xyySVX o la rutina computacional xyyRFS, se calcula una solución x' que satisface ( A + E ) x' = b + f , siendo eij pequeños cambios relativos en aij y f i un pequeño cambio en bi . En particular, si A es diagonal, entonces la correspondiente cota de error es siempre pequeña, como cabría esperar. El LAPACK alcanza esta exactitud en la resolución de sistemas de ecuaciones lineales, en la descomposición bidiagonal en valores singulares de una matriz o en el problema tridiagonal y simétrico de los valores propios, dando facilidades para alcanzar esta exactitud en problemas de mínimos cuadrados. Equilibrado y Condicionamiento en LAPACK Existen dos pasos previos que permiten un cálculo más sencillo de los valores propios de una matriz. El primer paso consiste en una permutación de filas y columnas de la matriz A de manera que la matriz A' esté más cerca de una estructura triangular superior (más cercana a la forma Schur): A' = PAP T , siendo P una matriz de permutación. El segundo paso consiste en escalar la matriz A' por medio de una matriz diagonal D que permite que las filas y las columnas de A' ' estén entre sí más cercanas en norma: A' ' = DA' D −1 . El escalado puede reducir la norma de la matriz A con respecto a los valores propios, posibilitando la disminución de los errores de redondeo ([WiRe71]). 319 Apéndice C: BLAS y LAPACK El equilibrado de una matriz se realiza mediante la rutina driver xGEEVX, la cual realiza una llamada a la rutina computacional xGEBAL. El usuario puede indicar a xGEEVX si desea permutar, escalar, realizar ambas o no hacer ninguna de las dos operaciones; esto se especifica mediante el parámetro de entrada BALANC. La permutación no tiene efecto sobre los números de condición o su interpretación como se ha descrito anteriormente. Sin embargo, el escalado cambia su interpretación, como a continuación se detalla. Los parámetros de salida de xGEEVX, SCALE (vector real de longitud n ), ILO(entero), IHI(entero) y ABNRM(real) describen el resultado de equilibrar una matriz A de dimensión n , obteniéndose una matriz A' ' . La matriz A' ' es triangular superior por bloques con al menos tres bloques: de 1 a ILO-1, de ILO a IHI, y de IHI+1 a n . El primer y último bloque son triangulares superiores. Estos bloques no están escalados; solo el bloque que se encuentra entre ILO a IHO está escalado. La uno norma de A' ' es devuelta en la variable ABNRM. Los números de condición descritos en anteriormente son calculados para la matriz equilibrada A' ' y, por lo tanto, es necesario realizar alguna interpretación para aplicarlos a los valores y vectores propios de la matriz original A . Para poder utilizar las cotas destinadas a los valores propios de las tablas anteriores se deben reemplazar || E ||2 y || E || F por O(ε ) || A' ' ||= O(ε )ABNRM . Para poder utilizar las cotas de los vectores propios, se debe tener en cuenta que las cotas sobre rotaciones de vectores propios son las dadas por los vectores propios x' ' de A' ' , los cuales están relacionados con los vectores propios x de A mediante DPx = x' ' , x = P T D −1 x . Proyector Espectral y Separación de Matrices Sea A ∈ ℜ nxn en la forma de Schur. Si se considera un grupo de m ≥ 1 valores propios de A , incluyendo sus multiplicidades, entonces A se puede descomponer como ( 6.4 ) ⎡A A = ⎢ 11 ⎣0 A12 ⎤ , A22 ⎥⎦ donde los valores propios de la submatriz A11 ∈ ℜ nxn son exactamente los correspondientes al grupo elegido. En la práctica, si los valores propios sobre la diagonal de A están en otro orden, la rutina xTREXC permite desplazarlos al primer bloque diagonal. Se define el proyector espectral, o simplemente el proyector P correspondiente a los valores propios de A11 ([Stew73], [Karl59]), como ⎡I P=⎢ m ⎣0 R⎤ , 0 ⎥⎦ donde R satisface la ecuación matricial de Sylvester ( 6.5 ) A11 R − RA22 = A12 que puede resolverse utilizando la rutina xTRSYL. Asociado al proyector espectral se encuentra el número 320 Apéndice C: BLAS y LAPACK s= 1 1 = . || P ||2 1+ || R ||22 Puesto que el valor de s es difícil calcular, se utiliza una estimación del mismo definida como 1 1+ || R ||2F . Esta aproximación difiere como mucho de su valor correcto en un factor igual a min(m, n − m) . La estimación de sep( A11 , A22 ) se realiza con la rutina xLACON (véase [Hage84], [Hig187] y [High882]), la cual estima la norma de un operador lineal || T ||1 = max j ∑i| tij | , mediante el cálculo de Tx y T T x , para cualquier vector arbitrario x . En este caso, la multiplicación de T por un vector arbitrario x , se obtiene resolviendo la ecuación matricial de Sylvester ( 6.5 ) mediante la rutina xTRSYL con un miembro derecho arbitrario, y el producto de T T por un vector arbitrario x , resolviendo la misma T . El coste aritmético necesario ecuación, pero reemplazando A11 por A11T y A22 por A22 para resolver cualquiera de las ecuaciones es O(n 3 ) o como poco O(n 2 ) , si m << n . Puesto que al utilizar || T ||1 en lugar del valor verdadero de sep, que es || T ||2 , entonces la estimación de sep puede diferir del valor verdadero como mucho en un factor m( n − m) . Otra formulación que permite, en principio, calcular exactamente el valor de sep( A11 , A22 ) es T ⊗ Im ) . sep( A11 , A22 ) = σ min ( I n−m ⊗ A11 − A22 Este método es generalmente impracticable, puesto que hay que calcular el menor valor singular de una matriz de orden m(n − m) . Por lo tanto, se requiere un espacio de trabajo extra del orden n 4 y del orden de n 6 operaciones, valores mucho mayores que los obtenidos en el método de estimación del anterior párrafo. La expresión sep( A11 , A22 ) mide la “separación” del espectro de A11 y A22 en el siguiente sentido. Este valor es cero si y solo si las matrices A11 y A22 tienen un valor propio común, y es pequeño si existe una pequeña perturbación de cualquiera de ellas que haga que tengan en común un valor propio. Si A11 y A22 son matrices hermitianas, entonces sep( A11 , A22 ) es precisamente el intervalo o mínima distancia entre un valor propio de A11 y otro de A22 . Por otra parte, si A11 y A22 no son hermitianas, entonces sep( A11 , A22 ) puede ser mucho mayor que esta distancia. 321 Apéndice C: BLAS y LAPACK Otras Características del LAPACK Argumentos Matriciales Cada argumento de tipo matricial de dos dimensiones se encuentra seguido, en la lista de argumentos, por su dimensión principal (LDA), cuyo nombre viene expresado por LD<nombre de la matriz>. Los argumentos de una matriz están declarados normalmente como matrices de tamaño supuesto (segunda dimensión igual a *). Así por ejemplo, una matriz A se puede declarar como REAL A(LDA,*) INTEGER LDA, aunque las líneas comentadas de la rutina indican que A es dimensión (LDA,N), indicando con ello que el valor mínimo requerido para la segunda dimensión es N. Esta declaración se utiliza para superar algunas limitaciones en el FORTRAN 77 estándar. En particular, permite que la rutina pueda ser invocada cuando la dimensión relevante (N, en este caso) sea igual cero. Sin embargo, las dimensiones de la matriz actual en el programa que llama debe ser al menos 1 (LDA en este ejemplo). Matrices de Trabajo Muchas de las rutinas del LAPACK requieren que una o más matrices de trabajo sean pasadas como argumentos. Estas matrices suelen representarse con el nombre WORK y, algunas veces, como IWORK, RWORK o BWORK, para distinguir entre las matrices de trabajo de tipo entero, real o lógico. Muchas rutinas que implementan algoritmos orientados a bloques necesitan un espacio de trabajo suficiente para contener un bloque de filas o columnas de la matriz. En tales casos, la longitud declarada para la matriz de trabajo debe ser pasada mediante un argumento separado LWORK, el cual se encuentra a continuación del argumento WORK en la lista de argumentos. Argumento Info Todas las rutinas documentadas tienen un argumento de diagnóstico INFO que indica el éxito o fallo en la ejecución de la rutina, como a continuación se detalla: • INFO=0: indica una finalización con éxito. • INFO<0: valor ilegal de uno o varios argumentos. • INFO>0: fallo en la realización de cálculos. Todas las rutinas driver y auxiliares comprueban que los argumentos de entrada, tales como N o LDA, o los argumentos de opción tengan valores adecuados. Si se encuentra un valor ilegal en el i-ésimo argumento, la rutina pone INF con valor –i, llamando a continuación a la rutina de tratamientos de errores XERBLA. La versión estándar de XERBLA da un mensaje de error y finaliza la ejecución de la rutina. Determinación del Tamaño de Bloque Óptimo Las rutinas del LAPACK que implementan algoritmos orientados a bloques necesitan determinar el tamaño de bloque óptimo. El diseño del LAPACK está realizado de manera que la elección del tamaño de bloque esté oculta, tanto como sea posible, a la vista de los usuarios, pero al mismo tiempo sea fácilmente accesible para los 322 Apéndice C: BLAS y LAPACK instaladores del software, puesto que optimizan el LAPACK para una determinada máquina. Las rutinas del LAPACK llaman a la función ILAENV para obtener, entre otros valores, el tamaño óptimo de bloque. Esta rutina contiene valores por defecto que conducen a un buen comportamiento sobre un gran número de máquinas pero, para poder obtener rendimientos óptimos, es necesario modificar ILAENV para cada máquina en particular. El tamaño de bloque puede depender también de la rutina de llamada, de la combinación de argumentos opcionales (si los hay) y de las dimensiones del problema. Si ILAENV devuelve un tamaño de bloque igual a 1, entonces la rutina ejecuta el algoritmo no orientado a bloques, llamando a rutinas del nivel 2 del BLAS y nunca a las del nivel 3. Las rutinas que utilizan a la rutina ILAENV realizan los siguientes pasos: 1. Determinación del tamaño de bloque óptimo usando ILAENV. 2. Si el valor de LWORK indica que se ha proporcionado suficiente espacio de trabajo, entonces la rutina usa el tamaño óptimo; de otro modo, la rutina determina el bloque de mayor tamaño que puede utilizarse con la cantidad de espacio de trabajo proporcionada. 3. Si el nuevo tamaño de bloque no es inferior a un valor umbral (también devuelto por ILAENV), la rutina utiliza este nuevo valor; de otro modo, la rutina utiliza la versión no orientada a bloques del algoritmo. El mínimo valor de LWORK, que puede necesitarse para utilizar el tamaño de bloque óptimo, se devuelve en WORK(1). Por lo tanto, la rutina utiliza el mayor tamaño de bloque posible del espacio de trabajo proporcionado. La especificación de LWORK da el valor mínimo necesario para obtener resultados correctos. Este valor coincide con el espacio de trabajo necesario para ejecutar la versión no orientada a bloques del algoritmo. Si el valor proporcionado es menor que ese valor mínimo, entonces se producirá un error en el argumento LWORK. Si hay duda del espacio de trabajo necesario, los usuarios deben suministrar una cantidad suficiente de memoria y examinar a continuación el valor de WORK(1) en la salida. Prestaciones del LAPACK El LAPACK fue diseñado inicialmente para obtener buenas prestaciones sobre máquinas vectoriales de un solo procesador o sobre multiprocesadores con memoria compartida. El software del LAPACK también ha sido usado posteriormente sobre nuevas máquinas obteniéndose también buenos resultados (estaciones de trabajo superescalares de altas prestaciones). A continuación se comentan los principales factores que afectan a las prestaciones del LAPACK sobre diferentes tipos de máquinas. • Vectorización: Diseñar algoritmos vectorizables en álgebra lineal es normalmente sencillo. Sin embargo, para muchos cálculos computacionales existen diversas variantes, todas ellas vectorizables, pero con prestaciones diferentes. Las prestaciones dependen de las características de la máquina, tales como el encadenamiento de sumas y productos vectoriales. Sin embargo, cuando los algoritmos se escriben en un código FORTRAN 77 estándar, las prestaciones pueden disminuir, debido normalmente a que los compiladores del lenguaje 323 Apéndice C: BLAS y LAPACK FORTRAN no optimizan el número de accesos a memoria, es decir, se produce un número excesivo de carga y almacenamiento de vectores en memoria. • Movimiento de datos: La causa principal de la limitación del rendimiento de una unidad en coma flotante escalar o vectorial es la velocidad de transferencia entre los diferentes niveles de memoria en una máquina. Por ejemplo, la transferencia de operandos vectoriales entre registros vectoriales, la transferencia de operandos escalares en un procesador escalar, el movimiento de datos entre la memoria principal y la memoria local o memoria caché, y la paginación entre la memoria actual y la del disco en sistemas con memoria virtual. Es deseable maximizar la razón entre la realización de operaciones en coma flotante y los accesos a memoria, así como reutilizar datos, tanto como sea posible, mientras son almacenados en los niveles más altos de la jerarquía de memoria (por ejemplo, registros vectoriales o memoria caché de alta velocidad). El programador de FORTRAN no tiene un control explícito sobre estos tipos de movimientos de datos, aunque puede a menudo influir sobre ellos imponiendo al algoritmo una determinada estructura. • Paralelismo: La estructuras de bucles anidados que aparecen en los algoritmos del álgebra lineal ofrecen la posibilidad de ser paralelizados cuando se implementan sobre multiprocesadores con memoria compartida. Este es el principal tipo de paralelismo que se explota en el LAPACK. Este paralelismo puede ser automáticamente generado por un compilador, aunque habitualmente es necesario utilizar directivas de compilación que lo permitan. La clave para obtener en el LAPACK eficiencia y portabilidad es construir el software haciendo uso, tanto como sea posible, de llamadas al BLAS. La eficiencia del LAPACK depende de la eficiencia de la implementación del BLAS en la máquina. Por lo tanto, el BLAS es un interfaz de bajo nivel entre el software del LAPACK y la arquitectura de la máquina. La portabilidad en el LAPACK se obtiene, por tanto, haciendo uso de llamadas al BLAS. El BLAS 1 se utiliza en el LAPACK más por conveniencia que por prestaciones. Las llamadas del LAPACK a rutinas del BLAS 1 corresponden a una fracción insignificante de los cálculos computacionales que se realizan, no pudiéndose alcanzar una alta eficiencia sobre la mayor parte de las supercomputadoras modernas. El BLAS 2 puede alcanzar las prestaciones máximas en muchos de los procesadores vectoriales. Sin embargo, sobre otros procesadores vectoriales las prestaciones del LAPACK se encuentran limitadas por la velocidad de movimientos de datos entre los diferentes niveles de memoria. Esta limitación es superada en el BLAS 3, al realizar operaciones en coma flotante de orden cúbico sobre conjuntos de datos de cardinalidad cuadrática. 324 Apéndice D: SGI Altix 3700 Apéndice D. SGI Altix 3700 El componente hardware constituye una parte fundamental de un computador puesto que, de alguna forma, indica el máximo rendimiento que un equipo será capaz de ofrecer. Complementariamente, será preciso disponer de un sistema operativo eficaz y versátil que permita manejarlo de manera cómoda y simple y, por otra parte, que los compiladores y utilidades de desarrollo permitan acercar el rendimiento real al máximo impuesto por el hardware. Arquitectura EL SGI 3700 es un sistema multiprocesador con arquitectura NUMA (Non Uniform Memory Access) perteneciente a la serie SGI 3000 [SGIA03]. En esta máquina la memoria está físicamente distribuida sobre todos los procesadores, pero la combinación del sistema operativo y unos controladores hardware especiales mantienen una imagen de memoria compartida a nivel de usuario. Figura 6.1. Los procesadores corresponden al Intel Itanium II CPU [SGIA03] trabajando a 1.3Ghz, con 3MB de memoria caché (conocida como “Madison”). La memoria total es de 44 Gb. El hardware se haya dispuesto en forma modular mediante la división en “bricks”: C-Bricks (Computational bricks), R-bricks (Router bricks), IX-Bricks (Peripheral bricks) y M-Bricks( Memory bricks). Cada C-Brick contiene un total de 4 procesadores con un ancho de banda total de 3.2Gb/s. Software El servidor SGI Altix 3000 funciona bajo el sistema operativo Linux de 64 bits Red Hat 7.2 con el kernel de Linux 2.4.19. Para mejorar las prestaciones, SGI incluye un entorno de desarrollo optimizado para la arquitectura Altix 3000, denominado SGI ProPack, que permite obtener el máximo rendimiento del sistema. Red Hat es una de las distribuciones de LINUX más popular del mercado hoy en día, siendo emulada por muchas otras. Es muy sencilla de instalar e incluye la detección automática de dispositivos, un instalador gráfico y un excelente conjunto de aplicaciones comerciales en su distribución oficial. 325 Apéndice D: SGI Altix 3700 Compiladores La serie SGI 3000 dispone en la actualidad de varias versiones de los compiladores GNU (gcc, g77 y g++) e Intel. Los compiladores de Intel se han diseñado para sacar el máximo partido posible de las prestaciones teóricas máximas del hardware (tanto del procesador como del resto de la arquitectura) de los servidores Altix 3000. La última versión instalada corresponde a la versión 9. Los compiladores de Intel soportan los lenguajes C, C++ y los estándares de FORTRAN 77, 90 y 95. El compilador de C y C++ cumple las siguientes características: • Compatible con el estándar Ansi C y C++. • Compatible binario con GNU gcc. • Soporta la mayoría de las extensiones de lenguaje GNU C y C++. • Compatibilidad con C99 (subconjunto). • Se pueden mezclar binarios de código C con gcc 3.x e Intel 7.0. • Ficheros objetos C pueden ser enlazados con el compilador de Intel o con gcc. Si se comparan el código generado por los compiladores de Intel con los de GNU, el primero resulta ser varias veces más rápido que el correspondiente a GNU. Librerías Para el Altix 3700 se disponen de dos librerías optimizadas del BLAS y LAPACK: Intel MKL [IMKL03] versión 8.0, y el SGI SCSL (Scientific Computing Software Library), versión 1.5.1. En las implementaciones realizadas se ha utilizado las librerías SCSL, pues contiene al BLAS y al LAPACK totalmente optimizados y paralelizados para la arquitectura de SGI. La documentación de las rutinas de estas librerías se encuentra disponible en la página http://techpubs.sgi.com. 326 Bibliografía Bibliografía [ABBD92] [ABHI00] [Abra71] [AHBI99] [AHIP05] [AlPr81] [AnDo92] [AnMo71] [ArCa76] [AsPe91] [BaGr96] [Balz80] [Barr79] [BaSt71] [BaSt72] [BeDo91] [Bell53] [Bell83] [BeMe04] [Benn02] [Benn04] [Bern05] [Bhat97] [BiHM04] E. Anderson, Z. Bai, C. Bischof, J. Demmel and others, “LAPACK Users’s Guide”. SIAM, 1992. E. Arias, I. Blanquer, V. Hernández y J. Ibáñez, “Nonsingular Jacobian Free Piecewise Linealization of State Equation”. Controlo 2000, Portuguese Association of Automatic Control, 2000. A. A. Abramov, “On the Boundary Conditions at a Singular Point for Linear Ordinary Differentials Equations”, U.S.S.R. Computational Mathematics and Mathematical Physics, vol. 11, pp. 363-367, 1971. E. Arias Antúnez, V. Hernández García, I. Blanquer Espert and J. Ibáñez González, “Nonsingular Jacobian Free Piecewise Linearization of Ordinary Differential Equations (EDO)”. Second Workshop Niconet on: Numerical Control Software: SILICOT, Rocquencourt, France, 1999. E. Arias, V. Hernández, J. J. Ibáñez and J. Peinado, “Solving Differential Riccati Equations by Using BDF Methods”. Technical Report DSIC-II/05/05, UPV, Valencia, 2005. R. C. Allen and S. A. Pruess, “An Analysis of an Inverse Problem in Ordinary Differential Equations”. SIAM J. Sci. Statist. Comput., 2, pp. 176–185, 1981. E. Anderson, J. Dongarra and S. Ostrouchov, “LAPACK Working Note 41 Installation Guide for LAPACK”. Department of Computer Science University of Tennessee Knoxville, Tennessee, 1992. B. D. Anderson and J. B. Moore, “Linear Optimal Control”. Prentice Hall, Englewood Cliffs, N.J., 1971. E. S. Armstron and A. K. Caglayan, “An Algorithm for the Weighting Matrices in the Sampled-Data Optimal Linear Regulator Problem”. NASA Langley Res. Ctr., Hampton, VA, NASA Tech. Note NASA TN D-8372, 1976. U. M. Ascher, L.R. Petzold, “Computer Methods for Ordinary Differential Equations and Differential-Algebraic Equations”. SIAM, 1998. G. A. Baker, Jr. and P. Graves-Morris, “Padé Approximants”. 2nd ed., Encyclopedia Math. Appl., Cambridge University Press, Cambridge, UK, 1996. L. A. Balzer, “Accelerated Convergence of the Matriz Sign Function Method of Solving Lyapunov, Riccati, and other Matriz Equations”. Internat. J. Control, Vol. 32, pp. 10571078, 1980. A. Y. Barraud, “Investigations Autor de la Function Signe d’une Matrice-Application à l’Équation de Riccati”. R.A.I.R.O. Automat. Syst. Anal. Control, Vol. 13, pp. 335-368, 1979. R. H. Bartels and G. W. Stewart, “Algorithm 432, Solution of the Matrix Equation AX+XB=C”, Communications of the ACM, Vol. 15, Nº 9, pp. 820-913, 1972. R.H. Bartels and G.W. Stewart, “Solution of the Matrix Equation AX + XB = C: Algorithm 432”. Comm. ACM, 15, pp. 820–826, 1972. A. Beguelin, J. Dongarra, et al., “A user’s Guide to PVM: Parallel Virtual Machine”. Tech. Report TM-11826, Oak Ridge National Laboratory, 1991. R. Bellman, “Stability Theory of Differential Equations”. McGraw-Hill Book Co. Inc., New York, 1953. R. Bellman, “On the Calculation of Matrix Exponential”. Linear and Multilinear Algebra, 41, pp. 73-79, 1983. P. Benner and H. Mena, “BDF Methods for Large-Scale Differential Riccati Equations”. Fakultät für Mathematik Technische Universität Chemnitz, D-09107 Chemnitz, Germany, 2004. P. Benner, “Efficient Algorithms for Large-Scale Quadratic Matrix Equations”. Proc. Appl. Math. Mech., 1(1), 492–495, 2002. P. Benner, “Solving Large-Scale Control Problems”. IEEE Control Systems Magazine, 14(1), pp. 44–59, 2004. D. S. Bernstein, “Matrix Mathematics”. Pricenton University Press, 2005. R. Bhatia, “Matrix Analysis”, Springer-Verlag, New York, 1997. D. A. Bini, N. J. Higham, And Beatrice Meini, “Algorithms for the Matrix pth Root”. Numerical Analysis Report 454, Manchester Centre for Computational Mathematics, University of Manchester, 2004. 327 Bibliografía [BjHa83] [BlDo99] [Brew78] [BrGS92] [BrHi89] [BrLo87] [Butc87] [Byer87] [ByHi75] [CDOP95] [ChAL90] [Chan69] [ChHi01] [ChLa87] [Choi90] [Choi92] [Coen01] [Copp74] [DaH103] [DaH203] [Dahl63] [DaMa73] [DaSm02] [Davi04] A. Björck and S. Hammarling, “A Schur Method for the Square Root of a Matrix”. Linear Algebra Appl. 52/53, pp. 127-140, 1983. S. Blackford, J. Dongarra, “LAPACK Working Note 41 Installation Guide for LAPACK, Version 3.0”. Department of Computer Science University of Tennessee Knoxville, Tennessee, 1999. J. W. Brewer, “Kronecker Product and Matrix Calculus in System Theory”. IEEE Transactions on Circuits and Systems, 25 (9), pp. 772-781, September, 1978. R.W. Brankin, I. Gladwell, and L.F. Shampine, “RKSUITE: a suite of Runge-Kutta codes for the initial value problem for ODEs”. Softreport 92-S1, Department of Mathematics, Southern Methodist University, Dallas, Texas, U.S.A, 1992. P. N. Brown and A. C. Hindmarsh, “Reduced Storage Matrix Methods in Stiff ODE Systems”. J. Appl. Math. & Comp., 31, pp.40-91, 1989. D. Brown and J. Lorenz, “A High-Order Method for Stiff BVPs with Turning Points”. SIAM J. Sci. Statist. Comput., pp. 790-805, 1987. J. C. Butcher, “The Numerical Analysis of Ordinary Differential Equations: Runge-Kutta and General Linear Methods”. Wiley, Chichester, 1987. R. Byers, “Solving the Algebraic Riccati Equation with the Matrix Sign Function”. Linear Algebra Appl., Vol. 85, pp. 267–279, 1987. G. D. Byrne and A. C. Hindmarsh, “A Polyalgorithm for the Numerical Solution of Ordinary Differential Equations”. ACM Transactions on Mathematical Software, 1, pp. 7196, 1975. J. Choi, J. Dongarra, S. Ostrouchov, A. Petitet, D. Walker, and R. C. WHALEY, “A Proposal for a Set of Parallel Basic Linear Algebra Subprograms”. Computer Science Dept. Technical Report CS-95-292, University of Tennessee, Knoxville, TN, May 1995. C. H. Choi and A. J. Laub, “Efficient Matrix-valued Algorithms for Solving Stiff Riccati Differential Equations”. IEEE Trans. on Automatic Control, 35(7), pp. 770–776, 1990. K. W. Chang, “Remarks on a Certain Hypothesis in Singular Perturbations”. Proc. American Math. Soc., 23 , pp. 41-45, 1969. S. H. Cheng, N. J. Higham, C. S. Kenney, and A. J. Laub, “Approximating the Logarithm of a Matrix to Specified Accuracy”. SIAM J. Matrix Anal. Appl., 22, pp. 1112–1125, 2001. C. H. Choi and A.J. Laub, “Improving the Efficiency of Matrix Operations in the Numerical Solution of Large Implicit Systems of Linear Differential Equations”. Int. J. Control, 46, pp. 991-100, 1987. C. H. Choi, “Efficient Algorithms for Solving Stiff Matrix-valued Riccati differential equations”. Phd., 1988. C. H. Choi, “Time-Varyng Riccati Differential Equations with Known Analytic Solutions”. IEEE Trans. on Automatic Control, 37(5), pp. 642–645, 1992. Stéphane Coen et al., “White-light Supercontinuum Generation with 60-ps Pump Pulses in a Photonic Crystal Fiber”. Opt. Lett 26, 1356 (2001). W. A. Coppel., “Matrix Quadratic Equations”. Bull. Australian Math. Soc., 10 pp 377-401, 1974. P. I. Davies and N. J. Higham, “A Schur-Parlett Algorithm for Computing Matrix Functions”. SIAM J. Matrix Analysis Appl., Vol. 25, No. 2, pp 464-485, 2003. P. I. Davies and N. J. Higham, “Computing f(A)b for Matrix Functions f”. Numerical Analysis Report No. 436, Manchester Centre for Computational Mathematics, Manchester, England, November 2003. Submitted to Proceedings of the Third International Workshop on QCD and Numerical Analysis, Edinburgh, 2003. G. Dahlquist, “A Special Stability Problem for Linear Multistep Methods”. BIT 3, pp. 2743, 1963. E. J. Davison and M. C. Maki, “The Numerical Solution of the Matrix Riccati Differential Equation”. IEEE Trans. on Automatic Control, AC-18, pp. 71-73, 1973. P. I. Davies and M. I. Smith, “Updating the Singular Value Decomposition”. Numerical Analysis Report No. 405, Manchester Centre for Computational Mathematics, Manchester, England, August 2002. To appear in J. Comput. Appl. Math. P. I. Davies, “Structured Conditioning of Matrix Functions”. Numerical Analysis Report No. 441, Manchester Centre for Computational Mathematics, Manchester, England, January 2004. 328 Bibliografía [DBMS79] J. J. Dongarra, J. R. Bunch, C. B. Moler and G. W. Stewart, “LINPACK Users’ Guide”. SIAM, Philadelphia, PA, 1979. [DDHH90] J. J. Dongarra, J. Du Croz, S. Hammerling, and R. J. Hanson, “A Set of Level 3 Basic Linear Algebra Subprograms”. ACM Trans. Math. Soft, 16(90), 1990. [DeBe76] E. D. Denman and A. N. Beavers, “The Matrix Sign Function and Computations in Systems”. Appl. Math. Comp., vol. 2, pp. 63-94, 1976. [DEES82] G. Dahlquist, L. Edsberg, G. Skollermo and G. Soderlind, ”Are the Numerical Methods and Software Satisfactory for Chemical Kinetecs?”. Numerical Integration of DE and Large Linear Systems, J. Hinze, ed. Springer-Verlag, pp. 149-164, 1982. [DeHi90] J. W. Demmel and N. J. Higham, ”Improved Error Bounds for Undetermined Systems Solvers”. Computer Science Dept. Technical Report CS-90-113, University of Tennesse, Knoxville, 1990. [DeSc83] J. E. Dennis and R. B. Schnabel, “Numerical Methods for Unconstrained Optimization and Nonlinear Equations”. Prentice-Hall, Englewood Cliffs, NJ, 1983. [Diec92] L. Dieci, “Numerical Integration of the Differential Riccati Equation and some Related Issues”. SIAM, 29(3), pp. 781–815, 1992. [DiEi94] L. Dieci and T. Eirola, “Positive Definitess in the Numerical Solution of Riccati Differential Equations”. Numerical Math, 67, pp. 303–313, 1994. [DiPa00] L. Dieci and A. Papini, “Conditioning and Padé Approximation of the Logarithm of a Matrix”. SIAM J. Matrix Anal. Appl., Vol. 21, pp. 913–930, 2000. [DoLe76] P. Dorato and A. Levis, “Optimal Linear Regulators: The Discrete Time Case”. IEEE Trans. Automat. Control, col AC-16, 1971. [DoVan92] J. Dongarra, R. Van De Geijn and D. W. Walter, “A Look at Scalable Dense Linear Algebra Libraries”. Proceedings of the Scalable High-Performance Computing Conference, IEEE Publishers, pp. 372-379, 1992. [DoWhS95] J. Dongarra and R. C. Whaley, “A User's Guide to the BLACS v1.1”. Computer Science Dept. Technical Report CS-95-281, University of Tennessee, Knoxville, TN, 1995. [DrGr98] V. Druskin, A. Greenbaum and L. Knizhnerman, “Using Nonorthogonal Lanczos Vectors in the Computation of Matrix Functions”. SIAM J. Sci. Comput. 19, pp. 38-54, 1998. [Fadd59] V. N. Faddeeva, “Computational Methods of Linear Algebra”. Dover Publications, New York, 1959. [Fehl69] E. Fehlberg, “Low-order Classical Runge-Kutta Formulas with Step-size Control and their Application to some Heat Transfer Problems. NASA Rept TR R-315, Huntsville, AL, April 15, 1969. [FeZF03] A. Ferrando, M. Zacarés, P. Fernández de Córdoba, D. Binosi y J.A. Monsoriu, “Spatial Soliton Formation in Photonic Crystal Fibers”. Optics Express 11, 452, 2003. [FeZF04] A. Ferrando, M. Zacarés, P. Fernández de Córdoba, D. Binosi y J.A. Monsoriu, “Vortex Solitons in Photonic Crystal Fibers”. Optics Express 12, 817, 2004. [Gant90] F. R. Gantmacher, “The Theory of Matrices”. Vol. I, Chelsey, New York, 1990. [Garc98] Carmen García López, “Métodos de Linealización para la Resolución Numérica de Ecuaciones Diferenciales”. Tesis Doctoral, Málaga, 1998. [GaSa92] E. Gallopoulos and Saad, “Efficient Solution of Parabolic Equations by Krylov Approximation Methods”. SIAM J. Sci. Statist. Comput., 13, pp. 1236-1264, 1992. [GoLR82] I. Gohberg, P. Lancaster and L. Rodman., “Matrix Polinomials”. Academic Press, New York, 1982. [GoNV79] G. H. Golub, S. Nash and C. F. Van Loan, “A Hessenberg-Schur Method for the Matrix Problem AX+XB=C”. IEEE Trans. Auto. Cont., AC-24, pp. 909-913, 1979. [GoVa96] G. H. Golub and C. F. Van Loan, “Matrix Computations”. Third Edition, Johns Hopkins University Press, Baltimore, Maryland, 1996. [GoWi76] G. H. Golub and J. H. Wilkinson, “Ill-Conditioned Eigensystems and the Computation of the Jordan Canonical Form”. SIAM Review 18, 1976. [Grif81] D. H. Griffel, “Applied Functional Analysis”. Ellis Hordwood Series, Mathematics and its applications, 1981. [GrLS94] W. Group, E. Lusk, A. Skjellum, “Using MPI: Portable Parallel Programming with the Message-Passing Interface”. MIT Press, Cambridge, Massachusetts, 1994. [GuSA03] S. Gugercin, D.C. Sorensen, and A.C. Antoulas, “A Modified Low-rank Smith Method for Large-scale Lyapunov Equations”. Numerical Algorithms, 32(1), pp. 27–55, 2003. [Hage84] W. W. Hager, “Condition estimators”. SIAM J. Sci Stat. Comput., 5, pp. 311-316, 1984. 329 Bibliografía [HaHS00] [HaNW87] [HaWa91] [HaWa96] [HiBy75] [Hig103] [Hig187] [Hig194] [Hig203] [Hig287] [Hig297] [High01] [High02] [High04] [High84] [High86] [High873] [High88] [High882] [High90] [HiHi00] [HiMN03] [HiMN04] [Hind74] [Hind83] M. A. Hasan, J. A. K. Hasan, and L. Scharenroich, “New Integral Representations and Algorithms for Computing nth Roots and the Matrix Sector Function of Nonsingular Complex Matrices”. Proceedings of the 39th IEEE Conference on Decision and Control, Sydney, Australia, pp. 4247–4252, 2000. E. Hairer, S. P. Norsett and G. Wanner, “Solving ODE. Nonstiff Problems”. Springer Verlag, 1987. E. Harier and G. Wanner, “Computer Methods for Ordinary Differential Equations and Differential Algebraic Equations”, SIAM, 1998. E. Hairer and G. Wanner, “Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems”. Springer-Verlag, 1996. A. C. Hindmarsh and G. D. Byrne, “Episode, an Experimental Package for the Integration Of Systems Of Ordinary Differential Equations, Ucid-30112, L.L.L., May, 1975. N. J. Higham, “A Schur-Parlett Algorithm for Computing Matrix Functions”. SIAM J. Matrix Anal. Appl., Vol. 25, No. 2, pp. 464-485, 2003. N. J. Higham, “A Survey of Condition Number Estimation for Triangular Matrices”. SIAM Review, 29, pp. 575-596, 1987. N. J. Higham, “The Matrix Sign Decomposition and its Relation to the Polar Decomposition”. Linear Algebra and Appl., 212/213:3-20, 1994. N. J. Higham, “Computing the Matrix Cosine”. Kluwer Academic Publishers, Numerical Algorithms 34, pp. 13–26, 2003. N. J. Higham, “Computing Real Square Roots of a Real Matrix”. Linear Algebra and Appl.,88/89, pp. 405-430, 1987. N. J. Higham, “Stable Iterations for the Matrix Square Root”. Numerical Algorithms, Vol. 15, pp. 227-242, 1997. N. J. Higham, “Evaluating Padé Approximants of the Matrix Logarithm”. SIAM J. Matrix Anal. App., Vol. 22, Nº 4, pp. 1126-1135, 2001. Nicholas J. Higham, “The Matrix Computation Toolbox for MATLAB”. Department of Mathematics, University of Manchester, Manchester, 2002. N. J. Higham, “The Scaling and Squaring Method for the Matrix Exponential Revisited”. Numerical Analysis Report 452, Manchester Centre for Computational Mathematics, 2004. N. J. Higham, “Newton’s Method for the Matrix Square Root”. Numerical Analysis Report No. 91, Univ. of Manchester, 1984. N. J. Higham, “Computing the Polar Decomposition with Applications”. SIAM J. Sci. Stat. Comput., Vol. 7, pp. 1160-1174, 1986. N. J. Higham, “A Survey of Condition Number Estimation for Triangular Matrices”. SIAM Review, 29, pp. 575-596, 1987. N. J. Higham, “FORTRAN Codes for Estimating the One-Norm of a Real or Complex Matrix, with Applications to Condition Estimation”. ACM Trans. Math. Soft., 14, pp. 381396, 1988. N. J. Higham, “FORTRAN Codes for Estimating the One-norm of a Real or Complex Matrix, with Applications to Condition Estimation”. ACM Trans. Math. Soft., 14, pp. 381396, 1988. N. J. Higham, “Experience with a Matrix Norm Estimator”. SIAM J. Sci. Stat. Comput.,11, pp. 804-809,1990. D. J. Higham and N. J. Higham, “MATLAB Guide”. Society for Industrial and Applied Mathematics (SIAM), Philadelphia 2000. N. J. Higham, D. S. Mackey, N. Mackey and F. Tisseur, “Computing the Polar Decomposition and the Matrix Sign Decomposition in Matrix Groups”. Numerical Analysis Report No. 426, Manchester Centre for Computational Mathematics, Manchester, England, April 2003. Revised November 2003. To appear in SIAM J. Matrix Anal. Appl. N. J. Higham, D. S. Mackey, N. Mackey, and F. Tisseur, “Functions Preserving Matrix Groups and Iterations for the Matrix Square Root”. Numerical Analysis Report 446, Manchester Centre for Computational Mathematics, Manchester, England, March 2004. A. C. Hindmarsh, “Gear, Ordinary differential Equation System Solver”. Ucid-30001, rev. 3, l.l.l., December, 1974. A. C. Hindmarsh, “ODEPACK, a Systematized Collection of ODE Solvers”. Scientific Computing, R. S. Stepleman et al. (eds.), North-Holland, Amsterdam, Vol. 1 of IMACS Transactions on Scientific Computation, pp. 55-64, 1983. 330 Bibliografía [HiSh90] [HoJo91] [HoLS97] [HoWa78] [Hunt79] [Ibañ97] [IMKL03] [Iser98] [KaBu61] [KaEn66] [Kall73] [Kalm61] [Kamm76] [Karl59] [KaRu74] [KeL189] [KeL289] [KeLa91] [KeLa92] [KeLa98] [KeLe82] [KeLe85] [Kniz91] [KoBa95] [Lain76] [LaMi85] [Laub82] N. J. Higham and R. S. Schreiber, “Fast Polar Decomposition of an Arbitrary Matrix”. SIAM J. Sci. Stat. Comput., 11, pp. 648-655,1990. R. A. Horn and C. R. Johnson, “Topics in Matrix Analysis”. Cambridge University Press, London, 1991. M. Hochbruck, C. Lubich and H. Selhofer, “Exponential Integrators for Large Systems of Differential Equations”. SIAM J. Numer. Anal. 34, pp. 1911-1925, 1997. W. D. Hoskins and D. J. Walton, “A Faster Method of Computing the Square Root of a Matrix”. IEEE Trans. Automat. Control. AC-23(3), pp. 494–495, 1978. E. Huntley, “A Note on the Application of the Matrix Riccati Equation to the Optimal Control of Distributed Parameter Systems”. IEEE Trans. On Automatic Control, AC-24, pp. 487-489, 1979. J. Javier Ibáñez González, “Algoritmos Paralelos para el Cálculo de la Exponencial de una Matriz sobre Multiprocesadores de Memoria Compartida”. Proyecto Fin de Carrera UPV, 1997. Intel Corporation, “Intel® Math Kernel Library, Reference Manual”. 2003. A. Iserles, “A First Course in the Numerical Analysis of Differential Equations”. Cambridge Texts in Applied Mathematics, University of Cambridge, 1988. R. E. Kalman and R. S. Bucy, “New Results in Linear Filtering and Prediction Theory”. Trans. ASME, J. Basic Eng., 83, Series D , pp. 95-108, 1961. R. E. Kalman and T. S. Englar, “A User's Manual for the Automatic Synthesis Program”. NASA Report CR-475, 1966. C. Kallstrom, “Computing Exp(A) and Exp(As)”. Report 7309, Division of Automatic Control, Lund Institute of Technology, Lund, Sweden, 1973. R. E. Kalman, “Contributions to the Theory of Optimal Control”. Bol. Soc. Mat. Mex., 5, pp. 102-119, 1961. D. W. Kammler, “Numerical Evaluation of Exp(At) when A is a Companion Matrix”. unpublished manuscript, University of Southern Illinois, Carbondale, IL,1976. S. Karlin, “Mathematical Methods and Theory in Games, Programming, and Economics”. Addison-Wedsley Pub. Co., Mass., 1959. B. Kågström and A. Ruhe, “An algorithm for Numerical Computation of the Jordan Normal Form of a Complex Matrix”. Report UMONF 51.74, Department of Information Processing, University of Umea, Umea, Sweden, 1974. C. S. Kenney and A. J. Laub, “Padé Error Estimates for the Logarithm of a Matrix”. International J. Control, 50, pp. 707–730, 1989. C. S. Kenney and A. J. Laub, “Condition Estimates for Matrix Functions”. SIAM J. Matrix Anal. Appl., Vol. 10, pp. 191–209, 1989. C. S. Kenney and A. J. Laub, “Rational Iterative Methods for the Matrix Sign Function”. SIAM J. Matrix Anal. Appl., 12(2):273-291, 1991. C. S. Kenney and A. J. Laub, “On Scaling Newton’s Method for Polar Decomposition and the Matrix Sign Function”. SIAM J. Matrix Anal. Appl. 13(3), pp. 688–706, 1992. C. S. Kenney and A. J. Laub, “A Schur-Fréchet Algorithm for Computing the Logarithm and Exponential of a Matrix”. SIAM J. Matrix Anal. Appl., Vol. 19, Nº 3, pp. 640-663, 1998. H. B. Keller and M. Lentini, “Invariant Embedding, the Box Scheme and an Equivalence between them”. SIAM J. Numerical Analysis, 19, pp. 942-962, 1982. C. S. Kenney and R. B. Leipnik, “Numerical Integration of the Differential Matrix Riccati Equation”. IEEE Trans. on Automatic Control, AC-30, pp.962-970, 1985. L. A. Knizhnerman, “Calculation of Functions of Unsymmetric Matrices Using Arnoldi’s Method”. Comput Math. and Math. Phys. 31, pp. 1-9, 1991. C. K. Koc¸ and B. Bakkaloglu, “Halley’s Method for the Matrix Sector Function”. IEEE Trans. Automat. Control, 40, pp. 944–949, 1995. Lainiotis, D.G., “Partitioned Riccati Solutions and Integration-free Doubling Algorithms” IEEE Trans. on Automatic Control, AC-21, pp. 677-689, 1976. P. Lancaster and M. Tismenetsky, “The theory of Matrices Second Edition with Applications”. Computer Science and Applied Mathematics, Academic Press Inc., 1985. A. J. Laub, “Schur Techniques for Riccati Differential Equations”. Feedback Control of Linear and Nonlinear Systems, D. Hinrichsen and A. Lsidori (Eds.), Springer-Verlag, New York, pp. 165-174, 1982. 331 Bibliografía [Leip85] [LiSw98] [Macd56] [MaHI92] [Mart99] [Mast69] [Meht89] [MiQD95] [MoLK78] [MoVa03] [MoVa78] [NgPa87] [PaKL90] [Parl74] [Parl76] [PaSt73] [PeCK91] [Poll89] [Prue86] [RaHi93] [Rine78] [Robe71] [Robe80] [RuBi95] [Rusn88] [Saad92] [SaCa94] [Sanz92] B. Leipnik, “A Canonical Form and Solution for the Matrix Riccati Differential Equation”. Bull. Australian Math. Soc., 26, pp. 355-361, 1985. W. M. Lioen, J. J. B. de Swart, “Test Set for Initial Value Problems Solvers”. http://www.cwi.nl/cwi/projects/IVPtestset. C. C. MacDuffee, “The Theory of Matrices”, Chelsea, New York, 1956. M. Marqués, V. Hernández and J. Ibáñez, “Parallel Algorithms for Computing Functions of Matrices on Shared Memory Multiprocessors”. Pacta´92, part 1, pp 157-166, 1992. G. Martín Herrán, “Symplectic Methods for the Solution to Riccati Matrix Equations Related to Macroeconomic Models”. Computational Economics, 13, pp. 61-91, 1999. E. J. Mastascusa, “A Relation between Liou´s Method and Forth Order Runge-Kutta Method for Evaluation of Transient Response”, Proc. IEEE, 57, 1969. M. L. Mehta, “Matrix Theory: Selected Topics and Useful Results”. Hindustan Publishing Company, Delhi, second edition, 1989. P. Misra, E. Quintana and P. M. Van Dooren, “Numerically Reliable Computation of Characteristic Polynomials”. American Control Conference, Seattle, WA, 1995. M. Morf, B. Levy and T. Kailath, “Square-root Algorithms for the Continuous Time Linear Least-square Estimation Problem”. IEEE Trans. on Automatic Control, 23, pp. 907-911, 1978. C. B. Moler and Van Loan. “Nineteen Dubious Ways to Compute the Exponential of a Matrix, Twenty-Five Years Later*”. SIAM Review 45, pp. 3-49, 2003. C. B. Moler and Van Loan. “Nineteen Dubious Ways to Compute the Exponential of a Matrix”. SIAM Review 20, pp. 801-36, 1978. K.C. Ng and B. N. Parlett, “Programs to Swap Diagonal Blocks”. CPAM report, University of California, Berkeley, 1987. P. Pandey, C. Kenney and A. J. Laub, “A Parallel Algorithm for the Matrix Sign Function”, Int. J. High Speed Computing, 2(2), 181-191, 1990. B. N. Parlett, “Computation of Matrix-value Functions”. SIAM J. Matrix Anal., Vol 14, pp. 1061-1063, 1974. B. N. Parlett, “A Recurrence among the Elements of Functions of Triangular Matrices”, Linear Algebra Appl., Vol 14, pp. 117-121, 1976. M. S. Paterson and L. J. Stockmeyer, “On the Number of Nonscalar Multiplications Necessary to Evaluate Polynomials”. SIAM J. Comput., Vol 2, pp. 60–66, 1973. P. Petkov, N. Christov and D. Konstantinov, “Computational Methods for Linear Control Systems”. Prentice Hall International Series in Systems and Control Engineering, 1991. A. A. Pollicini, “Using Toolpack Software Tools”. Kluwer Academic, 1989. S. Pruess, “Interpolation Schemes for Collocation Solution of TPBVPs”. SIAM J. Sci. Statist. Comput. 7, pp. 322-333, 1986. K. Radhakrishnan and A. C. Hindmarsh, “Description and Use of LSODE, the Livermore Solver for Ordinary Differential Equations”. LLNL Report UCRL-ID-113855, December 1993. R. F. Rinehart, “The Equivalence of Definitions of a Matrix Functions”. IEEE Trans. Auto. Cont., AC-24, pp. 320-321, 1978. J. D. Roberts, “Linear Model Reduction and Solution of the Algebraic Riccati Equation by Use of the Sign Function”. CUED/B-Control/TR13, Departament of Engineering, University of Cambridge, 1971. J. D. Roberts, “Linear Model Reduction and Solution of the Algebraic Riccati Equation by Use of the Sign Function”. International Journal Control, vol. 32. pp. 677-687, 1980. P. St. J. Russell, T. A. Birks, y F. D. Lloyd-Lucas, “Photonic Bloch Waves and Photonic Band Gaps”. Confined electrons and Photons: New Physics and Applications, E. Burstein and C. Weisbuch, eds. Plenum, New York, 1995. L. Rusnak, “Almost Analytic Representation for the Solution of the Differential Matrix Riccati Equation”. IEEE Trans. on Automatic Control, 33, pp. 191-193, 1988. Y. Saad, “Analysis of some Krylov Subspace Approximations to the Matrix Exponential Operator”. SIAM J. Numerical Analysis, Vol. 29, pp. 209-228, 1992. J. M. Sanz-Serna, M. P. Calvo, “Numerical Hamiltonian Problems”. Mathematical Computation 7, Chapman&Hall, 1994. J. M. Sanz-Serna, “Symplectic Integrators for Hamiltonian Problems: An Overview”. Act. Numer. 1, pp. 243-286, 1992. 332 Bibliografía [SBDG76] [SBIK76] [ScLA97] [Scra71] [SeBl80] [Serb79] [SGIA03] [Shah71] [ShGo75] [ShTs84] [ShWD76] [Sibu66] [SiSp76] [Smit03] [SpGu79] [Stew73] [StLe96] [Tref00] [Trot59] [TsSY88] [VanL00] [VanL78] [VanL79] [Varah79] [Varg62] [Vaug69] [Wach88] B. T. Smith, J. M. Boyle, J. J. Dongarra, B. S. Garbow, V. C. Klema, and C. B. Moler, “Matrix Eigensystem Routines- EISPACK Guide”. Vol 7 of Lecture Notes in Computer Science, Spronger-Verlag, Berlon, 1976. B. T. Smith, J. M. Boyle, Y. Ikebe, V. C. Klema, and C. B. Moler, “Matrix Eigensystem Routines: EISPACK Guide, 2nd Ed.”. Lecture Notes in Comp. Sd., 6, Springer Verlag, New York, 1976. S. Blackford, J. Choi, A. Cleary, E. D’Azevedo, I. Dhillon, J. Demmel, J. Dongarra, S. Hammarling, G. Henry, A. Petitet, K. Stanley, D. Walker, R.C. Whaley, “ScaLAPACK Users’ Guide”. SIAM Publications, Philadelphia, 1997. R. E. Scraton, “Comment on Rational Approximants to the Matrix Exponential”. Electron. Lett., 7, 1971. S.M. Serbin and S.A. Blalock, “An Algorithm for Computing the Matrix Cosine”. SIAM J. Sci. Statist. Comput. Vol 1(2), pp. 198–204, 1980. S.M. Serbin, “Rational Approximations of Trigonometric Matrices with Application to Second-order Systems of Differential equations”. Appl. Math. and Comput., Vol. 5, pp. 7592, 1979. SGI Altix Applications Development an Optimization, Release August 1, 2003. M. M. Shah, “On the Evaluation of Exp(At)”. Cambridge Report CUED/B-Control TR., Cambridge, England, 1971. L. F. Shampine and M. K. Gordon, “Computer Solution of Ordinary Differential Equations: the Initial Value Problem”. W. H. Freeman and Co., San Francisco, January, 1975. L. S. Shieh, Y. T. Tsay, and C. T. Wang, “Matrix Sector Functions and their Applications to Systems Theory”. Proc. IEE-D, 131, pp. 171–181, 1984. L. F. Shampine, H. A Watts and S. M. Davenport, “Solving Non-stiff Ordinary Differential Equations-the State of the Art. SIAM Rev. 18, pp. 376-411, 1976. Y. Sibuya, “A Block-diagonalization Theorem for Systems of Ordinary Differential Equations and its Applications”. SIAM J. on Applied Mathematics, 14, pp. 468-475, 1966. B. Singer and S. Spilerman, “The Representation of Social Processes by Markov Models”. Amer. J. Sociology, 82, pp. 1–54, 1976. M. I. Smith, “A Schur Algorithm for Computing Matrix pth Roots”. SIAM J. Matrix Anal. Appl., Vol. 24. No. 4, pp. 971-989, 2003. J. L Speyer and D. E. Gustafson, “Estimation of Phase Processes in Oscillatory Signals and Asymptotic Expansions”. IEEE Trans. on Automatic Control, AC-24, pp. 657-659, 1979. G. W. Stewart, “Error and Perturbations Bounds for Subspaces Associated with certain Eigenvalues Problems”. SIAM Review, 15, pp. 727-764, 1973. D. E. Stewart and T.S. Leyk, “Error Estimates for Krylov Subspace Approximations of Matrix Exponentials”. J. Comput. Appl. Math. 72, pp. 359-369, 1996. L. N. Trefethen, “Spectral Methods in MATLAB”. Society for Industrial and Applied Mathematics (SIAM), 2000. H. F. Trotter, “Product of Semigroups of Operators”. Prpc. Amer. Math. Soc., 10, 1959. J. S. H. Tsai, L. S. Shieh, and R. E. Yates, “Fast and Stable Algorithms for Computing the Principal nth Root of a Complex Matrix and the Matrix Sector Function”. Comput. Math. Applic., Vol. 15(11), pp. 903–913, 1988. C.F.Van Loan, “Introduction to Scientific Computing. A Matrix-Vector Approach Using MATLAB”. Prentice-Hall, 2000. C. F. Van Loan, “Computing Integrals Involving the Matrix Exponential”. IEEE Transactions on Automatic Control, Vol. AC-23, 1978. C. F. Van Loan, “A Note on the Evaluation of Matrix Polynomials”. IEEE Transactions on Automatic Control, Vol. AC-24, 1979. J. M. Varah, “On the Separation of Two Matrices”. SIAM J. Numerical Analysis, Vol. 16, pp. 216-222, 1979. R. S. Varga, “Matrix Iterative Analysis”. Prentice Hall, Englewood Cliffs, New Jersey, 1962. d. r. Vaughan, “A negative Exponential Solution for the Matrix Riccati Equation”. IEEE Trans. on Automatic Control” AC-14, pp. 72-75, 1969. E.L. Wachspress, “Iterative Solution of the Lyapunov Matrix Equation”. Appl. Math. Letters, 107:87–90, 1988. 333 Bibliografía [Ward77] [Whit69] [Wilk92] [WiRe71] [Wonh68] [Zaca05] [Zaca05] R. C. Ward, “Numerical Computation of the Matrix Exponential with Accuracy Estimate”. SIAM Journal Numerical Analysis, 14, 1977. D. E. Whitney, “More Similarities between Runge-Kutta and Matrix Exponential Methods for Evaluating Transient Response”. Ibid., 57, 1969. J. H. Wilkinson, “The Algebraic Eigenvalues Problem”. Clarendon Press, Oxford. Reprinted, 1992. J. H. Wilkinson and C. Reinsch, “Handbook for Automatic Computation”. Vol. 2, Linear Algebra, Springer-Verlag, Heidelberg, 1971. W. M. Wonham, “On a Matrix Riccati Equation of Stochastic Control”. SIAM J. on Control, 6, pp. 681-697, 1968. M. Zacarés González, “Métodos Modales para el Análisis de la Propagación no Lineal en Fibras Ópticas”. Tesis Doctoral, Departamento de Óptica de la Universidad de Valencia, 2005. M. Zacarés González, “Métodos Modales para el Análisis de la Propagación no Lineal en Fibras Ópticas”. Tesis Doctoral, Departamento de Óptica de la Universidad de Valencia, 2005. 334