ISBN 978-84-9048-023-6
Introducción a los métodos numéricos para ecuaciones diferenciales 2ª edición
Sergio Blanes Zamora Damián Ginestar Peiró María Dolores Roselló Ferragud En el libro se presenta una introducción a los diferentes temas relacionados con la resolución numérica de ecuaciones diferenciales ordinarias y en derivadas parciales. Se comienza introduciendo distintos modelos matemáticos basados en ecuaciones diferenciales, se estudian algunas materias de apoyo como son la interpolación y la resolución de sistemas de ecuaciones lineales y posteriormente se explican algunas técnicas para la resolución numérica de problemas de valores iniciales y de problemas de contorno. En el libro se presentan contenidos teóricos, ejemplos de aplicación y algunas secciones dedicadas a la utilización de Matlab para la resolución de problemas relacionados con la materia presentada. En la presentación de los temas se ha evitado exponer desarrollos abstractos buscando con ello que el libro sea de fácil lectura para los estudiantes de ingeniería.
EDITORIAL
Introducción a los métodos numéricos para ecuaciones diferenciales
UPV
Introducción a los métodos numéricos para ecuaciones diferenciales Sergio Blanes Zamora Damián Ginestar Peiró María Dolores Roselló Ferragud
EDITORIAL UNIVERSITAT POLITÈCNICA DE VALÈNCIA
2ª edición
Dr. Sergio Blanes Zamora Es Titular de Universidad del Departamento de Matemática Aplicada de la Universitat Politècnica de València. En la actualidad desarrolla su labor docente en la Escuela Técnica Superior de Ingeniería del Diseño y su labor investigadora en el Instituto Universitario de Matemática Multidisciplinar. Dr. Damián Ginestar Peiró Es Catedrático de Universidad del Departamento de Matemática Aplicada de la Universitat Politècnica de València. En la actualidad desarrolla su labor docente en la Escuela Técnica Superior de Ingeniería del Diseño y su labor investigadora en el Instituto Universitario de Matemática Multidisciplinar. Dra. María Dolores Roselló Ferragud Es Titular de Universidad del Departamento de Matemática Aplicada de la Universitat Politècnica de València. En la actualidad desarrolla su labor docente en la Escuela Técnica Superior de Ingeniería del Diseño y su labor investigadora en el Instituto Universitario de Matemática Multidisciplinar.
Sergio Blanes Zamora Damián Ginestar Peiró María Dolores Roselló Ferragud
Introducción a los métodos numéricos para ecuaciones diferenciales 2ª edición
EDITORIAL UNIVERSITAT POLITÈCNICA DE VALÈNCIA
Los contenidos de esta publicación han sido revisados por el departamento de Matemática Aplicada de la UPV
Colección Académica Para referenciar esta publicación utilice la siguiente cita: ROSELLÓ FERRAGUD, MARÍA DOLORES [et al] 2ª ed (2014) Introducción a los métodos numéricos para ecuaciones diferenciales. Valencia: Universitat Politècnica
Segunda edición, 2014 (versión impresa) Segunda edición, 2014 (versión electrónica)
© Sergio Blanes Zamora Damián Ginestar Peiró María Dolores Roselló Ferragud © de la presente edición: Editorial Universitat Politècnica de València Telf.: 963 877 012 / www.lalibreria.upv.es / Ref. 6100_01_02_01
ISBN: 978-84-9048-190-5 (versión impresa) ISBN: 978-84-9048-206-3 (versión electrónica)
Queda prohibida la reproducción, la distribución, la comercialización, la transformación y, en general, cualquier otra forma de explotación, por cualquier procedimiento, de la totalidad o de cualquier parte de esta obra sin autorización expresa y por escrito de los autores.
Índice general Índice general
5
I Contenidos teóricos
9
1 Introducción a la modelización matemática en la Ingeniería
11
1.1 Modelización matemática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.2 Algunos modelos diferenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
1.3 Ecuaciones adimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
1.4 Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
1.5 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
2 Resolución de sistemas de ecuaciones lineales
29
2.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
2.2 Métodos directos para la resolución de sistemas lineales . . . . . . . . . . . . .
30
2.2.1 Algoritmo de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
2.2.2 Factorización LU de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
2.2.3 Pivotación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
2.2.4 Errores y número de condición . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
2.2.5 Matrices especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
2.3 Métodos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
2.3.1 Algoritmo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
2.3.2 Algoritmo de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
2.3.3 Algoritmos SOR y SSOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5
Índice general
2.4 Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
2.5 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
3 Interpolación y aproximación de funciones
55
3.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
3.2 Interpolación polinómica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
3.2.1 Polinomios de Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
3.2.2 Algoritmo de Neville . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
3.2.3 Fórmula de interpolación de Newton. Diferencias divididas . . . . . . . . . .
66
3.2.4 Error en la interpolación polinómica . . . . . . . . . . . . . . . . . . . . . . . .
70
3.2.5 Problemas con la interpolación polinómica . . . . . . . . . . . . . . . . . . . .
70
3.3 Interpolación por splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
3.4 Derivación e integración numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
3.4.1 Derivación numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
3.4.2 Integración numérica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
3.5 Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
3.6 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
4 Métodos numéricos para problemas de valor inicial 4.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99 99
4.2 Método de Euler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.3 Método del desarrollo en serie de Taylor . . . . . . . . . . . . . . . . . . . . . . . . 105 4.4 Métodos de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 4.4.1 Métodos RK explícitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.4.2 Métodos RK implícitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4.5 Métodos multipaso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 4.6 Ecuaciones rígidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.6.1 Estabilidad lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 4.6.2 Métodos implícitos hacia atrás . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4.7 Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.8 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5 Métodos numéricos para problemas de contorno
135
5.1 Diferencias finitas para EDOs con condiciones de frontera . . . . . . . . . . . . 136
6
Índice general
5.2 Diferencias finitas para problemas parabólicos . . . . . . . . . . . . . . . . . . . . 138 5.3 Diferencias finitas para problemas hiperbólicos . . . . . . . . . . . . . . . . . . . 144 5.4 Diferencias finitas para problemas elípticos . . . . . . . . . . . . . . . . . . . . . . 147 5.5 Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 5.6 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
6 Introducción a los elementos finitos
159
6.1 Técnicas variacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 6.2 Condiciones de contorno no nulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 6.3 Introducción a los elementos finitos bidimensionales . . . . . . . . . . . . . . . . 165 6.4 Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 6.5 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
II Ejercicios con Matlab
175
7 Resolución de sistemas de ecuaciones lineales con Matlab
177
7.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.2 Métodos directos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 7.2.1 Errores y número de condición . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 7.2.2 Factorización LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 7.2.3 Factorización de Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
7.3 Métodos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 7.3.1 Método de Jacobi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 7.3.2 Método de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 7.3.3 Método SOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
7.4 Ejercicios con Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
8 Interpolación y aproximación de funciones con Matlab
193
8.1 Polinomios en Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 8.2 Interpolación polinómica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 8.3 Interpolación mediante splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 8.4 Diferencias divididas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 8.5 Ejercicios con Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7
Índice general
9 Derivación e integración con Matlab
211
9.1 Derivación con Matlab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 9.2 Integración con Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 9.3 Ejercicios con Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10 Resolución de problemas de valor inicial con Matlab
223
10.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 10.2 Método de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 10.3 Métodos de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 10.4 Métodos multipaso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 10.5 Ejercicios con Matlab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
11 Resolución de problemas de contorno con Matlab
235
11.1 ODEs lineales con condiciones en la frontera . . . . . . . . . . . . . . . . . . . . 235 11.2 Diferencias finitas para EDPs de evolución . . . . . . . . . . . . . . . . . . . . . 237 11.2.1 Diferencias finitas para problemas parabólicos . . . . . . . . . . . . . . . . . 237 11.2.2 Diferencias finitas para problemas hiperbólicos . . . . . . . . . . . . . . . . . 242
11.3 Ejercicios con Matlab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Bibliografía
8
247
Parte I
Contenidos teóricos
Capítulo 1
Introducción a la modelización matemática en la Ingeniería Uno de los principales logros de la Matemática es su aplicabilidad a la solución de problemas reales. Algunos de estos problemas aparecen en fenómenos de la naturaleza como, por ejemplo, la propagación de ondas, la predicción del tiempo, y otros muchos aparecen en aplicaciones o procesos industriales y técnicos como, por ejemplo, el control de temperaturas, el diseño de una cadena de montaje, el control de vuelo en un avión, el diseño de una aeronave, etc. Frecuentemente, a la resolución del problema se añaden otro tipo de factores, como pueden ser, la inaccesibilidad de la maquinaria o procesos de corrosión química, que incrementan la dificultad de obtener los resultados deseados y detectar averías. Las matemáticas juegan un papel fundamental en estos casos ya que permiten diseñar modelos que se ajusten al comportamiento del problema, complementando el estudio teórico del modelo con un proceso de simulación que permita optimizar los diseños y mejorar los resultados obtenidos.
1.1
Modelización matemática
En esta parte pretendemos dar respuesta, de forma introductoria, a las siguientes preguntas: ¿Qué significa el término modelo?, ¿cómo se construye un modelo? y ¿qué es lo que podemos conseguir con él? A grandes rasgos, un modelo matemático es aquel que utiliza las técnicas matemáticas como, por ejemplo, ecuaciones, funciones, probabilidades, etc., para la 11
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
representación de un determinado proceso o fenómeno del mundo real. Los modelos matemáticos pueden ser de diferentes tipos, como por ejemplo: • Estáticos: Son modelos invariables en el tiempo. El modelo de una construcción, pieza o dispositivo en los que se relacionen sus variables de estado principales con otras primarias puede considerarse como un modelo estático. • Dinámicos: Son aquellos modelos que evolucionan con el tiempo. La mayoría de modelos tienen un comportamiento dinámico. • Continuos: Son los modelos que consideran las variables de estado del sistema como continuas. • Discretos: Son aquellos que consideran las variables discretas. Los modelos discretos son de gran utilidad en procesos intrínsecamente discretos como los que aparecen en procesos económicos o en diseño de procesos informáticos. • Deterministas: Son modelos donde no hay incertidumbre y se puede conocer de manera puntual la forma del resultado. Los principales modelos deterministas de procesos continuos suelen estar representados por ecuaciones o sistemas de ecuaciones diferenciales ordinarias o en derivadas parciales. Los principales modelos deterministas de procesos discretos suelen estar representados por ecuaciones o sistemas de ecuaciones en diferencias. • Estocásticos: Son modelos en los que no se conoce el resultado esperado, sino su probabilidad y existe, por tanto, incertidumbre. Los modelos estocásticos permiten extraer información acerca de una causa-efecto o hacer predicciones sobre algún proceso. Estos modelos vienen representados por ecuaciones que involucran probabilidades. Cuando un parámetro o variable involucra aleatoriedad se le suele llamar variable aleatoria y, si se trata de una función, proceso estocástico. La solución de los modelos matemáticos se puede obtener por métodos analíticos o por métodos numéricos. La resolución analítica consiste en la obtención de una expresión que nos proporcione toda la información necesaria sobre dicha solución. La resolución numérica consiste en encontrar una aproximación de la solución buscada dentro de un orden de tolerancia. Uno de los propósitos de un modelo es que permita predecir la respuesta de un sistema dadas unas condiciones. Por una parte, el modelo debe ser una buena aproximación al sistema real e incorporar la mayor parte de sus características. Por otra parte, no debe ser tan complejo que sea imposible de entender o experimentar con él. También hay que tener en cuenta el coste de la construcción y resolución del modelo, ya que en muchas ocasiones necesitaremos una respuesta rápida. Además, el modelo debe ser flexible, esto es, deber ser capaz de responder adecuadamente a cambios en el sistema. 12
1.1 Modelización matemática
Resumiendo, para elaborar un modelo matemático hay que tener en cuenta las siguientes propiedades: • Fidelidad. • Complejidad. • Coste. • Flexibilidad. Un buen modelo debe mantener el equilibrio entre realidad y simplicidad. Es conveniente empezar con un modelo sencillo e ir completándolo de forma gradual. El proceso para elaborar un modelo matemático es el siguiente: Paso 1. Identificación del problema: Identificar el problema real que hay que resolver y determinar qué se quiere hacer o encontrar. Paso 2. Formulación del modelo matemático: Determinar la información relevante y los datos que son de utilidad y hacer hipótesis. Básicamente se realizarán dos tareas: a. Determinación de variables: Identificar las variables involucradas en el proceso, estableciendo si son parámetros, variables dependientes o independientes, especificar las restricciones, etc. b. Formulación matemática: Realizar hipótesis lo suficientemente simples para tratarse de manera matemática. Formular el tipo de ecuación o procedimiento que mejor describe y se ajusta a la idealización del problema, teniendo en cuenta si existen diferentes alternativas al modelo. Paso 3. Resolución o interpretación: Aplicar los conocimientos matemáticos para resolver o interpretar el modelo. Paso 4. Verificación y validación: Comparar los datos obtenidos con datos reales. Esto puede dar lugar a incorporar nuevas necesidades en el modelo para mejorar los resultados. Si los resultados se alejan de los objetivos, reajustar los parámetros y/o el modelo e iniciar el proceso. En la Figura 1.1 podemos ver de forma esquemática el procedimiento anterior. Se empieza examinando el sistema e identificando el comportamiento particular que deseamos predecir o explicar. Después se identifican las variables y se realizan hipótesis lo suficientemente sencillas para poderlas formular matemáticamente y generar el modelo. Entonces se valida el modelo con las pruebas o ensayos necesarios. Si los resultados son satisfactorios se puede usar el modelo para la finalidad prevista. Si los resultados no son satisfactorios hay varias posibilidades. Se puede decidir que el modelo necesita ser refinado bien incorporando nuevas variables o 13
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
reestructurando parte del modelo. En algunos casos los resultados pueden ser tan insatisfactorios que el problema original debe ser redefinido porque era demasiado ambicioso. Resultados no aceptables No, simplifica Examina el “sistema”
Identifica el comportamiento y haz hipótesis
¿Puedes formular un modelo?
Sí
No, simplifica ¿Puedes resolver el modelo? Sí
Valida el modelo
Aplica los resultados al sistema
Realiza predicciones y/o explicaciones
Sí
¿Son los resultados precisos?
No, refina
Figura 1.1: La naturaleza iterativa de la construcción de un modelo.
El proceso que se presenta en la Figura 1.1 no sólo hace hincapié en la naturaleza iterativa de la construcción del modelo, sino también introduce el equilibrio entre la simplificación y el refinamiento del modelo. Generalmente se empieza con un modelo simple y se evoluciona en el proceso de modelado, refinándolo según los resultados obtenidos en el proceso de validación. Si no se puede llegar a un modelo adecuado o no puede resolverse, se debe simplificar. Si los resultados no son suficientemente precisos se debe refinar el modelo. Debido generalmente a los altos costes en la fabricación de prototipos, en los últimos años se ha incrementado considerablemente el uso de la simulación. El uso de la simulación antes de cambiar o elaborar un nuevo producto permite reducir las posibilidades de que no se cumplan las especificaciones deseadas, eliminar obstáculos imprevistos, prevenir el hecho de utilizar excesivos o escasos recursos y optimizar su rendimiento. En particular, dentro del campo de la aeronáutica, debido al alto coste de la construcción y las pruebas de vuelo en aviones reales, los modelos matemáticos juegan un papel fundamental. Estos modelos se usan conjuntamente con la simulación por ordenador, entre otras cosas, para evaluar las posibilidades de un prototipo de avión y de aquí mejorar el diseño del mismo. Además, una vez obtenido y validado el modelo, se puede utilizar para realizar simulaciones de vuelo, reconstruir las condiciones de vuelo tras un accidente, estudiar efectos en la modificación del diseño, predecir la fatiga producida en cierta parte del fuselaje del avión, etc. 14
1.2 Algunos modelos diferenciales
1.2
Algunos modelos diferenciales
En este apartado veremos algunos ejemplos de modelos matemáticos sencillos que se basan en ecuaciones diferenciales ordinarias y en ecuaciones diferenciales en derivadas parciales. El primer ejemplo describe las oscilaciones de una masa sujeta por un muelle obligada a moverse en línea recta. Ejemplo 1.1 (Sistema masa-muelle) Considerar un sistema mecánico constituido por una masa m que se puede trasladar a lo largo de una línea horizontal, por ejemplo, el eje x (ver Figura 1.2). La posición de la masa se identifica por la coordenada de su centro de masas, P , que está atado a un muelle elástico, cuyos extremos son A y P . Escribir las ecuaciones del movimiento del sistema mecánico considerando los siguientes casos de dificultad creciente: a) No hay rozamiento ni fuerzas externas y las oscilaciones son pequeñas. b) No hay rozamiento ni fuerzas externas pero las oscilaciones no son pequeñas, esto es, la ley de Hook no es válida y hay que tener en cuenta fuerzas proporcionales al cuadrado o al cubo del valor del desplazamiento. c) Caso b) donde además hay rozamiento y se aplican fuerzas externas dependientes del tiempo.
k A
P x Figura 1.2: Sistema masa-muelle.
Solución: a) Las hipótesis que definen el sistema mecánico son las siguientes: • El sistema se comporta como una masa puntual cuya posición se identifica por la variable x. • La acción del muelle es una fuerza de la forma T = kx. • Las fuerzas de rozamiento son despreciables con respecto a la acción del muelle. 15
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
Aplicando la Segunda ley de Newton de la mecánica clásica tenemos m
d2 x = −kx. d t2
(1.1)
El modelo matemático es una ecuación de evolución para el siguiente vector de variables: x . u= dx dt k Utilizando las variables anteriores y llamando v = dx dt , κ = m , la ecuación diferencial ordinaria de segundo orden (1.1) queda ⎧ dx ⎪ ⎨ = v, dt (1.2) ⎪ ⎩ dv = −κx, dt que es un sistema de ecuaciones diferenciales lineales de primer orden. El sistema (1.2) lo escribiremos habitualmente en la forma vectorial, d x v = . v −κ x dt
b) Si consideramos un orden superior en el desarrollo de Taylor de la fuerza de restitución, esto es, F (x) = −kx + x2 ( suele ser un parámetro pequeño y, por tanto, la contribución del término x2 sólo es relevante cuando x toma valores grandes, esto es, con oscilaciones el sistema a resolver de gran amplitud). En este caso, considerando ε = m será d x v = , v −κ x + ε x2 dt cuya solución analítica puede adquirir una complejidad considerable. c) Si consideramos una fuerza de rozamiento en sentido opuesto al movimiento proporcional a la velocidad, con coeficiente de rozamiento α, y una fuerza externa, f (t), la fuerza total será: F (x, t) = −k x + x2 − α
dx + f (t), dt
(t) y f˜(t) = fm , el sistema a resolver será d v x , = v −κ x + ε x2 − βv + f˜(t) dt
y denotando β =
α m
que no tiene solución analítica. 16
1.2 Algunos modelos diferenciales
En el siguiente ejemplo deducimos las ecuaciones que describen el movimiento de un péndulo, particularizando posteriormente para el caso en que las oscilaciones sean pequeñas. Ejemplo 1.2 (Movimiento de un péndulo) Escribir la ecuación que describe el movimiento de un péndulo de longitud l en el que cuelga una bola de masa m y que oscila sin rozamiento bajo la acción de la gravedad como un sistema de ecuaciones diferenciales de primer orden. Escribir también la ecuación aproximada para oscilaciones pequeñas. Solución:
l
θ
θ Figura 1.3: Péndulo.
El movimiento de un péndulo viene descrito por la Segunda ley de Newton. A partir de la Figura 1.3, podemos plantear las ecuaciones m
d2 (lθ) = −mg sen(θ), dt2
θ(0) = θ0 ,
θ (0) = θ0 ,
donde g es la constante gravitatoria y θ es el ángulo que forma con la vertical. Simplificando y agrupando términos se tiene g d2 θ 2 . = −k sen(θ), k= 2 dt l Si las oscilaciones son pequeñas, podemos tomar sen(θ) θ y, llamando ω = θ , los sistemas de ecuaciones de primer orden son d d θ ω θ ω = = , . ω −k 2 sen(θ) ω −k 2 θ dt dt 17
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
El problema linealizado se corresponde con un oscilador armónico, cuya solución es fácil de obtener y viene dada por θ(t) = θ0 cos(kt) +
θ0 sen(kt). k
En cambio, la solución del problema no lineal es bastante complicada y viene dada en términos de integrales elípticas de primera especie (cuyo valor hay que calcular numéricamente), por lo que lo más sencillo y rápido suele ser resolver el sistema de ecuaciones numéricamente. Ejemplo 1.3 (Vibraciones) Bajo condiciones generales, las oscilaciones de una cuerda de masa despreciable vienen descritas por la ecuación de ondas, 2 ∂2u ∂ u 2 = α . 2 ∂t ∂x2 Si en vez de una cuerda se tiene una membrana bidimensional, la ecuación de ondas se puede expresar como 2 ∂ u ∂2u ∂2u 2 = α 2 ∇2 u . = α + ∂t2 ∂x2 ∂y 2 Para placas rectangulares, las ondas transversales de pequeña amplitud se pueden describir mediante la ecuación 4 ∂ u ∂2u ∂4u ∂4u 2 =α + 2 2 2 + 4 = α 2 ∇4 u . ∂t2 ∂x4 ∂x ∂y ∂y Ejemplo 1.4 (Ecuaciones de los fluidos) La ecuación de continuidad para un fluido se escribe, para el campo de velocidades v, como ∇v = 0 . La ecuación de conservación del momento para un fluido Newtoniano se expresa como ∂v = ρg − ∇p + μ∇2 v , ρ ∂t donde ρ es la densidad del fluido, g la aceleración de la gravedad, p la presión y μ el coeficiente de viscosidad. La ecuación de la conservación de la energía es de la forma dT = λ∇2 T + Φ , dt donde T es la temperatura, cp es el calor específico, λ el coeficiente de conductividad térmica y Φ la función de disipación viscosa. ρcp
18
1.3 Ecuaciones adimensionales
1.3
Ecuaciones adimensionales
En ocasiones, es interesante expresar los modelos en términos de variables adimensionales, con ello, se obtienen modelos que no dependen de las características concretas del problema particular que se estudia. Los ejemplos anteriores se pueden reescribir usando variables adimensionales. Este procedimiento siempre se puede aplicar y es útil. En algunos casos es necesario escribir modelos en los que todas las variables, dependientes e independientes, estén escritas en forma adimensional referidas a unas variables de referencia adecuadas. Éstas se pueden elegir de forma que las nuevas variables tomen valores en los dominios [0, 1] o [−1, 1]. Las variables de referencia se pueden elegir considerando razones físicas y/o geométricas relacionadas con el sistema particular que se esté modelizando. Técnicamente, si consideramos w cierta variable (dependiente o independiente), y suponemos que los valores menor y mayor de w son, respectivamente, wm y wM , determinados por medidas físicas o geométricas, podemos obtener la siguiente variable adimensional: w − wm , w∗ ∈ [0, 1]. w∗ = wM − wm Por ejemplo, si w representa la temperatura de un material sólido, podemos suponer wm = 0 y wM = wc , siendo wc la temperatura de fusión del sólido. En principio, la descripción del modelo debería definir la evolución dentro del dominio [0, 1]. Si esto no ocurriera, el modelo tendría que ser analizado de forma crítica. Si w es una de las variables espaciales independientes, por ejemplo, x, y y z para un sistema de dimensión finita, entonces podemos adimensionalizar tomando como variables de referencia el menor y mayor valor que toman cada una de ellas, respectivamente, xm , ym , zm , y xM , yM , zM . En algunos casos, puede ser útil referenciar todas las variables con respecto a una única variable espacial, generalmente la que alcanza un valor mayor. Por ejemplo, supongamos que xm = ym = zm = 0, y que yM = axM , y zM = bxM , con a, b < 1, entonces, xv yv zv x∗ = , y∗ = , z∗ = , xM xM xM con x∗ ∈ [0, 1], y ∗ ∈ [0, a], z ∗ ∈ [0, b]. Una cuestión más delicada es la elección del tiempo de referencia. Técnicamente, si el tiempo inicial es t0 y t es el tiempo real, podemos tomar: t∗ =
t − t0 , T c − t0
t∗ ≥ 0. 19
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
Generalmente podemos tomar t0 = 0 y Tc es un parámetro con dimensiones de tiempo que se elige para que se satisfagan ciertas condiciones. De modo ilustrativo, vamos a adimensionalizar uno de los ejemplos estudiados en el apartado 1.2. Ejemplo 1.5 (Adimensionalización del modelo lineal muelle-masa) Considerar el modelo descrito en el apartado a) del Ejemplo 1.1, en el que se añade la siguiente hipótesis: • Se aplica una fuerza F en la dirección del eje x. Obtener una ecuación adimensionalizada para el modelo descrito. Solución: En este caso, el modelo se puede escribir de la siguiente forma: m
d2 x = F − kx. dt2
(1.3)
Es natural tomar l = F/k, t∗ = t/Tc , y x∗ = x/l. Entonces la ecuación (1.3) se reescribe m d2 x∗ = 1 − x∗ . kTc2 dt∗2 Suponiendo
m =1 kTc2
=⇒
Tc2 =
m , k
se tiene
d 2 x∗ = 1 − x∗ , dt∗2 que es un modelo de segundo orden cuya evolución se puede analizar en términos de unidades de Tc .
1.4
Ejercicios resueltos
En el siguiente ejercicio, obtenemos el sistema de ecuaciones diferenciales de un modelo simplificado que nos permite determinar la órbita de un satélite alrededor de la Tierra. Ejercicio 1.1 (Órbita de un satélite) Un modelo simplificado para calcular la órbita de un satélite alrededor de la Tierra consiste en suponer que la masa total de la Tierra se encuentra concentrada en su centro de gravedad y que la única fuerza que interviene es la de la gravedad. Escribe las ecuaciones diferenciales que describen el movimiento como un sistema de ecuaciones de primer orden. 20
1.4 Ejercicios resueltos
Solución: Consideramos un sistema de referencia en el que la Tierra se encuentra en el origen de coordenadas y el movimiento tiene lugar en el plano X − Y . Si la posición del satélite en el plano lo denotamos por r = (x, y), la ecuación de Newton viene dada por d2 r r m 2 = −G M m , r(0) = r0 , r (0) = r0 , dt r3 donde G es la constante de gravitación universal, M es la masa de la Tierra y m es la masa del satélite. Posteriormente, en el Ejercicio 1.5 de este apartado veremos que tomando las unidades adecuadas para medir la distancia y reescalando el tiempo adecuadamente se obtiene la ecuación adimensional, r d2 r =− . dt2 r3 Si denotamos por v = r = (vx , vy ), el sistema de ecuaciones diferenciales que se pide es: ⎧ x ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ vx
= =
y ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ vy
= =
vx , x − 2 , (x + y 2 )3/2 vy , y − 2 . (x + y 2 )3/2
(1.4)
Nota: Este problema todavía tiene solución analítica, aunque viene dada en forma implícita (por lo que para obtener la trayectoria hay que recurrir necesariamente a métodos numéricos). En la práctica se necesita calcular las trayectorias con gran precisión y, por tanto, hay que considerar modelos más sofisticados (el efecto debido a que la Tierra es achatada, la influencia del Sol, de la Luna, efectos relativistas, etc.) que obviamente dan lugar a ecuaciones que no tienen solución analítica y, por tanto, la única forma de poder calcular las trayectorias de los satélites es mediante métodos numéricos. Por ejemplo, un modelo un poco más realista que tiene en cuenta el término dominante del efecto del achatamiento de la Tierra viene dado por d2 r r r =− −ε , 2 3 dt r r5 donde ε es una constante que para el caso de la Tierra tiene un valor del orden de ε ∼ 10−3 . Este problema ya no tiene solución analítica y hay que resolverlo numéricamente. 21
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
El siguiente ejercicio trata sobre la modelización del fenómeno de difusión del calor.
Ejercicio 1.2 (Modelo lineal de difusión del calor) Consideremos el modelo lineal unidimensional de difusión del calor en una barra. Las hipótesis que definen el modelo mecánico son las siguientes: • El estado del sistema se describe por la temperatura u = u(x, t) a lo largo del eje de la barra que podemos identificar por la variable x ∈ [0, 1]. Se desprecian variaciones ortogonales a los ejes de la barra, ya que las paredes de la barra están perfectamente aisladas. • El flujo de calor, q, por unidad de área es proporcional al gradiente de temperaturas: ∂u q = −h0 , (1.5) ∂x donde h0 es el coeficiente de conducción del calor. • Las propiedades materiales del conductor se identifican por el coeficiente de conducción del calor, h0 , y el calor específico c0 . Escribe las ecuaciones que describen dicho modelo. Solución: El modelo matemático se puede obtener igualando el flujo neto de calor en el elemento de volumen a la velocidad de crecimiento de la capacidad calorífica en el volumen. Sean q − y q + , respectivamente, los flujos de calor entrante y saliente por unidad de área (ver Figura 1.4). El equilibrio anterior lo podemos formular como c0 A
∂u ∂q dx = −A q + − q − = −A dx, ∂t ∂x
donde A es el área de una sección perpendicular al eje de la barra.
dx q−
q+
Figura 1.4: Difusión en una dimensión espacial.
Usando la ecuación (1.5) en (1.6) se tiene:
22
∂2u ∂u = k0 2 , ∂t ∂x
k0 =
h0 . c0
(1.6)
1.4 Ejercicios resueltos
Para modelizar la difusión de calor en una barra tridimensional prismática homogénea se tiene el modelo siguiente 2 ∂ u ∂2u ∂2u ∂u = k0 + + = k0 ∇2 u , ∂t ∂x2 ∂y 2 ∂z 2 que es una ecuación de difusión multidimensional. El modelo unidimensional anterior también se puede utilizar para describir la distribución de temperaturas estacionaria, que se obtiene igualando a cero la parte derecha de la ecuación, d2 u k0 2 = 0. dx Y en varias dimensiones se tiene ∇2 u = 0 , que es la ecuación de Laplace. Una ecuación similar a ésta es la ecuación de Poisson, ∇2 u = f , que es una ecuación muy utilizada en problemas de electrostática. Estas ecuaciones se pueden tratar mediante el método de separación de variables si el recinto donde se estudian y las condiciones de contorno son sencillas. Para recintos más complejos, el problema se ha de tratar numéricamente. Una generalización del modelo unidimensional de la difusión del calor visto en el ejercicio anterior a un modelo no lineal la proponemos a continuación. Ejercicio 1.3 (Modelo no lineal de difusión del calor) Cuando se modeliza el fenómeno del flujo de calor se puede introducir la no linealidad. Por ejemplo, si el coeficiente del flujo de calor depende de la temperatura, esto es, h = h(u). Escribe la ecuación no lineal que describe dicho modelo. Solución: En este caso, la ecuación de equilibrio para el flujo de calor genera el siguiente modelo: ∂ ∂u h(u) ∂u = k(u) , k(u) = . ∂t ∂x ∂x c0 El siguiente ejercicio está relacionado con el modelo de difusión del calor visto en el Ejercicio 1.2. En él, consideramos un modelo matemático capaz de describir la difusión de un contaminante de un fluido en un espacio unidimensional. Como veremos, se obtendrá una ecuación de evolución análoga a la del Ejercicio 1.2. 23
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
Ejercicio 1.4 (Modelo lineal de difusión de un contaminante) Considera un conducto lleno de un fluido en reposo y un contaminante que se difunde en el conducto en la dirección x del eje del conducto. Las hipótesis que definen el modelo mecánico son las siguientes: • La cantidad física que define el estado del sistema es la concentración del contaminante: c = c(x, t) : [0, l] × [t0 , T ] → R+ . Las variaciones de c a lo largo de coordenadas ortogonales al eje x son despreciables. • La densidad del contaminante la indicaremos por ρ0 y la supondremos constante. • No hay dispersión o inmersión de contaminante en las paredes. • El fluido es estacionario, mientras que la velocidad de difusión del contaminante se describe por un modelo fenomenológico que establece que la velocidad de difusión es directamente proporcional al gradiente de c e inversamente proporcional a c. Obtén la ecuación que describe el modelo. Solución: El modelo de evolución, es decir, una ecuación de evolución para c se puede obtener utilizando la ecuación de conservación de la masa. Para derivar tal ecuación, consideremos, teniendo en cuenta la Figura 1.4, el flujo q = q(x, t) a lo largo del conducto y sean q − y q + los flujos entrante y saliente, respectivamente. Bajo las condiciones de regularidad adecuadas, que son consistentes con el sistema físico, tenemos que la relación entre los flujos anteriores viene dada por q+ = q− +
∂q dx. ∂x
Una ecuación de equilibrio se puede obtener igualando la cantidad de flujo neto al incremento de masa en el elemento de volumen A dx, siendo A la sección del conducto. Como q = Acv, donde v es la velocidad de difusión, obtenemos la siguiente ecuación: ∂(cv) ∂c ρ0 A dx + A dx = 0. (1.7) ∂t ∂x Teniendo en cuenta las hipótesis anteriores, la ecuación (1.7) se puede escribir de la siguiente forma: h0 ∂c v=− , (1.8) c ∂x siendo h0 el coeficiente de difusión. 24
1.4 Ejercicios resueltos
Sustituyendo la ecuación (1.8) en (1.7), tenemos ∂c ∂2c = k0 2 , ∂t ∂x
k0 =
h0 , ρ0
que es un modelo lineal.
Ejercicio 1.5 (Modelo adimensional para la órbita de un satélite) Escribe las ecuaciones diferenciales adimensionalizadas correspondientes al modelo del Ejercicio 1.1. Solución: En el Ejercicio 1.1 obtuvimos las ecuaciones r d2 r = −G M , dt2 r3
r(0) = r0 ,
r (0) = r0 .
(1.9)
Tomamos una longitud de referencia, l, que podría ser, por ejemplo, la distancia inicial del satélite a la Tierra, y definimos las variables adimensionalizadas r∗ = r/l y t∗ = t/Tc . Entonces la ecuación (1.9) se reescribe l d2 r∗ l r∗ = −G M 3 ∗ 3 , 2 ∗2 Tc dt l r es decir,
d2 r∗ G M Tc2 r∗ = − . dt∗2 l3 r∗ 3
Para determinar Tc , suponemos G M Tc2 =1 l3
=⇒
Tc2 =
l3 , GM
y obtenemos la ecuación adimensionalizada d2 r ∗ r∗ = − , dt∗2 r∗ 3
(1.10)
que representa una ecuación (vectorial) diferencial de segundo orden. Si denotamos por v = r = (vx , vy ), el sistema de ecuaciones diferenciales de primer orden que se pide es (1.4). Ejercicio 1.6 (Modelo adimensional lineal de difusión de un contaminante) Obtén un modelo adimensional para el modelo descrito en el Ejercicio 1.4, teniendo en cuenta que la ecuación en términos de variables reales se puede escribir como: ∂2c ∂c = k0 2 . (1.11) ∂t ∂x 25
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
Solución: Es natural tomar c∗ = c/cM , t∗ = t/Tc , y x∗ = x/l. Entonces la ecuación (1.11) se reescribe 1 ∂c∗ k0 ∂ 2 c ∗ = 2 . ∗ Tc ∂t l ∂x∗2 Suponiendo k 0 Tc =1 l2 se tiene
=⇒
Tc =
l2 , k0
∂c∗ ∂ 2 c∗ = . ∂t∗ ∂x∗2
(1.12)
En particular, la ecuación (1.12) que se obtiene es el mismo modelo para describir el fenómeno de difusión en distintos medios. De hecho, sólo varía Tc al cambiar las propiedades del medio. Esto significa que la evolución es cualitativamente la misma, pero el sistema evoluciona en el tiempo con diferentes velocidades escaladas respecto a Tc . Ejercicio 1.7 (Ecuaciones adimensionales para los fluidos) Considera la ecuación de continuidad ∇v = 0 , y la ecuación de conservación del momento ρ
∂v = ρg − ∇p + μ∇2 v . ∂t
Reescribe estas ecuaciones utilizando variables adimensionales. Solución: Estas ecuaciones contienen tres dimensiones básicas, la masa, la longitud y el tiempo. Todas las variables pueden adimensionalizarse utilizando, por ejemplo, la densidad y dos constantes de referencia, que pueden ser características del fluido como, U , una velocidad de referencia (como puede ser la velocidad a la entrada) y L una longitud de referencia (como puede ser el diámetro de un cuerpo). Las variables adimensionales que tomaremos son v , U x y z x∗ = , y∗ = , z∗ = , L L L tU p + ρgz , p∗ = . t∗ = L ρU 2 v∗ =
26
1.5 Ejercicios propuestos
Se cumple, por ejemplo, que ∂u ∂ (U u∗ ) U ∂u∗ = = . ∗ ∂x ∂ (Lx ) L ∂x∗ Así, las ecuaciones adimensionales del movimiento del fluido son ∇∗ v ∗ = 0 , ∂v∗ μ ∇∗2 v∗ , = −∇∗ p∗ + ∂t∗ ρU L que introduciendo el número de Reynolds, Re =
ρU L , μ
se expresan como ∇∗ v ∗ = 0 , ∂v∗ 1 ∗2 ∗ ∇ v . = −∇∗ p∗ + ∗ ∂t Re
1.5
Ejercicios propuestos
1. Adimensionaliza la ecuación del muelle m
d2 x = −k x, d t2
x(0) = x0 ,
x (0) = v0
y resuélvela. Considera el caso particular: m = 0.3 Kg, k = 3N/m, x0 = 30 cm, v0 = −0.2 m/s y escribe la solución, x(t), con sus unidades. 2. Adimensionaliza la ecuación de conservación de la energía para un fluido dT = λ∇2 T + Φ , dt de forma similar a como se ha hecho para las ecuaciones de continuidad y de conservación del momento. Para ello, considera la temperatura adimensional T ∗ = T /T0 , donde T0 es una temperatura de referencia. ρcp
3. La siguiente ecuación diferencial constituye un modelo para la dinámica de las reacciones químicas en un reactor de flujo continuo: ∂C ∂2C ∂C = D 2 − kC − , ∂x ∂x ∂t donde u es la velocidad, D es el coeficiente de difusión, k es el ritmo de reacción, x es la distancia a lo largo del reactor y C es la concentración (adimensional) de un determinado compuesto químico en el reactor. u
27
Capítulo 1. Introducción a la modelización matemática en la Ingeniería
a) Determina las dimensiones apropiadas para D y k. b) Escribe esta ecuación en forma adimensional utilizando una longitud L y la velocidad media V como magnitudes para definir las variables adimensionales. 4. La ecuación diferencial que describe el movimiento bidimensional en el plano X − Y de un fluido compresible no viscoso es ∂2φ ∂t2
+
∂ 2 u + v2 + ∂t +
∂2φ ∂x2
2 ∂2φ ∂2φ v − a2 + 2u v 2 ∂y ∂x∂y u 2 − a2
= 0,
donde φ es el potencial de velocidades y a es la velocidad del sonido en el gas (variable). Adimensionaliza esta relación, utilizando como parámetros L para longitud y a0 para la velocidad de entrada del sonido para definir las variables adimensionales. 5. La ecuación diferencial que describe las vibraciones de pequeña amplitud y(x, t) de una viga tiene la forma ρA
∂4y ∂2y +EI 4 =0 , 2 ∂t ∂x
donde ρ es la densidad del material, A es el área de la sección recta, I es el momento de inercia y E el módulo de Young. Utiliza las cantidades ρ, E y A para adimensionalizar y, x y t, y escribe la ecuación diferencial en forma adimensional.
28
Capítulo 2
Resolución de sistemas de ecuaciones lineales 2.1
Introducción
Muchos problemas de ingeniería, como veremos más adelante, requieren plantear y resolver un sistema de ecuaciones algebraicas. Se llama sistema lineal de n ecuaciones y n incógnitas a un conjunto de n igualdades de la forma ⎫ a11 x1 + a12 x2 + a13 x3 + · · · + a1n xn = b1 ⎪ ⎪ ⎪ a21 x1 + a22 x2 + a23 x3 + · · · + a2n xn = b2 ⎬ .. ⎪ . ⎪ ⎪ ⎭ an1 x1 + an2 x2 + an3 x3 + · · · + ann xn = bn donde aij , i, j = 1, 2, . . . , n, son los coeficientes del sistema, xi , i = 1, 2, . . . , n, las incógnitas y bi , i = 1, 2, . . . , n, los términos independientes. Habitualmente usaremos la notación matricial: ⎞⎛ ⎛ x1 a11 a12 a13 · · · a1n ⎜ a21 a22 a23 · · · a2n ⎟ ⎜ x2 ⎟⎜ ⎜ ⎜ .. .. .. .. .. ⎟ ⎜ .. ⎝ . . . . . ⎠⎝ . an1 an2 an3 · · · ann xn A
x
⎞
⎛
⎟ ⎜ ⎟ ⎜ ⎟=⎜ ⎠ ⎝
b1 b2 .. .
⎞ ⎟ ⎟ ⎟. ⎠
bn b
29
Capítulo 2. Resolución de sistemas de ecuaciones lineales
Así, un sistema de ecuaciones lineales tiene la forma genérica Ax = b,
(2.1)
donde A es la matriz de coeficientes del sistema y b el vector de términos independientes. Si A es invertible, formalmente la solución de este sistema se puede obtener como x = A−1 b , pero en la mayoría de ocasiones no resulta conveniente calcular la matriz inversa, A−1 , para resolver el sistema y se recurre a técnicas alternativas. Nosotros en particular estudiaremos dos tipos de métodos para resolver los sistemas de ecuaciones lineales: métodos directos y métodos iterativos. Los métodos directos obtienen la solución exacta de (2.1) siempre que todas las operaciones se puedan hacer sin errores de redondeo, es decir, trabajemos con aritmética exacta. Los métodos iterativos construyen una sucesión de aproximaciones a la solución exacta del sistema.
2.2
Métodos directos para la resolución de sistemas lineales
Generalmente, los métodos directos se basan en transformar el sistema de ecuaciones inicial en un sistema equivalente (o sea, que tenga las mismas soluciones) que se pueda resolver más fácilmente. Para ello, se hace uso de las siguientes propiedades: • Dado un sistema de ecuaciones, si a una de las ecuaciones se le suma una combinación lineal de las ecuaciones restantes, el sistema de ecuaciones resultante es equivalente al sistema inicial. • Si se intercambian las ecuaciones de un sistema de ecuaciones, el sistema resultante es equivalente al inicial. • Si se multiplica una ecuación de un sistema por una constante no nula, se obtiene un sistema equivalente. Estas propiedades son las que utiliza el método de triangularización de Gauss.
30
2.2 Métodos directos para la resolución de sistemas lineales
2.2.1
Algoritmo de Gauss
Recordemos cómo funciona este método con un ejemplo. Ejemplo 2.1 Resolver el sistema ⎞ ⎛ ⎞ ⎛ ⎞⎛ 7 10 −7 0 x1 ⎝ −3 2 6 ⎠ ⎝ x2 ⎠ = ⎝ 4 ⎠ , x3 6 5 −1 5
(2.2)
utilizando el método de triangularización de Gauss. Solución: Si en el sistema (2.2) restamos obtenemos el sistema ⎛ 10 −7 ⎝ 0 −0.1 5 −1
−3/10 veces la primera ecuación a la segunda ⎞ ⎛ ⎞ ⎞⎛ 7 0 x1 6 ⎠ ⎝ x2 ⎠ = ⎝ 6.1 ⎠ . x3 6 5
Ahora restamos 5/10 veces la primera ecuación a la tercera y obtenemos el sistema equivalente ⎛ ⎞⎛ ⎞ ⎛ ⎞ 10 −7 0 x1 7 ⎝ 0 −0.1 6 ⎠ ⎝ x2 ⎠ = ⎝ 6.1 ⎠ . 0 2.5 5 x3 2.5 Por último, si a la tercera ecuación la restamos −2.5/0.1 veces la segunda se llega al sistema ⎛ ⎞⎛ ⎞ ⎛ ⎞ 10 −7 0 x1 7 ⎝ 0 −0.1 6 ⎠ ⎝ x2 ⎠ = ⎝ 6.1 ⎠ . 0 0 155 x3 155 Con lo que hemos llegado a un sistema de ecuaciones equivalente al inicial cuya matriz de coeficientes es una matriz triangular superior, ⎫ 10x1 − 7x2 =7 ⎬ 6x3 = 6.1 − 0.1x2 + . ⎭ 155x3 = 155 Este tipo de sistemas tiene una solución sencilla. Se empieza despejando la última ecuación, la solución obtenida se utiliza para despejar la penúltima ecuación y así sucesivamente.
31
Capítulo 2. Resolución de sistemas de ecuaciones lineales
Aplicando dicho procedimiento al sistema que acabamos de obtener, resulta, 155x3 = 155 → x3 = 1 −0.1x2 + 6x3 = 6.1 → −0.1x2 + 6 = 6.1 → x2 = −1 10x1 − 7x2 = 7 → 10x1 + 7 = 7 → x1 = 0 El método utilizado para resolver el sistema cuya matriz de coeficientes es triangular superior se llama el método de sustitución regresiva. Si la matriz resultante de la triangularización fuese triangular inferior, se puede obtener la solución del sistema mediante un procedimiento similar que, en este caso, se llama sustitución progresiva. De forma esquemática, el algoritmo de Gauss se estructura del siguiente modo: Dado un sistema Ax = b, se considera la matriz ampliada del sistema (A|b) , y se realizan los siguientes pasos: • Para cada fila i se elige un pivote, aii . Si aii = 0 se intercambian filas. • Se anulan los elementos por debajo del pivote. • Se procede de forma análoga hasta la fila n-ésima. • El sistema resultante es equivalente al de partida y su matriz asociada es triangular superior. Para resolver este sistema se puede usar el método de sustitución regresiva.
2.2.2
Factorización LU de una matriz
Denotemos por L y U a ⎛ l11 0 · · · ⎜ ⎜ l21 l22 L=⎜ ⎜ . .. .. ⎝ .. . . ln1 ln2 · · ·
matrices triangulares inferiores y ⎞ ⎛ u11 u12 0 ⎜ .. ⎟ ⎜ 0 u22 . ⎟ ⎟, U =⎜ ⎟ ⎜ . .. ⎝ .. 0 ⎠ . 0 0 lnn
superiores dadas por ⎞ ··· u1n ⎟ .. ⎟ . ⎟. ⎟ .. . un−1,n ⎠ ··· unn
(L y U vienen de las palabras inglesas lower y upper). Como hemos visto, los sistemas Lx = b y U x = b son inmediatos de resolver y, por tanto, si podemos descomponer la matriz A en la forma A = LU podremos resolver 32
2.2 Métodos directos para la resolución de sistemas lineales
nuestro sistema en dos pasos. Si la matriz A es no singular esta descomposición es siempre posible (en algunos casos se requiere un cambio de filas y/o columnas). El siguiente paso es escribir los coeficientes lij , uij en términos de los coeficientes aij . Como el problema está sobredeterminado (hay más coeficientes lij , uij que coeficientes aij ) tenemos cierta libertad en la elección de algunos de éstos. Nosotros tomaremos siempre lii = 1, que se corresponde con el llamado método de Doolite (también es posible tomar, por ejemplo, uii = 1 o uii = lii ). Las siguientes fórmulas recursivas nos permiten obtener los coeficientes de las matrices L y U a partir de los coeficientes de la matriz A: u1j
=
a1j ,
uij
=
aij −
i−1
j ≥ i,
lik ukj ,
i>1,
k=1
lii lij
=
1,
=
1 ujj
aij −
i−1
lik ukj
,
j
k=1
Este algoritmo permite obtener cada coeficiente a partir de coeficientes que ya han sido calculados. Si ujj = 0 o toma valores muy pequeños aparecerá una singularidad y hay que reordenar la matriz A para evitar que esto ocurra. Vamos a ilustrar con un ejemplo sencillo los pasos a seguir para obtener esta descomposición. Ejemplo 2.2 Hallar la descomposición LU de la matriz ⎛ ⎞ 10 −7 0 2 6 ⎠, A = ⎝ −3 5 −1 5 que es la matriz de coeficientes del sistema (2.2). Solución: La matriz A se puede descomponer como el producto A = L1 A1 , con
⎛
1
3 L1 = ⎝ − 10 0
⎞ 0 0 1 0 ⎠ , 0 1
⎛
10 A1 = ⎝ 0 5
−7 −0.1 −1
⎞ 0 6 ⎠ . 5 33
Capítulo 2. Resolución de sistemas de ecuaciones lineales
Por otra parte A1 = L2 A2 , con
⎛
1 L2 = ⎝ 0
5 10
⎞ 0 0 1 0 ⎠ , 0 1
⎛
10 −7 A2 = ⎝ 0 −0.1 0 2.5
⎞ 0 6 ⎠ . 5
Por último, A2 = L3 U , con
⎛
1 L2 = ⎝ 0 0
0 1 − 2.5 0.1
⎞ 0 0 ⎠ , 1
⎛
10 U =⎝ 0 0
−7 −0.1 0
⎞ 0 6 ⎠ . 155
Con lo que tenemos que A = L1 L2 L3 U = LU , donde U es la matriz triangular superior resultante al aplicar el método de Gauss y ⎛ ⎞ 1 0 0 ⎜ 3 1 0 ⎟ L = ⎝ − 10 ⎠ , 5 2.5 − 1 10 0.1 es una matriz triangular inferior, cuyos elementos son los factores utilizados para triangularizar la matriz A. Si al aplicar el método de Gauss no hace falta intercambiar filas, este proceso es general y permite descomponer una matriz cuadrada A como producto de una matriz triangular inferior, L, por una matriz triangular superior, U . A partir de la descomposición LU de A, se puede resolver el sistema Ax = b del siguiente modo: Ax = b −→ L U x = b. y
Se resuelve Ly = b por el método de sustitución progresiva y posteriormente se resuelve el sistema U x = y por el método de sustitución regresiva.
34
2.2 Métodos directos para la resolución de sistemas lineales
2.2.3
Pivotación
Los elementos de la diagonal de la matriz U de la descomposición LU de la matriz A se llaman pivotes. En el algoritmo de Gauss se realizan divisiones por los distintos pivotes, de este modo, el algoritmo no podrá llevarse a cabo si alguno de los pivotes es cero. Además, es lógico pensar que si alguno de los pivotes es muy pequeño se producirán errores. Veamos un ejemplo. Ejemplo 2.3 La solución exacta del sistema ⎞ ⎛ ⎞ ⎞⎛ ⎛ 7 10 −7 0 x1 ⎝ −3 2.099 6 ⎠ ⎝ x2 ⎠ = ⎝ 3.901 ⎠ , x3 6 5 −1 5 es x = (0, −1, 1). Resolver el sistema mediante el método de Gauss con una aritmética de 5 dígitos significativos y comparar la solución obtenida con la solución exacta. Solución: Aplicando el método de Gauss con 5 dígitos significativos ⎛ ⎞ ⎛ 10 −7 0 10 −7 7 ⎝ −3 2.099 6 3.901 ⎠ ≈ ⎝ 0 −0.001 6 5 −1 5 0 2.5 ⎛ ⎞ 10 −7 0 7 ⎝ 0 −0.001 ⎠. 6.001 6 0 0 1.5005 104 1.5004 104
tenemos ⎞ 0 7 6 6.001 ⎠ ≈ 5 2.5
Al hacer el cálculo para la sustitución regresiva, se tiene x3 =
1.5004 104 = 0.99993 , 1.5005 104
que comparado con el resultado exacto, x3 = 1, nos da un resultado aceptable. Para x2 , se tiene −0.001x2 + (6)(0.99993) = 6.001 , o sea, x2 = −1.5 , que ya no es un resultado aceptable, comparado con el valor exacto x2 = −1. Este problema se debe principalmente a la propagación del error debida a la división por el pivote 0.001. Esto se resuelve intercambiando la segunda ecuación por la tercera, ya que al realizar la triangularización ya no se obtiene un pivote tan pequeño. Esta estrategia de intercambiar filas se conoce como pivotación. 35
Capítulo 2. Resolución de sistemas de ecuaciones lineales
Una estrategia que se suele utilizar para evitar estos problemas del algoritmo de Gauss es la estrategia de pivotación parcial, que consiste en tomar como pivote en el paso k-ésimo del algoritmo de triangularización el elemento más grande en valor absoluto en la parte no reducida de la columna k-ésima. La fila que contiene este pivote se intercambia con la fila k-ésima para poner el pivote en la posición (k, k) de la matriz. Los mismos intercambios se han de llevar a cabo en el vector b. Otra estrategia, conocida como pivotación completa, consiste en elegir como pivote en el paso k-ésimo al elemento de máximo valor absoluto de la submatriz activa (la que resulta de eliminar las k − 1 primeras filas y primeras columnas). La fila que contiene a este pivote se intercambia con la fila k-ésima y la columna que lo contiene con la columna k-ésima para poner el pivote en la posición (k, k) de la matriz. Hay que tener en cuenta que el cambio de fila también se realiza sobre el vector b. La pivotación completa se utiliza menos que la parcial, ya que, aunque se obtienen mejores resultados, es mucho más costosa.
2.2.4
Errores y número de condición
Cuando se obtiene la solución numérica de un sistema de ecuaciones, se obtiene un valor aproximado de la solución, x∗ , mientras que la solución exacta, x, satisface x = A−1 b . Usualmente se tienen dos magnitudes que nos dan una idea del error cometido, el error, definido como e = x − x∗ , y el residuo
r = b − Ax∗ .
Estas dos magnitudes no tienen porqué ser pequeñas al mismo tiempo si se trabaja con aritmética finita. Por otra parte, cuando se están resolviendo problemas prácticos los coeficientes de un sistema de ecuaciones y los términos independientes están afectados de un cierto error. Por ello, es interesante preguntarse cómo se puede medir lo que cambia la solución, x, de un sistema si se hacen cambios en A y/o en b. Consideramos Ax = b , y el sistema (A + δA)ˆ x = b + δb . Definiendo δx = x ˆ − x, se tiene que ˆ + δb). δx = A−1 (−δA x 36
(2.3)
2.2 Métodos directos para la resolución de sistemas lineales
Introducimos el concepto de norma matricial Ax A ≡ m´ax , x
∀x = 0 ,
que cumple propiedades similares a la norma de vectores. Tomando normas en la ecuación (2.3) se tiene x + δb), δx ≤ A−1 (δA ˆ o sea,
δx ≤ A−1 A ˆ x
A la cantidad
δA δb + A A ˆ x
(2.4) .
(2.5)
κ(A) = A A−1 ,
se le llama número de condición de la matriz A y nos da una idea de la propagación del error en la solución de un sistema de ecuaciones lineales. El número de condición es un número difícil de calcular y se utilizan estimaciones para este número. Generalmente el número de condición de una matriz es muy alto si la matriz es casi singular.
2.2.5
Matrices especiales
En este apartado veremos cómo es posible simplificar los métodos que hemos visto hasta ahora cuando la matriz de coeficientes tiene una estructura particular. Matrices tridiagonales Un caso especial de sistemas de ecuaciones que aparecen frecuentemente son aquellos cuya matriz de coeficientes es tridiagonal, o sea, un sistema de ecuaciones con la siguiente estructura ⎞ ⎛ ⎞ ⎞⎛ x ⎛ d1 1 b1 c1 0 · · · ⎜ ⎟ x2 ⎟ ⎟⎜ ⎜ a 1 b2 c 2 · · · ⎟ ⎜ d2 ⎟ ⎟⎜ ⎜ ⎜ .. ⎟ ⎜ .. ⎟ ⎟ ⎜ ··· ⎟=⎜ ⎟ . (2.6) ⎟⎜ ⎜ ⎜ . ⎟ ⎜ . ⎟ ⎝ an−2 bn−1 cn−1 ⎠ ⎝ xn−1 ⎠ ⎝ dn−1 ⎠ 0 an−1 bn xn dn
37
Capítulo 2. Resolución de sistemas de ecuaciones lineales
Para estos sistemas, la descomposición LU adopta demos considerar ⎛ ⎞ ⎛ 1 0 0 ··· 0 u11 ⎜ ⎜ .. ⎟ ⎜ l21 1 ⎜ 0 0 . ⎟ ⎜ ⎟ ⎜ ⎜ ⎟ ⎜ . .. L = ⎜ 0 ... ... ⎟ , U = ⎜ .. . 0 ⎜ ⎟ ⎜ ⎜ . ⎟ ⎜ . .. ⎝ .. ⎠ ⎝ .. . 1 0 0 ··· 0 ln,n−1 1 0
una forma simple, ya que pou12
0
···
u22 .. . .. . 0
u23 .. .
..
.
0
..
.
un−1,n unn
···
0
0 .. .
⎞ ⎟ ⎟ ⎟ ⎟ ⎟. ⎟ ⎟ ⎠
Si realizamos el producto de matrices LU e igualamos a la matriz A obtenemos el siguiente esquema recursivo ui,i+1
=
li+1,i
=
u11
=
ci , ai , uii b1 ,
uii
=
bi − li,i−1 ui−1,i ,
i = 1, . . . , n − 1 , i = 2, . . . , n .
Matrices simétricas definidas positivas Recordemos que una matrix A es simétrica si cumple que A = AT . Además diremos que una matriz es definida positiva si cumple xT Ax > 0 , ∀x = 0 . Si A es una matriz simétrica y definida positiva se puede encontrar una matriz triangular inferior, L, de forma que LLT = A . Esta descomposición se denomina descomposición de Cholesky de la matriz A. Veamos cómo se puede calcular la matriz L. Para ello, consideremos un caso 3 × 3, ⎛ ⎞⎛ ⎞ ⎛ ⎞ l11 0 0 l11 l21 l31 a11 a12 a13 ⎝ l21 l22 0 ⎠ ⎝ 0 l22 l32 ⎠ = ⎝ a21 a22 a23 ⎠ , 0 0 l33 a31 a32 a33 l31 l32 l33
38
2.2 Métodos directos para la resolución de sistemas lineales
calculando el producto, se tienen las relaciones a11
=
2 l11 ,
a22
=
2 2 l21 + l22 ,
a33
=
2 2 2 l31 + l32 + l33 ,
a12
= = =
l11 l21 , l11 l31 , l21 l31 + l22 l32 ,
a13 a23 o sea, l11
=
l21
=
l22
=
l31
=
l32
=
l33
=
1
(a11 ) 2 , a12 , l11
1 2 2 a22 − l21 , a13 , l11 a23 − l21 l31 , l22
1 2 2 2 a33 − l31 − l32 .
Para una matriz n × n, los elementos de L se pueden calcular mediante las expresiones l11
=
lj1
=
lii
=
lji
=
1
(a11 ) 2 , a1j , j = 2, . . . , n l11 12 i−1 2 aii − lik , 1 lii
k=1
aij −
i−1
lik ljk
,
j = i + 1, i + 2, . . . , n .
k=1
Si se tiene un sistema Ax = b , cuya matriz de coeficientes es simétrica y definida positiva, para su resolución se puede obtener la factorización de Cholesky de A, A = LLT , con lo que se tiene LLT x = b . Así, primero se resuelve Ly = b mediante el método de sustitución progresiva y, posteriormente, LT x = y mediante el método de sustitución regresiva. 39
Capítulo 2. Resolución de sistemas de ecuaciones lineales
Algunas ventajas e inconvenientes del método son: • Menor coste (aproximadamente la mitad) que utilizar el algoritmo de Gauss convencional. • No utiliza técnicas de pivotamiento. • El algoritmo es estable (errores de redondeo pequeños). • Tenemos que comprobar la simetría de la matriz (fácil) y que ésta es definida positiva (difícil).
2.3
Métodos iterativos
Los métodos iterativos para la resolución de sistemas de ecuaciones lineales suelen utilizarse para problemas de gran dimensión, ya que usan menos memoria y suelen ser más rápidos que los métodos directos. A continuación veremos alguno de los métodos iterativos más sencillos. Se parte de un sistema de ecuaciones de la forma Ax = b .
(2.7)
Para resolver el sistema lineal buscaremos una sucesión x0 , x1 , . . ., que converja a la solución de (2.7). Así, diremos que el método iterativo converge si existe un vector x tal que l´ım xk = x, k→+∞
tal que Ax = b. Para construir los métodos iterativos realizamos la siguiente descomposición de la matriz de coeficientes A=D−E−F , donde D es la diagonal de A, −E es la parte estrictamente triangular inferior de A y −F es la parte estrictamente triangular superior. Se supone que los elementos de D son todos no nulos.
2.3.1
Algoritmo de Jacobi
Si en el sistema Ax = b, se cumple que aii = 0, i = 1, 2, . . . , n, de la ecuación i-ésima ai1 x1 + · · · + aii xi + · · · + ain xn = bi , 40
2.3 Métodos iterativos
podemos despejar xi , obteniendo ⎛ ⎞ n 1 ⎝ xi = bi − aij xj ⎠ , aii
i = 1, 2, . . . , n.
j=1,j=i
El método de Jacobi parte de una solución inicial x0 , y para i = 1, . . . , n, calcula ⎛ ⎞ n 1 ⎝bi − ⎠, xki = k = 1, 2, . . . (2.8) aij xk−1 j aii j=1,j=i
Para cada i = 1, . . . , n, (2.8) se puede reescribir como ⎛ ⎞ n ⎠, k = 1, 2, . . . aij xk−1 aii xki = ⎝bi − j j=1,j=i
En forma matricial el método de Jacobi es de la forma Dxk = (E + F )xk−1 + b,
k = 1, 2, . . .
O equivalentemente xk = D−1 (E + F )xk−1 + D−1 b,
k = 1, 2, . . .
Para dar condiciones de convergencia para este método se introducen las matrices diagonal dominantes. De este modo, se dice que una matriz cuadrada A es estrictamente diagonal dominante si para cada i = 1, 2, . . . , n, satisface |aii | >
n
|aij | .
j=1,j=i
Teorema 2.1 Si A es estrictamente diagonal dominante, entonces la sucesión que resulta de la iteración de Jacobi converge a la solución de Ax = b, cualquiera que sea la solución inicial, x0 . Observación: Si A no es diagonal dominante se puede reordenar, intercambiando filas o columnas y puede que, de este modo, la matriz resultante lo sea.
41
Capítulo 2. Resolución de sistemas de ecuaciones lineales
2.3.2
Algoritmo de Gauss-Seidel
Otro método similar al método de Jacobi es el método de Gauss-Seidel. Hemos de tener en cuenta que en el método de Jacobi para i = 1, . . . , n ⎛ ⎞ n 1 ⎝ ⎠, xki = bi − k = 1, 2, . . . aij xk−1 j aii j=1,j=i
, pero xk1 ya se ha calculado. Si el método es para calcular xk2 se utiliza xk−1 1 k . Con esta idea se obtiene el método de convergente, es mejor usar x1 que xk−1 1 Gauss-Seidel, que es de la forma ⎛ ⎞ n 1 ⎝b 1 − ⎠, xk1 = k = 1, 2, . . . a1j xk−1 j a11 j=2 ⎛ ⎞ (2.9) i−1 n 1 ⎝bi − ⎠ , i > 1, k = 1, 2, . . . xki = aij xkj − aij xk−1 j aii j=1 j=i+1 Este método en forma matricial se escribe de la forma (D − E)xk = F xk−1 + b .
(2.10)
Análogamente, se puede definir otro método de Gauss-Seidel como sigue (D − F )xk = Exk−1 + b .
(2.11)
El siguiente resultado nos da una condición para que este método converja. Teorema 2.2 Si A es estrictamente diagonal dominante, entonces la sucesión que resulta de la iteración de Gauss-Seidel converge a la solución de Ax = b, cualquiera que sea la solución inicial x0 .
2.3.3
Algoritmos SOR y SSOR
El método SOR (successive over relaxation) se basa en el método de Gauss-Seidel introduciendo un factor de escala que reduce más rápidamente el error de la aproximación. En primer lugar tomamos una iteración de Gauss-Seidel ⎛ ⎞ i−1 n 1 ⎝bi − ⎠ , i = 1, . . . , n, x ˆki = aij xkj − aij xk−1 j aii j=1 j=i+1 42
2.3 Métodos iterativos
y calculamos k
+ω x ˆi − xk−1 xki = xk−1 , i i
i = 1, . . . , n,
(2.12)
donde ω es un parámetro que se elige para acelerar la convergencia. Hemos de tener en cuenta lo siguiente: • Si w = 1, es el método de Gauss-Seidel. • Si 0 < w < 1, se llama método de subrelajación. Puede usarse para obtener convergencia cuando el método de Gauss-Seidel no converge. • Si 1 < w, se llama método de sobrerrelajación, y se usa para acelerar la convergencia cuando el método de Gauss-Seidel converge. La convergencia de este método la garantiza el siguiente resultado. Teorema 2.3 Si A es definida positiva y 0 < ω < 2, entonces la sucesión que resulta de la iteración del método SOR converge a la solución de Ax = b, cualquiera que sea la solución inicial, x0 . Utilizando (2.12) y (2.10) tenemos
xk = xk−1 + ω D−1 b + Exk + F xk−1 − xk−1 , y premultiplicando por la matriz D, Dxk = (D − ωD) xk−1 + ωb + ωExk + ωF xk−1 . Por tanto, el método SOR admite la expresión matricial siguiente (D − ωE)xk = (ωF + (1 − ω)D) xk−1 + ωb . Utilizando (2.12) y (2.11), se puede definir otro método SOR de la forma (D − ωF )xk = (ωE + (1 − ω)D)xk−1 + ωb . Un método SOR simétrico, SSOR, se define por las ecuaciones (D − ωE)xk−1/2
=
(ωF + (1 − ω)D)xk−1 + ωb ,
(D − ωF )xk
=
(ωE + (1 − ω)D)xk−1/2 + ωb .
43
Capítulo 2. Resolución de sistemas de ecuaciones lineales
Ejemplo 2.4 La solución del sistema lineal 4x1 3x1
+ + −
3x2 4x2 x2
− +
x3 4x3
= = =
24, 30, −24,
es (3, 4, −5)T . Utilizar los métodos de Gauss-Seidel y SOR con ω = 1.25 para resolver el sistema con una precisión de 7 decimales, tomando para ambos métodos x0 = (1, 1, 1)T . Solución: Mediante el método de Gauss-Seidel se obtienen los resultados de la siguiente tabla, k xk1 xk2 xk3
0 1 1 1
1 5.2500000 3.8125000 −5.0468750
2 3.1406250 3.8828125 −5.0292969
3 3.0878906 3.9267578 −5.0183105
7 3.0134110 3.9888241 −5.0027940
Si utilizamos el método SOR con ω = 1.25 se obtienen los siguientes resultados k xk1 xk2 xk3
0 1 1 1
1 6.3125000 3.5195313 −6.6501465
2 2.6223145 3.9585266 −4.6004238
3 3.1333027 4.0102646 −5.0966863
7 3.0000498 4.0002586 −5.0003486
Para este ejemplo se puede comprobar que el método de Gauss-Seidel converge con 34 iteraciones y el método SOR con 14 iteraciones.
2.4
Ejercicios resueltos
Ejercicio 2.1 Considera el siguiente sistema de ecuaciones lineales, Ax = b (la solución del sistema se incluye para comprobar los resultados): ⎛
4 −1 ⎝ −1 4 0 −1
44
⎞⎛ ⎞ ⎛ ⎞ 0 x1 2 −1 ⎠ ⎝ x2 ⎠ = ⎝ 8 ⎠ 4 x3 −6
⎛ ⇒
⎞ ⎛ ⎞ x1 1 ⎝ x2 ⎠ = ⎝ 2 ⎠ . x3 −1
2.4 Ejercicios resueltos
Resuélvelo utilizando los siguientes métodos directos, teniendo en cuenta que la matriz A es tridiagonal simétrica y definida positiva: a) Algoritmo de Gauss. b) Factorización LU . c) Factorización de Cholesky. Solución:
a) Algoritmo de Gauss. Con ayuda de la matriz ampliada tenemos ⎛
4 −1 ⎝ −1 4 0 −1
⎞ ⎛ ⎞ ⎛ 4 −1 0 4 2 2 0 8 ⎠ ≈ ⎝ 0 15 −4 34 ⎠ ≈ ⎝ 0 −1 4 −6 0 −1 4 −6 0
⎞ −1 0 2 15 −4 34 ⎠ 0 56 56
y por sustitución regresiva se obtiene la solución. b) Factorización LU . Por ser ⎛ 1 ⎝ l21 0
una matriz tridiagonal consideraremos ⎞⎛ ⎞ ⎛ 0 0 u11 u12 0 u11 1 0 ⎠ ⎝ 0 u22 u23 ⎠ = ⎝ l21 u11 0 0 u33 0 l31 1
u12 l21 u12 + u22 l32 u22
⎞ 0 ⎠. u23 l32 u23 + u33
Igualando con la matriz A podemos calcular los coeficientes lij , uij en la siguiente secuencia u12 = −1,
u11 = 4,
l21 u11 = −1 → l21
u23 = −1,
1 =− , 4
l21 u12 + u22 = 4 → u22 =
15 , 4
4 , 15 56 , = 4 → u33 = 15
l32 u22 = −1 → l32 = − l32 u23 + u33 esto es
⎛
1 L = ⎝ − 14 0
0 1 4 − 15
⎞ 0 0 ⎠, 1
⎛
4 U =⎝ 0 0
−1 15 4
0
⎞ 0 −1 ⎠ . 56 15
45
Capítulo 2. Resolución de sistemas de ecuaciones lineales
Resolvemos ahora el sistema Ly = b por sustitución progresiva, esto es ⎛ ⎞⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ 1 0 0 2 y1 2 y1 ⎝ −1 ⎠, 1 0 ⎠ ⎝ y2 ⎠ = ⎝ 8 ⎠ ⇒ ⎝ y2 ⎠ = ⎝ 17 4 2 4 −6 y3 y3 − 56 0 − 15 1 15 y finalmente resolvemos el sistema U x = y por sustitución regresiva ⎛ ⎞⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ 4 −1 0 2 x1 x1 1 ⎝ 0 15 −1 ⎠ ⎝ x2 ⎠ = ⎝ 17 ⎠ ⇒ ⎝ x2 ⎠ = ⎝ 2 ⎠ . 4 2 56 −1 x3 x3 − 56 0 0 15 15 c) Factorización de Cholesky. Por tratarse de una matriz simétrica definida positiva podemos aplicar la descomposición de Cholesky. Además, por ser una matriz tridiagonal consideraremos la siguiente descomposición ⎛ ⎞⎛ ⎞ ⎛ 2 ⎞ l11 0 0 l11 l12 0 l11 l21 0 l11 2 2 ⎝ l21 l22 0 ⎠ ⎝ 0 l22 l32 ⎠ = ⎝ l21 l11 l21 + l22 l22 l32 ⎠ . 2 2 0 0 l33 0 l32 l22 l32 + l33 0 l32 l33 Igualando con la matriz A podemos calcular los coeficientes lij en la siguiente secuencia 2 l11 = 4 → l11 = 2,
1 l11 l21 = −1 → l21 = − , 2 √ 15 2 2 , l21 + l22 = 4 → l22 = 2 2 l22 l32 = −1 → l32 = − √ , 15 56 2 2 l32 , + l33 = 4 → l33 = 15 esto es
⎛
2 ⎜ −1 L=⎝ 2 0
46
0
√
15 2 − √215
0 0
⎞ ⎟ ⎠.
56 15
Resolvemos ahora el sistema, Ly = b ⎞⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ 2 0 0 1 2 y1 y1 √ 15 ⎜ √17 ⎟ ⎟ ⎜ −1 ⎝ 2 2 0 ⎠ ⎝ y2 ⎠ = ⎝ 8 ⎠ ⇒ ⎝ y2 ⎠ = ⎝ 15 ⎠ , 56 −6 y3 y3 − 56 0 − √215 15 15
2.4 Ejercicios resueltos
y finalmente resolvemos el sistema LT x = y ⎛ ⎞⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ 2 √− 12 0 1 x x1 1 1 17 15 2 ⎜ 0 ⎟ ⎜ √ − √15 ⎟ 2 ⎝ ⎠ ⎝ x2 ⎠ = ⎝ 15 ⎠ ⇒ ⎝ x2 ⎠ = ⎝ 2 ⎠ . 56 56 −1 x3 x3 − 15 0 0 15 Ejercicio 2.2 Considera el sistema 4x1 + 3x2 3x1 + 4x2 − x3 −x2 + 4x3
=
24 ,
=
30 ,
=
−24 .
a) Resuélvelo utilizando la factorización LU . b) Considera la factorización de Cholesky y halla la correspondiente matriz L. Solución:
a) Por ser una matriz tridiagonal, consideramos la factorización LU del Ejercicio 2.1. Igualando con la matriz A podemos calcular los coeficientes lij , uij en la siguiente secuencia u23 = −1,
u11 = 4, l21 u11
u12 = 3, 3 = 3 → l21 = , 4
l21 u12 + u22 = 4 → u22 =
7 , 4
4 l32 u22 = −1 → l32 = − , 7 l32 u23 + u33 = 4 → u33 =
24 , 7
esto es ⎛ L=⎝
1 3 4
0
0 1 − 47
⎞ 0 0 ⎠, 1
⎛
4 U =⎝ 0 0
3 7 4
0
⎞ 0 −1 ⎠ . 24 7
Resolviendo el sistema Ly = b por sustitución progresiva se obtiene ⎞ ⎛ ⎞ ⎛ 24 y1 ⎝ y2 ⎠ = ⎝ 12 ⎠ y3 − 120 7
47
Capítulo 2. Resolución de sistemas de ecuaciones lineales
y del sistema U x = y por sustitución regresiva obtenemos ⎛ ⎞ ⎛ ⎞ x1 3 ⎝ x2 ⎠ = ⎝ 4 ⎠ . x3 −5 b) Considerando la factorización de Cholesky del Ejercicio 2.1, e igualando con la matriz A podemos calcular los coeficientes lij en la siguiente secuencia 2 l11 = 4 → l11 = 2,
3 , 2 √ 7 2 2 , + l22 = 4 → l22 = l21 2 2 l22 l32 = −1 → l32 = − √ , 7 24 2 2 l32 , + l33 = 4 → l33 = 7 l11 l21 = 3 → l21 =
esto es
⎛ ⎜ L=⎝
2 3 2
0
0
√
7 2 − √27
0 0
⎞ ⎟ ⎠.
24 7
Ejercicio 2.3 Considera el sistema del Ejercicio 2.2 y aplica dos iteraciones del método de Jacobi para obtener x1 , x2 partiendo de las condiciones iniciales: ⎛ ⎞ 4 x0 = ⎝ 4 ⎠ . −4
48
Solución: El esquema ⎛ 4 ⎝ 0 0
recursivo viene dado por: ⎞ ⎛ k+1 ⎞ ⎛ ⎞⎛ k ⎞ ⎛ ⎞ x1 x1 0 0 0 −3 0 24 ⎠ = ⎝ −3 4 0 ⎠ ⎝ xk+1 0 1 ⎠ ⎝ xk2 ⎠ + ⎝ 30 ⎠ , 2 k+1 0 4 0 1 0 −24 xk3 x3
esto es
⎛
⎞ ⎛ ⎞⎛ k ⎞ ⎛ ⎞ xk+1 x1 6 0 −3 0 1 ⎠. ⎝ xk+1 ⎠ = 1 ⎝ −3 0 1 ⎠ ⎝ xk2 ⎠ + ⎝ 15 2 2 4 k k+1 0 1 0 −6 x x3 3
2.4 Ejercicios resueltos
Si aplicamos dos iteraciones del algoritmo se obtiene: ⎛ ⎛ 27 ⎞ ⎞ 3 8 x1 = ⎝ 72 ⎠ , x2 = ⎝ 4 ⎠ . −5 − 41 8 Ejercicio 2.4 Dada la matriz tridiagonal genérica (2.6), escribe un algoritmo (independiente del lenguaje de programación) que permita calcular los coeficientes de las matrices L y U , de manera que en cada evaluación sólo se utilicen coeficientes ya evaluados o conocidos. Una vez obtenidos los coeficientes, escribe otro algoritmo que permita obtener la solución del sistema. Comparar con el algoritmo de Thomas. Solución: El siguienere algoritmo recursivo permite evaluar los coeficientes de las matrices LyU u1,1 = b1 for i = 2 : n li,i−1 = ui−1,i
ai−1 ui−1,i−1 = ci−1
uii = bi − li,i−1 ui−1,i end donde se puede comprobar cómo en cada evaluación sólo se utilizan coeficientes que han sido evaluados previamente. Una vez tenemos los coeficientes de las matrices L y U , procedemos a la resolución de los sistemas Ly = d y U x = y: y1 = d1 for i = 2 : n yi = di − li,i−1 yi−1 end yn xn = un,n for i = n − 1 : −1 : 1 1 xi = (yj − ui,i+1 xi+1 ) uj,j end Todos estos cálculos se pueden realizar de manera óptima (con respecto al número de operaciones, utilizando el menor número posible de matrices o vectores donde se almacenan los datos) utilizando el llamado algoritmo de Thomas y que, a continuación, se presenta implementado en un programa Matlab. 49
Capítulo 2. Resolución de sistemas de ecuaciones lineales
La matriz se tiene almacenada en los vectores a, b, c, y el término independiente en el vector d. Primero se copia en x el vector d x = d; luego se triangulariza la matriz y el término independiente mediante el siguiente bucle for j=1:n-1 mu=a(j)/b(j); b(j+1)=b(j+1)-mu*c(j); x(j+1)=x(j+1)-mu*x(j); end Posteriormente, se realiza la sustitución regresiva x(n)=x(n)/b(n); for j=n-1:-1:1 x(j)=(x(j)-c(j)*x(j+1))/b(j); end Este algoritmo no utiliza pivotación parcial y es mucho más rápido que el algoritmo de Gauss. Ejercicio 2.5 Considera el sistema del Ejercicio 2.1 y resuélvelo por métodos iterativos como sigue: supón que tras k iteraciones de cualquiera de los métodos nos encontramos cerca de la solución, y ésta la denotamos por ⎛ k ⎞ ⎛ ⎞ x1 1 + αk ⎝ xk2 ⎠ = ⎝ 2 + β k ⎠ . xk3 −1 + γ k Las iteraciones se paran cuando dos iteraciones consecutivas difieren menos que una cantidad que se estime suficientemente pequeña. Esto es, medimos ⎞ ⎛ k+1 ⎞ ⎛ k ⎞ ⎛ k+1 x1 − αk x1 α ⎝ xk+1 ⎠ − ⎝ xk2 ⎠ = ⎝ β k+1 − β k ⎠ . 2 xk3 γ k+1 − γ k xk+1 3 La rapidez de convergencia viene dada por cuan rápido tienden a 0 las coeficientes αk , β k , γ k según vamos realizando iteraciones. 50
2.4 Ejercicios resueltos
T
T Halla la relación entre αk+1 , β k+1 , γ k+1 y αk , β k , γ k para los siguientes métodos iterativos: a) Método de Jacobi. b) Método de Gauss-Seidel. Solución:
a) Método de Jacobi. El esquema recursivo ⎞ ⎛ ⎛ ⎞⎛ 1 + αk+1 0 4 0 0 ⎝ 0 4 0 ⎠ ⎝ 2 + β k+1 ⎠ = ⎝ 1 0 0 0 4 −1 + γ k+1
viene dado por: ⎞⎛ ⎞ ⎛ ⎞ 1 + αk 1 0 2 0 1 ⎠ ⎝ 2 + β k ⎠+ ⎝ 8 ⎠ . 1 0 −6 −1 + γ k
Operando y simplificando se obtiene ⎛ ⎞ ⎛ k+1 ⎞ βk α ⎝ β k+1 ⎠ = 1 ⎝ αk + γ k ⎠ , 4 γ k+1 βk esto es, básicamente, tras cada iteración el error se reduce por un factor entre 2 y 4. b) Método de Gauss-Seidel. El esquema recursivo ⎛ ⎞⎛ ⎞ ⎛ 1 + αk+1 4 0 0 0 1 ⎝ −1 4 0 ⎠ ⎝ 2 + β k+1 ⎠ = ⎝ 0 0 0 −1 4 0 0 −1 + γ k+1
viene dado por: ⎞⎛ ⎞ ⎛ ⎞ 1 + αk 0 2 1 ⎠ ⎝ 2 + β k ⎠+⎝ 8 ⎠ . 0 −6 −1 + γ k
Operando y simplificando se obtiene ⎛ ⎞ ⎛ k+1 ⎞ 4β k α ⎝ β k+1 ⎠ = 1 ⎝ 4γ k + β k ⎠ . 16 γ k+1 γ k + 14 β k Viendo cómo se reduce el error en iteraciones sucesivas, se puede ver que el error se reduce en un factor aproximadamente de 16. Sugerencia: Para ver mejor esta reducción, supón que ⎛ k ⎞ ⎛ 1 ⎞ α 10 ⎝ βk ⎠ = ⎝ 1 ⎠ , 20 1 γk 40 y calcula el error utilizando los algoritmos de Jacobi y de Gauss-Seidel tras dos iteraciones consecutivas. 51
Capítulo 2. Resolución de sistemas de ecuaciones lineales
1 1 con α > 1, calcula el número de α 1 condición de la matriz, κ(A) = A A−1 , en el caso en que consideremos la 1-norma, definida por A1 = m´ ax |Aij |. Ejercicio 2.6 Dada la matriz A =
i
Calcula su valor para α = 3 y α =
j
11 10 .
Solución: Por un lado tenemos que A1 = m´ ax{1 + α, 2} = 1 + α. Su matriz inversa viene dada por 1 1 −1 A−1 = −α 1 1−α de donde inmediatamente vemos que A−1 1 = κ(A) = A A−1 =
1+α α−1 .
Luego
(1 + α)2 α−1
y, por tanto, α=3
⇒ κ(A) = 8;
α=
11 10
⇒ κ(A) =
441 = 44.1 . 10
Vemos que si α se acerca a 1 o toma valores muy grandes, el valor de κ(A) crece considerablemente.
2.5
Ejercicios propuestos
1. Resuelve por el método de Gauss el sistema ⎞ ⎛ ⎞ ⎛ ⎞⎛ 4 0 2 4 x1 ⎝ 1 2 3 ⎠ ⎝ x2 ⎠ = ⎝ 3 ⎠ . 3 x3 0 0 3 2. Dada la matriz
⎛
⎞ 2 3 ⎠ , 2
3 ⎝ 0 0
0 4 0
⎛
⎞ 1 0 2 1 ⎠ , 1 2
obtén su inversa. 3. Dada la matriz
α ⎝ β 0
obtén todos los valores de α y β para los cuales la matriz es singular. 52
2.5 Ejercicios propuestos
4. Resuelve los siguientes sistemas de ecuaciones factorizados: a) ⎛
1 ⎝ 2 −1
⎞⎛ ⎞⎛ ⎞ ⎛ ⎞ 0 2 3 −1 x1 2 0 ⎠ ⎝ 0 −2 1 ⎠ ⎝ x2 ⎠ = ⎝ −1 ⎠ , 1 0 0 3 1 x3
0 1 0
b) ⎛
2 ⎝ −1 3
0 1 2
⎞⎛ 0 1 0 ⎠⎝ 0 −1 0
1 1 0
⎞⎛ ⎞ ⎛ ⎞ 1 x1 −1 2 ⎠ ⎝ x2 ⎠ = ⎝ 3 ⎠ . 1 0 x3
5. Compara la solución que se obtiene mediante el método de Gauss para los sistemas de ecuaciones x−y =1 , x−y =1 , y x − 1.01y = 0 , x − 0.99y = 0 . 6. Dado el sistema ⎞ ⎛ ⎞ ⎞⎛ ⎛ −26.38 x1 0.15 2.11 30.75 ⎝ 0.64 1.21 2.05 ⎠ ⎝ x2 ⎠ = ⎝ 1.01 ⎠ , 5.23 x3 3.21 1.53 1.04 resuélvelo utilizando el método de Gauss sin pivotación parcial y con pivotación parcial. 7. Considera el sistema de ecuaciones Ax = b , con
⎛
3 A=⎝ 2 1
2 3 2
⎞ 1 2 ⎠ , 3
⎞ 1 b=⎝ 0 ⎠ , 0 ⎛
comprueba que el método de Jacobi diverge mientras que el método de GaussSeidel converge. 8. Determina las dos primeras iteraciones del método de Jacobi para los siguientes sistemas de ecuaciones, si tomamos como vectores iniciales x0 = (0, 0, 0)T y x0 = (0, 0, 0, 0)T , respectivamente. a) 10x1 − x2 −x1 + 10x2 − 2x3 −2x2 + 10x3
=
9,
= =
7, 6. 53
Capítulo 2. Resolución de sistemas de ecuaciones lineales
b) 4x1 + x2 − x3 + x4 x1 + 4x2 − x3 − x4
=
−2 ,
=
−1 ,
−x1 − x2 + 5x3 + x4
=
0,
x1 − x2 + x3 + 3x4
=
1.
9. Dado el sistema 3x1 + 2x2 = 1 , 4x1 + 3x2 = 5 ,
calcula dos iteraciones del método SSOR partiendo del vector inicial x01 , x02 = (0, 0) y tomando ω = 1.25. 10. Dado el sistema 4x1 + 3x2
=
24 ,
3x1 + 4x2 − x3
=
30 ,
−x2 + 4x3
=
−24 ,
compara 3 iteraciones del método de SOR y el método SSOR tomando x0 = (0, 0, 0)T , y ω = 1.25. 11. Repite los cálculos del Ejercicio Resuelto 2.5 con el algoritmo de Jacobi para el sistema: ⎛
3 ⎝ −1 2
1 1 5
⎞⎛ ⎞ ⎛ ⎞ 1 x1 4 3 ⎠ ⎝ x2 ⎠ = ⎝ 4 ⎠ 1 −1 x3
y demuestra que el algoritmo es ⎛ 3 1 ⎝ 2 5 −1 1
⎛ ⇒
⎞ ⎛ ⎞ x1 1 ⎝ x2 ⎠ = ⎝ −1 ⎠ 2 x3
diverge. Intercambia ahora las filas 2 y 3, esto ⎞ ⎛ ⎞ ⎞⎛ 4 1 x1 1 ⎠ ⎝ x2 ⎠ = ⎝ −1 ⎠ , x3 4 3
que convierte la matriz en diagonal dominante, y comprueba que ahora sí converge el algoritmo de Jacobi.
54
Capítulo 3
Interpolación y aproximación de funciones 3.1
Introducción
En muchos problemas debemos trabajar con funciones cuyos valores son conocidos únicamente en un conjunto de puntos. Esto ocurre, por ejemplo, cuando realizamos medidas experimentales o cuando trabajamos con funciones muy complejas, como pueden ser las soluciones de ecuaciones diferenciales, de las que sólo podemos conocer aproximaciones a la solución en un determinado número de puntos. En tales casos es útil trabajar con funciones conocidas y sencillas que aproximen suficientemente bien nuestro problema. Un conjunto de tales funciones son el conjunto de funciones polinónicas. El Teorema de Weierstrass nos garantiza que cualquier función continua en un intervalo cerrado se puede aproximar, con cualquier precisión prefijada, por algún polinomio. Debido a la facilidad de operar con polinomios (derivar, integrar, etc.) en este capítulo nos centraremos en la aproximación de funciones por polinomios. Cuando truncamos el desarrollo de Taylor de una función, f (x), a un determinado orden, realmente lo que hacemos es aproximar la función por un polinomio. Por ejemplo, si consideramos el desarrollo hasta orden n alrededor del punto x0 , tenemos f (x) = f (x0 ) + f (x0 )(x − x0 ) + · · · +
1 n) f (x0 )(x − x0 )n + Rn (x), n!
55
Capítulo 3. Interpolación y aproximación de funciones
donde Rn (x) es el residuo, que nos permite acotar el error cometido al truncar el desarrollo, y viene dado por Rn (x) =
1 f n+1) (ξ)(x − x0 )n+1 , (n + 1)!
|ξ| ≤ |x − x0 |.
Observamos que si el valor de x toma valores distantes de x0 el error crecerá, en general, como (x − x0 )n+1 y, por tanto, nos puede dar malas aproximaciones en intervalos grandes. Además, de normal no se conoce el valor de las derivadas de la función en un punto, por lo que el desarrollo de Taylor no será de utilidad en estos casos y debemos buscar otras alternativas. En concreto, en este tema nos centraremos en aquellos problemas en los que la función es conocida en un conjunto de puntos distribuidos en una determinada región y veremos diferentes formas de aproximar la solución en esa región por interpolación. Dados los pares de números reales (x0 , f0 ), (x1 , f1 ), . . . , (xn , fn ), que frecuentemente vendrán expresados en una tabla de valores, x0 f0
x1 f1
··· ···
xn fn
la interpolación trata de resolver uno o ambos de los siguientes problemas: • Encontrar una función f (x) tal que f (xi ) = fi ,
i = 0, 1, . . . , n.
En este caso, a la función f (x) se le llama función interpolante. • Calcular f (˜ x) para un punto x ˜ distinto de xi , i = 0, 1, 2, . . . , n. El último problema veremos que puede resolverse sin necesidad de obtener explícitamente la función f (x). Cuando x ˜ se encuentra comprendido entre el mínimo y el máximo de los valores tabulados xi , se tiene propiamente el problema de interpolación. En cambio cuando x ˜ se encuentra fuera de dicho intervalo se llama problema de extrapolación. Los métodos que vamos a estudiar sirven en ambos casos, pero siempre hay que tener en cuenta que el error en la extrapolación suele ser mucho mayor que en la interpolación. Calcular f (˜ x) a partir de x ˜ es un problema de interpolación directa. En algunas ocasiones necesitaremos calcular el valor de x ˜ a partir del valor de f (˜ x), en este caso se trataría de un problema de interpolación inversa. Los datos conocidos (xi , fi ) por los que tiene que pasar la función que se busca se llaman puntos soporte de la interpolación o puntos de interpolación, xi son las abcisas soporte o nodos soporte o de interpolación y fi son las ordenadas soporte. 56
3.2 Interpolación polinómica
Según se elija la función f (x) se tienen diferentes tipos de interpolación, cada una con sus características y algoritmos. Los tipos más frecuentes son: • Polinómica, en este caso la función interpolante f (x) es un polinomio. • Splines1 , cuando la función interpolante f (x) es una función polinómica a trozos a la que se le exigen dos condiciones adicionales. • Racional, si la función f (x) es una función racional. Un caso particular muy importante es el interpolante de Padé, en el que se necesitan los datos correspondientes a valores de la función y sus derivadas en un punto. • Trigonométrica, cuando f (x) es una combinación de funciones trigonométricas. Se aplica sobre todo cuando se sabe que los datos responden a un problema periódico. Debido a que los polinomios tienen, entre otras, la ventaja de derivarse e integrarse fácilmente, siendo las funciones resultantes nuevamente polinomios, la interpolación polinómica es de las más sencillas y utilizadas, no sólo para resolver el problema de interpolación propiamente dicho sino como herramienta para resolver otros problemas numéricamente, como el cálculo de integrales o de derivadas. También se utiliza, cada vez con más frecuencia, la interpolación por splines. Los dos tipos de interpolación que vamos a abordar en este capítulo son la interpolación polinónica y por splines. Trabajar sólo con la información de f (x) que proporciona la tabla significa desconocer “casi todo” sobre f (x), en particular si f (x) es continua y derivable. En el desarrollo del tema se asumirá la hipótesis de continuidad y derivabilidad sobre la función f (x). Intentaremos resolver los problemas de interpolación aproximando la función “desconocida”, f (x), mediante una función polinómica o una función construida a partir de polinomios (splines). La interpolación, con las hipótesis descritas es un procedimiento usualmente satisfactorio, sobre todo si los valores x ˜ para los que se quiere calcular f (˜ x) están cerca de los valores tabulados.
3.2
Interpolación polinómica
Supongamos conocidos los valores en los n+1 puntos x0 , x1 , . . . , xn de una función según la tabla x0 f0 1 En
x1 f1
··· ···
xn fn
la literatura también se utiliza el término cercha para referirse a spline.
57
Capítulo 3. Interpolación y aproximación de funciones
Vamos a construir un polinomio Pn (x), de grado menor o igual que n, que cumpla Pn (xi ) = fi ,
i = 0, 1, . . . , n.
(3.1)
Al polinomio Pn (x) así construido se le denomina polinomio interpolador o polinomio de interpolación. Una posible forma de resolver el problema es plantear el siguiente polinomio de grado n Pn (x) = a0 + a1 x + a2 x2 + · · · + an xn , (3.2) con coeficientes ai , i = 0, 1, . . . , n, indeterminados, e imponer que (3.2) verifique (3.1). Esto significa que obtener el polinomio interpolador es equivalente a resolver el sistema de ecuaciones lineales a0 + a1 x0 + · · · + an xn0 = f0 , a0 + a1 x1 + · · · + an xn1 = f1 , .. .
(3.3)
a0 + a1 xn + · · · + an xnn = fn . La existencia y unicidad de solución del sistema anterior depende del determinante de Vandermonde, 1 x0 x20 · · · xn0 1 x1 x21 · · · xn1 Δ = . .. .. .. .. .. . . . . 1 xn x2 · · · xn n n = =
(x1 − x0 ) (x2 − x0 ) (x2 − x1 ) · · · (xn − x0 ) · · · (xn − xn−1 )
(xj − xk ) .
0≤k
De aquí concluimos que si todos los xi son distintos entre sí, entonces Δ = 0 y el sistema anterior tiene una única solución. Por tanto, si los nodos de interpolación son distintos, el polinomio interpolador (3.2) existirá y será único independientemente del valor que tomen los fi . Pero esta forma de afrontar el problema es, desde el punto de vista práctico, poco operativa. Vamos a estudiar otros métodos para construir el polinomio interpolador.
58
3.2 Interpolación polinómica
3.2.1
Polinomios de Lagrange
El siguiente resultado proporciona una forma explícita del polinomio interpolador buscado sin tener que resolver el sistema de ecuaciones (3.3). Teorema 3.1 (Polinomio interpolador de Lagrange) Dado el conjunto de puntos (x0 , f0 ) , (x1 , f1 ) , . . . , (xn , fn ), se considera el polinomio Pn (x) =
n
fi Ln,i (x),
i=0
donde los polinomios Ln,i (x) son los polinomios de Lagrange, Ln,i (x) =
(x − x0 ) (x − x1 ) · · · (x − xi−1 ) (x − xi+1 ) · · · (x − xn ) , (xi − x0 ) (xi − x1 ) · · · (xi − xi−1 ) (xi − xi+1 ) · · · (xi − xn )
con i = 0, 1, . . . , n. El polinomio Pn (x) es un polinomio interpolador para los puntos (xi , fi ), i = 0, 1, . . . , n. Demostración: En primer lugar, el polinomio Pn (x) tiene grado menor o igual que n puesto que es combinación lineal de los polinomios Ln,i (x), y éstos tienen grado n. Por otra parte, observamos que si tomamos un nodo xl , tenemos n xl − xj 1 si = Ln,i (xl ) = 0 si xi − xj j=0
l=i , l = i
(3.4)
j=i
de donde Pn (xi ) = fi Ln,i (xi ) = fi ,
i = 0, 1, . . . , n.
El polinomio Pn (x) obtenido en el Teorema 3.1 se conoce con el nombre de polinomio interpolador de Lagrange. A partir de ahora también lo denotaremos por P (x). Ejemplo 3.1 Calcular el polinomio de interpolación para xi fi
0 0.5
2 2
3 0.5
y calcular P (1) y P (1.5).
59
Capítulo 3. Interpolación y aproximación de funciones
Solución: Como tenemos tres puntos soporte, los polinomios de Lagrange necesarios son 1 (x − 2)(x − 3) = (x − 2)(x − 3), (0 − 2)(0 − 3) 6 1 (x − 0)(x − 3) = − x(x − 3), L2,1 (x) = (2 − 0)(2 − 3) 2 1 (x − 0)(x − 2) L2,2 (x) = = x(x − 2). (3 − 0)(3 − 2) 3 L2,0 (x) =
Por tanto, el polinomio interpolador es P (x) = 0.5 L2,0 (x) + 2 L2,1 (x) + 0.5 L2,2 (x). Una vez obtenido, se calcula el valor aproximado en 1 y en 1.5 P (1)
= =
P (1.5)
= =
0.5 L2,0 (1) + 2 L2,1 (1) +0.5 L2,2 (1) −1 1 0.5 + 2 · 1 + 0.5 = 2, 3 3 0.5 L2,0 (1.5) + 2 L2,1 (1.5) + 0.5 L2,2 (1.5) 0.5 · 0.125 + 2 · 1.125 + 0.5 (−0.25) = 2.1875.
En la Figura 3.1 puede verse la representación gráfica de los polinomios de Lagrange utilizados en este ejemplo así como el polinomio de interpolación obtenido. Observamos que los polinomios de Lagrange construidos verifican la fórmula (3.4). Así, por ejemplo, L2,0 vale 1 en x0 = 0 y se anula en el resto de nodos, x1 = 2 y x2 = 3. La interpolación de Lagrange es muy sencilla conceptualmente. En aspectos teóricos, es útil, por ejemplo, para deducir fórmulas de integración numérica. Sin embargo, en las aplicaciones, es poco práctica, salvo en el caso de tener que interpolar para los mismos nodos con diferentes ordenadas soporte. Añadir o eliminar uno sólo de los puntos soporte cambia totalmente los polinomios de Lagrange y hace que se deba volver a recalcular todo desde el principio como se ilustra en el siguiente ejemplo, en el que se añade un punto soporte más a los datos del Ejemplo 3.1. Ejemplo 3.2 Calcular el polinomio de interpolación para xi fi 60
0 0.5
1 2.5
2 2
3 0.5
3.2 Interpolación polinómica 3
2
1
0
−1
L2,0 (x) L2,1 (x) L2,2 (x)
−2
datos Pol. Interp −3 −1
0
1
2
3
4
Figura 3.1: Polinomios de Lagrange, L2,0 , L2,1 y L2,2 , y polinomio de interpolación, P (x), correspondientes a los datos del Ejemplo 3.1.
y obtener el valor de P (1.5). Solución: En este caso, como tenemos 4 datos, los polinomios de Lagrange son de grado 3 (x − 1)(x − 2)(x − 3) (0 − 1)(0 − 2)(0 − 3) (x − 0)(x − 2)(x − 3) L3,1 (x) = (1 − 0)(1 − 2)(1 − 3) (x − 0)(x − 1)(x − 3) L3,2 (x) = (2 − 0)(2 − 1)(2 − 3) (x − 0)(x − 1)(x − 2) L3,3 (x) = (3 − 0)(3 − 1)(3 − 2) L3,0 (x) =
1 11 = − x3 + x2 − x + 1, 6 6 1 5 = x3 − x2 + 3 x, 2 2 1 3 3 = − x + 2 x2 − x, 2 2 1 3 1 2 1 = x − x + x. 6 2 3
El polinomio de interpolación es P (x) = 0.5 L3,0 (x) + 2.5 L3,1 (x) + 2 L3,2 (x) + 0.5 L3,3 (x). 61
Capítulo 3. Interpolación y aproximación de funciones
Finalmente P (1.5) = 0.5 L3,0 (1.5) + 2.5 L3,1 (1.5) + 2 L3,2 (1.5) + 0.5 L3,3 (1.5) = 2.46875. Como se puede observar, los polinomios de Lagrange son diferentes a los del Ejemplo 3.1, ya que son de un grado más, igual que el de interpolación. También es necesario utilizar un polinomio más. Los polinomios de Lagrange y el polinomio interpolador están representados en la Figura 3.2. 4
L3,0(x) L3,1(x) L3,2(x) L3,3(x) Datos Pol. Interp
3
2
1
0
−1
−2
−3 −1
0
1
2
3
4
Figura 3.2: Polinomios de Lagrange L3,0 , L3,1 , L3,2 y L3,3 y polinomio de interpolación, P (x), correspondientes a los datos del Ejemplo 3.2 .
Por la forma en que se construye el polinomio interpolador de Lagrange, notemos que no es necesario tener los nodos ordenados.
62
3.2 Interpolación polinómica
3.2.2
Algoritmo de Neville
El algoritmo de Neville se utiliza para aproximar el valor en un punto, pero no para calcular el polinomio en sí. Es decir, sólo resuelve el segundo de los problemas mencionados en la introducción. La idea del algoritmo de Neville es calcular el valor de la aproximación mediante polinomios de interpolación de grado pequeño y luego enlazarlos de forma adecuada. Se empezará así con polinomios de grado 0 (constantes) y luego se enlazarán hasta unir todos los datos. Denotemos por Pi0 i1 ...ij a un polinomio de grado menor o igual que j tal que Pi0 i1 ...ij (xik ) = fik , k = 0, 1, . . . , j. Dicho polinomio se puede construir de la siguiente forma Pik (x) = fik , (x − xi0 )Pi1 ...ij (x) − (x − xij )Pi0 i1 ...ij−1 (x) Pi0 i1 ...ij (x) = . x ij − x i0
(3.5) (3.6)
Veamos por inducción que se cumple la propiedad indicada. En primer lugar, tenemos que los polinomios de (3.5) son de grado cero y además cumplen que Pik (xik ) = fik . Supongamos que se satisfacen las condiciones Pi1 ...ij (xik ) = fik , k = 1, 2, . . . , j y Pi0 i1 ...ij−1 (xik ) = fik , para k = 0, 1, 2, . . . , j − 1, es decir, estamos suponiendo que cada uno de los polinomios pasa por los puntos soporte indicados por sus subíndices que, salvo i0 e ij son comunes. Entonces el nuevo polinomio dado por (3.6) cumple (xi0 − xi0 )Pi1 ...ij (xi0 ) − (xi0 − xij )Pi0 i1 ...ij−1 (xi0 ) x ij − x i0 −(xi0 − xij )fi0 = = fi0 , x ij − x i0 (xij − xi0 )Pi1 ...ij (xij ) − (xij − xij )Pi0 i1 ...ij−1 (xij ) Pi0 i1 ...ij (xij ) = x ij − x i0 (xij − xi0 )fij = = f ij , x i j − x i0
Pi0 i1 ...ij (xi0 ) =
es decir, pasa por los puntos soporte (xi0 , fi0 ) y (xij , fij ). Además, también pasa por los restantes pues si k = 1, 2, . . . , j − 1, (xik − xi0 )Pi1 ...ij (xik ) − (xik − xij )Pi0 i1 ...ij−1 (xik ) x ij − x i0 (xik − xi0 )fik − (xik − xij )fik = = fi k , x ij − x i0
Pi0 i1 ...ij (xik ) =
63
Capítulo 3. Interpolación y aproximación de funciones
por lo que el polinomio construido tiene la propiedad de pasar por los puntos soporte correspondientes a i0 , i1 , . . . ij . Además, si Pi1 ...ij (x) y Pi0 i1 ...ij−1 son polinomios de grado menor o igual que j − 1, de (3.6) tenemos que Pi0 i1 ...ij (x) será un polinomio de grado menor o igual que j. Hay que tener en cuenta que a la hora de la práctica no se calculará con los polinomios sino con el valor en el que se quiera aproximar la función. Los índices se eligen consecutivos para facilitar los cálculos, aunque los nodos no tienen porqué estar ordenados. Para esquematizar el cálculo se puede hacer una tabla como la siguiente x0
0 P0 (˜ x) = f0
x1
P1 (˜ x) = f1
1
2
3
P01 (˜ x) P012 (˜ x) P12 (˜ x) x2
P2 (˜ x) = f2
x3
P3 (˜ x) = f3
P0123 (˜ x) P123 (˜ x)
P23 (˜ x) donde x ˜ es la abcisa a interpolar, la columna correspondiente a los polinomios de grado 0 son datos (fórmula (3.5)) y el resto se calcula con (3.6) a partir de los datos exclusivamente de la columna anterior y los nodos. Es decir, para rellenar la tabla se avanza hacia la derecha calculando cada nuevo valor a partir de los dos de la columna de la izquierda situados por encima y por debajo de él aplicando la fórmula (3.6) . En cada columna se calcula un valor menos que en la de su izquierda, el último valor calculado, que es el único de su columna, P0123 (˜ x) en nuestro ejemplo, es el valor interpolado correspondiente a la abcisa x ˜. Ejemplo 3.3 Calcular P (1) con los mismos datos del Ejemplo 3.1 utilizando el algoritmo de Neville. Solución: A partir de los datos obtenemos la siguiente tabla
x0 = 0
0 P0 (1) = f0 = 0.5
x1 = 2
P1 (1) = f1 = 2
1
2
P01 (1) = 1.25 P012 (1) = 2 P12 (1) = 3.5 x2 = 3
P2 (1) = f2 = 0.5
Por tanto, obtenemos el valor aproximado P (1) = 2, que obviamente coincide con el obtenido anteriormente, pero con la ventaja de que se han hecho menos cálculos. 64
3.2 Interpolación polinómica
Ejemplo 3.4 Calcular P (1.5) con los mismos datos del Ejemplo 3.1 utilizando el algoritmo de Neville. Solución: Como el punto donde queremos interpolar es distinto al del Ejemplo 3.3, tenemos que volver a calcular los valores de la tabla partiendo de las mismas columnas de nodos y de polinomios constantes. Hacemos los cálculos para la columna correspondiente a los polinomios de grado 1 según la fórmula (3.6), y así sucesivamente hasta rellenar toda la tabla, obteniendo,
x0 = 0
0 P0 (1.5) = f0 = 0.5
x1 = 2
P1 (1.5) = f1 = 2
1
2
P01 (1.5) = 1.625 P012 (1.5) = 2.1875 P12 (1.5) = 2.75 x2 = 3
P2 (1.5) = f2 = 0.5
Por tanto, hemos obtenido el valor aproximado P (1.5) = 2.1875, que coincide con el calculado en el Ejemplo 3.1. Ejemplo 3.5 Calcular P (1.5) con los mismos datos del Ejemplo 3.2 utilizando el algoritmo de Neville. Solución: x) = Pi0 i1 ...ij . Notemos que podemos partir Por comodidad denotaremos Pi0 i1 ...ij (˜ de la tabla del Ejemplo 3.4, añadiendo el nuevo dato al final, y sólo tendremos que calcular el valor de los polinomios que corresponden al nuevo nodo, que situamos en la última fila de cada columna
x0 = 0
0 P0 = f0 = 0.5
x1 = 2
P1 = f 1 = 2
1
2
3
P01 = 1.625 P012 = 2.1875 P12 = 2.75 x2 = 3
P2 = f2 = 0.5
x3 = 1
P3 = f3 = 2.5
P0123 = 2.46875 P123 = 2.375
P23 = 2
Por tanto, obtenemos el valor aproximado P (1.5) = 2.46875, que, como tenía que ocurrir, coincide con el obtenido en el Ejemplo 3.2. El algoritmo de Neville no es práctico para calcular el polinomio en sí y existen variantes para hacer los cálculos de forma que no se cometan errores de redondeo importantes. 65
Capítulo 3. Interpolación y aproximación de funciones
3.2.3
Fórmula de interpolación de Newton. Diferencias divididas
El algoritmo de Neville permite ahorrar operaciones cuando se quiere obtener exclusivamente el valor del polinomio interpolador en un punto. Pero hemos visto que para calcular valores de dicho polinomio en otro u otros puntos se ha de repetir todo el proceso cada vez desde el principio. La técnica que vamos a introducir a continuación es preferible al algoritmo de Neville cuando se quiere calcular el polinomio de interpolación o se quiere interpolar en varios puntos. La idea es escribir el polinomio de interpolación en la forma P (x) = a0 + a1 (x − x0 ) + a2 (x − x0 )(x − x1 ) + · · · + an (x − x0 ) · · · (x − xn−1 ), que tiene la ventaja de permitir el cálculo de P (˜ x) utilizando el esquema de Horner, que es el más eficiente P (˜ x) = a0 + (˜ x − x0 ) (a1 + (˜ x − x1 ) (a2 + · · · )) .
(3.7)
Si en P (x) sustituimos x por x0 se obtiene que a0 = f0 . Si sustituimos x por x1 se obtiene que f1 = f0 + a1 (x1 − x0 ), de donde a1 = (f1 − f0 )/(x1 − x0 ). Para calcular el resto vamos a introducir las diferencias divididas. Se define f [xi ] = fi , que son las diferencias divididas de orden 0. Supuestas definidas las de orden k − 1 se definen las de orden k por f [xi0 , xi1 , . . . , xik ] =
f [xi1 , . . . , xik ] − f [xi0 , xi1 , . . . , xik−1 ] . x i k − x i0
(3.8)
Esta ecuación tiene una cierta similitud con (3.6). Notemos además que no importa el orden en que se escriban los argumentos, es decir, se tiene la siguiente propiedad f [x0 , x1 ] f [x0 , x1 , x2 ]
= = = .. .
f [x1 , x0 ] f [x0 , x2 , x1 ] = f [x1 , x0 , x2 ] = f [x1 , x2 , x0 ] f [x2 , x0 , x1 ] = f [x2 , x1 , x0 ]
Supongamos ahora que ai = f [x0 , x1 , . . . , xi ] para i = 0, 1, 2, . . . , k − 1. Para calcular ak damos a x el valor xk . Teniendo en cuenta que fk = f [xk ], se obtiene, f [xk ] = f [x0 ] + f [x0 , x1 ](xk − x0 ) + f [x0 , x1 , x2 ](xk − x0 )(xk − x1 ) + · · · + f [x0 , x1 , x2 , . . . , xk−1 ](xk − x0 )(xk − x1 ) · · · (xk − xk−2 ) + ak (xk − x0 )(xk − x1 ) · · · (xk − xk−2 )(xk − xk−1 ), 66
3.2 Interpolación polinómica
dividiendo por (xk − x0 ) y reordenando de forma adecuada se tiene f [x0 , xk ] =f [x0 , x1 ] + f [x0 , x1 , x2 ](xk − x1 ) + · · · + f [x0 , x1 , x2 , . . . , xk−1 ](xk − xk−2 ) · · · (xk − x1 ) + ak (xk − xk−1 )(xk − xk−2 ) · · · (xk − x1 ), dividiendo ahora por (xk − x1 ) y reordenando se llega a f [x0 , x1 , xk ] = f [x0 , x1 , x2 ] + · · · + f [x0 , x1 , x2 , . . . , xk−1 ](xk − xk−2 ) · · · (xk − x2 ) + ak (xk − xk−1 )(xk − xk−2 ) · · · (xk − x2 ), prosiguiendo de esta forma se obtiene que ak = f [x0 , x1 , . . . , xk ]. Por tanto, los coeficientes del polinomio de Newton (o mejor dicho del polinomio de interpolación escrito en la forma de Newton) son las diferencias divididas, siendo la expresión del mismo P (x) =f [xi0 ] + f [xi0 , xi1 ](x − xi0 ) + · · · + f [xi0 , xi1 , . . . , xin ](x − xi0 ) · · · (x − xin−1 ).
(3.9)
La forma práctica de calcular las diferencias divididas es en una tabla como la siguiente
x0
0 f [x0 ] = f0
x1
f [x1 ] = f1
1
2
3
f [x0 , x1 ] f [x0 , x1 , x2 ] f [x1 , x2 ] x2
f [x2 ] = f2
x3
f [x3 ] = f3
f [x0 , x1 , x2 , x3 ] f [x1 , x2 , x3 ]
f [x2 , x3 ]
En la tabla anterior, la columna correspondiente a las diferencias divididas de orden 0 son datos y las demás son cocientes entre la diferencia de dos de la columna de la izquierda y dos nodos soporte. Una vez calculadas las diferencias divididas hay diversas alternativas para calcular el polinomio de interpolación, ya que, al no importar el orden en que se tomen los nodos soporte, se puede aplicar (3.9) con cualquier elección de i0 , i1 , . . . Elegida una diferencia dividida cualquiera de la primera columna podemos elegir cualquiera de las dos contiguas de la segunda columna y así sucesivamente, de forma que añadimos una nueva abcisa soporte cada vez. Ejemplo 3.6 Calcular, usando diferencias finitas, el polinomio de interpolación con los mismos datos del Ejemplo 3.1. 67
Capítulo 3. Interpolación y aproximación de funciones
Solución: De (3.8) construimos la tabla
x0 = 0
0 f [0] = 0.5
x1 = 2
f [2] = 2
x2 = 3
f [3] = 0.5
1
2
f [0, 2] = 0.75 f [2, 3] = −1.5
f [0, 2, 3] = −0.75
El polinomio se puede calcular de varias formas. Si elegimos la primera diferencia dividida, f [0] = 0.5 luego hemos de tomar f [0, 2] = 0.75 y finalmente f [0, 2, 3] = −0.75, obtenemos P (x) = 0.5 + 0.75(x − 0) − 0.75(x − 0)(x − 2). Si empezamos con f [2] = 2 podemos seguir dos caminos: Tomar f [2, 0] = 0.75 y finalmente f [2, 0, 3] = −0.75, obteniendo la expresión del polinomio P (x) = 2 + 0.75(x − 2) − 0.75(x − 2)(x − 0), o tomar f [2, 3] = −1.5 y por último f [2, 3, 0] = −0.75, obteniendo ahora la expresión del polinomio P (x) = 2−1.5(x−2)−0.75(x− 2)(x − 3). Por último, empezando por f [3] = 0.5 se toma luego f [3, 2] = −1.5 y finalmente f [3, 2, 0] = −0.75, con lo que se obtiene la expresión P (x) = 0.5 − 1.5(x − 3) − 0.75(x − 3)(x − 2). Conviene resaltar que lo que se obtiene son distintas expresiones del único polinomio de interpolación. En efecto, desarrollando las expresiones anteriores todas ellas dan P (x) = 0.5 + 2.25x − 0.75x2 . Para calcular P (˜ x) se eligen las diferencias divididas en zig-zag de forma que se empieza por el xi más próximo a x ˜, el siguiente punto a incorporar es el siguiente más próximo a x ˜, y así sucesivamente. Esto minimiza el error en el esquema de Horner. Ejemplo 3.7 Calcular P (1.25) para los datos del Ejemplo 3.1. Solución: Como los nodos soporte son 0, 2 y 3 conviene elegirlas en el orden 2, 0 y 3, por ser el orden de cercanía a 1.25. Por tanto, a partir de las diferencias divididas proporcionadas en la tabla del Ejemplo 3.6 calculamos P (1.25) = f [2] + f [2, 0](1.25 − 2) + f [2, 0, 3](1.25 − 2)(1.25 − 0) = f [2] + (1.25 − 2)(f [2, 0] + f [2, 0, 3] 1.25) = 2 + (1.25 − 2)(0.75 − 0.75 1.25) = 2.14063. 68
3.2 Interpolación polinómica
Ejemplo 3.8 Calcular el polinomio interpolador correspondiente a los datos del Ejemplo 3.2 utilizando diferencias divididas. Calcular P (0.8) utilizando la expresión que minimiza el error. Solución: La tabla de las diferencias divididas correspondiente al Ejemplo 3.2 es
x0 = 0
0 f [0] = 0.5
x1 = 1
f [1] = 2.5
x2 = 2
f [2] = 2
x3 = 3
f [3] = 0.5
1
2
3
f [0, 1] = 2 f [1, 2] = −0.5 f [2, 3] = −1.5
f [0, 1, 2] = −1.25 f [0, 1, 2, 3] = 0.25 f [1, 2, 3] = −0.5
Algunas formas de calcular el polinomio de interpolación son: P (x) = f [0] + f [0, 1](x − 0) + f [0, 1, 2](x − 0)(x − 1) + f [0, 1, 2, 3](x − 0)(x − 1)(x − 2) = 0.5 + 2(x − 0) − 1.25(x − 0)(x − 1) + 0.25(x − 0)(x − 1)(x − 2) = 0.5 + 3.75x − 2x2 + 0.25x3 . P (x) = f [2] + f [2, 1](x − 2) + f [2, 1, 3](x − 2)(x − 1) + f [2, 1, 3, 0](x − 2)(x − 1)(x − 3) = 2 − 0.5(x − 2) − 0.5(x − 2)(x − 1) + 0.25(x − 2)(x − 1)(x − 3) = 0.5 + 3.75x − 2x2 + 0.25x3 . Para calcular P (0.8), minimizando los errores de redondeo en los cálculos, eligiríamos los nodos soporte en el siguiente orden: 1, 0, 2 y 3, es decir, se empieza por el más cercano a 0.8, y luego, de entre los que quedan por elegir, siempre se toma el más cercano a 0.8. De esta forma se obtiene P (0.8) = f [1] + f [1, 0](0.8 − 1) + f [1, 0, 2](0.8 − 1)(0.8 − 0) + f [1, 0, 2, 3](0.8 − 1)(0.8 − 0)(0.8 − 2) = 2.5 + 2(−0.2) − 1.25(−0.2)(0.8) + 0.25(−0.2)(0.8)(−1.2) que para reducir el número de operaciones se calcula por el esquema de Horner = 2.5 + (−0.2) (2 + (0.8) (−1.25 + 0.25(−1.2))) = 2.348. 69
Capítulo 3. Interpolación y aproximación de funciones
3.2.4
Error en la interpolación polinómica
El siguiente resultado nos permite acotar el error cometido en la interpolación polinómica. Teorema 3.2 Si f tiene derivada de orden n + 1, entonces para cada x ˜ existe un ξ en el menor intervalo que contiene a x ˜ y todos los nodos soporte xi que cumple f (˜ x) − P (˜ x) =
w(˜ x)f (n+1) (ξ) , (n + 1)!
(3.10)
donde w(x) = (x − x0 )(x − x1 ) · · · (x − xn ). El polinomio w(x) de grado n + 1 que aparece en la expresión del error dada por la ecuación (3.10), es un polinomio que se anula en los nodos soporte pero lejos de ellos puede tomar valores muy grandes. En general w crece muy rápido fuera del intervalo mínimo que contiene a todos los nodos soporte. Por tanto, la extrapolación puede contener errores muy grandes y, en general, no es aconsejable.
3.2.5
Problemas con la interpolación polinómica
Los polinomios de grado alto tienen muchos máximos y mínimos y cuando x tiende a infinito tienden a infinito, por lo que no interpolan bien funciones que no tengan estas características, tal como sucede en el siguiente ejemplo. Ejemplo 3.9 (Función de Runge) Interpolar la función de Runge f (x) =
1 1 + 25x2
(3.11)
en el intervalo [−1, 1] usando nodos igualmente espaciados. Representar f y los distintos polinomios obtenidos. Solución: Vamos a interpolar la función (3.11) utilizando 5, 7, 9 y 13 puntos igualmente espaciados. En la Figura 3.3 están representados estos polinomios interpoladores junto a la función f (x) . En la Figura 3.3 se observa que al aumentar el número de nodos soporte y, por tanto, el grado del polinomio, las oscilaciones en los extremos del intervalo se hacen cada vez mayores. En cambio, el error disminuye en el centro del mismo. Este fenómeno fue descubierto por Runge cuando estudiaba el comportamiento de los errores al usar interpolación polinómica para aproximar determinadas funciones. Se conoce como fenómeno de Runge. 70
3.2 Interpolación polinómica
1 F. Runge Pol. Interp Datos
0.8
F. Runge Pol. Interp Datos
0.8
0.6 0.6 0.4 0.4 0.2 0.2 0 0
−0.2 −0.4 −1
−0.5
0
0.5
1
−0.2 −1
−0.5
(a) 5 puntos
0
0.5
1
0.5
1
(b) 7 puntos 1
1 F. Runge Pol. Interp Datos
0
0.5
−1 0
−2 −0.5
−1 −1
−3
−0.5
0
(c) 9 puntos
0.5
1
−4 −1
F. Runge Pol. Interp Datos −0.5
0
(d) 13 puntos
Figura 3.3: Función de Runge y diferentes polinomios de interpolación con nodos soporte igualmente espaciados.
El fenómeno de Runge demuestra que no siempre aumentando el número de nodos de una interpolación mejora su precisión. Una forma de resolver el problema es eligir los puntos soporte de forma que se minimice el error en todo el intervalo. Así, esta técnica utiliza nodos con diferentes distancias entre ellos y tiene el inconveniente de que no se puede aplicar si no conocemos los valores reales en los nodos necesarios. El problema observado con la función de Runge también puede resolverse mediante los splines, que es la técnica que se estudia en el siguiente apartado.
71
Capítulo 3. Interpolación y aproximación de funciones
3.3
Interpolación por splines
Teniendo en cuenta los inconvenientes que presentan los polinomios de grado alto, se llega de forma natural a la interpolación segmentaria o interpolación a trozos, que consiste en dividir el intervalo en varios subintervalos y construir una función interpoladora distinta sobre cada intervalo. La interpolación segmentaria lineal nos permite obtener una curva continua, pero sin suavidad, es decir, sin derivabilidad en los nodos. Las funciones polinómicas segmentarias cúbicas proporcionan curvas interpolantes que definirán una trayectoria suave, que se ajustan a los puntos predefinidos pero que no presentan las grandes oscilaciones de los polinomios de grados elevados. Se utilizan en métodos numéricos pero también en aplicaciones gráficas. La palabra inglesa spline denota un instrumento flexible usado en dibujo técnico que sirve para trazar curvas suaves (trazador). Se trata de una regla que puede ser adaptada, flexionándola a la forma que tome la curva que se desee dibujar. La propiedad de los splines de adaptarse bien a formas dadas es por lo que se le da dicho nombre. Definicion 3.1 Dado el conjunto de datos de la siguiente tabla de valores, x0 f0
x1 f1
··· ···
xn fn
cuyos nodos suponemos ordenados, es decir, x 0 ≤ x1 ≤ · · · ≤ x n , llamamos spline de orden k asociado a los nodos anteriores a la función S(x) definida como sigue: S(x) = Si (x),
∀x ∈ [xi−1 , xi ],
i = 1, . . . , n,
donde Si (x), i = 1, . . . , n son polinomios de grado k que satisfacen: Si (xi−1 ) = fi−1 , Si (xi ) = fi , y además,
⎧ ⎪ ⎨ Si (xi ) = Si+1 (xi ), .. . ⎪ ⎩ k−1) k−1) Si (xi ) = Si+1 (xi ),
A k se le llama grado del spline. 72
i = 1, . . . , n,
i = 1, . . . , n − 1.
3.3 Interpolación por splines
Los splines que más se utilizan en la práctica son los cúbicos, es decir, los de grado 3. En este caso tendremos un conjunto de n polinomios Si (x) = ai x3 + bi x2 + ci x + di ,
i = 1, . . . , n,
cumpliendo las condiciones anteriores, que para splines cúbicos quedan de la forma Si (xi−1 ) = fi−1 , Si (xi ) = fi ,
i = 1, . . . , n,
Si (xi ) = Si+1 (xi ), Si (xi ) = Si+1 (xi ),
i = 1, . . . , n − 1.
Tenemos que determinar 4n coeficientes, pero en total tenemos 2n + 2(n − 1) = 4n − 2 condiciones. Tendremos que imponer dos condiciones más. Éstas se pueden elegir, por ejemplo, como una de las siguientes: • S1 (x0 ) = A y Sn (xn ) = B, con A y B números reales. (Cuando A = B = 0 los splines se llaman naturales). k)
k)
• S1 (x0 ) = Sn (xn ), k = 0, 1, 2, para splines periódicos (debe cumplirse f0 = fn ). • S1 (x0 ) = f0 y Sn (xn ) = fn , con f0 y fn números prefijados. • Imponer que la derivada tercera sea continua en x1 y en xn−1 . Esta es la condición llamada not a knot (no-nudo). Ejemplo 3.10 Calcular el spline cúbico natural, S(x), correspondiente a los datos del Ejemplo 3.1, cuyos puntos soporte son xi fi
0 0.5
2 2
3 0.5
y calcular S(1). Solución: Como tenemos 3 puntos de interpolación, necesitamos 2 polinomios cúbicos S1 (x) = a1 x3 + b1 x2 + c1 x + d1 , S2 (x) = a2 x3 + b2 x2 + c2 x + d2 ,
en en
[0, 2], [2, 3].
73
Capítulo 3. Interpolación y aproximación de funciones
Tenemos que determinar 8 incógnitas. Imponemos las condiciones: 1. S1 (x) tiene que pasar por (0, 0.5), es decir, S1 (0) = 0.5, de donde d1 = 0.5. 2. S1 (2) = 2, de donde 8a1 + 4b1 + 2c1 + d1 = 2. 3. S2 (2) = 2, de donde 8a2 + 4b2 + 2c2 + d2 = 2. 4. S2 (3) = 0.5, de donde 27a2 + 9b2 + 3c2 + d2 = 0.5. 5. S1 (2) = S2 (2), de donde 12a1 + 4b1 + c1 = 12a2 + 4b2 + c2 . 6. S1 (2) = S2 (2), de donde 12a1 + 2b1 = 12a2 + 2b2 . Hasta aquí tenemos 6 ecuaciones, las dos restantes dependen del tipo de spline. Como en este caso el spline que queremos determinar es natural, imponemos 7. S1 (0) = 0, de donde
2b1 = 0.
8. S2 (3) = 0, de donde
18a2 + 2b2 = 0.
Tenemos un sistema de 8 ecuaciones con 8 incógnitas. Resolviéndolo llegamos a que el spline natural buscado es S1 (x) = −0.1875x3 + 1.5x + 0.5, si x ∈ [0, 2], S(x) = S2 (x) = 0.375x3 − 3.375x2 + 8.25x − 4, si x ∈ [2, 3]. Para calcular S(1), como 1 ∈ [0, 2], utilizamos el primer polinomio y obtenemos como resultado S(1) = S1 (1) = 1.8125. La gráfica del spline junto con los datos puede verse en la Figura 3.4. 74
3.3 Interpolación por splines
2.4 Datos Spline
2.2 2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0
0.5
1
1.5
2
2.5
3
Figura 3.4: Interpolación de los datos del Ejemplo 3.1 mediante un spline natural.
En la práctica no se obtiene el sistema de ecuaciones lineales tal como hemos hecho en el ejemplo. En su lugar se escriben algunas condiciones de otra forma, que a continuación desarrollaremos, para obtener sistemas de ecuaciones lineales tridiagonales, o casi tridiagonales, lo que facilita su resolución. Para obtener los polinomios, partimos de que Si (x) son polinomios de grado 1 que (xi ), i = 1, . . . , n − 1. Así cumplen Si (xi ) = Si+1 Si (x) = Mi−1
(xi − x) (x − xi−1 ) + Mi , (xi − xi−1 ) (xi − xi−1 )
i = 1, . . . , n .
(3.12)
Efectivamente Si (xi ) (xi ) Si+1
(3.13)
=
Mi
=
(xi+1 − xi ) (xi − xi ) + Mi+1 = Mi . Mi (xi+1 − xi ) (xi+1 − xi )
Integrando la expresión (3.12) para cada i = 1, . . . , n, obtenemos Si (x) = −Mi−1
(x − xi−1 )2 (xi − x)2 + Mi + αi , 2(xi − xi−1 ) 2(xi − xi−1 )
75
Capítulo 3. Interpolación y aproximación de funciones
donde αi es una constante de integración. Integrando nuevamente obtenemos Si (x) = Mi−1
(xi − x)3 (x − xi−1 )3 + Mi + α i x + βi , 6(xi − xi−1 ) 6(xi − xi−1 )
siendo βi otra constante de integración. Las constantes de integración αi y βi se determinan imponiendo Si (xi−1 ) = fi−1 , Si (xi ) = fi ,
i = 1, . . . , n,
con lo que se obtiene: fi − fi−1 1 − (Mi − Mi−1 )(xi − xi−1 ) xi − xi−1 6 1 βi = fi − αi xi − Mi (xi − xi−1 )2 . 6
αi =
Introduciendo la notación hi ≡ xi − xi−1 podemos escribir: (x − xi−1 ) Mi−1 Mi 1 3 3 2 Si (x) = (xi − x) + (x − xi−1 ) + fi − Mi hi + 6hi 6hi 6 hi (xi − x) 1 + fi−1 − Mi−1 h2i . (3.14) 6 hi Falta calcular los Mi , para ello, se hace uso de la condición que nos queda Si (xi ) = (xi ), i = 1, . . . , n − 1, obteniendo el sistema de n − 1 ecuaciones Si+1 (3.15)
ai Mi−1 + Mi + ci Mi+1 = di , donde los coeficientes vienen dados por las expresiones ai = di =
hi , 2(hi+1 + hi )
3 hi+1 + hi
ci =
hi+1 , 2(hi+1 + hi )
fi+1 − fi f − fi−1 − i hi+1 hi
! .
Ahora imponemos las condiciones según el spline que queramos determinar. Vamos a hacer el caso en que S1 (x0 ) = A y Sn (xn ) = B. En este caso, de (3.12)–(3.13) tenemos A = S1 (x0 ) = M0 ,
B = Sn (xn ) = Mn .
76
3.3 Interpolación por splines
Por tanto, una vez hemos determinado M0 y Mn , sólo nos quedan por determinar M1 , . . . , Mn−1 a partir de (3.15). En forma matricial, el sistema a resolver es ⎛ ⎞⎛ ⎞ ⎛ ⎞ 1 c1 0 ··· 0 M1 d1 − a 1 M0 ⎜ a2 1 ⎟ c2 ··· 0 ⎟ ⎜ M2 ⎟ ⎜ ⎟ d2 ⎜ ⎟ ⎜ ⎟ ⎜ .. ⎟ ⎜ . . . ⎜ ⎟ ⎜ ⎟ . . . . . ⎜ 0 ⎟⎜ . . . . . . = ⎟ ⎜ ⎟. . . ⎜ ⎟⎜ ⎟ ⎜ ⎟ ⎜ . ⎟⎝ . . . ⎠ ⎝ ⎠ .. .. .. ⎠ Mn−2 dn−2 ⎝ .. Mn−1 dn−1 − cn−1 Mn 0 ··· an−1 1 Hemos obtenido un sistema cuya matriz de coeficientes es tridiagonal. Para su resolución podríamos utilizar el algoritmo de Thomas visto en el capítulo anterior. Una vez resuelto el sistema, basta sustituir en (3.14) para obtener los distintos polinomios del spline cúbico. Ejemplo 3.11 Considerar la tabla de valores x f (x)
0 0
1 1
2 4
3 9
4 16
5 25
Obtener el spline natural que interpola los puntos de la tabla. Solución: Como el spline pedido es natural, tenemos que M0 = M5 = 0. Teniendo en cuenta que hj = 1, j = 1, . . . , 5, calculamos los valores ai = 0.25, ci = 0.25, di = 3, i = 1, . . . , 4, que dan lugar a la matriz ⎞ ⎛ ⎞ ⎛ 1 0.25 0 0 1 c1 0 0 ⎜ a2 1 c2 0 ⎟ ⎜ 0.25 1 0.25 0 ⎟ ⎟ ⎜ ⎟. A=⎜ ⎝ 0 a 3 1 c3 ⎠ = ⎝ 0 0.25 1 0.25 ⎠ 0 0 a4 1 0 0 0.25 1 Tenemos que resolver el sistema ⎛
⎞ ⎛ M1 d1 ⎜ M2 ⎟ ⎜ d 2 ⎟ ⎜ A⎜ ⎝ M3 ⎠ = ⎝ d 3 M4 d4
cuya solución es
⎛
⎞ ⎛ M1 2.526 ⎜ M2 ⎟ ⎜ 1.895 ⎜ ⎟=⎜ ⎝ M3 ⎠ ⎝ 1.895 2.526 M4
⎞ ⎟ ⎟ ⎠
⎞ ⎟ ⎟. ⎠ 77
Capítulo 3. Interpolación y aproximación de funciones
Sustituyendo en (3.14) obtenemos el spline 2.526 3 2.526 x + 1− x, S1 (x) = 6 6 2.526 1.895 1.895 S2 (x) = (2 − x)3 + (x − 1)3 + 4 − (x − 1) 6 6 6 2.526 + 1− (2 − x) , 6 1.895 1.895 1.895 (3 − x)3 + (x − 2)3 + 9 − (x − 2) S3 (x) = 6 6 6 1.895 + 4− (3 − x) , 6 1.895 2.526 2.526 (4 − x)3 + (x − 3)3 + 16 − (x − 3) S4 (x) = 6 6 6 1.895 + 9− (4 − x) , 6 2.526 2.526 3 S5 (x) = (5 − x) + 25(x − 4) + 16 − (5 − x) . 6 6 En la Figura 3.5, representamos los puntos de la tabla junto con la gráfica del spline obtenido. Ejemplo 3.12 Aproximar mediante splines cúbicos la función de Runge utilizando nodos igualmente espaciados. Solución: En la Figura 3.6 representamos la función de Runge (Ecuación (3.11)) junto a la aproximación polinónica mediante splines cúbicos utilizando 9 nodos igualmente espaciados. Podemos observar que la interpolación por splines para la función de Runge no tiene los mismos problemas que la interpolación utilizando el polinomio interpolador (ver Figura 3.3). Hemos descrito con detalle los splines cúbicos, pero obviamente, utilizando la Definición 3.1 se puede proceder de forma análoga para otros grados del polinomio que se construye entre dos puntos soporte consecutivos. Si, por ejemplo, son polinomios de grado 1 (rectas) se obtiene una función quebrada en la que cada segmento une dos puntos soporte consecutivos y que es un tipo de interpolación que se utiliza desde hace tiempo para calcular valores de funciones tabuladas haciendo un 78
3.4 Derivación e integración numérica 25 Datos Spline 20
15
10
5
0
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
Figura 3.5: Interpolación de los datos del Ejemplo 3.11 mediante un spline natural.
cálculo muy sencillo que utiliza sólo los dos valores más cercanos disponibles en la tabla.
3.4 3.4.1
Derivación e integración numérica Derivación numérica
Como veremos a lo largo del curso, con mucha frecuencia es necesario conocer el valor aproximado de la derivada de una función en varios puntos. Veremos cómo, a partir del cálculo de una función en valores próximos al que se quiere calcular la derivada, es posible obtener una aproximación a la misma. Si aproximamos esta función por el polinomio interpolador en los puntos vecinos considerados es inmediato obtener, derivando el polinomio, una aproximación a la derivada de la función. Sin embargo, si conocemos el valor de la función en un número de puntos igualmente espaciados es posible obtener aproximaciones a la derivada de manera sencilla y que a la vez nos permiten conocer el orden de aproximación. 79
Capítulo 3. Interpolación y aproximación de funciones
1 0.9
F. Runge Datos Spline
0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 −1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
Figura 3.6: Interpolación de la función de Runge por spline con nueve puntos soporte igualmente espaciados.
Dada la función, f (x), supongamos que queremos calcular una aproximación al valor de su derivada evaluada en x = x0 , y que conocemos los siguientes valores de la función x0 − 2h f (x0 − 2h)
x0 − h f (x0 − h)
x0 f (x0 )
x0 + h f (x0 + h)
x0 + 2h f (x0 + 2h)
Si aplicamos el desarrollo de Taylor a las funciones f (x0 +h) y f (x0 −h) obtenemos h2 f (x0 ) + 2! h2 f (x0 − h) = f (x0 ) − hf (x0 ) + f (x0 ) − 2! Restando las dos ecuaciones tenemos f (x0 + h)
=
f (x0 ) + hf (x0 ) +
h3 f (x0 ) + 3! h3 f (x0 ) + 3!
f (x0 + h) − f (x0 − h) = 2hf (x0 ) +
h4 iv) f (x0 ) + O(h5 ) 4! h4 iv) f (x0 ) + O(h5 ). 4!
h3 f (x0 ) + O(h5 ), 3
y despejando f (x0 ) obtenemos f (x0 ) = 80
f (x0 + h) − f (x0 − h) h2 − f (x0 ) + O(h4 ). 2h 3!
(3.16)
3.4 Derivación e integración numérica
Si h es suficientemente pequeño, podemos tomar la aproximación f (x0 )
f (x0 + h) − f (x0 − h) , 2h
(3.17)
donde sabemos que estamos cometiendo un error de orden O(h2 ), por lo que decimos que es una aproximación de segundo orden. Por otro lado, si en vez de restar las funciones las sumamos obtenemos f (x0 + h) + f (x0 − h) = 2f (x0 ) + h2 f (x0 ) +
h4 iv) f (x0 ) + O(h5 ), 12
(3.18)
y si despejamos f (x0 ) obtenemos f (x0 ) =
f (x0 − h) − 2f (x0 ) + f (x0 + h) h2 iv) − f (x0 ) + O(h3 ). h2 12
(3.19)
Por tanto, podemos aproximar el valor de la segunda derivada por f (x0 )
f (x0 − h) − 2f (x0 ) + f (x0 + h) , h2
(3.20)
siendo ésta una aproximación de segundo orden. Estas aproximaciones tanto a la primera como a la segunda derivada nos serán de gran utilidad en el desarrollo de métodos numéricos para resolver ecuaciones diferenciales. Si se quiere obtener resultados más precisos podemos hacer uso de la función evaluada en más puntos. Por ejemplo, es inmediato ver que si en (3.16) en vez de tomar los dos puntos vecinos tomamos los siguientes, se tiene f (x0 ) =
h2 f (x0 + 2h) − f (x0 − 2h) − 4 f (x0 ) + O(h4 ). 4h 3!
(3.21)
Por tanto, si multiplicamos por 4 la ecuación (3.16) y le restamos (3.21) se cancela el término dominante del error, obteniendo 1 (f (x0 − 2h) − 8f (x0 − h) + 8f (x0 + h) − f (x0 + 2h)) + O(h4 ) 12h (3.22) que tiene un error de orden O(h4 ). f (x0 ) =
Es posible también aproximar el valor de la derivada teniendo en cuenta sólo puntos que se encuentran a la derecha de x0 o a su izquierda, o si los puntos no están igualmente espaciados. Un método alternativo para calcular aproximaciones de la derivada de una función basadas en los valores de la función en una serie de puntos hace uso del polinomio interpolador. Supongamos, por ejemplo, que queremos calcular la derivada f (x0 ), basándonos en la siguiente tabla de puntos 81
Capítulo 3. Interpolación y aproximación de funciones
x0 − h f (x0 − h)
x0 f (x0 )
x0 + h f (x0 + h)
Se calcula el polinomio interpolador de Lagrange asociado con la tabla. Para ello, se tiene L2,0 (x)
=
L2,1 (x)
=
L2,2 (x)
=
1 (x − x0 ) (x − x0 − h) , 2h2 1 − 2 (x − x0 + h) (x − x0 − h) , h 1 (x − x0 + h) (x − x0 ) . 2h2
y, por tanto, P2 (x)
=
f (x0 − h) f (x0 ) (x − x0 ) (x − x0 − h) − (x − x0 + h) (x − x0 − h) 2h2 h2 f (x0 + h) + (x − x0 + h) (x − x0 ) . 2h2
Derivando se obtiene que P2 (x0 ) =
f (x0 + h) − f (x0 − h) ≈ f (x0 ) , 2h
que coincide con (3.17). Usando esta técnica se pueden obtener aproximaciones de la derivada de una función que se basen en cualquier conjunto de puntos. De la misma forma, se pueden obtener fórmulas que aproximen las derivadas de orden superior de una función en un punto. Por otro lado, si se tiene un conjunto de puntos igualmente espaciados y una
aproximación de O h2 de la derivada de una función f (x0 ) = D0 (h) + Ch2 , si evaluamos esta misma expresión con un paso 2h, se tiene f (x0 ) = D0 (2h) + C4h2 , y, por tanto,
4f (x0 ) − f (x0 ) ≈ 4D0 (h) − D0 (2h) ,
o sea, f (x0 ) ≈ 82
4D0 (h) − D0 (2h) , 3
3.4 Derivación e integración numérica
que constituye una aproximación de orden superior de la derivada. En particular, si D0 (h)
=
D0 (2h)
=
f (x0 + h) − f (x0 − h) , 2h f (x0 + 2h) − f (x0 − 2h) , 4h
se tiene, f (x0 )
≈ =
4D0 (h) − D0 (2h) 3 −f (x0 + 2h) + 8f (x0 + h) − 8f (x0 − h) + f (x0 − 2h) , 12h
que, com hemos visto antes (ecuación (3.22)), es una aproximación de orden O h4 de la derivada. A este proceso, se le conoce como el método de extrapolación de Richardson.
3.4.2
Integración numérica
Pasemos ahora a estudiar algunos métodos numéricos que nos permitan calcular el valor de la integral definida dada por "
b
(3.23)
f (x) dx. a
Si el intervalo [a, b] es muy grande podemos realizar una partición del mismo en N partes de longitud h = (b − a)/N y tendremos en cuenta la propiedad de las integrales definidas "
"
b
f (x) dx = a
"
a+h
a+2h
f (x) dx + a
"
a+h a+(N −1)h
+
f (x) dx + · · · + "
a+N h
f (x) dx + a+(N −2)h
f (x) dx.
(3.24)
a+(N −1)h
Suponiendo que h es suficientemente pequeño, vamos a estudiar varios métodos para aproximar el valor de la integral en cada uno de los intervalos por separado. Lo estudiaremos en un intervalo genérico. El proceso a seguir es el siguiente: • Consideramos el intervalo a integrar:
# α+h α
f (x) dx.
• Evaluamos la función f (x) en m puntos del intervalo [α, α + h]. 83
Capítulo 3. Interpolación y aproximación de funciones
• Calculamos el polinomio interpolador de Lagrange para estos puntos. • Calculamos la integral de este polinomio obteniendo una expresión de la forma: " α+h m f (x) dx = h bi f (α + ci h) + O(hp+1 ). (3.25) α
i=1
Los coeficientes bi , ci reciben el nombre de pesos y nodos, respectivamente, mientras que p es el orden del método. Obviamente, dependiendo de cuántos puntos se elijan y cómo se elijan se obtendrán resultados más o menos precisos. Por ejemplo, evaluando f (x) en los dos extremos y tomando el polinomio interpolador de primer orden que pasa por ellos (la recta que une ambos puntos) se obtiene 1 P1 (x) = ((x − α)(f (α + h) − f (α)) + hf (α)) h e integrando se tiene "
"
α+h
f (x) dx
α
α+h α
P1 (x) dx =
h (f (α + h) + f (α)). 2
(3.26)
Este método recibe el nombre de método del trapecio, y se trata de un método de segundo orden. Otros métodos más precisos se pueden obtener utilizando más puntos del intervalo. Utilizando un polinomio interpolador de segundo grado en una distribución de puntos igualmente espaciados se obtiene el método de Simpson, que es de orden 4 y que viene dado por " α+h h h f (α + h) + 4f α + + f (α) + O(h5 ). f (x) dx = (3.27) 6 2 α Una vez conocido el método para evaluar un intervalo, podemos calcular la integral buscada (3.24). Por ejemplo, si utilizamos el método del trapecio y denotamos fi = f (a + ih), i = 0, 1, 2, . . . , N , donde a + N h = b se tiene que "
"
b
a+N h
f (x) dx = a
f (x) dx a
= =
! h (f0 + f1 ) + (f1 + f2 ) + . . . + (fN −2 + fN −1 ) + (fN −1 + fN ) 2 N −1 h (f0 + fN ) + h fi , (3.28) 2 i=1
que tiene una forma más adecuada para ser implementada en un algoritmo numérico. 84
3.5 Ejercicios resueltos
3.5
Ejercicios resueltos
Ejercicio 3.1 Considera los valores de la siguiente tabla xi fi
0 0.5
1/2 1.2
1 2
3/2 1.4
2 0.7
Si P (x) es el polinomio que interpola estos datos, calcula P (0.2) de las siguientes formas: a) Hallando el polinomio interpolador de Lagrange. b) Utilizando el algoritmo de Neville. c) Utilizando la fórmula de interpolación de Newton. Solución:
a) Hallando el polinomio interpolador de Lagrange. En primer lugar, calculamos los 5 polinomios de Lagrange de orden 4, L4,0 (x)
= =
L4,1 (x)
= =
L4,2 (x)
= =
L4,3 (x)
= =
L4,4 (x)
= =
(x − 1/2)(x − 1)(x − 3/2)(x − 2) (0 − 1/2)(0 − 1)(0 − 3/2)(0 − 2) 2 (x − 1/2)(x − 1)(x − 3/2)(x − 2), 3 (x − 0)(x − 1)(x − 3/2)(x − 2) (1/2 − 0)(1/2 − 1)(1/2 − 3/2)(1/2 − 2) 8 − x(x − 1)(x − 3/2)(x − 2), 3 (x − 0)(x − 1/2)(x − 3/2)(x − 2) (1 − 0)(1 − 1/2)(1 − 3/2)(1 − 2) 4x(x − 1/2)(x − 3/2)(x − 2), (x − 0)(x − 1/2)(x − 1)(x − 2) (3/2 − 0)(3/2 − 1/2)(3/2 − 1)(3/2 − 2) 8 − x(x − 1/2)(x − 1)(x − 2), 3 (x − 0)(x − 1/2)(x − 1)(x − 3/2) (2 − 0)(2 − 1/2)(2 − 1)(2 − 3/2) 2 x(x − 1/2)(x − 1)(x − 3/2), 3 85
Capítulo 3. Interpolación y aproximación de funciones
y a partir de éstos obtenemos el polinomio interpolador buscado P (x)
= =
0.5 L4,0 (x) + 1.2 L4,1 (x) + 2 L4,2 (x) + 1.4 L4,3 (x) + 0.7 L4,4 (x) 0.5 − 1.1 x + 8.33333 x2 − 7.6 x3 + 1.86667 x4 .
Luego: P (0.2) = 0.55552. b) Utilizando el algoritmo de Neville Este algoritmo es útil cuando se quiere calcular directamente el valor de P (0.2) a través de la siguiente tabla: x0 = 0
0 P0 = 0.5
x1 = 1/2
P1 = 1.2
1
2
3
4
P01 P012 P12 x2 = 1
P2 = 2
P0123 P123
P23 x3 = 3/2
P3 = 1.4
P01234 P1234
P234 P34
x4 = 2
P4 = 0.7
donde
86
P01
=
P12
=
P23
=
P34
=
P012
=
P123
=
P124
=
P0123
=
P1234
=
P01234
=
(0.2 − x0 )P1 − (0.2 − x1 )P0 = 0.78 x1 − x0 (0.2 − x1 )P2 − (0.2 − x2 )P1 = 0.72 x2 − x1 (0.2 − x2 )P3 − (0.2 − x3 )P2 = 2.96 x3 − x2 (0.2 − x3 )P4 − (0.2 − x4 )P3 = 3.22 x4 − x3 (0.2 − x0 )P12 − (0.2 − x2 )P01 = 0.768 x2 − x0 (0.2 − x1 )P23 − (0.2 − x3 )P12 = 0.048 x3 − x1 (0.2 − x2 )P34 − (0.2 − x4 )P23 = 2.752 x4 − x2 (0.2 − x0 )P123 − (0.2 − x3 )P012 = 0.672 x3 − x0 (0.2 − x1 )P234 − (0.2 − x4 )P123 = −0.4928 x4 − x1 (0.2 − x0 )P1234 − (0.2 − x4 )P0123 = 0.55552 x4 − x0
3.5 Ejercicios resueltos
La solución viene dada por P01234 = 0.55552 c) Utilizando la fórmula de interpolación de Newton. Los coeficientes de los polinomios de interpolación de Newton se obtienen de la siguiente tabla 0 x0 f [x0 ]
1
2
3
4
f [x0 , x1 ] x1 f [x1 ]
f [x0 , x1 , x2 ] f [x1 , x2 ]
x2 f [x2 ]
f [x0 , x1 , x2 , x3 ] f [x1 , x2 , x3 ]
f [x2 , x3 ] x3 f [x3 ]
f [x0 , x1 , x2 , x3 , x4 ] f [x1 , x2 , x3 , x4 ]
f [x2 , x3 , x4 ] f [x3 , x4 ]
x4 f [x4 ] donde f [xi ] = fi , i = 0, . . . , 4, y el resto de coeficientes se obtienen muy fácilmente por diferencias divididas como sigue f [x0 , x1 ]
=
f [x1 , x2 ]
=
f [x2 , x3 ]
=
f [x3 , x4 ]
=
f [x0 , x1 , x2 ]
=
f [x1 , x2 , x3 ]
=
f [x2 , x3 , x4 ]
=
f [x0 , x1 , x2 , x3 ]
=
f [x1 , x2 , x3 , x4 ]
=
f [x0 , x1 , x2 , x3 , x4 ]
=
1.2 − 0.5 = 1.4 0.5 − 0 2 − 1.2 = 1.6 f [0.5, 1] = 1 − 0.5 1.4 − 2 = −1.2 f [1, 1.5] = 1.5 − 1 0.7 − 1.4 = −0.2 f [1.5, 2] = 2 − 1.5 1.6 − 1.4 = 0.2 f [0, 0.5, 1] = 1−0 −1.2 − 1.6 = −2.8 f [0.5, 1, 1.5] = 1.5 − 0.5 −1.4 + 1.2 = −0.2 f [1, 1.5, 2] = 2−1 −2.8 − 0.2 = −2 f [0, 0.5, 1, 1.5] = 1.5 − 0 −0.2 + 2.8 = 1.7333 f [0.5, 1, 1.5, 2] = 2 − 0.5 1.7333 + 2 = 1.86667 f [0, 0.5, 1, 1.5, 2] = 2−0 f [0, 0.5] =
87
Capítulo 3. Interpolación y aproximación de funciones
Hay muchas opciones distintas de escribir el polinomio según el orden que tomemos en la factorización. Para reducir errores de redondeo, es preferible empezar a construir el polinomio empezando por los puntos vecinos al del punto en el que queremos evaluar el polinomio. En nuestro caso, lo queremos evaluar en x = 0.2, por lo que es preferible empezar por x0 = 0 o por x1 = 0.5. Presentamos las dos opciones, cuyo resultado final, obviamente, es el mismo (si no hay errores de redondeo): • La primera de las opciones es: P (x)
=
f [x0 ] + f [x0 , x1 ](x − x0 ) + f [x0 , x1 , x2 ](x − x0 )(x − x1 ) +f [x0 , x1 , x2 , x3 ](x − x0 )(x − x1 )(x − x2 ) +f [x0 , x1 , x2 , x3 , x4 ](x − x0 )(x − x1 )(x − x2 )(x − x3 ),
y sustituyendo por los coeficientes obtenidos en la tabla se tiene 1 1 P (x) = 0.5 + 1.4 x + 0.2 x x − − 2x x − (x − 1) 2 2 3 1 (x − 1) x − . +1.86667 x x − 2 2 • Para la segunda opción tenemos P (x)
=
f [x1 ] + f [x1 , x0 ](x − x1 ) + f [x1 , x0 , x2 ](x − x1 )(x − x0 ) +f [x1 , x0 , x2 , x3 ](x − x1 )(x − x0 )(x − x2 ) +f [x1 , x0 , x2 , x3 , x4 ](x − x1 )(x − x0 )(x − x2 )(x − x3 ).
Teniendo en cuenta que f [x1 , x0 ] = f [x0 , x1 ],
f [x1 , x0 , x2 ] = f [x0 , x1 , x2 ],
...
vemos que podemos hacer uso de los coeficientes de la tabla, obteniendo el polinomio: 1 1 1 P (x) = 1.2 + 1.4 x − + 0.2 x − x−2 x− x (x − 1) 2 2 2 3 1 x(x − 1) x − . +1.86667 x − 2 2 Los dos polinomios son equivalentes, y en ambos casos se obtiene que P (0.2) = 0.55552. 88
3.5 Ejercicios resueltos
Ejercicio 3.2 Dadas las funciones f1 (x) = ex , f2 (x) = sen(x), f3 (x) = cos(x), obtén las aproximaciones de las derivadas f1 (1), f2 (1), y f3 (1) usando la aproximación del cociente incremental f (1) ≈
f (1 + h) − f (1) , h
con h = 10−k , k = 1, 2, . . . , 6. Repite los cálculos utilizando la aproximación de segundo orden de la derivada f (1) ≈
f (1 + h) − f (1 − h) . 2h
Solución: Si se utiliza la primera aproximación de la derivada se obtienen los siguientes valores h 0.1 0.01 0.001 0.0001 0.00001 0.000001 Valor exacto
f1 (x) = ex 2.8588 2.7319 2.7196 2.7184 2.7183 2.7183 2.7183
f2 (x) = sen(x) 0.49736 0.53609 0.53988 0.54026 0.54030 0.54030 0.54030
f3 (x) = cos(x) -0.86706 -0.84416 -0.84174 -0.84150 -0.84147 -0.84147 -0.84147
Si se utiliza ahora la aproximación de segundo orden de la derivada, se tienen los valores h 0.1 0.01 0.001 0.0001 0.00001 0.000001 Valor exacto
f1 (x) = ex 2.7228 2.7183 2.7183 2.7183 2.7183 2.7183 2.7183
f2 (x) = sen(x) 0.53940 0.54029 0.54030 0.54030 0.54030 0.54030 0.54030
f3 (x) = cos(x) -0.84007 -0.84146 -0.84147 -0.84147 -0.84147 -0.84147 -0.84147
Ejercicio 3.3 Repite el proceso para obtener la aproximación f (x0 ) ≈
f (x0 + h) − f (x0 − h) , 2h
basándose en la formulación de Newton del polinomio interpolador. 89
Capítulo 3. Interpolación y aproximación de funciones
Solución: El primer paso consiste en construir el polinomio interpolador de Newton asociado a la tabla x f (x)
x0 − h f (x0 − h)
x0 f (x0 )
x0 + h f (x0 + h)
El polinomio de Newton asociado a ((x0 − h) , f (x0 − h)) es P0 (x) = f (x0 − h) . El polinomio de Newton asociado a (x0 − h, f (x0 − h)), (x0 , f (x0 )) es P1 (x) = f (x0 − h) +
f (x0 ) − f (x0 − h) (x − x0 + h) . h
Y, por último el polinomio asociado a los puntos de la tabla es P2 (x)
f (x0 − h) +
=
+
1 (f (x0 ) − f (x0 − h)) (x − x0 + h) h
1 (f (x0 + h) + f (x0 − h) − 2f (x0 )) (x − x0 + h) (x − x0 ) . 2h2
Derivando, P2 (x)
=
1 (f (x0 ) − f (x0 − h)) h 1 + 2 (f (x0 + h) + f (x0 − h) − 2f (x0 )) ((x − x0 ) + (x − x0 + h)) , 2h
y, por tanto, P2 (x0 ) =
1 (f (x0 + h) − f (x0 − h)) . 2h
Ejercicio 3.4 Obtener la aproximación de f (x0 ) con menor error de truncamiento que se basa en f (x0 ), f (x0 + Δx) y f (x0 + 2Δx). Solución: Se escribe
90
f (x0 + Δx)
=
f (x0 + 2Δx)
=
1 1 f (x0 ) + Δxf (x0 ) + Δx2 f (x0 ) + Δx3 f (x0 ) + O Δx4 , 2 6
4 8 2 f (x0 ) + 2Δxf (x0 ) + Δx f (x0 ) + Δx3 f (x0 ) + O Δx4 . 2 6
3.5 Ejercicios resueltos
Escribimos ahora, af (x0 ) + bf (x0 + Δx) + cf (x0 + 2Δx)
1 = (a + b + c)f (x0 ) + Δx(b + 2c)f (x0 ) + Δx2 (b + 4c)f (x0 ) + O Δx3 . 2
Se impone que a+b+c=0 b + 2c = 1 b + 4c = 0 cuya solución es a=−
3 1 , b=2, c=− . 2 2
Por tanto queda
1 3 − f (x0 ) + 2f (x0 + Δx) − f (x0 + 2Δx) = Δxf (x0 ) + O Δx3 , 2 2 y la aproximación se escribe f (x0 ) =
1 (−3f (x0 ) + 4f (x0 + Δx) − f (x0 + 2Δx)) + O Δx2 . 2Δx
Ejercicio 3.5 Demuestra que f (x0 ) ≈
2f0 − 5f1 + 4f2 − f3 , h2
siendo fi = f (xi ), i = 0, . . . , 3. Solución: Si usamos el desarrollo de Taylor, se puede escribir f1
=
f2
=
f3
=
1 1 f0 + hf0 + h2 f0 + h3 f0 + O h4 , 2 3!
1 1 f0 + 2hf0 + 4h2 f0 + 8h3 f0 + O h4 , 2 3!
1 1 f0 + 3hf0 + 9h2 f0 + 27h3 f0 + O h4 . 2 3!
Si suponemos que f (x0 ) =
1 (a0 f0 + a1 f1 + a2 f2 + a3 f3 ) , h2
91
Capítulo 3. Interpolación y aproximación de funciones
haciendo uso de los desarrollos de Taylor, se obtiene el sistema a0 + a 1 + a 2 + a 3 a1 + 2a2 + 3a3 1 4 9 a1 + a2 + a3 2 2 2 1 8 27 a1 + a2 + a3 6 6 6
=
0,
=
0,
=
1,
=
0,
cuya solución es a0 = 2, a1 = −5, a2 = 4, a3 = −1. Ejercicio 3.6 Considera los valores de la siguiente tabla x 2 f (x) = e−x
0 1
1 e
1 0.36788
1 e4
2 0.018316
A partir de estos datos calcula: 2
a) Una aproximación a exactas:
2
d2 e−x de−x (1) y (1). Compara con las soluciones dx dx2
2
2
de−x 1 (1) = −2 −0.73576, dx e
d2 e−x 1 (1) = 2 0.73576 dx2 e
b) La función error viene dada por 2 erf(x) = √ π
"
x
2
e−s ds.
0
Aproxima el valor de la integral en el intervalo x ∈ [0, 2], (esto es, aproxima el valor de erf(2)) utilizando: i) Dos pasos con el método del trapecio. ii) Un paso con el método de Simpson. Halla el error cometido en cada caso comparando con la solución exacta (erf(2) = 0.99532).
92
3.5 Ejercicios resueltos
Solución:
a) 2
de−x (1) dx
1 e4
−1 −0.49084 , 2
2
1 1 d2 e−x e4 − 2 e + 1 (1) 0.28256 , dx2 12 donde vemos que se trata de aproximaciones bastante pobres debido a la gran separación entre los puntos.
b)
i) 2 T1 = √ π
1 1 1 1 1 = 0.98963 , 1+ + + 4 2 e 2 e e
ErrT 1 = |erf(2) − T1 | = 0.0056917 . ii) 2 2 S1 = √ π6
1 1 1 + 4 + 4 = 0.93649 , e e
ErrS1 = |erf(2) − S1 | = 0.058830 . En este ejercicio, el método del trapecio, que es de segundo orden, da una solución más precisa que el método de Simpson porque hemos utilizado pasos de integración grandes. Ejercicio 3.7 Repite el Ejercicio 3.6 pero utilizando los datos de la siguiente tabla que contiene más puntos x f (x)
0 1
1
e1/4
1 2
0.77880 2
1 e
1 0.36788
1
e9/4
3 2
0.10540
1 e4
2 0.018316
2
d2 e−x de−x (1) y (1) utilizando sólo el valor en x = 1 y sus dos a) Aproxima dx dx2 vecinos. Compara con las soluciones exactas. b) Aproxima el valor de erf(2) utilizando: i) Cuatro pasos con el método del trapecio. ii) Dos pasos con el método de Simpson. Halla el error cometido en cada caso. 93
Capítulo 3. Interpolación y aproximación de funciones
Solución:
a) 2
de−x (1) dx 2
d2 e−x (1) dx2
1 e9/4
1 e9/4
− 1
1 e1/4
−0.67340
− 2 1e + 1 2
1 e1/4
0.59376
2
donde vemos que las aproximaciones son mejores que las anteriores debido a la menor separación entre los puntos. b)
i) =
T2
=
1 2 √ 1+ π 4 1 2 √ 1+ π 4
1 1 + + 4 e1/4 e1/4 1 1 1 1 + + e4 2 e1/4 e 1
1 1 1 1 1 1 + + + 4 + 4 e e9/4 4 e9/4 e 1 0.99367 + 9/4 e
1 e
ErrT 2 = |erf(2) − T2 | 0.0016505 ii) 2 S2 = √ π
1 1 1 1 1 1 1 1 + 4 1/4 + + + 9/4 + 4 = 0.99502 6 e 6 e e e e ErrS2 = |erf(2) − S2 | 0.00030349
Vemos ahora que el método de Simpson, que es de cuarto orden, es bastante más preciso que el del trapecio, que es de segundo orden, siendo la diferencia mayor según vamos reduciendo los pasos de integración. Ejercicio 3.8 Considera las siguientes tablas de datos
I)
x f (x)
2 5
4 12
II)
x f (x)
2 5
4 12
6 26
Construye la tabla de diferencias divididas para la tabla I) y escribe los dos polinomios de Newton que puedes contruir a partir de estos coeficientes. Repite lo mismo para la tabla II) escribiendo ahora los 4 polinomios correspondientes. 94
3.5 Ejercicios resueltos
Solución: Los coeficientes de los polinomios de interpolación de Newton se obtienen de la siguiente tabla
x0 = 2
0 f [x0 ] = 5
1
2
f [x0 , x1 ] = x1 = 4
f [x1 ] = 12
x2 = 6
f [x2 ] = 26
7 2
f [x0 , x1 , x2 ] =
f [x1 , x2 ] = 7
7 8
Observemos que la tabla anterior se corresponde a los coeficientes para la tabla II) y los datos no resaltados en negrita corresponden a los coeficientes para la tabla I). Los polinomios para la tabla I) son P (x) = f [x0 ] + f [x0 , x1 ](x − x0 ), P (x) = f [x1 ] + f [x1 , x0 ](x − x1 ). Y para la tabla I) tenemos los siguientes polinomios de interpolación de Newton P (x) P (x)
= =
f [x0 ] + f [x0 , x1 ](x − x0 ) + f [x0 , x1 , x2 ](x − x0 )(x − x1 ), f [x1 ] + f [x1 , x0 ](x − x1 ) + f [x1 , x0 , x2 ](x − x1 )(x − x0 ),
P (x)
=
f [x1 ] + f [x1 , x2 ](x − x1 ) + f [x1 , x2 , x0 ](x − x1 )(x − x2 ),
P (x)
=
f [x2 ] + f [x2 , x1 ](x − x2 ) + f [x2 , x1 , x0 ](x − x2 )(x − x1 ).
Ejercicio 3.9 A partir de los datos de la siguiente tabla x f (x) = 2x
0 1
1 2
2 4
a) Calcula una aproximación numérica a la integral " I=
2
2x dx
0
utilizando dos pasos del método del trapecio. Calcula el error cometido (toma ln(2) 0.69) b) Aplica un método de segundo orden para aproximar f (1) y calcula el error cometido. 95
Capítulo 3. Interpolación y aproximación de funciones
Solución: a) La solución exacta es "
2
2x dx =
0
3 4.32 . ln(2)
Utilizando dos pasos del método del trapecio se tiene I
1 9 1 (1 + 2) + (2 + 4) = = 4.5 . 2 2 2
El error cometido es |4.5 − 4.32| = 0.18. b) De la tabla deducimos que h = 1 y, por tanto, la aproximación a f (1) viene dada por 4−0 f (2) − f (0) = = 2. f (1) 2 2 La solución exacta es f (1) = 2 ln(2) = 1.38, y, por tanto, el error cometido es |2 − 1.38| = 0.62.
3.6
Ejercicios propuestos
1. Calcula el polinomio interpolador, P (x), para los siguientes datos xi fi
0 0.5
0.5 1.2
1 2
1.5 1.4
2 0.7
Calcula P (0.2) y P (2.5) utilizando los métodos de Neville, Lagrange y Newton. Analiza los resultados obtenidos. √ 2. Aproxima 3 usando la función f (x) = 3x y las abcisas x0 = −1, x1 = 0, x2 = 1, x3 = 2, x4 = 3, utilizando: a) El método de Neville. b) El método de Lagrange. c) El método de Newton. d ) Un spline natural. e) Un spline S(x) tal que S (x0 ) = f0 , S (x4 ) = f4 . f ) Un spline “no-nudo”. Compara los resultados obtenidos. 96
3.6 Ejercicios propuestos
√ √ 3. Aproxima 3 usando la función f (x) = x y las abcisas x0 = 0, x1 = 1, x2 = 2, x3 = 4, x4 = 9, utilizando: a) b) c) d) e) f)
El método de Neville. El método de Lagrange. El método de Newton. Un spline natural. Un spline S(x) tal que S (x0 ) = f0 , S (x4 ) = f4 . Un spline “no-nudo”.
Compara con los resultados obtenidos en el Ejercicio 2. 4. Calcula un spline natural, S(x), que interpole los nodos de la tabla del Ejercicio 1. Utilízalo para calcular S(0.2) y S(2.5). Analiza los resultados obtenidos y compara con los resultados del Ejercicio 1. 5. Calcula el polinomio interpolador de Newton para la siguiente función tabulada x f (x)
2 5
4 12
6 26
8 45
Si a posteriori sabemos que f (10) = 70, determina el nuevo polinomo interpolador de Newton. Calcula una aproximación a f (4.5) utilizando el polinomio interpolador. 6. Considera el Ejercicio 2 y calcula las aproximacines a segundo orden de f (0), f (1), f (2) y f (0), f (1), f (2), y compara con la solución exacta. 7. Considera el Ejercicio 2 y calcula de forma aproximada la integral " 3 80 f (x) dx = 3 ln(3) −1 dividiendo el intervalo en 4 partes y utilizando el método del trapecio; y dividiéndolo en 2 partes y utilizando el método de Simpson. Compara ambas aproximaciones con la solución exacta dada. 8. La función error viene dada por 2 erf(x) = √ π
"
x
2
e−s ds.
0
Considera los valores de la siguiente tabla x f (x)
0 1
1
2
1 e
1 e2
Utiliza el método de Simpson con un solo paso para aproximar el valor de erf(1), y compara con la solución exacta (erf(1) = 0.842701). 97
Capítulo 4
Métodos numéricos para problemas de valor inicial 4.1
Introducción
Los métodos analíticos de integración de ecuaciones diferenciales son útiles para resolver sólo una pequeña parte de las ecuaciones diferenciales que aparecen en la práctica. Este hecho justifica, junto al avance de la capacidad de computación, el interés práctico por los métodos que se denominan aproximados. Los métodos numéricos son los métodos aproximados de uso más extendido en la resolución de problemas reales científicos y técnicos. Se caracterizan porque proporcionan una solución aproximada dada mediante una tabla de valores, y tienen la gran ventaja de basarse en procedimientos generales que no dependen del tipo de ecuación a resolver. No obstante, obtener resultados con una precisión aceptable con estos métodos exige tener que hacer un gran número de cálculos, para lo cual es necesario el uso del ordenador. Dedicamos este capítulo a exponer una introducción a los métodos numéricos para la resolución de problemas de valor inicial asociados a una ecuación diferencial. Recordemos que un problema de valores iniciales consiste en Dada una ecuación diferencial obtener la función solución y(t) de la que se conoce su valor y el de sus derivadas en un punto inicial t0 . En caso de resolver analíticamente el problema, las condiciones iniciales son las que permiten determinar las constantes arbitrarias de la solución general y, de esta 99
Capítulo 4. Métodos numéricos para problemas de valor inicial
forma, llegar a la expresión analítica de la solución y(t) del problema de valores iniciales. En cambio, si resolvemos el problema mediante un método numérico obtenemos, para cada punto t que se considere, un valor aproximado de la solución evaluada en dicho punto. En este capítulo presentamos métodos numéricos para obtener un valor aproximado de la solución y(t) del problema de valor inicial y = f (t, y), (4.1) y(t0 ) = y0 , donde y ∈ Rp . Esto es, estudiaremos la resolución de sistemas de ecuaciones diferenciales ordinarias (EDOs) con condiciones iniciales, donde y = (y1 , . . . , yp )T , f = (f1 , . . . , fp )T y ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ y1 y1,0 f1 (t, y1 , . . . , yp ) d ⎜ . ⎟ ⎜ ⎟ ⎟ ⎜ .. y0 = ⎝ ... ⎠ . (4.2) ⎠, ⎝ .. ⎠ = ⎝ . dt yp yp,0 fp (t, y1 , . . . , yp ) Supondremos siempre que la función f es tal que el problema tiene solución única en un intervalo que contiene a t0 . En el caso de un problema de valor inicial asociado a una ecuación diferencial lineal de orden p de la forma y p) = f (t, y, y , . . . , y p−1) ), p−1)
y(t0 ) = y0 , . . . , y p−1) (t0 ) = y0
,
consideraremos el cambio de variables y1 = y, y2 = y , . . . , yp = y p−1) , obteniendo un ⎛ y1 ⎜ d ⎜ ... ⎜ dt ⎝ yp−1 yp
sistema de ecuaciones diferenciales de primer orden equivalente ⎞ ⎛ ⎞ ⎛ ⎞ ⎞ ⎛ y0 y1 (t0 ) y2 .. ⎟ ⎜ ⎟ ⎜ ⎟ ⎟ ⎜ .. .. ⎟ ⎜ ⎟ ⎜ ⎟ ⎟ ⎜ . . . = , = ⎟ ⎜ p−2) ⎟ . ⎟ ⎜ ⎟ ⎜ ⎠ ⎝ ⎠ ⎝ ⎠ ⎠ ⎝ yp yp−1 (t0 ) y0 p−1) yp (t0 ) f (t, y1 , y2 , . . . , yp ) y0
Una ecuación diferencial lineal de orden p de la forma y p) + ap−1 (t)y p−1) + · · · + a1 (t)y + a0 (t)y = g(t), se corresponde con el caso particular en que f (t, y1 , y2 , . . . , yp ) = g(t) − ap−1 (t)yp − · · · − a1 (t)y2 − a0 (t)y1 . 100
4.1 Introducción
Ejemplo 4.1 Escribir la ecuación de segundo orden y + a1 (t)y + a0 (t)y = g(t),
y(t0 ) = y0 , y (t0 ) = y0 ,
como un sistema de ecuaciones de primer orden. Solución: Denotamos y1 = y,
y2 = y ,
derivamos y1 , y2 respecto a t y teniendo en cuenta la ecuación de segundo orden se llega a la expresión buscada d y2 y1 (0) y1 y0 = , . = y2 g(t) − a0 (t)y1 − a1 (t)y2 y0 y2 (0) dt En este capítulo estudiaremos algunos de los métodos numéricos más elementales y conocidos para resolver EDOs. Consideraremos que la función f es Lipschitz, esto es, existe λ ≥ 0 tal que, para una determinada norma f (t, v) − f (t, w) ≤ λv − w,
t ∈ [0, t∗ ],
v, w ∈ Rp .
Por simplicidad, siempre consideraremos que la función f es suficientemente suave y supondremos que es analítica. Por tanto, siempre se podrá desarrollar en serie de Taylor. Nuestro objetivo será obtener las aproximaciones yn+1 ≈ y(tn+1 ), n = 0, 1, . . . , donde tn+1 = tn + hn , n = 0, 1, . . . , con hn > 0 un paso de integración suficientemente pequeño, y para el que podremos hacer uso de los valores calculados previamente y0 , . . . , yn y la ecuación (4.1). El valor hn > 0 puede variar en cada paso de integración aunque por simplicidad en la presentación se tomará constante y, por tanto, tn = t0 + nh. Introducimos algunos conceptos que serán utilizados a lo largo del curso. Definicion 4.1 Método de un Paso: es una transformación de la forma yn+1 = ψh (tn , yn ), esto es, proporciona una aproximación a la solución exacta y(tn+1 ) partiendo sólo de la aproximación que se obtuvo en el paso anterior. Método Multipaso: es una transformación de la forma yn+1 = ψh (t0 , y0 , . . . , tn , yn ), esto es, da una aproximación a la solución exacta y(tn+1 ) partiendo de las aproximaciones que se obtuvieron en los pasos anteriores. Método Explícito: es una transformación de la forma yn+1 = ψh (t0 , y0 , . . . , tn , yn ), esto es, para calcular yn+1 sólo requiere de valores conocidos. Método Implícito: es una transformación de la forma yn+1 = ψh (t0 , y0 , . . . , tn+1 , yn+1 ), esto es, para calcular yn+1 hay que resolver una ecuación implícita. 101
Capítulo 4. Métodos numéricos para problemas de valor inicial
Partimos de la ecuación diferencial (4.1), con el objetivo de obtener el valor de la función y en el punto tf , conocido el valor de y en el punto t0 . Para ello, dividimos el intervalo [t0 , tf ] en N subintervalos iguales, tomando tn = tn−1 + h = t0 + nh, t −t n = 1, 2, . . . , N , h = f N 0 , donde tomamos tN = tf . En el primer paso se calcula un valor aproximado de la solución exacta en t1 = t0 + h, que llamaremos y1 . En el segundo paso, se calcula un valor aproximado, y2 , de la solución exacta en t2 = t1 + h, etc. En cada paso, los cálculos se llevan a cabo mediante la misma fórmula.
4.2
Método de Euler
El método de Euler es el más simple de los métodos numéricos de resolución de ecuaciones diferenciales. Se obtiene considerando el desarrollo de Taylor a primer orden en h, y(t0 + h) ≈ y(t0 ) + hy (t0 ). A partir de la ecuación diferencial y (t0 ) = f (t0 , y0 ), obtenemos y1 = y0 + hf (t0 , y0 ) . Análogamente, utilizando y1 como condición inicial, tenemos en el segundo paso, y2 = y1 + hf (t1 , y1 ), y, en general, el algoritmo recursivo viene dado por y0
=
y (t0 ) ,
yn+1
=
yn + hf (tn , yn ) ,
n = 1, 2, . . .
Geométricamente, este método consiste en realizar una aproximación de la curva y(t) mediante un polígono cuyo primer lado es tangente a la curva en t0 (véase la Fig. 4.1). El error que se comete en la primera iteración es, ε1
= = =
| y(t1 ) − y1 |=| y(t1 ) − y0 − hf (t0 , y0 ) |= y(t0 ) + hy (t0 ) + 1 h2 y (t0 ) + · · · − y0 − hf (t0 , y0 ) = 2 1 2 h y (t0 ) + · · · = O(h2 ) . 2
A este error se le llama error local o error de truncamiento del método. 102
4.2 Método de Euler
y y1=y0+hf(x0,y0)
y1
y(x1) y0 h x1
x0
x
Figura 4.1: Método de Euler.
Lógicamente, el error aumentará a medida que aumente el número de iteraciones. El valor práctico de este método es limitado aunque resulta útil para obtener al menos una primera aproximación de la solución, para un valor de h suficientemente pequeño. Ejemplo 4.2 Considerar el problema de valor inicial y = y − t, con la condición y(0) = y0 = 1.5, cuya solución analítica es y =1+
1 t e +t . 2
Calcular, mediante el método de Euler, una aproximación a y(1.5) tomando h = 0.25. Solución: Tomamos h = 0.25 y realizamos los cálculos, con un redondeo de cuatro decimales, que figuran en la siguiente tabla n 0 1 2 3 4 5 6
tn 0 0.25 0.50 0.75 1.00 1.25 1.50
yn 1.5000 1.8750 2.2812 2.7265 3.2206 3.7758 4.4072
y (tn ) 1.5000 1.8920 2.3244 2.8085 3.3591 3.9952 4.7408
|y (tn ) − yn | 0.0000 0.0170 0.0432 0.0820 0.1385 0.2194 0.3336 103
Capítulo 4. Métodos numéricos para problemas de valor inicial
Al final, se tiene que y(1.5) ≈ 4.4072 con un error de 0.3336. Como ya hemos comentado, el error va aumentado a medida que aumenta el número de iteraciones. Para el método de Euler, el siguiente teorema nos da una cota para el error global que se comete. Teorema 4.1 Consideremos y(t) la solución del problema del valor inicial y = f (t, y) , t0 ≤ t ≤ tf , y(t0 ) = y0 , y llamemos y0 , y1 , . . . , yn las aproximaciones generadas con el método de Euler con paso h. Supongamos que f es continua para t ∈ [t0 , tf ] e y ∈] − ∞, +∞[ y que existen constantes L y M tales que ∂f (t, y) ≤ L , |y | ≤ M . ∂y Entonces, para n = 0, 1, 2, . . . , N , se cumple |y (tn ) − yn | ≤
hM L(tn −t0 ) ! e −1 . 2L
(4.3)
A continuación introducimos otro concepto fundamental que es el orden de los métodos numéricos. Definicion 4.2 (Orden de un Método) Dado un método numérico que denotamos por yn+1 = ψh (tn , yn ), diremos que el orden del método es q si al reemplazar la solución aproximada, yn , por la correspondiente solución exacta en tn se tiene que y(tn+1 ) − ψh (tn , y(tn )) = O(hq+1 ) para todo h > 0, n ≥ 0 y para toda función f suficientemente suave. Veamos cuál es el orden del método de Euler aplicando la definición. Tenemos que el método viene dado por la transfomación ψh (tn , yn ) = yn + hf (tn , yn ), donde los valores aproximados deben de sustituirse por la solución exacta, con lo que obtenemos
(4.4) y(tn+1 ) − y(tn ) + hf (tn , y(tn ))
1 (4.5) = y(tn ) + hy (tn ) + h2 y (tn ) + · · · − y(tn ) + hy (tn ) 2 1 2 h y (tn ) + · · · = O(h2 ), = 2 por lo que se tiene que el método de Euler es de primer orden. 104
4.3 Método del desarrollo en serie de Taylor
Hemos de resaltar que el error local o de truncamiento del método de Euler es O h2 mientras que el error global obtenido en (4.3) es O (h). Esta reducción del error local al error global en un grado de h es típica de las técnicas numéricas para problemas de valor inicial. Ejemplo 4.3 Aplicar el método de Euler al problema del péndulo adimensional d dt
θ ω
=
ω − sen(θ)
,
θ0 = 0, ω0 = 3/2,
t ∈ [0, 10] tomando como pasos de integración h = 1/10 y h = 1/20. Dibujar θn frente a ωn en ambos casos y comparar los resultados. Solución: El método de Euler para este problema viene dado por θ ω θn+1 = θn + hωn θ = +h ó ω n − sen(θ) n ωn+1 = ωn − h sen(θn ), ω n+1 y para alcanzar el tiempo final tf = 10 utilizando un paso de integración h = 1/10 deberemos repetir el algoritmo N = 10/h = 100 veces. Los resultados obtenidos se muestran en la Figura 4.2 (la trayectoria exacta se corresponde con la línea continua, la del modelo linealizado (sen(θ) ≈ θ) con línea discontinua, y los resultados del método se corresponden con los cuadrados). Repetimos el mismo experimento tomando ahora h = 1/20 (el algoritmo se aplica N = 10/h = 200 veces, esto es, duplicamos el número de evaluaciones). Los resultados se corresponden con los círculos, donde se aprecia: (i) el error cometido va creciendo según se avanza en la integración y; (ii) si utilizamos un paso más pequeño podemos obtener mayor precisión a costa de una mayor cantidad de cálculos. Se aprecia que el error se reduce aproximadamente a la mitad cuando dividimos por dos el paso de integración, como corresponde a un método de primer orden.
4.3
Método del desarrollo en serie de Taylor
El método del desarrollo en serie de Taylor es un método de un paso. Suponiendo que la solución, y = y(t), admite desarrollo en serie de Taylor en un entorno del punto t = t0 , la solución de la ecuación diferencial en t1 se puede escribir y(t1 ) = y(t0 + h) = y(t0 ) + y (t0 )h + y (t0 )
h2 hn + · · · + y n) (t0 ) + ··· , 2! n! 105
Capítulo 4. Métodos numéricos para problemas de valor inicial
2 1.5 1
ω=dθ/dt
0.5 0
−0.5 −1 −1.5 −2
−2
−1
0
θ
1
2
Figura 4.2: Método de Euler aplicado al problema del Ejemplo 4.3.
donde los coeficientes pueden ser calculados a partir de la ecuación diferencial. Tendremos y(t0 ) y (t0 )
=
y0 ,
=
y (t0 )
=
f (t0 , y0 ), ∂f dy + ∇f = (ft + fy f )|(t0 ,y0 ) , ∂t dt (t0 ,y0 )
donde fy = ∇f (esto es, (∇f )ij =
∂fi ∂yj ).
De esta forma, sucesivamente, pueden obtenerse las derivadas de y en (t0 , y0 ). Por lo tanto, si consideramos el desarrollo de Taylor hasta orden 2 en h, obtenemos y(t1 )
=
y0 + f (t0 , y0 )h +
1 2 h (ft + fy f )|(t0 ,y0 ) + O(h3 ), 2!
(4.6)
donde denotamos por O(h3 ) a los siguientes términos del desarrollo que serán proporcionales a potencias de h iguales o superiores a 3. En este caso, podemos aproximar y(t1 ) por y1 y1 106
=
1 y0 + f (t0 , y0 )h + h2 (ft + fy f )|(t0 ,y0 ) . 2
(4.7)
4.3 Método del desarrollo en serie de Taylor
Una vez obtenido y1 , calculamos y2 sustituyendo en la expresión (4.7), t0 por t1 e y0 por el valor y1 que hemos obtenido. El método iterativo, consiste en seguir este proceso obteniéndose para la aproximación n + 1, yn+1
=
1 yn + f (tn , yn )h + h2 (ft + fy f )|(tn ,yn ) . 2
Vemos que el método de Euler puede considerarse también como el método de Taylor a primer orden. Ejemplo 4.4 Construir los métodos de Taylor de orden 1 y orden 2, para el problema de valor inicial y = y − t2 + 1 , 0 ≤ t ≤ 2 , y(0) = 0.5 .
(4.8)
Solución: El método de Taylor de orden 1 (o método de Euler) es yn+1 = yn + hy (tn ) = yn + hf (tn , yn ) . Para el problema (4.8),
yn+1 = yn + h yn − t2n + 1 = (1 + h)yn − ht2n + h . El método de Taylor de orden 2 es de la forma 1 yn+1 = yn + hy (ti ) + h2 y (ti ) . 2 Para el problema (4.8), se tiene y
=
y − t2 + 1 ,
y
=
y − 2t = y − t2 − 2t + 1 ,
y, por tanto, el método de Taylor de orden 2 es
1
yn+1 = yn + h yn − t2n + 1 + h2 yn − t2n − 2tn + 1 . 2 Este problema tiene como solución analítica y(t) = 1 −
1 t e +2t + t2 , 2
y nos permite comprobar el error cometido por el método.
107
Capítulo 4. Métodos numéricos para problemas de valor inicial
Como puede observarse, el proceso a seguir en el método del desarrollo de Taylor es, en general, costoso desde el punto de vista de los cálculos que hay que realizar. Puede resultar interesante su aplicación cuando la función f (t, y) admita derivadas parciales respecto de t e y que sean fáciles de calcular como son las funciones polinómicas, en cuyo caso las derivadas sucesivas se calcularán fácilmente y se anularán a partir de cierto término. En resumen, este método permite aumentar indefinidamente la precisión tomando muchos términos del desarrollo de Taylor, siempre a costa de aumentar también el esfuerzo computacional.
4.4
Métodos de Runge-Kutta
Como ya hemos comentado, el método del desarrollo en serie de Taylor es computacionalmente costoso debido, sobre todo, a la complicación creciente de las derivadas de f . Los métodos de Runge-Kutta (RK) evitan este cálculo mediante la evaluación de f en uno o varios puntos auxiliares, elegidos adecuadamente, de forma que el desarrollo en serie que se obtiene se ajuste al desarrollo de Taylor con una aproximación mejor que la del método de Euler. Para introducir los métodos RK es interesante empezar por la siguiente ecuación escalar y = f (t), y(0) = y0 , #t cuya solución trivial es y(t) = y0 + 0 f (τ ) dτ , o bien, para un paso de integración " y(tn+1 ) = y(tn ) +
tn+1
f (τ ) dτ,
n = 0, 1, . . . .
tn
Como vimos en el capítulo anterior, para h = tn+1 − tn podemos considerar la aproximación " tn+1 s f (τ ) dτ h bl f (tn + cl h), tn
l=1
donde los bl son los pesos y los cl son los correspondientes nodos del método elegido. Por tanto, tenemos el siguiente método numérico para aproximar la solución yn+1 = yn + h
s
bl f (tn + cl h).
l=1
El siguiente paso es ver si es posible generalizar este procedimiento para resolver nuestra EDO, y = f (t, y). 108
4.4 Métodos de Runge-Kutta
Integrando ambas partes de la igualdad sobre el intervalo t ∈ [tn , tn+1 ] se tiene "
tn+1
y (t) dt =
tn
"
tn+1
f (t, y(t)) dt , tn
esto es, la solución se puede escribir formalmente como " tn+1 f (t, y(t)) dt, y(tn+1 ) = y(tn ) + tn
por lo que podemos utilizar la aproximación yn+1 = yn + h
s
bl f (tn + cl h, y(tn + cl h)).
(4.9)
l=1
El problema de utilizar este método radica en que los valores y(tn + cl h), l = 1, . . . , s, no son conocidos. Los métodos RK resuelven este problema y dan aproximaciones a los valores de y(tn + cl h), l = 1, . . . , s, para conseguir que el método final sea del orden deseado. Los métodos RK se clasifican en métodos explícitos e implícitos y a continuación presentamos algunos de los más sencillos de cada familia.
4.4.1
Métodos RK explícitos
Un método RK explícito de s etapas viene dado (para el caso particular en que c1 = 0) por la siguiente forma recursiva de ir realizando los cálculos k1
=
f (tn , yn ),
k2
=
f (tn + c2 h, yn + ha2,1 k1 ),
k3
= .. .
f (tn + c3 h, yn + h(a3,1 k1 + a3,2 k2 )),
ks
=
s−1 f tn + cs h, yn + h as,j kj , j=1
yn+1
=
yn + h
s
bl k l .
(4.10)
l=1
Como veremos, los parámetros ai,j junto con los bi , ci deben de elegirse de tal manera que yn+1 sea una buena aproximación a la solución. Para ello, deben satisfacer un sistema ecuaciones algebraicas polinómicas no lineales y cuya solución puede ser bastante compleja para métodos de órdenes altos con muchas etapas. 109
Capítulo 4. Métodos numéricos para problemas de valor inicial
Por ejemplo, el método de Euler se puede considerar también como un método RK de primer orden de una sola etapa dado por k1
=
f (tn , yn ),
yn+1
=
yn + hk1 .
(4.11)
Veamos cómo es posible desarrollar métodos de Runge-Kutta de orden 2. Método del punto medio: Utilizando el desarrollo de Taylor, tenemos y (tn+1 )
= = =
h2 h3 y (tn ) + y (ξ) 2 3! h2 h3 y (tn ) + hf (tn , y (tn )) + f (tn , y (tn )) + y (ξ) 2 3! y (tn ) + hf (tn , y (tn )) ∂f h3 h2 ∂f (tn , y (tn )) + (tn , y (tn )) f (tn , y (tn )) + y (ξ) , + 2 ∂t ∂y 3! y (tn ) + hy (tn ) +
donde ξ ∈]tn , tn+1 [. Por otra parte, se puede buscar un método de la forma y (tn+1 ) = y (tn ) + ha1 f (tn + α, y (tn ) + β) , que tenga el mismo error de truncamiento que el método de Taylor de segundo orden. Como a1 f (tn + α, y (tn ) + β) ≈ a1 f (tn , y (tn ))+a1 α
∂f ∂f (tn , y (tn ))+a1 β (tn , y (tn )) , ∂t ∂y
para tener el mismo error de truncamiento se ha de cumplir 1 = a1 ,
h = a1 α , 2
h f (tn , y (tn )) = a1 β , 2
o sea, a1 = 1 ,
α=
h , 2
β=
h f (tn , y (tn )) . 2
Obtenemos de esta forma el método del punto medio h h yn+1 = yn + hf tn + , yn + f (tn , yn ) . 2 2 También se le conoce como algoritmo de Runge o primera fórmula de Runge. Este método se puede reescribir siguiendo el esquema (4.12) como sigue k1 k2 yn+1 110
= = =
f (tn , yn ) , f (tn + h/2, yn + hk1 /2) , yn + hk2 ,
4.4 Métodos de Runge-Kutta
esto es, se corresponde con el caso en que s = 2,
a2,1 =
1 , 2
b1 = 0,
b2 =
1 , 2
c1 = 0,
c2 =
1 . 2
Como vemos, el método necesita evaluar la función f dos veces en cada paso de integración, por lo que requiere de más operaciones que en el caso del método de Euler. Por otro lado, este coste adicional se compensa porque 3 el método suele ser bastante más preciso. Tiene un error de truncamiento O h y un error global
O h2 . Otra posible elección del método numérico es yn+1 = yn + h (a1 f (tn , yn ) + a2 f (tn + α, yn + β)) . El parámetro adicional que se introduce permite la posibilidad de construir muchos
métodos de Runge-Kutta. Para que el error de truncamiento sea O h3 se obtienen las siguientes relaciones, h = a2 α, 2
a1 + a2 = 1,
hf (tn , yn ) = a2 β . 2
Dos de las posibles opciones se corresponden con los siguientes métodos. Método de Euler modificado. Se obtiene tomando a1 = a2 = β = hf (tn , yn ) yn+1
=
yn +
1 2,
α = h,
h (f (tn , yn ) + f (tn + h, yn + hf (tn , yn ))) , 2
que es equivalente al siguiente algoritmo k1 k2 yn+1
= = =
f (tn , yn ) , f (tn + h, yn + hk1 ) , yn + h2 (k1 + k2 ) .
esto es, se corresponde con el caso s = 2,
a2,1 = 1,
b1 = b2 =
1 , 2
c1 = 0,
c2 = 1.
También requiere de dos evaluaciones de la f por paso y tiene un error de función
truncamiento O h3 y un error global O h2 . Método de Heun. Se corresponde con la siguiente elección de los parámetros: a1 = 14 , a2 = 34 y α = 23 h y β = 23 hf (tn , yn ) h 2 2 f (tn , yn ) + 3f tn + h, yn + hf (tn , yn ) . yn+1 = yn + 4 3 3 111
Capítulo 4. Métodos numéricos para problemas de valor inicial
Su algoritmo es k1 k2 yn+1
= = =
f (tn , yn ) , f (tn + 2h/3, yn + 2hk1 /3) , yn + h4 (k1 + 3k2 ) ,
esto es, se corresponde con el caso 1 3 2 , b2 = , c1 = 0, c2 = , 4 4 3 3
2
que tiene un error de truncamiento O h y un error global O h . s = 2,
a2,1 =
2 , 3
b1 =
Método estándard Runge-Kutta de orden 4. Es posiblemente el método Runge-Kutta más conocido y utilizado porque mantiene un buen balance entre el coste del método y la precisión que se consigue con el mismo. Es de orden 4 y requiere de 4 evaluaciones por paso. El método viene dado por: f (tn , yn ) , f (tn + h/2, yn + hk1 /2) , f (tn + h/2, yn + hk2 /2) , f (tn + h, yn + hk3 ) , yn + h6 (k1 + 2k2 + 2k3 + k4 ) ,
en el que el error de truncamiento es O h5 y el error global del método es O h4 . k1 k2 k3 k4 yn+1
4.4.2
= = = = =
Métodos RK implícitos
Un método RK implícito de s etapas viene dado por el siguiente esquema implícito ⎞ ⎛ s i = 1, . . . , s, ai,j kj ⎠ , ki = f ⎝tn + cj h, yi + h j=1
yn+1
=
yn + h
s
bi k i .
(4.12)
i=1
El método es explícito si ai,j = 0, j ≥ i e implícito en caso contrario. Algunos de los métodos de primer y segundo orden más utilizados son: Método de Euler implícito. Viene dado por el esquema yn+1 = yn + hf (tn+1 , yn+1 ).
(4.13)
o equivalentemente k1 yn+1 112
= =
f (tn + h, yn + hk1 ), yn + hk1 ,
(4.14)
4.5 Métodos multipaso
que es un método de primer orden. Este resultado se puede ver del modo siguiente. Si multiplicamos por h la primera de las ecuaciones obtenemos k1 = f (tn + h, yn + hk1 ), y si ahora sumamos yn a las dos partes de la ecuación yn + k1 = yn + f (tn + h, yn + hk1 ). Tomando yn+1 = yn + hk1 se obtiene la segunda de las ecuaciones. Método del trapecio. Es un método de segundo orden que viene dado por el esquema h yn+1 = yn + (f (tn , yn ) + f (tn+1 , yn+1 )), (4.15) 2 o equivalentemente
4.5
k1
=
f (tn , yn ),
k2
=
f (tn + h, yn +
yn+1
=
yn +
h (k1 + k2 )), 2
h (k1 + k2 ). 2
(4.16)
Métodos multipaso
Los métodos de Euler y de Runge-Kutta que se han expuesto son métodos de un paso. Esto es, para calcular la aproximación yn+1 de y (tn+1 ), hacen uso sólamente de la aproximación yn . Se podría mejorar el funcionamiento de los métodos si al calcular la aproximación yn+1 , se tuviera en cuenta las aproximaciones evaluadas previamente, yn , yn−1 , . . . , yn−k . Los métodos que hacen uso de estas aproximaciones se llaman métodos multipaso. Definicion 4.3 (Método Lineal Multipaso (MLM)) Es un método multipaso yn+1 = ψh (t0 , y0 , . . . , tn+1 , yn+1 ), donde ψh es una transformación lineal en las yk y la función f evaluada en diferentes puntos. Suponiendo que yn , yn+1 , . . . , yn+s−1 , s ≥ 0 son conocidos, la forma general de representar los MLM es: s l=0
ρl yn+l = h
s
σl f (tn+l , yn+l ),
n = 0, 1, 2, . . .
(4.17)
l=0
113
Capítulo 4. Métodos numéricos para problemas de valor inicial
donde suponemos que $ρss = 0 y, por tanto, podemos tomar ρs = 1, donde además se debe cumplir que l=0 ρl = 0. Diremos que el esquema (4.17) es un método de s pasos. Obsérvese que si σs = 0 entonces el método es explícito, siendo implícito en caso contrario. La principal peculiaridad de estos métodos es que inicialmente sólo conocemos y0 , y si s ≥ 2 entonces nos hace falta conocer también y1 , . . . , ys−1 para empezar las iteraciones. Estos valores se pueden obtener utilizando, por ejemplo, un método RK explícito. Veamos cómo obtener algunos de estos métodos. Partimos del problema de valor inicial dy = f (t, y) , t0 ≤ t ≤ tn . (4.18) dt Integrando en el intervalo [tn , tn+1 ], tenemos " y (tn+1 ) − y (tn ) =
tn+1
f (t, y(t)) dt .
(4.19)
tn
Supongamos que conocemos las aproximaciones a la solución del problema (4.18), yj0 , yj1 , . . . , yjk correspondientes a tj0 , tj1 , . . . , tjk , y construimos el polinomio interpolador de Lagrange Pk (t) que pasa por (tj0 , fj0 ) , (tj1 , fj1 ) , . . . , (tjk , fjk ), Pk (t) =
k
Lk,l (t)fjl ,
l=0
donde fn ≡ f (tn , yn ). A continuación, se sustituye el problema (4.19) por la aproximación " yn+1 = yn +
tn+1 tn
Pk (t) dt = yn +
k
" f jl
l=0
Llamando
" αk,l =
tn+1 tn
Lk,l (t) dt .
tn+1 tn
Lk,l (t) dt ,
se obtienen los métodos multipaso o métodos de Adams yn+1 = yn +
k
αk,l fjl .
(4.20)
l=0
Ejemplo 4.5 Obtener el método de dos pasos que pasa por yn , yn−1 y el método de tres pasos que pasa por yn , yn−2 . 114
4.5 Métodos multipaso
Solución: En primer lugar construimos el polinomio interpolador que pasa por (tn−1 , fn−1 ), y (tn , fn ), t − tn t − tn−1 fn−1 + fn . P1 (t) = tn−1 − tn tn − tn−1 El método se obtiene calculando las siguientes integrales " tn+1 " tn+1 fn−1 fn (t − tn ) dt + (t − tn−1 ) dt yn+1 = yn + tn−1 − tn tn tn − tn−1 tn fn−1 2 = yn + (tn+1 − tn ) 2 (tn−1 − tn ) ! fn 2 2 . (tn+1 − tn−1 ) − (tn − tn−1 ) + 2 (tn − tn−1 ) Si los instantes tj están igualmente espaciados, con un paso temporal h (tn+1 −tn = tn − tn−1 = h) se tiene el método yn+1 = yn +
h (3fn − fn−1 ) , 2
(4.21)
que requiere de las condiciones iniciales y0 = α0 ,
y1 = α1 .
Repitiendo los mismos pasos con el polinomio interpolador que pasa por (tn−2 , fn−2 ), y (tn , fn ), t − tn t − tn−2 fn−2 + fn , P1 (t) = tn−2 − tn tn − tn−2 y calculando las integrales, se obtiene el método yn+1 = yn +
h (5fn − fn−2 ) , 4
(4.22)
que requiere de las condiciones iniciales y 0 = α0 ,
y1 = α1 ,
y2 = α2 .
En el estudio de estos métodos consideraremos que los instantes tj están igualmente espaciados, con un paso temporal h, esto es, tj = t0 + jh. Se distinguen dos tipos de métodos: explícitos e implícitos. Los métodos explícitos calculan yn+1 haciendo 115
Capítulo 4. Métodos numéricos para problemas de valor inicial
uso de la función f evaluada instantes anteriores conocidos. Los métodos multipaso explícitos se llaman también métodos de Adams-Bashforth. El método (4.21) se conoce como el método de Adams-Bashforth de dos pasos, siendo de segundo orden. Métodos de orden k > 2 se pueden obtener de manera similar haciendo uso del polinomio interpolador que pasa por (tn , fn ), . . . , (tn−k+1 , fn−k+1 ), obteniendo, por ejemplo, los métodos siguientes: Método de Adams-Bashforth de tres pasos y1 = α1 , y2 = α2 , h yn+1 = yn + (23fn − 16fn−1 + 5fn−2 ) , 12
que tiene un error local O h4 . y0
=
α0 ,
Método de Adams-Bashforth de cuatro pasos y 1 = α1 , y 2 = α2 , y 3 = α3 , h yn+1 = yn + (55fn − 59fn−1 + 37fn−2 − 9fn−3 ) , 24
que tiene un error local O h5 . y0
=
α0 ,
A los métodos multipaso implícitos se les llama métodos de Adams-Moulton. Para el cálculo de yn+1 , estos métodos hacen uso de fn+1 . Estos métodos se obtienen de manera similar haciendo uso del polinomio interpolador que pasa por (tn+1 , fn+1 ), (tn , fn ), . . . , (tn−k+1 , fn−k+1 ). Así, algunos de estos métodos son: Método de Adams-Moulton de un paso. Supongamos que se conocen las aproximaciones yn , yn+1 de un problema de la forma (4.18). Si construimos el polinomio interpolador que pasa por (tn , fn ), y (tn+1 , fn+1 ), P1 (t) =
t − tn+1 t − tn fn + fn+1 , tn − tn+1 tn+1 − tn
queda el método numérico yn+1 = yn +
h (fn + fn+1 ) , 2
que tiene un error local O h3 . Este método es conocido como el método trapezoidal, aunque se corresponde también con un método RK implícito de orden 2.
116
4.5 Métodos multipaso
Método de Adams-Moulton de dos pasos =
α 0 , y 1 = α1 , h (5fn+1 + 8fn − fn−1 ) , yn+1 = yn + 12
que tiene un error local O h4 . y0
Método de Adams-Moulton de tres pasos y 1 = α1 , y 2 = α2 , h yn+1 = yn + (9fn+1 + 19fn − 5fn−1 + fn−2 ) , 24
que tiene un error local O h5 . y0
=
α0 ,
Método de Adams-Moulton de cuatro pasos y1 = α1 , y2 = α2 , y3 = α3 , h yn+1 = yn + (251fn+1 + 646fn − 246fn−1 + 106fn−2 − 19fn−3 ) , 720
que tiene un error local O h6 . y0
=
α0 ,
Métodos predictor-corrector En la práctica, los métodos multipaso implícitos no se usan en solitario, más bien se utilizan para mejorar las aproximaciones obtenidas por los métodos explícitos. La combinación de una técnica explícita con una implícita se llama método de predicción y corrección o método predictor-corrector. Se suele tomar un método explícito de k etapas y orden k como predictor combinado con un método implícito de k etapas y orden k + 1. Por ejemplo, el método predictor-corrector de 3 etapas viene dado por:
[p]
y0
=
[p] yn+1
=
yn+1
=
α 0 , y 1 = α1 , y 2 = α2 , h yn + (23fn − 16fn−1 + 5fn−2 ) , 12 ! h [p] 9fn+1 + 19fn − 5fn−1 + fn−2 , yn + 24 [p]
donde fn+1 = f (tn+1 , yn+1 ). Esto es, con el método explícito hacemos una esti[p] mación del valor de yn+1 , que se denota por yn+1 y que es utilizado en la ecuación implícita para hacerla explícita. 117
Capítulo 4. Métodos numéricos para problemas de valor inicial
4.6
Ecuaciones rígidas
Los métodos numéricos para la aproximación de la solución de problemas de valores iniciales tienen fórmulas de error que incluyen una derivada de orden superior de la solución de la ecuación diferencial. Si la derivada de la solución se puede acotar por una constante, entonces el error del método numérico se puede mantener bajo control. Hay ciertos problemas en los que el valor de la derivada se hace grande y el error del método puede dominar los cálculos a medida que crece el número de iteraciones. A este tipo de problemas se les llama problemas rígidos. Ejemplo 4.6 Considerar el problema de valores iniciales ⎧ ⎪ ⎪ ⎨ y1
=
9y1 + 24y2 + 5 cos(t) −
⎪ ⎪ ⎩ y 2
=
−24y1 − 52y2 − 9 cos(t) +
1 sen(t) , 3 1 sen(t) , 3
y1 (0) =
4 , 3
y2 (0) =
2 . 3
Comparar la solución exacta con la solución numérica obtenida con el RK explícito de 4 etapas para h = 0.1 y h = 0.05 Solución: La solución analítica del problema es y1 (t)
=
y2 (t)
=
1 2 e−3t − e−39t + cos(t) , 3 1 − e−3t +2 e−39t − cos(t) . 3
Si se usa un método de Runge-Kutta de 4 pasos para calcular la solución del problema, obtenemos los resultados aproximados y1n que se proporcionan en la siguiente tabla t 0.1 0.2 0.3 0.4 0.5
y1 (t) 1.793061 1.423901 1.131575 0.909409 0.738788
y1n (h = 0.05) 1.712219 1.414070 1.130523 0.909276 0.738751
y1n (h = 0.1) −2.645169 −18.45158 −87.47221 −934.0722 −1760.016
118
4.6 Ecuaciones rígidas
4.6.1
Estabilidad lineal
En el ejemplo anterior hemos visto que un método numérico puede tener un comportamiento divergente u oscilante cuando el número de iteraciones tiende a infinito. Por ello, va a ser interesante tratar de caracterizar en qué condiciones un método dado se hace inestable. Supongamos que se está interesado en utilizar un método numérico para estudiar la ecuación dy = −λy , y (t0 ) = y0 , dt con λ > 0. La solución analítica del problema es y = y0 e−λt , que satisface y → 0 cuando t → ∞. Si utilizamos el método de Euler yn+1 = yn − λhyn , se tiene la ecuación en diferencias yn+1 − (1 − λh)yn = 0 .
(4.23)
Si probamos soluciones de la forma yi = ri , tenemos rn+1 − (1 − λh)rn = 0 , que da lugar a la ecuación característica r − (1 − λh) = 0 , y la solución de la ecuación (4.23) es yn = (1 − λh)n y0 . Para que el método numérico sea estable se ha de satisfacer |1 − λh| < 1 , o sea, h<
2 . |λ|
Si ahora repetimos el análisis utilizando el método de Euler implícito yn+1 = yn − λhyn+1 , se tiene la ecuación en diferencias (1 + λh)yn+1 − yn = 0 .
(4.24) 119
Capítulo 4. Métodos numéricos para problemas de valor inicial
La ecuación característica es (1 + λh)r − 1 = 0 , y la solución de la ecuación (4.24) es yn =
1 1 + λh
n y0 .
Para que el método numérico sea estable, se ha de cumplir 1 1 + λh < 1 ⇒ 1 + |λ|h > 1 , lo cual se satisface para cualquier valor de h. Este tipo de análisis se puede repetir para los métodos de Runge-Kutta y para los métodos multipaso. Así, los métodos de Runge-Kutta y los métodos multipaso explícitos tienen problemas para aproximar ecuaciones diferenciales rígidas a no ser que se tomen valores de h muy pequeños lo cual hace que se necesite aplicar el método muchas veces para llegar al tf , haciéndolos demasiado costosos. En la práctica, para este tipo de ecuaciones se utilizan los métodos multipaso implícitos. La ecuación en diferencias que se obtiene con estos métodos para yn+1 se puede resolver de forma sencilla para problemas lineales. En las ecuaciones diferenciales no lineales, para la obtención de yn+1 se utilizan técnicas numéricas que permiten la resolución de ecuaciones algebraicas no lineales, como el método del punto fijo o el método de Newton.
4.6.2
Métodos implícitos hacia atrás
Dada una ecuación diferencial ordinaria de primer orden, de la forma dy = f (t, y(t)) , dt un método en diferencias hacia atrás (Backward) general de m pasos para la resolución de esta ecuación, consiste en una ecuación en diferencias de la forma yn+1 + α1 yn + α2 yn−1 + · · · + αm yn+1−m = hβ0 f (tn+1 , yn+1 ) ,
(4.25)
donde β0 > 0, y α1 , . . . , αm se eligen de forma que se minimice el error de truncamiento. En la Tabla 4.1 se muestran posibles elecciones de los parámetros del método en diferencias hacia atrás para distintos valores de m. Es fácil comprobar que el caso m = 1 coincide con el método de Euler implícito. Con esta elección de los parámetros, los métodos Backward obtenidos son estables. Los métodos hacia atrás son métodos implícitos, y su utilización para la integración de un sistema de ecuaciones diferenciales implica la necesidad de resolver un sistema de ecuaciones lineales en cada paso de integración. 120
4.7 Ejercicios resueltos
Tabla 4.1: Coeficientes de los métodos hacia atrás.
m 1 2 3 4
4.7
β0 1
α1 -1 − 43 − 18 11 − 48 25
2 3 6 11 12 25
α2
α3
α4
1 3 9 11 36 25
2 − 11 16 − 25
3 25
Ejercicios resueltos
Ejercicio 4.1 Dado el problema y = −xy +
1 , y(1) = 1 . y2
Obtén un método de Taylor con error de truncamiento O h4 . Solución: El método de Taylor se basa en el desarrollo y (x0 + h) = y (x0 ) + hy (x0 ) +
1 2 1 h y (x0 ) + h3 y (x0 ) + O h4 . 2! 3!
Se tiene que y = −xy + la derivada segunda, y
= =
1 , y2
1 1 = −y − xy − 2 3 y y2 y x 2x 2 −y + x2 y − 2 + 2 − 5 , y y y d dt
−xy +
y la derivada tercera y = −y + 2xy + x2 y −
1 2x 2 4x 10 + 3 y + 2 − 3 y + 6 y , y2 y y y y
que se reescribe como y = xy + 2xy − x3 y +
x2 2x2 2x 4x2 4x 10x 10 − 2 + 6 + 2 − 5 − 5 + 8 , 2 y y y y y y y
y, por tanto, el método queda 1 xn 2 1 yn+1 = yn + h −xn yn + 2 + h2 −yn + x2n yn + 2 − 5 yn 2 yn y n 2 1 3x 14xn 2xn 10 + h3 3xn yn − x3n yn + 2n − 5 + 6 + 8 . 6 yn yn yn yn
121
Capítulo 4. Métodos numéricos para problemas de valor inicial
Ejercicio 4.2 Utiliza el método de Euler para obtener una solución del problema de valor inicial y = y , y(0) = 1 , en t = 0.4, utilizando h = 0.2 y h = 0.4. Suponiendo que el error que se comete con el método de Euler es proporcional a h, estima el valor exacto de y(0.4) y compáralo con la solución analítica. Solución: El método de Euler se escribe yn+1 = yn + hf (tn , yn ) . Si hacemos el cálculo con h = 0.4 se tiene y1 = y0 + hy0 = 1.4 . Si usamos h = 0.2, se tiene y1 = y0 + h y0 = 1.2 y2 = y1 + h y1 = 1.44 Para estimar la solución y(0.4), supondremos que y(0.4) − y ∗ = α h , con y ∗ la solución obtenida con el método con paso h, así y(0.4) − 1.4 = α 0.4 y(0.4) − 1.44 = α 0.2 con lo que restando 0.04 = α(0.4 − 0.2) ⇒ α =
0.04 = 0.2 0.2
y, así y(0.4) = 1.4 + 0.2 · 0.4 = 1.48 Por otro lado, la solución analítica es Y = y(0) et = et ⇒ y(0.4) = e0.4 = 1.4918. 122
4.7 Ejercicios resueltos
Ejercicio 4.3 Utiliza los métodos de Euler y Euler modificado para resolver el problema de valor inicial y = x2 + y 3 , y(1) = 1 . Calcula y(1.3) utilizando paso de integración h = 0.1 y compara los resultados con la solución que proporciona Matlab. Solución: Recordemos que el método de Euler se escribe como y0 yn+1
=
y (t0 )
=
yn + hf (tn , yn )
y el método de Euler modificado y0
=
y (t0 )
yn+1
=
yn +
h (f (tn , yn ) + f (tn + h, yn + hf (tn , yn ))) 2
Así, si realizamos los cálculos con el método de Euler, se tiene
y1 = 1 + 0.1 12 + 13 = 1.2 → y(1.1)
y2 = 1.2 + 0.1 (1.1)2 + (1.2)3 = 1.494 → y(1.2)
y3 = 1.494 + 0.1 (1.2)2 + (1.494)3 = 1.971 → y(1.3) Con el método de Euler modificado
y1∗ = 1 + 0.1 12 + 13 = 1.2
0.1 2 1 + 13 + (1.1)2 + (1.2)3 y1 = 1 + 2 = 1 + 0.05(2 + (1.1)2 + (1.2)3 ) = 1.2469 → y(1.1) y2∗ = 1.2469 + 0.1((1.1)2 + (1.2469)3 ) = 1.5617 y2 = 1.2469 + 0.05((1.1)2 + (1.2469)3 + (1.2)2 + (1.5617)3 ) = 1.6668 → y(1.2) y3∗ = 1.6668 + 0.1((1.2)2 + (1.6668)3 ) = 2.2739 y3 = 1.6668 + 0.05((1.2)2 + (1.6668)3 + (1.3)2 + (2.2739)3 ) = 2.6427 → y(1.3) Estos resultados se pueden comparar con el resultado obtenido mediante la función ode45 de Matlab: y(1.3) = 2.95738. 123
Capítulo 4. Métodos numéricos para problemas de valor inicial
Ejercicio 4.4 La función 2 erf(x) = √ π
"
x
2
e−t dt ,
0
se puede ver como la solución del problema de valor inicial 2 2 y = √ e−x , y(0) = 0 . π
Estima, utilizando el método de Euler con h = 0.1, los valores de erf(0.1) y erf(0.2). Solución: Basta aplicar dos iteraciones del método de Euler, 2 y1 = y0 + h f0 = 0 + 0.1 √ e0 = 0.1128 → erf(0.1) π 2 2 y2 = y1 + h f1 = 0.1128 + 0.1 √ e0.1 = 0.2245 → erf(0.1) π
Los valores tabulados son: erf(0.1) = 0.11246 y erf(0.2) = 0.2227. Ejercicio 4.5 Resuelve numéricamente la siguiente ecuación diferencial t ∈ [0, 1] y = y − t2 + 1, y(0) = 12 y compara con la solución exacta en t = 1 sabiendo que ésta viene dada por y(t) = t2 + 2t + 1 −
et 2
⇒
y(1) = 4 −
e = 2.641 2
utilizando los siguientes métodos numéricos: 1. Método de Euler con paso de integración h =
1 2
(utilizando dos pasos).
2. Método de Taylor de segundo orden con paso de integración h = dos pasos).
1 2
(utilizando
3. Método de Euler modificado de segundo orden con paso de integración h = (utilizando dos pasos).
1 2
4. Método de Runge-Kutta estándard de orden 4 y 4 pasos utilizando un paso de integración h = 1 (un solo paso). 5. Método de predictor-corrector de dos pasos con paso de integración h = 12 . Como solución del primer paso, utilizar la solución obtenida con el método de Euler modificado de segundo orden. 124
4.7 Ejercicios resueltos
Solución: De la ecuación tenemos que f (t, y) = y − t2 + 1, y de la condición inicial, t0 = 0, y0 = 12 . 1. Método de Euler con h = 12 . Como t = 1 y h = 12 , necesitamos dos pasos de integración, es decir, y(1) ≈ y2 . En el primer paso de integración, obtenemos 1 3 5 1 1 1 −0+1 = + = . y1 = y0 + hf (t0 , y0 ) = + 2 2 2 2 4 4 Para el segundo paso, como t1 = t0 + h = 12 , tenemos 2 1 9 5 1 5 5 y2 = y1 + hf (t1 , y1 ) = + − + 1 = + 1 = = 2.25 . 4 2 4 2 4 4 Por tanto, la solución con el método de Euler es y2 = 2.25 Comparando con la solución exacta, tenemos que el error absoluto cometido es Error = |2.641 − 2.25| = 0.391 . 2. Método de Taylor de segundo orden con h = 12 . El método viene dado por yn+1 = yn + hf + con f, ∂f ∂t y
∂f ∂y
h2 2
∂f ∂f + f ∂t ∂y
,
evaluadas en tn y donde ∂f = −2t, ∂t
∂f = 1. ∂y
Necesitamos dos pasos. Para el primer paso de integración utilizamos que y0 + hf (t0 , y0 ) es y1 del método de Euler calculado en el apartado a), así h2 ∂f ∂f (t0 , y0 ) + (t0 , y0 ) f (t0 , y0 ) y1 = y0 + hf (t0 , y0 ) + 2 ∂t ∂y 5/4
=
5 + 4
1 2 2
2
0+1
1 −0+1 2
=
5 13 23 + = . 4 82 16 125
Capítulo 4. Métodos numéricos para problemas de valor inicial
Segundo paso de integración (t1 = t0 + h = 1/2) y2
= = = =
h2
−2t1 + y1 − t21 + 1 y1 + h y1 − t21 + 1 + 2 1 2 2 2 1 1 1 23 23 1 23 2 + − −2 + − +1 + +1 16 2 16 2 2 2 16 2 23 1 23 4 16 1 23 4 + − + + − 16 2 16 16 16 8 16 16 19 343 23 35 + + = = 2.679 . 16 32 128 128
Por tanto, la solución obtenida usando el método de Taylor es y2 = 2.679 y el error absoluto cometido es Error = |2.679 − 2.641| = 0.038 . 3. Método de Euler modificado con h = 21 . Necesitamos dos pasos. El primer paso del método viene dado por k1
=
k2
= =
y1
=
3 1 −0+1= , 2 2 f (t0 + h, y0 + hk1 ) = (y0 + hk1 ) − (t0 + h)2 + 1 2 1 1 13 5 1 + − + 1 = − + 1 = 2, 2 22 2 4 4 1 3 1 7 11 h 1 2 +2 = + = . y0 + (k1 + k2 ) = + 2 2 2 2 2 8 8 f (t0 , y0 ) = y0 − t20 + 1 =
El segundo paso de integración (t1 = t0 + h = 1/2) es 2 1 17 11 2 8 − + = , +1= 2 8 8 8 8
=
f (t1 , y1 ) = y1 − t21 + 1 =
k2
=
f (t1 + h, y1 + hk1 ) = (y1 + hk1 ) − (t1 + h)2 + 1 11 1 17 39 + −1+1= , 8 2 8 16 1 17 39 11 73 h 11 + 2 + = + y1 + (k1 + k2 ) = 2 8 2 8 16 8 64 161 88 73 + = = 2.516 . 64 64 64
= y2
= =
126
11 − 8
k1
4.7 Ejercicios resueltos
Así, la solución obtenida usando el método de Euler modificado es y2 = 2.516 y el error absoluto cometido es Error = |2.516 − 2.641| = 0.125 . 4. Método de Runge-Kutta de orden 4 y 4 etapas, h = 1. Necesitamos un paso del método, k1 k2
= = =
k3
= =
k4
= =
y1
= = =
3 f (t0 , y0 ) = , 2 h h h f t0 + , y0 + k1 = y0 + k1 − t0 + 2 2 2 2 1 1 13 5 1 + − + 1 = − + 1 = 2, 2 22 2 4 4 h h h f t0 + , y0 + k2 = y0 + k2 − t0 + 2 2 2 1 1 1 9 + 2 − +1= , 2 2 4 4
h 2
h 2
2 +1
2 +1
f (t0 + h, y0 + hk3 ) = (y0 + hk3 ) − (t0 + h)2 + 1 1 9 11 + −1+1= , 2 4 4 9 11 h 1 1 3 +2·2+2 + y0 + (k1 + 2k2 + 2k3 + k4 ) = + 6 2 6 2 4 4 1 1 6 16 18 11 1 51 12 51 63 + + + + = + = + = 2 6 4 4 4 4 2 54 24 24 24 2.625 .
Por tanto, la solución obtenida usando el método de Runge-Kutta estándard de orden 4 y 4 etapas es y2 = 2.625 y el error absoluto cometido es Error = |2.625 − 2.641| = 0.016 . 5. Método predictor-corrector de dos pasos, h = 1/2. Necesitamos dos pasos. Como nos indica el enunciado del ejercicio, el primer paso lo calculamos con el método de Euler modificado de segundo orden 127
Capítulo 4. Métodos numéricos para problemas de valor inicial
(apartado c)), luego y0 =
1 , 2
y1 =
f0 = f (t0 , y0 ) =
11 , 8
3 , 2
f1 = f (t1 , y1 ) = y1 − t21 + 1 =
11 2 8 17 11 1 − +1= − + = . 8 4 8 8 8 8
Aplicamos el predictor para el segundo paso [p]
y2
= =
1 17 3 h 11 (3f1 − f0 ) = + 2 3 − 2 8 2 8 2 11 1 51 12 44 39 83 + − = + = , 8 4 8 8 32 32 32
y1 +
y el corrector y2
= = =
! 17 ! ! 11 1 h [p] [p] 2 f t 2 , y2 + f 1 = + y 2 − t2 + 1 + y1 + 2 8 4 8 11 1 83 17 11 1 83 68 + −1+1+ = + + 8 4 32 8 8 4 32 32 327 176 151 + = = 2.555 . 128 128 128
La solución con el método predictor-corrector de dos pasos es y2 = 2.555 y el error absoluto cometido es Error = |2.555 − 2.641| = 0.086 . Ejercicio 4.6 Obtén la solución formal del esquema de Runge-Kutta de 4 pasos para el problema y = λy , y (t0 ) = y0 .
128
4.7 Ejercicios resueltos
Solución: El esquema de Runge-Kutta de 4 pasos se escribe: k1
=
k2
= =
k3
= =
k4
= =
f (tn , yn ) = λyn , h k1 k1 = λ yn + h f tn + , yn + h 2 2 2 1 2 λyn + hλ yn , 2 h k2 k2 = λ yn + h f tn + , yn + h 2 2 2 1 2 1 2 3 λyn + hλ yn + h λ yn , 2 4 f (tn + h, yn + h k3n ) = λ (yn + hk3 ) 1 1 λyn + hλ2 yn + h2 λ3 yn + h3 λ4 yn . 2 4
Así, el esquema queda yn+1
= =
=
h (k1 + 2k2 + 2k3 + k4 ) 6 1 hλyn + 2hλyn + h2 λ2 yn + 2hλyn yn + 6 1 1 1 h2 λ2 yn + h3 λ3 yn + hλyn + h2 λ2 yn + h3 λ3 yn + h4 λ4 yn 2 2 4 1 1 1 1 + hλ + h2 λ2 + h3 λ3 + h4 λ4 yn . 2 6 24 yn +
Se obtiene una expresión cerrada para la solución del esquema, n 1 1 1 yn = 1 + hλ + h2 λ2 + h3 λ3 + h4 λ4 y0 . 2 6 24 Ejercicio 4.7 Obtén el método de Adams-Moulton yn+1 = yn +
h (9fn+1 + 19fn − 5fn−1 + fn−2 ) . 24
Solución: Hemos visto que la solución de la ecuación diferencial y = f (t, y(t)), 129
Capítulo 4. Métodos numéricos para problemas de valor inicial
se puede escribir como " y(tn+1 ) = y(tn ) +
tn+1
f (t, y(t)) dt. tn
Construimos el polinomio interpolador basado en la siguiente tabla tn−2 fn−2
t f
tn−1 fn−1
tn fn
tn+1 fn+1
usando el método de Lagrange L3,0 (t)
= =
L3,1 (t)
= =
L3,2 (t)
= =
L3,3 (t)
= =
(t − tn−1 ) (t − tn ) (t − tn+1 ) (tn−2 − tn−1 ) (tn−2 − tn ) (tn−2 − tn+1 ) 1 − 3 (t − tn−1 ) (t − tn ) (t − tn+1 ) , 6h (t − tn−2 ) (t − tn ) (t − tn+1 ) (tn−1 − tn−2 ) (tn−1 − tn ) (tn−1 − tn+1 ) 1 (t − tn−2 ) (t − tn ) (t − tn+1 ) , 2h3 (t − tn−2 ) (t − tn−1 ) (t − tn+1 ) (tn − tn−2 ) (tn − tn−1 ) (tn − tn+1 ) 1 − 3 (t − tn−2 ) (t − tn−1 ) (t − tn+1 ) , 2h (t − tn−2 ) (t − tn−1 ) (t − tn ) (tn+1 − tn−2 ) (tn+1 − tn−1 ) (tn+1 − tn ) 1 (t − tn−2 ) (t − tn−1 ) (t − tn ) . 6h3
Así, el polinomio interpolador es P3 (t) = fn−2 L3,0 (t) + fn−1 L3,1 (t) + fn L3,2 (t) + fn+1 L3,3 (t), y hay que calcular las integrales " tn+1 " L3,0 (t) dt = − I1 = tn
130
tn+1
tn
1 (t − tn−1 ) (t − tn ) (t − tn+1 ) dt 6h3
Para hacer esta integral se hace el cambio t − tn = z, con lo que " h 1 h I1 = . − 3 (z + h)z(z − h) dz = 6h 24 0
4.7 Ejercicios resueltos
De la misma manera, " tn+1 " I2 = L3,1 (t) dt = tn h
"
= " I3
0
tn h
0
tn h
= 0
"
1 6h3
tn
"
L3,3 (t) dt =
tn+1
5h , 24
−1 (t − tn−2 ) (t − tn−1 ) (t − tn+1 ) dt 2h3
(z + 2h)(z + h)(z − h) dz =
tn+1
= "
−1 2h3
1 (t − tn−2 ) (t − tn ) (t − tn+1 ) dt 2h3
(z + 2h)z(z − h) dz = −
L3,2 (t) dt =
= "
tn
tn+1
= "
I4
1 2h3
tn+1
tn+1
tn
19h , 24
1 (t − tn−2 ) (t − tn−1 ) (t − tn ) dt 6h3
(z + 2h)(z + h)z dz =
9h , 24
con lo que se tiene el esquema yn+1 = yn +
h (9fn+1 + 19fn − 5fn−1 + fn−2 ) . 24
Ejercicio 4.8 Determina los valores A, B y C del método numérico yn+1 = yn + h (Afn + Bfn−2 + Cfn−4 ) . Comprueba, mediante un ejemplo, que el método proporciona los valores exactos al problema y = 1 + t + t2 , y(0) = 0 . Solución: Se construye el polinomio interpolador basado en la tabla t f
tn−4 fn−4
tn−2 fn−2
tn fn
así, L2,0 (t)
=
L2,1 (t)
=
L2,2 (t)
=
(t − tn−2 ) (t − tn ) , (tn−4 − tn−2 ) (tn−4 − tn ) (t − tn−4 ) (t − tn ) , (tn−2 − tn−4 ) (tn−2 − tn ) (t − tn−4 ) (t − tn−2 ) , (tn − tn−4 ) (tn − tn )
131
Capítulo 4. Métodos numéricos para problemas de valor inicial
y el polinomio interpolador es: P2 (t) = fn−4 L2,0 (t) + fn−2 l2,1 (t) + fn L2,2 (t) . Así, hemos de calcular " tn+1 L2,0 (t) dt = tn
= "
tn+1 tn
L2,1 (t) dt
= =
"
tn+1 tn
L2,2 (t) dt
= =
"
tn+1
(t − tn−2 ) (t − tn ) dt (tn−4 − tn−2 ) (tn−4 − tn ) tn " h 1 1 h 1 4h3 = , (z + 2h)z dz = 2 (−2h) (−4h) 0 8h 3 6 " tn+1 (t − tn−4 ) (t − tn ) dt (tn−2 − tn−4 ) (tn−2 − tn ) tn " h 1 1 7h 1 7h3 =− , (z + 4h)z dz = − 2 2h (−2h) 0 4h 3 12 " tn+1 (t − tn−4 ) (t − tn−2 ) dt (t n − tn−4 ) (tn − tn−2 ) tn " h 1 1 17h 34 h= . (z + 4h)(z + 2h) dz = 4h 2h 0 24 12
Queda el método yn+1 = yn + h
Para el problema
1 7 17 fn−4 − fn−2 + fn 6 12 12
.
y = 1 + t + t2 , y(0) = 0 ,
integrando y(t) = t +
t3 t2 + , 2 3
y(h) = h +
h3 h2 + . 2 3
y, por tanto,
Con el método numérico
17
1 7 1 − 4h + (−4h)2 − 1 − 2h + (−2h)2 + 1 − 0h + (−0h)2 y1 = h 6 12 12 2 3 h h + . = h+ 2 3 132
4.8 Ejercicios propuestos
4.8
Ejercicios propuestos
1. Escribe el algoritmo correspondiente al método de Euler aplicado al problema del satélite. 2. Mediante el método de Euler: a) Halla y(0.4) si y =
y−x , y+x
para la condición inicial y(0) = 1, y el paso h = 0.1 . b) Halla y(0.4) si y = x + y, para la condición inicial y(0) = 1, y el paso h = 0.1 . 3. El modelo de Lotka-Volterra, también conocido como modelo depredadorpresa o predador-presa, se suele utilizar para describir la evolución de dos poblaciones que interaccionan entre ellas como, por ejemplo, zorros (cuya población denotamos por z(t)) y conejos (cuya población denotamos por c(t)). Este sencillo modelo de evolución temporal viene dado por el siguiente sistema de ecuaciones diferenciales no lineales y acopladas (tomando que la variación de individuos es continua) dc dt dz dt
=
c(1 − z),
=
z(c − 2).
(4.26)
a) Comprueba que la siguiente función I(c, z) = c − 2 log(c) + z − log(z) , es constante a lo largo de la solución, esto es,
dI dt
= 0.
b) Escribe el algoritmo correspondiente al método de Euler. c) Escribe el algoritmo correspondiente al método de Taylor de segundo orden. 4. Un proyectil de masa m = 0.11 kg que ha sido disparado verticalmente hacia arriba con una velocidad inicial de v(0) = 8 m/s se ve frenado por la acción de la fuerza de la gravedad Fg = mg y la resistencia del aire Fr = −kv |v|, donde g = −9.8 m/s2 , y k = 0.002 kg/m. La ecuación diferencial del movimiento es mv = mg − kv |v| . Utilizando el método de Euler, determina la velocidad del cuerpo a los 0.1, 0.2, . . . , 1.0 s. Determina, usando h = 0.1, el instante en el que el cuerpo se detiene. 133
Capítulo 4. Métodos numéricos para problemas de valor inicial
5. Utilizando los métodos de Runge-Kutta de Euler modificado y de Heun, halla el valor aproximado y(0.6), de la función y definida mediante la ecuación diferencial y = x2 + y 2 , con el valor inicial y(0) = 0 y el paso h = 0.2 . 6. Mediante el método de Runge-Kutta de 4 pasos: a) Halla y(2) si x2 y − xy = 1 para la condición inicial y(1) = 0, y el paso h = 1. Comparar con la solución analítica exacta de la ecuación x2 − 1 . diferencial, y(x) = 2x b) Halla y(1) si 4y = y 2 + 4x2 para la condición inicial y(0) = −1, y el paso h = 0.5. 7. Aprovechando las tres primeras iteraciones realizadas, mediante Runge-Kutta 4 pasos, obtén las mismas aproximaciones buscadas en los apartados a) y b) del problema anterior, aplicando el método de Adams-Bashforth m = 3. Compara los resultados. 8. Utiliza el método Runge-Kutta de cuatro pasos para obtener la solución aproximada del problema y = y 3 + x3 ,
y(0) = 0,
en y(0.3) con un paso h = 0.1. 9. Resuelve el problema del Ejemplo 4.3 utilizando el método de RK del punto 2 medio utilizando el paso de integración h = 10 y el método de RK de orden 4 4 utilizando el paso de integración h = 10 y comparar los resultados con 1 (todos los métodos los obtenidos con el método de Euler con paso h = 10 requieren del mismo mismo número de evaluaciones de la función). 10. Resuelve la ecuación del ejercicio 8 utilizando el método predictor-corrector de 2 etapas y tomando y1 de la solución numérica obtenida con el método Runge-Kutta de cuatro pasos. 11. Considera el método implícito hacia atrás con m = 2 para resolver el PVI y = −10y + 10,
y(0) = 2.
Obtén la aproximación en t = 2 tomando h = compara con la solución exacta y(2) = 1 + e−20 .
134
1 2,
y0 = 2, y1 = 1.006, y
Capítulo 5
Métodos numéricos para problemas de contorno En este capítulo mostraremos distintos métodos numéricos para obtener soluciones aproximadas de problemas de contorno. Mientras que en los problemas de valores iniciales las condiciones que determinan la solución del problema se imponen en un mismo punto (condiciones iniciales), en los problemas de contorno las condiciones se imponen en puntos separados. Por ejemplo, para una ecuación diferencial ordinaria de segundo orden, un problema de contorno es un problema de la forma y = f (x, y, y ) , a ≤ x ≤ b , con las condiciones y(a) = α , y(b) = β . Para obtener soluciones aproximadas de este tipo de problemas, en este capítulo utilizaremos métodos basados en diferencias finitas, y en el próximo capítulo se mostrará cómo utilizar otras técnicas como los elementos finitos. Empezaremos estudiando el método de las diferencias finitas para EDOs lineales de segundo orden, lo cual nos permitirá sentar las bases para la utilización de las diferencias finitas en problemas de EDPs lineales con condiciones de frontera.
135
Capítulo 5. Métodos numéricos para problemas de contorno
5.1
Diferencias finitas para EDOs con condiciones de frontera
Por sencillez, analizaremos problemas lineales de segundo orden y con condiciones en la frontera para y(a) e y(b) (se podrían considerar también condiciones para la derivada, y (a) e y (b) o combinaciones de ambas). Supongamos pues que se quiere obtener una solución aproximada del siguiente problema y = p(x)y + q(x)y + r(x) , a ≤ x ≤ b , y(a) = α , y(b) = β . El primer paso consistirá en dividir el intervalo [a, b] en N + 1 subintervalos del mismo tamaño cuyos extremos son los nodos xi = a + iΔx , i = 0, 1, . . . , N + 1 , siendo Δx = (b − a)/(N + 1). En los N nodos interiores se ha de cumplir y (xi ) = p (xi ) y (xi ) + q (xi ) y (xi ) + r (xi ) ,
(5.1)
con i = 1, 2, . . . , N . A continuación buscaremos aproximaciones de las derivadas evaluadas en los nodos, y (xi ) e y (xi ). Haciendo uso del desarrollo de Taylor vimos que y (xi ) =
1 (y (xi−1 ) − 2y (xi ) + y (xi+1 )) + O Δx2 , 2 Δx
(5.2)
1 (y (xi+1 ) − y (xi−1 )) + O Δx2 . 2Δx
(5.3)
y y (xi ) =
Sustituyento las aproximaciones (5.3) y (5.2) en (5.1) obtenemos en los nodos i = 1, . . . , N , las ecuaciones yi−1 − 2yi + yi+1 yi+1 − yi−1 + q (xi ) yi + r (xi ) . = p (xi ) Δx2 2Δx
(5.4)
Este sistema de ecuaciones se completa con las condiciones de contorno y0 = α , yN +1 = β . Las ecuaciones (5.4) se pueden expresar matricialmente de la forma Ay = b ,
136
(5.5)
5.1 Diferencias finitas para EDOs con condiciones de frontera
donde A es la matriz tridiagonal ⎛ Δx 2 2 + Δx q (x1 )
⎜ ⎜ −1 − ⎜ ⎜ ⎜ A=⎜ ⎜ ⎜ ⎜ ⎝
Δx p (x2 ) 2
0 .. .
−1 +
2
p (x1 )
2 + Δx2 q (x2 ) .. . .. .
0 ..
.
..
.
··· ···
.. ..
0
. 0
···
.. −1 −
⎞
0 .. .
.
0
.
−1 + Δx p (xN −1 ) 2 2 + Δx2 q (xN )
Δx p (xN ) 2
⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ (5.6)
y los vectores y y b vienen dados por ⎛ ⎜ ⎜ y=⎜ ⎝
y1 y2 .. . yN −1 yN
⎞
⎛
⎟ ⎜ ⎟ ⎜ ⎟ , b = −Δx2 ⎜ ⎠ ⎝
r (x1 ) r (x2 ) .. . r (xN −1 ) r (xN )
⎞
⎛
⎜ ⎟ ⎜ ⎟ ⎜ ⎟+⎜ ⎠ ⎜ ⎝
1+
Δx p (x1 ) 2
0 .. . 0
1−
α
Δx p (xN ) 2
⎞ ⎟ ⎟ ⎟ ⎟ . ⎟ ⎠
(5.7)
β
Por tanto, debemos resolver un sistema de ecuaciones lineales. Como la matriz A es tridiagonal (no simétrica) podemos hacer uso de la descomposición LU para este tipo de sistemas que es bastante eficiente y rápida. Ejemplo 5.1 Resolver el siguiente problema de frontera mediante el método de diferencias finitas para N = 3 (esto es Δx = 1/(N + 1) = 1/4) y = 4y + 4x(e−2 −1) , 0 ≤ x ≤ 1 , y(0) = 0 , y(1) = 0. Sabiendo que la solución exacta del problema es y(x) =
e−2x − e2x + (1 − e−2 )x, 1 + e2
hallar el error máximo del método. Solución: Con la discretización considerada tenemos 5 puntos: dos en la frontera y 3 interiores, donde x1 = Δx = 1/4,
x2 = 2Δx = 1/2,
Nos construimos la matriz A ⎛ 2 + Δx2 q (x1 ) ⎝ A= −1 − Δx 2 p (x2 ) 0
−1 + Δx 2 p (x1 ) 2 + Δx2 q (x2 ) −1 − Δx 2 p (x3 )
x3 = 3Δx = 3/4.
0
⎞
⎠ , −1 + Δx 2 p (x2 ) 2 2 + Δx q (x3 ) 137
Capítulo 5. Métodos numéricos para problemas de contorno
y los vectores
⎞ ⎞ ⎛ y1 −Δx2 r (x1 ) + 1 + Δx 2 p (x1 ) α ⎠ . −Δx 2 r (x2 ) y = ⎝ y2 ⎠ , b = ⎝
2 y3 −Δx r (x3 ) + 1 − Δx p (x ) β 3 2 ⎛
Identificamos las funciones p(x) = 0,
q(x) = 4,
r(x) = 4x(e−2 −1),
y el sistema a resolver es (considerando que α = β = 0): ⎞ ⎛ ⎞ ⎛ ⎛ 9 ⎞ 1 −1 0 (e−2 −1) − 16 y1 4 ⎝ −1 9 −1 ⎠ ⎝ y2 ⎠ = ⎝ − 1 (e−2 −1) ⎠ , 4 8 3 y3 (e−2 −1) 0 −1 94 − 16 cuya solución representamos en la siguiente tabla. En la última fila mostramos la solución exacta donde se aprecia la buena precisión obtenida. xi yi y(xi )
0 0 0
0.25 0.0907 0.0919
0.5 0.1500 0.1521
0.75 0.1387 0.1408
1 0 0
5.2
Diferencias finitas para problemas parabólicos
Vamos a estudiar ahora cómo aplicar el método de las diferencias finitas para la resolución numérica de una EDP parabólica (también llamada ecuación del calor o de difusión) con término fuente y condiciones de frontera variables. Estudiaremos el problema unidimensional en una región de longitud L. El problema viene descrito por ⎧ 2 ∂u 2∂ u ⎪ ⎪ = a + F (x, t), ⎪ ⎨ ∂t ∂x2 x ∈ [0, L], t ≥ 0, (5.8) ⎪ ⎪ (t), u(L, t) = f (t), u(0, t) = f 0 L ⎪ ⎩ u(x, 0) = u0 (x), donde a es una constante que depende del medio en el que se propaga el calor, F (x, t) es una fuente de calor que puede depender tanto de la posición como del tiempo y f0 (t), fL (t) son los valores de la temperatura que mantenemos controlada en los extremos, pudiendo variar en el tiempo. Por sencillez, empezaremos viendo cómo resolver el problema numéricamente para el caso sin fuente, F = 0, y posteriormente veremos cómo, modificando ligeramente 138
5.2 Diferencias finitas para problemas parabólicos
Figura 5.1: Mallado para un problema parabólico.
el algoritmo, podemos incluir este término. Debemos recordar que la resolución analítica de este problema se puede obtener utilizando separación de variables, pero el problema se complica de manera considerable al incluir condiciones de frontera variables y el término fuente. El primer paso en la obtención de una aproximación numérica para resolver esta ecuación es discretizar el tiempo y el espacio en intervalos equidistantes, t = nΔt, n = 0, 1, 2, . . . , Nt , y x = x0 +iΔx, i = 0, 1, . . . , Nx +1 (para la coordenada espacial tomamos Δx = L/(Nx + 1) de tal manera que haya Nx + 2 nodos de los cuales Nx son interiores y desconocidos mientras que los otros 2 son los nodos frontera conocidos). Si representamos en el eje de ordenadas la coordenada espacial y en las abcisas la temporal tendremos un mallado del espacio y el tiempo en el que conocemos la solución en tres de los lados y buscamos la solución en el interior del mallado. La Figura 5.1 muestra con círculos blancos los nodos en los que la solución es conocida y en círculos negros los nodos en los que vamos a buscar soluciones aproximadas. La derivada temporal la aproximamos por diferencias finitas de primer orden ∂u u(x, t + Δt) − u(x, t) ≈ + O (Δt) , ∂t Δt mientras que para la derivada espacial tomamos una aproximación de segundo orden
∂2u u(x − Δx, t) − 2u(x, t) + u(x + Δx, t) ≈ + O Δx2 . 2 2 ∂x Δx Denotaremos por uni a las aproximaciones de la solución en los puntos del mallado, u (nΔt, x0 + iΔx), para i = 0, 1, . . . , Nx + 1, n = 0, 1, . . . 139
Capítulo 5. Métodos numéricos para problemas de contorno
Método de Euler explícito. Se corresponde con el siguiente esquema para aproximar la ecuación (5.8) un − 2uni + uni+1 un+1 − uni i = a2 i−1 , Δt Δx2 o sea, donde r = compacta
un+1 = uni + r uni−1 − 2uni + uni+1 , i a2 Δt Δx2 .
Esta relación se puede escribir en forma matricial de manera más un+1 = (I + rA)un + rbn ,
siendo I la matriz identidad de dimensión Nx × Nx y donde ⎞ ⎛ ⎞ ⎛ n u1 un 2 .. .
⎜ ⎜ u =⎜ ⎜ ⎝ un Nx −1 n
−2 ⎜ 1
⎟ ⎟ ⎜ ⎟, A = ⎜ ⎟ ⎜ ⎠ ⎝
1 −2
1 .. . 1
un Nx
−2 1
(5.9) ⎛
⎟ ⎜ ⎟ ⎜ ⎟ , bn = ⎜ ⎟ ⎜ ⎝ 1 ⎠
−2
f0n 0 .. . 0 fLn
⎞ ⎟ ⎟ ⎟ . (5.10) ⎟ ⎠
Aquí hemos tenido en cuenta que un0 = f0n = f0 (tn ), unNx +1 = fLn = fL (tn ). Vemos que un es el vector solución correspondiente a la fila n-ésima en el mallado de la Figura 5.1, esto es, avanzamos el cálculo fila a fila. Si las condiciones de frontera fueran nulas (b = 0) n pasos del método se podrían escribir de forma compacta como (5.11) un = (I + rA)n u0 . Es posible demostrar que los valores propios de la matriz I + rA son: % πk 2 : k = 1, . . . , Nx . σ(I + rA) = 1 − 4r sen 2Nx + 2 Para garantizar la estabilidad del esquema explícito y que la solución numérica no crezca indefinidamente, estos valores propios deben ser, en valor absoluto, menores que la unidad, por lo que es necesario que se cumpla la condición 0
a2 Δt 1 < , Δx2 2
que se conoce como la condición de Courant. Esta condición limita la longitud del paso temporal, Δt que es necesario elegir una vez se ha elegido un paso espacial, Δx. Método de Euler implícito. Para evitar problemas de estabilidad, se puede evaluar la derivada segunda espacial en el instante (n + 1)Δt, en vez de hacerlo en el instante nΔt, obteniendo de este modo la aproximación
140
un+1 − 2un+1 + un+1 un+1 − uni i i+1 i = a2 i−1 , Δt Δx2
5.2 Diferencias finitas para problemas parabólicos
o sea,
n+1 n −run+1 − run+1 i−1 + (1 + 2r)ui i+1 = ui ,
que es un método implícito, ya que si hacemos variar i = 1, . . . , Nx , para cada paso de tiempo, se ha de resolver un sistema de ecuaciones que matricialmente toma la forma (5.12) (I − rA)un+1 = un + rbn+1 , donde A es la dada en (5.10). Éste es un método implícito y requiere la resolución de un sistema lineal de ecuaciones. Como la matriz I − rA es tridiagonal, podemos aplicar una factorización LU para matrices tridiagonales como vimos en el tema de sistemas lineales y que es muy rápido y eficiente de evaluar. Por tanto, el algoritmo recursivo que nos permite obtener un+1 , con las condiciones de frontera conocidas, bn+1 , se puede escribir formalmente como ! un+1 = (I − rA)−1 un + rbn+1 . (5.13) Es posible demostrar que los valores propios de la matriz (I −rA)−1 tienen módulo menor que la unidad y por tanto el método es incondicionalmente estable. Método de Crank-Nicholson. Otro método que se puede obtener que no tiene problemas de estabilidad y es más preciso que el método implícito, es el método de Crank-Nicholson, que viene dado por la ecuación n+1 + un+1 un+1 un+1 − uni a2 uni−1 − 2uni + uni+1 i−1 − 2ui i+1 i = . + Δt 2 Δx2 Δx2 Matricialmente se puede escribir en la forma 1 1 r n+1 I − rA u = I + rA un + (bn + bn+1 ), 2 2 2 luego u
n+1
−1 1 r n 1 n n+1 I − rA ) . I + rA u + (b + b 2 2 2
(5.14)
=
(5.15)
Hemos visto que con estos tres métodos hemos ido calculando aproximaciones numéricos en los nodos del mallado de la Figura 5.1. Cada método hace uso de puntos vecinos. A la hora de construir un método es útil conocer de qué nodos vecinos se ha hecho uso. En la Figura 5.2 se muestran los diagramas de nodos utilizados para cada uno de los métodos: (a) Euler explícito, (b) Euler implícito y (c) Crank-Nicholson.
141
Capítulo 5. Métodos numéricos para problemas de contorno
Figura 5.2: Diagrama de nodos correspondiente a los métodos: (a) Euler explícito, (b) Euler implícito y (c) Crank-Nicholson, utilizados en la resolución del problema parabólico.
Éstos y otros métodos más elaborados se pueden obtener fácilmente a partir de los métodos estudiados en el tema anterior para ecuaciones diferenciales ordinarias si primeramente discretizamos solamente en espacio y tomamos el vector de soluciones ⎞ ⎛ u1 (t) ⎜ u2 (t) ⎜ ⎜ .. u(t) = ⎜ . ⎜ ⎝ uN −1 (t) x uNx (t)
⎟ ⎟ ⎟ ⎟, ⎟ ⎠
en el que uj (t) u(xj , t), y la EDP la aproximamos por el siguiente sistema lineal de EDOs du = sAu + sb(t) , dt 2
a donde s = Δx 2 . Esta técnica se llama el Método de líneas. Vemos que se trata de un sistema de ecuaciones diferenciales ordinarias de la forma y = f (t, y) donde y = u y f (t, u) = sAu + sb(t). Si utilizamos el método de Euler explícito visto en el tema anterior obtenemos el método (5.9). En cambio, si utilizamos el método de Euler implícito (yn+1 = yn + hf (tn+1 , yn+1 )) se obtiene el esquema (5.12) o bien (5.13). Finalmente, si utilizamos el método implícito trapezoidal, o lo que es lo mismo, el método de Adams-Moulton de un paso (yn+1 = yn + h2 (f (tn+1 , yn+1 ) + f (tn , yn ))) obtenemos el método de Crank-Nicolson. Como vemos, en principio, podríamos utilizar cualquiera de los métodos vistos para EDOs con condiciones iniciales (observar que las condiciones de frontera se encuentran en el vector b(t)).
Ejemplo 5.2 Considerar el problema ⎧ ∂u ∂2u ⎪ ⎪ = , ⎪ ⎨ ∂t ∂x2
x ∈ [0, 1],
⎪ ⎪ ⎪ ⎩ u(0, t) = u(1, t) = 0, u(x, 0) = sen(πx), 2
142
t ∈ [0, 1],
(5.16)
1 cuya solución exacta es: u(x, t) = e−π t sen(πx). Tomar Δx = 10 y resolver el 1 1 problema utilizando los métodos Euler explícito (con Δt = 174 y Δt = 173 ), Euler
5.2 Diferencias finitas para problemas parabólicos 1 implícito (con Δt = 10 ) o Crank-Nicholson (con Δt = n m´ axi,n |u(xi , tn ) − ui |, para cada método.
1 10 ).
Hallar el error máximo,
Solución: Para resolver este problema nos hará falta el uso de ordenador. En la Figura 5.3 se muestran los resultados obtenidos y el programa Matlab que lo genera se verá en el correspondiente capítulo de prácticas.
10
1
5 u
u
0.5
0
0 −5 −10 200
−0.5 200
15
15 100
100
10
10 5
5 0 0
t
0 0
t
x
(a) Euler explícito, Δt = 1/174
x
(b) Euler explícito, Δt = 1/173
0.6
0.6 u
1 0.8
u
1 0.8
0.4
0.4
0.2
0.2
0 15
0 15 15
10
10
5 t
15
10
5 0 0
x
(c) Euler implícito, Δt = 1/10
10
5 t
5 0 0
x
(d) Crank-Nicholson, Δt = 1/10
Figura 5.3: Soluciones obtenidas para el Ejemplo 5.2 con los métodos Euler explícito ((a) error = 0.2017, (b) error = 9.4727), Euler implícito (error = 0.1326) y Crank-Nicholson (error = 0.0299).
143
Capítulo 5. Métodos numéricos para problemas de contorno
Inclusión del término fuente Con esta fórmula de discretizar en la coordenada espacial e integrar con un método numérico el sistema de ODEs asociado, es inmediato y sencillo extender los métodos para el caso en que tengamos un término fuente, Q(x, t), y resolver el problema general (5.8). Simplemente, hay que resolver el sistema de EDOs dado por du = sAu + F (t) + sb(t), dt donde ⎛ ⎞ F (x1 , t) ⎜ F (x2 , t) ⎟ ⎜ ⎟ F (t) = ⎜ ⎟. .. ⎝ ⎠ . F (xNx , t) De manera similar se podrían resolver otras ecuaciones más complejas y cuya solución por separación de variables no sería posible.
5.3
Diferencias finitas para problemas hiperbólicos
Como ejemplo de un problema de contorno hiperbólico consideraremos la ecuación de ondas descrito por las ecuaciones ⎧ 2 2 ⎪ ⎪ ∂ u = a2 ∂ u + F (x, t), ⎪ ⎪ 2 ⎪ ∂x2 ⎨ ∂t x ∈ [0, L], t ≥ 0, (5.17) u(0, t) = f0 (t), u(L, t) = fL (t), ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ u(x, 0) = f (x), ∂u (x, 0) = g(x), ∂t donde a es la velocidad de propagación en el medio, F (x, t) es una fuerza externa que puede depender tanto de la posición como del tiempo, y f0 (t), fL (t) pueden representar los movimientos de los extremos. Este modelo describe, por ejemplo, el movimiento de una cuerda de longitud L.
144
Mostramos en primer lugar cómo obtener un método para el caso en que F = f0 = fL = 0. Para este problema utilizaríamos el mismo mallado que en el problema parabólico (ver Figura 5.1) pues conocemos la solución en el instante inicial y en los dos extremos, y habría que calcular la solución en el mallado interior. Si aproximamos las derivadas segundas tanto espacial como temporal por una aproximación de segundo orden un − 2uni + uni+1 ∂2u (xi , tn ) ≈ i−1 , 2 ∂x Δx2 y ∂2u − 2uni + un+1 un−1 i i (x , t ) ≈ , i n ∂t2 Δt2
5.3 Diferencias finitas para problemas hiperbólicos
se llega a una aproximación de la ecuación (5.17) de la forma un − 2uni + uni+1 − 2uni + un+1 un−1 i i = a2 i−1 , 2 Δt Δx2 que se puede reescribir como n
a2 Δt2 a2 Δt2 n+1 n n + ui−1 + ui+1 − un−1 = 2ui 1 − , ui i Δx2 Δx2 para i = 1, . . . , Nx . El cálculo de u1 requiere conocer previamente u0 , que se obtiene de la condición inicial, pero también de u−1 . Una posibilidad consiste en usar la condición ∂u (x, 0) = g(x), ∂t sustituyendo
0≤x≤L,
∂u u1 − u0i (x, 0) ≈ i = g (xi ) , ∂t Δt
o sea, u1i = u0i + Δtg (xi ) , i = 1, . . . , Nx . Una aproximación de mayor orden se puede obtener si se tiene en cuenta que
∂u (Δt) ∂ 2 u (xi , 0) + (xi , 0) + O Δt3 . 2 ∂t 2 ∂t 2
u (xi , t1 ) = u (xi , 0) + Δt
Si existe f , podemos usar la ecuación de ondas y escribir ∂2u ∂2u (xi , 0) = a2 2 (xi , 0) = a2 f (xi ) , 2 ∂t ∂x con lo que se tiene 2
u1i = u0i + Δtg (xi ) +
a2 (Δt) f (xi ) . 2
Alternativamente, podemos utilizar el método de líneas. De nuevo, al igual que en el problema parabólico, si discretizamos solamente respecto a la coordenada espacial, nos queda el sistema de EDOs de la forma (utilizando la misma notación que anteriormente) d2 u = sAu, dt2 145
Capítulo 5. Métodos numéricos para problemas de contorno 2
a donde s = Δx 2 y la matriz A viene dada por (5.10) (proviene de la discretización ∂2 del mismo operador, ∂x 2 donde además b(t) = 0 debido a que las condiciones de frontera son nulas). Las condiciones iniciales son
⎛ ⎜ ⎜ u(0) = ⎜ ⎜ ⎝
f (x1 ) f (x2 ) .. . f (xNx −1 ) f (xNx )
⎞ ⎟ ⎟ ⎟, ⎟ ⎠
⎛ ⎜ ⎜ u (0) = ⎜ ⎜ ⎝
g(x1 ) g(x2 ) .. . g(xNx −1 ) g(xNx )
⎞ ⎟ ⎟ ⎟. ⎟ ⎠
Debemos resolver un sistema de ecuaciones diferenciales lineales de segundo orden con condiciones iniciales en la función y su derivada. Podemos transformar este sistema de ecuaciones diferenciales de segundo orden en uno de primer orden, d u v = v sAu dt y condiciones iniciales: u(0) y v(0) = u (0). De nuevo es de la forma y = f (t, y) donde y = (u, v)T y f (t, y) = (v, sAu)T , y podemos utilizar cualquiera de los métodos estudiados para EDOs. Un esquema distinto pero a la vez muy sencillo y con muy buenas propiedades, que es de segundo orden tanto en la discretización espacial como en la temporal se corresponde con el siguiente algoritmo n U = un + Δt 2 v n v = v + ΔtsAU n+1 un+1 = U + Δt 2 v n+1
el cual se inicia con: u0 = u(0), v 0 = u (0). Este esquema recibe el nombre de método de Strang o también leap-frog por la forma especial en que se evalúan un y vn . Inclusión de las condiciones de frontera y del término fuente Lo mostramos únicamente para el método de líneas. Estos dos términos se pueden incluir de manera similar a como se hizo en el problema parabólico, y el sistema de EDOs a resolver será d u v = . v sAu + F (t) + sb(t) dt
146
5.4 Diferencias finitas para problemas elípticos
Figura 5.4: Mallado para un problema elíptico 2D rectangular.
El algoritmo habría que modificarlo ligeramente de la siguiente forma:
5.4
U
=
v n+1
=
un+1
=
Δt n v , 2 n v + Δt(sAU + F (tn ) + sb(tn )), Δt n+1 v U+ . 2
un +
(5.18)
Diferencias finitas para problemas elípticos
Como ejemplo de problema elíptico vamos a considerar el problema de contorno asociado a la ecuación de Poisson, y por sencillez consideraremos condiciones de frontera nulas ⎧ 2 ∂ u ∂2u ⎪ ⎪ ⎨ + 2 = f (x, y) , (x, y) ∈ D = [0, l1 ] × [0, l2 ] , ∂x2 ∂y (5.19) ⎪ ⎪ ⎩ u(x, y) = 0 , (x, y) ∈ ∂D. El primer paso que realizaremos consistirá en discretizar el rectángulo [0, l1 ]×[0, l2 ] mediante un conjunto de nodos igualmente espaciados, como se muestra en la Figura 5.4, 147
Capítulo 5. Métodos numéricos para problemas de contorno
Figura 5.5: Diagrama correspondiente al método de 5 puntos.
xi = iΔx , yj = jΔy ,
i = 0, 1, 2, . . . , N + 1 , j = 0, 1, 2, . . . , M + 1 .
Utilizando una aproximación similar a la de (5.2), para las derivadas segundas, se tiene que ∂2u ui−1j − 2uij + ui+1j (xi , yj ) ≈ , 2 ∂x Δx2 ∂2u uij−1 − 2uij + uij+1 (xi , yj ) ≈ , ∂y 2 Δy 2 donde uij = u (xi , yj ). De este modo, se tiene que la ecuación (5.19) se puede aproximar de la forma 1 1 (ui−1j − 2uij + ui+1j ) + (uij−1 − 2uij + uij+1 ) = fij . 2 Δx Δy 2
(5.20)
Si reescalamos los ejes x e y, y tomamos un mallado tal que Δx = Δy la recurrencia toma la forma ui−1j + ui+1j + uij−1 + uij+1 − 4uij = Δx2 fij .
(5.21)
para i = 1, . . . , N, j = 1, . . . , M . Este esquema se corresponde con el diagrama de 5 puntos de la Figura 5.5. Para poder escribir las ecuaciones resultantes se han de ordenar los nodos del mallado de algún modo. Una posibilidad es utilizar el orden dado por l = i + N (j − 1) . 148
5.4 Diferencias finitas para problemas elípticos
Cuando se escriben las ecuaciones teniendo en cuenta las condiciones de contorno se obtiene un sistema de ecuaciones de la forma Au = b,
(5.22)
donde u y b son vectores de dimension N M y A es una la matriz de dimension NM × NM. Ejemplo 5.3 Halla el sistema de ecuaciones a resolver para N = M = 2. Solución: Los nodos interiores en los que debemos encontrar una aproximación a la solución son u1 = (u11 , u12 )T , u2 = (u21 , u22 )T y los valores de frontera conocidos son u0 = (u01 , u02 )T , u3 = (u31 , u32 )T así como los valores de u10 , u20 , u13 , u23 . Si aplicamos la ecuación (5.21) para i, j = 1, 2 obtenemos u01 + u21 + u10 + u12 − 4u11 = Δx2 f11 u02 + u22 + u11 + u13 − 4u12 = Δx2 f12 u11 + u31 + u20 + u22 − 4u21 = Δx2 f21 u12 + u32 + u21 + u23 − 4u22 = Δx2 f22 que se puede escribir matricialmente como (5.22) donde ⎞ ⎛ ⎞ ⎛ −4 1 1 0 u11 ⎟ ⎜ 1 −4 0 ⎜ 1 ⎟ ⎟ , u = ⎜ u12 ⎟ , A=⎜ ⎝ 1 ⎠ ⎝ u21 ⎠ 0 −4 1 u22 0 1 1 −4 ⎞ ⎛ ⎞ ⎛ f11 −u01 − u10 ⎜ ⎟ ⎜ −u02 − u13 ⎟ 2 ⎜ f12 ⎟ ⎟ b=⎜ ⎝ −u31 − u20 ⎠ + Δx ⎝ f21 ⎠ . −u32 − u23 f22 En general, se tiene ⎛ A I ⎜ I A ⎜ A=⎜ .. ⎝ . 0 con
0
I .. . I
⎞
⎟ ⎟ , .. ⎟ . ⎠ A ⎛
−4 ⎜ 1 ⎜ A=⎜ ⎝ 0
⎛ ⎜ ⎜ u=⎜ ⎝
u1 u2 .. .
⎞
⎛
⎟ ⎟ ⎟, ⎠
⎜ ⎜ b=⎜ ⎝
uN 1 −4 .. .
.
1
⎞ ⎟ ⎟ ⎟, ⎠
(5.23)
bN 0
1 ..
b1 b2 .. .
⎞
⎟ ⎟ ⎟, . ⎠ −4 ..
(5.24) 149
Capítulo 5. Métodos numéricos para problemas de contorno
donde ui = (ui,1 , . . . , ui,M )T , i = 1, . . . , N , luego u, b ∈ RN M , I, A ∈ RM ×M y A ∈ RN M ×N M . El vector b contiene la información proveniente tanto de la frontera (en caso de las condiciones no fueran nulas) como del término fuente f . Como vemos, esta ordenación hace que A sea una matriz en banda con amplitud de banda 2N + 1 como mucho, por lo que los métodos del capítulo de sistemas lineales serán aplicables. Para problemas de grandes dimensiones, con valores de N grandes, los métodos iterativos de resolución de ecuaciones lineales suelen ser los más eficientes.
5.5
Ejercicios resueltos
Ejercicio 5.1 Obtén una aproximación en diferencias finitas para el problema ∂2u = f (x) , 0 ≤ x ≤ 1 , ∂x2 ∂u ∂u (0) = 0 , (1) = 0 , ∂x ∂x
que tenga un error de truncamiento O Δx2 . −
Solución: Se considera una malla como la que se muestra en la Figura 5.6.
0
−1
1
0
1
2
N N +1N +2
Figura 5.6: Malla para el problema unidimensional.
Se tiene la aproximación
∂2u ui−1 − 2ui + ui+1 = + O Δx2 . ∂x2 Δx2 Si usamos las aproximaciones de las derivadas ∂u u 1 − u0 ∂u uN +1 − uN (0) = + O(Δx) , (xN ) = + O(Δx) , ∂x Δx ∂x Δx se obtiene un esquema con orden O(Δx). 150
5.5 Ejercicios resueltos
Para obtener un esquema de orden mayor, se introducen los nodos ficticios x−1 y xN +2 y se usan las aproximaciones, ∂u u1 − u−1 ∂u uN +2 − uN (0) = + O(Δx2 ) , (xN +1 ) = + O(Δx2 ) . ∂x 2Δx ∂x Δx Para eliminar los nodos ficticios, se evalúa la ecuación que define el problema en los nodos x0 , x1 , . . . , xN +1 , obteniendo 1 (u−1 − 2u0 + u1 ) Δx2 1 (u0 − 2u1 + u2 ) Δx2 .. . 1 (uN − 2uN +1 + uN +2 ) Δx2
=
f (x0 )
=
f (x1 )
=
f (xN +1 )
Se tienen las condiciones de contorno u−1 = u1 , uN +2 = uN y haciendo uso de estas condiciones, se tiene el sistema −u0 u0
+2u1 −2u1 .. .
= =
u2 2uN
−2uN +1
Δx2 f (x0 ) Δx2 f (x1 )
= = Δx2 f (xN +1 )
que define el esquema con orden de truncamiento O(Δx2 ).
Ejercicio 5.2 Dado el problema y = λ2 y , −1 ≤ x ≤ 1 , con y(−1) = y(1) = 1. Obtén un método numérico para la solución de este problema. ¿Cúal es la solución exacta del problema en diferencias obtenido? Solución: Si se utiliza la aproximación y (xi ) ≈
yi−1 − 2yi + yi+1 , Δx2
se tiene el problema yi−1 − 2yi + yi+1 = Δx2 λ2 yi , 151
Capítulo 5. Métodos numéricos para problemas de contorno
o sea,
yi+1 − 2 + Δx2 λ2 yi + yi−1 = 0 .
Si probamos soluciones del tipo yi = ri , tenemos la ecuación característica r2 − (2 + Δx2 λ2 )r + 1 = 0 , cuyas soluciones son √ 2 2 + Δx2 λ2 ± (2 + Δx2 λ2 ) − 4 2 + Δx2 λ2 Δx2 4 + Δx2 λ2 r= = ± = r1,2 . 2 2 2 La solución general del problema discreto es de la forma yi = c1 r1i + c2 r2i , Se toman los nodos 0, 1, . . . , Nx + 1, y se imponen las condiciones de contorno y0 = 1 = c1 + c2 , ynx +1 = c1 r1Nx +1 + c2 r2Nx +1 = 1 , se obteniene que c1 =
1 − r2Nx +1 r1Nx +1 − 1 , c = . 2 r1Nx +1 − r2Nx +1 r1Nx +1 − r2Nx +1
Ejercicio 5.3 Considera el problema ⎧ ∂2u ∂u ⎪ ⎪ = , ⎪ ⎨ ∂t ∂x2
x ∈ [0, 1],
⎪ ⎪ ⎪ ⎩ u(0, t) = u(1, t) = 0, u(x, 0) = sen(πx),
' & 1 , t ∈ 0, 9
(5.25)
2
cuya solución exacta es: u(x, t) = e−π t sen(πx). Toma Δx = 13 e integra con un paso de integración, Δt = 19 utilizando los métodos Euler explícito, Euler implícito y Crank-Nicholson. Halla el error máximo para cada método. Solución: El mallado que hay que considerar con las condiciones del problema se muestra en la Figura 5.7. Conocemos la solución en los puntos marcados con • y falta saber la solución en los marcados con ♦. 152
5.5 Ejercicios resueltos
t1 =
1 9
t0 = 0 x0 = 0 Δx =
x1 1 3
Δt =
x2
x3 = 1
1 9
Figura 5.7: Mallado para el problema de valor inicial.
Se puede establecer la notación que se indica en la Figura 5.8. Por las condiciones u10
u11
u12
u13
u00
u01
u02
u03
Figura 5.8: Notación para el problema de valor inicial.
de frontera u(0, t) = u(1, t) = 0, se tiene que u00 = u10 = u03 = u13 = 0 . Haciendo uso de las condiciones iniciales tenemos que √ π! 3 0 = , u1 = sen (πx1 ) = sen 3 2 √ 2π 3 = . u02 = sen (πx2 ) = sen 3 2 Si utilizamos el método de Euler explícito, un − 2uni + uni+1 un+1 − uni i = i−1 , Δt Δx2 o sea, con r =
= (1 − 2r)uni + runi−1 + runi+1 , un+1 i Δt Δx2 .
Tomamos n = 0 y consideramos i = 1, 2, (i = 1) (i = 2)
u11 = (1 − 2r)u01 + ru02 , u12 = (1 − 2r)u02 + ru01 ,
153
Capítulo 5. Métodos numéricos para problemas de contorno
que en forma matricial se expresa 1 0 u1 −2 u1 = +r u12 u02 1
1 −2
u01 u02
u01 u02
= (I + rA)
.
Con las condiciones del problema r=
Δt = Δx2
1 9 1 32
=1
y, por tanto, no se cumple la condición de Courant. Se tiene
u11 u12
=
−1 1
1 −1
1 1
√ 3 0 = . 0 2
Esta solución se ha de comparar con la solución analítica − π2 1 0.2892 u (x1 , t1 ) e 9 sen π3 u t1 = = . = = 2
π 0.2892 u (x2 , t2 ) 9 e− 9 sen 2π 3
Si se usa el método de Euler implícito, + un+1 un+1 − 2un+1 un+1 − uni i i+1 i = i−1 , Δt Δx2 que en forma matricial se expresa n+1 n u1 −2 u1 = + r 1 un2 un+1 2
1 −2
un+1 1 un+1 2
.
Con las condiciones del problema se tiene el sistema 1 √ 3 3 −1 u1 1 = . −1 3 1 u12 2 Resolviendo el sistema se obtiene 1 √ 3 u1 1 0.433 = , = 1 0.433 u12 4 con lo que el error máximo obtenido es ε = |0.433 − 0.289| = 0.144. Si ahora utilizamos el método de Crank-Nicholson, un+1 − uni 1 i = Δt 2 154
n+1 un+1 + un+1 un − 2uni + uni+1 i−1 − 2ui i+1 + i−1 2 Δx Δx2
,
5.5 Ejercicios resueltos
que en forma matricial se expresa n+1 n+1 n r r −2 1 u1 −2 u1 u1 = + + n+1 n 1 −2 1 u un+1 u 2 2 2 2 2
1 −2
un1 un2
.
Para nuestro problema
1 1 −2 1 u1 1 0 − 1 1 −2 u 0 1 2 2 0 1 1 0 −2 1 u1 = + , 0 0 1 1 −2 u 2 2
esto es
− 12 2
2 − 12
cuya solución es
u11 u12
u11 u12
=
1 = √ 2 3
0 1 2
√ √ 3 3 1 1 = , 1 1 0 2 4 1 2
1 1
=
0.2886 0.2886
con lo que el error máximo es ε = |0.2892 − 0.2886| = 0.0006. Ejercicio 5.4 Considera el problema ⎧ ∂2u ∂u ⎪ ⎪ = + t(1 + x), ⎪ ⎪ ∂x2 ⎪ ⎨ ∂t u(0, t) = t, ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ u(1, t) = 2t, u(x, 0) = sen(πx), Toma Δx =
1 3
x ∈ [0, 1],
' & 1 . t ∈ 0, 10
y obtén el sistema de ecuaciones diferenciales que satisface el vector u(x1 , t) u(t) = , u(x2 , t)
esto es, escribe explícitamente el sistema de ecuaciones du = sAu + F (t) + sb(t). dt Solución: Se puede considerar un mallado similar al que se muestra en la Figura 5.7, y una aproximación para la derivada segunda de la forma ui−1 − 2ui + ui+1 ∂2u ≈ . 2 ∂x Δx2
155
Capítulo 5. Métodos numéricos para problemas de contorno
En un nodo i se tiene la aproximación dui ui−1 − 2ui + ui+1 = + t (1 + xi ) . dt Δx2 Usando las condiciones de frontera, para el nodo i = 1 se tiene du1 −2u1 + u2 t = + + t (1 + x1 ) , 2 dt Δx Δx2 y para el nodo i = 2, du2 u1 − 2u2 2t = + + t (1 + x2 ) . 2 dt Δx Δx2 En forma matricial u1 d = dt u2
s
−2 1 1 −2
u1 u2
+s
t 2t
con lo que se idenfifican las matrices −2 1 t A= , b= , F = 1 −2 2t
4 3t 5 3t
+
4 3t 5 3t
,
.
5.6
Ejercicios propuestos
1. Resuelve la siguiente ecuación diferencial con condiciones en la frontera ⎧ 2 1 1 ⎪ ⎨ y + xy − x2 y = −2 e−x /2 2 2 x ∈ [0, 1] 2 ⎪ ⎩ y(0) = 2, y(1) = √ , e utilizando el método de diferencias finitas y Δx = 14 . Compara el resultado 2 obtenido con la solución exacta, y(x) = 2 e−x /2 , e indica cual es el error máximo cometido. 2. Obtén el error de truncamiento del método
= uni + r uni−1 − 2uni + uni+1 , un+1 i para la ecuación del calor ∂u ∂2u = α 2. ∂t ∂x 156
r=
αΔt , Δx2
5.6 Ejercicios propuestos
3. Obtén una solución aproximada del problema ∂2u ∂2u + 2 = 0, ∂x2 ∂y
0 < x < 2, 0 < y < 2,
u(0, y) = 0,
u(2, y) = y(2 − y), 0 < y < 2,
u(x, 0) = 0,
u(x, 2) =
x, 2 − x,
0 < x < 1, 1 ≤ x < 2,
usando diferencias finitas con un tamaño de malla Δx = Δy = 2/3. Expresa el sistema a resolver en forma matricial. 4. Obtén una solución aproximada del problema ⎧ 2 ∂ u ∂2u ⎪ ⎪ ⎨ + 2 = x(3 − x)y(3 − y) , (x, y) ∈ [0, 3] × [0, 3] , ∂x2 ∂y ⎪ ⎪ ⎩ u(0, y) = u(3, y) = u(x, 0) = u(x, 3) = 0 , usando diferencias finitas con un tamaño de malla Δx = Δy = 1. 5. Deduce los métodos de Euler explícito, Euler implícito y Crank-Nicholson cuando el término fuente depende linealmente de la solución: ⎧ 2 ∂u 2∂ u ⎪ ⎪ = a − bu, ⎪ ⎨ ∂t ∂x2 x ∈ [0, L], t ≥ 0 , ⎪ ⎪ (t), u(L, t) = f (t) , u(0, t) = f 0 L ⎪ ⎩ u(x, 0) = u0 (x), con b > 0. 6. Deduce el método de leap-frog cuando el término fuente depende linealmente de la solución: ⎧ 2 2 ∂ u ⎪ 2∂ u ⎪ = a + bu, ⎪ ⎪ ∂t2 ⎪ ∂x2 ⎨ x ∈ [0, L], t ≥ 0 . u(0, t) = f0 (t), u(L, t) = fL (t) , ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ u(x, 0) = f (x), ∂u (x, 0) = g(x), ∂t
157
Capítulo 6
Introducción a los elementos finitos 6.1
Técnicas variacionales
Hemos visto que el método de las diferencias finitas consiste, esencialmente, en sustituir el valor de las derivadas de la función en un punto por un cociente incremental obteniendo de este modo una ecuación en diferencias, cuya solución nos da la solución aproximada del problema. Ahora expondremos el método de Rayleigh-Ritz, que es una técnica variacional que trata el problema desde otro punto de vista. En primer lugar, se reformula el problema de contorno, como el problema de encontrar, dentro de un conjunto de funciones suficientemente derivables que verifican las condiciones de contorno, la función que minimiza cierta integral. La solución de este nuevo problema nos dará una aproximación al problema original. El método de Rayleigh-Ritz servirá como una introducción al método de los elementos finitos, que se desarrolló entre los años 1940 y 1960 en el campo de la mecánica estructural. Este método es una técnica numérica estándar en el estudio de la mecánica de sólidos y ha sido utilizado con éxito en muchos otros campos. Para exponer cómo funciona el método de Rayleigh-Ritz, consideremos el problema de contorno asociado a la deformación de una viga, que es de la forma d dy − p(x) + q(x)y = f (x) , 0≤x≤1, (6.1) dx dx con las condiciones de contorno y(0) = y(1) = 0.
159
Capítulo 6. Introducción a los elementos finitos
Se puede ver que la solución de la ecuación (6.1) es la función que minimiza una cierta integral entre todas las funciones del conjunto C02 [0, 1], definido por ( ) C02 [0, 1] = u ∈ C 2 [0, 1]/u(0) = u(1) = 0 . Así, una función y ∈ C02 [0, 1] es la solución del problema de la viga (6.1) si, y sólo si, y es la única función que minimiza la integral " 1 ! 2 2 (6.2) p(x) (u (x)) + q(x) (u(x)) − 2f (x)u(x) dx . I(u) = 0
Para resolver el problema de encontrar una función y que minimice la integral (6.2), se eligen ciertas funciones básicas, φ1 , φ2 , . . . , φn , que sean linealmente independientes y que verifiquen φi (0) = φi (1) = 0 , i = 1, 2, . . . , n . Suponemos que u=
n
ci φi (x) ,
i=1
y tratamos de obtener las constantes c1 , c2 , . . . , cn , que hacen mínima la integral n ci φi (x) I i=1
⎛
"
1
= 0
⎝p(x)
n
2 ci φi (x)
i=1
+ q(x)
n
2 ci φi (x)
− 2f (x)
i=1
n
⎞ ci φi (x)⎠ dx .
i=1
Para que se alcance un mínimo se han de satisfacer las ecuaciones normales ∂I = 0 , j = 1, . . . n . ∂cj Derivando, se obtienen las ecuaciones " n " 1
p(x)φi (x)φj (x) + q(x)φi (x)φj (x) dx ci − i=1
0
1
f (x)φj (x) dx = 0 , 0
para j = 1, 2, . . . , n. Estas ecuaciones dan lugar a un sistema de ecuaciones lineales Ac = b , donde A es una matriz simétrica cuyos elementos son de la forma " 1
aij = p(x)φi (x)φj (x) + q(x)φi (x)φj (x) dx , 160
0
6.1 Técnicas variacionales
y las coordenadas del vector b son " bi =
1
f (x)φi (x) dx . 0
La solución de este sistema nos da los coeficientes ci que permiten reconstruir la solución aproximada. Para obtener una solución aproximada hace falta elegir unas funciones base φi determinadas. Una posibilidad es tomar como funciones básicas polinomios lineales a trozos. Para construir estas funciones comenzamos tomando una partición del intervalo [0, 1] cuyos nodos x0 , x1 , . . . , xn+1 , satisfacen 0 = x0 ≤ x1 ≤ · · · ≤ xn+1 = 1 . Tomando Δxi = xi+1 − xi , se definen las funciones básicas ⎧ 0 si 0 ≤ x ≤ xi−1 , ⎪ ⎪ ⎨ 1 (x − x ) si xi−1 ≤ x ≤ xi , i−1 Δxi−1 φi (x) = 1 (x − x) si xi ≤ x ≤ xi+1 , ⎪ ⎪ ⎩ Δxi i+1 0 si xi+1 ≤ x ≤ 1, para i = 1, 2, . . . , n. Derivando, se tiene ⎧ 0 ⎪ ⎪ ⎨ 1 Δxi−1 φi (x) = − 1 ⎪ ⎪ ⎩ Δxi 0
si si si si
0 < x < xi−1 , xi−1 < x < xi , xi < x < xi+1 , xi+1 < x < 1,
para i = 1, 2, . . . , n. Como φi y φi son no nulas en (xi−1 , xi+1 ), los elementos de la matriz A no nulos son " 1 ! 2 2 aii = p(x) (φi (x)) + q(x) (φi (x)) dx 0
2 2 " xi+1 1 −1 = p(x) dx + p(x) dx Δxi−1 Δxi xi−1 xi 2 " xi 1 2 + (x − xi−1 ) q(x) dx Δx i−1 xi−1 2 " xi+1 1 2 + (xi+1 − x) q(x) dx , Δx i xi "
xi
para i = 1, 2, . . . , n.
161
Capítulo 6. Introducción a los elementos finitos
" aii+1
p(x) φi (x)φi+1 + q(x) (φi (x)φi+1 (x)) dx
1
= 0
"
xi+1
= xi
"
−
xi+1
+ xi
1 Δxi 1 Δxi
2 p(x) dx 2 (xi+1 − x) (x − xi ) q(x) dx ,
para i = 1, 2, . . . , n − 1; y " 1
p(x) φi (x)φi−1 + q(x) (φi (x)φi−1 (x)) dx aii−1 = 0
"
xi
= xi−1
"
−
xi
+ xi−1
1 Δxi−1 1 Δxi−1
2 p(x) dx 2 (xi − x) (x − xi−1 ) q(x) dx ,
para i = 2, . . . , n. Los elementos del vector b son, " 1 bi = f (x)φi (x) dx 0 " xi+1 " xi 1 1 (x − xi−1 ) f (x) dx + (xi+1 − x) f (x) dx . = Δxi xi−1 Δxi−1 xi Para implementar el método se deben evaluar las integrales " xi+1 1 Q1i = (xi+1 − x) (x − xi ) q(x) dx , i = 1, 2, . . . n − 1, Δxi xi " xi 1 2 Q2i = (x − xi−1 ) q(x) dx , i = 1, 2, . . . n, Δxi−1 xi−1 " xi+1 1 2 Q3i = (xi+1 − x) q(x) dx , i = 1, 2, . . . n, Δxi xi " xi+1 1 Q4i = p(x) dx , i = 1, 2, . . . n + 1, Δxi−1 xi " xi 1 Q5i = (x − xi−1 ) f (x) dx , i = 1, 2, . . . n, Δxi−1 xi−1 " xi+1 1 (xi+1 − x) f (x) dx , i = 1, 2, . . . n. Q6i = Δxi xi 162
6.2 Condiciones de contorno no nulas
Una vez calculadas las integrales se tiene que aii aii+1
=
Q4i + Q4i+1 + Q2i + Q3i ,
=
−Q4i + Q1i ,
aii−1
=
−Q4i + Q1i−1
y bi = Q5i + Q6i .
6.2
Condiciones de contorno no nulas
Para ver cómo se resolvería un problema con condiciones de contorno no homogéneas, consideremos el siguiente problema −
∂2u =f , a
con las condiciones
(6.3)
∂u (b) = tb . ∂x
u(a) = ua ,
Para resolver este problema se buscan soluciones de la forma u(x) = φ0 (x) +
n
ck φk (x) .
(6.4)
k=1
φ0 (x) ha de satisfacer φ0 (a) = ua y las otras funciones φk (a) = 0. Introduciendo la expresión (6.4) en el problema (6.3), se obtiene n
−
∂ 2 φ0 ∂ 2 φk − =f . ∂x2 ∂x2 k=1
Para este problema se define el residuo n
R=−
∂ 2 φ0 ∂ 2 φk − −f , ∂x2 ∂x2 k=1
y las constantes ck se pueden obtener imponiendo que se satisfagan las ecuaciones "
b a
R wj dx = 0 , j = 1, . . . , n,
163
Capítulo 6. Introducción a los elementos finitos
para unas funciones arbitrarias wj . Este método se llama método de los residuos ponderados. Si se eligen wj = φj , j = 1, . . . , n, se tiene un método de Galerkin. En este último caso, se tienen las ecuaciones " −
b
a
∂ 2 φ0 φj dx − ∂x2
"
n b a k=1
ck
∂ 2 φk φj dx = ∂x2
"
b
a
f φj dx .
Usando la integración por partes, se tiene 'b & ∂φ0 ∂φ0 ∂φj dx − φj ∂x a ∂x ∂x a & 'b " b " b n ∂φk ∂φk ∂φj dx − φj + f φj dx . ck = ∂x a ∂x ∂x a a "
b
k=1
Como las funciones φj hemos supuesto que se anulan en x = a, se puede escribir "
n
∂φ0 ∂φj dx + ck ∂x ∂x
b a
" = a
k=1
"
b a
∂φk ∂φj dx ∂x ∂x n
b
f φj dx +
∂φk ∂φ0 (b)φj (b) + (b)φj (b)ck . ∂x ∂x k=1
Usando la condición de contorno en x = b, se llega a que n k=1
" ck
b a
"
∂φk ∂φj dx ∂x ∂x
"
b
= a
f φj dx + tb φj (b) −
b a
∂φ0 ∂φj dx , ∂x ∂x
que se expresa como un sistema de ecuaciones de la forma Sc = b , con las matrices " Sjk =
a b
" bj =
164
b
a
∂φj ∂φk dx , ∂x ∂x
f φj dx + tb φj (b) −
"
b a
∂φ0 ∂φj dx . ∂x ∂x
6.3 Introducción a los elementos finitos bidimensionales
6.3
Introducción a los elementos finitos bidimensionales
El método de los elementos finitos es similar al método de Rayleigh-Ritz. Para mostrar cómo funciona este método consideremos el problema bidimensional ∂ ∂u ∂ ∂u p(x, y) + q(x, y) + r(x, y)u = f (x, y) , (6.5) ∂x ∂x ∂y ∂y con (x, y) ∈ D, siendo D una región plana cuya frontera es S = S1 ∪ S2 . Sobre S1 se impone una condición de contorno de la forma u(x, y) = g(x, y) , (x, y) ∈ S1 . Sobre S2 se impone una condición de contorno de la forma p(x, y)
∂u ∂u n1 + q(x, y) n2 + g1 (x, y)u = g2 (x, y) , (x, y) ∈ S2 , ∂x ∂y
donde el vector n1 = (n1 , n2 ) es un vector que en cada punto es normal a la curva S2 . Supongamos que p, q, r y f son funciones continuas en D ∪ S, que p y q admiten derivadas parciales continuas y que g1 y g2 son continuas en S2 . Supongamos además que p(x, y) > 0, q(x, y) > 0, r(x, y) ≤ 0 y que g1 (x, y) ≥ 0. Entonces la solución del problema (6.5) es la única función que minimiza la integral I(w) = 2 2 "" ∂w ∂w 1 2 p(x, y) + q(x, y) − r(x, y)w + f (x, y)w dx dy 2 ∂x ∂y D " 1 2 + −g2 (x, y)w + g1 (x, y)w dS , (6.6) 2 S2 sobre todas las funciones w = w(x, y) que satisfacen w(x, y) = g(x, y) para (x, y) ∈ S1 . Para obtener el mínimo de (6.6), el primer paso que se sigue es dividir la región D en un número finito de secciones o elementos regulares, que pueden ser rectángulos o triángulos (véase la Figura 6.1) Para las funciones base que se utilizan para aproximar la función que minimiza (6.6) se suelen utilizar polinomios a trozos. Supondremos que la región D se ha dividido en elementos triangulares, cuyos vértices se llaman nodos. El método busca una aproximación de la forma φ(x, y) =
m i=1
γi φi (x, y) , 165
Capítulo 6. Introducción a los elementos finitos
S
D Figura 6.1: Mallado de la región D.
donde φi son polinomios lineales a trozos y γi son constantes. Algunas de las constantes, γn+1 , γn+2 , . . . , γm se usan para garantizar que se cumpla la condición de contorno φ(x, y) = g(x, y) , (x, y) ∈ S1 , mientras que las otras constantes γ1 , γ2 , . . . , γn se utilizan para minimizar la integral m γi φi (x, y) = I i=1
⎛ ⎛ m 2 2 m ∂φi ∂φi 1 ⎝ ⎝p(x, y) γi + q(x, y) γi 2 ∂x ∂y D i=1 i=1 ⎞ ⎞ m 2 m −r(x, y) γi φi ⎠ + f (x, y) γi φi ⎠ dx dy
""
i=1
i=1
2 ⎞ m 1 ⎝−g2 (x, y) + γi φi + g1 (x, y) γi φi ⎠ dS . 2 S2 i=1 i=1 "
⎛
m
Para obtener el mínimo se plantean las ecuaciones normales ∂I = 0 , j = 1, 2, . . . , n . ∂γj Estas ecuaciones de expresan como el sistema de ecuaciones lineales Ac = b , 166
(6.7)
6.3 Introducción a los elementos finitos bidimensionales T
donde c = (γ1 , γ2 , . . . , γn ) , A es una matriz cuyos elementos son "" ∂φi ∂φj ∂φi ∂φj + q(x, y) p(x, y) aij = ∂x ∂x ∂y ∂y D " −r(x, y)φi φj ) dx dy + g1 (x, y)φi φj dS , S2
y el vector b tiene los elementos "" " bi = f (x, y)φi dx dy + D
S2
m
g2 (x, y)φi dS −
aik γk .
k=n+1
La elección de las funciones básicas es importante para obtener una matriz con buenas propiedades a la hora de resolver el sistema (6.7). Veremos una posibilidad basada el polinomios lineales a trozos definidos sobre triángulos. Comenzamos dividiendo la región D en triángulos Ti , y se escoge una ordenación de los triángulos de la malla que se genera y otra ordenación para los vértices o nodos, E1 , E2 , . . . , Em . Un ejemplo típico se muestra en la Figura 6.2.
E2
E7 T2 T1
T5
E3
T3
E1 T6
T4
E6
E4
E5 Figura 6.2: Ordenación del mallado.
Si E1 , E2 , . . . , Em son los nodos de la malla, a cada nodo Ek se le asocia una función φk , que es lineal en cada triángulo y vale 1 en Ek y 0 en los demás nodos. Para construir estas funciones φk , se procede como sigue. Se fija un triángulo Ti y se elige una ordenación para sus vértices, como se muestra en la Figura 6.3. y se construyen los polinomios lineales (i)
=
a1 x + b1 y + c1 ,
(i)
=
a2 x + b2 y + c2 ,
(i)
=
a3 x + b3 y + c3 ,
N1 (x, y) N2 (x, y) N3 (x, y)
(i)
(i)
(i)
(i)
(i)
(i)
(i)
(i)
(i)
167
Capítulo 6. Introducción a los elementos finitos
(x3 , y3 )
Ti
(x1 , y1 )
(x2 , y2 )
Figura 6.3: Ordenación de los vértices en un triángulo.
de forma que se satisfaga ⎛
x1 ⎝ x2 x3 ⎛
x1 ⎝ x2 x3 y
⎛
x1 ⎝ x2 x3
y1 y2 y3
⎞ ⎛ (i) ⎞ ⎛ ⎞ a1 1 1 ⎜ (i) ⎟ ⎠ 1 ⎝ b1 ⎠ = ⎝ 0 ⎠ , (i) 1 0 c1
y1 y2 y3
⎞ ⎛ (i) ⎞ ⎛ ⎞ a 0 1 ⎜ 2 ⎟ ⎝ ⎠ 1 1 ⎠ ⎝ b(i) = , ⎠ 2 (i) 1 0 c2
y1 y2 y3
⎞ ⎛ (i) ⎞ ⎛ ⎞ a 0 1 ⎜ 3 ⎟ ⎝ ⎠ 1 ⎠ ⎝ b(i) 0 = . ⎠ 3 (i) 1 1 c3
A continuación, se ve qué nodos están en la frontera S1 . Si estos nodos son, por ejemplo, En+1 , . . . , Em , se determinan los valores de γn+1 , . . . , γm , de forma que en estos nodos se satisfaga la condición de contorno φ(x, y) = g(x, y) . Una vez se han determinado estas constantes, hay que evaluar las integrales dobles y las integrales curvilíneas. Las integrales dobles de los elementos de matriz aij se descomponen de la forma "" "" aij = G (φi , φj ) dx dy = G (φi , φj ) dx dy , D
l∈I
Tl
donde I es el conjunto de triángulos donde φi y φj toman valores no nulos. 168
6.3 Introducción a los elementos finitos bidimensionales
Para evaluar las integrales dobles sobre un triángulo se suele usar una fórmula de cuadratura que aproxima el valor de estas integrales. Una posibilidad es la siguiente. Sean (x4 , y4 ), (x5 , y5 ), (x6 , y6 ) los puntos medios del triángulo Ti y (x7 , y7 ) el baricentro, o sea, x4
=
x5
=
x6
=
x7
=
1 1 (x1 + x2 ) , y4 = (y1 + y2 ) , 2 2 1 1 (x1 + x3 ) , y5 = (y1 + y3 ) , 2 2 1 1 (x2 + x3 ) , y6 = (y2 + y3 ) , 2 2 1 1 (x1 + x2 + x3 ) , y7 = (y1 + y2 + y3 ) . 2 2
Entonces se puede aproximar "" 1 1 |Δ| F (x1 , y1 ) + F (x2 , y2 ) + F (x3 , y3 ) F (x, y) dx dy ≈ 2 20 T 2 9 + (F (x4 , y4 ) + F (x5 , y5 ) + F (x6 , y6 )) + F (x7 , y7 ) , 15 20 donde
1 2
|Δ| es el área del triángulo, que se puede calcular como ⎛ ⎞ 1 x1 y1 1 1 AT = |Δ| = det ⎝ 1 x2 y2 ⎠ . 2 2 1 x 3 y3
Por último, se han de calcular las integrales curvilíneas sobre los segmentos que unen los nodos situados en S2 . Para ello, por ejemplo, se usa una parametrización del segmento l1 , que une (x1 , y1 ) con (x2 , y2 ), de la forma x = x(t), y = y(t) con x (t1 ) = x1 , y (t1 ) = y1 , x (t2 ) = x2 e y (t2 ) = y2 , y se usa la expresión "
"
t2
H(x, y) dS = l1
H (x(t), y(t))
2 2 (x (t)) + (y (t)) dt .
t1
Con estos elementos ya es posible calcular los elementos de matriz aij y los elementos bi del término independiente del sistema (6.7), cuya solución permite aproximar la solución del problema inicial. Hay otras posibilidades para la construcción de las funciones φk , que dan lugar a distintos métodos de elementos finitos para resolver el problema (6.5).
169
Capítulo 6. Introducción a los elementos finitos
6.4
Ejercicios resueltos
Ejercicio 6.1 Plantear el sistema de ecuaciones que hay que resolver si se utiliza el método de Rayleigh-Ritz lineal para discretizar el problema −
d2 y = 4x2 − 8x + 1 , 0 < x < 1; y(0) = y(1) = 0 , dx2
si se divide el intervalo [0, 1] en 4 subintervalos. Solución: Se utilizan las funciones
⎧ 0 ⎪ ⎪ ⎪ ⎨ 1 (x − x ) i−1 φi = Δx 1 ⎪ (x − x) i+1 ⎪ ⎪ ⎩ Δx 0
y se plantea el funcional " I(u) =
1
0 < x ≤ xi−1 xi−1 ≤ x ≤ xi xi ≤ x ≤ xi+1 x ≥ xi+1
u (x)2 − 2 4x2 − 8x + 1 u(x) dx ,
0
con u(x) =
3
ci φi (x) ,
i=1
con lo que se tiene ⎛ 2 3 ⎞ " 1 3
⎝ ci φi (x) − 2 4x2 − 8x + 1 ci φi (x) ⎠ dx . I(u) = 0
i=1
Derivando ∂I = ∂cj
"
1
2
0
ci φi (x) φj − 2 4x2 − 8x + 1 φj (x)
dx = 0 .
i=1
Se tiene: para j = 1 " 1 3 0
3
i=1
ci φi (x)
φ1
− 4x2 − 8x + 1 φ1 (x)
φ2
− 4x2 − 8x + 1 φ2 (x)
dx = 0 .
i=1
Para j = 2 "
1 0
170
3 i=1
ci φi (x)
dx = 0 .
6.4 Ejercicios resueltos
Para j = 3 "
1 0
3
ci φi (x)
− 4x2 − 8x + 1 φ3 (x)
dx = 0 .
i=1
De donde se tiene el sistema ⎛ 1 φ φ dx 0 1 1 ⎝ 1 φ1 φ2 dx 0 1 φ1 φ3 dx 0
φ3
1 φ φ dx 01 1 2 φ φ dx 0 1 2 2 φ2 φ3 dx 0
1 ⎞ ⎞⎛ ⎞ ⎛ 1 2 φ φ dx 4x − 8x + 1 φ1 dx c1
01 1 3 01 2 φ φ dx ⎠ ⎝ c2 ⎠ = ⎝ 0 4x − 8x + 1 φ2 dx ⎠
01 2 3 1 2 c3 φ3 φ3 dx 4x − 8x + 1 φ3 dx 0 0
Hay que calcular los distintos elementos de matriz. Para ello, se que ⎧ ⎧ 0 ⎪ 1 ⎪ ⎪ Δx x ⎪ 0 < x ≤ x1 ⎨ ⎨ 1 (x − x ) 1 1 φ1 (x) = Δx (x2 − x) x1 < x ≤ x2 , φ2 (x) = Δx 1 ⎪ ⎪ (x − x) 3 ⎩ ⎪ ⎪ 0 x ≥ x2 ⎩ Δx 0 y
⎧ ⎪ ⎨0 φ3 (x) =
1 Δx ⎪ ⎩ 1 Δx
(x − x2 ) (x4 − x)
Y las derivadas ⎧ 1 ⎪ ⎨ Δx 1 φ1 (x) = − Δx ⎪ ⎩ 0
0 < x < x1 x1 < x < x2 , φ2 (x) = Δx1 ⎪ − ⎪ ⎪ x > x2 ⎩ Δx 0
φ3 (x) =
⎧ ⎪ ⎨0
1 ⎪ Δx
⎩
1 − Δx
0 ≤ x ≤ x1 x 1 ≤ x ≤ x2 , x 2 < x ≤ x3 x ≥ x3
0 ≤ x ≤ x2 x2 ≤ x ≤ x3 , x3 < x ≤ x4 ⎧ ⎪ ⎪0 ⎪ ⎨ 1
y
tiene en cuenta
0 ≤ x ≤ x1 x1 < x < x 2 , x2 < x < x 3 x ≥ x3
0 < x < x2 x2 < x < x 3 . x3 < x < x 4
Calculando las integrales, se tiene " 1 2
4x − 8x + 1 φ1 (x) dx 0 " x2 " x1
x 2 (x − x1 ) 2 4x − 8x + 1 dx + 4x − 8x + 1 φ1 (x) dx = Δx Δx 0 x1
1
1 4 1 = x21 − 4x31 + x41 − x1 x2 3 − 12x2 + 4x22 + x22 3 − 16x2 + 6x22 , Δx 3 3 6 171
Capítulo 6. Introducción a los elementos finitos
"
4x2 − 8x + 1 φ2 (x) dx
1
" x3
(x − x1 ) 2 (x3 − x) 2 4x − 8x + 1 dx + 4x − 8x + 1 φ1 (x) dx Δx Δx x1 x2
1 = 3x21 − 8x31 + 2x41 − 2x1 x2 3 − 12x2 + 4x22 − 6x2 x3 6Δx
−8x32 (4 + x3 ) + 6x22 (1 + 4x3 ) + x23 3 − 8x3 + 2x23 , 0
"
x2
=
"
1 0
"
4x2 − 8x + 1 φ3 (x) dx
" 1
(x − x2 ) 2 (1 − x) 2 4x − 8x + 1 dx + 4x − 8x + 1 φ1 (x) dx Δx Δx x2 x3 1 = −3 + 3x22 − 8x32 + 2x42 − 6x3 + 30x23 6Δx
−40x33 + 12x43 − 2x2 x3 3 − 12x3 + 4x23 . x3
=
"
1 0
"
1 0
φ1 φ2
φ1 φ1 dx =
1 , dx = − Δx
"
1
0
φ2 φ2 dx =
"
1 0
φ1 φ3
"
1
0
φ3 φ3 dx = "
1
dx = 0, 0
2 , Δx
φ2 φ3 dx = −
1 . Δx
6.5
Ejercicios propuestos
1. Plantea el sistema de ecuaciones que se ha de resolver si se utiliza el método de Rayleigh-Ritz lineal para discretizar el problema −
d2 y = 4x2 − 8x + 1 , 0 < x < 1 , dx2
con las condiciones de contorno y(0) = y(1) = 0. 2. Dado el problema de contorno dy d ex + ex y = x, 0 < x < 1, y(0) = y(1) = 0. − dx dx 172
6.5 Ejercicios propuestos
Obtén el sistema de ecuaciones que hay que resolver si se quiere aplicar el método de Rayleigh-Ritz dividiendo el intervalo [0, 1] en 4 subintervalos iguales. 3. Obtén el método de Rayleigh-Ritz para el problema
− (a(x)u (x)) = f (x) , 0 < x < 1 , con las condiciones u(0) = 0, u(1) = 0.
173
Parte II
Ejercicios con Matlab
Capítulo 7
Resolución de sistemas de ecuaciones lineales con Matlab Vamos a aprender a resolver sistemas de ecuaciones lineales con Matlab utilizando tanto las distintas instrucciones que dispone este programa como creando nuestras propias funciones.
7.1
Introducción
Vamos a centrarnos en la resolución de sistemas de la forma Ax = b, siendo A una matriz cuadrada n × n, y x y b vectores con n componentes. Como se ha visto a lo largo del capítulo 2, hay dos tipos de métodos para obtener una solución numérica de un sistema de ecuaciones, los métodos directos y los métodos iterativos. Los métodos directos son, generalmente, variantes del método de Gauss y para utilizarlos es necesario conocer explícitamente los elementos de la matriz. Los métodos iterativos obtienen una aproximación numérica tras un número finito de iteraciones. Para utilizar estos métodos es suficiente conocer un método para realizar el producto de la matriz de coeficientes por un vector.
177
Capítulo 7. Resolución de sistemas de ecuaciones lineales con Matlab
7.2
Métodos directos
Los métodos directos para la resolución de ecuaciones están implementados en el núcleo de Matlab, de forma que resulten lo más eficientes posibles. La forma más usual de resolver un sistema de ecuaciones en Matlab es haciendo uso del operador \ como mostramos a continuación. Así, por ejemplo, para resolver el sistema x1 − x2 + 3x4 = 0 2x1 + x2 − x3 + x4 = 1 (7.1) 3x1 − x2 − x3 + 2x4 = −3 −x1 + 2x2 + 3x3 − x4 = 4 se introducen las instrucciones A = [ 1, -1, 0, 3 ; 2, 1, -1, 1; 3, -1, -1, 2; -1, 2, 3,-1]; b=[0;1;-3;4]; x=A\b obteniendo x = -1.0000 2.0000 -0.0000 1.0000 por tanto, la solución del sistema (7.1) es x = (−1, 2, 0, 1)T . El operador \ tiene implementados distintos algoritmos de forma que, cuando A es cuadrada: • Si A es una matriz triangular usa el método de sustitución regresiva o progresiva para resolver el sistema. • Si A es simétrica trata de calcular una descomposición de Cholesky de A. • Si A no es simétrica o la descomposición de Cholesky falla, se usa un algoritmo de Gauss con pivotación parcial. • Si A es singular da un error. 178
7.2 Métodos directos
7.2.1
Errores y número de condición
Hay sistemas en los que un pequeño cambio en los coeficientes produce un gran cambio en la solución. Estos sistemas se llaman mal condicionados. Por ejemplo, si consideramos el sistema
x x
+ +
y 1.0001y
= =
2 2.0001
Para obtener la solución con Matlab escribimos A=[1,1;1,1.0001]; b=[2;2.0001]; A\b y obtenemos ans = 1.0000 1.0000 es decir, su solución exacta es x = 1, y = 1. Si cambiamos un poco el término independiente, por ejemplo x + y = 2 x + 1.0001y = 2.0002 Resolvemos el nuevo sistema con Matlab escribiendo A=[1,1;1,1.0001]; b=[2;2.0002]; A\b que nos proporciona la solución ans = -0.0000 2.0000 179
Capítulo 7. Resolución de sistemas de ecuaciones lineales con Matlab
con lo que la solución cambia a x = 0, y = 2. Esto indica que el sistema es muy sensible a errores de redondeo. Esta sensibilidad la podemos medir con el número de condición de la matriz de coeficientes A. El número de condición de una matriz se puede calcular con la función de Matlab cond( ). Los resultados serán valores mayores o iguales a 1. Si el número de condición proporcionado es cercano a 1, la matriz estará bien condicionada, y si se aleja estará mal condicionada. En nuestro ejemplo cond(A) proporciona ans = 4.0002e+004 Esta respuesta nos dice que pequeños errores o cambios en el sistema pueden producir grandes errores en la solución. Mientras que la matriz A=[1,2;3,-1]; cond(A) ans = 1.4561 está bien condicionada. Comprobémoslo resolviendo los sistemas cuya matriz de coeficientes es A y el vector de términos independientes b y b1, respectivamente format long b=[3;1]; b1=[3.0001;1]; A\b A\b1 ans = 0.714285714285714 1.142857142857143 180
7.2 Métodos directos
ans = 0.714300000000000 1.142900000000000 Observamos que un pequeño cambio en los datos nos ha proporcionado prácticamente la misma solución.
7.2.2
Factorización LU
Matlab nos proporciona la factorización LU de una matriz mediante la función lu( ). Si escribimos format short A=magic(3); [L,U]=lu(A) obtenemos L = 1.0000 0.3750 0.5000
0 0.5441 1.0000
0 1.0000 0
8.0000 0 0
1.0000 8.5000 0
6.0000 -1.0000 5.2941
U =
observamos que la matriz L obtenida no es triangular inferior. Esto significa que Matlab ha aplicado pivotación parcial en la obtención de las matrices y en la matriz L está incluida dicha permutación. Se cumple LU = A, como podemos comprobar L*U A ans = 181
Capítulo 7. Resolución de sistemas de ecuaciones lineales con Matlab
8 3 4
1 5 9
6 7 2
8 3 4
1 5 9
6 7 2
A =
Pero esta descomposición no nos permite resolver el sistema mediante dos sistemas triangulares. Si hay permutaciones de filas, y queremos L y U matrices triangular inferior y superior, respectivamente, escribiremos [L,U,P]=lu(A) L = 1.0000 0.5000 0.3750
0 1.0000 0.5441
0 0 1.0000
8.0000 0 0
1.0000 8.5000 0
6.0000 -1.0000 5.2941
U =
P = 1 0 0
0 0 1
0 1 0
en este caso se cumple P A = LU , como podemos comprobar P*A L*U 182
7.2 Métodos directos
ans = 8 4 3
1 9 5
6 2 7
1 9 5
6 2 7
ans = 8 4 3
Una vez tenemos la descomposición, resolvemos por sustitución progresiva el sistema Ly = P b y la solución del sistema original la obtenemos resolviendo por sustitución regresiva el sistema Ux = y Podemos resolver el sistema por sustitución regresiva definiendo una función con Matlab, por ejemplo, susreg.m, function [x]=susreg(U,b) n=length(b); x=zeros(n,1); for k=n:-1:1 x(k)=b(k)/U(k,k); for i=1:k-1 b(i) = b(i)-x(k)*U(i,k); end end Un ejemplo: a=[1,2;0,1] b=[1;1] susreg(a,b) a = 1 0
2 1 183
Capítulo 7. Resolución de sistemas de ecuaciones lineales con Matlab
b = 1 1
ans = -1 1
De forma análoga se puede definir una función, que podemos llamar susprog.m para resolver por sustitución progresiva un sistema triangular inferior. Se propone como ejercicio.
7.2.3
Factorización de Cholesky
Cuando la matriz A es simétrica y definida positiva admite una factorización de Cholesky, esto es, una factorización A = LLT = U T U . La función de Matlab chol( ) realiza esta descomposición en caso de ser posible y nos proporciona una matriz triangular superior. Así, si escribimos A=pascal(7); U=chol(A) calculamos de descomposición de Cholesky de una matriz de Pascal de dimensión 7, que es simétrica y definida positiva, obteniendo U = 1 0 0 0 0 0 0 184
1 1 0 0 0 0 0
1 2 1 0 0 0 0
1 3 3 1 0 0 0
1 4 6 4 1 0 0
1 5 10 10 5 1 0
1 6 15 20 15 6 1
7.2 Métodos directos
Comprobamos la descomposición, A A = 1 1 1 1 1 1 1
1 2 3 4 5 6 7
1 3 6 10 15 21 28
1 4 10 20 35 56 84
1 5 15 35 70 126 210
1 6 21 56 126 252 462
1 7 28 84 210 462 924
1 3 6 10 15 21 28
1 4 10 20 35 56 84
1 5 15 35 70 126 210
1 6 21 56 126 252 462
1 7 28 84 210 462 924
transpose(U)*U ans = 1 1 1 1 1 1 1
1 2 3 4 5 6 7
como es un caso particular de descomposición LU , procederíamos a resolver primero el sistema triangular inferior por sustitución progresiva y finalmente el triangular superior por sustitución regresiva. En caso de no poder realizar la descomposición de Cholesky, Matlab nos proporciona un aviso A=[1,2;-1,2] chol(A) A = 1 -1
2 2
??? Error using ==> chol Matrix must be positive definite. 185
Capítulo 7. Resolución de sistemas de ecuaciones lineales con Matlab
7.3
Métodos iterativos
Dado el sistema Ax = b consideramos la siguiente descomposición de la matriz de coeficientes A=D−E−F donde • D la diagonal de A. • −E la parte estrictamente triangular inferior de A. • −F la parte estrictamente triangular superior de A. Además, consideraremos que los elementos de la diagonal de D son todos no nulos.
7.3.1
Método de Jacobi
El método de Jacobi en forma matricial se escribe como Dxk = (E + F )xk−1 + b,
k = 1, 2, . . .
Una posible implementación en Matlab del método de Jacobi es la siguiente función jacobi.m function [x]=jacobi(A,b) % esta funcion implementa el metodo de tol=1.e-5; itmax=1000; [n,n]=size(A); x0=zeros(n,1); it=0; error=1000.0; D=diag(diag(A)); D1=inv(D); while it<=itmax & error >tol it=it+1; x=D1*(D-A)*x0+D1*b verr=x-x0; error=norm(verr)/norm(x); 186
Jacobi basico
7.3 Métodos iterativos
x0=x; end x=x0; disp(’el numero de iteraciones es’) disp(it) disp(’el error es’) disp(error) Por ejemplo, si escribimos a=[4,1,0;1,4,1;0,1,4]; b=[-3;10;1]; jacobi(a,b) obtenemos el numero de iteraciones es 12 el error es 8.0334e-06
ans = -1.5000 3.0000 -0.5000
7.3.2
Método de Gauss-Seidel
Un método de Gauss-Seidel en forma matricial es (D − E)xk = F xk−1 + b Teniendo en cuenta que la instrucción de Matlab tril(A) proporciona la parte triangular inferior de la matriz A, y triu(A) la parte triangular superior, una posible implementación del método de Gauss-Seidel es: function [x]=gaussseidel(matriz,vector) % esta rutina implementa el metodo de Gauss-Seidel basico 187
Capítulo 7. Resolución de sistemas de ecuaciones lineales con Matlab
tol=1.e-5; itmax=1000; [n,n]=size(matriz); x0=zeros(n,1); it=0; error=1000.0; % calculo de las matrices D=diag(diag(matriz)); E=-(tril(matriz)-D); F=-(triu(matriz)-D); while it<=itmax & error >tol it=it+1; x=(D-E)\(F*x0+vector); error=norm(x-x0)/ norm(x); x0=x; end disp(’el numero de iteraciones es’) disp(it) disp(’el error es’) disp(error) Para el ejemplo anterior, escribiendo a=[4,1,0;1,4,1;0,1,4]; b=[-3;10;1]; gaussseidel(a,b) obtenemos el numero de iteraciones es 7 el error es 5.5366e-06
ans = -1.5000 3.0000 -0.5000 188
7.3 Métodos iterativos
Observamos que el método de Gauss-Seidel ha convergido con menos iteraciones que el método de Jacobi.
7.3.3
Método SOR
Un método SOR en forma matricial es (D − ωE)xk = (ωF + (1 − ω)D) xk−1 + ωb con 0 < ω < 2. Una posible implementación en Matlab de este método es: function [x]=sor1(matriz,vector,w); [n,n]=size(matriz); tol=1.e-5; itmax=300; x0=zeros(n,1); it=0; error=1000.0; % calculo de las matrices D=diag(diag(matriz)); E=-(tril(matriz)-D); F=-(triu(matriz)-D); while it<=itmax & error >tol it=it+1; x=(D-w*E)\(w*F*x0+(1-w)*D*x0+w*vector); error=norm(x-x0)/ norm(x); x0=x; end disp(’el numero de iteraciones es’) disp(it) disp(’el error es’) disp(error) Para el ejemplo anterior, escribiendo a=[4,1,0;1,4,1;0,1,4]; b=[-3;10;1]; sor1(a,b,1.1) 189
Capítulo 7. Resolución de sistemas de ecuaciones lineales con Matlab
obtenemos el numero de iteraciones es 6 el error es 8.6727e-06
ans = -1.5000 3.0000 -0.5000 Si cambiamos el valor de w, por ejemplo, hacemos sor1(a,b,1.7) el número de iteraciones necesario para obtener la solución es 35. Matlab dispone de funciones implementadas para la resolución de sistemas de ecuaciones lineales mediante métodos iterativos como bicg, bicgstab, cgs, gmres, lsqr, pcg, etc., pero se basan en métodos más complejos que los que hemos estudiado en la teoría y sobrepasan las pretensiones del curso.
7.4
Ejercicios con Matlab
1. Adapta la función que hemos construido, susreg.m para que resuelva un sistema por sustitución progresiva. Llama susprog.m a la función construida. 2. Considera el siguiente sistema: ⎛ ⎜ ⎜ ⎜ ⎜ ⎝
4 −1 0 0 0 −1 4 −1 0 0 0 −1 4 −1 0 0 0 −1 4 −1 0 0 0 −1 4
⎞⎛ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎠⎝
x1 x2 x3 x4 x5
⎞
⎛
⎟ ⎜ ⎟ ⎜ ⎟=⎜ ⎟ ⎜ ⎠ ⎝
1 0 0 0 0
⎞ ⎟ ⎟ ⎟ . ⎟ ⎠
Resuélvelo utilizando la descomposición LU y la de Cholesky de la matriz del sistema. Nota: tienes que utilizar las funciones susreg.m y susprog.m para resolver los sistemas triangulares. 190
7.4 Ejercicios con Matlab
3. Implementa el algoritmo SSOR simétrico, que en forma matricial es: (D − ωE)xk−1/2 = (ωF + (1 − ω)D)xk−1 + ωb, (D − ωF )xk = (ωE + (1 − ω)D)xk−1/2 + ωb. Resuelve el ejercicio 2 con el método SSOR con distintos valores 0 < ω < 2. 4. Una viga horizontal flexible empotrada en un extremo A y libre en el extremo B se considera que tiene cuatro grados de libertad traslacional u1 , . . . , u4 , donde ui se localiza a i/5 de la distancia de A a B. Si se aplica una carga T unitaria en u3 , el vector u = (u1 , u2 , u3 , u4 ) , satisface el sistema Ku = r , donde la matriz de rigidez K y el vector ⎛ 5 −4 1 0 ⎜ −4 6 −4 1 ⎜ K=⎝ 1 −4 6 −4 0 1 −4 5
de cargas r, vienen dadas por ⎞ ⎛ ⎞ 0 ⎟ ⎟ ⎜ ⎟ , r=⎜ 0 ⎟ , ⎠ ⎝ EI ⎠ 0
la constante EI depende del material de la viga y de su geometría. Calcula u cuando EI = 1. 5. La distribución de temperatura en el estado estacionario de una placa plana se puede aproximar en 9 puntos internos aplicando la ecuación de Laplace discretizada en cada punto. Si se mantienen los lados de una placa cuadrada a temperaturas constantes de 0◦ C y 100◦ C, las temperaturas en los 9 puntos se pueden obtener como la solución del siguiente sistema −4T1 + T2 + T4
=
−100
T1 − 4T2 + T3 + T5
=
−100
T2 − 4T3 + T6
=
−200
T1 − 4T4 + T5 + T7 T2 + T4 − 4T5 + T6 + T8 T3 + T5 − 4T6 + T9
= =
0 0
=
−100
T4 − 4T7 + T8 T5 + T7 − 4T8 + T9
=
0
=
0
T6 + T8 − 4T9
=
−100
Obtén la temperatura en los distintos puntos de la placa y haz una gráfica de la temperatura en la placa.
191
Capítulo 7. Resolución de sistemas de ecuaciones lineales con Matlab
6. Construye el sistema de ecuaciones que han de cumplir los coeficientes de un polinomio de tercer grado y = c3 x3 + c2 x2 + c1 x + c0 , para que pase por los puntos (12, 8), (3, 27), (6, 64), (5, 125). Utiliza la función cond( ) para obtener el número de condición de la matriz del sistema. Obtén la solución del sistema y dibuja los puntos y el polinomio obtenido.
192
Capítulo 8
Interpolación y aproximación de funciones con Matlab Vamos a ver cómo utilizar las distintas instrucciones que dispone Matlab para la interpolación resolviendo algunos ejemplos. También crearemos nuestra propia función para el cálculo de diferencias divididas. Consideremos un conjunto de pares de números reales (x0 , f0 ), (x1 , f1 ), . . . (xn , fn ), que frecuentemente vendrán expresados en una tabla de valores, x0 f0
x1 f1
··· ···
xn fn
La interpolación trata de resolver uno o ambos de los siguientes problemas: • Encontrar una función f (x) tal que f (xi ) = fi ,
i = 0, 1, . . . , n.
• Calcular f (˜ x) para un punto x ˜ = xi , i = 0, 1, . . . , n. Los tipos de interpolación que trabajaremos son la polinómica e interpolación por splines. Por ello, empezamos viendo algunas consideraciones sobre polinomios en Matlab.
193
Capítulo 8. Interpolación y aproximación de funciones con Matlab
8.1
Polinomios en Matlab
Un polinomio de grado n se representa en Matlab mediante un vector de longitud n + 1 cuyos elementos son los coeficientes del polinomio ordenados en potencias de mayor a menor grado. Por ejemplo, el polinomio p(x) = 4x4 − 20x2 + 2x se representa en Matlab por el vector p=[4,0,-20,2,0]; Para operar con polinomios en Matlab hay que tener en cuenta que estos son vectores. Así, para sumar o restar polinomios tendremos que representarlos como vectores de la misma longitud, rellenando con los ceros necesarios por la izquierda cuando haga falta. Si consideramos el polinomio q(x) = 3x3 − x , y queremos calcular p(x) + q(x), escribimos q=[0,3,0,-1,0]; p+q obteniendo el resultado ans = 4
3
-20
1
0
que corresponde al polinomio 4x4 + 3x3 − 20x2 + x. Si definimos q1=[3,0,-1,0]; p+q1 obtenemos el resultado ans = Error using ==> plus Matrix dimensions must agree. 194
8.1 Polinomios en Matlab
Matlab nos advierte que los vectores utilizados no corresponden a polinomios del mismo grado. El producto de polinomios se realiza con la instrucción conv( , ). Así si hacemos conv(p,q) conv(p,q1) obtenemos ans = 0 ans = 12
12
0
-64
6
20
-2
0
0
-64
6
20
-2
0
0
0
Para evaluar un polinomio en un punto usaremos el comando polyval( ). Así, por ejemplo, si queremos calcular p(2), siendo p(x) el polinomio definido anteriormente, escribimos polyval(p,2) obteniendo ans = -12 La instrucción anterior nos permite representar un polinomio en cierto intervalo, por ejemplo, x=-4:0.01:4; y=polyval(p,x); plot(x,y) obteniendo la Figura 8.1. Las raíces de un polinomio se obtienen mediante la instrucción roots( ), por ejemplo, raices=roots(p) nos da el resultado 195
Capítulo 8. Interpolación y aproximación de funciones con Matlab
800 700 600 500 400 300 200 100 0 −100 −4
−3
−2
−1
0
1
2
3
4
Figura 8.1: Gráfica del polinomio p(x) = 4x4 − 20x2 + 2x
raices = 0 -2.2845 2.1843 0.1002 que son las raíces del polinomio p(x). Podemos reconstruir un polinomio a partir de sus raíces con la instrucción poly(raices) obteniendo ans = 1.0000
-0.0000
-5.0000
0.5000
0
Y si queremos obtener el polinomio inicial, p(x), como el coeficiente que acompaña a la potencia de mayor grado es 4, escribimos 4*poly(raices) 196
8.2 Interpolación polinómica
obteniendo ans = 4.0000
8.2
-0.0000
-20.0000
2.0000
0
Interpolación polinómica
Para interpolar de forma polinómica podemos utilizar las funciones de Matlab interp1( ) y polyfit( ). Estudiaremos su utilización y distintas opciones con un ejemplo. Los valores de la función sen(x) los conocemos para múltiplos de π/3. Haciendo x=0:pi/3:3*pi; y=sin(x) se obtienen los valores y = Columns 1 through 6 0 0.8660 Columns 7 through 10 -0.0000 0.8660
0.8660
0.0000
0.8660
0.0000
-0.8660
-0.8660
Podemos representar los valores anteriores mediante la instrucción plot(x,y,’o’) obteniendo la Figura 8.2. Veamos cómo obtener aproximaciones a la función sen(x) a partir de los datos dados anteriormente. La sintaxis de la función interp1( ) es yi=interp1(x,y,xi,’metodo’) donde x es el vector de abcisas de la tabla cuyos valores están ordenados de forma creciente o decreciente, y son los correspondientes valores de las ordenadas, xi son los valores de las abcisas donde se quieren obtener las interpolaciones, yi nos proporcionan los valores interpolados para los xi y metodo es un argumento opcional que puede tomar los siguientes valores:
197
Capítulo 8. Interpolación y aproximación de funciones con Matlab
1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1
0
2
4
6
8
10
Figura 8.2: Gráfica de los valores de la función sen(x).
• nearest • linear • spline • cubic o pchip Vamos a calcular valores aproximados de la función sen(x) en las abcisas xi=pi/6:pi/3:3*pi a partir de los valores indicados anteriormente, • Usando nearest, hacemos yn=interp1(x,y,xi,’nearest’); plot(x,y,’o’,xi,yn,’*’) obteniendo la Figura 8.3. Como podemos apreciar, a cada punto x se le asigna el valor de la ordenada soporte correspondiente a la abcisa soporte más próxima. Esto se puede ver mejor si interpolamos más puntos, xi2=0:0.01:3*pi; yn2=interp1(x,y,xi2,’nearest’); plot(x,y,’o’,xi2,yn2) 198
8.2 Interpolación polinómica
1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1
0
2
4
6
8
10
Figura 8.3: Interpolación del sen(x) usando la opción nearest.
que da como resultado la Figura 8.4. • Usando linear, hacemos yl=interp1(x,y,xi,’linear’); plot(x,y,’o’,xi,yl,’*’) obteniendo la Figura 8.5. En este caso Matlab construye la poligonal que pasa por los puntos soporte. • Usando spline, hacemos ys2=interp1(x,y,xi2,’spline’); plot(x,y,’o’,xi2,ys2) y obtenemos la Figura 8.6. En este caso la función interpolante es un polinomio a trozos de grado 3. Se eligen de forma que la función sea de clase C 2 , en los puntos soporte. Además, las dos condiciones adicionales que se necesitan se obtienen exigiendo que el primer y segundo polinomio coincidan así como el penúltimo y el último. Este spline es conocido como "no-nudo". Matlab puede calcular otro tipo de splines con la instrucción spline( ), como veremos más adelante. 199
Capítulo 8. Interpolación y aproximación de funciones con Matlab
1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1
0
2
4
6
8
10
Figura 8.4: Interpolación del sen(x) usando la opción nearest con más puntos.
1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1
0
2
4
6
8
10
Figura 8.5: Interpolación del sen(x) usando la opción linear.
200
8.2 Interpolación polinómica
1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1
0
2
4
6
8
10
Figura 8.6: Interpolación del sen(x) usando la opción spline.
• Usando cubic o pchip, se usan las instrucciones yc2=interp1(x,y,xi2,’cubic’); plot(x,y,’o’,xi2,yc2) obteniendo la Figura 8.7. Podemos comprobar que se obtiene el mismo resultado con el método pchip. Si no definimos el método a utilizar se usa la opción linear. Matlab dispone de la orden polyfit( ) para resolver el problema de ajustar datos a una curva por el método de mínimos cuadrados. También podemos utilizar dicha instrucción para obtener el polinomio interpolador de grado menor o igual que n que interpola n + 1 datos. Para ello, le requeriremos un ajuste exacto. Así, la instrucción pol=polyfit(x,y,length(x)-1) nos proporcionará el polinomio interpolador que pasa por los n+1 datos de abcisas x y ordenadas y.
201
Capítulo 8. Interpolación y aproximación de funciones con Matlab
1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1
0
2
4
6
8
10
Figura 8.7: Interpolación del sen(x) usando la opción cubic.
En nuestro ejemplo, si hacemos pol=polyfit(x,y,length(x)-1) obtenemos Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the polynomial, or try centering and scaling as described in HELP POLYFIT. pol = Columns 1 through 6 0.0000 -0.0000 0.0006 -0.0080 0.0516 -0.1359 Columns 7 through 10 0.0801 -0.2362 1.0899 -0.0000 que nos proporciona el polinomio interpolador. Para calcular el polinomio de interpolación en las abcisas que queremos interpolar y mostrar el resultado gráficamente, escribimos yp=polyval(pol,xi); plot(x,y,’o’,xi,yp,’*’) 202
8.2 Interpolación polinómica
1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1
0
2
4
6
8
10
Figura 8.8: Interpolación del sen(x) usando polyfit( ).
y obtenemos la gráfica mostrada en la Figura 8.8. Podemos evitar los problemas de mal condicionamiento utilizando unas abcisas desplazadas, normalizándolas para que su desviación típica sea la unidad. Esto lo podemos conseguir con la siguiente instrucción [p,s,mu]=polyfit(x,y,length(x)-1) que da los resultados p =
Columns 1 through 6 0.0000 -0.1517 -0.0000 Columns 7 through 10 -0.0000 5.0144 0.0000 s = R: [10x10 double] df: 0 normr: 5.8620e-015
1.2739
0.0000
-4.1391
-0.9997
mu = 4.7124 3.1705 203
Capítulo 8. Interpolación y aproximación de funciones con Matlab
1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1
0
2
4
6
8
10
Figura 8.9: Interpolación del sen(x) usando polyfit( ) mejorando el mal condicionamiento.
El polinomio p que se obtiene está referido a la nueva variable u = (x − x ¯)/σ, lo que ha de tenerse en cuenta para evaluarlo respecto a los datos iniciales. Para ello, escribimos ug=(xi-mu(1))/mu(2); yg=polyval(p,ug); plot(x,y,’o’,xi,yg,’*’) obteniendo la Figura 8.9. Vamos a comparar los resultados obtenidos calculando los errores cometidos por los distintos métodos. Empezamos calculando los valores exactos yexact=sin(xi); A continuación calculamos el error cometido en cada uno de los puntos al realizar la interpolación con la opción nearest errorn=yexact-yn; 204
8.2 Interpolación polinómica
Para tener una idea del error calculamos el máximo error cometido en todos los puntos de xi con la orden norm(errorn,inf) obteniendo ans = 0.5000 Una medida que recoge todos los errores se puede obtener calculando la norma euclídea del vector error, norm(errorn) ans = 1.0439 De forma análoga obtenemos ambos errores para los distintos tipos de interpolación que hemos utilizado. Podemos resumir los resultados obtenidos en la siguiente tabla Método nearest linear spline cubic polinomio int.
Máximo error en un punto 0.5000 0.1340 0.0275 0.1340 0.0090
Norma euclídea del error 1.0439 0.2842 0.0428 0.2808 0.0131
En este caso el menor error se comete con el polinomio interpolador. Pero esto no tiene porqué ser siempre así. Dependiendo del tipo de datos será más adecuado un tipo de interpolación u otro. Como se ha visto en la teoría, los polinomios de grado alto suelen dar problemas si la función no se comporta como un polinomio, esto se puede observar claramente con la función de Runge.
205
Capítulo 8. Interpolación y aproximación de funciones con Matlab
1.4 nodos no−nudo primera derivada
1.2
1
0.8
0.6
0.4
0.2
0
0
0.5
1
1.5
2
2.5
3
Figura 8.10: Interpolación del sen(x) usando diferentes splines.
8.3
Interpolación mediante splines
Con la orden spline( ) podemos calcular, además de los splines "no-nudo"que nos permite calcular la función interp1( ) , el spline cuya primera derivada en los extremos del intervalo de interpolación tiene valores conocidos. Si consideramos el ejemplo que hemos estado trabajando, sabemos que sen (0) = 1, sen (3π) = −1. Vamos a calcular ys1 que son los valores interpolados utilizando una spline "no-nudo", e ys2 los valores obtenidos incluyendo el valor de las primeras derivadas en los extremos. Para ello, hacemos x=[0,0.5,1,3]; y=sin(x); xi=0:.1:3; ys1=spline(x,y,xi); y2=[1,y,-1]; ys2=spline(x,y2,xi); plot(x,y,’o’,xi,ys1,’r’,xi,ys2,’b’) legend(’nodos’,’no-nudo’,’primera derivada’) obteniendo la Figura 8.10. 206
8.4 Diferencias divididas
La instrucción spline( ) puede usarse con sólo dos argumentos. En ese caso el resultado es una estructura con toda la información sobre el spline. La intrucción ys3=spline(x,y) da el resultado ys3 = form: breaks: coefs: pieces: order: dim:
’pp’ [0 0.5000 1 3] [3x4 double] 3 4 1
que nos dice que se trata de un polinomio a trozos (pp: piecewise polynomial), de los puntos donde cambia el polinomio, el tamaño de la matriz que almacena los coeficientes, el número de polinomios, el número de coeficientes de cada polinomio y la dimensión (una variable).
8.4
Diferencias divididas
Podemos crear una función para calcular las diferencias divididas, que llamaremos difdiv.m y otra función para que calcule la interpolación en un punto utilizando dichas diferencias divididas, que llamaremos polynew.m. Por ejemplo, la función difdiv.m se puede definir de la siguiente forma, function D=difdiv(x,y) % Calcula las diferencias divididas para los puntos soporte (x,y) % El resultado es una matriz con NaN’s donde no corresponde que % se calcule nada [m,n]=size(x); if m==1 x=x’; end [m,n]=size(y); if m==1 y=y’; end [m,n]=size(x); [m1,n1]=size(y); if m~=m1 error(’Error en los datos’), end if n~=1 error(’Error en los datos’), end if n1~=1 error(’Error en los datos’), end clear m1 n1 D=NaN*ones(m); 207
Capítulo 8. Interpolación y aproximación de funciones con Matlab
D(:,1)=y; for j=2:m for i=j:m D(i,j)=(D(i,j-1)-D(i-1,j-1))/(x(i)-x(i-j+1)); end end y la función polynew.m function yi=polynew(D,x,xi) [m,~]=size(D); yi=D(end,end); for k=1:m-1 yi=yi*(xi-x(m-k))+D(m-k,m-k); end Evaluemos el polinomio interpolador y el polinomio obtenido con diferencias divididas en la abcisa 2.1 pol=polyfit(x,y,length(x)-1); polyval(pol,2.1) D=difdiv(x,y) polynew(D,x,2.1) obteniendo los resultados ans = 0.9846 D = 0 0.4794 0.8415 0.1411 ans = 0.9846
NaN 0.9589 0.7241 -0.3502
NaN NaN -0.2348 -0.4297
NaN NaN NaN -0.0650
que también muestran la tabla de diferencias divididas.
208
8.5 Ejercicios con Matlab
8.5
Ejercicios con Matlab
1. El primer elemento de la estación orbital internacional incluía el sistema de manipulación remota canadiense: Canadian Mobile Servicing Center. Los sistemas de manipulación remota utilizan un avanzado sistema de control que guía un brazo manipulador hasta posiciones predeterminadas. Uno de los requisitos de dicho sistema de control es el diseño de una trayectoria para que el brazo se mueva de un sitio a otro de manera que se eviten movimientos bruscos que podrían causar que se desprendan los objetos transportados o se dañe el propio brazo robótico. Supongamos que tenemos un brazo robótico y tenemos almacenados en una tabla algunos puntos de la trayectoria del brazo. Dichos puntos están ordenados para que el brazo se mueva hasta su posición para coger un objeto y luego vuelva a la posición original. Supondremos además que los puntos intermedios incluidos en la trayectoria tratan de evitar choques del brazo o bien guiarlo hacia sensores que recogen información. Así, cada punto tendrá tres datos asociados: las coordenadas x e y de la posición del brazo, y un tercer dato que denotaremos acción, codificado del siguiente modo Acción 0 1 2 3
Significado posición de partida posición intermedia posición de coger objeto posición de soltar objeto
El problema consiste en encontrar una curva suave mediante interpolación de manera que sirva de guía para el brazo robótico, partiendo de un punto determinado, se mueva a una posición concreta para coger un objeto, lo deje en otra posición y vuelva al punto de partida. Estas posiciones y otras intermedias las proporcionamos en la siguiente tabla: x 0 2 6 7 12 15 8 4 0
y 0 4 4 6 7 1 −1 −2 0
Acción 0 1 1 2 1 3 1 1 0
Representa los puntos anteriores uniéndolos mediante rectas. Los movimientos obtenidos serían bruscos. Si queremos redefinir la trayectoria necesitamos 209
Capítulo 8. Interpolación y aproximación de funciones con Matlab
al menos definir dos trozos, uno para la ida y otro para la vuelta. Define estas dos trayectorias y dibuja las distintas trayectorias que se obtienen al aplicar los distintos tipos de interpolación que sabes realizar con Matlab. Divide ahora la trayectoria de ida en dos: la primera desde el inicio hasta el objeto a recoger y otra desde que se recoge el objeto hasta que se deja. Aplica las distintas opciones de interpolación y representa las trayectorias obtenidas. Compara los resultados obtenidos. 2. En la siguiente tabla mostramos algunos valores tabulados de la función de error, erf(x) x erf(x)
0.15 0.1680
0.27 0.2974
0.76 0.7175
0.89 0.7918
1.07 0.8698
2.11 0.9972
a) Construye un spline cúbico no-nodo que aproxime la función de error. Representa gráficamente dicho spline, junto con los datos tabulados. b) Compara las aproximaciones obtenidas en x = 0.33, x = 0.92 y x = 2.05 con los valores que Matlab proporciona con la instrucción erf( ). c) ¿Mejoran los resultados si utilizamos otro tipo de spline? 3. Interpola la función f (x) =
1 , 1 + x2
de dos modos, primero un conjunto de puntos xn = −5 + n, yn = f (xn ) con n = 0, 1, 2, . . . , 10, y luego utilizando otro conjunto de puntos, xn = 5 cos(πn/10), yn = f (xn ) con n = 0, 1, 2, . . . , 10. Utiliza un polinomio de grado 10 para la interpolación de la función. Realiza una gráfica con las dos interpolaciones y los valores de la función.
210
Capítulo 9
Derivación e integración con Matlab 9.1
Derivación con Matlab
Una primera aproximación de la derivada de una función en un punto se puede calcular con el cociente incremental f (t) ≈
f (t + h) − f (t) . h
Se va a usar este tipo de aproximación para estimar la derivada de una función a partir de una tabla de números. Consideremos la función f (t) = 4 sen(t). Con las instrucciones func = @(t)4.*sin(t); dfunc = @(t)4.*cos(t); tt = linspace(0,pi,100); yy = func(tt); dyy = dfunc(tt); plotrange = [0 4 -5 5]; grid on; axis(plotrange); plot(tt,yy,’k’,tt,dyy,’r--’); legend(’funcion’,’derivada’) se obtiene la gráfica de la función y su derivada, que se muestran en la Figura 9.1. 211
Capítulo 9. Derivación e integración con Matlab 5 funcion derivada
4 3 2 1 0 −1 −2 −3 −4 −5 0
0.5
1
1.5
2
2.5
3
3.5
4
Figura 9.1: Función f (t) = 4 sen(t) y su derivada f (t) = 4 cos(t).
Supongamos que de esta función se conocen los valores de la función que se recogen en la siguiente tabla junto con los valores de la derivada en esos puntos. t f (t) f (t)
0 0 4.0
1.0472 3.4641 2.0
2.0944 3.4641 -2.0
3.1416 0.0000 -4.0
La instrucción y=diff(t) de Matlab para los elementos de un vector t1 , t2 , . . . tn devuelve otro vector cuyas componentes son yi = ti+1 − ti . Haciendo uso de esta función podemos escribir func = @(t)4.*sin(t); np = 4; t = linspace(0,pi,np); y=func(t); dydt = diff(y)./diff(t); tt = t(1:end-1); plot(tt,dydt,’b-o’); % hacia atras hold on grid on tt = t(2:end); % hacia delante plot(tt,dydt,’g-s’) tt = t(1:end-1) + diff(t)./2; % central 212
9.1 Derivación con Matlab
plot(tt,dydt,’k-*’); legend(’dy/dt’,... ’dy/dt (delante)’,’dy/dt (atras)’,’dy/dt (central)’); obteniendo las aproximaciones de la derivada que se recogen en la siguiente tabla. Aproximación hacia delante t f (t) Aproximación hacia detrás t f (t) Aproximación del punto medio t f (t)
0 3.3080
1.0472 0.0000
2.0944 -3.3080
1.0472 3.3080
2.0944 0.0000
3.1416 -3.3080
0.5236 3.3080
1.5708 0.0000
2.6180 -3.3080
Estos resultados se resumen en la gráfica mostrada en la Figura 9.2.
ï ï
ï ï ï
Figura 9.2: Función derivada f (t) = 4 cos(t) y sus aproximaciones.
Se puede estimar la derivada de la función en los puntos centrales utilizando la aproximación centrada fi+1 − fi−1 f (ti ) ≈ . xi+1 − xi−1 213
Capítulo 9. Derivación e integración con Matlab
Podemos implementar este esquema para los puntos centrales haciendo vec=[]; for i=2:length(t)-1; fp(i)= (y(i+1) -y(i-1))/(t(i+1) - t(i-1)); vec=[vec,[t(i);fp(i)]]; end vec y se obtiene el resultado t f (t)
1.0472 1.6540
2.0944 -1.6540
Hemos de tener en cuenta que la diferenciación numérica es muy sensible a posibles errores en los datos. Para poner de manifiesto esto consideremos los datos correspondiente a una función con cierto ruido
t f (t)
0 -0.447
0.1 1.978
0.2 3.28
0.3 6.16
0.4 7.08
0.5 7.34
0.6 7.66
0.7 9.56
0.8 9.48
0.9 9.30
1 11.2
Podemos calcular la derivada de la función mediante las instrucciones x = 0:0.1:1; y = [-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; x_FD = x(1:end-1); y_FD = diff(y)./diff(x); plot(x,y,’-s’,x_FD,y_FD,’--o’) legend(’funcion’,’derivada’) obteniendo la gráfica que se muestra en la Figura 9.3. Se observa que la derivada de la función tiene un mal comportamiento, para resolver este problema se suele suavizar la función mediante alguna técnica. Una posibilidad es ajustar la función mediante un polinomio de segundo grado y calcular la derivada derivando el polinomio. Podemos introducir las instrucciones a = polyfit(x,y,2); a_deriv = polyder(a); y_d = polyval(a_deriv,X_FD); plot(x_FD,y_FD,’--o’,X_FD,y_d,’.*’) legend(’Con ruido’,’ajuste’) 214
9.1 Derivación con Matlab 30 funcion derivada
25
20
15
10
5
0
−5 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Figura 9.3: Función con ruido y su derivada.
obteniendo el resultado que se muestra en la Figura 9.4, donde se observa que el compartamiento de la derivada mejora. 30 Con ruido ajuste
25
20
15
10
5
0
−5 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
Figura 9.4: Cálculo de la derivada suavizando la función.
215
Capítulo 9. Derivación e integración con Matlab
9.2
Integración con Matlab
El Matlab dispone de una función que permite obtener integrales simbólicamente. Supongamos que se quiere obtener la integral " dx . (x + 3)(x − 1)(x2 + 1) Primero se declara la variable x como una variable simbólica mediante la instrucción syms x y, posteriormente se hace uso de la función int( ) int(x/(x+3)/(x-1)/(x^2+1)) obteniendo el resultado 1 3 log(x − 1) + log(x + 3) + 8 40
i 1 − 20 10
log(x + i) −
i 1 + 20 10
log(x − i) .
Usando la función int( ), se pueden calcular algunas integrales definidas. Así, si queremos calcular " 5 x dx , (9.1) 2 2 (x + 3)(x − 1)(x + 1) podemos escribir syms x res res=int(x/(x+3)/(x-1)/(x^2+1),2,5); vpa(res,15) obteniendo el resultado 0.0702964096897709 Una de las funciones de las que dispone Matlab para aproximar integrales definidas es las función quad( ). Para utilizar esta función, primero hemos de definir el integrando. Por ejemplo para calcular la integral (9.1), podemos escribir clear x f1=inline(’x./((x+3).*(x-1).*(x.^2+1))’) Q=quad(f1,2,5) 216
9.2 Integración con Matlab
obteniendo el resultado 0.070296459629483 Otra forma de definir el integrando y calcular la integral es f2=@(x)x./((x+3).*(x-1).*(x.^2+1)); Q=quad(f2,2,5) o bien, se construye una función function y=mifunc(x) y=x./((x+3).*(x-1).*(x.^2+1)); y luego se calcula la integral Q=quad(@mifunc,2,5) Se puede cambiar la precisión del cálculo de la integral usando un argumento más en la función quad( ), así, podemos escribir Q=quad(@mifunc,2,5,1e-10) obteniendo el resultado 0.070296409691589 El siguiente programa implementa la Regla del Trapecio function s=trapecio(f,a,b,M) % Input - f es el integrando (es una cadena ’f’) % - a and b son los limites inferior y superior % - M es el numero de subintervalos %Output - es el valor de la integral h=(b-a)/M; s=0; for k=1:(M-1) x=a+h*k; s=s+feval(f,x); end s=h*(feval(f,a)+feval(f,b))/2+h*s; 217
Capítulo 9. Derivación e integración con Matlab
Podemos estimar el valor de la integral (9.1) mediante la Regla del Trapecio utilizando distinto número de subintervalos. Introduciendo las instrucciones format long s=trapecio(’mifunc’,2,5,10) s=trapecio(’mifunc’,2,5,40) s=trapecio(’mifunc’,2,5,80) s=trapecio(’mifunc’,2,5,120) obtenemos los resultados 0.071162694853645 0.070351048850790 0.070310075925561 0.070302484104059 El siguiente programa implementa la Regla de Simpson function s=simpson(f,a,b,M) % Input - f es el integrando (es una cadena ’f’) % - a and b son los limites inferior y superior % - M es el numero de subintervalos %Output - es el valor de la integral h=(b-a)/(2*M); s1=0; s2=0; for k=1:M x=a+h*(2*k-1); s1=s1+feval(f,x); end for k=1:(M-1) x=a+h*2*k; s2=s2+feval(f,x); end s=h*(feval(f,a)+feval(f,b)+4*s1+2*s2)/3; Para estimar el valor de la integral (9.1) utilizando la Regla de Simpson, se introducen las instrucciones format long s=simpson(’mifunc’,2,5,10) 218
9.3 Ejercicios con Matlab
s=simpson(’mifunc’,2,5,40) s=simpson(’mifunc’,2,5,80) s=simpson(’mifunc’,2,5,120) y se obtienen los resultados 0.070298512021709 0.070296418283818 0.070296410228200 0.070296409796175 Matlab además dispone de una función llamada trapz( ), que dados dos vectores x e y, nos permite estimar el valor de la integral " xn y(x) dx . x1
Así la función trapz( ) utiliza el método de los trapecios basado en la división utilizada para definir el vector x. De este modo, si queremos calcular "
π 2
sen(x) dx ,
0
podemos escribir, por ejemplo, x=0:pi/10:pi/2; y=sin(x); integral=trapz(x,y)
9.3
Ejercicios con Matlab
1. Dada la función f (x) = 5 cos(10x) + x3 − 2x2 − 6x + 10, evalúa la función en los puntos, x = 0, 0.5, 1, . . . , 10 y utilizando los valores de la función en estos puntos estima distintas aproximaciones de la derivada de f (x) y compara los valores obtenidos con la derivada analítica. Repite los cálculos usando un paso Δx = 0.01.
219
Capítulo 9. Derivación e integración con Matlab
2. La distancia D = D(t) viajada por un objeto viene dada en la siguiente tabla t 8.0 9.0 10.0 11.0 12.0
D(t) 17.453 21.460 25.752 30.301 35.084
Encuentra estimaciones para la velocidad del objeto. 3. La altura q(t) en el tiempo t en un depósito cilíndrico de radio R = 1m con un agujero circular de radio r = 0.1m en el fondo se ha medido cada 5s obteniéndose los siguientes valores t q(t)
0 0.6350
5 0.5336
10 0.4410
15 0.3572
20 0.2822
Se quiere obtener una estimación de la velocidad q (t) del fluido. Compara esta estimación con la ley de Torricelli r !2 * q (t) = −γ 2gq(t), R donde g es la aceleración de la gravedad y γ = 0.6 es un factor de corrección. Obtén el polinomio interpolador asociado a los puntos de la tabla y calcula la derivada, q (t), derivando el polinomio obtenido. 4. Dada la función f (x) = x10 − 10x8 + 33x6 − 40x4 − 16x2 , dibuja la función en el intervalo x ∈ [−2, 2]. Obtén el valor exacto de " 2 f (x) dx −2
y compara las aproximaciones numéricas que se obtienen con la Regla del Trapecio, la Regla de Simpson y la función quad( ). 5. Se tiene que construir una hoja de techo corrugado usando una máquina que comprime una hoja plana de aluminio convirtiéndola en una cuya sección transversal tiene la forma de una onda senoidal. Supongamos que se necesita una hoja corrugada de 50 cm de longitud y que cada ondulación tiene una altura de 1 cm respecto de la línea horizontal y un periodo de 2π cm. El problema de encontrar la longitud de la hoja inicial viene dado por la integral " 50 * 1 + cos2 (x) dx . L= 0
Estima esta longitud. 220
9.3 Ejercicios con Matlab
6. Calcula aproximadamente el valor de " ∞ cos(2x) dx, cosh(x) 0 y compáralo con el valor exacto,
π 2 sech(π).
7. Es conocido que
" ∞ x2 1 1 e− 2 dx = . 2π 0 2 Comprueba el resultado utilizando la Regla de los trapecios, la Regla de Simpson y la función quad( ).
8. El volumen V de un gas en función de la presión P ejercida por un pistón viene dada en la tabla siguiente P V
60 80.0
80 69.2
100 60.0
120 52.0
140 45.0
160 38.6
180 32.5
Calcula el trabajo necesario para disminuir V de 80 a 32.5, " 80 P dV . W = 32.5
9. La potencia P proporcionada por las ruedas de un coche como función de la velocidad v viene dada en la siguiente tabla v (m/s) P (kW)
0 0
1.0 4.7
1.8 12.2
2.4 19.0
3.5 31.8
4.4 40.1
5.1 43.8
6.0 43.2
Teniendo en cuenta que la potencia se puede expresar P = F v, usando la Ley de Newton, se tiene que el tiempo necesario para que la velocidad del coche pase de 1 m/s a 6 m/s viene dado por " 6 v t=m dv . 1 P Estima este tiempo si se supone que el coche tiene una masa de m = 2000 kg. 10. Interpola la función 1 , 1 + x2 de dos modos, primero un conjunto de puntos xn = −5 + n, yn = f (xn ) con n = 0, 1, 2, . . . , 10, y luego utilizando otro conjunto de puntos, xn = 5 cos(πn/10), yn = f (xn ) con n = 0, 1, 2, . . . , 10. Utiliza un polinomio de grado 10 para la interpolación de la función. Con los dos polinomios obtenidos estima el valor de " 5 1 dx . 1 + x2 −5 f (x) =
221
Capítulo 10
Resolución de problemas de valor inicial con Matlab 10.1
Introducción
En este capítulo mostraremos cómo resolver problemas de valor inicial utilizando las funciones que tiene implementadas Matlab. Así mismo, construiremos algunas funciones que implementen algunos de los métodos numéricos para obtener un valor aproximado de la solución y(t) del problema de valor inicial y = f (t, y), (10.1) y(t0 ) = y0 , con y ∈ Rp . Matlab dispone de funciones para resolver ecuaciones diferenciales. Para ello debemos definir el campo vectorial (la función f (t, y)) en un fichero aparte. Algunos de los comandos más utilizados en Matlab son: • ode23: Utiliza una combinación de métodos Runge-Kutta de órdenes 2 y 3 explícitos y paso de integración variable. • ode45: Utiliza una combinación de métodos Runge-Kutta de órdenes 4 y 5 explícitos y paso de integración variable. • ode113: Utiliza métodos multipaso de órdenes 1 a 13 explícitos y paso de integración variable. 223
Capítulo 10. Resolución de problemas de valor inicial con Matlab
Ilustramos su uso con un ejemplo. Ejemplo 10.1 Considerar el problema de Lotka-Volterra (4.26) c˙ z˙
= c(1 − z), = z(c − 2),
(10.2)
suponiendo que inicialmente las poblaciones son c(0) = 4, z(0) = 1 y obtener la solución numérica c(t), z(t) para t ∈ [0, 100]. Solución: Reescribimos el sistema y1
y2
=
y1 (1 − y2 )
=
y2 (y1 − 2),
(10.3)
con (y1 , y2 ) = (c, z), (y1 (0), y2 (0)) = (4, 1). Para resolver este problema utilizando un método numérico, en primer lugar construiremos un fichero que llamaremos fVolt.m, que contiene a la función f , y al que llamaremos cada vez que necesitemos evaluar la parte derecha de la ecuación diferencial (o sistema de ecuaciones diferenciales). Este fichero puede ser, por ejemplo: % fVolt.m % Modelo de Lotka-Volterra para el sistema depredador-presa function Ydot = fVolt(t, Y) % Parte derecha de la ecuación diferencial Yd( 1) = Y(1)*(1-Y(2)); Yd( 2) = Y(2)*(Y(1)-2); Ydot = [Yd(1) ; Yd(2)]; En un nuevo fichero escribimos: % y’ = f(t,y) % Método ode23 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Tiempo inicial, final t0=0; tf=100; % Condiciones iniciales y0 = [4 ; 1]; % Options options = odeset(’AbsTol’,1e-8,’RelTol’,1e-5); [t,y] = ode23(’fVolt’,[t0,tf],y0,options); 224
10.1 Introducción
En este fichero se integra en el intervalo t ∈ [0, 100] y se almacena la solución en una matriz de tres columnas en la que en la primera columna se encuentran los instantes en los que se obtiene las soluciones numéricas, en la segunda y tercera columnas se encuentran los valores obtenidos para y1 e y2 en esos instantes. Hemos utilizado el método ode23 pero podemos utilizar otros como el ode45 o el ode113. En options podemos introducir una lista de opciones que dispone Matlab. En el ejemplo hemos elegido el error absoluto y el relativo. Si los reducimos en un orden de magnitud debemos esperar que los errores se reduzcan aproximadamente en esta magnitud. Podemos dibujar la solución obtenida junto con el campo de vectores para ver mejor como es la solución del problema añadiendo los siguientes comandos [y1,y2] = meshgrid(0:.2:4.5,0:.2:3); Dy1Dt = y1.*(1-y2); Dy2Dt = y2.*(y1-2); quiver(y1,y2,Dy1Dt,Dy2Dt,1.5) figure(1) hold on plot(y(:,1),y(:,2),’r^’,’MarkerSize’,4) axis equal, axis([0 4.5 0 3.2]) hold off figure (2) plot(t,y(:,1),’r.-’,t,y(:,2),’b’) legend(’y_1’,’y_2’) axis([0 100 0 5]) xlabel(’t’)
obteniendo las gráficas mostradas en la Figura 10.1. 5 y1 y2
4.5
3
4 2.5
3.5 2
3 2.5
1.5
2 1
1.5 1
0.5
0.5 0
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
0
0
10
20
30
40
50 t
60
70
80
90
100
Figura 10.1: Diagrama de fases y soluciones del problema de Lotka-Volterra.
225
Capítulo 10. Resolución de problemas de valor inicial con Matlab
Cada método numérico suele ser útil sólo para ciertos tipos de problemas y por eso Matlab dispone de muchos métodos implementados para ser utilizados en problemas distintos, y uno debe saber cuando debe utilizar cada uno. En esta práctica vamos a estudiar algunos de estos métodos para entender su funcionamiento. Comparar distintos métodos nos puede ayudar a elegir el método más adecuado para un determinado problema, o adaptar nuevos métodos para resolver un problema específico.
10.2
Método de Euler
El método de Euler es el más simple de los métodos numéricos de resolución de ecuaciones diferenciales y viene dado por yn+1 = yn + hf (tn , yn ) ,
n = 0, 1, 2, . . .
con tn = t0 + nh. Ejemplo 10.2 Aplicar método de Euler al problema de Lotka-Volterra (10.2) con c0 = z0 = 2 para t ∈ [0, 3] tomando como pasos de integración h = 1/5 y h = 1/20. Dibujar cn frente a zn en ambos casos y comparar los resultados. Solución: El método de Euler para este problema viene dado por y1,n+1 = y1,n + hy1,n (1 − y2n ), cn+1 = cn + hcn (1 − zn ), o zn+1 = zn + hzn (cn − 2), y2,n+1 = y2,n + hy2,n (y2n − 2), y para alcanzar el tiempo final tf = 3 utilizando un paso de integración h = 1/5 deberemos reperit el algoritmo N = 3/h = 15 veces. El algoritmo escrito en forma de método RK de una etapa viene dado por: % ejemploEuler.m % y’ = f(t,y) % Método de Euler %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Tiempo inicial, final y número de divisiones t0=0; tf=3; Npasos = 15; % Tamaño del paso de integración h = (tf-t0)/Npasos; % Condiciones iniciales y = [2 ; 2]; % EU almacena las soluciones obtenidas en cada instante EU = [t0 y’ ]; t = t0; 226
10.2 Método de Euler
for i2 = 1:Npasos; %%%% Metodo de Euler %%%%%%%%%%%%%%%%%%%%%% K1 = fVolt(t,y); y = y + h*K1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% t = t +h; EU = [EU ; t y’ ]; end
y si queremos podemos dibujar, por ejemplo, el resultado obtenido incluyendo el comando plot(EU(:,2),EU(:,3),’s’) donde la solución u(t) frente a v(t) en cada instante la hemos marcado con cuadrados. Los resultados obtenidos se muestran en la Figura 10.2 (la trayectoria exacta se coresponde con la línea continua y los resultados del método se representan con cuadrados). Repetimos lo mismo tomando ahora h = 1/20 (repetimos el algoritmo N = 3/h = 60 veces, esto es 4 veces más de cálculo). Los resultados vienen dados por los círculos, donde se aprecia: (i) el error cometido va creciendo según se avanza en la integración y; (ii) si utilizamos un paso más pequeño podemos obtener mayor precisión a costa de una mayor cantidad de cálculos.
2
u
1.5
1
0.5
0 0.5
1
1.5
2
2.5
3
3.5
v Figura 10.2: Método de Euler aplicado al problema del Ejemplo 10.2.
227
Capítulo 10. Resolución de problemas de valor inicial con Matlab
10.3
Métodos de Runge-Kutta
Recordamos los métodos explícitos que hemos estudiado: Método del punto medio. Este método RK de orden 2 viene dado por: k1 k2 yn+1
= = =
f (tn , yn ) , f (tn + h/2, yn + hk1 /2) , yn + hk2 .
Como vemos, el método necesita evaluar la función f dos veces en cada paso de integración, por lo que requiere de más operaciones que en el caso del método de Euler. Por otro lado, este coste adicional se compensa porque el método suele ser bastante más preciso. Método de Euler modificado. El método viene dado por: k1 k2 yn+1
= = =
f (tn , yn ) , f (tn + h, yn + hk1 ) , yn + h2 (k1 + k2 ) ,
que también requiere f por paso y tiene un error de dos evaluaciones de la función
de truncamiento O h3 y un error global O h2 . Método de Heun. El método viene dado por: k1 k2 yn+1
= = =
f (tn , yi ) , f (tn + 2h/3, yn + 2hk1 /3) , yn + h4 (k1 + 3k2 ) ,
que tiene un error de truncamiento O h3 y un error global O h2 . Método estándard Runge-Kutta de orden 4. El método viene dado por: k1 k2 k3 k4 yn+1
= = = = =
f (tn , yn ) , f (tn + h/2, yn + hk1 /2) , f (tn + h/2, yn + hk2 /2) , f (tn + h, yn + hk3 ) , yn + h6 (k1 + 2k2 + 2k3 + k4 ) ,
en el que el error de truncamiento es O h5 y el error global del método es O h4 . A continuación presentamos cómo modificar el programa de Euler para implementar el método RK de orden 4. Lo llamaremos ejemploRK4.m. % % 228
ejemploRK4.m y’ = f(t,y)
10.4 Métodos multipaso
% Método Runge-Kutta-4 standard de 4 etapas y de orden 4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Tiempo inicial, final y número de divisiones t0=0; tf=100; Npasos = 500; % Tamaño del paso de integración h = (tf-t0)/Npasos; % Condiciones iniciales y = [4 ; 1]; % R4 almacena las soluciones obtenidas en cada instante RK4 = [t0 y’ ]; t = t0; for i2 = 1:Npasos; t1 = t + h/2; t2 = t + h/2; t3 = t + h; %%%% Metodo RK-4 estandard %%%%%%%%%%%%%%%%%%%%%% K1 = fVolt(t,y); K2 = fVolt(t1,y+h*K1/2); K3 = fVolt(t2,y+h*K2/2); K4 = fVolt(t3,y+h*K3); y = y + (K1 + 2*K2 + 2*K3 + K4)*h/6; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% t = t +h; RK4 = [RK4 ; t y’ ]; end
10.4
Métodos multipaso
A continuación recopilamos los métodos lineales multipaso explícitos de órdenes más bajos, llamados también métodos de Adams-Bashforth: Método de Adams-Bashforth de dos pasos y0
=
yn+1
=
que tiene un error local O h3 .
α 0 , y 1 = α1 , h yn + (3fn − fn−1 ) 2
Método de Adams-Bashforth de tres pasos y0
=
α 0 , y 1 = α 1 , y 2 = α2 , h yn+1 = yn + (23fn − 16fn−1 + 5fn−2 ) , 12
que tiene un error local O h4 . 229
Capítulo 10. Resolución de problemas de valor inicial con Matlab
Método de Adams-Bashforth de cuatro pasos α0 , y1 = α1 , y2 = α2 , y3 = α3 , h (55fn − 59fn−1 + 37fn−2 − 9fn−3 ) , yn+1 = yn + 24
que tiene un error local O h5 . y0
=
Los métodos lineales multipaso implícitos, llamados también métodos de AdamsMoulton de órdenes más bajos son: Método de Adams-Moulton de un paso y0
=
α0 ,
yn+1
=
yn +
h (fn + fn+1 ) , 2
que se corresponde también con el método RK implícito de orden 2 llamado método trapezoidal. Método de Adams-Moulton de dos pasos α 0 , y 1 = α1 , h yn+1 = yn + (5fn+1 + 8fn − fn−1 ) , 12
que tiene un error local O h4 . y0
=
Método de Adams-Moulton de tres pasos y0
=
α 0 , y 1 = α1 , y 2 = α2 , h yn+1 = yn + (9fn+1 + 19fn − 5fn−1 + fn−2 ) , 24
que tiene un error local O h5 . Método de Adams-Moulton de cuatro pasos y0
=
α 0 , y 1 = α 1 , y 2 = α 2 , y3 = α 3 , h yn+1 = yn + (251fn+1 + 646fn − 246fn−1 + 106fn−2 − 19fn−3 ) , 720
que tiene un error local O h6 . A continuación presentamos la implementación del siguiente método predictorcorrector de 3 pasos. 230
10.4 Métodos multipaso
Método predictor-corrector A-B-M de tres pasos
[p]
y0
=
[p] yn+1
=
yn+1
=
α 0 , y 1 = α1 , y 2 = α 2 , h (23fn − 16fn−1 + 5fn−2 ) yn + 12 ! h [p] 9fn+1 + 19fn − 5fn−1 + fn−2 , yn + 24 [p]
donde fn+1 = f (tn+1 , yn+1 ). Los primeros 3 pasos se pueden evaluar utilizando un método de un paso. Nosotros lo haremos utilizando el método RK estándard de 4 pasos y de orden 4. Un algoritmo para implementar este método sobre el ejemplo del problema de Lotka-Volterra viene dado por: % EjemploPredictorCorrectorABM3.m % y’ = f(t,y) % Predictor: Adams-Bashforth de 3 pasos % Corrector: Adams-Moulton de 3 pasos % Se inicializa con el método RK4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Tiempo inicial, final y número de divisiones t0=0; tf=10; Npasos = 300; % Tamaño del paso de integración h = (tf-t0)/Npasos; % Condiciones iniciales y = [4 ; 1]; % PC3 almacena las soluciones obtenidas en cada instante PC3 = [t0 y’]; t = t0; % Metodo RK4 explicito para los dos primeros pasos for i2 = 1:2; t1 = t + h/2; t2 = t + h/2; t3 = t + h; %%%% Metodo RK-4 estandard %%%%%%%%%%%%%%%%%%%%%% K1 = fVolt(t,y); K2 = fVolt(t1,y+h*K1/2); K3 = fVolt(t2,y+h*K2/2); K4 = fVolt(t3,y+h*K3); y = y + ((K1 + 2*(K2 + K3) + K4)*h/6); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% t = t + h; PC3 = [PC3 ; t y’ ]; end % Primeras 3 evaluaciones del método RK4 almacenados en PC3 y0 = PC3(1,2:3)’; f0 = fVolt(t0,y0); y1 = PC3(2,2:3)’; f1 = fVolt(t0+h,y1); y2 = PC3(3,2:3)’; f2 = fVolt(t0+2*h,y2); 231
Capítulo 10. Resolución de problemas de valor inicial con Matlab
for i3 = 3:Npasos; y2p = y2 + h*(23*f2 - 16*f1 + 5*f0)/12; %Predictor f2p = fVolt(t,y2p); y2 = y2 + h*(9*f2p + 19*f2 - 5*f1 + f0)/24; %Corrector t = t + h; f0 = f1; f1 = f2; f2= fVolt(t,y2); %para siguiente paso PC3 = [PC3 ; t y2’]; end
10.5
Ejercicios con Matlab
1. Considera el problema del satélite dado por las ecuaciones ⎧ x = vx ⎪ ⎪ ⎪ x ⎪ ⎪ ⎨ vx = − 2 (x + y 2 )3/2 y = vy ⎪ ⎪ ⎪ y ⎪ ⎪ ⎩ vy = − 2 (x + y 2 )3/2 que sirve como un modelo simple para describir su trayectoria alrededor de la Tierra. Como sabemos, la energía mecánica (cinética más potencial) se debe de conservar, y viene dada por: H=
1 2 1 (vx + vy2 ) − * . 2 2 x + y2
(10.4)
Toma como condiciones iniciales x = 1 − e,
y = 0,
vx = 0,
vy =
* (1 + e)/(1 − e)
y comprueba que H = −1/2, siendo éste un valor que debe mantenerse fijo para todos los valores futuros de x, y, vx , vy . La solución viene dada por una trayectoria cerrada elíptica con excentricidad, e, y de periodo T = 2π. Toma e = 0.5 e integra el sistema para t ∈ [0, 100]. a) Define la nueva función vectorial (de dimensión 4) y prepara un nuevo fichero adaptando los métodos ode23, ode45 y ode113. b)
232
i) Construye dos ficheros que utilicen el método Runge-Kutta de orden 4 y el método de Heun. Para ello puedes modificar el programa EjemploRK4.m y cambiar el nombre adecuadamente. ii) Integra el sistema utilizando los siguientes pasos de integración: 1 1 1 2 2 2 h = 10 , 100 , 1000 para el método de Heun, y h = 10 , 100 , 1000 para el otro, indicando cómo disminuye el error.
10.5 Ejercicios con Matlab
c)
i) Adapta el método multipaso al problema del satélite. ii) Modifica el programa para que utilice el método predictor-corrector que utiliza el método de Adams-Bashforth y el de Adams-Moulton, ambos de cuatro pasos.
2. Considera la ecuación del péndulo (y1 , y2 ) = (θ, ω) y 1 = y2 , y1 (0) = 1, y2 (0) = 0, y2 = − sen(y1 ), cuya energía total (cinética más potencial) es E = 12 y22 + (1 − cos(y2 ))). a)
i) Construye dos ficheros implementando el método de Euler y el de Heun. Para ello puedes modificar el programa EjemploRK4.m y cambiar el nombre adecuadamente. ii) Integra el sistema en el intervalo t ∈ [0, 10] utilizando los siguientes 1 1 1 pasos de integración: h = 1, 10 , 100 , 1000 para el método de Euler, 2 2 2 y h = 2, 10 , 100 , 1000 para el método de Heun. Añade una nueva columna a la matriz RK4 del fichero con los errores en la energía obtenidos en cada paso. iii) Escribe una tabla que contenga en la primera columna el paso de integración utilizado y en segunda el error máximo obtenido.
b)
i) Construye un método predictor-corrector que utilice el método de Adams-Bashforth y el de Adams-Moulton, ambos de cuatro pasos. Para ello puedes modificar el programa EjemploABM3.m y cambiar el nombre adecuadamente. ii) Integra el sistema anterior en el intervalo t ∈ [0, 10] utilizando los 1 siguientes pasos de integración: h = 12 y h = 20 . Compara los errores máximos obtenidos.
233
Capítulo 11
Resolución de problemas de contorno con Matlab 11.1
ODEs lineales con condiciones en la frontera
Veamos cómo contruir un algoritmo numérico para resolver la ecuación diferencial lineal de segundo orden y = p(x)y + q(x)y + r(x) , a ≤ x ≤ b , y(a) = α , y(b) = β , que tiene condiciones de contorno en y(a) e y(b). Dividimos el intervalo [a, b] en N + 1 subintervalos del mismo tamaño cuyos extremos son los nodos xi = a + iΔx , i = 0, 1, . . . , N + 1 , siendo Δx = (b − a)/(N + 1). Esto es, x0 = a y xN +1 = b se corresponden con los puntos frontera donde la función es conocida, y buscaremos soluciones aproximadas en los N puntos interiores: y(x1 ), . . . , y(xN ). Aproximando la primera y segunda derivadas por diferencias finitas de segundo orden en estos nodos se llegamos a la relación yi−1 − 2yi + yi+1 yi+1 − yi−1 + q (xi ) yi + r (xi ) , = p (xi ) 2 Δx 2Δx que se pueden expresar en forma matricial de la forma Ay = b ,
(11.1)
(11.2)
donde A es la matriz tridiagonal y los vectores y y b dados en (5.6) y (5.7). Por tanto, la aproximación numérica viene dada por las componentes del vector, y, solución del sistema (11.2). 235
Capítulo 11. Resolución de problemas de contorno con Matlab
Ejemplo 11.1 Resolver el siguiente problema de frontera mediante el método de diferencias finitas y = 4y + 4x(e−2 − 1) , 0 ≤ x ≤ 1 , y(0) = 0 , y(1) = 0. Sabiendo que la solución exacta del problema es y(x) =
e−2x − e2x + (1 − e−2 )x, 1 + e2
hallar el error máximo del método para N = 5 y para N = 50. Solución: Nos construimos el siguiente programa Matlab para resolver el problema: % Problema: y’’ = p(x) y’ + q(x) y + r(x) % Condiciones frontera: y(x0)=alfa, y(xf)=beta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Intervalo de integracion x0=0; xf=1; % Valores en la frontera alfa=0; beta=0; % Division del intervalo en Nint partes y paso de integracion N=5; Nint=N+1; h=(xf-x0)/Nint; A = zeros(N); b=[]; for i = 1:N; x(i)=x0 + i*h; p(i)=0; q(i)=4; r(i)=4*x(i)*(exp(-2)-1); end for i = 1:N-1; A(i,i)= 2 + h^2*q(i); A(i,i+1)= -1 + (h/2)*p(i); A(i+1,i)= -1 - (h/2)*p(i+1); b(i)=-h^2*r(i); end A(N,N)=2 + h^2*q(N); b(1) = b(1) + (1 + (h/2)*p(1))*alfa; b(N) = -h^2*r(N) + (1 - (h/2)*p(N))*beta; % Solucion aproximada por diferencias finitas ylin1 = A\b’; yl1=[ x0 alfa ; x’ ylin1 ; xf beta];
236
11.2 Diferencias finitas para EDPs de evolución
Podemos comparar con la solución exacta añadiendo al programa las siguientes líneas: z=[]; for i=1:N; % Solucion exacta yz=(exp(-2*x(i))-exp(2*x(i)))/(1+exp(2))+(1-exp(-2))*x(i); % z: vector que contiene la solucion exacta en el mallado z = [z ; x(i) yz ]; end % Incluir las soluciones conocidas en la frontera z = [ x0 alfa ; z ; xf beta]; % Error maximo cometido max(abs(yl1(:,2)-z(:,2))) dando un error máximo de 0.0010. Si además queremos dibujar en una misma figura la solución exacta y la aproximada, ambas evaluada en el mallado, podemos añadir también los siguientes comandos % Dibujar la solucion hold on plot(yl1(:,1),yl1(:,2),’r’,’LineWidth’,3) plot(z(:,1),z(:,2),’k’,’LineWidth’,3); axis([0 1 0 0.2]) xlabel(’{\fontsize{16}x}’) ylabel(’{\fontsize{16}y(x)}’) box Observamos cómo, efectivamente, ambas prácticamente se solapan.
11.2 11.2.1
Diferencias finitas para EDPs de evolución Diferencias finitas para problemas parabólicos
La ecuación del calor o de difusión sin término fuente viene dada por ⎧ 2 ∂u 2∂ u ⎪ ⎪ = a , ⎪ ⎨ ∂t ∂x2 x ∈ [0, L], t ≥ 0. ⎪ ⎪ (t), u(L, t) = f (t), u(0, t) = f 0 L ⎪ ⎩ u(x, 0) = u0 (x),
(11.3)
237
Capítulo 11. Resolución de problemas de contorno con Matlab
Discretizamos el espacio en intervalos igualmente espaciados, x = x0 + iΔx, i = 0, 1, . . . , Nx +1, y hacemos lo mismo en el tiempo, t = nΔt, n = 0, 1, 2, . . . Debemos buscar la solución en el interior del mallado mostrado en la Figura 5.1. El método de Euler explícito nos permite ir avanzando fila a fila con la siguiente discretización un − 2uni + uni+1 un+1 − uni i = a2 i−1 , Δt Δx2 y que se puede escribir en forma matricial de manera compacta un+1 = (I + rA)un + rbn ,
(11.4)
2
donde r = aΔxΔt 2 y siendo I la matriz identidad de dimensión Nx × Nx y donde la matriz A y los vectores un y bn vienen dados por (5.10). El método obtenido es un método explícito, ya que los valores de un+1 se pueden calcular directamente conociendo los valores en el instante anterior, un . Vimos también que para garantizar la estabilidad del esquema explícito, es necesario que se cumpla la condición de Courant a2 Δt 1 < , Δx2 2 que limita la longitud del paso temporal que es necesario elegir una vez se ha elegido un paso espacial. 0<
Para evitar problemas de estabilidad, podemos utilizar el método de Euler implícito, que se corresponde con la discretización un+1 − 2un+1 + un+1 un+1 − uni i i+1 i = a2 i−1 , 2 Δt Δx y que matricialmente se puede escribir como (I − rA)un+1 = un + rbn+1
(11.5)
donde A es la misma matriz que antes. Por tanto, el algoritmo recursivo que nos permite obtener un+1 es ! (11.6) un+1 = (I − rA)−1 un + rbn+1 . Otro método que tampoco tiene problemas de estabilidad y es más preciso que el método de Euler implícito, es el método de Crank-Nicolson, que viene dado por la ecuación n+1 + un+1 un+1 un+1 − uni a2 uni−1 − 2uni + uni+1 i−1 − 2ui i+1 i = + . Δt 2 Δx2 Δx2 238
11.2 Diferencias finitas para EDPs de evolución
Matricialmente se puede escribir en la forma 1 1 r n+1 I − rA u = I + rA un + (bn + bn+1 ), 2 2 2
(11.7)
y despejando un+1 se tiene un+1 =
−1 1 r 1 I − rA I + rA un + (bn + bn+1 ) . 2 2 2
(11.8)
Como vimos en teoría, todos estos métodos se pueden obtener fácilmente a partir de los métodos estudiados en el tema anterior para ecuaciones diferenciales ordinarias si primeramente discretizamos solamente en espacio y tomamos el vector de soluciones ⎞ ⎛ u1 (t) ⎜ u2 (t) ⎜ ⎜ .. u(t) = ⎜ . ⎜ ⎝ uN −1 (t) x uNx (t)
⎟ ⎟ ⎟ ⎟, ⎟ ⎠
el cual debe satisfacer el sistema de ecuaciones diferenciales ordinarias du = sAu + sb(t), dt 2
a donde s = Δx 2 . Se trata de un sistema de ecuaciones diferenciales ordinarias de la forma y = f (t, y) donde y = u y f (t, u) = sAu + sb(t) y podemos utilizar cualquiera de los métodos vistos para EDOs con condiciones iniciales (teniendo en cuenta que las condiciones de frontera se encuentran en el vector b(t)).
Ejemplo 11.2 Considerar el problema ⎧ ∂u ∂2u ⎪ ⎪ = ⎪ ⎨ ∂t ∂x2 ⎪ ⎪ ⎪ ⎩ u(0, t) = u(1, t) = 0 u(x, 0) = sen(πx)
x ∈ [0, 1],
t ∈ [0, 1],
(11.9)
2
cuya solución exacta es: u(x, t) = e−π t sen(πx). Escribir un programa que resuelva el problema y en el que se pueda elegir cualquiera de los métodos: Euler explícito, Euler implícito o Crank-Nicholson (dependiendo de la elección de una determinada 1 variable). Tomar Δx = 10 y comparar las soluciones obenidas con el método de 1 1 y Δt = 173 , y comentar Euler explícito para los pasos de integración: Δt = 174 los resultados. Repetir los cálculos con el método de Crank-Nicholson utilizando 1 . Δt = 10 239
Capítulo 11. Resolución de problemas de contorno con Matlab
Solución:
% Problema parabolico: du/dt = a2 d^2u/dx^2 % Condiciones frontera: u(t,0)=alfa, u(t,L)=beta % Condiciones iniciales: u(0,x)=g(x) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% a=1; a2=a^2; % Intervalo espacial y temporal x0=0; xL=1; t0=0; tf=1; % Discretizacion espacial y temporal Nx=9; Nxint=Nx+1; hx=(xL-x0)/Nxint; Nt=174; ht=(tf-t0)/Nt; % imet = Metodo a utilizar: % 1=Euler explicito, 2=Euler implicito, 3=Crank-Nicholson imet=1; % Condiciones iniciales un=[]; uex=[]; MU=[]; MUex=[]; for i = 1:Nx; x(i)=x0 + i*hx; un(i)=sin(pi*x(i)); end % Valores en la frontera f0(1)=0; fL(1)=0; for i = 1:Nt+1; t(i)=t0 + i*ht; f0(i+1)=0; fL(i+1)=0; end MU = [ f0(1) un fL(1) ]; MUex = MU; A =zeros(Nx); b=zeros(Nx,1); for i = 1:Nx-1; A(i,i)= -2; A(i,i+1)= 1; A(i+1,i)=1; end A(Nx,Nx)=-2; r=a2*ht/hx^2; for i=1:Nt if (imet == 1) b(1) = f0(i); b(Nx) = fL(i); un = ((eye(Nx)+r*A)*un’ + r*b)’; elseif (imet == 2) b(1) = f0(i+1); b(Nx) = fL(i+1); un = ((eye(Nx)-r*A)\(un’ + r*b))’; elseif (imet == 3) b(1) = (f0(i+1)+f0(i))/2; b(Nx) = (fL(i+1)+fL(i))/2; un = ((eye(Nx)-r*A/2)\((eye(Nx)+r*A/2)*un’ + r*b))’; end % MU contiene las soluciones aproximadas por filas junto % con las condiciones de frontera 240
11.2 Diferencias finitas para EDPs de evolución
MU = [MU ; f0(i+1) un fL(i+1) ]; % Solucion exacta for j=1:Nx uex(j)=exp(-pi^2*t(i))*sin(pi*x(j)); end MUex = [MUex ;f0(i+1) uex fL(i+1) ]; end figure(1) surf(MU) box % Error maximo cometido max(max(abs(MU-MUex))) Condiciones de frontera variables. Si las condiciones de frontera dependen del tiempo u(0, t) = f0 (t), u(L, t) = fL (t), sólo hay que modificar dos líneas del programa. Por ejemplo, si f0 (t) = sen(t) y fL (t) = sen(2t), habría que cambiar % Valores en la frontera f0(1)=0; fL(1)=0; for i = 1:Nt+1; t(i)=t0 + i*ht; f0(i+1)=0; end
fL(i+1)=0;
por % Valores en la frontera f0(1)=sin(t0); fL(1)=sin(2*t0); for i = 1:Nt+1; t(i)=t0 + i*ht; f0(i+1)=sin(t(i)); end
fL(i+1)=sin(t(i));
Término fuente independiente del tiempo. Si el problema contiene un término fuente independiente del tiempo, F (x), las modificaciones al programa también son mínimas. Por ejemplo, si F (x) = x(1 − x), podemos definir el vector F en el bucle donde se definen las condiciones iniciales % Condiciones iniciales un=[]; uex=[]; MU=[];
MUex=[]; 241
Capítulo 11. Resolución de problemas de contorno con Matlab
for i = 1:Nx; x(i)=x0 + i*hx; end
un(i)=sin(pi*x(i)); F(i)=x(i)*(1-x(i));
Este vector hay que incluirlo en los métodos de Euler explícito, implícito y CrankNicholson de la siguiente forma un = ((eye(Nx)+r*A)*un’ + F + r*b)’; un = ((eye(Nx)-r*A)\(un’ + F + r*b))’; un = ((eye(Nx)-r*A/2)\((eye(Nx)+r*A/2)*un’ + F + r*b))’; Si comparamos con las técnicas analíticas de separación de variables nos damos cuenta de la enorme diferencia que existe. Los métodos numéricos permiten abordar problemas más complejos con pequeñas modificaciones en los algoritmos.
11.2.2
Diferencias finitas para problemas hiperbólicos
Como ejemplo de un problema de contorno hiperbólico consideraremos la ecuación de ondas, o sea, un problema de la forma ⎧ 2 2 ∂ u ⎪ 2∂ u ⎪ = a + F (x, t) ⎪ ⎪ 2 ⎪ ∂x2 ⎨ ∂t x ∈ [0, L], t ≥ 0 . (11.10) u(0, t) = f0 (t), u(L, t) = fL (t) ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ u(x, 0) = f (x), ∂u (x, 0) = g(x) ∂t En esta práctica resolveremos este problema utilizando el método de líneas. Esto es, tomamos el mallado espacial con los nodos 0 = x0 , x1 , . . . xNx +1 = L y tomamos el tiempo como una variable continua, por lo que debemos resolver el sistema de EDOs d2 u = sAu + F (t) + s b(t) dt2 2
a donde s = Δx 2 y la matriz A es la misma que en el problema parabólico. El vector del término fuente (fuerza externa que actúa sobre el sistema) se corresponde con la discretización espacial, esto es, F (t) = (F (x1 , t), F (x2 , t), . . . , F (xNx , t)), y b(t) es el vector que contiene las condiciones de frontera. Las condiciones iniciales son
⎛
242
f (x1 ) ⎜ f (x2 ) ⎜ ⎜ .. u(0) = ⎜ . ⎜ ⎝ f (xN −1 ) x f (xNx )
⎞
⎟ ⎟ ⎟ ⎟, ⎟ ⎠
⎛
g(x1 ) ⎜ g(x2 ) ⎜ ⎜ .. u (0) = ⎜ . ⎜ ⎝ g(xN −1 ) x g(xNx )
⎞
⎟ ⎟ ⎟ ⎟. ⎟ ⎠
11.2 Diferencias finitas para EDPs de evolución
Esto es un sistema de ecuaciones diferenciales lineales de segundo orden con condiciones iniciales en la función y su derivada. Si transformamos este sistema de ecuaciones diferenciales de segundo orden en uno de primer orden se obtiene d u v = v sAu + F (t) + s b(t) dt con condiciones iniciales: u(0) y v(0) = u (0). El esquema de segundo orden se escribe mediante el siguiente algoritmo, correspondiente al método leap-frog, U
n+1
v un+1
= = =
n un + Δt 2 v n v + Δt(sAU + F (tn ) + sb(tn ) n+1 U + Δt 2 v
el cual se inicia con: u0 = u(0),
v 0 = u (0).
Ejemplo 11.3 Considerar la siguiente ecuación hiperbólica con condiciones iniciales y de frontera ⎧ 2 ∂ u ∂2u ⎪ ⎪ = ⎪ ⎨ ∂t2 ∂x2 u(0, t) = u(1, t) = 0 x ∈ [0, 1], (11.11) ⎪ 1 ⎪ sen(3πx) u(x, 0) = sen(πx) + ⎪ 2 ⎩ u (x, 0) = 0 para t ∈ [0, 1] y cuya solución exacta es: u(x, t) = 2 cos(πt) sen(πx) +
1 cos(3πt) sen(3πx). 2
1 , Δt = Escribir un algoritmo que implemente el método de it leap-frog con Δx = 100 1 . Dibujar la solución obtenida en 3 dimensiones y hallar el error máximo co100 metido comparando con la solución exacta en los puntos del mallado.
Solución:
% % %
Problema hiperbolico: d^2u/dt^2 = al^2 d^2u/dx^2 Condiciones frontera: u(t,0)=0, u(t,L)=0 Condiciones iniciales: u(0,x)=f(x), u’(0,x)=g(x)
al=1; % Intervalo espacial y temporalde x0=0; xL=1; t0=0; tf=1; 243
Capítulo 11. Resolución de problemas de contorno con Matlab
% Discretizacion espacial y temporal Nx=99; Nxint=Nx+1; hx=(xL-x0)/Nxint; Nt=100; ht=(tf-t0)/Nt; % Valores en la frontera alfa=0; beta=0; % Condiciones iniciales un=[]; vn=[]; uex=[]; MU = []; MUex = []; for i = 1:Nx; x(i)=x0 + i*hx; un(i) = sin(pi*x(i)) + 0.5*sin(3*pi*x(i)); vn(i) = 0; end MU = [ alfa un beta ]; MUex = MU; A = zeros(Nx); b=zeros(Nx,1); for i = 1:Nx-1; A(i,i)= -2; A(i,i+1)= 1; A(i+1,i)= 1; end A(Nx,Nx)=-2; r=al^2/hx^2; for i=1:Nt t(i)=t0 + i*ht; un = un + vn*ht/2; vn = vn + ht*r*(A*un’)’; un = un + vn*ht/2; % MU contiene las soluciones aproximada por filas MU = [MU ; alfa un beta ]; % Solucion exacta for j=1:Nx uex(j)=cos(pi*t(i))*sin(pi*x(j))+... cos(3*pi*t(i))*sin(3*pi*x(j))/2; end MUex = [MUex ; alfa uex beta ]; end figure(1) surf(MU) box % Error maximo cometido max(max(abs(MU-MUex))) 244
11.3 Ejercicios con Matlab
11.3
Ejercicios con Matlab
1. Resuelve la siguiente ecuación diferencial con condiciones en la frontera 1 1 2 −x2 /2 √ , y + 2 xy − √ 2 x y = −2e x ∈ [0, 2] , 2 y(0) = 2, y( 2) = e , utilizando el método de diferencias finitas. Compara el resultado obtenido √ √ √ 2 2 2 −x2 /2 con la solución exacta: y(x) = 2e para los valores h = 10 , 100 , 1000 . En función del resultado obtenido, comenta de qué orden es el método. 2. Considera la siguiente ecuación parabólica con condiciones iniciales y de frontera ⎧ ∂u 1 ∂2u ⎪ ⎪ = , ⎪ ⎨ ∂t 4 ∂x2 u(0, t) = 0, x ∈ [0, 1], t ∈ [0, 2] . (11.12) ⎪ ⎪ u(1, t) = 0, ⎪ ⎩ u(x, 0) = sen(πx), Compara los resultados obtenidos utilizando en método de Euler explícito, 1 1 el de Euler implícito y el de Crank-Nicholson para Δx ! = 10 y Δt = 10 . 2
Compara con la solución exacta, u(x, t) = exp − π4 t sen(πx), y comenta los resultados.
3. Considera la siguiente ecuación hiperbólica con condiciones iniciales y de frontera ⎧ 2 ∂ u ∂2u ⎪ ⎪ = 4 , ⎪ ⎨ ∂t2 ∂x2 u(0, t) = u(1, t) = 0, x ∈ [0, 1], t ∈ [0, 10] . (11.13) ⎪ ⎪ u(x, 0) = 2 sen(3πx), ⎪ ⎩ u (x, 0) = −12 sen(2πx), Utiliza el método de leap-frog tomando: (i) Δx = 1 1 50 , Δt = 100 . Compara con la solución exacta, u(x, t) = 2 cos(6πt) sen(3πx) −
1 25 , Δt
=
1 50
y (ii) Δx =
3 sen(4πt) sen(2πx), π
y comenta los resultados. 4. Modifica el algoritmo del Ejemplo 11.3 para incluir las condiciones de frontera u(0, t) = sen(t),
u(1, t) = sen(2t),
y el término fuente independiente del tiempo, F (x) = x(1 − x). 245
Bibliografía Aràndiga, F., R. Donat y P. Mulet (2000). Mètodes Numèrics per a l’Àlgebra Lineal. Valencia: Universitat de València. Aubanell, A., A. Benseny y A. Delshams (1993). Útiles Básicos de Cálculo Numérico. Barcelona: Labor. Burden, R.L. y J.D. Faires (2004). Métodos Numéricos. Tercera edición. Madrid: Thomson. Chapra, A.C. y R.P. Canale (2006). Métodos Numéricos para Ingenieros. Quinta edición. México: McGraw-Hill. Coleman, M.P. (2004). An Introduction to Partial Differential Equations with Matlab. Boca Raton, Florida: Chapman & Hall/CRC. Cordero, A. y col. (2005). Métodos Numéricos con Matlab. Valencia: Editorial Politécnica de Valencia. —
(2006). Problemas Resueltos de Métodos Numéricos. Madrid: Thomson.
Eriksson, K. y col. (1996). Computational differential equations. Cambridge: Cambridge University Press. Giordano, F.R., M.D. Weir y W.P. Fox (1997). A First Course in Mathematical Modeling. Segunda edición. Pacific Grove, CA: Brooks/Cole. Guardiola, R., E. Higón y J. Ros (2002). Mètodes Numèrics per a la Física. Valencia: Universitat de València. Holmes, M.H. (2007). Introduction to Numerical Methods in Differential Equations. New York: Springer. 247
Bibliografía
Mathews, J.H. (1992). Numerical Methods: for Mathematics, Science and Engineering. Segunda edición. Englewood Cliffs, NJ: Prentice-Hall. Mathews, J.H. y K.D. Fink (2000). Métodos Numéricos con Matlab. Madrid: Prentice-Hall. Moler, C.B. (2004). Numerical Computing with Matlab. Philadelphia: SIAM. Quarteroni, A. y F. Saleri (2006). Cálculo Científico con Matlab y Octave. Milán: Springer-Verlag. Schäfer, M. (2006). Computational Engineering - Introduction to numerical methods. Berlin: Springer-Verlag. Stoer, J. y R. Burlich (1993). Introduction to Numerical Analysis. Segunda edición. New York: Springer-Verlag.
248