SlideShare una empresa de Scribd logo
Métodos numéricos.
Introducción, aplicaciones y
propagación
Antonio Huerta Cerezuelo
Josep Sarrate-Ramos
Antonio Rodríguez-Ferran
Primera edición:septiembre de 1998
Con la colaboración del Servei de Publicacions de la UPC
Diseño de la cubierta: Antoni Gutiérrez
© los autores, 1998
© Edicions UPC, 1998
Edicions de la Universitat Politècnica de Catalunya, SL
Jordi Girona Salgado 31, 08034 Barcelona
Tel. 934 016 883 Fax. 934 015 885
Edicions Virtuals: www.edicionsupc.es
e-mail: edupc@sg.upc.es
Producción: CPET (Centre de Publicacions del Campus Nord)
La Cup. C. Gran Capità s/n, 08034 Barcelona
Depósito legal: B-31.600-98
ISBN: 84-8301-265-0
Quedan rigurosamente prohibidas, sin la autorización escrita de los titulares del copyright, bajo las sanciones establecidas en las leyes, la
reproducción total o parcial de esta obra por cualquier medio o procedimiento, comprendidos la reprografía y el tratamiento informático y la
distribución de ejemplares de ella mediante alquiler o préstamo públicos, así como la exportación e importación de ejemplares para su
distribución y venta fuera del ámbito de la Unión Europea.
Indice i
Indice
Prologo vii
1 Introduccion al uso de los ordenadores 1
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1
1.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1
1.2 Tipos de ordenadores : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1
1.3 Ordenadores digitales : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3
1.4 Software : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6
1.5 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7
2 Introduccion a los sistemas operativos 9
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
2.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9
2.2 Estructura de directorios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10
2.3 Edicion de un archivo : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 11
2.4 Manipulacion de cheros : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 12
2.4.1 Sintaxis de comandos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13
2.4.2 Comodines : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14
2.4.3 Especi cacion de directorios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14
2.5 Utilizacion del entorno Windows : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16
2.5.1 Los elementos del entorno Windows : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 17
2.5.2 Las ventanas del Windows : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21
2.6 Introduccion al manejo de Excel : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
2.6.1 Paso 1: Introduccion de constantes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
2.6.2 Paso 2: Introduccion de formulas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 26
ii Metodos numericos
2.6.3 Paso 3: Arrastre de formulas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 27
2.6.4 Paso 4: Modi cacion dinamica: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 28
2.6.5 Representacion gra ca : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
2.6.6 Importacion de resultados : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 30
2.7 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 35
3 Introduccion a la programacion FORTRAN 37
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37
3.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37
3.2 Fases del desarrollo de un programa en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37
3.3 Organizacion general de un programa en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39
3.3.1 Normas de escritura de un programa en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : 39
3.3.2 Elementos de un programa en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 40
3.4 Constantes y variables en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 41
3.4.1 Constantes y variables enteras : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42
3.4.2 Constantes y variables reales : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43
3.4.3 Constantes y variables complejas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45
3.4.4 Constantes y variables logicas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47
3.4.5 Constantes y variables alfanumericas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 48
3.4.6 Sentencia IMPLICIT : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 49
3.5 Funciones en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 50
3.6 Sentencias de entrada{salida en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51
3.7 Sentencias de control en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53
3.7.1 La sentencia IF : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54
3.7.2 La sentencia GO TO : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 55
3.7.3 El bloque DO{ENDDO : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57
3.8 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 61
4 Numero, algoritmo y errores 63
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63
4.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63
4.2 Numero : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64
4.2.1 Almacenamiento de los numeros enteros : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65
4.2.2 Almacenamiento de los numeros reales : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67
Indice iii
4.2.3 Over ow y under ow : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69
4.3 Algoritmo : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70
4.4 Errores : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
4.4.1 Error absoluto, error relativo y cifras signi cativas : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
4.4.2 Clasi cacion de los errores : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 75
4.5 Propagacion del error : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76
4.5.1 Conceptos previos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76
4.5.2 Propagacion del error en la suma : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 78
4.5.3 Propagacion del error en la resta : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79
4.5.4 Propagacion del error en el producto : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80
4.5.5 Propagacion del error en la division : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80
4.5.6 Propagacion del error en una funcion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81
4.6 Analisis de perturbaciones : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82
4.7 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87
5 Ceros de funciones 89
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89
5.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89
5.1.1 Calculo de ra ces cuadradas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90
5.1.2 Como jugar al billar en una mesa circular : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90
5.2 Metodo de la biseccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 92
5.3 Criterios de convergencia : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 96
5.4 Metodo de Newton : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98
5.4.1 Deduccion anal tica del metodo de Newton : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98
5.4.2 Deduccion gra ca del metodo de Newton : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 99
5.5 Metodo de la secante : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 102
5.6 Gra cas de convergencia : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 103
5.7 Aspectos computacionales: las funciones externas FUNCTION en FORTRAN : : : : : : 104
5.8 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 115
6 Una introduccion a los metodos gaussianos para sistemas
lineales de ecuaciones 117
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 117
6.1 Consideraciones generales : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 117
iv Metodos numericos
6.1.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 117
6.1.2 Planteamiento general : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 119
6.1.3 Resolucion algebraica: metodo de Cramer : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 119
6.1.4 Resolucion numerica: un enfoque global : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 121
6.2 Metodos directos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 124
6.2.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 124
6.2.2 Sistemas con solucion inmediata : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 125
Matriz diagonal : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 125
Matriz triangular superior : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 125
Matriz triangular inferior : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 126
6.2.3 Metodos de eliminacion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 126
Metodo de Gauss : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 126
Metodo de Gauss-Jordan : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 131
Analisis matricial del metodo de Gauss: Gauss compacto : : : : : : : : : : : : : : : : : 133
6.2.4 Metodos de descomposicion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 138
Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 138
Metodo de Crout : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 140
Metodo de Cholesky : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 143
Metodos LDU y LDLT : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 144
6.3 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 145
7 Programacion y aspectos computacionales de los sistemas
lineales de ecuaciones 147
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147
7.1 Programacion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147
7.1.1 Dimensionamiento de matrices : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147
7.1.2 Programacion estructurada: subrutinas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 152
7.2 Sistemas con solucion inmediata: programacion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 157
7.2.1 Matriz diagonal : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 157
7.2.2 Matriz triangular inferior : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 158
7.3 Consideraciones sobre la memoria : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 160
7.3.1 Tipos de memoria : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 160
7.3.2 Dimensionamiento dinamico : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 161
7.4 Almacenamiento de matrices : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 165
Indice v
7.4.1 Almacenamiento por defecto en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 165
7.4.2 Almacenamiento por las y por columnas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 166
Almacenamiento por columnas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 166
Almacenamiento por las : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 167
7.4.3 Matrices simetricas o matrices triangulares : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 168
Matriz triangular superior : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 168
7.4.4 Matrices en banda : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 169
7.4.5 Almacenamiento en skyline : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 173
7.4.6 Almacenamiento compacto : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 176
Almacenamiento comprimido por las : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 176
Producto de matriz por vector : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 177
7.5 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 177
8 Aplicaciones al calculo integral 179
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 179
8.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 179
8.2 El metodo de las aproximaciones rectangulares : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 182
8.3 El metodo compuesto del trapecio : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 183
8.4 Extension al calculo de volumenes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 187
8.5 Apendice : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 189
8.6 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 191
9 Aplicaciones al calculo diferencial 193
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 193
9.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 193
9.1.1 Ecuacion diferencial ordinaria de primer orden : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 193
9.1.2 Ecuaciones diferenciales ordinarias de orden superior a uno : : : : : : : : : : : : : : : : : : : 194
9.1.3 Reduccion de una EDO de orden n a un sistema de n EDOs de primer orden : 195
9.2 El metodo de Euler : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 197
9.3 El metodo de Heun : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 201
9.4 Extension a un sistema de EDOs de primer orden : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 203
9.5 Apendice : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 204
9.6 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 207
vi Metodos numericos
10 Resolucion de los problemas propuestos 209
Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 209
10.1 Problemas del cap tulo 2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 209
10.2 Problemas del cap tulo 3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 215
10.3 Problemas del cap tulo 4 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 221
10.4 Problemas del cap tulo 5 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 233
10.5 Problemas del cap tulo 6 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 244
10.6 Problemas del cap tulo 7 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 250
10.7 Problemas del cap tulo 8 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 268
10.8 Problemas del cap tulo 9 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 273
Prologo vii
Prologo
Este libro presenta una breve introduccion a los metodos numericos. Abarca desde la in-
troduccion a los ordenadores y la programacion en lenguaje FORTRAN hasta las aplicaciones,
haciendo una incursion en los metodos numericos propiamente dichos.
De hecho, todos los temas del libro se tratan de forma basica. Solo al abordar los metodos
directos para sistemas lineales de ecuaciones se profundiza mas, buscando dar una base solida,
puesto que es uno de los temas fundamentales en metodos numericos para ingenier a.
Las erratas y errores son completamente atribuibles a los autores. Sin embargo, los aciertos,
tanto en el enfoque como en el contenido, son de todos los profesores que participan y han
participado en las asignaturas de metodos numericos que impartimos. Seguramente, de entre
todos ellos, el mas se~nalado es Manuel Casteleiro, maestro de todos nosotros.
1 Introduccion al uso de los ordenadores 1
1 Introduccion al uso de los ordenadores
Objetivos
Describir las diferencias conceptuales entre los ordenadores analogicos y digitales.
Presentar las caracter sticas principales de los componentes basicos de un ordenador
personal.
1.1 Introduccion
Durante las ultimas decadas, el ordenador se ha convertido en una de las herramientas mas
potentes y utiles de que dispone el ingeniero. Su utilizacion abarca desde la fase de dise~no y
validacion experimental en un laboratorio, hasta la fase de construccion o produccion industrial,
pasando por la confeccion de planos y la redaccion de los pliegos de condiciones en los que se
utilizan diferentes equipos de CAD y o matica. Paralelamente a este auge tambien ha aparecido
la necesidad de recurrir a diferentes, y cada vez mas so sticados, metodos numericos en varias
de las anteriores fases.
A la vista de lo anterior y aunque el objetivo de este libro no sea el estudio detallado
del funcionamiento interno de un ordenador, es muy interesante que un ingeniero posea unos
conocimientos m nimos sobre dicho funcionamiento. Ademas, este conocimiento le facilitara la
comprension de los lenguajes de programacion as como el analisis e interpretacion tanto de los
resultados obtenidos como de los posibles errores de programacion.
1.2 Tipos de ordenadores
Desde el punto de vista conceptual, existen dos tipos de ordenadores: los ordenadores
analogicos y los digitales. Los ordenadores analogicos se basan en una analog a entre las ecua-
ciones que rigen el problema que se desea simular y un fenomeno f sico facilmente reproducible
© Los autores, 1998; © Edicions UPC, 1998.
2 Metodos numericos
en el laboratorio. Se caracterizan por:
1. Ser dif cilmente programables. Es decir, se dise~nan espec camente para un tipo de pro-
blema.
2. La velocidad de calculo depende del fenomeno f sico que se utiliza para simular el problema
que se desea resolver.
Con el proposito de ilustrar el funcionamiento de este tipo de ordenadores supongase que se
debe dise~nar un determinado tipo de suspension. En un estudio preliminar se puede aproximar
el sistema de suspension por un muelle perfectamente elastico (de constante elastica k) y un
amortiguador viscoso (de viscosidad c) instalados en paralelo como muestra la gura 1.1.a. As
mismo se puede aproximar el cuerpo que reposa sobre dicho sistema por una masa puntual m.
a) b)
Fig. 1.1 a) esquema del tipo de amortiguador que se desea estudiar b) ordenador
analogico utilizado para su estudio
De acuerdo con la segunda ley de Newton, si sobre la masa puntual m actua una fuerza
f(t), su movimiento se puede describir mediante la ecuacion
f(t) ; kx(t) ; c_x(t) ; mx(t) = 0 (1:1)
donde x(t), _x(t) y x(t) representan la posicion, velocidad y aceleracion de la masa puntual
respectivamente.
Si se desea construir un ordenador analogico que permita simular el problema anterior, es
© Los autores, 1998; © Edicions UPC, 1998.
1 Introduccion al uso de los ordenadores 3
imprescindible hallar un fenomeno que pueda ser descrito mediante una ecuacion similar a la 1.1.
Para ello, se puede construir un circuito electrico por el que circule una corriente de intensidad
I, formado por una fuente de alimentacion de potencial E(t), conectada en serie a una bobina
de inductancia L, a un condensador de capacidad C y una resistencia R, como muestra la gura
1.1.b.
De acuerdo con la ley de Ohm y puesto que la intensidad es la derivada temporal de la carga
electrica (I = _q(t)), la diferencia de potencial entre los bornes de la fuente de alimentacion
veri ca
E(t) ; 1
C q(t) ; R _q(t) ; L q(t) = 0 (1:2)
Como puede observarse, las ecuaciones que rigen ambos problemas son del mismo tipo, de
forma que obteniendo los factores de escala pertinentes se puede predecir el comportamiento
del sistema de suspension a partir del circuito electrico. Es importante resaltar que este tipo
de ordenador permite simular, casi en tiempo real, el anterior sistema de suspension. Sin
embargo, no permite calcular otras cosas, como por ejemplo las ra ces de una ecuacion de
segundo grado. Por estas razones, en la actualidad la utilizacion de los ordenadores analogicos
se limita, basicamente, a equipos de laboratorio destinados a la adquisicion de datos.
Por el contrario, los ordenadores digitales basan su funcionamiento en las diferentes propie-
dades de los componentes electronicos que los constituyen. Conceptualmente se identi can por
su capacidad de realizar operaciones logicas y aritmeticas con d gitos. Se caracterizan por:
1. Ser facilmente programables. En este sentido, se dice que son ordenadores de proposito
general.
2. Presentar una gran potencia de calculo.
3. La velocidad de calculo depende del tipo de ordenador, pero, en general, suele ser inferior a
la de los ordenadores analogicos.
1.3 Ordenadores digitales
Los ordenadores con los que habitualmente se trabaja (PCs, estaciones de trabajo, super-
ordenadores, :::) son ordenadores digitales. Su funcionamiento se basa en un soporte f sico o
hardware constituido por todos los componentes materiales que lo forman (circuitos integrados,
placas, pantallas, discos, :::), y un soporte logico o software compuesto por un conjunto de
programasque gestionan y/o se pueden ejecutar en el ordenador. Se denomina sistema operativo
al conjunto de programas y utilidades necesarios para el funcionamiento del ordenador.
El hardware de un ordenador se compone basicamente de: 1) la unidad central de proceso
o CPU (Central Processing Unit) existen ordenadores con mas de una CPU 2) la memoria
central 3) la unidad de control de entrada y salida con los perifericos 4) la unidad de control
de comunicacion por red y 5) los perifericos (ver gura 1.2).
© Los autores, 1998; © Edicions UPC, 1998.
4 Metodos numericos
1. La unidad central de proceso (CPU) es el componente del ordenador encargado de ejecutar
las instrucciones y los programas que residen, total o parcialmente, en la memoria. A nivel
conceptual se compone de dos unidades. La primera se denomina unidad de control y se en-
carga de controlar la ejecucion de los programas. La segunda es la unidad aritmetico{logica,
que se encarga de realizar las operaciones ordenadas por la unidad de control sobre los datos
que esta le suministra: suma, resta, multiplicacion, division, concatenacion, comparacion,
etc.
2. La memoria es el componente del ordenador encargado de almacenar los datos y los progra-
mas que debe tratar la CPU. Se denomina memoria RAM (Random Access Memory) a la
parte de la memoria del ordenador susceptible de ser modi cada. En consecuencia, en ella
residen los programasque desarrollan los usuarios y los datos que dichos programasprecisan,
as como una parte de los programas que gestionan el funcionamiento del ordenador. Se
denomina memoria ROM (Read Only Memory) a la parte de la memoria que no es posible
modi car y, en consecuencia, solo puede ser le da. En ella reside la parte m nima del sistema
operativo necesaria para que el ordenador se pueda poner en marcha. Por ultimo se debe
mencionar que la velocidad con que se puede acceder a los datos almacenados en este tipo
de memorias es muy inferior (ordenes de magnitud) a la velocidad con que la CPU puede
operar con ellos. A n de paliar estas diferencias, entre la memoria del ordenador y su CPU
se instala una memoria adicional llamada memoria cache (ver gura 1.2), que se caracte-
riza por una velocidad de acceso muy superior, por una capacidad de almacenamiento muy
inferior, y en general, por un precio muy elevado.
3. La unidad de control de entrada y salida (E/S) con los perifericos es el componente del
ordenador destinado a controlar y gestionar la comunicacion con los diferentes perifericos
conectados al mismo.
4. La unidad de control de comunicacion por red es el componente del ordenador encargado
del control y la gestion de los dispositivos destinados a la comunicacion entre ordenadores
mediante cable coaxial, bra optica o cualquier otro soporte similar.
5. Los perifericosson todos aquellos componentes del ordenadorque facilitan su funcionamiento
y la comunicacion entre el y los usuarios. Por ejemplo:
a) Unidades de discos jos
b) Unidades de discos extra bles
c) Unidades de cintas magneticas
d) Pantallas
e) Teclados
© Los autores, 1998; © Edicions UPC, 1998.
1 Introduccion al uso de los ordenadores 5
f) Impresoras
g) Plotters
h) Equipos de lectura optica (scanners, :::)
i) Digitalizadores
k) Equipos de comunicacion mediante l neas telefonicas (modems)
Fig. 1.2 Organizacion y estructura del hardware de un ordenador
En este curso de metodos numericos se utilizara, basicamente, un tipo de ordenador digital
denominado ordenador personal o PC (Personal Computer). Como su propio nombre indica,
es un tipo de ordenador dise~nado para que lo utilice un solo usuario y que este sea el respon-
sable de su gestion (en contraposicion a los ordenadores dise~nados para ser utilizados por varios
usuarios al mismo tiempo y gestionados por una persona especialmente formada a tal efecto,
denominados ordenadores multiusuario). Sin embargo, debido al gran nivel de expansion y a
la ingente disponibilidad de software sobre este tipo de plataformas, ha sido preciso desarrollar
nuevosprocedimientos que permitan compartirrecursosy gestionarconjuntos de PCsdestinados
a un mismo tipo de trabajo. En consecuencia, han aparecido en el mercado los productos
de hardware y software necesarios para realizar dicha conexion. De esta forma han nacido
las denominadas redes de PCs que no son mas que un conjunto de ordenadores personales
conectados, entre los cuales hay uno, denominado servidor (server), destinado a gestionar y
servir recursos al resto de equipos.
© Los autores, 1998; © Edicions UPC, 1998.
6 Metodos numericos
1.4 Software
Desde un punto de vista muy generico el software existente en un ordenador se puede
clasi car en: 1) sistema operativo 2) programas o utilidades genericas y 3) programas y cheros
de los usuarios.
1. Como se ha comentado anteriormente, el sistema operativo esta formado por un conjunto de
programas encargados de gestionar el funcionamiento del ordenador. Sus tareas cubren un
rango muy amplio de aplicaciones que van desde transmitir a la CPU determinados datos
hasta visualizar por pantalla el contenido de un archivo.
2. Las utilidades genericas son programas comercializados por el mismo fabricante del orde-
nador, o por otra marcas comerciales, que permiten realizar tareas muy diversas, como por
ejemplo correo electronico, compiladores, bases de datos, procesadores de texto, entre otras.
Estas aplicaciones basan su funcionamiento en el sistema operativo.
3. Los programas y cheros de los usuarios contienen el trabajo que realizan los diferentes
usuarios del ordenador. Su funcionamiento y utilizacion se basa tanto en las utilidades
genericas como en el propio sistema operativo.
Tabla 1.1 Equivalencia entre las diferentes unidades de medida de la informacion
UNIDADES DE MEDIDA DE LA INFORMACION
Valor original Valor equivalente
1 byte 8 bits
1 Kbyte 1024 bytes
1 Mbyte 1024 Kbytes
1 Gbyte 1024 Mbytes
Puesto que el espacio disponible para almacenar todos estos programas y datos es limitado,
los usuarios de un ordenador deben poder saber cuanta informacion contiene cada programa
(en otras palabras: cuanto ocupa). En un ordenador toda la informacion (programas, datos,
etc.) se almacena en sistema binario, esto es, mediante secuencias de unos (1) y ceros (0). A la
cantidad m nima de informacion, es decir, un (1) o un (0), se la denomina bit. Evidentemente,
esta unidad es demasiado peque~na para medir la cantidad de informacion que normalmente se
maneja en un ordenador. En consecuencia, se de nen algunos multiplos del bit (ver tabla 1.1).
© Los autores, 1998; © Edicions UPC, 1998.
1 Introduccion al uso de los ordenadores 7
Se denomina byte a una cadena de ocho bits, por ejemplo:
10101010
01101110
As mismo, se de ne un kilobyte (Kbyte) como 1024 bytes (1024 8 = 8192 bits). Del
mismo modo se de ne un megabyte (Mbyte) como 1024 Kbytes y un gigabyte (Gbyte) como
1024 Mbytes. Mientras que las unidades anteriores son totalmente estandares y ampliamente
utilizadas, en algunos ordenadores se de ne otra unidad denominada bloque que equivale a 512
bytes (1/2 Kbyte).
1.5 Bibliograf a
Bishop, P. Conceptos de informatica. Anaya, 1989.
Borse, G.J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e
ingenier a. Anaya, 1989.
Guilera Aguera, Ll. Introduccion a la informatica. Edunsa, 1988.
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 9
2 Introducci
on a los sistemas operativos
Escrito en colaboraci
on con Miguel 
Angel BRETONES
Objetivos
Establecer la organizaci
on de los archivos seg
un una estructura de directorios y
subdirectorios.
Describir las principales instrucciones del sistema operativo MS-DOS.
Familiarizarse con el entorno MS Windows.
Presentar las principales caracter
sticas de la hoja de c
alculo MS Excel.
2.1 Introducci
on
Se denomina sistema operativo al conjunto de programas y utilidades necesarios para el
funcionamiento del ordenador. Existen en la actualidad multitud de sistemas operativos, gran
parte de ellos asociados casi un
vocamente a un tipo de ordenador. As
, el sistema operativo
de la inmensa mayor
a de los ordenadores personales es el llamado MS-DOS abreviatura de
MicroSoft Digital Operating System.
El conocimiento del sistema operativo consiste, desde el punto de vista del usuario, en
aprender a comunicarse con el ordenador de manera que 
este ejecute 
ordenes. De esta manera,
todo se reduce a conocer la manera de transmitirle instrucciones sin que sea necesario, por
ejemplo, saber c
omo est
a programado el sistema operativo.
El MS-DOS de ahora en adelante DOS naci
o a nales de los 80; actualmente el uso
del entorno Windows se encuentra ampliamente generalizado. El Windows, en cualquiera de
© Los autores, 1998; © Edicions UPC, 1998.
10 M
etodos num
ericos
sus sucesivas versiones, es un sistema operativo basado en la plataforma del DOS es decir,
aprovecha todas las facilidades que 
este proporciona pero con vocaci
on de resultar m
as c
omodo
de manejo para el usuario. Desde este punto de vista, no puede ser considerado estrictamente
distinto del DOS. En muchos casos, tan s
olo cambia el interfase el canal de comunicaci
on o la
manera de transmitir instrucciones con la m
aquina.
A medida que el entorno Windows ha ido evolucionando, las diferencias por cuanto a facilidad
y agilidad de uso se han ido acentuando, pero siempre conservando la mayor parte de ventajas
y carencias del DOS.
Antes de conocer las instrucciones fundamentales de cualquiera de estos sistemas, conviene
de nir algunos conceptos b
asicos generales, que son de aplicaci
on com
un a todo sistema opera-
tivo.
2.2 Estructura de directorios
Cualquier informaci
on, programa, hoja de datos o de resultados, etc., contenida en un
ordenador debe estar almacenada en un archivo o chero. Este t
ermino hace referencia a un
concepto de software: la informaci
on est
a contenida en cheros desde el punto de vista del
software y no del hardware, desde el que se podr
a hablar de informaci
on almacenada en la
memoria RAM, en el disco duro,: : :
El s
mil m
as frecuentemente empleado para describir esta idea consiste en imaginar la memo-
ria del ordenador como un archivador. Cada una de las hojas de los diversos expedientes, car-
petas o libros almacenados en 
el ser
a un chero inform
atico. Naturalmente, las hojas pueden
contener informaci
on muy diversa, desde poes
as a crucigramas, pasando por apuntes de clase,
problemas, etc.
Ahora bien, resulta razonable suponer que los cheros deber
an organizarse siguiendo una es-
tructura ordenada que facilite su gesti
on: es evidente la diferencia que existe entre un archivador
cuyo contenido est
a correctamente clasi cado y las mismas hojas almacenadas desordenada-
mente en una caja. As
, los cheros se agrupan en directorios y subdirectorios, tambi
en llama-
dos carpetas en el entorno Windows. Siguiendo con el ejemplo del archivador, los directorios
representar
an las carpetas donde se guardan las hojas de papel. El concepto de directorio es
general e independiente del sistema operativo concreto que se est
e tratando.
No existe una diferencia formal entre directorio y subdirectorio. Usualmente se denomina
subdirectorio a aquel directorio contenido en otro directorio. Es perfectamente posible que
unos directorios contengan a otros, de la misma manera que una carpeta puede contener, a su
vez, otras carpetas junto con hojas sueltas. An
alogamente, no puede ocurrir que un archivo
contenga directorios.
Se puede establecer as
 una estructura de 
arbol en la que archivos y directorios se organizan
en funci
on de a qu
e directorio superior aquel que los contiene pertenezcan. El directorio que
ocupa la c
uspide del 
arbol es aquel que no est
a contenido por ning
un otro y generalmente se
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 11
denomina directorio principal.
La estructura antes descrita permite una ordenaci
on racional de la informaci
on. Porejemplo,
la gura 2.1 podr
a representar la estructura t
pica del archivador de un estudiante.
Directorio Principal
Programas Apuntes Otros
1er. Programa ejemplo6 Teoría Problemas archivo carta1
caso1 caso2
Fig. 2.1 Estructura de 
arbol de directorios
Como puede observarse, los diversos temas de inter
es est
an agrupados por conceptos o
materias; lo mismo ocurrir
a con los programas  cheros de ordenador. En Helv
etica guran los
nombres de los directorios o subdirectorios, mientras que los archivos aparecen con tipograf
a
corriente.
2.3 Edici
on de un archivo
Hasta ahora se ha de nido cu
al debe ser la estructura interna de organizaci
on de los diversos
archivos en un ordenador; en consecuencia se admite que, de alguna manera, 
estos ya existen.
Ahora bien, c
omo puede generarse un archivo? Resulta evidente que algunos de los cheros
que interesan a los usuarios, como por ejemplo los de resultados, los escribir
an los programas
que cada usuario dise~na. No ocurrir
a lo mismo con el propio programa, un archivo de datos,
una carta, etc.
Para escribir editar archivos en general se utiliza una aplicaci
on conocida gen
ericamente
como editor que facilita esta tarea. Existen multitud de editores en el mercado, cuyas posibili-
dades y facilidad de manejo son bastante semejantes, al menos en el 
ambito de los ordenadores
personales. Adem
as, muchos programas y aplicaciones inform
aticas incorporan su propio sis-
tema de edici
on para la escritura de archivos de datos u otros.
© Los autores, 1998; © Edicions UPC, 1998.
12 M
etodos num
ericos
En general, un archivo queda identi cado por su nombre. 
Este puede ser una cadena de
n
umeros y letras por ejemplo carta1. Adem
as, resulta conveniente que ese nombre vaya
acompa~nado de una extensi
on: una extensi
on no es m
as que una cadena adicional de letras que
informa acerca del contenido del chero. As
, existen un conjunto de extensiones est
andares en
funci
on de que se trate de cheros de texto txt, de resultados res, de datos dat, etc. De
esta forma, el nombre de un archivo podr
a ser carta1.txt. Algunas de estas extensiones son
asignadas de manera autom
atica por defecto por el propio sistema operativo, mientras que
otras se podr
an escoger libremente, respetando o no la convenci
on antes establecida.
En MS-DOS, y en las versiones de Windows anteriores a Windows'95, existe una limitaci
on
acerca del n
umero de caracteres n
umeros o letras que puede contener un nombre o una ex-
tensi
on, que no puede ser superior a 8 y 3 respectivamente. Conviene respetar, en la medida de
lo posible, el mencionado criterio incluso en el caso de trabajar con entornos Windows, ya que
de esta forman se evitar
an, por ejemplo, posibles problemas de compatibilidad de nombres de
archivos en entornos de trabajo en red.
Para editar el archivo carta1.txt desde el entorno de trabajo que proporciona el MS-DOS,
se deber
a invocar la aplicaci
on concreta de edici
on de la que se disponga desde el prompt el
s
mbolo que aparece en la pantalla del ordenador a la izquierda del cursor y a partir del cual se
puede escribir del PC. Para ello en la mayor
a de casos basta con escribir su nombre seguido
del nombre del archivo que se desea editar.
La manera de disponer de una sesi
on de DOS en un ordenador cuyo arranque por defecto
se produzca en entorno Windows consiste, como posteriormente se ver
a, por ejemplo en activar
el icono de acceso directo S
mbolo de MS-DOS , elegir la opci
on MS-DOS dentro del men
u
desplegable de inicio o en reiniciar la computadora en MS-DOS.
2.4 Manipulaci
on de cheros
Dentro de cualquier ordenador, los archivos pueden ser manipulados de manera muy diversa:
pueden ser copiados, borrados, cambiados de nombre, movidos de directorio, etc. En este
apartado se pretenden mostrar las instrucciones elementales del sistema operativo DOS.
Todas las operaciones aqu
 descritas se podr
an realizar de manera semejante a trav
es del
entorno Windows, si bien de un modo m
as visual y c
omodo v
ease apartado 2.5 para m
as
detalles.
Debe tenerse en cuenta que, a diferencia del Windows, el interfase de comunicaci
on en DOS
es estrictamente alfanum
erico: ello quiere decir que las sentencias necesariamente deber
an ser
cadenas de palabras que se introducir
an en el ordenador usando el teclado. Posteriormente
veremos que las posibilidades de empleo del rat
on en sistema Windows ampl
an y simpli can
la comunicaci
on con el ordenador.
Como conceptos previos b
asicos, cabr
a destacar los siguientes:
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 13
2.4.1 Sintaxis de comandos
Cualquier conjunto de instrucciones en DOS una sentencia tiene la misma estructura. Por
ejemplo:
C: DELETE CASO1.* /P
⇑ ⇑ ⇑ ⇑
prompt comando objeto sobre el modificador
que se actúa
El comando es el nombre propio que de ne la acci
on que se desea realizar; en este caso, borrar
el archivo que anteriormente se ha editado. A su vez, dicho comando puede ir acompa~nado de
modi cadores uno, muchos o ninguno que alteran, aunque no de manera sustancial, la acci
on
del comando. En este ejemplo, la variante P todos los cali cadores en DOS comienzan por
 seguidos de una letra obliga a que el ordenador pregunte al usuario si realmente desea
borrar el archivo antes de ejecutar la instrucci
on  el uso de este modi cador resulta por tanto
altamente recomendable!. Finalmente, el objeto sobre el que se act
ua es, naturalmente, el que
recibe la acci
on del comando.
Existen otras posibilidades, directamente importadas de otros sistemas operativos como
el UNIX, para cali car comandos o encadenar sentencias; para aprender su funcionamiento,
conviene consultar por ejemplo el signi cado de los siguientes s
mbolos: j ; , etc.
En las tablas 2.1 y 2.2 se presentan, agrupados por temas, los comandos fundamentales en DOS.
Tabla 2.1 Manejo de directorios
Modificadores
Uso Comando habituales Ejemplo
Cambiar el directorio de trabajo CD CD PROGRAMASPROG1
Ver los archivos y directorios DIR P W S DIR /W
contenidos en el directorio de trabajo
Crear un directorio MKDIR MKDIR PRUEBAS
Borrar un directorio RMDIR RMDIR PROG2
Tabla 2.2 Manipulaci
on de cheros
Modificadores
Uso Comando habituales Ejemplo
Listar un archivo TYPE TYPE C:PROG2CASO1.FOR
Copiar un archivo COPY V COPY CASO1.FOR ..*.*
Cambiar de nombre un archivo RENAME REN CASO1.FOR *.TXT
Mover un archivo MOVE MOVE *.* APUNTES
Borrar un archivo DELETE P DELETE *.* /P
© Los autores, 1998; © Edicions UPC, 1998.
14 M
etodos num
ericos
La primera tabla hace referencia a las operaciones m
as habituales en el manejo de directorios,
como pueden ser su creaci
on o borrado.
La segunda tabla contiene las sentencias relacionadas con la gesti
on de archivos y su relaci
on
con los directorios a los que pertenecen. A lo largo de este apartado se comprobar
a el signi cado
concreto de algunos de los ejemplos que acompa~nan a los distintos comandos.
Muchos de ellos se pueden abreviar a la hora de ser introducidos en el ordenador. De esta
manera, el comando DELETE puede ser abreviado empleando DEL, por ejemplo. Otro tanto
ocurre con el comando RENAME, como puede tambi
en apreciarse en la tabla 2.2.
Uno de los comandos m
as empleados es el destinado a conocer los archivos y directorios
contenidos en un determinado directorio.
La sentencia DIR proporciona dicha informaci
on, indicando los nombres y extensiones de los
archivos. Los directoriosaparecendiferenciadosde los archivospor ir acompa~nadosde la palabra
clave DIR .
2.4.2 Comodines
Como se puede observar en el ejemplo del subapartado precedente, el archivo caso1 no
queda especi cado por un nombre y una extensi
on, sino que en lugar de 
esta 
ultima aparece un
asterisco *. En DOS, al asterisco se le denomina comod
n.
Un comod
n es un car
acter que act
ua como sustituto de cualquier otro car
acter incluido el
espacio en blanco o grupo de caracteres. El mencionado concepto funciona de manera id
entica
en entorno Windows.
De esta forma, la instrucci
on completa que serv
a de ejemplo en el subapartado 2.4.1 es-
peci ca que se borren, previa con rmaci
on, todos los archivos caso1 sea cual sea su extensi
on
caso1.txt, caso1.dat, caso1.res, etc.
2.4.3 Especi caci
on de directorios
En DOS, un archivo queda de nido por su nombre y su extensi
on caso1.for; ahora
bien, resulta perfectamente posible la existencia de dos archivos con igual nombre y extensi
on,
situados en directorios diferentes. En ese caso, c
omo distinguirlos? Para responder a esta
pregunta, en la gura 2.2 se presenta una posible estructura de directorios.
Suponiendo que el archivo caso1.for est
e situado en el subdirectorio PROG1, el nombre com-
pleto de dicho archivo ser
a C:nPROGRAMASnPROG1ncaso1.for. Obs
ervese que, de esta manera,
cualquier archivo queda caracterizado un
vocamente, a pesar de que pueda compartir con otros
nombre o extensi
on.
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 15
C:
(Directorio Principal)
PROGRAMAS APUNTES
PROG1 PROG2
Fig. 2.2 Estructura de directorios
Al especi car un archivo tan s
olo por su nombre y extensi
on caso1.for se asume que 
este
se encuentra en el directorio de trabajo. El usuario puede decidir en cu
al de los directorios de
los que eventualmente disponga quiere trabajar: eso signi ca que las sentencias que ejecute se
realizar
an en ese directorio. As
, por ejemplo, cuando en el apartado 2.3 se hac
a referencia a
la edici
on del archivo carta1.txt, 
este quedaba grabado en el directorio de trabajo.
Al inicio de una sesi
on, el directorio de trabajo, tambi
en llamado directorio por defecto,
es el directorio principal. Empleando la sentencia CD el usuario puede cambiar el directorio
de trabajo. As
, en el ejemplo de la tabla 2.1 se puede ver cu
al es la sentencia que hay que
introducir para cambiar desde el directorio principal al que contiene caso1.for.
Trabajando desde cualquier directorio, el usuario puede especi car cualquier archivo en
una sentencia utilizando bien su nombre y extensi
on o bien su nombre completo. Como se
ha comentado anteriormente, para hacer referencia a un archivo contenido en el directorio de
trabajo basta emplear su nombre y extensi
on. Por contra, si el archivo por ejemplo caso1.for
est
a contenido en otro subdirectorio PROG2 empleando como directorio de trabajo el principal
hay que usar:
C:n TYPE C:nPROGRAMASnPROG2nCASO1.FOR
que es el ejemplo que gura en la tabla 2.2. Como puede verse, el uso del nombre completo de
un archivo permite referirse a 
el con independencia del directorio por defecto que se est
e usando
en ese momento, si bien su abuso puede resultar farragoso a la hora de escribir las sentencias
que se quieran ejecutar.
Existe una 
ultima posibilidad a la hora de especi car los nombres de los archivos presentes
© Los autores, 1998; © Edicions UPC, 1998.
16 M
etodos num
ericos
en un ordenador, que representa un t
ermino intermedio entre los casos anteriores. En 
este el
nombre de un archivo no situado en el directorio de trabajo se especi ca describiendo el camino
que se debe recorrer, siguiendo el 
arbol de directorios, para acceder a 
el desde el directorio de
trabajo.
As
 por ejemplo, en la tabla 2.2 aparece la manera como se deber
a copiar el archivo
caso1.for situado en el subdirectorio PROG1 en el directorio PROGRAMAS. Observando el es-
quema de la gura 2.2, el archivo debe quedar copiado en el nivel superior del 
arbol respecto
al que se encuentra inicialmente. La especi caci
on formada por dos puntos consecutivos ..
signi ca precisamente ascender un nivel en el 
arbol de directorios. A partir de ah
, componiendo
ascensos y descensos en los niveles de directorios, siempre separados por barras n, se puede
describir el nombre relativo de un archivo. Se debe tener en cuenta que, a diferencia de lo que
ocurr
a anteriormente, el nombre relativo s
 depende del directorio de trabajo.
Resulta f
acil imaginar que existen muchas otras instrucciones y posibilidades en DOS; aqu

tan s
olo se han destacado las b
asicas. En cualquier caso, si desea saber m
as cosas, siempre
queda el recurso al sistema de informaci
on que el propio sistema operativo pone a disposici
on
del usuario; con 
el, se puede pedir ayuda acerca de las variantes y posibilidades de un comando
cuyo nombre conozcamos. Esto se consigue a trav
es del cali cador ? . De esta forma, basta
ejecutar
C:n DIR ?
Para obtener toda la informaci
on disponible sobre el comando DIR.
Windows'95 marca el declive del uso de las pantallas de MS-DOS, como v
a para la ma-
nipulaci
on de archivos o la ejecuci
on de programas. Entre las causas de este fen
omeno cabe
destacar la masiva adaptaci
on de los programasy aplicaciones inform
aticas al trabajoen entorno
Windows, as
 como la mejora en las capacidades y versatilidad del propio sistema operativo.
2.5 Utilizaci
on del entorno Windows
El MS-Windows es probablemente el sistema operativo m
as popular. A diferencia de lo
que ocurr
a con el sistema DOS, en el que est
a basado, toda la manipulaci
on de cheros puede
realizarse de una manera visual, esto es, casi sin la intervenci
on de sentencias alfanum
ericas o
el uso del propio teclado. Antes de presentar el entorno de Windows, es importante destacar
un elemento de hardware fundamental en la gesti
on del sistema: el rat
on. El rat
on proporciona
un cursor m
ovil a lo largo de la pantalla, que permite ejecutar instrucciones, seleccionar iconos
y aplicaciones, arrastrar otros objetos, etc. Existen multitud de ratones, la mayor
a de ellos
con 2, 3 o 4 botones; en Windows est
andar el m
as importante es el bot
on izquierdo, el cual, en
funci
on de su uso, tiene diversas aplicaciones. Por ejemplo:
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 17
1. Pulsar una vez simple-clic el bot
on izquierdo sirve para activar o desactivar ventanas o,
en general, para seleccionar los diversos elementos del Windows.
2. Pulsar de manera r
apida y repetida doble-clic el bot
on izquierdo tiene el efecto de ejecutar
alg
un comando o de activar alguna aplicaci
on representada por un icono. Tambi
en se
emplea para restituir ventanas u otras acciones relacionadas.
3. Finalmente, manteniendo el bot
on izquierdo pulsado sin soltarlo se consigue arrastrar co-
mandos u objetos.
Como posteriormente se comentar
a, 
esta es una de las maniobras fundamentales del en-
torno Windows y su utilizaci
on resulta b
asica en aplicaciones como un procesador de textos
o una hoja de c
alculo, entre otras. A la vez, tambi
en sirve para mover elementos, alterar
el tama~no de las ventanas, etc.
4. Una vez seleccionado un objeto empleando el procedimiento descrito en el punto 1, el
bot
on derecho del rat
on suele permitir ejecutar determinadas acciones sobre el objeto, que
normalmente depender
an de su naturaleza.
Ello se consigue gracias a la aparici
on, al pulsar el bot
on derecho, de un men
u desplegable
donde se contienen las posibles acciones a ejecutar.
5. As
 mismo, el solo posicionamiento del puntero del rat
on sobre determinados elementos
puede producir efectos.
Esta acci
on generalmente permitir
a obtener informaci
on y eventualmente ayuda acerca
del objeto al cual se apunte. Para ello basta dejar unos segundos quieto el cursor, y
aparecer
a un globo de ayuda acerca del mencionado objeto; procediendo seg
un el punto 1,
se obtendr
a la informaci
on.
El uso concreto de todos y cada uno de los movimientos del rat
on depende mucho de la
situaci
on espec
 ca y de la habilidad del usuario; su manejo preciso y, en general, el de todo el
sistema Windows, se convierte as
 en un proceso de aprendizaje, que contiene dosis importantes
de intuici
on y experiencia.
2.5.1 Los elementos del entorno Windows
La gura 2.3 muestra el aspecto que presenta una pantalla t
pica de un ordenador personal
funcionando en entorno Windows. Los globos de ayuda que naturalmente no aparecen en la
pantalla real indican los nombres de los principales elementos que conforman el sistema de
ventanas del Windows.
© Los autores, 1998; © Edicions UPC, 1998.
18 M
etodos num
ericos
Botón de
inicio
Barra de tareas
Área de
mensajes
Iconos de
acceso directo
Tapiz
Fig. 2.3 Aspecto general del entorno Windows
En el lenguaje propio del Windows, lo que aparece en la gura 2.3 es el escritorio de
nuestro ordenador desktop en las versiones inglesas del programa. Sobre 
el se encuentran
todos los elementos presentes y disponibles para el usuario en cada momento, las aplicaciones,
los controles, las propias ventanas de trabajo, etc.
El escritorio se encuentra dividido en dos zonas: el tapiz y la barra de tareas. El tapiz ocupa
la mayor parte de la pantalla y sobre 
el se incrustar
an dos tipos de elementos fundamentales
en Windows: los iconos y las ventanas de trabajo. La barra de tareas es la zona diferenciada del
tapiz que normalmente se encuentra en el lado inferior de la pantalla. Como su propio nombre
indica, sobre ella aparecer
a informaci
on relativa, por ejemplo, a las aplicaciones que en aquel
momento se est
en ejecutando. As
, en el ejemplo de la gura 2.3, la barra de tareas aparece
vac
a.
De entre los iconos que aparecen en el tapiz, existen b
asicamente de dos tipos:
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 19
1. Por una parte, los propios del sistema, como Mi PC, Entorno de red, Mi Malet
n o
la Papelera de reciclaje.
Cada uno de ellos tiene una funci
on espec
 ca pero en general est
an relacionados con la
gesti
on y el manejo de archivos. As
, desde Mi PC se puede acceder al conjunto de
carpetas que contiene el ordenador, de manera muy semejante a la propia de otros sistemas
operativos como el OS de Macintosh. De la misma forma, cualquier archivo borrado pasa a
ser depositado en la Papelera de reciclaje.
2. Por otra parte, existen los iconos de acceso directo, que se distinguen de los primeros por
tener dibujada una echa en la esquina inferior izquierda.
Se trata de iconos asignados un
vocamente a las aplicaciones m
as frecuentemente empleadas
por el usuario.
El efecto de ejecutar sobre ellos un doble-clic con el rat
on consiste en la activaci
on de la
aplicaci
on deseada. En concreto, en la gura 2.3 se aprecian los iconos de acceso directo a
dos aplicaciones, que son la hoja de c
alculo Microsoft Excel, sobre la que se hablar
a m
as
tarde, y el navegador de Internet Netscape Communicator.
Finalmente, el icono de acceso al MS-DOS posibilita la entrada en el modo MS-DOS, que
permite aplicar lo descrito en el apartado 2.4.
En la barra de tareas existen, a su vez, otros dos elementos integrados m
as. Por una parte,
est
a el 
area de mensajes; en ella suelen aparecer una serie de iconos identi cativos de diversos
procesos presentes en el sistema.
Entre los m
as habituales destacan el reloj horario, el funcionamiento de los altavoces o, en
general, de cualquier perif
erico como tarjetas de red, dispositivos de almacenamiento externo,
la actividad de alguna aplicaci
on antivirus, etc. Haciendo un doble-clic sobre cada uno de ellos
se puede obtener informaci
on acerca de su estado de actividad.
En segundo lugar, aparece el bot
on de inicio. Se trata del objeto m
as importante del escritorio,
puesto que bajo 
el se encuentra el men
u desplegable principal. Si se ejecuta un simple-clic sobre
el bot
on de inicio aparecer
a el men
u de la gura 2.4.
En 
el aparecen los grandes grupos de objetos presentes en el sistema. As
, por ejemplo,
desde la opci
on Ayuda se podr
a acceder al sistema de ayuda interactiva de Windows, desde
la opci
on Cerrar el sistema se podr
a apagar el equipo o reiniciarlo en modo MS-DOS, etc.
La opci
on Programas del men
u desplegable principal contiene recogidas por grupos todas
las aplicaciones y los programas presentes en el ordenador. Los grupos existentes representan
los conjuntos de programas que contiene el sistema y que est
an asociados a una aplicaci
on
concreta.
As
, por ejemplo, en la gura 2.4 se aprecian, entre otros, el grupo asociado al paquete de
programas Microsoft O ce Microsoft Excel, Microsoft Word y otros o a los accesorios del
sistema. Cada grupo est
a representado por un icono que, como su propio nombre indica, es un
s
mbolo que representa al objeto en cuesti
on.
© Los autores, 1998; © Edicions UPC, 1998.
20 M
etodos num
ericos
Fig. 2.4 Men
u desplegable de inicio
Entre las diversas opciones del men
u de programas tambi
en aparece la opci
on para abrir
una ventana de MS-DOS. As
, el icono de acceso directo anteriormente aludido y que se hallaba
en el tapiz no representa sino un atajo para ejecutar la mencionada aplicaci
on, sin tener que
desplegar los men
us que aparecen en la gura 2.4. Seleccionando esta opci
on por cualquiera de
los dos procedimientos se conseguir
a id
entico resultado, eso es, la activaci
on de una ventana en
modo MS-DOS.
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 21
2.5.2 Las ventanas del Windows
Una de las aplicaciones fundamentales que proporciona el entorno Windows es el Explo-
rador de Windows. Con ella se puede gestionar todo lo referente al manejo de archivos y
directorios especi cado en el apartado 2.4, pero desde el punto de vista del Windows; as

por ejemplo, se podr
a cambiar el nombre de los archivos, su lugar de almacenamiento, borrar
archivos,etc.
El sistema Windows basa todo su funcionamiento en la representaci
on de un conjunto de
s
mbolos y ventanas. Cada aplicaci
on en ejecuci
on lleva asociada una o m
as ventanas que
quedan re ejadas en el tapiz.
El aspecto de la ventana del Explorador de Windows, para el ejemplo descrito en la gura
2.2, podr
a ser el que aparece en la gura 2.5.
Fig. 2.5 Explorador de Windows
Esta ventana se abre seleccionando la opci
on del Explorador de Windows en el men
u des-
plegable de programas, seg
un se aprecia en la gura 2.4. De la misma forma, para ejecutar la
mencionada acci
on tambi
en se habr
a podido emplear el icono de acceso directo presente en el
tapiz del escritorio.
© Los autores, 1998; © Edicions UPC, 1998.
22 M
etodos num
ericos
En el explorador de Windows, los archivos y directorios aparecen gr
a camente representa-
dos. En la zona de la izquierda aparece el 
arbol de directorios correspondiente a la unidad de
trabajo. Una vez se ha seleccionado un directorio haciendo un simple-clic sobre el icono de
la carpeta correspondiente, en la ventana de la derecha aparecen los archivos y subdirectorios
que contiene. Ya sea a trav
es de las sentencias ejecutables desde la barra de men
us, o desde los
men
us desplegables que se pueden obtener con el bot
on derecho del rat
on, se pueden realizar
todas las operaciones habituales en la gesti
on de archivos y directorios copiar, renombrar,
eliminar, etc.. Tambi
en se puede acceder a los diversos directorios, arrastrar archivos para
moverlos, etc.
Todas las ventanas de Windows presentan una estructura muy parecida. En general, una
ventana abierta consta, al menos, de los siguientes elementos:
1. Una barra de t
tulo, que contiene el nombre de la ventana; su color indica si dicha ventana
est
a activa o no. En Windows, tan s
olo puede haber una ventana activa en cada momento,
si bien puede haber m
as de una ventana abierta. La diferencia entre un concepto y otro
reside en que las instrucciones que el usuario introduce en el ordenador a trav
es del rat
on
o del teclado se ejecutan siempre en la ventana activa. Para activar o desactivar ventanas
basta con hacer un simple-clic sobre ellas. En general, los procesos que se ejecutan desde
una ventana no se detienen por su desactivaci
on. Se entiende por procesos aquellas acciones
autom
aticas que no requieren de la intervenci
on directa del usuario a trav
es del teclado o
del rat
on.
2. La barra de men
u contiene una serie de llamadas gen
ericas, tales como, por ejemplo, en
este caso Archivo, Edici
on, Ver, etc. Cuando se selecciona simple-clic una de 
estas
con el rat
on, aparece un men
u desplegable. En 
el se encuentran las opciones que pueden
ejecutarse seleccion
andolas con el rat
on normalmente relacionadas con el tema que gura
en la barrade men
us. As
, por ejemplo, en el desplegable Archivose encontrar
ancomandos
relacionados con el manejo de los archivos, tales como crear nuevos archivos, etc. Para
emplear estos men
us desplegables es necesario situar el cursor del rat
on sobre la opci
on
deseada y hacer un simple-clic.
3. La barra de movimiento sirve para desplazar la parte de la ventana visible tanto en sentido
vertical como horizontal, en el caso en que, dado el tama~no de la ventana, no se pueda ver
todo su contenido. La dimensi
on de las ventanas puede ser modi cado arrastrando con el
rat
on sus esquinas. En el caso del explorador de Windows, la ventana principal est
a a su vez
dividida en dos ventanas secundarias, cada una de las cuales cuenta con sus propias barras
de movimiento.
4. Finalmente, en el lado derecho de la barra de t
tulos aparecen unos botones cuadrados cuya
funci
on tambi
en est
a destinada al manejo de las ventanas. Estos botones son, de izquierda
a derecha:
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 23
Bot
on principal de la aplicaci
on: Normalmente representado por el icono
de la propia aplicaci
on. Si se selecciona con un simple-clic, aparece el men
u
desplegable de control de la ventana. Entre otras funciones, este men
u
permite abrir o cerrar la ventana, minimizarla, etc.
Botones de minimizar y maximizar: A n de evitar que todas las aplica-
ciones abiertas durante una sesi
on de trabajo tapen la pantalla, existe la
posibilidad de que algunas o todas sean reducidas minimizadas. De esta
forma, el bot
on de la izquierda transforma la aplicaci
on en su icono en la
barra de tareas, mientras que el de la derecha la extiende hasta ocupar
toda la pantalla. Para devolver una aplicaci
on minimizada a su estado nor-
mal basta hacer un simple-clic sobre el icono correspondiente en la barra de
tareas.
Botones de minimizar y restaurar: En la situaci
on en que la ventana haya
sido maximizada empleando los botones anteriores, 
estos son sustituidos
por la pareja minimizar restaurar. Con el de la izquierda se sigue pasando
desde la ventana al icono, mientras que con el de la derecha se restituye el
tama~no original que ten
a la ventana antes de maximizarla.
Bot
on de ayuda: Puede aparecer en algunas ventanas especiales, como por
ejemplo las relacionadas con los paneles de control o la con guraci
on del
sistema, para proporcionar ayuda espec
 ca sobre el contenido de las mis-
mas.
Bot
on de cerrar: Se emplea en todos los casos para cerrar la ventana y,
consiguientemente, la aplicaci
on que 
esta pueda representar.
A diferencia de otros botones, que pueden estar o no presentes en la ventana,
siempre se encontrar
a el bot
on de cerrar en el extremo superior derecho de
todas las ventanas.
2.6 Introducci
on al manejo de Excel
Una de las aplicaciones m
as empleadas, de entre todas las que pueden ejecutarse bajo
Windows, es la hoja de c
alculo Excel. Una hoja de c
alculo es una potente herramienta con la
que efectuar, con gran rapidez y de manera interactiva, multitud de c
alculos aritm
eticos. Por
ejemplo, con una hoja de c
alculo un usuario puede desde representar en gr
a cos los resultados
de sus programas hasta construir complejas macros, pasando por todo tipo de operaciones
matem
aticas.
El objetivo de este apartado no es describir exhaustivamente el funcionamiento de Excel
por lo dem
as, bastante semejante al de otras hojas de c
alculo existentes en el mercado, como
por ejemplo Lotus 1-2-3 o Quattro Pro sino facilitar los conocimientos b
asicos necesarios para
poder empezar a trabajar con ella.
Antes de comenzar, al igual que en el apartado anterior, en la gura 2.6 se presenta cu
al es
el aspecto de la ventana asociada a Excel esto es, aquella que se abre cuando se hace doble-clic
© Los autores, 1998; © Edicions UPC, 1998.
24 M
etodos num
ericos
sobre el icono de acceso directo de la gura 2.3.
La gura 2.6 contiene los elementos b
asicos descritos en toda ventana, como las barras de
t
tulo, men
u y movimiento o los botones. Adem
as de estos elementos existen otros propios ya
de la aplicaci
on en este caso la hoja de c
alculo como por ejemplo:
1. Los botones de herramientas situados bajo la barra de men
u, que est
an asociados es decir
son sin
onimos de todos o algunos de los comandos de los men
us desplegables de la barra
de men
u. Haciendo simple-clic sobre ellos se ejecuta la misma acci
on que seleccionando la
orden del correspondiente men
u, lo que agiliza el manejo de la hoja de c
alculo.
2. La barra de f
ormulas, inmediatamente por debajo de los botones de herramientas. All
 se
ir
an re ejando los c
alculos que el usuario vaya programando.
3. Las celdas de Excel. Se trata de cada uno de los rect
angulos en que est
a dividida el 
area
de trabajo, cada uno de los cuales se identi ca con dos coordenadas: una letra creciente en
sentido horizontal y un n
umero en vertical. Las reglas que contienen los n
umeros y letras
de las celdas aparecen en los bordes de la ventana.
4. Las pesta~nas de hoja, situadas sobre la barra inferior izquierda, que permiten seleccionar
cada una de las hojas o diversas 
areas de trabajo de las que consta una hoja de c
alculo
Excel.
5. Los botones de desplazamiento de pesta~na, situados inmediatamente a la izquierda y que
permiten cambiar de hoja.
6. La barra de estado, emplazada en extremo inferior, donde aparecen mensajes en funci
on de
la acci
on que se est
a llevando a cabo en cada momento.
Las celdas son los elementos fundamentales de la hoja de c
alculo: a cada celda se podr
a
asociar un n
umero o una f
ormula cuyo resultado, en general tambi
en ser
a un n
umero. De
esta manera, a base de realizar c
alculos aritm
eticos en las diversas celdas es como se resuelve
un problema con una hoja de c
alculo.
La gran potencia de estos sistemas radica en la facilidad para vincular unas operaciones arit-
m
eticas a otras, lo que permite realizar c
alculos con una simplicidad extraordinaria: con todo,
el mejor modo de comprender los fundamentos de Excel es conocerlos a trav
es de un sencillo
ejemplo como el siguiente:
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 25
Fig. 2.6 Hoja de c
alculo Excel
2.6.1 Paso 1: Introducci
on de constantes
Para asociar un escalar a una celda, basta seleccionar la casilla donde se desea colocarlo
haciendo simple-clic sobre ella con el rat
on e introducir el n
umero. Por ejemplo, si se desea
colocar los valores 1, 2 y 3 en las celdas A2, A3 y A4, se debe seleccionar con el rat
on cada una de
ellas e introducir respectivamente los valores anteriores. Una vez pulsado Return, el resultado
obtenido es:
© Los autores, 1998; © Edicions UPC, 1998.
26 M
etodos num
ericos
2.6.2 Paso 2: Introducci
on de f
ormulas
A continuaci
on se realizar
a una operaci
on elemental con las tres casillas que ya contienen
n
umeros; para ello, en la celda B2 se de ne la operaci
on consistente en tomar el n
umero 1,
multiplicarlo por 2 y sumarle 4 unidades. La manera de proceder consiste en seleccionar la
celda B2 e introducir por teclado la f
ormula. A medida que el usuario la escribe, 
esta aparece
re ejada tanto en la barra de f
ormulas como en la propia celda:
Como puede observarse, existen algunas diferencias con respecto al paso precedente:
1. En primer lugar, el primer car
acter introducido es el signo de igualdad =; 
esta es la manera
de decirle a Excel que efect
ue el c
alculo que a continuaci
on se encuentra. Una vez pulsada la
tecla Return, la celda B2 dejar
a de contener la f
ormula para mostrar el valor de la operaci
on,
seg
un se ve en el dibujo posterior en este caso 1 x 2 + 4 = 6.
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 27
2. En segundo lugar, obs
ervese que en la posici
on de la f
ormula donde deber
a aparecer la cifra
1 gura la coordenada de la casilla en que 
este se encuentra. Esto se consigue, durante
la fase de escritura de la f
ormula, haciendo simple-clic sobre la casilla cuyo valor se desea
introducir en el momento en que 
esta debe gurar en la f
ormula.
Existe una diferencia fundamental entre introducir el 1 y la coordenada A2 que en este
momento tiene como valor 1; la manera aqu
 empleada establece una relaci
on din
amica
entre las casillas A2 y B2, como se ver
a posteriormente en el paso 4.
Este ser
a hasta ahora el resultado del paso 2:
2.6.3 Paso 3: Arrastre de f
ormulas
A continuaci
on se selecciona la celda B2 con simple-clic y se coloca el cursor en el 
angulo
inferior derecho de la celda, justo hasta que el cursor cambia de la forma habitual de echa a
la de una cruz +. Seguidamente, manteniendo el bot
on pulsado, se arrastra el rat
on desde la
casilla B2 hasta la B4. Al soltar el bot
on, se obtiene:
© Los autores, 1998; © Edicions UPC, 1998.
28 M
etodos num
ericos
Lo que ha ocurrido es que la f
ormula que conten
a la celda B2 ha sido arrastrada a las
casillas B3 y B4. Eso signi ca que si la f
ormula original de B2 era  A2 * 2  + 4 la que est
a
calculada en B3 es  A3 * 2  + 4. En la barra de f
ormulas puede verse a qu
e corresponde la
casilla B4: el hecho de que se haya sustituido la casilla A2 por la A3 o la A4, siguiendo el sentido
del arrastre obedece a que cuando se arrastra una f
ormula, los v
nculos tambi
en son arrastrados
en el mismo sentido. Esto puede ser evitado, en el caso en que se desee, anteponiendo el s
mbolo
de d
olar $ en las especi caciones de las coordenadas de los v
nculos.
As
 por ejemplo, en el caso de introducir en el paso 2 la f
ormula como  $A$2 * 2  +
4 el resultado que quedar
a arrastrado en la casillas B3 y B4 ser
a  $A$2 * 2  + 4. La
anteposici
on del car
acter $ a una coordenada de la y o columna de una casilla tiene el efecto
de bloquearla, impidiendo que se modi que din
amicamente cuando la f
ormula es arrastrada.
En una misma f
ormula pueden coexistir casillas libres, bloqueadas por las, por columnas,
completamente bloqueadas, etc.
El efecto conseguido arrastrando celdas es el mismo que puede obtenerse con las opciones
de cortar y pegar f
ormulas que guran tanto en el desplegable asociado a Edici
on como en
los correspondientes botones de herramientas.
2.6.4 Paso 4: Modi caci
on din
amica
Finalmente, continuando con el ejemplo, al sustituir el valor original de la casilla A2, por un
5, se obtiene:
Como se puede observar, el valor de la casilla B2 se ha actualizado de 6 a 14 es decir 5 x
2 + 4. No ocurre lo mismo con las f
ormulas arrastradas, dado que al depender 
unicamente
de A3 y A4 no deben sufrir modi caciones. Este proceso se realiza autom
aticamente en todos
los v
nculos de ah
 el nombre de din
amicos presentes en una hoja de c
alculo. En este hecho
y en el anterior el concepto de arrastre es donde radica gran parte de su potencia.
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 29
El ejemplo anterior es una muestra muy simpli cada de las capacidades de Excel, muchas
de las cuales s
olo se van conociendo con el uso del programa.
Problema 2.1:
A partir del ejemplo descrito en el subapartado 2.6.3, modi carlo de manera que
en la columna C de la hoja de c
alculo aparezcan las ordenadas de la funci
on
y = 3x
2 ,2x ,3 siendo A la columna de las abscisas.
Problema 2.2:
Extender el c
alculo de las funciones y = 2x ,4 e y = 3x
2 ,2x ,3 al intervalo
en x -2,2 , obteniendo puntos cada 0.5 unidades de x.
Problema 2.3:
Escribir una hoja de c
alculo en la que aparezcan de manera ordenada las tablas
de multiplicar de los n
umeros pares entre 2 y 10 para los n
umeros comprendidos
entre 1 y 20. Para conseguirlo, se procurar
a emplear la mayor cantidad posible
de v
nculos din
amicos entre las diversas f
ormulas necesarias, de manera que la
cantidad de celdas en las que se deban introducir expl
citamente f
ormulas resulte
m
nima.
2.6.5 Representaci
on gr
a ca
Un aspecto muy 
util, por cuanto a la representaci
on de resultados se re ere, consiste en
la posibilidad que proporciona Excel de transformar conjuntos de datos en gr
a cos. As
 por
ejemplo, una vez generadas las coordenadas X Y de una gr
a ca, puede emplearse el Asistente
para gr
a cos para construir el correspondiente dibujo, que quedar
a insertado en la zona de la
hoja de c
alculo que se escoja.
El mencionado asistente consiste en un conjunto de pantallas de ayuda paso a paso que
orientan e informan al usuario acerca del proceso que se debe seguir para obtener el gr
a co
deseado. El Asistente para gr
a cos proporciona m
ultiples posibilidades a la hora de escoger
la forma, tipo y formato del gr
a co que se quiere representar, y s
olo requiere de un poco de
esfuerzo para familiarizarse con su uso.
As
, continuando con el ejemplo anterior, los valores calculados en el subapartado 2.6.3
pueden ser interpretados como 3 puntos de la recta y = 2x +4. Al dibujar los datos anteriores
se obtiene:
© Los autores, 1998; © Edicions UPC, 1998.
30 M
etodos num
ericos
Problema 2.4:
Representar gr
a camente las funciones del problema 2.2 y estimar sus puntos de
intersecci
on.
2.6.6 Importaci
on de resultados
Finalmente, la 
ultima gran cualidad de Excel hace referencia a la posibilidad de adquirir
conjuntos de datos generados por otros programas, por ejemplo los archivos de resultados de
los programas de FORTRAN.
As
, casi cualquier conjunto de datos escrito en un chero puede ser importado de manera
autom
atica por la hoja de c
alculo, esto es, sin necesidad de introducirlos manualmente. A
partir de ese momento, siguiendo lo comentado en los anteriores subapartados, pueden realizarse
c
alculos adicionales con esos resultados o simplemente obtener representaciones m
as vistosas
de los mismos, por ejemplo con la ayuda de gr
a cos.
Para importar archivos de resultados debe emplearse el Asistente para importaci
on de texto
que se activa autom
aticamente en el momento de intentar abrir con Excel un archivo que no
tenga formato de hoja de c
alculo. Por 
ultimo, debe tenerse en cuenta que, en general, Excel
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 31
identi ca el punto decimal con el car
acter , de modo que el archivo de datos que se quiera
importar debe respetar esta convenci
on.
Problema 2.5:
El 
ultimo problema de este cap
tulo ilustra una de las m
ultiples aplicaciones de
las hojas de c
alculo; concretamente, se calcular
a el valor de las amortizaciones de
un cr
edito a un inter
es dado, as
 como su tipo anual equivalente TAE.
Muchas de las f
ormulas y procedimientos necesarios para resolver este problema
representar
an una novedad en el manejo de Excel y est
an dirigidas a contribuir a
su aprendizaje.
Previamente, resulta necesario plantear el problema que se desea resolver. Para
calcular las cuotas jas de pr
estamos con inter
es constante, se de ne x0 como el
capital prestado en t = t0 instante inicial a un inter
es jo i expresado en tanto
por uno.
C
alculo de cuotas
La liquidaci
on del pr
estamo se realizar
a en N pagos por a~no por ejemplo N son
los periodos de liquidaci
on anual, 12 si son liquidaciones mensuales; as
, el inter
es
asociado a cada periodo de liquidaci
on ser
a de i=N .
Al nal del primer periodo, es decir en t = t1, el capital adeudado el necesario
para cancelar el pr
estamo ser
a de x0 1 + i=N . Ahora bien, en vez de cancelar el
pr
estamo se paga una cuota c l
ogicamente inferior a la cantidad total adeudada.
La deuda ser
a ahora x1 = x0 1 + i=N  ,c. Este proceso se repite sucesivamente
hasta la total extinci
on del cr
edito. Expresando lo anterior en una tabla se tiene:
Vencimiento Capital Prestado
t0 x0
t1 x1 =x0
1 + i
N

,c
t2 x2 =x0
1 + i
N

2
,c

1 +
1 + i
N


t3 x3 =x0
1 + i
N

3
,c

1 +
1 + i
N

+
1 + i
N

2

: : : : : :
tn xn =x0
1 + i
N

n
,c
N
i
1 + i
N

n
,1

Este proceso se detiene cuando xn se anula es decir, cuando ya no se tiene m
as
deuda. A partir de la ecuaci
on xn = 0 resulta f
acil determinar el valor de la
cuota que se debe pagar c, en n periodos totales de liquidaci
on:
c = x0
i
N
,
1 + i
N
n
,
1 + i
N
n ,1
As
, el total pagado es de nc y por consiguiente el costo real del pr
estamo puede
© Los autores, 1998; © Edicions UPC, 1998.
32 M
etodos num
ericos
evaluarse en nc ,x0.
La f
ormula anterior es 
util para determinar las cuotas mensuales que hay que
pagar, c, o el costo del pr
estamo nc ,x0, a pesar de no contemplar las variaciones
reales del valor del dinero.
A pesar de ello y puesto que c es un n
umero real, la f
ormula que se emplea en la
pr
actica tomar
a el entero m
as pr
oximo restos.
Tipo Anual Equivalente
Es usual tanto en el 
ambito de pr
estamos como en el de intereses de cuentas
bancarias que la informaci
on emitida por las entidades de ahorrose re era al TAE.
Por tanto, resulta necesario conocer c
omo se relaciona el inter
es anual i expresado
en tanto por uno con el tipo anual equivalente, TAE tambi
en expresado como
un tanto por uno.
Si hay N periodos de liquidaci
on anual, el inter
es asociado a cada periodo de
liquidaci
on es de nuevo i=N . Sea x0 la cantidad prestada o invertida en t = t0
instante inicial. La acumulaci
on de los intereses para cada periodo A~no=N = 4t
ser
a:
Vencimiento Capital Prestado o Invertido
t0 x0
t1 = t0 + 4t x0
1 + i
N

: : : : : :
tN = t0 + N 4t = t0 + A~no x0
1 + i
N

N
En consecuencia, si se de ne el TAE como el inter
es anual equivalente, entonces
debe veri car:
1 + TAE =
1 + i
N

N
A partir de esta f
ormula es f
acil deducir la relaci
on entre i y TAE:
TAE =
1 + i
N

N
,1
i =
h
1 + TAE
1
N ,1
i
N
Se desea elaborar una hoja de c
alculo que permita conocer de forma por-
menorizada las cuotas, amortizaciones de capital y los intereses del periodo de
liquidaci
on dado el capital prestado, el n
umero de periodos totales para devolverlo
y el inter
es anual o el TAE del pr
estamo.
El resultado nal deber
a ser semejante a la hoja de c
alculo que puede encon-
trarse a continuaci
on. Seguidamente se indican algunas de las instrucciones clave
necesarias para obtenerla.
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
A B C D E
AMORTIZACIONES DE UN PRÉSTAMO
TAE: 12,13%
Periodos anuales: 12
Interés: 11,50%
Capital: 1.500.000 Pts
Periodos totales: 24
Cuota: 70.260 Pts Total a pagar: 1.686.240 Pts
Vencimiento Saldo préstamo Amortización Intereses Cuota a pagar
5-ene-97 1.500.000 Pts 55.885 Pts 14.375 Pts 70.260 Pts
5-feb-97 1.444.115 Pts 56.421 Pts 13.839 Pts 70.260 Pts
5-mar-97 1.387.694 Pts 56.961 Pts 13.299 Pts 70.260 Pts
5-abr-97 1.330.733 Pts 57.507 Pts 12.753 Pts 70.260 Pts
5-may-97 1.273.226 Pts 58.058 Pts 12.202 Pts 70.260 Pts
5-jun-97 1.215.168 Pts 58.615 Pts 11.645 Pts 70.260 Pts
5-jul-97 1.156.553 Pts 59.176 Pts 11.084 Pts 70.260 Pts
5-ago-97 1.097.377 Pts 59.743 Pts 10.517 Pts 70.260 Pts
5-sep-97 1.037.634 Pts 60.316 Pts 9.944 Pts 70.260 Pts
5-oct-97 977.318 Pts 60.894 Pts 9.366 Pts 70.260 Pts
5-nov-97 916.424 Pts 61.478 Pts 8.782 Pts 70.260 Pts
5-dic-97 854.946 Pts 62.067 Pts 8.193 Pts 70.260 Pts
5-ene-98 792.879 Pts 62.662 Pts 7.598 Pts 70.260 Pts
5-feb-98 730.217 Pts 63.262 Pts 6.998 Pts 70.260 Pts
5-mar-98 666.955 Pts 63.868 Pts 6.392 Pts 70.260 Pts
5-abr-98 603.087 Pts 64.480 Pts 5.780 Pts 70.260 Pts
5-may-98 538.607 Pts 65.098 Pts 5.162 Pts 70.260 Pts
5-jun-98 473.509 Pts 65.722 Pts 4.538 Pts 70.260 Pts
5-jul-98 407.787 Pts 66.352 Pts 3.908 Pts 70.260 Pts
5-ago-98 341.435 Pts 66.988 Pts 3.272 Pts 70.260 Pts
5-sep-98 274.447 Pts 67.630 Pts 2.630 Pts 70.260 Pts
5-oct-98 206.817 Pts 68.278 Pts 1.982 Pts 70.260 Pts
5-nov-98 138.539 Pts 68.932 Pts 1.328 Pts 70.260 Pts
5-dic-98 69.607 Pts 69.593 Pts 667 Pts 70.260 Pts
Datos del problema: los datos del pr
estamo deben introducirse en las casillas B4,
B6, B7 y B5; este 
ultimo valor ser
a conocido a priori o bien se copiar
a de C5, en
funci
on de que se sepa como dato el inter
es anual o el TAE.
Cuota de amortizaci
on: en la casilla B8 se introduce la f
ormula de nida anterior-
mente para la cuota ja a pagar; dicho valor debe ser entero.
Inter
es y TAE: ambos valores pueden darse como dato inicial del pr
estamo, a
© Los autores, 1998; © Edicions UPC, 1998.
34 M
etodos num
ericos
pesar de ello, para los c
alculos de la tabla s
olo se emplea el inter
es anual y en
particular el valor de nido en B5.
Ambos el inter
es anual y el TAE se redondear
an siempre con dos cifras deci-
males. La hoja de c
alculo debe estar organizada de forma que si se introduce en
valor del inter
es anual en B5 y por tanto no se introduce el TAE en B3 entonces
aparece el valor del TAE en C3 y queda vac
o el valor de C5. Si, por el contrario,
se conoce el valor del TAE y no el inter
es anual que se introduce en B3, entonces
aparece calculado el valor del inter
es anual en C5 valor que debe ser copiado en
B5 y queda vac
o C3.
Como ejemplo, la instrucci
on que se debe poner en C3 es
=SiB3=0;Redondear1+B5 B4^B4-1;4; .
En C5 es necesario introducir una f
ormula con estructura similar que eval
ue el
inter
es anual a partir del TAE. Puede resultar interesante consultar el Asistente
de f
ormulas para comprender el signi cado concreto de estas expresiones.
Total a pagar: es la suma de todas las cuotas que se deben pagar.
Fecha de vencimiento: en A11 se introduce la fecha de inicio y en A12 la f
ormula:
= FechaA~noA11;MesA11+Entero12 $B$4;DiaA11+
Residuo12;$B$4*30 $B$4.
Esta f
ormula debe arrastrarse luego a lo largo de la columna.
Saldo pr
estamo: en B11 se copia la cantidad introducida en B6; las dem
as canti-
dades se obtienen restando al saldo anterior la amortizaci
on realizada, por ejemplo
B12 es =B11-C11. A continuaci
on se analiza c
omo calcular C11.
Amortizaci
on: es siempre la cuota $B$8 menos los intereses pagados en ese
vencimiento, por ejemplo C11 es =$B$8-D11.
Intereses: se eval
uan siempre de la misma manera: el saldo del pr
estamo multipli-
cado por el inter
es asociado a cada periodo de liquidaci
on. Atenci
on: es necesario
trabajar con n
umeros enteros! De esta forma, en D11, por ejemplo, debe intro-
ducirse la siguiente f
ormula: =RedondearB11*$B$5 $B$4;0.
Cuota a pagar: la cuota debe ser el valor que aparezca en B8; para veri car
los c
alculos conviene sumar la amortizaci
on y los intereses. Por ejemplo, E11 es
=SumaC11,D11.
Nota importante: Est
a siempre bien evaluada la 
ultima cuota que se debe pagar?
Adem
as de elaborar la hoja de c
alculo anterior para el caso indicado, obtener
la tabla asociada a un TAE del 12,1 manteniendo los periodos y el capital
prestado.
© Los autores, 1998; © Edicions UPC, 1998.
2 Introducci
on a los sistemas operativos 35
2.7 Bibliograf
a
Presentando Microsoft Windows95. Manual del usuario. Microsoft Corporation, 1998.
Windows para trabajo en grupo  MS-DOS. Manual del usuario, Vols. I a III. Microsoft Cor-
poration, 1994.
Stinson, C. El libro del Windows 3.1. Microsoft Press  Anaya, 1993.
Matthews, Martin S. Excel para Windows 95 a su alcance. Osborne McGraw-Hill, 1996.
The Cobb Group Dodge M.; Kinata C.; Stinson, C. Gu
a completa de Microsoft Excel
5 para Windows. McGraw-Hill  MS Press, 1996.
Microsoft Excel version 5.0c Manual del usuario. Microsoft Corporation, 1994.
Todos los nombres de programas, aplicaciones, sistemas operativos, hardware, etc. que aparecen en el texto
son marcas registradas de sus respectivas empresas. Las menciones que se hacen de ellas lo son 
unicamente a
t
tulo informativo, siendo propiedad de sus representantes legales. En particular, Microsoft, MS, MS-DOS, MS-
Windows, Windows'95 y MS-Excel, son marcas registradas de Microsoft Corporation en los Estados Unidos de
Am
erica y otros pa
ses; UNIX es una marca registrada de Unix Systems Laboratories; Lotus 1-2-3 es una marca
registrada de Lotus Inc; Quattro Pro es una marca registrada de Borland Inc; Macintosh es una marca reg-
istrada de Apple Computer Inc; Netscape Communicator es una marca registrada de Netscape Communications
Corporation.
© Los autores, 1998; © Edicions UPC, 1998.
3 Introduccion a la programacion FORTRAN 37
3 Introduccion a la programacion FORTRAN
Objetivos
Describir las fases del desarrollo de un programa en FORTRAN.
Presentary analizar los elementos basicos de la sintaxis del lenguaje de programacion
FORTRAN.
3.1 Introduccion
El lenguaje de programacion FORTRAN fue dise~nado por John Backus en 1954 y la primera
version data de 1955. Con posterioridad, han aparecido diferentes versiones que paulatinamente
han incorporado mejoras y ampliaciones. As por ejemplo, en 1958 aparecio el FORTRAN
II y en 1962 el FORTRAN IV. Una de las versiones mas importantes y que ha perdurado
durante mas tiempo es el FORTRAN 77, que fue aprobado por el American National Standards
Institute (ANSI) en 1977. Esta version ha sido mundialmente aceptada y ha permanecido hasta
la actualidad como el FORTRAN universal.
Aunque ya existe la version 90 del FORTRAN, por las razones que se han expresado en el
parrafo anterior, en este libro se presentara y se analizara la version FORTRAN 77.
3.2 Fases del desarrollo de un programa en FORTRAN
Como se ha comentado en el cap tulo 1, todos los ordenadores funcionan en el sistema
binario. En consecuencia, todos los programas deben ser traducidos a dicho sistema, inde-
pendientemente del lenguaje de programacion en que hayan sido dise~nados en este sentido,
el sistema binario se denomina tambien lenguaje maquina. En el proceso de traduccion se
distinguen varias fases (ver gura 3.1):
© Los autores, 1998; © Edicions UPC, 1998.
38 Metodos numericos
Fig. 3.1 Fases del desarrollo de un programa en FORTRAN
1. Es muy importante que, antes de empezar a escribir el programa en el ordenador, se haya
pensado detalladamente cuales son las tareas que el programa debe realizar y como deben
programarse. El hecho de invertir cierto tiempo en el dise~no del programa conlleva gene-
ralmente un ahorro tanto en el tiempo de programacion como en el de ejecucion.
2. La edicion del programa se realiza mediante un editor de archivos (ver cap tulo 2). Una
vez este se ha escrito de acuerdo con la sintaxis FORTRAN se obtiene el programa fuente.
Es muy aconsejable que la extension del programa fuente sea FOR.
3 Introduccion a la programacion FORTRAN 39
3. Como ya se ha comentado, el programa fuente debe traducirse a lenguaje maquina. Esta
traduccion se realiza en la fase de compilacion. El resultado de esta operacion es un
archivo intermedio que se denomina programa objeto. La mayor a de compiladores asignan
al programa objeto la extension OBJ.
4. Una vez se ha traducido el programa a lenguaje maquina, aun es preciso realizar ciertas
operaciones antes de obtener el programa ejecutable. Estas se realizan en la fase de en-
samblado (que generalmente se denomina linkado). En esta fase se unen los diferentes
modulos que componen el programa y se reserva el espacio de memoria para las variables,
los vectores y las matrices que se hayan de nido en el mismo. A los programas ejecutables
se les asigna la extension EXE.
5. El siguiente paso consiste en ejecutar el programa. Naturalmente, siempre se ejecuta el
chero ejecutable (EXE) y no el programa fuente (FOR).
6. Por ultimo, los resultados obtenidos deben ser analizados tanto desde el punto de vista
computacional como ingenieril.
Es importante resaltar que si en alguna de las anteriores fases se produce un error, su
correccion debe realizarse sobre el programa fuente por tanto, es preciso volver a realizar las
fases de compilacion, ensamblado y ejecucion.
3.3 Organizacion general de un programa en FORTRAN
En este apartado se presentan los elementos basicos de la organizacion de un programa
escrito en lenguaje FORTRAN.
3.3.1 Normas de escritura de un programa en FORTRAN
El archivo donde se van a escribir las instrucciones (sentencias) FORTRAN se puede ima-
ginar como una hoja cuadriculada y por tanto, formada por las y columnas.
Por lo que respecta al contenido de un programa por las hay que resaltar dos aspectos:
1. Todos los compiladores FORTRAN ignoran las las en blanco.
2. Solo se puede escribir una sentencia en cada la. Si el contenido de una sentencia excede la
longitud de la la, se puede utilizar mas de una l nea, como se detalla mas adelante.
Si se analiza el contenido del chero por columnas, se distinguen cinco zonas diferentes:
Columna 1 Si en la primera columna de una l nea aparece una C, una c, o
40 Metodos numericos
un *, signi ca que dicha l nea es un comentario. Por lo tanto, el
compilador no la traducira a lenguaje maquina. En general, los
comentarios se utilizan para explicar el funcionamiento de cada
bloque del programa.
Columnas 1-5 Estas columnas se reservan para etiquetar una sentencia. En
FORTRAN las sentencias se etiquetan mediante numeros enteros
positivos. Estos valores no afectan al orden en que se ejecutaran
las instrucciones. Ademas, solo deben etiquetarse aquellas l neas
que lo precisen.
Columna 6 Si una sentencia ocupa mas de una l nea, debe indicarse al compi-
lador que una l nea es continuacion de la anterior. Esto se realiza
colocando cualquier caracter diferente de blanco o cero en la sexta
columna.
Columnas 7-72 En estas columnas se escribe el contenido de las sentencias pro-
piamente dichas.
Columnas 73-80 Estas columnas no tienen signi cado para el compilador FOR-
TRAN y no se deben utilizar.
3.3.2 Elementos de un programa en FORTRAN
Desde un punto de vista conceptual, el lenguaje de programacion FORTRAN consta de dos
tipos de elementos: los comentarios y las sentencias.
Los comentarios, como se ha mencionado anteriormente, no afectan a la forma en que se
procesa el programa. Solo representan una ayudan al usuario para su correcta interpretacion.
Las sentencias estan formadas por todo el conjunto de instrucciones que forman el lenguaje
FORTRAN. Estas, a su vez, se pueden clasi car en sentencias ejecutables y sentencias no
ejecutables.
1. Las sentencias ejecutables son aquellas cuyo signi cado se utiliza esencialmente en tiempo
de ejecucion (fase en la que se ejecuta el programa). Se incluyen dentro de este tipo la
asignacion de valores a variables, las sentencias de control, y las sentencias de entrada/salida
entre otras.
2. Las sentencias no ejecutables son aquellas cuyo signi cado se utiliza en tiempo de com-
pilacion o ensamblado. Las tareas basicas que se realizan son la declaracion de modulos
y variables, la reserva de espacio de memoria para vectores y la se~nalizacion de nal de
modulo.
3 Introduccion a la programacion FORTRAN 41
En cualquier modulo escrito en FORTRAN las sentencias deben aparecer en un orden prede-
terminado formando tres grandes grupos. Primero deben aparecer las sentencias no ejecutables,
donde se declara el inicio de modulo as como las variables, los vectores y las matrices que se
utilizaran en el mismo. En segundo lugar se deben escribir las sentencias ejecutables que forman
el cuerpo del modulo. Por ultimo aparece la sentencia no ejecutable de n de modulo (sentencia
END).
El programa 3.1 muestra algunos de los aspectos que se han discutido hasta ahora.
c
c Este programa muestra algunos aspectos de la organizacion
c general de un programa en FORTRAN
c
c_________________________________________ Sentencias no ejecutables
real*4 a,b,c
c_________________________________________ Sentencias ejecutables
c___Primero hay una linea etiquetada
111 a = 12.5
c___Despues una sentencia escrita en una linea
b = -5.1
c___Seguidamente otra sentencia escrita en mas de una linea
c = (a + b) *
. 1234.5398754485429387029
c___Y por ultimo se detiene la ejecucion del programa
stop
c_________________________________________ Sentencias no ejecutables
end
Prog. 3.1 Organizacion general de un programa en FORTRAN
3.4 Constantes y variables en FORTRAN
Una constante es un valor que no puede cambiar durante la ejecucion del programa. Por el
contrario, una variable es un s mbolo al que se asocia un valor que puede modi carse durante
la ejecucion del programa. El nombre de una variable debe estar formado por una cadena de
caracteres alfanumericos, el primero de los cuales debe ser una letra.
En FORTRAN existen diferentes tipos de constantes y variables, que se diferencian segun el
42 Metodos numericos
tipo de informacion que contienen. Siempre es necesario declarar, al principio de cada modulo,
el tipo de todas las variables esto se lleva a cabo mediante sentencias no ejecutables. Sin
embargo, como se vera en este mismo apartado, el FORTRAN ofrece algunas ayudas que
conviene aprovechar.
3.4.1 Constantes y variables enteras
Las constantes enteras son numeros enteros escritos sin punto decimal. Las variables enteras
son s mbolos que solo pueden representar numeros enteros. Los ordenadores guardan el valor
asignado a estas variables como una cadena de longitud nita en sistema binario. Dependiendo
de la longitud de esta cadena se distinguen dos tipos de variables enteras.
INTEGER*2 Se almacena la variable entera en dos bytes (16 bits). El numero mayor en
valor absoluto que se puede almacenar es 32 767 (ver cap tulo 4).
INTEGER*4 Se almacena la variable entera en cuatro bytes (32 bits). El numero mayor
en valor absoluto que se puede almacenar es 2 147 483 647 (ver cap tulo 4).
Una de las ayudas que ofrece el FORTRAN consiste en asignar por defecto un tipo entero
a todas aquellas variables que empiezan por:
I, J, K, L, M, N
Los ordenadores modernos les asignan el tipo INTEGER*4, mientras que algunos de los orde-
nadores mas antiguos les asignaban INTEGER*2. Es muy importante respetar este convenio, ya
que de esta forma se evitara una perdida de tiempo considerable.
El orden de prioridad de los operadores aritmeticos que actuan sobre las variables enteras
es el propio del algebra, es decir:
1. ** (potencia)
2. * y / (producto y division respectivamente)
3. + y - (suma y diferencia respectivamente)
Si, por algun motivo, se desea alterar dicha prioridad, se deben utilizar parentesis (ver programa
3.2).
En este programa se resaltan tres aspectos. El primero es que no ser a preciso declarar las
variablesMVAR1, MVAR2, NPOT y JRES,puesto que por defecto yason enteras. El segundo es que en
ningun momento se realizan operaciones que involucren variables de tipos diferentes. El tercero
es la sentencia WRITE (6,*) NFIN. Como se presentara mas adelante, esta sentencia signi ca
escribir en la pantalla del ordenador y con formato libre (de acuerdo con un procedimiento
prede nido por el compilador FORTRAN) el valor de la variable NFIN.
3 Introduccion a la programacion FORTRAN 43
c
c Este programa muestra algunos aspectos de la utilizacion
c de variables enteras
c
c___________________________________________________________________
c___Declaracion de las variables enteras
integer*2 kk
integer*4 mvar1,mvar2,npot,jres
c___Asignacion de la variable integer*2
kk = 13
c___Asignacion de algunas variables integer*4
mvar1 = 20
mvar2 = -10
npot = 5
c___Calculo de una variable integer*4 declarada explicitamente
jres = (mvar1 + mvar2) * 2
c___Calculo de una variable integer*4 declarada por defecto
nfin = jres**npot
c___Escritura por pantalla del valor de una variable
write (6,*) nfin
stop
end
Prog. 3.2 Programacion con variables enteras
3.4.2 Constantes y variables reales
Las constantes reales son numeros reales escritos en notacion de coma ja o bien en notacion
cient ca. Las variables reales son s mbolos que solo pueden representar numeros reales. Al
igual que pasa con las variables enteras, los ordenadores guardan el valor asignado a las variables
reales como una cadena de bits de longitud nita. Dependiendo de la longitud de esta cadena
se distinguen tres tipos de variables reales.
REAL*4 (Simple precision). Se almacena la variable real en cuatro bytes. El numero
mayor en valor absoluto que se puede almacenar es del orden de 1:7 1038 y el
numero menor en valor absoluto y diferente de cero que se puede almacenar
es del orden de 0:29 10;38 (cap tulo 4).
44 Metodos numericos
REAL*8 (Doble precision). Se almacena la variable real de ocho bytes. Los numeros
mayor y menor en valor absoluto que se puede almacenar son del orden de
0:9 10308 y 0:56 10;308, respectivamente (cap tulo 4).
REAL*16 (Cuadruple precision). Se almacena la variable real en dieciseis bytes. Con-
viene tener en cuenta que no todos los compiladores aceptan este tipo de
variables. Ademas, el numero mayor y menor en valor absoluto que se puede
almacenar depende tambien del tipo de ordenador. En general, con este tipo
de variables se logran almacenar numeros mayores y mas proximos a cero.
As mismo, tambien se logra mas precision.
Por defecto, el compilador FORTRAN considera variables del tipo REAL*4 todas aquellas
variables que no empiezan por:
I, J, K, L, M, N
En consecuencia, todas las variables del tipo REAL*8 o REAL*16 se tienen que declarar expl ci-
tamente. La prioridad con que actuan los operadores aritmeticos sobre las variables reales es
la misma con que actuan sobre las variables enteras. De nuevo, para alterar dicha prioridad
deben utilizarse los parentesis.
En el programa 3.3 se calcula el volumen de un cilindro y el de una esfera utilizando variables
reales de tipo REAL*4 y REAL*8 las variables REAL*8 se han declarado expl citamente, mientras
que las variables REAL*4 han sido declaradas por defecto. Conviene notar que en ningun caso se
opera con variables de diferente tipo es decir, las operaciones se realizan siempre entre variables
de simple precision o entre variables de doble precision. Es importante tener presente que se
trata de un ejemplo ilustrativo en el sentido que, en la practica, raramente se utilizan estos dos
tipos de variables en el mismo programa es decir, habitualmente, los calculos asociados a un
determinado problema se realizan, o bien en simple precision, o bien en doble precision. Por
otra parte, se han introducido en este ejemplo dos sentencias nuevas. La primera de ellas es la
sentencia WRITE la instruccion WRITE (6,*) ' RADIO DEL CILINDRO:' signi ca escribir en la
pantalla la cadena de caracteres RADIO DEL CILINDRO:. La segunda es la sentencia READ la
instruccion READ (5,*) ALTURA signi ca leer del teclado el valor de la variable ALTURA.
Problema 3.1:
Es muy importante saber que sucede cuando la division entre dos numeros enteros
da por resultado un numero real no entero y este se asigna a una variable entera.
Por ejemplo, en el programa que se lista a continuacion, se realizan cocientes
entre variables enteras (declaradas por defecto) y los resultados, que son en todos
los casos valores reales no enteros, se almacenan en las variables enteras K1 y K2.
Cual es el valor de las variables K1 y K2 que aparecera por la pantalla? Que
implican estos resultados?
3 Introduccion a la programacion FORTRAN 45
c
c Division de numeros enteros
c
c_______________________________
c___Asignacion de variables
ivar1 = 1
ivar2 = 2
ndeno = 3
c___Calculo de los resultados
k1 = ivar1 / ndeno
k2 = ivar2 / ndeno
c___Escritura por pantalla
write (6,*) k1
write (6,*) k2
stop
end
3.4.3 Constantes y variables complejas
Las constantes complejas se describen como un par ordenado de numeros reales entre
parentesis y separados por una coma: (-67.54, 0.53E-1). El primero representa la parte
real del numero complejo mientras que el segundo representa su parte imaginaria. Las variables
complejas se almacenan como dos numeros reales contiguos (naturalmente, no se almacenan ni
los parentesis ni la coma).
Dependiendo del tipo de numeros reales utilizados para de nir el numero complejo, se tienen
dos tipos de variables complejas:
COMPLEX*8 Las partes real e imaginaria se representan mediante un REAL*4.
COMPLEX*16 Las partes real e imaginaria se representan mediante un REAL*8.
No existen variables complejas que permitan almacenar la parte real y la parte imaginaria
mediante numeros reales de diferente tipo. La prioridad con que actuan los operadores arit-
meticos sobre las variables complejas es la misma con que actuan sobre los tipos de variables
que se han visto hasta el momento. Por otro lado es importante notar que, para este tipo
de variables, las operaciones aritmeticas tienen signi cados (de niciones) diferentes de los que
ten an para los anteriores tipos de variables.
46 Metodos numericos
En el programa 3.4 se manipulan variables complejas como ejemplos de operaciones que
se pueden realizar con ellas se han utilizado varias funciones propias del FORTRAN como son
CONJG(), REAL() y AIMAG(), que permiten obtener el complejo conjugado, la parte real y la
parte imaginaria de un numero complejo respectivamente.
c
c Este programa muestra algunos aspectos de la utilizacion
c de variables reales
c
c___________________________________________________________________
c___Declaracion de las variables real*8
real*8 radio2, vol2, pi2
c___Asignacion de las variables pi y pi2
pi = 3.141592653589793
pi2 = 3.141592653589793d0
c___Introduccion desde teclado
c___de los datos para calculo del volumen de un cilindro
write (6,*) 'radio del cilindro:'
read (5,*) radio
write (6,*) 'altura del cilindro:'
read (5,*) altura
c___Calculo del volumen del cilindro en simple precision
vol = pi * radio * radio * altura
c___Introduccion desde teclado
c___de los datos para calculo del volumen de una esfera
write (6,*) 'radio de la esfera:'
read (5,*) radio2
c___Calculo del volumen de la esfera en doble precision
vol2 = (4.d0 * pi2 * radio2 * radio2 * radio2) / 3.d0
c___Escritura de resultados
write (6,*) 'volumen del cilindro (simple precision)=', vol
write (6,*) 'volumen de la esfera (doble precision)=', vol2
stop
end
Prog. 3.3 Programacion con variables reales
3 Introduccion a la programacion FORTRAN 47
3.4.4 Constantes y variables logicas
A las constantes y variables logicas solo se les pueden asignar dos valores distintos, que
deben aparecer siempre entre puntos:
.TRUE. que signi ca verdadero
.FALSE. que signi ca falso
c
c Este programa muestra como utilizar variables complejas
c
c___________________________________________________________________
c___Declaracion de las variables complejas
complex*8 z1,z2,z3
c___Asignacion de una variable compleja
z1 = ( 2.0 , 3.0 )
c___Calculo del conjugado de una variable compleja
z2 = conjg(z1)
c___Calculo del producto de dos numeros complejos
z3=z1*z2
c___Calculo de las partes reales e imaginarias
x1 = real (z1)
y1 = aimag (z1)
x2 = real (z2)
y2 = aimag (z2)
x3 = real (z3)
y3 = aimag (z3)
c___Escritura por pantalla de los resultados
write (6,*) ' z1 =', z1
write (6,*) ' z2 =', z2
write (6,*) ' z3 =', z3
write (6,*) ' x1 y y1 =', x1 , y1
write (6,*) ' x2 y y2 =', x2 , y2
write (6,*) ' x3 y y3 =', x3 , y3
stop
end
Prog. 3.4 Programacion con variables complejas
48 Metodos numericos
Las variables logicas se deben declarar siempre mediante la sentencia LOGICAL. Como puede
observarse en la tabla 3.1, los operadores logicos se pueden clasi car en dos grupos:
operadores logicos de relacion, que permiten comparar expresiones aritmeticas dando como
resultado una variable logica.
operadores logicos espec cos, que permiten operar con variables logicas tambien generan
como resultado una variable logica.
Como puede observarse, tanto las constantes logicas como los operadores logicos deben
escribirseprecedidos y seguidosde un punto (.). En caso de no observarseesta reglase producira
un error de compilacion. En el programa 3.5 se muestran varios de los aspectos que se han
comentado anteriormente.
Tabla 3.1 Operadores logicos
OPERADORES LOGICOS
DE RELACION ESPECIFICOS
.EQ. = .NOT. negacion
.NE. 6= .AND. y
.LT.  .OR. o
.LE. .XOR. o exclusivo
.GT. 
.GE.
3.4.5 Constantes y variables alfanumericas
Las constantes alfanumericas, como su propio nombre indica, estan formadas por cadenas
de caracteres (letras y/o numeros) y se introducen siempre delimitadas por comillas simples,
por ejemplo: 'ESTO ES UNA CADENA DE DIGITOS'. Conviene notar que los espacios en blanco
tambien forman parte de la cadena.
Al principio de cada modulo es siempre necesario declarar todas las variables alfanumericas.
Ademas se debe especi car su longitud maxima (el numero maximo de caracteres que pueden
contener). Dicha declaracion se realiza mediante la sentencia CHARACTER*n, donde n es un
numero entero que representa la longitud de la cadena.
Una de las operaciones mas usuales de las que se realizan con variables alfanumericas es la
concatenacion es decir, la union de dos o mas variables alfanumericas para formar una unica
cadena. Esta operacion se representa mediante el s mbolo //.
3 Introduccion a la programacion FORTRAN 49
En el programa 3.6 se muestra como se opera con este tipo de variables. Puede observarse
que la variable CAD TOTAL se ha declarado con una longitud maxima igual a la suma de las
longitudes con que se declaran las variables CAD1, CAD2 y CAD3.
c
c Este programa muestra como utilizar variables logicas
c
c___________________________________________________________________
c___Declaracion de las variables logicas
logical flag1,flag2,flag3
c___Asignacion de variables logicas
flag1 = .true.
flag2 = .false.
c___Operaciones con variables logicas
flag3 = flag1 .and. flag2
c___Escritura por pantalla
write (6,*) flag1
write (6,*) flag2
write (6,*) flag3
stop
end
Prog. 3.5 Programacion con variables logicas
3.4.6 Sentencia IMPLICIT
Con el propositode simpli car la programacion,en muchoscasosresulta convenientedeclarar
del mismo tipo todas las variables que empiezan por una determinada letra. Esto puede re-
alizarse mediante la sentencia:
IMPLICIT tipo de variable lista de letras
As por ejemplo, la sentencia:
IMPLICIT COMPLEX*8 Z
obliga a que todas las variables que empiecen por la letra Z sean del tipo COMPLEX*8. Del mismo
modo, la sentencia:
IMPLICIT REAL*8 (A-H,O-Z)
50 Metodos numericos
obliga a que, por defecto, todas las variables que empiecen por una letra comprendida entre la
A y la H o entre la O y la Z sean del tipo REAL*8.
c
c Este programa muestra como utilizar variables alfanumericas
c
c___________________________________________________________________
c___Declaracion de las variables alfanumericas
character*1 espacio
character*5 cad1,cad2
character*7 cad3
character*19 cad_total
c___Asignacion de variables alfanumericas
espacio = ' '
cad1 = 'seat'
cad2 = 'panda'
cad3 = '16v GTI'
c___Operacion con variables alfanumericas
cad_total = cad1//espacio//cad2//espacio//cad3
c___Escritura por pantalla de los resultados
write (6,*) cad_total
stop
end
Prog. 3.6 Programacion con variables alfanumericas
3.5 Funciones en FORTRAN
En FORTRAN se pueden distinguir dos clases de funciones:
1. Funciones intr nsecas. Son las funciones que incorpora directamente el compilador. Aunque
la mayor a de los nombres asociados a cada una de ellas es estandar, cada fabricante a~nade
algunas funciones propias. Para cada compilador se debe consultar el manual correspon-
diente.
2. Funciones de usuario. Estas funciones las de ne el propio usuario (ver cap tulo 5).
3 Introduccion a la programacion FORTRAN 51
En los programas mostrados hasta el momento se han utilizado varias funciones intr nsecas
(REAL(), AIMAG() o CONJG(), entre otras). Como se puede observar en los listados, las asig-
naciones del tipo y = f (x) se realizan en FORTRAN de forma similar a como se realizan en
matematicas. Conviene notar, sin embargo, que en las asignaciones FORTRAN las variables x
e y deben ser del mismo tipo.
3.6 Sentencias de entrada{salida en FORTRAN
En este apartado se exponen los aspectos esenciales de las sentencias asociadas a la lectura
y escritura de datos de un archivo.
En FORTRAN, el proceso de lectura (o escritura) se puede dividir en tres fases:
1. Primero, se asigna al archivo un numero denominado unidad logica. A partir de este mo-
mento, cualquier referencia a dicho archivo se realiza a traves de la unidad logica. Como
se comentara seguidamente, tambien se de nen en esta fase algunas propiedades del chero
que se desea utilizar. Esta operacion se denomina abrir el archivo y se realiza mediante la
instruccion OPEN.
2. A continuacion se realizan todas las operaciones de lectura y escritura. Las sentencias que
se utilizan son READ, WRITE y FORMAT.
3. Finalmente, hay que romper la asignacion chero{unidad logica. Esta operacionse denomina
cerrar el archivo y se realiza mediante la instruccion CLOSE.
La sentencia OPEN debe aparecer antes de leer o escribir en el archivo as mismo, debe
escribirse una instruccion CLOSE despues de acceder por ultima vez al chero. La sintaxis de
estas dos instrucciones es la siguiente:
OPEN ( UNIT = unidad logica, FILE = nombre de chero,
STATUS =
8

:
`NEW'
`OLD'
`UNKNOWN'
9
=
)
CLOSE ( unidad logica )
donde:
unidad logica es una constante o variable entera positiva que representa al chero. Se puede
utilizar cualquier valor entero excepto: 1) el 5, que representa, por defecto, al teclado y 2)
el 6, que representa, tambien por defecto, a la pantalla. Naturalmente, la unidad 5 solo se
utiliza en instrucciones de lectura y la 6 solo en instrucciones de escritura.
nombre de chero es una cadena alfanumerica y contiene el nombre del chero que se desea
manipular.
52 Metodos numericos
STATUS representa el estado en que se encuentra el archivo: NEW indica que el archivo no
existe y hay que crearlo OLD indica que el archivo ya existe y no se debe crear y UNKNOWN
indica que si el chero existe solo se debe utilizar mientras que si no existe hay que crearlo.
La sintaxis de las sentencias READ y WRITE es la siguiente:
READ ( UNIT = unidad logica, FORMAT = formato ) lista de variables
WRITE ( UNIT = unidad logica, FORMAT = formato ) lista de variables
donde:
unidad logica es un numero entero positivo que representa al chero con el que se desea
operar. Debe ser el mismo que aparece en la sentencia OPEN correspondiente.
formato es la etiqueta de una l nea (por tanto, un entero positivo) en la que se especi ca como
se desea leer o escribir el contenido de las variables que se detallan en lista de variables.
Como se ha comentado anteriormente, si en lugar de una etiqueta aparece un *, la lista de
variables se escribira en formato libre.
lista de variables es la lista de las variables que hay que leer o escribir los nombres de las
variables deben estar separados por comas.
La sintaxis de la sentencia FORMAT es la siguiente
etiqueta FORMAT ( lista de formato )
donde:
etiqueta es la etiqueta de la l nea donde se encuentra la instruccion FORMAT.
lista de formato es una lista formada por un conjunto de s mbolos que indican como se
desea leer o escribir la lista de variables que aparece en la correspondiente sentencia READ
o WRITE a cada variable que aparece dicha lista le corresponde un s mbolo en la lista de
formato.
Los s mbolos que pueden aparecer en lista de formato son de dos tipos: s mbolos de com-
posicion y s mbolos de variables. Entre los primeros, los dos mas usuales son:
/ Signi ca saltar a la l nea siguiente del chero.
nX Signi ca dejar n espacios en blanco.
Entre los segundos, los mas utilizados son:
nIm Signi ca leer o escribir n numeros enteros de m d gitos cada uno de ellos.
3 Introduccion a la programacion FORTRAN 53
nFm.d Signi ca leer o escribir n numeros reales de simple precision, expresados como
parte entera y parte decimal, de m d gitos cada uno de ellos, de los cuales d se
destinan a la parte fraccionaria.
nEm.d Signi ca leer o escribir n numeros reales de simple precision, expresados en
notacion cient ca, de m d gitos cada uno de ellos, de los cuales d se destinan a
la parte fraccionaria.
nDm.d Signi ca leer o escribir n numeros reales de doble precision, expresados en
notacion cient ca, de m d gitos cada uno de ellos, de los cuales d se destinan a
la parte fraccionaria.
nAm Signi ca leer o escribir n variables alfanumericas de m d gitos cada una de ellas.
nL Signi ca leer o escribir n variables logicas.
El programa 3.7 permite calcular las ra ces de una ecuacion de segundo grado con coe -
cientes reales. Este programa producira un error de ejecucion cuando el coe ciente cuadratico
sea nulo o bien las ra ces sean complejas (compruebese). Tal como se puede ver en las instruc-
ciones READ y WRITE correspondientes, los datos se leen del teclado, mientras que los resultados
(dos cadenas alfanumericas y dos numeros reales en simple precision) se escriben en el chero
RESUL.RES. Por otra parte, puede observarse tambien que el chero de resultados se ha abierto
con STATUS=`NEW' puesto que no exist a anteriormente.
Problema 3.2:
Que sucede si el programa 3.7 se ejecuta dos veces consecutivas? Por que?
Como deber a modi carse la sentencia OPEN para evitar este inconveniente?
3.7 Sentencias de control en FORTRAN
En este apartado se presentan tres sentencias destinadas a controlar el orden con que se
ejecutan las instrucciones:
La sentencia condicional IF
La sentencia GO TO
El bloque DO - ENDDO
54 Metodos numericos
3.7.1 La sentencia IF
En este subapartado se comentan las tres sintaxis mas utilizadas de la sentencia IF. La
primera de ellas, y tambien la mas sencilla, es la siguiente:
IF ( condicion ) sentencia
donde condicion es una proposicion logica y sentencia es una instruccion que solo se ejecutara si
la condicion logica es cierta si la condicion es falsa, se saltara a la siguiente l nea del programa.
c
c Este programa calcula las raices de una ecuacion de segundo
c grado. Todas las variables son del tipo REAL*4 y estan
c declaradas por defecto
c
c___________________________________________________________________
c___Entrada de los coeficientes desde teclado
write (6,*) ' Entra el coeficiente cuadratico:'
read (5,*) a
write (6,*) ' Entra el coeficiente lineal:'
read (5,*) b
write (6,*) ' Entra el coeficiente independiente:'
read (5,*) c
c___Calculo de las raices
dis = b*b - 4.*a*c
x1 = (-1.0*b + sqrt(dis)) / (2.0 * a)
x2 = (-1.0*b - sqrt(dis)) / (2.0 * a)
c___Escritura de resultados en un archivo
open (unit=12, file='resul.res', status='new')
write (12,100) ' Primera solucion = ', x1
write (12,100) ' Segunda solucion = ', x2
100 format (2x,a20,2x,e15.8)
close (12)
stop
end
Prog. 3.7 Programacion con instrucciones de entrada y salida
3 Introduccion a la programacion FORTRAN 55
La segunda estructura de la sentencia IF esta formada por el siguiente bloque:
IF ( condicion ) THEN
bloque
ENDIF
En este caso, si la proposicion logica condicion es cierta, se ejecutaran todas las instrucciones
contenidas en las l neas bloque en caso contrario, se ejecutara la l nea siguiente a la instruccion
ENDIF.
La tercera estructura de la sentencia IF es:
IF ( condicion ) THEN
primer bloque
ELSE
segundo bloque
ENDIF
En este caso, si la condicion es verdadera se ejecuta el primer bloque de sentencias y a contin-
uacion la l nea siguiente a la instruccion ENDIF si la condicion es falsa se ejecuta el segundo
bloque de instrucciones.
El programa 3.8 es una ampliacion del programa 3.7 donde se han introducido dos sentencias
IF con dos sintaxis distintas. Este programa permite detectar si el coe ciente cuadratico es
demasiado proximo a cero. As mismo, se distinguen los casos en que la ecuacion de segundo
grado tiene ra ces complejas.
3.7.2 La sentencia GO TO
Esta sentencia trans ere el control del programa a una l nea determinada. Existen tres
formas diferentes de utilizar la sentencia GO TO. Dos de ellas se mantienen por compatibilidad
con las versiones anteriores del FORTRAN y estan claramente en desuso. La sintaxis mas
utilizada es:
GO TO etiqueta
donde etiqueta es la etiqueta de la l nea que se ejecutara inmediatamente a continuacion de la
sentencia GO TO.
En el programa 3.9 se ha modi cado el bloque inicial del programa 3.8 a n de ilustrar la
utilizacion de la sentencia GO TO. Cuando el coe ciente cuadratico es inferior, en valor absoluto,
a una cierta tolerancia, se escribe un mensaje en la pantalla del ordenador y se pide que se
introduzca un nuevo valor.
56 Metodos numericos
c
c Este programa calcula las raices de una ecuacion de segundo
c grado.
c
c___________________________________________________________________
complex*8 z1,z2
c___Entrada de los coeficientes desde teclado
tol = 1.0e-5
write (6,*) ' Entra el coeficiente cuadratico:'
read (5,*) a
if (abs(a).lt.tol) then
write (6,*) ' El coeficiente cuadratico debe ser mayor'
stop
endif
write (6,*) ' Entra el coeficiente lineal:'
read (5,*) b
write (6,*) ' Entra el coeficiente independiente:'
read (5,*) c
open (unit=12,file='resul.res',status='new')
c___Calculo y escritura de las raices
dis = b*b - 4.*a*c
if (dis.ge.0.) then
x1 = (-1.0*b + sqrt(dis)) / (2.0 * a)
x2 = (-1.0*b - sqrt(dis)) / (2.0 * a)
write (12,100) ' Primera solucion = ', x1
write (12,100) ' Segunda solucion = ', x2
else
z1 = (cmplx(-1.0*b) - csqrt (cmplx (dis)))/ (cmplx(2.0*a))
z2 = (cmplx(-1.0*b) + csqrt (cmplx (dis)))/ (cmplx(2.0*a))
write (12,200) ' Primera solucion = ', z1
write (12,200) ' Segunda solucion = ', z2
endif
100 format (2x,a20,2x,e15.8)
200 format (2x,a20,2x,'(',e15.8,','e15.8,')')
close (12)
stop
end
Prog. 3.8 Utilizacion del bloque IF-ENDIF
3 Introduccion a la programacion FORTRAN 57
c
c Este programa calcula las raices de una ecuacion de segundo
c grado.
c
c___________________________________________________________________
c___Declaracion de variables
complex*8 z1,z2
c___Entrada de los coeficientes desde teclado
tol = 1.0e-5
10 write (6,*) ' Entra el coeficiente cuadratico:'
read (5,*) a
if (abs(a).lt.tol) then
write (6,*) ' El coeficiente cuadratico debe ser mayor'
go to 10
endif
write (6,*) ' Entra el coeficiente lineal:'
read (5,*) b
write (6,*) ' Entra el coeficiente independiente:'
read (5,*) c
.
.
.
Prog. 3.9 Utilizacion de la sentencia GO TO
3.7.3 El bloque DO { ENDDO
El bloque DO-ENDDO se emplea para ejecutar c clicamente un conjunto de instrucciones. Su
sintaxis es:
DO ivar = n1 n2 n3
bloque
ENDDO
donde:
ivar es la variable entera que controla el bucle.
n1 es el valor inicial de la variable ivar.
58 Metodos numericos
n2 es el valor nal de la variable ivar.
n3 es el valor del incremento de la variable ivar. Si este valor no aparece, por
defecto la variable n3 vale 1.
Las sentencias contenidas entre las instrucciones DO y ENDDO se ejecutan variando el valor
de ivar desde n1 hasta n2 e incrementandolo en n3 a cada paso por el bucle.
Una sintaxis alternativa es:
DO etiqueta ivar = n1 n2 n3
bloque
etiqueta CONTINUE
donde ivar, n1, n2 y n3 tienen el mismo signi cado que antes y etiqueta es una etiqueta que
marca el principio y el nal del bucle.
Un bucle DO-ENDDO siempre inicia su ejecucion mediante la sentencia DO. Es decir, no es
posible utilizar una instruccion GO TO dirigida a una sentencia situada en el interior de un bucle.
Sin embargo, es posible salir prematuramente de un bucle, es decir, antes de que la variable ivar
haya alcanzado su valor maximo. Pueden utilizarse estructuras DO-ENDDO anidadas siempre que
el bucle externo incluya todas las instrucciones del bucle interno (ver gura 3.2).
Fig. 3.2 a) estructura correcta, y b) estructura incorrecta
3 Introduccion a la programacion FORTRAN 59
c
c Este programa realiza una tabla de la funcion sin(x) entre
c dos valores de x especificados por el usuario.
c
c___________________________________________________________________
c___Declaracion de variables
implicit real*8 (a-h,o-z)
character*20 file_out
c___Entrada de los datos
write (6,*) ' limite inferior:'
read (5,*) xinf
write (6,*) ' limite superior:'
read (5,*) xsup
write (6,*) ' numero de intervalos:'
read (5,*) inter
write (6,*) ' nombre del archivo:'
read (5,'(a20)') file_out
c___Realizacion de la tabla
open (unit=30,file=file_out,status='new')
write (30,50)
xpas = (xsup - xinf) / dfloat(inter)
do i=1,inter+1
x = xinf + dble(i-1)*xpas
y = dsin (x)
write (30,100) x,y
enddo
50 format (8x,' X ',10x,' SIN(X) '/)
100 format (2(2x,d13.5))
close (30)
stop
end
Prog. 3.10 Utilizacion del bloque DO-ENDDO
En el programa 3.10 se muestra como realizar una tabla de la funcion f = sin(x) entre dos
valores escogidos por el usuario. En este caso no se especi ca el valor de la variable n3, por lo
60 Metodos numericos
que el incremento de la variable de control I vale 1. Otra novedad consiste en la utilizacion de
una variable alfanumerica que contiene el nombre del archivo de resultados.
En la tabla 3.2 se muestra el chero de resultados que se obtiene cuando el l mite inferior
vale 0, el l mite superior vale 3.141592 y el numero de intervalos es 10.
Tabla 3.2 Fichero de resultados
X SIN(X)
.00000D+00 .00000D+00
.31416D+00 .30902D+00
.62832D+00 .58779D+00
.94248D+00 .80902D+00
.12566D+01 .95106D+00
.15708D+01 .10000D+01
.18850D+01 .95106D+00
.21991D+01 .80902D+00
.25133D+01 .58779D+00
.28274D+01 .30902D+00
.31416D+01 .65359D-06
Problema 3.3:
Escribir un programa FORTRAN que, dado el valor de un cierto radio r (entero
y menor o igual que 100), calcule:
1. Todos los puntos de coordenadas enteras que esten sobre la circunferencia
x
2 + y
2 = r
2
2. Todos los puntos de coordenadas enteras que esten dentro de la circunferencia
x
2 + y
2 = r
2
Los resultados se deben mostrar por pantalla y guardar en un archivo.
Problema 3.4:
Se puede demostrar que al evaluar un polinomio pn(x) mediante la expresion:
pn(x) =
n
X
i=0
ai x
i
se deben realizar n(n + 1)=2 multiplicaciones y n sumas. La regla de Horner
evalua el mismo polinomio de la siguiente forma:
pn(x) = (anx + an;1)x + an;2 x + an;3 : : :
!
x + a0
3 Introduccion a la programacion FORTRAN 61
que solo requiere n multiplicaciones y n sumas. Se pide escribir un programa en
FORTRAN que construya, utilizando la regla de Horner, una tabla de valores del
polinomio:
p4(x) = 2x
4
; 20x
3
+ 70x
2
; 100x + 48
para valores de x en el intervalo ;4 ;1], con saltos de x de valor x = 0:5.
3.8 Bibliograf a
Borse, G. J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias
e ingenier a. Anaya, 1989.
Ellis, T.M.R. FORTRAN 77 Programming. Addison{Wesley Publishing Company, 1990.
Garc a Merayo, F. Programacion en FORTRAN 77. Paraninfo, 1988.
Lignelet, P. FORTRAN 77. Lenguaje FORTRAN V. Masson S.A., 1987.
Mouro, D.M. FORTRAN 77. Edward Arnold Ed., 1982.
Metodos numericosintroduccionaplicacionesy programacionenfortran
4 Numero, algoritmo y errores 63
4 Numero, algoritmo y errores
Objetivos
De nir la expresion general de un numero en una base de numeracion.
Comentar las bases de numeracion mas utilizadas.
Detallar como se almacenan los numeros enteros y reales en un ordenador.
Introducir los conceptos de over ow y under ow.
Presentar los tipos de errores en calculo numerico: errores de redondeo, errores de
truncamiento y errores inherentes.
Discutir la nocion de cifras signi cativas correctas.
Estudiar la propagacion del error en las operaciones aritmeticas elementales y en
una secuencia de operaciones.
4.1 Introduccion
En este cap tulo se presentaran dos conceptos basicos que apareceran posteriormente en la
mayor a de las aplicaciones de los metodos numericos.
El primero es la representacion de un numero en el ordenador. Para ello se estudiara como el
ordenador almacena los numeros enteros y los numeros reales. La caracter stica mas importante
es que siempre se utiliza un numero nito de d gitos para su representacion. Por tanto, resulta
imposible almacenar numeros como = 3:141592653589793238462643::: exactamente me-
diante una cantidad nita de cifras. Esta restriccion implica el concepto de error de redondeo,
© Los autores, 1998; © Edicions UPC, 1998.
64 Metodos numericos
es decir, el error que se comete al almacenar un numero mediante una cadena nita de d gitos,
cuando para almacenarlo exactamente se precisan muchos mas (o in nitos).
El segundo es el concepto de algoritmo. Como se comenta mas adelante, un algoritmo
debe estar formado por un numero nito de instrucciones. Sin embargo, existen procesos que
requieren un numero in nito de pasos. Por ejemplo, el calculo exacto de la exponencial de un
numero mediante la serie de Taylor requiere in nitos sumandos
ex = 1 + x + x2
2! + x3
3! + x4
4! + x5
5! +
Es evidente que resulta imposible calcularlos todos. Por tanto, solo se sumaran unos cuantos
terminos y, consecuentemente, solo se obtendra una aproximacion a la exponencial. El error
que se comete en los calculos al truncar el proceso in nito se denomina error de truncamiento.
Por ultimo, en este cap tulo se analiza como estos errores in uyen en los calculos posteriores.
Es decir, se estudia la propagacion de los errores en los metodos numericos.
4.2 Numero
Antes de presentar como se almacenan los numeros en el ordenador es necesario repasar
algunos conceptos basicos. El primero es la representacion de un numero en una base de nu-
meracion. Para representar cualquier cantidad en una cierta base de numeracion n, se precisan
n d gitos diferentes (en general: 0 1 2 ::: n ; 1). En la tabla 4.1 se muestran las bases de
numeracion mas utilizadas en el ambito de los ordenadores.
La representacion general de un numero en una cierta base de numeracion n, si se designa
por di el d gito situado en la i{esima posicion, esta de nida por la siguiente expresion
dp dp-1 ::: d2 d1 d0 :d-1 d-2 d-3 ::: d-(q-1) d-q
n
=
dpnp + dp-1np-1 + ::: d2n2 + d1n1 + d0n0 +
d-1n-1 + d-2n-2 + d-3n-3 ::: d-(q-1)n-(q-1) + d-qn-q
(4:1)
As por ejemplo, los numeros (745.863)10 y (101.011)2 signi can respectivamente
745.863
10
= 7 102 + 4 101 + 5 100 + 8 10-1 + 6 10-2 + 3 10-3
y
101.011
2
= 1 22 + 0 21 + 1 20 + 0 2-1 + 1 2-2 + 1 2-3
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 65
Tabla 4.1 Bases de numeracion
BASES DE NUMERACION
DECIMAL BINARIA OCTAL HEXADECIMAL
base 10 base 2 base 8 base 16
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
La forma concreta de almacenar los numeros depende ligeramente del tipo de ordenador y
del lenguaje de programacion utilizado, pero siempre se almacenan en el sistema binario (base
dos). Aunque la expresion 4.1 permite representar tanto numeros enteros (parte fraccionaria
nula) como reales, ambos tipos de numeros de almacenan de forma distinta en el ordenador.
4.2.1 Almacenamiento de los numeros enteros
Los numeros enteros, representados en el sistema binario, se almacenan en S posiciones
(bits), de las cuales se reserva una para indicar el signo del numero (vease la gura 4.1):
© Los autores, 1998; © Edicions UPC, 1998.
66 Metodos numericos
Fig. 4.1 Almacenamiento de un numero entero
De acuerdo con la expresion 4.1, el valor del numero entero es
dS-2 ::: d2 d1 d0
2
= dS-22S-2 + ::: + d222 + d121 + d020
En estas condiciones, el numero entero maximo (en valor absoluto) que se puede almacenar
se obtiene para dS-2 = = d1 = d0 = 1 (vease la gura 4.2)
Fig. 4.2 Numero entero maximo (en valor absoluto)
y su valor es
Nmax = 1 2S-2 + ::: + 1 22 + 1 21 + 1 20 = 1 ; 2S-1
1 ; 2 = 2S-1 ; 1 (4:2)
As pues, utilizando S posiciones pueden guardarse todos los enteros comprendidos entre
;(2S-1 ; 1) y 2S-1 ; 1. En particular, el numero entero no nulo mas proximo a cero que puede
almacenarse es logicamente 1 (vease la gura 4.3):
Nm{n = 1 20 = 1 (4:3)
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 67
Fig. 4.3 Numero entero no nulo m nimo (en valor absoluto)
A partir de la expresion 4.2 es facil comprobar que para una variable INTEGER*2 de FOR-
TRAN (S = 16 posiciones para almacenar el numero entero), el numero maximo (en valor
absoluto) es 32 767. As mismo, para las variables INTEGER*4 (S = 32 posiciones) el numero
maximo (en valor absoluto) es 2 147 483 647. Es importante remarcar que estas limitaciones
en la capacidad de almacenar numeros esta asociada a la utilizacion de una aritmetica nita.
4.2.2 Almacenamiento de los numeros reales
El almacenamiento de los numeros reales podr a realizarse mediante su representacion ge-
neral en una cierta base n (ver expresion 4.1). A este tipo de representacion se le denomina
coma ja. Sin embargo, los ordenadores almacenan los numeros reales en una representacion
denominada coma otante. En ella, el numero se representamediante una mantisa (fraccionaria)
y un exponente (entero). El numero real es la mantisa multiplicada por la base de numeracion
elevada al exponente. Porejemplo, el numero (891.246)10 se representacomo (0.891246)10 103
(mantisa 0.891246, exponente 3) y el numero (0.00753)10 se escribe como (0.753)10 10-2
(mantisa 0.753, exponente ;2). Como puede observarse, el punto decimal se desplaza ( ota)
hasta que la parte entera es nula y el primer d gito decimal es siempre diferente de cero. Esta
misma representacion puede utilizarse en cualquier base de numeracion. Por ejemplo, si se
utiliza el sistema binario el numero (101.001)2 es igual a (0.101001)2 2(11)2 .
Todos los ordenadores almacenan los numeros reales en base dos y en coma otante. La
diferencia entre un tipo de ordenador y otro reside, por una parte, en el numero de d gitos (bits
en el sistema binario) que se reserva para la mantisa y el exponente y por otra, en el orden en
que estos se almacenan. En cualquier caso, se puede suponer que el ordenador almacena los
numeros reales en:
Base dos.
Coma otante.
Con M posiciones para la mantisa (una de ellas, para el signo de la mantisa).
Con E posiciones para el exponente (una de ellas, para el signo del exponente).
© Los autores, 1998; © Edicions UPC, 1998.
68 Metodos numericos
Este tipo de almacenamiento se representa gra camente en la gura 4.4. Puede observarse que
se reservan dos posiciones para los signos (el de la mantisa y el del exponente).
Fig. 4.4 Almacenamiento de un numero real
Teniendo en cuenta la expresion 4.1 y la representacion en coma otante, el valor del numero
real es
:d-1 d-2 d-3 ::: d-(M-1)
2
2 (dE-2 :::d2 d1 d0)2
=
d-12-1 + d-22-2 + ::: + d-(M-1)2-(M-1) 2 (dE-22E-2 + :::+ d121 + d020)
Mediante esta representacion, el numero real mayor (en valor absoluto) que se puede almacenar
se obtiene a partir de la mantisa maxima y el exponente maximo (vease la gura 4.5):
Nmax = 1 2-1 + 1 2-2 + ::: + 1 2-(M-1) 2
1 2E-2 + :::+ 1 21 + 1 20
= 1
2
1
+ 1
2
2
+ ::: + 1
2
(M-1)
2 2(E;1)
;1
= 1
2
1 ; (1=2)(M;1)
1 ; (1=2) 2 2(E;1)
;1
=
;
1 ; 2(1;M)
2 2(E;1)
;1
(4:4)
Fig. 4.5 Numero real maximo (en valor absoluto)
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 69
Por otro lado, el numero real no nulo mas proximo a cero que puede almacenarse se obtiene
para la mantisa m nima y el maximo exponente con signo negativo, como muestra la gura 4.6:
Fig. 4.6 Numero real no nulo m nimo (en valor absoluto)
y su valor es
Nm{n = 1 2-1 2
; 1 2E-2 + :::+ 1 22 + 1 21 + 1 20
= 2;1
2; 2(E;1)
;1
= 2; 2(E;1)
(4:5)
Notese que la mantisa m nima es 2;1 puesto que, en la de nicion de la representacion de
coma otante, se exige que el primer d gito a la derecha de la coma sea distinto de cero.
Los valores de M y E en las variables reales del FORTRAN var an ligeramente segun el modelo
de ordenador. Para las variables REAL*4, puede tomarse, a t tulo orientativo, M = 24 posiciones
para la mantisa y E = 8 posiciones para el exponente. A partir de las expresiones 4.4 y 4.5 se
obtiene que pueden almacenarse numeros reales comprendidos entre 0:29 10-38 y 1:7 1038. En
cuanto a las variables REAL*8, los valores t picos son M = 53 y E = 11. Esto permite guardar
numeros entre 0:56 10-308 y 0:9 10308.
Se ha presentado aqu la idea basica del almacenamiento de numeros reales en el ordenador.
En la practica, los distintos fabricantes de hardware han empleado ligeras modi caciones de
esta idea, con el objetivo de conseguir el maximo de capacidad y de precision para el espacio
de memoria destinado a almacenar el numero (Higham, 1996). El formato mas habitual es
el del IEEE (Institute of Electrical and Electronic Engineers), que se esta convirtiendo en el
estandar mas extendido. En el formato IEEE los valores maximo y m nimo son algo distintos a
los se~nalados, pero del mismo orden de magnitud: 10 38 en simple precision y 10 308 en doble
precision.
4.2.3 Over ow y under ow
En el subapartado anterior se ha demostrado que la representacion de un numero real en el
ordenador implica la existencia de un rango de numeros reales que pueden guardarse. Cuando
en un programa se intenta almacenar un numero mayor que el maximo ( gura 4.5) se produce
© Los autores, 1998; © Edicions UPC, 1998.
70 Metodos numericos
un error que se denomina over ow. Del mismo modo, cuando se intenta almacenar un numero
menor que el m nimo ( gura 4.6) se produce un error llamado under ow. Lo que sucede
exactamente en ambos casos, as como el posible mensaje de error, depende del ordenador y
del compilador utilizado. De todos modos, debe ser el programador quien tome las medidas
oportunas a n de evitar estos problemas.
Problema 4.1:
En el lenguaje de programacion C existe un tipo de variable llamado unsigned
integer que se caracteriza, basicamente, por ser una variable entera de 16 bits o
32 bits (dependiendo del procesador de que se disponga) que solo puede tomar
valores positivos (no se reserva una posicion para el signo). Se pide:
a) Determinar para cada caso de unsigned integer (16 bits o 32 bits) cual es el
mayor numero entero y el entero mas proximo a cero (ambos en valor absoluto)
que se puede almacenar.
b) Que tipo de variable permite almacenar un numero mayor en valor absoluto:
un unsigned integer de 16 bits, uno de 32 bits (lenguaje C) o un INTEGER*4
en lenguaje FORTRAN?
c) Cual de los tres tipos de variables enteras mencionadas en el apartado b
permite almacenar el numero k = 3125587976? Cual de los tres anteriores
tipos de variable enteras permite almacenar el numero ?
4.3 Algoritmo
Un algoritmo es un sistema organizado para resolver un problema, formado por una serie
nita de instrucciones que solo se pueden interpretar un vocamente y que se realizan secuen-
cialmente.
Fig. 4.7 S mbolos mas utilizados en la representacion de algoritmos mediante
diagramas de ujo
En la actualidad existen, principalmente, dos formas de representar los algoritmos. La
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 71
primera es mediante diagramas de ujo y la segunda mediante pseudocodigo. En la repre-
sentacion de algoritmos mediante diagramas de ujo se utilizan una serie de s mbolos con un
signi cado predeterminado, que se unen mediante echas que indican el orden en que se deben
ejecutar las instrucciones. Aunque estos s mbolos no estan totalmente estandarizados, algunos
de ellos si que estan ampliamente aceptados. En la gura 4.7 se muestran los mas utilizados.
En la gura 4.8 se presenta mediante un diagrama de ujo el algoritmo utilizado en el
programa 3.8 para la resolucion de la ecuacion de segundo grado ax2 + bx + c = 0.
Fig. 4.8 Diagrama de ujo correspondiente a la resolucion de una ecuacion
de segundo grado
En la representacionmediante pseudocodigo, las instrucciones se especi can de forma similar
a como se programan en un lenguaje de programacion. Es importante resaltar que no existe
ningun convenio acerca de como representar las instrucciones. En este sentido, la forma en
que cada persona las detalla depende mucho del lenguaje de programacion que acostumbra a
utilizar. Con el proposito de ilustrar este metodo, a continuacion se presenta el algoritmo de
Euclides para determinar el maximo comun divisor de dos numeros dados (m y n).
© Los autores, 1998; © Edicions UPC, 1998.
72 Metodos numericos
1. Entrar m y n (m  n)
2. r = mod (m,n)
3. Si r = 0 entonces MCD = n y FIN
4. m n n r
5. Ir al paso 2
donde mod (m,n) es una funcion que devuelve el resto de la division de m entre n.
Problema 4.2:
Escribir el algoritmo de resolucion de la ecuacion segundo grado utilizando una
representacion en pseudocodigo. As mismo, escribir el algoritmo de Euclides
mediante una representacion en diagrama de ujo.
4.4 Errores
4.4.1 Error absoluto, error relativo y cifras signi cativas
Sea x el valor exacto de una cantidad y sea x su valor aproximado. Se de ne el error absoluto
como
Ex = x ; x (4:6)
El error absoluto mide la diferencia entre el valor exacto de una cantidad y su valor aproximado.
De esta forma se puede a rmar que alguien ha medido la longitud de un campo de futbol o la
longitud de un bol grafo con un error de un cent metro. Sin embargo, dicho error no tiene la
misma importancia en ambos casos. Para cuanti car la importancia del error respecto del valor
exacto de una cierta cantidad x se introduce el concepto de error relativo, que se de ne como
rx = Ex
x = x ; x
x (4:7)
Notese que el error relativo no esta de nido para x = 0. La ecuacion 4.7 muestra que el error
relativo es una cantidad adimensional, que habitualmente se expresa en tanto por ciento (%).
Es importante resaltar que generalmente no se conoce el valor exacto de la cantidad x. En
consecuencia, tampoco se puede conocer ni el error absoluto ni el error relativo cometido y hay
que conformarse con calcular una cota del error.
Puesto que ahora se dispone de una de nicion cuantitativa de la importancia relativa del
error, es posible plantearse cual es la cota del error de redondeo cometido al almacenar un
numero. Como se ha comentado anteriormente, los numeros reales se almacenan en coma
otante. Por ejemplo, los numeros 23:487 se guardan como 0:23487 102. De forma generica,
puede escribirse
m 10e (4:8)
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 73
donde 0 m  1 representa la mantisa y e es un numero entero que indica el exponente. Sea
t el numero de d gitos destinados a la representacion de la mantisa (se supone que t no incluye
la posicion del signo). Por consiguiente, si una persona realiza unos calculos trabajando en base
diez, coma otante y utilizando cinco d gitos para la mantisa (t = 5), puede representar los
siguientes numeros: 0:23754 102, 0:10000 105, o 0:19876 10;3.
Sin embargo, que le sucede cuando desea representar el numero a = 0:98567823? Evi-
dentemente no puede almacenarlo exactamente puesto que solo dispone de cinco cifras para
representar la mantisa. En consecuencia puede optar por una de las dos siguientes alternativas:
a1 = 0:98567 o a2 = 0:98568. La primera se denomina redondeo por eliminacion mientras que
la segunda se denomina redondeo por aproximacion.
En general, se puede demostrar que si se representa un numero en base n, coma otante,
reservando t d gitos para la mantisa (sin reservar una posicion para el signo) y redondeando
por eliminacion, la cota del error relativo que se comete vale
jrej n1;t
Por el contrario, si el redondeo es por aproximacion, la cota del error relativo es
jraj 1
2 n1;t (4:9)
Como se puede observar, la cota del error relativo cuando se redondea por aproximacion es
la mitad que cuando se redondea por eliminacion. Por este motivo todos los ordenadores
almacenan los numeros reales redondeando por aproximacion. Por ejemplo, si se realiza un
calculo representando los numeros en base diez, coma otante, utilizando tres cifras para la
mantisa y redondeando por aproximacion, la cota del error relativo debido al redondeo vale
jrj 1
2 101;3
= 0:005
En el ordenador sucede exactamente lo mismo. Cuando se representa un numero real mediante
una variable REAL*4 (24 bits para la mantisa reservando uno para el signo, por tanto t = 23),
la cota del error relativo debido al redondeo es
jrj 1
2 21;23
= 2;23
= 1:19 10;7
Si se utilizan variables REAL*8 (53 bits para la mantisa reservando uno para el signo, por tanto
t = 52), entonces
jrj 1
2 21;52
= 2;52
= 2:22 10;16
Puede verse que mediante variables REAL*8 se obtiene una precision mayor (menor error rela-
tivo) que con variables REAL*4.
El formato IEEE incorpora una modi cacion que mejora las precisiones recien indicadas.
La idea es la siguiente (vease la gura 4.4): el primer d gito de la mantisa, d-1, siempre vale 1
© Los autores, 1998; © Edicions UPC, 1998.
74 Metodos numericos
(no puede ser 0 puesto que es el primer d gito a la derecha de la coma) y no hace falta guardarlo
(Higham, 1996). Con ello se gana un d gito para la mantisa que permite obtener cotas del error
relativo de redondeo de 2;24 = 0:60 10;7 en simple precision y de 2;53 = 1:11 10;16 en doble
precision.
El error relativo esta relacionado con la nocion de cifras signi cativas correctas. Las cifras
signi cativas de un numero son la primera no nula y todas las siguientes. As pues, 2.350 tiene
cuatro cifras signi cativas mientras que 0.00023 tiene solo dos.
Sea x una aproximacion a x. Parece intuitivamente claro que son las cifras signi cativas
correctas de x, pero no es facil dar una de nicion precisa. Por ejemplo, una posible de nicion
es la siguiente: una aproximacion x a x tiene q cifras signi cativas correctas si al redondear
x y x a q cifras signi cativas se obtiene el mismo resultado. Esta de nicion es aparentemente
muy natural. Sin embargo, tomense los valores x = 0:9949 y x = 0:9951. Segun la de nicion,
x tiene una cifra signi cativa correcta (al redondear, x ! 1 y x ! 1) y tambien tres cifras
signi cativas correctas (x ! 0:995 y x ! 0:995). En cambio, no tiene dos cifras signi cativas
correctas! (x ! 1:0 y x ! 0:99).
Para evitar estas anomal as, se adopta la siguiente de nicion: la aproximacion x a x tiene
q cifras signi cativas correctas si el error relativo veri ca
jrxj 1
2 10;q (4:10)
Con esta de nicion, un sencillo calculo permite decir, sin ambiguedad, que x = 0:9951 tiene
tres cifras signi cativas correctas de x = 0:9949 (compruebese).
Problema 4.3:
En un proceso de calculo hay que evaluar la serie
Sn = 1 + 1
2 + 1
22 + 1
23 + + 1
2n
Interesa determinar cuantos terminos de la serie tiene sentido calcular consideran-
do la precision del tipo de variables que se utiliza. Como puede observarse, a
excepcion del primer termino, cada sumando de la serie representa una potencia
negativa del numero 2. Por lo tanto, cada sumando puede interpretarse como
un d gito en la representacion en base dos y coma otante de los numeros reales
( gura 4.4). Para calcular dicho numero de terminos se propone el siguiente
algoritmo:
1. a 1 half 0.5 i 0
2. b 2
3. Repetir mientras que (b  1)
4. a a * half
5. i i + 1
6. b a + 1
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 75
7. Fin de repetir
8. Escribir i-1 y 2*a y FIN
Se pide:
a) Explicar razonadamente el funcionamiento del algoritmo. Por que se
escriben las variables i;1 y 2 a ?
b) Realizar dos programas, uno en REAL*4 y otro en REAL*8, en los que se
implemente el anterior algoritmo. Comentar los resultados obtenidos.
4.4.2 Clasi cacion de los errores
En el contexto de los metodos numericos, se considera que el error total que contiene un
numero puede ser debido a los siguientes tipos de errores:
1. Error inherente. En muchas ocasiones, los datos con que se inician los calculos contienen
un cierto error debido a que se han obtenido mediante la medida experimental de una
determinada magnitud f sica. As por ejemplo, el diametro de la seccion de una varilla de
acero presentara un error segun se haya medido con una cinta metrica o con un pie de rey.
A este tipo de error se le denomina error inherente.
2. Error de redondeo. Como ya se ha comentado, un aspecto muy importante de la repre-
sentacion de los numeros reales en el ordenador es que estos se almacenan siempre mediante
una cadena nita de d gitos. Por tanto, en muchas ocasiones resulta imposible representar
exactamente un numero real (recordar el ejemplo del numero que se ha mencionado en la
introduccion de este cap tulo). Sin embargo, hay que considerar esta propiedad en muchos
otros casos en los que no parece tan evidente. Por ejemplo, resulta evidente que el numero
(0.2)10 puede representarse exactamente mediante una cadena nita de d gitos en dicha
base. Sin embargo, su expresion en base dos es
(0.2)10 = 0.0011 0011 0011 0011 0011 ::: 2
= .11 0011 0011 0011 0011 ::: 2
2(-10)2
que obviamente no se puede almacenar mediante una cadena nita de d gitos. En conse-
cuencia, cuando se almacena un numero real se puede cometer un error. A este error se le
denomina error de redondeo. Es importante recordar que la cota del error cometido depende
de la base de numeracion utilizada y del numero de d gitos empleados para almacenar la
mantisa, pero no depende de las posiciones reservadas para el exponente (ver expresion 4.5).
3. Error de truncamiento. En el apartado 4.3 se ha comentado que un algoritmo debe estar
formado por un numero nito de instrucciones. Sin embargo, existen muchos procesos
que requieren la ejecucion de un numero in nito de instrucciones para hallar la solucion
exacta de un determinado problema. Puesto que es totalmente imposible realizar in nitas
© Los autores, 1998; © Edicions UPC, 1998.
76 Metodos numericos
instrucciones, el proceso debe truncarse. En consecuencia, no se halla la solucion exacta
que se pretend a encontrar, sino una aproximacion a la misma. Al error producido por la
nalizacion prematura de un proceso se le denomina error de truncamiento. Un ejemplo del
error generado por este tipo de acciones es el desarrollo en serie de Taylor de una funcion
f(x)
f(x) = f(x0) + f0(x0)(x ;x0) + f00(x0) (x ;x0)2
2!
+ f000(x0) (x ;x0)3
3! + ::: + f(n)
(x0) (x ;x0)n
n! + Rn(x)
donde el residuo Rn(x) (resto de Lagrange) representa la suma de todos los terminos desde
n+ 1 hasta in nito y puede expresarse como
Rn(x) = f(n+1)
( ) (x ;x0)n+1
(n + 1)!
donde es cualquier valor entre x0 y x. Puesto que, en general, se desconoce el valor de ,
no puede evaluarse exactamente el valor de Rn(x). Por este motivo, hay que conformarse
con obtener una cota del error de truncamiento que se comete al truncar el desarrollo en
serie en la derivada n-esima.
Como en este ejemplo, en la mayor a de algoritmos tampoco se puede calcular exactamente
el error de truncamiento cometido. En cualquier caso, siempre resulta muy interesante hallar
una cota de su valor.
4.5 Propagacion del error
En este apartado se cuanti cara la propagacion del error al efectuar operaciones. Se ob-
tendran expresiones que relacionan el error del resultado obtenido con el error de los datos.
Sin embargo, el error de los datos es desconocido (si se conociera, a partir de este y del valor
aproximado siempre se podr a calcular el valor exacto). Lo que generalmente se conoce, bien
a partir de la precision de los aparatos de medida o bien a partir de desigualdades como la
expresion 4.9, es una cota del error de los datos. En consecuencia, el objetivo ahora es deducir
una expresion para la cota del error en el resultado de una secuencia de operaciones. En este
sentido, si la realizacion de un calculo puede llevarse a cabo mediante dos expresiones, sera
aconsejable utilizar aquella que tenga asociada una cota del error menor.
4.5.1 Conceptos previos
Las consecuencias de la existencia de un error en los datos de un problema son mas impor-
tantes de lo que aparentemente puede parecer. Desafortunadamente, estos errores se propagan
y ampli can al realizar operaciones con dichos datos, hasta el punto de que puede suceder que
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 77
el resultado carezca de signi cado. Con el proposito de ilustrar esta situacion, seguidamente se
calcula la diferencia entre los numeros
a = 0:276435
b = 0:2756
Si los calculos se realizan en base diez, coma otante, redondeando por aproximacion y traba-
jando con tres d gitos de mantisa, los valores aproximados a dichos numeros y el error relativo
cometido es
a = 0:276 jraj = 1:57 10;3
b = 0:276 jrbj = 1:45 10;3
Si ahora se calcula la diferencia entre los valores exactos y la diferencia entre los aproximados
se obtiene
a ;b = 0:000835
a ;b = 0:0
Debe observarse que el error relativo de la diferencia aproximada es del 100%. Este ejemplo,
extraordinariamente sencillo, pone de mani esto como el error de redondeo de los datos se ha
ampli cado al realizar una unica operacion, hasta generar un resultado carente de signi cado.
El ejemplo anterior es un caso particular de unas propiedades generales que se analizaran
en este apartado. As mismo, tambien se propondran algunas normas destinadas a reducir la
propagacion de los errores, como por ejemplo: evitar restar numeros muy parecidos o evitar
dividir por numeros muy peque~nos comparados con el numerador.
Por ultimo, hay que tener en cuenta el efecto conjunto de los tres tipos de errores. Sus con-
secuencias se pueden ilustrar a partir del calculo de la exponencial expuesto en la introduccion
de este cap tulo
ex = 1 + x + x2
2! + x3
3! + x4
4! + x5
5! + :::
Si se representa el valor absoluto del error de truncamiento jrtj frente al numero de terminos de
la serie considerados, se observa que tiende asintoticamente a cero al ir calculando mas terminos
de dicha serie (ver gura 4.9). Por consiguiente, se puede concluir que cuantos mas terminos se
calculen mejor. Sin embargo, si se considera la propagacion del error de redondeo, es de esperar
que el valor absoluto de dicho error jrrj aumente con el numero de terminos considerados, puesto
que cada vez se realizan mas operaciones (ver gura 4.9). Por lo tanto, si se calcula la suma
de los valores absolutos de los dos errores jrsj (error total), se observa que existe un numero de
terminos para el cual el error es m nimo. As pues, se puede a rmar que en este tipo de procesos
existe un paso mas alla del cual empiezan a obtenerse peores resultados. Desafortunadamente,
no existe, en general, un metodo para hallar el valor de dicho paso.
En la practica, a partir de criterios f sicos y numericos se impone una cierta tolerancia
(valor maximo del error que puede aceptarse). Cuando el error del proceso es menor que dicha
tolerancia este se detiene. Es interesante resaltar que el valor asignado a la tolerancia debe
escogerse razonadamente. Por ejemplo, en la gura 4.9 se ilustra como al tomar una tolerancia
excesivamente peque~na (tolerancia 2 ), el error total nunca es inferior a dicho valor y
© Los autores, 1998; © Edicions UPC, 1998.
78 Metodos numericos
en consecuencia, el proceso no se detendr a nunca. Por el contrario, si el valor de la tolerancia
es superior (tolerancia 1 ), existe un cierto termino en el cual se obtiene la precision
requerida.
Fig. 4.9 Propagacion del error en un algoritmo numerico
4.5.2 Propagacion del error en la suma
En esta y en las siguientes demostraciones se denotara por x e y los valores exactos de dos
numeros y por x e y sus valores aproximados. As mismo, los errores absolutos y relativos
de estas cantidades se denotaran por Ex, Ey, rx, ry, respectivamente. Si se representa por
s = x + y al valor exacto de la suma y por s = x + y su valor aproximado, entonces el error
absoluto de la suma es
Es = s ; s = (x + y) ; (x + y) = Ex + Ey
La expresion anterior indica que el error absoluto de la suma es la suma de valores absolutos
de los sumandos. El error relativo vale
rs = Es
s = Ex + Ey
x + y = x
x + y rx + y
x + y ry (4:11)
donde se puede observar que el error relativo de la suma es la suma de los errores relativos de
los datos multiplicados por unos factores que dependen de dichos datos. Esta dependencia se
muestra gra camente en la gura 4.10.
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 79
Fig. 4.10 Propagacion del error relativo en una suma
4.5.3 Propagacion del error en la resta
La deduccion para la propagacion del error mediante la resta es muy parecida a la anterior.
Si se representa por r = x ; y al valor exacto de la resta y por r = x ; y su valor aproximado,
entonces el error absoluto es
Er = r ; r = (x ; y) ; (x ;y) = Ex ; Ey
y el error relativo es
rr = Er
r = Ex ; Ey
x ; y = x
x ; y rx ; y
x ; y ry (4:12)
Fig. 4.11 Propagacion del error relativo en una resta
En la gura 4.11 se representa gra camente la propagacion del error relativo de la resta. Ahora
puede observarse el efecto de ampli cacion del error que los coe cientes de la expresion 4.12
pueden producir. En efecto, si se calcula la diferencia entre dos numeros muy parecidos, los
terminos x=(x;y) y ;y=(x;y) seran extraordinariamente grandes y, en consecuencia, el error
relativo rr sera muy superior a los errores rx y ry. Desafortunadamente, la unica forma de
evitar este comportamiento es no restando numeros muy parecidos. Obviamente, este mismo
fenomeno se produce al sumar dos numeros x e y tales que x ;y (ver expresion 4.11).
© Los autores, 1998; © Edicions UPC, 1998.
80 Metodos numericos
4.5.4 Propagacion del error en el producto
Si se representa el producto de dos numeros exactos mediante p = xy y el valor aproximado
del producto por p = xy, el error absoluto del producto se puede calcular como
Ep = p ; p = (x y) ; (x y) = (x y) ; (x ; Ex) (y ; Ey)
= xEy + yEx ; Ex Ey xEy + yEx
Fig. 4.12 Propagacion del error relativo en un producto
A partir de este resultado, se obtiene que el error relativo del producto es
rp = Ep
p = xEy + yEx ; Ex Ey
x y = rx + ry + rx ry rx + ry (4:13)
que indica que el error relativo del producto es suma de los errores relativos de los datos como
se ilustra en la gura 4.12. En la expresion 4.13 se ha supuesto que los errores relativos son
su cientemente peque~nos como para despreciar el termino cuadratico frente a los lineales.
4.5.5 Propagacion del error en la division
Si ahora se representa el cociente de dos numeros exactos mediante d = x=y y su valor
aproximado mediante d = x=y, el error absoluto del cociente vale
Ed = d ; d = x
y ; x
y = x
y ; (x ; Ex)
(y ; Ey)
= yEx ; xEy
y(y ; Ey)
yEx ; xEy
y2
En este caso se debe resaltar que si el denominador es un numero muy peque~no, el error
absoluto del cociente puede ser muy superior al error absoluto de los datos. Por consiguiente
y en la medida de lo posible, hay que evitar dividir por numeros peque~nos comparados con el
numerador.
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 81
De la expresion anterior se deduce que el error relativo del cociente es
rd = Ed
d =
yEx ;xEy
y(y;Ey)
x
y
= yEx ; xEy
x(y ; Ey) = rx ; ry
1 ;ry
rx ; ry (4:14)
De acuerdo con la expresion anterior, en la gura 4.13 se ilustra como el error relativo del
cociente es la resta de los errores relativos de los datos.
Fig. 4.13 Propagacion del error relativo en una division
4.5.6 Propagacion del error en una funcion
Sea z = f(x) la imagen mediante la funcion f del valor exacto de un numero x y sea
z = f(x) la imagen de su valor aproximado. Entonces, el error absoluto de la imagen es
Ez = f(x) ; f(x) = f(x) ; f(x ; Ex)
= f(x) ; f(x) ; f0(x)Ex + f00(x) Ex2
2! ; f000(x) Ex3
3! +
= f0(x)Ex ; f00(x) Ex2
2! + f000(x) Ex3
3! ; f0(x)Ex
En consecuencia, el error relativo que se comete al evaluar la funcion f esta determinado por
la expresion
rz = Ez
z =
f0(x)Ex ; f00(x) Ex
2
2! + f000(x) Ex
3
3! ; :::
f(x) x f0(x)
f(x) rx (4:15)
que gra camente se muestra en la gura 4.14.
Fig. 4.14 Propagacion del error relativo al evaluar una funcion
© Los autores, 1998; © Edicions UPC, 1998.
82 Metodos numericos
4.6 Analisis de perturbaciones
En el apartado anterior se han deducido las expresiones que gobiernan la propagacion del
error en las operaciones aritmeticas elementales. El objetivo de este apartado es desarrollar un
metodo que permita analizar que sucede con la propagacion del error cuando se realizan varias
operaciones.
La caracter stica basica de este tipo de estudios radica en el desconocimiento exacto del
error que presentan los datos. Como se ha comentado anteriormente, lo unico que se conoce es
una cota del error. Por lo tanto, tan solo se puede aspirar a conocer una cota del error nal de
las operaciones.
La cota del error que se comete en una secuencia de operaciones se puede calcular mediante
los siguientes pasos:
1. Realizar un diagrama que represente el orden en que se realizan las operaciones ( gura 4.15).
2. Numerar los resultados parciales que aparecen en dicho diagrama.
3. Especi car los coe cientes para el calculo del error en cada una de las operaciones.
4. Determinar la expresion del error en cada uno de los resultados parciales que aparecen en el
diagrama (el error correspondiente a la ultima operacion sera el error nal de la secuencia
de operaciones).
5. Calcular la cota del error nal.
Con el proposito de ilustrar este metodo se propone el siguiente ejemplo. Se desea realizar
el calculo
z = a(b + c) (4:16)
que alternativamente se puede realizar mediante la expresion
z = ab + ac (4:17)
La cuestion es saber mediante cual de las dos expresiones anteriores se obtiene una cota del
error menor.
En la gura 4.15 se presentan los tres primeros pasos del estudio de propagacion de error
para cada una de las alternativas presentadas en las ecuaciones 4.16 y 4.17. El error relativo
que se produce en la i-esima operacion de la primera secuencia de operaciones (expresion 4.16)
se designa mediante Ri, mientras que el error relativo de la i-esima operacion de la segunda
(expresion 4.17) se representa por ^Ri.
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 83
Fig. 4.15 Esquemas de representacion de la propagacion del error
En el cuarto paso del metodo hay que determinar el error en cada uno de los resultados
parciales. El error que se comete en las diferentes operaciones de la primera alternativa es
R1 = b
b+ c rb + c
b+ c rc + r1
R2 = R1 + ra + r2 = b
b+ c rb + c
b+ c rc + r1 + ra + r2
(4:18)
donde r1 y r2 representan los errores de redondeo que se cometen al almacenar los resultados
intermedios de las dos operaciones.
El error en las operaciones de la segunda alternativa es
^R1 = ra + rb + ^r1
^R2 = ra + rc + ^r2
^R3 = ab
ab+ ac
^R1 + ac
ab+ ac
^R2 + ^r3
= b
b+ c ra + rb + ^r1 + c
b + c ra + rc + ^r2 + ^r3
(4:19)
Como en el caso anterior, ^r1, ^r2 y ^r3 representan los errores de redondeo cometidos al almacenar
los resultados obtenidos en las tres operaciones.
© Los autores, 1998; © Edicions UPC, 1998.
84 Metodos numericos
Por ultimo (quinto paso del metodo) hay que calcular la cota del error en la ultima expresion
de cada alternativa. Para ello, se deben realizar las suposiciones pertinentes sobre como se
realizan las operaciones y sobre la composicion del error de los datos. Por ejemplo, en el
estudio que se esta realizando se puede suponer que:
1. Las operaciones se realizan manualmente (en base diez), coma otante, utilizando cua-
tro d gitos para la parte fraccionaria y redondeando siempre por aproximacion. En estas
condiciones y de acuerdo con la expresion 4.9, la cota del error relativo de redondeo es
r = (1=2)101;4 = 0:0005.
2. Los datos no contienen error inherente. Es decir, el error que puedan presentar los datos
solo es debido al error de redondeo.
Bajo estas hipotesis, los erroresde los datos (ra, rb, y rc) y los errores cometidos al almacenar
los resultados intermedios de las diversas operaciones (r1, r2, ^r1, ^r2 y ^r3) se deben solo al error
de redondeo. Por consiguiente veri can que
jraj r jr1j r j^r1j r
jrbj r jr2j r j^r2j r
jrcj r j^r3j r
Se debe resaltar que las desigualdades anteriores indican claramente que se desconoce el valor
exacto del error relativo de redondeo. En este sentido, lo unico que se puede a rmar es que el
valor absoluto del error relativo de redondeo que se produce al almacenar los numeros es inferior
a una cierta cantidad r. Por lo tanto, al realizar el analisis de perturbaciones hay que tomar el
valor absoluto de las expresiones 4.18 y 4.19. En consecuencia, para la primera alternativa se
obtiene
jR2j = b
b+ c rb + c
b+ c rc + r1 + ra + r2
b
b+ c jrbj + c
b+ c jrcj + jr1j + jraj + jr2j
b
b+ c r + c
b+ c r + r + r + r

b
b+ c + c
b+ c + 3
#
r
(4:20)
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 85
mientras que para la segunda se obtiene
j^R3j = b
b+ c ra + rb + ^r1 + c
b+ c ra + rc + ^r2 + ^r3
b
b+ c jra + rb + ^r1 j + c
b+ c jra + rc + ^r2 j + j^r3j
b
b+ c
h
jra j + jrb j + j^r1 j
i
+ c
b+ c
h
jra j + jrc j + j^r2 j
i
+ j^r3 j

h b
b+ c + c
b+ c
i
3 + 1
#
r
(4:21)
Las expresiones4.20 y 4.21 muestran que la cota del errorrelativo de ambas operaciones depende
linealmente de la cota del error relativo de redondeo. Ademas, muestran que la cota del error no
es la misma paraambas alternativas. Este resultadoparece contradecirla propiedad distributiva
del producto respecto de la suma. Sin embargo se debe recordar que en esta deduccion se ha
considerado que los numeros se almacenan mediante una cadena nita de d gitos.
Por ultimo, del resultado anterior se desprende la siguiente pregunta: cual de los dos
metodos proporciona una cota del error menor? Para ello se plantea si es cierta la siguiente
desigualdad
jR2j j^R3j
Es decir 
b
b+ c + c
b+ c + 3
#
r

h b
b+ c + c
b + c
i
3 + 1
#
r
b
b + c + c
b+ c + 2
h b
b+ c + c
b+ c
i
3
1 b
b+ c + c
b+ c
que evidentemente es cierta. Por lo tanto, desde el punto de vista numerico, es preferible utilizar
la primera alternativa puesto que conlleva una cota del error del resultado menor.
Problema 4.4:
En el proceso de dise~no de unas piezas metalicas, se debe calcular el per metro P
de una elipse de semiejes a y b con un error relativo inferior a 5 10;2. Para ello
se ha decidido utilizar la siguiente expresion
P = 2
r
a2 + b2
2
Se pide:
a) Efectuar un estudio completo de propagacion de errores, incluidos los errores
inherentes y los errores de redondeo, para el calculo del per metro P.
b) Obtener una expresion de la cota del error relativo del per metro P.
© Los autores, 1998; © Edicions UPC, 1998.
86 Metodos numericos
c) Un operario asegura que siempre se podra calcular correctamente dicho per -
metro si se miden los semiejes con una cinta metrica de precision igual a
2:5% y se realizan las operaciones en base diez, coma otante, utilizando tres
d gitos para la mantisa (sin incluir el signo) y redondeando por aproximacion.
Es cierta esta a rmacion? En caso negativo, determinar cual deber a ser la
precision exigible a la cinta metrica.
Problema 4.5:
Para iniciar la fabricacion en masa de rodamientos de alta calidad, un ingeniero
debe medir, con la mayor precision posible, el radio A de una peque~na esfera
metalica que forma parte del prototipo. Para ello dispone de tres alternativas:
1. Medir el diametro D con un pie de rey y obtener el radio A como A = D=2.
2. Medir la super cie S mediante tecnicas indirectas y obtener el radio como
A =
q
S
4 .
3. Medir el volumen V sumergiendo la esfera en un l quido y obtener el radio
como A = 3
q
3V
4 .
Se pide:
a) Efectuar un estudio completo de propagacion de errores, incluidos los errores
inherentes y los errores de redondeo, para cada una de las tres alternativas.
b) Obtener una cota del error relativo en el radio A, para cada una de las tres
alternativas.
El ingeniero sabe que la cota del error relativo inherente de las medidas ex-
perimentales D, S y V es de 10;3. Para efectuar los calculos, utiliza un sencillo
programa en FORTRAN, que trabaja con variables REAL*4. Ciertos condicio-
nantes de dise~no exigen la obtencion del radio A con un error relativo maximo
del 0.05%.
c) Cual de las tres alternativa(s) puede utilizar el ingeniero para obtener el radio
A con la precision requerida? Cual es la mas indicada?
Problema 4.6:
Durante la construccion de un puente atirantado los ingenieros se plantean el si-
guiente problema: con que precision hay que medir la posicion de los anclajes de
los tirantes, tanto en la pila como en el tablero, para tener un error en la longitud
de los cables inferior a 25 cm? Se sabe que aproximadamente los cables miden
100 m, se puede suponer que se trabaja con in nitas cifras signi cativas correctas
(sin errores de redondeo) y que el error inherente de las medidas necesarias es
siempre el mismo.
En realidad la posicion de los anclajes se conoc a exactamente, siendo sus coor-
denadas numeros enteros, y uno de los ingenieros de obra encargo ya los tirantes.
Dicho ingeniero tiene por costumbre realizar los calculos en obra con dos d gitos
de precision. Serviran los cables por el pedidos?
Nota: se supondra que el peso propio de los tirantes es despreciable y que la
estructura no se deforma. As pues, el conjunto formado por el tablero, la pila y
el cable de ne un triangulo rectangulo.
© Los autores, 1998; © Edicions UPC, 1998.
4 Numero, algoritmo y errores 87
4.7 Bibliograf a
Henrici, P. Elementos de analisis numerico. Trillas, 1972.
Higham, N.J. Accuracy and Stability of Numerical Algorithms. SIAM, 1996.
Hildebrand, F.B. Introduction to Numerical Analysis. McGraw-Hill, 1974.
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 89
5 Ceros de funciones
Objetivos
Describir tres tecnicas numericas iterativas para hallar ceros de funciones (f(x) = 0):
metodo de la biseccion, metodo de Newton y metodo de la secante.
Estudiar y comparar los tres metodos mediante algunos ejemplos numericos.
Explicar las funciones externas FUNCTION de FORTRAN.
5.1 Introduccion
Muchos problemas pueden modelarse matematicamente como una ecuacion
f(x) = 0 (5:1)
donde f es una cierta funcion de una variable x. Se trata pues de hallar los valores de x que
satisfacen la ecuacion 5.1. Estos valores se llaman ceros de la funcion f o ra ces de la ecuacion
f(x) = 0, y se denotan por x . Gra camente, los ceros de una funcion son los puntos de
interseccion de la gra ca y = f(x) con el eje de las x.
Para algunos casos sencillos, la ecuacion 5.1 puede resolverse anal ticamente. Supongase,
por ejemplo, que f es un polinomio de segundo grado, f(x) = ax2+bx+c. Entonces, el numero
de ceros (reales) depende del valor del discriminante = b2 ; 4ac para  0, la funcion f
tiene dos ceros x = (;b
p
)=2a.
En un problema mas general, si f es una funcion cualquiera, la ecuacion 5.1 no puede
resolverse anal ticamente. De hecho, ni siquiera se sabe a priori cuantos ceros tiene f: varios,
uno, ninguno? En estos casos, es necesario utilizar una tecnica numerica iterativa: a partir
de una aproximacion inicial x0 a un cero x de f, se construye iterativamente una sucesion de
© Los autores, 1998; © Edicions UPC, 1998.
90 Metodos numericos
aproximaciones fxkg. El super ndice k es el contador de iteraciones: en la primera iteracion,
se calcula x1 en la segunda, x2, y as sucesivamente. El proceso iterativo se detiene cuando,
para un cierto valor de k, el valor xk es una aproximacion su cientemente buena a x .
Puede verse pues que para obtener numericamente un cero de f hay que responder las tres
preguntas siguientes:
1. Como se elige la aproximacion inicial x0?
2. Como se construye la sucesion fxkg de aproximaciones?
3. Como se decide si xk es una aproximacion su cientemente buena a x ?
Estas preguntas se responden a lo largo del cap tulo. De momento, y para terminar este
apartado de introduccion, se presentan dos ejemplos de la ecuacion 5.1.
5.1.1 Calculo de ra ces cuadradas
Un ingeniero necesita calcular la ra z cuadrada x de un numero s, x =
ps, haciendo
unicamente operaciones aritmeticas elementales (suma, resta, producto y division). Esta es
la situacion real en el dise~no de algunos ordenadores, puesto que solo estas cuatro operaciones
estan incorporadas a nivel de hardware, y las demas operaciones deben hacerse a partir de ellas.
Dado que no se puede calcular directamente la ra z cuadrada
ps, se utiliza una estrategia
alternativa. Elevando la expresion x =
ps al cuadrado y pasando s a la izquierda de la igualdad,
puede escribirse
f(x) = x2 ;s = 0 (5:2)
En la ecuacion 5.2 queda claro que el calculo de
ps equivale a obtener el cero de la funcion
f(x) = x2 ;s. En otras palabras, se trata de hallar la interseccion de la gra ca y = f(x) con
el eje de las x (vease la gura 5.1). Como se vera en los apartados siguientes, la ecuacion 5.2
puede resolverse de manera iterativa empleando unicamente las cuatro operaciones aritmeticas
elementales.
5.1.2 Como jugar al billar en una mesa circular
La ultima moda entre los a cionados al billar es la mesa circular (vease la gura 5.2). Para
los principiantes, el juego consiste simplemente en golpear la bola Q con la bola P despues de
un impacto I en la banda. Los parametros del problema pueden verse en la gura 5.2: la mesa
tiene radio R, la posicion de las bolas P y Q queda determinada por las coordenadas cartesianas
(xP yP ) y (xQ yQ), y el punto de impacto I viene de nido por el angulo .
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 91
Fig. 5.1 Gra ca de la funcion f(x) = x2 ;s
Fig. 5.2 Jugando al billar en una mesa circular
© Los autores, 1998; © Edicions UPC, 1998.
92 Metodos numericos
Mediante consideraciones geometricas sencillas (que se dejan como ejercicio al lector intere-
sado) puede verse que los valores de que proporcionan los puntos de impacto I son las ra ces
de la ecuacion
f( ) = xP sin ;yP cosp
(Rcos ;xP )2 + (Rsin ;yP )2 +
xQ sin ;yQ cos
p
(Rcos ;xQ)2 + (Rsin ;yQ)2 = 0 (5:3)
Notese que es la unica incognita de la ecuacion 5.3. Los valores de R, xP , yP , xQ e yQ
son datos del problema. Para resolver la ecuacion 5.3 hay que utilizar una tecnica numerica
iterativa, que construya una sucesion f kg de aproximaciones a un cero de la funcion f.
5.2 Metodo de la biseccion
La primera tecnica iterativa para hallar ceros de funciones que se presenta aqu es el metodo
de la biseccion. Se ilustrara mediante el calculo de
p
2 a partir de operaciones aritmeticas
elementales. Se trata, pues, de tomar s = 2 en la ecuacion 5.2. Tal como ya se ha comentado,p
2 es el cero de la funcion f(x) = x2 ;2 (vease la gura 5.3).
Fig. 5.3 Calculo de
p
2 por el metodo de la biseccion
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 93
El metodo de la biseccion consiste en:
1. Inicializar el contador de iteraciones a cero (k = 0).
2. Elegir una aproximacion inicial x0 y otro valor a de manera que el intervalo que de nen estos
dos puntos (que sera x0 a para x0  a y a x0 para x0  a) contenga el cero buscado x
y solo ese cero. Para el problema que se esta estudiando es muy sencillo ver que la funcion
f(x) = x2 ;2 tiene un unico cero x =
p
2 en el intervalo 1 2]. Se toma, por tanto, x0 = 1
y a = 2. Para un problema general, se utiliza el siguiente control para elegir x0 y a: si f
es una funcion continua y el intervalo de extremos x0 y a contiene un cero de f, entonces
f(x0) y f(a) tienen signos distintos (es decir, f(x0)f(a)  0). En la gura 5.3 puede verse
como, efectivamente, f(x0)  0 y f(a)  0.
3. Tomar el punto medio del intervalo, xk+1 = (xk + a)=2, como siguiente aproximacion a x .
Notese que xk+1 divide al intervalo de extremos xk y a en dos nuevos intervalos con la mitad
de longitud. Por este motivo, se habla de metodo de la biseccion.
4. Decidir si xk+1 es una aproximacion su cientemente buena a x . En caso a rmativo, detener
el proceso iterativo y tomar x xk+1. En caso negativo, seguir iterando. Para tomar la
decision es necesario emplear algun criterio de convergencia (ver apartado 5.3).
5. Detectar cual de los dos intervalos obtenidos en el paso 3 contiene x . Puede hacerse de
manera sistematica, sin necesidad de dibujar la gra ca de la funcion, a partir del signo de
f(xk+1). Si f(xk+1) y f(xk) tienen signos distintos, entonces x esta en el intervalo de
extremos xk y xk+1. Si, por el contrario, el cambio de signo de f se produce entre xk+1 y
a, el cero x esta entre xk+1 y a. Por ultimo, puede ocurrir que f(xk+1) = 0 en este caso,
xk+1 es el cero x y se detiene el proceso iterativo de biseccion.
6. Tomar el intervalo escogido en el paso 5 como nuevo intervalo de trabajo. Para obtener
un algoritmo mas compacto y facilitar su programacion, interesa denotar por a uno de los
extremos del intervalo (el otro extremo es xk+1) durante todo el proceso. Para ello se adopta
el siguiente criterio:
si
8

:
f(xk+1)f(xk)  0 a xk
f(xk+1)f(xk) 0 a a
7. Incrementar en 1 el contador de iteraciones (k k + 1) y volver al paso 3.
En resumen, en el metodo de la biseccion se parte de un intervalo inicial que contiene el
cero x , y se va subdividiendo este intervalo hasta encerrar a x en un intervalo tan peque~no
como se desee.
Observese que el algoritmo que se acaba de presentar aborda las tres cuestiones planteadas
en el apartado 5.1: eleccion de la aproximacion inicial x0 (paso 2), construccion de la sucesion
fxkg de aproximaciones a x (pasos 3, 5, 6 y 7) y nalizacion de las iteraciones (paso 4).
© Los autores, 1998; © Edicions UPC, 1998.
94 Metodos numericos
En el apartado 5.7 se muestra un programa FORTRAN (programa 5.1) que calcula ra ces
cuadradas por el metodo de la biseccion. El programa trabaja en doble precision (variables
REAL*8). Al utilizar el programa para calcular
p
2 con x0 = 1, a = 2, y tolerancias de conver-
gencia (ver apartado siguiente) de tolx = TOLf = 0:5 10;8, se obtienen los resultados de la
tabla 5.1.
Tabla 5.1 Calculo de
p
2 por el metodo de la biseccion a partir de x0 = 1 y a = 2
Iteracion Extremo a Aproximacion x f(x) Error relativo en x
========= ========== ============== ========== ===================
0 2.0000000 1.0000000 -1.000D+00 -3.333D-01
1 1.0000000 1.5000000 2.500D-01 2.000D-01
2 1.5000000 1.2500000 -4.375D-01 -9.091D-02
3 1.5000000 1.3750000 -1.094D-01 -4.348D-02
4 1.3750000 1.4375000 6.641D-02 2.222D-02
5 1.4375000 1.4062500 -2.246D-02 -1.099D-02
6 1.4062500 1.4218750 2.173D-02 5.525D-03
7 1.4218750 1.4140625 -4.272D-04 -2.755D-03
8 1.4140625 1.4179688 1.064D-02 1.379D-03
9 1.4140625 1.4160156 5.100D-03 6.901D-04
10 1.4140625 1.4150391 2.336D-03 3.452D-04
11 1.4140625 1.4145508 9.539D-04 1.726D-04
12 1.4140625 1.4143066 2.633D-04 8.632D-05
13 1.4143066 1.4141846 -8.200D-05 -4.316D-05
14 1.4141846 1.4142456 9.063D-05 2.158D-05
15 1.4141846 1.4142151 4.315D-06 1.079D-05
16 1.4142151 1.4141998 -3.884D-05 -5.395D-06
17 1.4142151 1.4142075 -1.726D-05 -2.697D-06
18 1.4142151 1.4142113 -6.475D-06 -1.349D-06
19 1.4142151 1.4142132 -1.080D-06 -6.743D-07
20 1.4142132 1.4142141 1.617D-06 3.372D-07
21 1.4142132 1.4142137 2.687D-07 1.686D-07
22 1.4142137 1.4142134 -4.056D-07 -8.429D-08
23 1.4142137 1.4142135 -6.846D-08 -4.215D-08
24 1.4142135 1.4142136 1.001D-07 2.107D-08
25 1.4142135 1.4142136 1.584D-08 1.054D-08
26 1.4142136 1.4142136 -2.631D-08 -5.268D-09
27 1.4142136 1.4142136 -5.237D-09 -2.634D-09
28 1.4142136 1.4142136 5.300D-09 1.317D-09
29 1.4142136 1.4142136 3.154D-11 6.585D-10
Convergencia en la iteracion 29
La raiz cuadrada de 2.0000000 es 1.4142136
Los valores de las tolerancias utilizados en el ejemplo de la tabla 5.1 son muy estrictos, y se
utilizan en este cap tulo paradistinguir bien el comportamientorelativo de los distintos metodos.
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 95
Notese que, con estas tolerancias, se obtienen ocho cifras signi cativas en los resultados. Puede
verse en la tabla 5.1 como el intervalo inicial 1 2] se va subdividiendo hasta llegar, despues
de 29 iteraciones, a x29 = 1:4142136, que se toma como aproximacion a
p
2. Otra entrada del
programa es la variable MAXITER, que representa el numero de iteraciones que se desea realizar
como maximo. En caso de alcanzarse este valor, el programa nalizara sin ningun mensaje
de convergencia. Habitualmente, al detectarse este fenomeno se debe ejecutar de nuevo el
programa inicializandose el metodo mas cerca de la solucion.
Considerese ahora al problema del billar circular. Tomando como punto de partida el
programa 5.1, se escribe el programa 5.2 (apartado 5.7) que resuelve la ecuacion 5.3 en lugar
de la ecuacion 5.2. Se toman los valores R = 1, xP = 0:6, yP = 0, xQ = ;0:6, yQ = 0
(vease la gura 5.4). Un punto de impacto I viene dado entonces por = =2. Se puede
capturar esta solucion tomando x0 = 1:5  =2, a = 1:6  =2. Si se mantienen las tolerancias
tolx = TOLf = 0:5 10;8, el metodo de la biseccion proporciona los resultados de la tabla 5.2.
Efectivamente, en 23 iteraciones se obtiene 23 = 1:5707963 =2.
Fig. 5.4 Problema del billar para R = 1, xP = 0:6, yP = 0, xQ = ;0:6 e yQ = 0
En cada iteracion del metodo de la biseccion es necesario evaluar f(xk) (paso 5). Para ello,
en el programa FORTRAN se trabaja con una funcion externa (FUNCTION). Se ha visto en el
cap tulo 3 que el FORTRAN dispone de una biblioteca de funciones intr nsecas(trigonometricas,
logar tmicas, exponenciales, etc.) ya incorporadas. Las FUNCTIONs, por el contrario, son
funciones de usuario que se pueden de nir a voluntad para resolver un problema concreto.
Por ejemplo, para el problema del billar circular se ha de nido f( ) (ver ecuacion 5.3) como
una FUNCTION. En el apartado 5.7 se explica como de nir y trabajar con funciones externas
FUNCTION.
Problema 5.1:
a) Determinar, por simple inspeccion visual, cuales son los demas ceros de la
funcion f( ) (ecuacion 5.3) para los datos de la gura 5.4 (Pista: hay un total
© Los autores, 1998; © Edicions UPC, 1998.
96 Metodos numericos
de cuatro ceros). Son todos estos ceros soluciones validas desde un punto de
vista f sico?
b) Veri car que los valores obtenidos en el apartado a son realmente ceros de f( )
utilizando el metodo de la biseccion. Justi car razonadamente los resultados
obtenidos.
Tabla 5.2 Obtencion de la solucion = =2 por el metodo de la biseccion
Iteracion Extremo a Aproximacion x f(x) Error relativo en x
========= ========== ============== ========== ===================
0 1.6000000 1.5000000 3.211D-02 -3.226D-02
1 1.6000000 1.5500000 9.440D-03 -1.587D-02
2 1.5500000 1.5750000 -1.908D-03 8.000D-03
3 1.5750000 1.5625000 3.766D-03 -3.984D-03
4 1.5750000 1.5687500 9.290D-04 -1.988D-03
5 1.5687500 1.5718750 -4.897D-04 9.950D-04
6 1.5718750 1.5703125 2.196D-04 -4.973D-04
7 1.5703125 1.5710938 -1.350D-04 2.487D-04
8 1.5710938 1.5707031 4.231D-05 -1.243D-04
9 1.5707031 1.5708984 -4.635D-05 6.217D-05
10 1.5707031 1.5708008 -2.022D-06 3.109D-05
11 1.5708008 1.5707520 2.014D-05 -1.554D-05
12 1.5708008 1.5707764 9.061D-06 -7.771D-06
13 1.5708008 1.5707886 3.519D-06 -3.886D-06
14 1.5708008 1.5707947 7.486D-07 -1.943D-06
15 1.5707947 1.5707977 -6.368D-07 9.714D-07
16 1.5707977 1.5707962 5.592D-08 -4.857D-07
17 1.5707962 1.5707970 -2.904D-07 2.429D-07
18 1.5707962 1.5707966 -1.173D-07 1.214D-07
19 1.5707962 1.5707964 -3.067D-08 6.071D-08
20 1.5707964 1.5707963 1.263D-08 -3.036D-08
21 1.5707963 1.5707963 -9.020D-09 1.518D-08
22 1.5707963 1.5707963 1.803D-09 -7.589D-09
23 1.5707963 1.5707963 -3.608D-09 3.795D-09
Convergencia en la iteracion 23
Solucion para theta= 1.5707963
5.3 Criterios de convergencia
Se dice que la sucesion fxkg converge a x si
limk!1
xk
= x
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 97
que puede ponerse tambien como
limk!1
Ek
= limk!1
(xk
;x ) = 0 (5:4)
donde Ek es el error absoluto de la aproximacion xk a x . Es decir, la sucesion converge si el
error absoluto tiende a cero cuando el contador de iteraciones k tiende a in nito.
Al dividir la ecuacion 5.4 por x (suponiendo x 6= 0) se obtiene
limk!1
rk
= limk!1
xk ;x
x = 0 (5:5)
donde rk es el error relativo de la aproximacion xk.
Para aceptar una aproximacion xk como su cientemente buena se exige que su error relativo
rk sea, en valor absoluto, inferior a una tolerancia preestablecida tolx:
jrk
j  tolx (5:6)
Sin embargo, a la vista de la expresion de rk (ecuacion 5.5) esta claro que en la practica no
se puede calcular rk, puesto que para ello ser a necesario conocer el cero x . Dado que x es
precisamente la incognita del problema, se hace la siguiente aproximacion:
rk xk ;xk+1
xk+1 (5:7)
En la ecuacion 5.7 se ha sustituido x por la aproximacion en la siguiente iteracion, xk+1. La
idea es que, si la sucesion converge, entonces xk+1 es mas proxima al cero x que xk y puede
utilizarse como valor aproximado de referencia. Combinando las ecuaciones 5.6 y 5.7 se obtiene
el criterio practico de convergencia
xk ;xk+1
xk+1  tolx (5:8)
Este criterio de convergenciafallar asi x = 0 (division por cero), porque el error relativo dejar a
de estar de nido. Se har a necesario entonces trabajar con errores absolutos, reescribiendo la
ecuacion 5.8 como
xk
;xk+1  tolx xk+1 + E (5:9)
donde E es una cota del error absoluto xk ;xk+1 para el caso x = 0. T picamente E se escoge
ordenes de magnitud menor que tolx. De esta forma, para x 6= 0, el criterio de convergencia
5.9 coincide practicamente con el criterio de convergencia 5.8.
Desde un punto de vista algor tmico, los criterios de convergencia 5.8 o 5.9 implican que
para decidir si xk es o no una aproximacion su cientemente buena a x es necesario calcular la
siguiente aproximacion xk+1.
© Los autores, 1998; © Edicions UPC, 1998.
98 Metodos numericos
Debido a la aproximacion hecha en la ecuacion 5.7, puede ocurrir en algunos casos que la
condicion de convergencia dada por la ecuacion 5.8 se cumpla estando xk lejos de x . Para
evitar estos problemas, se complementa el criterio relativo en x (ecuacion 5.8) con un criterio
absoluto en f.
Para ello, basta darse cuenta de que, si fxkg converge a x , se veri ca tambien
limk!1
f(xk
) = 0
puesto que f(x ) = 0. Esto signi ca que f(xk) es directamente el error absoluto en f. Para
aceptar xk como aproximacion nal a x se exige |ademas de la condicion 5.8| que este error
absoluto sea, en valor absoluto, inferior a una tolerancia TOLf preestablecida:
jf(xk
)j  TOLf
5.4 Metodo de Newton
Se ha comprobado en el apartado 5.2 que el metodo de la biseccion es una tecnica robusta
para hallar ceros de funciones: basta que f sea una funcion continua, que el intervalo inicial
de nido por x0 y a contenga un cero x y que f tenga signos distintos en los extremos del
intervalo (f(x0)f(a)  0) para garantizar que el metodo va encerrando a x en un intervalo
cada vez mas peque~no. La longitud del intervalo nal puede controlarse mediante las tolerancias
de convergencia. Sin embargo, los dos ejemplos del apartado 5.2 tambien muestran que la
biseccion es una tecnica lenta: para las tolerancias exigidas, han sido necesarias entre 20 y 30
iteraciones para alcanzar la convergencia.
Una tecnica mas rapida (aunque no tan robusta, como se vera) es el metodo de Newton. Se
hara en primer lugar una deduccion anal tica del metodo y luego una deduccion gra ca.
5.4.1 Deduccion anal tica del metodo de Newton
Supongase que xk es una aproximacion a un cero x de una cierta funcion f. Puesto que
xk 6= x , resulta
f(xk
) 6= 0
Dado que xk no es el cero x buscado, se intenta que la siguiente aproximacion xk+1 s lo
sea. Para ello se de ne xk+1 como
xk+1 = xk
+ xk+1 (5:10)
donde xk+1 es la correccion que se hace a xk para obtener xk+1. El criterio para calcular esta
correccion xk+1 es precisamente imponer que xk+1 sea un cero de f, es decir, f(xk+1) = 0.
Teniendo en cuenta la ecuacion 5.10, esto se escribe como
f(xk
+ xk+1) = 0 (5:11)
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 99
Esta claro que para una funcion f arbitraria no es posible despejar xk+1 en la ecuacion 5.11.
Por este motivo, se hace un desarrollo en serie de Taylor de primer orden de f alrededor de
xk, y se obtiene
f(xk
+ xk+1) f(xk
) + f0(xk
) xk+1 (5:12)
Es importante resaltar que la ecuacion 5.12 es una aproximacion y no una igualdad, porque
se han despreciado los terminos del desarrollo de Taylor con derivadas de orden superior a uno.
Si ahora se sustituye f(xk + xk+1) en la ecuacion 5.11 por la aproximacion obtenida en
5.12, resulta
f(xk
) + f0(xk
) xk+1 = 0
de donde puede aislarse xk+1 como
xk+1 = ; f(xk)
f0(xk) (5:13)
siempre que f0(xk) 6= 0. Finalmente, reemplazando esta expresion de xk+1 en la ecuacion
5.10 se llega a la expresion del metodo de Newton:
xk+1 = xk
; f(xk)
f0(xk) (5:14)
La ecuacion 5.14 proporciona una estrategia para construir la sucesion de aproximaciones fxkg
a un cero x . Como ya se ha comentado, para completar el metodo es necesario elegir una
aproximacion inicial x0 y un criterio de nalizacion de iteraciones. En cuanto a este ultimo
punto, se emplean los mismos criterios de convergencia (relativo en x y absoluto en f) que para
el metodo de la biseccion (ver apartado 5.3).
5.4.2 Deduccion gra ca del metodo de Newton
El metodo de Newton puede deducirse tambien de manera gra ca, tal y como se muestra en
la gura 5.5. La idea es la siguiente: dada una cierta xk, se aproxima la funcion f por la recta
tangente a la curva y = f(x) en el punto (xk f(xk)). La pendiente de esta recta es justamente
la derivada de f en xk. A continuacion se toma la interseccion de esta recta con el eje de las x
como siguiente aproximacion xk+1. En la gura 5.5 se puede observar que f(xk), xk+1 y la
pendiente f0(xk) estan relacionados segun
f(xk)
; xk+1 = f0(xk
)
que es equivalente a la ecuacion 5.13 obtenida en la deduccion anal tica del metodo.
Se ha escrito un programa en FORTRAN para calcular ra ces cuadradas a partir de ope-
raciones elementales mediante el metodo de Newton (programa 5.3, apartado 5.7). En este
caso, es necesario de nir dos funciones externas FUNCTION: una para la funcion f y otra para
su derivada f0.
© Los autores, 1998; © Edicions UPC, 1998.
100 Metodos numericos
Si se emplea el programa5.3 para calcular
p
2 con los mismos datos utilizados para el metodo
de la biseccion (x0 = 1, tolx = TOLf = 0:5 10;8), el metodo de Newton arroja los resultados
de la tabla 5.3.
Fig. 5.5 Deduccion gra ca del metodo de Newton
Tabla 5.3 Calculo de
p
2 por el metodo de Newton a partir de x0 = 1
Iteracion Aproximacion x f(x) Error relativo en x
========= ============== ========== ===================
0 1.0000000 -1.000D+00 -3.333D-01
1 1.5000000 2.500D-01 5.882D-02
2 1.4166667 6.944D-03 1.733D-03
3 1.4142157 6.007D-06 1.502D-06
4 1.4142136 4.511D-12 1.128D-12
Convergencia en la iteracion 4
La raiz cuadrada de 2.0000000 es 1.4142136
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 101
Las tablas 5.1 y 5.3 ponen de mani esto que la convergencia a
p
2 es mucho mas rapida
para el metodo de Newton que para el metodo de la biseccion. Esto es debido a que el metodo
de Newton se basa en una estrategia muy inteligente: a medida que la aproximacion xk se
va acercando al cero x de f, la recta tangente se va pareciendo parece cada vez mas a la curva
y = f(x), hasta confundirse con ella (vease la gura 5.6).
Debido a su rapidez, el metodo de Newton es ampliamente utilizado en la practica. Sin
embargo, no es tan robusto como el metodo de la biseccion, tal como se ilustra en el problema
5.2.
Problema 5.2:
Se desea calcular
p
2 tomando x0 = 0 como aproximacion inicial. Veri car que:
a) puede hacerse sin di cultades mediante el metodo de la biseccion (con a = 2,
por ejemplo).
b) el metodo de Newton falla. Por que?
Problema 5.3:
a) Escribir un programa en FORTRAN que resuelva el problema del billar cir-
cular mediante el metodo de Newton.
b) Utilizar el programa para hallar las soluciones con los datos de la gura 5.4.
Fig. 5.6 El metodo de Newton es rapido!
© Los autores, 1998; © Edicions UPC, 1998.
102 Metodos numericos
5.5 Metodo de la secante
Se ha visto en el apartado anterior que la rapidez del metodo de Newton es debida a la
utilizacion de la recta tangente en cadapunto. Ello obligaa efectuar dos evaluacionesfuncionales
en cada iteracion (la funcion y su derivada), en lugar de trabajar unicamente con valores de la
funcion. Esto hace que el coste computacional por iteracion sea mas elevado para el metodo de
Newton que para el metodo de la biseccion. En los ejemplos expuestos aqu el calculo de f y
f0 no es excesivamente costoso, pero es bastante comun en problemas reales que la evaluacion
de f y f0 requiera resolver un problema complejo cada vez.
Por otro lado, puede ocurrir que para un determinado problema el calculo de derivadas sea
muy farragoso o incluso imposible (por ejemplo, si no se dispone de una expresion anal tica de
f(x)). En estos casos, se puede utilizar el metodo de la secante. La idea basica de este metodo se
ilustra en la gura 5.7: la recta tangente a la curva y = f(x) en el punto (xk f(xk)) se aproxima
mediante la recta secante que pasa por este punto y el punto (xk;1 f(xk;1)), obtenido en la
iteracion anterior. En otras palabras, la derivada f0(xk) no se calcula, sino que se aproxima por
f0(xk
) f(xk) ;f(xk;1)
xk ;xk;1
La interseccion de esta recta secante con el eje de las x se toma como siguiente aproximacion
xk+1. Este metodo necesita dos aproximaciones iniciales (x0 y x1) para poder trazar la primera
recta secante.
El programa 5.4 (ver apartado 5.7) es un programa FORTRAN que halla ra ces cuadradas
mediante el metodo de la secante. Al calcular
p
2 con x0 = 1, x1 = 1:5 (es decir, las dos
primeras aproximaciones del metodo de Newton, vease la tabla 5.3) y tolx = TOLf = 0:5 10;8,
se obtienen los resultados de la tabla 5.4. Comparando las tablas 5.1, 5.3 y 5.4 puede verse
que la convergencia del metodo de la secante es ligeramente mas lenta que la del metodo de
Newton, pero claramente mas rapida que la del metodo de la biseccion.
Tabla 5.4 Calculo de
p
2 por el metodo de la secante a partir de x0 = 1 y x1 = 1:5
Iteracion Aproximacion x f(x) Error relativo en x
========= ============== ========== ===================
0 1.0000000 -1.000D+00 -3.333D-01
1 1.5000000 2.500D-01 7.143D-02
2 1.4000000 -4.000D-02 -9.756D-03
3 1.4137931 -1.189D-03 -2.988D-04
4 1.4142157 6.007D-06 1.502D-06
5 1.4142136 -8.931D-10 -2.233D-10
Convergencia en la iteracion 5
La raiz cuadrada de 2.0000000 es 1.4142136
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 103
Fig. 5.7 Metodo de la secante
Problema 5.4:
a) Escribir un programa en FORTRAN que resuelva el problema del billar cir-
cular mediante el metodo de la secante.
b) Utilizar el programa para hallar las soluciones con los datos de la gura 5.4.
5.6 Gra cas de convergencia
Una manera habitual de presentar los resultados de convergencia de los distintos metodos
es mediante gra cas que muestran como decrece el error relativo (en escala logar tmica) al
aumentar el numero de iteraciones.
En la gura 5.8 se muestran las curvas correspondientes a los tres metodos expuestos para
el problema del calculo de
p
2. La mayor rapidez del metodo de Newton queda re ejada en
una curva que decrece mucho en pocas iteraciones. En el otro extremo esta el metodo de la
© Los autores, 1998; © Edicions UPC, 1998.
104 Metodos numericos
biseccion, con un decrecimiento mucho mas lento del error.
1,E-12
1,E-10
1,E-08
1,E-06
1,E-04
1,E-02
1,E+00
0 5 10 15 20 25 30
Iteración
Errorrelativo
Bisección
Secante
Newton
Fig. 5.8 Comparacion de los tres metodos para el calculo de
p
2
Problema 5.5: Representar en gra cas de convergencia los resultados obtenidos
en los problemas 5.1, 5.3 y 5.4, correspondientes a la resolucion del problema
del billar circular por los metodos de biseccion, Newton y secante. Comparar
razonadamente las distintas curvas.
Problema 5.6: Escribir un programa FORTRAN para obtener el(los) cero(s) de
la funcion f(x) = x2;2x+1 mediante los metodos de la biseccion, de Newton y de
la secante (el usuario debe poder elegir, al principio de la ejecucion, que metodo
desea emplear). Comentar razonadamente los resultados obtenidos. Presentan
los metodos su comportamiento t pico?
5.7 Aspectos computacionales: las funciones externas FUNCTION en
FORTRAN
La sentencia FUNCTION permite al programadorde nir sus propias funciones. Estas funciones
se llaman externas para distinguirlas de las funciones intr nsecas, ya incorporadas en el lenguaje
FORTRAN.
Supongase que en un programa es necesario calcular el area de muchos triangulos distintos
A a partir de su base y su altura (A = (bh)=2). Para no tener que programar esta formula
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 105
repetidamente a lo largo del programa principal, se de ne como una funcion externa en un
subprograma:
function area(base,altura)
area = (base*altura)/2.
return
end
Cada vez que sea necesario evaluar el area de un triangulo, desde el programa principal
puede utilizarse la funcion externa haciendo:
a = area(b,h)
Tal como se puede observar en el ejemplo:
La funcion externa se declara con la sentencia FUNCTION seguida del nombre de la funcion
y de sus argumentos entre parentesis.
Puesto que se trata de un subprograma independiente del programa principal, es necesario
terminar la funcion externa con las sentencias RETURN (para volver al programa principal)
y END (para indicar el nal del subprograma). Ambos programas (el principal y el subpro-
grama) pueden estar en un mismo archivo o en archivos distintos.
Los nombres de los argumentos de la funcion pueden ser distintos en la llamada desde el
programa principal (b, h) y en el subprograma (base, altura). Lo unico que importa es
el orden que ocupan en la lista de argumentos, su nombre es indiferente.
Debe existir concordancia de tipo entre la funcion y el resultado que devuelve. Es decir que,
por ejemplo, utilizando declaraciones por defecto, si el resultado arrojado por la funcion es
un INTEGER*4, el nombre de la funcion debe empezar por I, J, K, L, M o N, mientras que si es
un REAL*4 la inicial del nombre de la funcion debe estar comprendida entre A-H y O-Z. Si el
resultado es de otro tipo (INTEGER*2, REAL*8, REAL*16, COMPLEX, LOGICAL o CHARACTER),
debe constar expl citamente en la declaracion de la funcion. As , por ejemplo, para calcular
el area de un triangulo en doble precision se puede utilizar la funcion externa
real*8 function area(base,altura)
implicit real*8 (a-h,o-z)
area = (base*altura)/2.d0
return
end
El programa 5.1, empleado en el apartado 5.2 para calcular ra ces de ecuaciones del tipo
f(x) = 0 por el metodo de la biseccion, utiliza una FUNCTION para programar la funcion f.
Como puede observarse, la funcion externa FUNCTION que evalua la funcion f es del mismo tipo
(REAL*8) que la variable F a la que esta asignada, y en el interior es necesario volver a declarar
© Los autores, 1998; © Edicions UPC, 1998.
106 Metodos numericos
todas las variables (en este caso, mediante la sentencia IMPLICIT).
c
c Este programa calcula raices cuadradas a partir de
c operaciones aritmeticas elementales mediante el
c metodo de la BISECCION
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
c___Numero s cuya raiz cuadrada se desea calcular
write (6,10)
read (5,*) s
10 format (1x,'Raiz cuadrada de:')
c___Aproximacion inicial x0
write (6,20)
read (5,*) x
20 format (1x,'Aproximacion inicial')
c___Extremo a del intervalo inicial
write (6,30)
read (5,*) a
30 format (1x,'Extremo a del intervalo inicial')
c___Tolerancia en x
write (6,40)
read (5,*) tol_x
40 format (1x,'Tolerancia en x')
c___Tolerancia en f
write (6,50)
read (5,*) tol_f
50 format (1x,'Tolerancia en f')
c___Numero maximo de iteraciones
write (6,60)
read (5,*) maxiter
60 format (1x,'Numero maximo de iteraciones')
c___Titulos de la salida de resultados
write (6,510)
510 format (/,1x, 'Iteracion', 3x, 'Extremo a', 4x,
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 107
. 'Aproximacion x', 4x, ' f(x) ', 4x,
. 'Error relativo en x')
write (6,520)
520 format (1x, '=========', 3x, '==========',
. 3x, '==============', 4x, '==========',
. 4x, '===================')
c___Control para decidir si se puede iniciar la biseccion
c___Tienen f(a) y f(x0) signos opuestos?
fa = f(a,s)
fx = f(x,s)
if( (fa*fx) .gt. 0.d0 ) then
write (6,*) ' No se cumple la condicion f(a)*f(x0)  0'
stop
endif
c___Inicio del proceso iterativo
c___del metodo de la biseccion
do k=0, maxiter
pmedio = (a+x)/2.d0
fmedio = f(pmedio,s)
c___Calculo del error relativo en x
rel_x = (x - pmedio)/pmedio
c___Impresion de resultados
write (6,600) k,a,x,fx,rel_x
600 format (3x, i3, 7x, f10.7, 5x, f10.7, 6x, 1pd10.3,
. 8x, 1pd10.3)
c___Control de convergencia
if ( (abs(fx).lt.tol_f) .and. (abs(rel_x).lt.tol_x) ) then
write (6,700) k
700 format (/,1x, 'Convergencia en la iteracion', i3)
write (6,800) s,x
800 format (1x,'La raiz cuadrada de ', f10.7, ' es ', f10.7)
stop
endif
c___Eleccion del nuevo intervalo segun el valor de f(pmedio)
if ( (fmedio*fx) .lt. 0.d0 ) then
a = x
x = pmedio
fx = fmedio
© Los autores, 1998; © Edicions UPC, 1998.
108 Metodos numericos
else
x = pmedio
fx = fmedio
endif
enddo
end
c___________________Function f(x,s)
real*8 function f(x,s)
implicit real*8 (a-h,o-z)
f = x*x - s
return
end
Prog. 5.1 Calculo de ra ces cuadradas por el metodo de la biseccion
Como se puede ver, la utilizacion de las sentencias FUNCTION permite realizar de manera
natural una programacion en modulos (programacion estructurada) este aspecto se comentara
en detalle en el cap tulo 7. En este sentido, es interesante resaltar que si se desea utilizar el
programa 5.1 para hallar el cero de otra funcion distinta, solo es necesario modi car la FUNCTION
correspondiente (y la entrada de datos necesarios para este caso). Por ejemplo, el programa
5.2 se ha obtenido modi cando adecuadamente el programa 5.1 presentado anteriormente para
hallar las ra ces de la ecuacion 5.3 (juego del billar en una mesa circular) mediante el metodo
de la biseccion.
c
c Este programa resuelve el problema del billar circular
c mediante el metodo de la BISECCION
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
c___Radio R de la mesa de billar y posicion de las dos bolas P y Q
write (6,100)
read (5,*) r
write (6,110)
read (5,*) xp,yp
write (6,120)
read (5,*) xq,yq
100 format (1x,'Radio de la mesa:')
110 format (1x,'Coordenadas de la bola P:')
120 format (1x,'Coordenadas de la bola Q:')
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 109
c___Aproximacion inicial x0
write (6,200)
read (5,*) x
200 format (1x,'Aproximacion inicial')
c___Extremo a del intervalo inicial
write (6,210)
read (5,*) a
210 format (1x,'Extremo a del intervalo inicial')
c___Tolerancia en x
write (6,220)
read (5,*) tol_x
220 format (1x,'Tolerancia en x')
c___Tolerancia en f
write (6,230)
read (5,*) tol_f
230 format (1x,'Tolerancia en f')
c___Numero maximo de iteraciones
write (6,240)
read (5,*) maxiter
240 format (1x,'Numero maximo de iteraciones')
c___Titulos de la salida de resultados
write (6,510)
510 format (/,1x, 'Iteracion', 3x, 'Extremo a', 4x,
. 'Aproximacion x', 4x, ' f(x) ', 4x,
. 'Error relativo en x')
write (6,520)
520 format (1x, '=========', 3x, '==========',
. 3x, '==============', 4x, '==========',
. 4x, '===================')
c___Control para decidir si se puede iniciar la biseccion
c___Tienen f(a) y f(x0) signos opuestos?
fa = f(a,r,xp,yp,xq,yq)
fx = f(x,r,xp,yp,xq,yq)
if( (fa*fx) .gt. 0.d0 ) then
write (6,*) ' No se cumple la condicion f(a)*f(x0)  0'
stop
endif
c___Inicio del proceso iterativo
c___del metodo de la biseccion
© Los autores, 1998; © Edicions UPC, 1998.
110 Metodos numericos
do k=0, maxiter
pmedio = (a+x)/2.d0
fmedio = f(pmedio,r,xp,yp,xq,yq)
c___Calculo del error relativo en x
rel_x = (x - pmedio)/pmedio
c___Impresion de resultados
write (6,600) k,a,x,fx,rel_x
600 format (3x, i3, 7x, f10.7, 5x, f10.7, 6x, 1pd10.3,
. 8x, 1pd10.3)
c___Control de convergencia
if ( (abs(fx).lt.tol_f) .and. (abs(rel_x).lt.tol_x) ) then
write (6,700) k
700 format (/,1x, 'Convergencia en la iteracion', i3)
write (6,800) x
800 format (1x,'Solucion para theta= ', f10.7)
stop
endif
c___Eleccion del nuevo intervalo segun el valor de f(pmedio)
if ( (fmedio*fx) .lt. 0.d0 ) then
a = x
x = pmedio
fx = fmedio
else
x = pmedio
fx = fmedio
endif
enddo
end
c__________________Function f(theta)
real*8 function f(theta,r,xp,yp,xq,yq)
implicit real*8 (a-h,o-z)
stheta = sin(theta)
ctheta = cos(theta)
distp = ((r*ctheta-xp)*(r*ctheta-xp)+
. (r*stheta-yp)*(r*stheta-yp))**0.5
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 111
distq = ((r*ctheta-xq)*(r*ctheta-xq)+
. (r*stheta-yq)*(r*stheta-yq))**0.5
f = ((xp*stheta-yp*ctheta)/distp) +
. ((xq*stheta-yq*ctheta)/distq)
return
end
Prog. 5.2 Calculo de las ra ces de la ecuacion 5.3 por el metodo de la biseccion
En el programa 5.3 (metodo de Newton) se hace necesario utilizar dos FUNCTIONs la primera
calcula los valores de f(x) y la segunda, los de su derivada f0(x). De nuevo, si se desea utilizar
este programa para hallar los ceros de otra funcion distinta, solo es preciso modi car estos dos
modulos.
c
c Este programa calcula raices cuadradas a partir de
c operaciones aritmeticas elementales mediante el
c metodo de NEWTON
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
c___Numero s cuya raiz cuadrada se desea calcular
write (6,10)
read (5,*) s
10 format (1x,'Raiz cuadrada de:')
c___Aproximacion inicial x0
write (6,20)
read (5,*) x_actual
20 format (1x,'Aproximacion inicial')
c___Tolerancia en x
write (6,30)
read (5,*) tol_x
30 format (1x,'Tolerancia en x')
c___Tolerancia en f
write (6,40)
read (5,*) tol_f
40 format (1x,'Tolerancia en f')
© Los autores, 1998; © Edicions UPC, 1998.
112 Metodos numericos
c___Numero maximo de iteraciones
write (6,50)
read (5,*) maxiter
50 format (1x,'Numero maximo de iteraciones')
c___Titulos de la salida de resultados
write (6,510)
510 format (/,1x, 'Iteracion', 3x, 'Aproximacion x',
. 4x, ' f(x) ', 4x, 'Error relativo en x')
write (6,520)
520 format (1x, '=========', 3x, '==============',
. 4x, '==========', 4x, '===================')
c___Inicio del proceso iterativo
c___del metodo de Newton
do k=0, maxiter
c___Nueva aproximacion
fx = funcion(x_actual,s)
dx = derivada(x_actual)
x_nuevo = x_actual - (fx/dx)
c___Calculo del error relativo en x
rel_x = (x_actual - x_nuevo)/x_nuevo
c___Impresion de resultados
write (6,600) k,x_actual,fx,rel_x
600 format (3x, i3, 9x, f10.7, 6x, 1pd10.3, 8x, 1pd10.3)
c___Control de convergencia
if ((abs(fx) .lt. tol_f) .and. (abs(rel_x) .lt. tol_x)) then
write (6,700) k
700 format (/,1x, 'Convergencia en la iteracion', i3)
write (6,800) s,x_actual
800 format (1x,'La raiz cuadrada de ', f10.7, ' es ', f10.7)
stop
endif
x_actual = x_nuevo
enddo
end
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 113
c__________________Function funcion(x,s)
real*8 function funcion(x,s)
implicit real*8 (a-h,o-z)
funcion = x*x - s
return
end
c__________________Function derivada(x)
real*8 function derivada(x)
implicit real*8 (a-h,o-z)
derivada = 2.d0*x
return
end
Prog. 5.3 Calculo de ra ces cuadradas por el metodo de Newton
Como se ha podido observar, la utilizacion adecuada de FUNCTIONs facilita y rentabiliza
considerablemente la programacion. Incluso es posible reutilizar casi totalmente el programa
5.3 para implementar el metodo de la secante (ver programa 5.4).
c
c Este programa calcula raices cuadradas a partir de
c operaciones aritmeticas elementales mediante el
c metodo de la SECANTE
c
c__________________Entrada de datos
implicit real*8 (a-h,o-z)
c___Numero s cuya raiz cuadrada se desea calcular
write (6,10)
read (5,*) s
10 format (1x,'Raiz cuadrada de:')
c___Aproximaciones iniciales
write (6,20)
read (5,*) x_actual
20 format (1x,'Aproximacion inicial x0')
write (6,30)
read (5,*) x_nuevo
30 format (1x,'Aproximacion inicial x1')
© Los autores, 1998; © Edicions UPC, 1998.
114 Metodos numericos
c___Tolerancia en x
write (6,40)
read (5,*) tol_x
40 format (1x,'Tolerancia en x')
c___Tolerancia en f
write (6,50)
read (5,*) tol_f
50 format (1x,'Tolerancia en f')
c___Numero maximo de iteraciones
write (6,60)
read (5,*) maxiter
60 format (1x,'Numero maximo de iteraciones')
c___Titulos de la salida de resultados
write (6,510)
510 format (/,1x, 'Iteracion', 3x, 'Aproximacion x',
. 4x, ' f(x) ', 4x, 'Error relativo en x')
write (6,520)
520 format (1x, '=========', 3x, '==============',
. 4x, '==========', 4x, '===================')
c___Inicio del proceso iterativo
c___del metodo de la secante
do k=0, maxiter
c___Calculo del error relativo en x
rel_x = (x_actual - x_nuevo)/x_nuevo
c___Valor de f en x_actual
f_actual = f(x_actual,s)
c___Impresion de resultados
write (6,600) k,x_actual,f_actual,rel_x
600 format (3x, i3, 9x, f10.7, 6x, 1pd10.3, 8x, 1pd10.3)
c___Control de convergencia
if ((abs(f_actual).lt.tol_f).and.(abs(rel_x).lt.tol_x)) then
write (6,700) k
700 format (/,1x, 'Convergencia en la iteracion', i3)
write (6,800) s,x_actual
800 format (1x,'La raiz cuadrada de ', f10.7, ' es ', f10.7)
stop
endif
© Los autores, 1998; © Edicions UPC, 1998.
5 Ceros de funciones 115
c___Nueva aproximacion
f_nuevo = f(x_nuevo,s)
pendiente = (f_nuevo-f_actual)/(x_nuevo-x_actual)
x_actual = x_nuevo
x_nuevo = x_actual - (f_nuevo/pendiente)
enddo
end
c__________________Function f(x,s)
real*8 function f(x,s)
implicit real*8 (a-h,o-z)
f = x*x - s
return
end
Prog. 5.4 Calculo de ra ces cuadradas por el metodo de la secante
5.8 Bibliograf a
Borse, G.J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e
ingenier a. Anaya, 1989.
Breuer, S. Zwas, G. Numerical Mathematics. A Laboratory Approach. Cambridge Univer-
sity Press, 1993.
Chapra, S.C. Canale, R.P. Metodos numericos para ingenieros con aplicaciones en com-
putadores personales. McGraw-Hill, 1988.
Hoffman, J.D. Numerical Methods for Engineers and Scientists. McGraw-Hill, 1992.
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 117
6 Una introduccion a los metodos gaussianos para sis-
temas lineales de ecuaciones
Objetivos
Presentar y clasi car los metodos de resolucion numerica de sistemas lineales de
ecuaciones.
Estudiar detalladamente los metodos directos: de solucion inmediata, de eliminacion
y de descomposicion.
Desarrollar el analisis matricial del metodo de Gauss.
6.1 Consideraciones generales
6.1.1 Introduccion
El objetivo de este tema es introducir al lector en la resolucion de sistemas lineales de
ecuaciones por metodos gaussianos. Parece conveniente, en primer lugar, establecer la notacion
y algunas de las bases de algebra lineal necesarias para alcanzar el objetivo planteado.
Siguiendo la notacion introducida por Householder en 1964, en general se emplean
mayusculas en negrita A L U para las matrices,
minusculas con sub ndices aij lij uij ij ij para los coe cientes de matrices,
minusculas en negrita x y z b c d para los vectores,
letras griegas en minuscula para los escalares.
El espacio vectorial de las matrices reales m n se denota por IRm n un elemento cualquiera de
ese espacio, A 2 IRm n, es una matriz rectangular de m las y n columnas que puede escribirse
© Los autores, 1998; © Edicions UPC, 1998.
118 Metodos numericos
como
A =
0
BBBB@
a11 a12 a1 n;1 a1n
a21 a22 a2 n;1 a2n
...
...
...
...
am;1 1 am;1 2 am;1 n;1 am;1 n
am1 am2 am n;1 amn
1
CCCCA
Si m = n entonces A es cuadrada y se dice que tiene orden n. De la misma forma, Cm n es el
espacio vectorial de las matrices de coe cientes complejos.
Los vectores, que pueden ser interpretados como un caso particular del anterior con IRn 1
(equivalente a IRn), siempre se asumen como vectores columna, es decir x 2 IRn es
x =
0
BBBB@
x1
x2
...
xn;1
xn
1
CCCCA
donde las componentes xi son numeros reales. Puesto que por convencion se toman los vectores
como columna, objetos del tipo (x1 x2 xn;1 xn) o bien (x1 ::: xn) son vectores la y se
denotan por xT (T indica matriz o vector traspuesto).
Ademas de las operaciones inherentes al espacio vectorial (suma interna y producto exterior
por reales) conviene resaltar por su importancia el producto escalar de vectores. Si xe y son dos
vectores de IRn, entonces xTy = x1y1 +x2y2 + +xnyn 2 IR. Notese, que de forma equivalente,
si A y B son dos matrices de IRm n, entonces, ATB 2 IRn n. El producto escalar de vectores
permite de nir una metrica: la norma eucl dea de x, que es simplemente kxk =
p
xTx.
Del mismo modo que se ha de nido xTy, tambien se puede de nir xyT. Sin embargo, el
signi cado de este ultimo producto entre vectores es radicalmente distinto. Sean x e y dos
vectores no nulos la matriz xyT es de IRn n, se escribe como
xyT =
0
BBBB@
x1y1 x1y2 x1yn;1 x1yn
x2y1 x2y2 x2yn;1 x2yn
...
...
...
...
xn;1y1 xn;1y2 xn;1yn;1 xn;1yn
xny1 xny2 xnyn;1 xnyn
1
CCCCA
y todas sus columnas (y las) de nen vectores paralelos, es decir, elementos de un espacio
vectorial de dimension uno. Por consiguiente, esta matriz es de rango uno. En realidad, toda
matriz de rango uno puede expresarse como el producto de dos vectores de la forma xyT.
Estas matrices son comunes en metodos numericos y conviene saber trabajar con ellas. Por
ejemplo, su almacenamiento no se hace guardando todos los coe cientes de la matriz, lo que
implicar a almacenar n2
numeros reales estas matrices se almacenan guardando unicamente las
componentes de los vectores x e y, es decir 2n numeros reales. Para tener una idea del ahorro
computacional que esto representa basta suponer que n = 1000: mientras almacenar x e y solo
necesita de 2000 variables reales, xyT requiere un millon (es decir, 500 veces mas memoria).
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 119
6.1.2 Planteamiento general
A lo largo de este tema se plantea la resolucion de sistemas lineales de ecuaciones
Ax = b (6:1)
donde A es una matriz de n n coe cientes reales aij con i = 1 ::: n, j = 1 ::: n b
es el termino independiente, tambien de coe cientes reales, bT = (b1 ::: bn) y nalmente
xT = (x1 ::: xn) es el vector solucion del sistema.
La existencia y unicidad de soluciones del sistema de nido en 6.1 es por fortuna un tema
ampliamente estudiado en el algebra lineal. Precisamente, el algebra lineal proporciona una
serie de condiciones que permiten veri car si 6.1 tiene solucion:
Si A 2 IRn n, entonces las siguientes a rmaciones son equivalentes:
1. Para cualquier b 2 IRn, el sistema Ax = b tiene solucion.
2. Si Ax = b tiene solucion, esta es unica.
3. Para cualquier x 2 IRn, Ax = 00000000000000 =) x = 00000000000000.
4. Las columnas ( las) de A son linealmente independientes.
5. Existe A;1
matriz inversa de A tal que AA;1
= A;1
A = I
(I matriz identidad de orden n).
6. det(A) = jAj 6= 0.
A pesar de la indudable importancia de todas estas condiciones, en el ambito de la resolucion
numerica de sistemas de ecuaciones deben ser empleadas con sumo cuidado.
6.1.3 Resolucion algebraica: metodo de Cramer
A continuacion se plantea la resolucion anal tica de problemas muy peque~nos siguiendo un
posible enfoque algebraico clasico. El sistema de ecuaciones planteado en 6.1 tiene solucion
unica si y solo si det(A) = jAj 6= 0. En este caso, existe la matriz inversa de A, A;1
, que
permite escribir la solucion del sistema de ecuaciones como
x = A;1
b (6:2)
La ecuacion anterior no es solo una expresion formal de la solucion sino que describe un posible
algoritmo que permitir a obtenerla:
1. Calcular jAj.
2. Si jAj = 0 indicar que la matriz es singular y FIN.
3. Calcular la inversa C = A;1
.
4. Calcular la solucion x = Cb.
5. Escribir la solucion y FIN.
© Los autores, 1998; © Edicions UPC, 1998.
120 Metodos numericos
A pesar de tener todo el fundamento anal tico necesario, este algoritmo para obtener la
solucion de 6.1 es el peor metodo posible desde un punto de vista numerico. De hecho, salvo
en contadas excepciones, este algoritmo esta condenado al mas absoluto fracaso. Para darse
cuenta de ello, basta observar solo dos de los problemas que plantea.
En primer lugar, el calculo del determinante puede ser bastante tedioso puesto que el de-
terminante puede variar bruscamente con peque~nos escalados de la matriz. Observese que si
A es de orden n, entonces det( A) = n det(A). Para ver las implicaciones que esta igualdad
impone basta tomar el caso particular de n = 100 (numero de ecuaciones peque~no hoy en d a),
entonces: det(0:1 A) = 10;100
det(A). Es decir, dividiendo los coe cientes de A por diez, se
reduce el determinante de A en un factor de 10;100
. Por consiguiente, es muy dif cil determinar
numericamente si el determinante de una matriz es realmente nulo. El uso del determinante se
centra basicamente en estudios teoricos.
En segundo lugar, el calculo de la inversa de A (que presenta serios problemas asociados al
almacenamiento de la matriz y a la precision con la que obtengan los resultados), no se emplear a
ni en el casoescalar(n = 1). Porejemplo, pararesolver15x = 3 no se evaluar aprimero c = 1=15
para despues calcular x como x = 3c. Lo mas logico ser a dividir directamente 3 por 15, x =
3=15, lo que permitir a ahorrarse una operacion y un error de almacenamiento. Esta situacion
puede extrapolarse al caso de orden n donde la diferencia en numero de operaciones es muy
considerable y ademas los errores de redondeo pueden dar lugar a inestabilidades numericas.
A continuacion se estudia el metodo de Cramer. Este metodo es una mejora del algoritmo
anterior puesto que permite realizar los pasos 3 y 4 de una sola vez. A pesar de ello no es un
metodo adecuado desde un punto de vista numerico.
La expresion general de la solucion por el metodo de Cramer es:
xi =
a11 ::: a1 i;1 b1 a1 i+1 ::: a1n
a21 ::: a2 i;1 b2 a2 i+1 ::: a2n
...
...
...
...
...
an1 ::: an i;1 bn an i+1 ::: ann
jAj i = 1 ::: n (6:3)
Es interesante evaluar el numero de operaciones elementales (sumas, productos y divisiones)
necesarias para obtener la solucion del sistema. En primer lugar hay que evaluar n + 1 deter-
minantes y luego realizar n divisiones. Para el calculo de los determinantes, una de las posibles
tecnicas necesita de n! n multiplicaciones y n!;1 sumas. Por consiguiente, el metodo de Cramer
necesita de 8

:
(n + 1) (n! ;1) sumas
(n+ 1) n! n productos
n divisiones
Cada operacion elemental puede tener un coste computacional distinto (por ejemplo, muchos
ordenadores dividen empleando el metodo de Newton para ceros de funciones). A pesar de
ello, aqu se les asignara el mismo coste computacional a todas las operaciones elementales
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 121
puesto que ello ya permite realizar las comparaciones pertinentes. El numero de operaciones
elementales con el metodo de Cramer es TC = (n+1)2
n! ; 1. La tabla 6.1 muestra los valores
de TC para diferentes tama~nos del sistema de ecuaciones.
Tabla 6.1 Operaciones elementales del metodo de Cramer segun el tama~no de la matriz (n)
n TC
5 4 319
10 4 108
100 10158
Los numeros presentados en la tabla 6.1 adquieren un mayor relieve cuando se asocian al
tiempo necesario para efectuarlos. Si se dispusiera de un superordenador capaz de realizar
100 millones de operaciones en coma otante por segundo (100 M ops), el sistema de n =
100 necesitar a aproximadamente 3 10142
a~nos para ser resuelto. Es evidente que el numero
de operaciones asociado a este metodo hace prohibitivo su uso, aun para sistemas peque~nos.
Si ademas se tiene en cuenta que el ENIAC (primer ordenador digital, fabricado en 1940)
realizaba solo 300 operaciones por segundo y ten a un tiempo medio entre aver as de 12 horas,
se comprendera por que la resolucion de sistemas lineales de ecuaciones esta en el origen del
desarrollo de los metodos numericos.
6.1.4 Resolucion numerica: un enfoque global
La estrategia y metodolog a que se aplica a la resolucion numerica de sistemas lineales de
ecuaciones parte de una losof a distinta a la expuesta anteriormente. La regularidad de la
matriz A no se determina por un calculo previo de su determinante. Sin embargo, en algunos
problemas se puede estudiar la regularidad de A en funcion de su origen (por ejemplo cuando
proviene de la discretizacion de ecuaciones diferenciales) o a partir de propiedades facilmente
computables como la dominancia diagonal. Por lo general se aplica alguno de los metodos
de resolucion que se veran seguidamente sin evaluar previamente el determinante en muchas
ocasionesel determinante y la inversade la matriz son un subproducto de los calculos efectuados.
En realidad los algoritmos e caces para la resolucion de sistemas lineales plantean procesos
con un enfoque radicalmente distinto, sobretodo desde una perspectiva que contempla el hecho
de que los calculos se realizan en ordenadores digitales. Por consiguiente, es logico que los
algoritmos se evaluen en funcion de su e cacia y siguiendo criterios directamente relacionados
con su implementacion en ordenadores digitales. Existen tres criterios fundamentales para
analizar los algoritmos:
1. Numero de operaciones necesarias, ntimamente ligado al tiempo de CPU. Se tendran en
cuenta las operaciones elementales entre numeros en coma otante ( op): +, -, / o *, todas
a un mismo coste computacional aunque no sea exactamente cierto. El numero de opera-
ciones es obviamente un excelente indicador del coste computacional pero no debe tomarse
© Los autores, 1998; © Edicions UPC, 1998.
122 Metodos numericos
en un sentido estricto. De hecho, multiplicar el tiempo necesario para una operacion por
el numero de operaciones siempre infravalora el tiempo necesario del algoritmo. Ademas
del tiempo invertido en efectuar las operaciones hay una sobrecarga, debido a la gestion
de la memoria, al manejo de los ndices enteros, a las instrucciones logicas en los propios
bucles, etc. A pesar de ello, y por fortuna, el numero de operaciones es un buen indicador
del tiempo de CPU porque esta sobrecarga es generalmente proporcional al numero de
operaciones, de forma que, aunque no se pueda predecir exactamente el tiempo de CPU,
se puede saber como var a (linealmente, cuadraticamente, etc.) al modi car, por ejemplo,
el orden n de la matriz.
2. Necesidades de almacenamiento, que inciden clara y directamente en las limitaciones de
la memoria de los diversos ordenadores los diferentes metodos de resolucion requieren
almacenar las matrices de distinta forma en el ordenador y esto var a considerablemente
las necesidades de memoria.
3. Rango de aplicabilidad: no todos los metodos sirven para cualquier matriz no singular
ademas, en funcion del metodo y de las propiedades de la matriz, la precision de los resul-
tados puede verse afectada dramaticamente. Como se vera mas adelante, peque~nos errores
de redondeo pueden producir errores en la solucion numerica completamente despropor-
cionados. No se debe olvidar que debido al enorme numero de operaciones necesarias para
la resolucion de un sistema de ecuaciones de tama~no medio{grande, el analisis estandar de
propagacion de errores de redondeo no es en absoluto trivial.
Conviene resaltar que cada uno de estos criterios puede ser determinante para rechazar un
algoritmo. Por ejemplo, para un tipo de ordenador dado, metodos que impliquen exceder la
memoria disponible son inutilizables por muy rapidos y precisos que resulten. Por lo tanto,
el desarrollo de los algoritmos que se plantean a continuacion debe tener presentes estos tres
criterios simultaneamente.
Desde un punto de vista general las matrices mas usuales en las ciencias aplicadas y en
ingenier a pueden englobarse en dos grandes categor as:
1. Matrices llenas pero no muy grandes. Por llenas se entiende que poseen pocos elementos
nulos y por no muy grandes que el numero de ecuaciones es de unos pocos miles a lo sumo.
Estas matrices aparecen en problemas estad sticos, matematicos, f sicos e ingenieriles.
2. Matrices vac as y muy grandes. En oposicion al caso anterior, vac as indica que hay pocos
elementos no nulos y ademas estan situados con una cierta regularidad. En la mayor a de
estos casos el numero de ecuaciones supera los miles y puede llegar en ocasiones a los millo-
nes. Estas matrices son comunes en la resolucion de ecuaciones diferenciales de problemas
de ingenier a.
Parece logico que los metodos para resolver sistemas lineales de ecuaciones se adecuen a
las categor as de matrices anteriormente expuestas. En general los metodos directos se aplican
al primer tipo de matrices, mientras que los metodos iterativos se emplean con el segundo
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 123
grupo. Es importante observar que no existen reglas absolutas y que todav a en la actualidad
existe cierta controversia sobre los metodos optimos a aplicar en cada caso. En particular,
la distincion establecida entre matrices llenas y vac as depende en gran medida del ordenador
disponible (fundamentalmente de la memoria). De hecho, los l mites han ido evolucionando a
lo largo de los a~nos a medida que tambien evolucionaban los ordenadores (cada vez mas rapidos
y con mas memoria, o al menos mas barata). A pesar de ello, casi nadie recomendar a metodos
iterativos para matrices llenas con pocas ecuaciones en cambio, algunos autores trabajan con
metodos directos altamente so sticados y particularizados al entorno informatico disponible
para resolver sistemas con varios millones de ecuaciones.
Observacion: En todo lo que sigue se supone que A y b son de coe cientes
reales. Si los elementos de A o b son complejos, aparte de las generalizaciones de
los metodos que aqu se estudian o de los algoritmos espec cos para este caso,
se puede replantear el problema como un sistema lineal, con matriz y termino
independiente reales, de 2n ecuaciones e incognitas. Para ello se escriben la matriz
y los vectores de la siguiente manera:
A = C + iD
b = c+ id
x = y + iz
donde C y D son matrices reales n n, y c d, y y z son de IRn. El sistema lineal
de ecuaciones original se escribe ahora como:
C ;D
D C
y
z = c
d
que es el resultado deseado.
© Los autores, 1998; © Edicions UPC, 1998.
124 Metodos numericos
6.2 Metodos directos
6.2.1 Introduccion
Los metodos directos de resolucion de sistemas lineales de ecuaciones son aquellos que per-
miten obtener la solucion despues de un numero nito de operaciones aritmeticas. Este numero
de operaciones es funcion del tama~no de la matriz.
Si los ordenadores pudieran almacenar y operar con todas las cifras de los numeros reales,
es decir, si emplearan una aritmetica exacta, con los metodos directos se obtendr a la solucion
exacta del sistema en un numero nito de pasos. Puesto que los ordenadorestienen una precision
nita, los errores de redondeo se propagan y la solucion numerica obtenida siempre di ere de
la solucion exacta. La cota del error, para una matriz y termino independiente dados, se asocia
por lo general al numero de operaciones de cada metodo. Se pretende, por lo tanto, obtener
metodos con el m nimo numero de operaciones posible.
8

:
Sistemas con solucion inmediata
8

:
. Matriz diagonal, A = D
. Matriz triangular superior, A = U
. Matriz triangular inferior, A = L
Metodos de eliminacion
(. Metodo de Gauss
. Metodo de Gauss-Jordan
Metodos de descomposicion
8

:
. Metodo de Doolittle, A = LU
. Metodo de Crout, A = LU
. Metodo de Cholesky, A = LLT
. Descomposicion generalizada, A = LDLT
. Metodo de Thomas (A tridiagonal)
Metodos de ortogonalizacion, A = QR
Fig. 6.1 Clasi cacion de los metodos directos
Otra particularidad de los metodos directos es que siempre conducen, despues de ciertas
operaciones, a la resolucion de uno o varios sistemas con solucion inmediata. Es decir, sistemas
donde la matriz es diagonal o triangular. Los metodos para sistemas de resolucion inmediata
son de hecho metodos directos. Ademas de estos, los metodos directos se dividen en metodos
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 125
de eliminacion y metodos de descomposicion. En la gura 6.1 se presenta un esquema con la
clasi cacion de los metodos directos mas caracter sticos.
6.2.2 Sistemas con solucion inmediata
Matriz diagonal
En este caso la matriz A se escribe como:
A = D =
0
BBBBBB@
d11 0 0
0 d22
...
...
...
... ... ...
...
...
... dn;1 n;1 0
0 0 dnn
1
CCCCCCA
(6:4)
y la solucion se obtiene directamente
xi = bi
dii
i = 1 ::: n (6:5)
Existe solucion si todos los terminos de diagonal son no nulos. Ademas, si se desea evaluar el
determinante de A solo es necesario calcular el producto de todos los terminos de la diagonal.
Por ultimo, el numero de operaciones necesario es de n divisiones, es decir TD = n operaciones
elementales.
Matriz triangular superior
A = U =
0
BBBBBB@
u11 u12 u1n
0 u22
...
...
...
... ... ...
...
...
... un;1 n;1 un;1 n
0 0 unn
1
CCCCCCA
(6:6)
En este caso la solucion de la ultima ecuacion es trivial xn = bn = unn. Una vez conocido
xn, la penultima ecuacion (la n ;1) solo tiene una incognita que se deduce de forma sencilla.
Conocidos ahora xn y xn;1, se pasa a la ecuacion anterior (la n;2) y se resuelve para su unica
incognita, xn;2. Retrocediendo progresivamente se obtiene el algoritmo de sustitucion hacia
atras que se escribe de la siguiente forma
xn = bn = unn
xi =
0
@bi ;
nX
j=i+1
uijxj
1
A = uii i = n;1 n;2 ::: 1
(6:7)
© Los autores, 1998; © Edicions UPC, 1998.
126 Metodos numericos
De nuevo la solucion existe si todos los terminos de la diagonal de U son no nulos. El de-
terminante se evalua multiplicando los terminos de la diagonal. El numero de operaciones es
ahora: 8

:
1 + 2 + + (n ;1) = n(n ;1)
2 sumas
1 + 2 + + (n ;1) = n(n ;1)
2 productos
n divisiones
por consiguiente T4 = n2
operaciones elementales.
Matriz triangular inferior
A = L =
0
BBBBBB@
l11 0 0
l21 l22
...
...
...
... ... ...
...
...
... ln;1 n;1 0
ln1 ln n;1 lnn
1
CCCCCCA
(6:8)
Se aplica un algoritmo similar al anterior que se denomina de sustitucion hacia adelante:
x1 = b1 = l11
xi =
0
@bi ;
i;1X
j=1
lijxj
1
A = lii i = 2 ::: n
(6:9)
La existencia de solucion, el determinante y el numero de operaciones se evaluan exactamente
como en el caso anterior y se llega a los mismos resultados.
6.2.3 Metodos de eliminacion
Metodo de Gauss
En el metodo de eliminacion de Gauss el problema original, Ax = b, se transforma mediante
permutaciones adecuadas y combinaciones lineales de las ecuaciones en un sistema de la forma
Ux = c donde U es una matriz triangular superior. Este nuevo sistema equivalente al original
es de resolucion inmediata: solo es necesario aplicar el algoritmo de sustitucion hacia atras
presentado en el subapartado anterior.
Durante la transformacion del sistema original al equivalente con matriz triangular, las ope-
raciones (que solo dependen de la matriz A) se realizan sobre la matriz y al mismo tiempo
sobre el termino independiente. Esto constituye una de las grandes ventajas y a la vez inconve-
nientes de los metodos de eliminacion. Si se dispone de una serie de terminos independientes,
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 127
bj j = 1 ::: m, conocidos de antemano, se efectuan sobre todos ellos, y al mismo tiempo, las
operaciones necesarias para reducir el sistema y obtener una serie de cj j = 1 ::: m. Por
consiguiente, se almacenan y se manipulan todos los terminos independientes a la vez. Poste-
riormente se resuelve un sistema con matriz triangular U para cada uno de los cj. Si, por el
contrario, no se conocen todos los terminos independientes al iniciar los calculos, es necesario
recordar todas las transformaciones necesarias para obtener c1 partiendo de b1 seguidamente
se repiten todas estas operaciones sobre los demas terminos independientes hasta obtener todos
los cj deseados. Hoy en d a, en la mayor a de los problemas con matrices de tama~no peque~no o
medio, esta propiedad de los metodos de eliminacion es la determinante para su eleccion frente
a los metodos de descomposicion.
Otro punto importante que conviene valorar en el metodo de Gauss es su importante valor
pedagogico. Muchos autores denominan de manera generica metodos gaussianos al resto de
los metodos de eliminacion y de descomposicion, puesto que la mayor a derivan del trabajo
original de Gauss escrito en 1823 (que como otros metodos fundamentales del calculo numerico
fue desarrollado mucho antes de la aparicion del primer ordenador). Su implementacion en un
ordenador sigue siendo la mas simple, y con pocas modi caciones, como ya se vera, se obtiene
el metodo mas general que existe para la resolucion de sistemas lineales de ecuaciones.
El algoritmo que se presenta a continuacion parte de la ecuacion 6.1 que se escribira como:
0
BBBBB@
a(0)
11 a(0)
12 a(0)
13 a(0)
1n
a(0)
21 a(0)
22 a(0)
23 a(0)
2n
a(0)
31 a(0)
32 a(0)
33 a(0)
3n
...
...
...
...
...
a(0)
n1 a(0)
n2 a(0)
n3 a(0)
nn
1
CCCCCA
0
BBBB@
x1
x2
x3
...
xn
1
CCCCA
=
0
BBBBB@
b(0)
1
b(0)
2
b(0)
3
...
b(0)
n
1
CCCCCA
(6:10)
donde el super ndice (0)
indica coe ciente de la matriz o del termino independiente originales.
Si a(0)
11 6= 0, se sustrae de todas la ecuaciones, a partir de la segunda la, la primera ecuacion
multiplicada por mi1 = a(0)
i1
a(0)
11
con i = 2 ::: n. Esto induce el primer sistema equivalente derivado
del original donde la primera columna tiene todos los coe cientes nulos exceptuando el primer
coe ciente, y el resto de los coe cientes de la matriz y del termino independiente se han visto
modi cados a partir de la segunda la.
0
BBBBB@
a(0)
11 a(0)
12 a(0)
13 a(0)
1n
0 a(1)
22 a(1)
23 a(1)
2n
0 a(1)
32 a(1)
33 a(1)
3n
...
...
...
...
...
0 a(1)
n2 a(1)
n3 a(1)
nn
1
CCCCCA
0
BBBB@
x1
x2
x3
...
xn
1
CCCCA
=
0
BBBBB@
b(0)
1
b(1)
2
b(1)
3
...
b(1)
n
1
CCCCCA
(6:11)
con
a(1)
ij = a(0)
ij ;mi1a(0)
1j = a(0)
ij ; a(0)
i1
a(0)
11
a(0)
1j
b(1)
i = b(0)
i ;mi1b(0)
1 = b(0)
i ; a(0)
i1
a(0)
11
b(0)
1
(
i = 2 ::: n
j = 2 ::: n
(6:12)
© Los autores, 1998; © Edicions UPC, 1998.
128 Metodos numericos
Ahora, si a(1)
22 (que ya no coincide con el coe ciente que originalmente se encontraba en su
posicion, a(0)
22 ) es distinto de cero, se sustrae de todas la ecuacionessiguientes la segundaecuacion
multiplicada por mi2 = a(1)
i2
a(1)
22
con i = 3 ::: n. Despues de realizadas estas operaciones sobre el
sistema 6.11 se obtiene el segundo sistema equivalente al original
0
BBBBB@
a(0)
11 a(0)
12 a(0)
13 a(0)
1n
0 a(1)
22 a(1)
23 a(1)
2n
0 0 a(2)
33 a(2)
3n
...
...
...
...
...
0 0 a(2)
n3 a(2)
nn
1
CCCCCA
0
BBBB@
x1
x2
x3
...
xn
1
CCCCA
=
0
BBBBB@
b(0)
1
b(1)
2
b(2)
3
...
b(2)
n
1
CCCCCA
(6:13)
donde la segunda columna a partir de la tercera la solo contiene terminos nulos y los nuevos
coe cientes de la matriz y termino independiente se obtienen con las siguientes ecuaciones
a(2)
ij = a(1)
ij ;mi2a(1)
2j = a(1)
ij ; a(1)
i2
a(1)
22
a(1)
2j
b(2)
i = b(1)
i ;mi2b(1)
2 = b(1)
i ; a(1)
i2
a(1)
22
b(1)
2
(
i = 3 ::: n
j = 3 ::: n
(6:14)
Cada paso conduce a un nuevo sistema equivalente al original (ecuacion 6.1) con la particula-
ridad de que la k-esima matriz es triangular superior si solo se miran las primeras k ecuaciones
y k incognitas. En general, se escribe como
0
BBBBBBBBBBBB@
a(0)
11 a(0)
12 a(0)
1k a(0)
1 k+1 a(0)
1n
0 a(1)
22 a(1)
2k a(1)
2 k+1 a(1)
2n
...
... ...
...
...
...
...
... a(k;1)
kk a(k;1)
k k+1 a(k;1)
kn
0 0 a(k)
k+1 k+1 a(k)
k+1 n
...
...
...
...
...
0 0 a(k)
n k+1 a(k)
nn
1
CCCCCCCCCCCCA
0
BBBBBBBBB@
x1
x2
...
xk
xk+1
...
xn
1
CCCCCCCCCA
=
0
BBBBBBBBBBB@
b(0)
1
b(1)
2
...
b(k;1)
k
b(k)
k+1
...
b(k)
n
1
CCCCCCCCCCCA
(6:15)
que se ha obtenido a partir de las siguientes ecuaciones
a(k)
ij = a(k;1)
ij ;mika(k;1)
kj = a(k;1)
ij ; a(k;1)
ik
a(k;1)
kk
a(k;1)
kj
b(k)
i = b(k;1)
i ;mikb(k;1)
k = b(k;1)
i ; a(k;1)
ik
a(k;1)
kk
b(k;1)
k
(
i = k + 1 ::: n
j = k + 1 ::: n
(6:16)
Observese que al pasar del (k ;1)-esimo al k-esimo sistema es necesario realizar las siguientes
operaciones
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 129
8

:
(n ;k)(n ;k + 1) sumas
(n ;k)(n ;k + 1) productos
n;k divisiones
Finalmente, al deducir el (n ;1)-esimo sistema se obtiene una matriz triangular superior:
0
BBBBBB@
a(0)
11 a(0)
12 a(0)
13 a(0)
1n
0 a(1)
22 a(1)
23 a(1)
2n
0
... ... ...
...
...
... ... a(n;2)
n;1 n
0 0 a(n;1)
nn
1
CCCCCCA
0
BBBB@
x1
x2
...
xn;1
xn
1
CCCCA
=
0
BBBBBB@
b(0)
1
b(1)
2
...
b(n;2)
n;1
b(n;1)
n
1
CCCCCCA
(6:17)
A cada uno de los terminos que aparecen en la diagonal de la matriz anterior se le denomina
pivote. Conviene resaltar que los pivotes no coinciden con los terminos originales de la diagonal
de A es decir, a(k;1)
kk 6= a(0)
kk para k = 1 ::: n.
Para resumir todos los pasos realizados hasta obtener el sistema 6.17, es necesario suponer
que todos los pivotes son no nulos. Es decir, a(i;1)
ii 6= 0 i = 1 ::: n. A continuacion se
presenta el algoritmo que permite obtener la matriz y el termino independiente del sistema
6.17,
a(k)
ij = a(k;1)
ij ;mika(k;1)
kj = a(k;1)
ij ; a(k;1)
ik
a(k;1)
kk
a(k;1)
kj
b(k)
i = b(k;1)
i ;mikb(k;1)
k = b(k;1)
i ; a(k;1)
ik
a(k;1)
kk
b(k;1)
k
8

:
k = 1 ::: n;1
i = k + 1 ::: n
j = k + 1 ::: n
(6:18)
donde los terminos de super ndice (0) son iguales a los originales del sistema de ecuaciones. El
sistema triangular obtenido en 6.17 es de resolucion inmediata (vease el subapartado 6.2.2). El
numero de operaciones necesarias para realizar esta primera fase de eliminacion ha sido de
8

:
n;1X
k=1
(n;k)(n ;k + 1) = n(n2
;1)
3 sumas
n;1X
k=1
(n;k)(n ;k + 1) = n(n2
;1)
3 productos
n;1X
k=1
n;k = n(n;1)
2 divisiones
Si se tienen en cuenta las operaciones correspondientes a la segunda fase de sustitucion hacia
atras, el numero total de operaciones elementales necesarias para el metodo de Gauss es TG =
4n3
+9n2
;7n
6
. La tabla 6.2 muestra el numero de operaciones elementales para distintos tama~nos
© Los autores, 1998; © Edicions UPC, 1998.
130 Metodos numericos
del sistema de ecuaciones. Obviamente, se ha obtenido una importante reduccion al disponer
ahora de un metodo que crece con n3
, en vez de n! n2
(Cramer).
Tabla 6.2 Operaciones elementales del metodo de Gauss sin pivotamiento segun el tama~no de la matriz
(n)
n TG
5 115
10 805
100 681 550
1000 6:68 108
Como ya se ha comentado, se ha supuesto a lo largo de toda esta deduccion que los pivotes
eran distintos de cero. Si durante el proceso de eliminacion se obtiene un pivote nulo, por
ejemplo el a(k;1)
kk , se debe buscar en la parte inferior de la columna k-esima un coe ciente no
nulo, es decir de entre los a(k;1)
ik i = k + 1 ::: n se toma uno que sea distinto de cero. Se
sustituye entonces la la k (y su termino independiente) por la la i (y su terminoindependiente)
que se haya escogido. Si dicho coe ciente no nulo no existiera, la matriz ser a singular. Mas
adelante se vera una justi cacion teorica de este proceder.
Esta permutacion de las no solo tiene interes cuando el pivote es exactamente cero. Es
obvio que valores peque~nos del pivote pueden producir grandes errores de redondeo, ya que
siempre se divide por el valor del pivote. Por consiguiente, para reducir los errores de redondeo
conviene escoger el pivote maximo en valor absoluto. Para ello, hay dos tecnicas posibles:
1. En el k-esimo sistema (veanse las ecuaciones 6.15 y 6.16) se toma como pivote el coe ciente
mayor en valor absoluto de la columna k situado por debajo de la la k inclusive. Para
ello es necesario permutar las las k y la correspondiente al pivote escogido en la matriz
y su termino independiente. Esta tecnica se denomina metodo de Gauss con pivotamiento
parcial.
2. En el k-esimo sistema, se toma como pivote el coe ciente mayor en valor absoluto de la
submatriz de orden n;k de nida por los coe cientes que quedan por debajo de la la k y a la
derecha de la columna k. Paraello, se permuta la la k (y el termino independiente asociado)
y la columna k con las correspondientes al coe ciente que cumple la condicion citada. Al
nal del proceso deben ponerse en el orden inicial las componentes del vector solucion,
puesto que su posicion ha sido modi cada al realizar las permutaciones de columnas. Esta
tecnica es el metodo de Gauss con pivotamiento total.
Estas dos ultimas estrategias producen metodos numericamente estables. El metodo de
Gauss sin pivotamiento no es necesariamente estable. El estudio detallado de la estabilidad y
propagacion de errores de redondeo del metodo de Gauss no es trivial (vease Wilkinson (1965)).
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 131
Desde el punto de vista de la implementacion practica de los metodos de Gauss con pivo-
tamiento, conviene se~nalar que las permutaciones no se realizan f sicamente en el ordenador,
sino que se emplean vectores de redireccionamiento de memoria similares a los empleados en
los esquemas de almacenamiento espec cos para matrices con estructuras simples.
Observacion: Si la matriz A es simetrica, las matrices llenas de orden n ; k
sobre las que se aplica sucesivamente el algoritmo solo permanecen simetricas si
no se realiza ninguna permutacion de las o columnas (vease el problema 6.1).
La misma observacion es valida si la matriz A tiene una estructura que permite
el almacenamiento en banda o en per l (apartado 7.4).
Problema 6.1:
Sea A una matriz regular simetrica. Se desea resolver el sistema lineal Ax = b
mediante el metodo de Gauss sin pivotamiento.
a) Adaptar el algoritmo de Gauss al caso de matrices simetricas, aprovechando
la simetr a para eliminar las operaciones innecesarias. Sugerencia: notese que
en cada paso del proceso de eliminacion, cuando se anulan los terminos de la
columna k-esima por debajo del pivote, a(k;1)
kk , solo se modi ca la submatriz
llena de orden n;k:
0
B@
a(k)
k+1 k+1 a(k)
k+1 n
...
...
...
a(k)
n k+1 a(k)
nn
1
CA
Emplear la propiedad de que en k = 0 la submatriz correspondiente (que es
la matriz original A) es simetrica.
b) Calcular el numero de operaciones necesarias, y compararlo con el caso general
(matrices no simetricas).
c) Puede emplearse el algoritmo desarrollado en el apartado a si es necesario
pivotar? Por que?
Metodo de Gauss-Jordan
A continuacion se presenta una variante del metodo de Gauss que conviene considerar. En
este metodo, ademas de sustraer la la k multiplicada por mik = a(k;1)
ik =a(k;1)
kk a las las poste-
riores, tambien se sustrae a las anteriores. Es practica comun, en este caso, dividir la la k por
su pivote para que el termino de la diagonal quede unitario. De esta forma, el k-esimo sistema
as obtenido se escribe como:
© Los autores, 1998; © Edicions UPC, 1998.
132 Metodos numericos
0
BBBBBBBBBBBBBBBB@
1 0 0 0 a(k)
1 k+1 a(k)
1n
0 1 0 0 a(k)
2 k+1 a(k)
2n
...
... ... ...
...
...
...
...
... ... 0 a(k)
k;1 k+1 a(k)
k;1 n
...
... 1 a(k)
k k+1 a(k)
kn
0 0 a(k)
k+1 k+1 a(k)
k+1 n
...
...
...
...
...
0 0 a(k)
n k+1 a(k)
nn
1
CCCCCCCCCCCCCCCCA
0
BBBBBBBBBBB@
x1
x2
...
xk;1
xk
xk+1
...
xn
1
CCCCCCCCCCCA
=
0
BBBBBBBBBBBBB@
b(k)
1
b(k)
2
...
b(k)
k;1
b(k)
k
b(k)
k+1
...
b(k)
n
1
CCCCCCCCCCCCCA
(6:19)
Como se puede observar, al anular todos los coe cientes de la columa k, excepto el diago-
nal, se va transformando la matriz original en la identidad. Al nal, la (n ; 1)-esima matriz
obtenida por operaciones simples de la es la identidad, y por lo tanto, el (n;1)-esimo termino
independiente, (b(n;1)
1 ::: b(n;1)
n )T es la solucion del sistema de ecuaciones original.
El algoritmo necesario para la transformacion de la matriz es el siguiente
a(k)
kj =
a(k;1)
kj
a(k;1)
kk
a(k)
ij = a(k;1)
ij ;a(k;1)
ik a(k;1)
kj
b(k)
k = b(k;1)
k
a(k;1)
kk
b(k)
i = b(k;1)
i ;a(k;1)
ik b(k;1)
k
8

:
k = 1 ::: n;1
i = 1 ::: k ;1 k + 1 ::: n
j = k + 1 ::: n
(6:20)
El numero de operaciones que se deben realizar es
8

:
n;1X
k=1
(n ;1)(n;k + 1) = (n ;1)2
(n;2)
2 sumas
n;1X
k=1
(n ;1)(n;k + 1) = (n ;1)2
(n;2)
2 productos
n;1X
k=1
(n;k + 1) = (n ;1)(n;2)
2 divisiones
Por consiguiente el numero total de operaciones elementales del metodo de Gauss-Jordan, tal
como se ha presentado aqu , es de TGJ = n3
+ 1
2
n2
; 5
2
n + 1
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 133
Analisis matricial del Metodo de Gauss: Gauss compacto
La presentacion del metodo de Gauss se ha realizado de forma constructiva mostrando el
desarrollo del algoritmo. A continuacion se presenta el desarrollo matricial del metodo. De
esta forma se sientan las bases de los metodos de descomposicion y, ademas, se analizan las
justi caciones teoricas del metodo de Gauss sin o con pivotamiento. Se puede suponer que
de momento, la eliminacion (reduccion de la matriz original a una triangular superior) puede
realizarse sin pivotamiento. Entonces se toman las matrices:
G(k)
=
0
BBBBBBBBBBBBBBBB@
1 0 0 0 0
0 1
...
...
...
...
...
... ... ...
...
...
...
...
... 1 0
...
...
0 0 1 0 0
...
... ;mk+1 k 1
...
...
...
... ;mk+2 k 0
... ...
...
...
...
...
...
... 1 0
0 0 ;mn k 0 0 1
1
CCCCCCCCCCCCCCCCA
k = 1 ::: n;1 (6:21)
donde mik = a(k;1)
ik
a(k;1)
kk
para i = k + 1 ::: n.
Denominando A(k)
y b(k)
a los k-esimos matriz y vector de terminos independientes obte-
nidos por el metodo de Gauss sin pivotamiento, se puede observar que las ecuaciones que
realizan el paso entre (k ;1) y k (ecuaciones 6.16) pueden escribirse como
A(k)
= G(k)
A(k;1)
b(k)
= G(k)
b(k;1)
Por lo tanto, el (n;1)-esimo sistema de ecuaciones obtenido al nal del proceso de eliminacion
es simplemente
A(n;1)
= G(n;1)
G(n;2)
:::G(1)
A
b(n;1)
= G(n;1)
G(n;2)
:::G(1)
b
(6:22)
Puesto que A(n;1)
es triangular superior, y que el producto de matrices triangulares inferio-
res con diagonal unitaria es una matriz triangular inferior con diagonal unitaria, la primera
ecuacion de 6.22 puede escribirse como
A = L U
donde U = A(n;1)
L =
h
G(n;1)
G(n;2)
::: G(1)
i;1
=
h
G(1)
i;1 h
G(2)
i;1
:::
h
G(n;1)
i;1
(6:23)
© Los autores, 1998; © Edicions UPC, 1998.
134 Metodos numericos
Puesto que las inversas de las G(k)
son triangulares inferiores con diagonal unitaria, puede
comprobarse que
L =
0
BBBBBB@
1 0 0
m21 1
...
...
...
... ... ...
...
...
... ... 0
mn1 mn n;1 1
1
CCCCCCA
(6:24)
Por consiguiente, la ecuacion 6.23 demuestra que se ha descompuesto la matriz original
A en el producto de una matriz triangular inferior con diagonal unitaria por una triangular
superior. A partir de esta misma ecuacion se puede observar que el determinante de la matriz
A se obtiene como un subproducto del metodo de eliminacion: puesto que L es triangular con
diagonal unitaria y U = A(n;1)
es una triangular, el determinante de A es
det(A) = det(A(n;1)
) =
nY
i=1
a(i;1)
ii (6:25)
De esta forma el calculo del determinante de una matriz necesita de 2n3
3
operaciones aproxi-
madamente que es muy inferior al orden n! que se hab a obtenido previamente.
El metodode Gauss planteado en su forma compacta, como se acabade describir, se compone
de dos fases diferenciadas: 1) descomposicion de la matriz original en el producto de L por U
sin que sea necesario efectuar operaciones sobre el termino independiente, y 2) resolucion de
dos sistemas triangulares, el primero de los cuales se corresponde con la segunda ecuacion de
6.22. Estas dos fases aparecen tambien en los metodos de descomposicion (vease el subapartado
6.2.4), que se distinguen del metodo de Gauss compacto en la forma de calcular las matrices
triangulares L y U.
Como ya se hab a indicado, conviene aprovechar la forma compacta del metodo de Gauss
para justi car teoricamente los algoritmos que se han presentado. Para ello se consideran los
siguientes teoremas:
Teorema: Si A es inversible y factorizable bajo la forma A = LU (donde L
tiene la diagonal unitaria), entonces la descomposicion es unica.
Demostracion: Supongase que existen dos descomposiciones posibles de la matriz
A, es decir, A = L1U1 = L2U2. Si A es inversible, entonces L1, U1, L2, y U2
tambien lo son (tomense por ejemplo determinantes en la ecuacion anterior). Por
consiguiente, L1U1 = L2U2 () L;1
2 L1 = U2U;1
1 pero el primer miembro
de la igualdad es una triangular inferior con diagonal unitaria mientras que el
segundo es una triangular superior. Ambos miembros, por lo tanto, son iguales a
la matriz identidad, de donde se deduce que L1 = L2 y U1 = U2.
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 135
Teorema: Si A es inversible, existe una matriz de permutacion P tal que P A es
factorizable bajo la forma LU donde Les triangular inferior con diagonal unitaria
y U es triangular superior.
Demostracion: Sea Pij una matriz que permute las las i, j. Esta matriz se
escribe como
Pij =
0
BBBBBBBBBBBBBBBBBBB@
i j
1 0 0 0 0
0
...
...
...
...
... 1 0 0
i 0 0 0 0 0 1 0 0
0 1 0
...
...
...
...
...
0 1 0
j 0 0 1 0 0 0 0 0
0 0 1
...
...
...
...
... 0
0 0 0 0 1
1
CCCCCCCCCCCCCCCCCCCA
(6:26)
Esta matriz solo di ere de la identidad en las las y columnas i y j. La k-esima
matriz, A(k)
, obtenida con el algoritmo de Gauss con pivotamiento parcial, puede
escribirse como A(k)
= G(k)
Pk `kA(k;1)
, donde se ha permutado la la k con la
`k (k `k). Observese que si no es necesario pivotar Pk `k = I, es decir k = `k.
Esta k-esima matriz tambien puede escribirse como
A(k)
= G(k)
Pk `kG(k;1)
Pk;1 `k;1 ::: G(1)
P1 `1 A (6:27)
Para poder seguir con el proceso de eliminacion, el pivote de esta matriz y todos
los terminos debajo de el deben ser no nulos. Si no es as , el determinante de
A(k)
es nulo y por lo tanto tambien es nulo el determinante de la matriz original
A (las matrices G y P tienen diagonales unitarias). Es decir, si A es regular,
entonces A(k)
tambien lo es y siempre se puede encontrar la permutacion de las
adecuada para seguir con el proceso de eliminacion.
Queda todav a por demostrar que PA es factorizable. A partir de la ecuacion
6.27 puede obtenerse la expresion de la ultima matriz obtenida con el algoritmo
de Gauss con pivotamiento parcial
A(n;1)
= G(n;1)
Pn;1 `n;1 G(n;2)
Pn;2 `n;2 ::: G(1)
P1 `1 A (6:28)
Si k  i j, entonces existe una matriz eG(k)
tal que PijG(k)
= eG(k)
Pij en la
que simplemente se han permutado los coe cientes ;mik y ;mjk. Por lo tanto,
la ecuacion 6.28 puede reescribirse como
A(n;1)
= G(n;1) eG(n;2)
::: eG(1)
Pn;1 `n;1 Pn;2 `n;2 ::: P1 `1 A (6:29)
© Los autores, 1998; © Edicions UPC, 1998.
136 Metodos numericos
que permite, con las de niciones adecuadas,
P = Pn;1 `n;1 Pn;2 `n;2 ::: P1 `1
U = A(n;1)
L =
h
G(n;1) eG(n;2)
::: eG(1)
i;1
(6:30)
volver a escribir la ecuacion 6.28 como PA = LU donde L es triangular inferior
con diagonal unitaria y U es triangular superior y de esta forma nalizar la
demostracion.
Esta demostracion puede extenderse al caso de Gauss con pivotamiento total empleando
matrices de permutacion P y Q tales que P A Q sea factorizable como LU. As mismo, todas
las propiedades anteriores de existencia y unicidad de la descomposicion se veri can tambien
para U triangular superior con diagonal unitaria en vez de L con diagonal unitaria.
Por otro lado, el determinante de la matriz original se obtiene, de nuevo, como un subpro-
ducto del proceso de eliminacion por el metodo de Gauss,
det(A) = det(A(n;1)
) =
nY
i=1
a(i;1)
ii
donde el signo depende del numero de permutaciones realizadas.
Para nalizar este apartado, donde se han formalizado las diferentes variantes del metodo
de Gauss, conviene conocer bajo que condiciones puede aplicarse el metodo de Gauss sin pivo-
tamiento. Esto es as porque solo en esta variante (sin pivotamiento) pueden emplearse esque-
mas de almacenamiento espec cos para algunos tipos de matrices muy frecuentes en calculo
numerico (por ejemplo, matrices en banda y en skyline, simetricas o no). Como se vera en el
cap tulo siguiente, se consigue un ahorro computacional considerable mediante estos esquemas
de almacenamiento matricial, tanto en numero de operaciones como en memoria necesaria. Para
ello, el siguiente teorema presenta la condicion necesaria y su ciente para aplicar el metodo de
Gauss sin pivotamiento. Se denomina Am]11 al menor principal de A de orden m. Es decir, los
coe cientes de Am]11 son los aij de A para i = 1 ::: m y i = 1 ::: m. Por extension A(k)
m]11
sera el menor de orden m de A(k)
. Las tres cajas que completan la matriz A se denotan por
Am]12, Am]21 y Am]22, de forma que
A =
m columnas (n;m) columnas
m las Am]11 Am]12
(n;m) las Am]21 Am]22
Teorema: La condicion necesaria y su ciente para que una matriz no singular A
pueda descomponerse en la forma A = LU es que det(Am]11) 6= 0 para cualquier
m = 1 ::: n.
Demostracion: Para demostrar que es condicion su ciente hay que mostrar que
una vez obtenida la matriz A(k)
, el proceso de eliminacion puede seguir es decir,
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 137
que el pivote a(k)
k+1 k+1 es no nulo. Para ello supongase que det(Am]11) 6= 0 8m =
1 ::: n. En particular esto se veri ca para m = 1 es decir, a(0)
1 1 = det(A1]11) 6= 0
y, por lo tanto, la primera etapa del algoritmo de Gauss puede aplicarse. Para
las siguientes etapas, supongase que a(i)
i+1 i+1 6= 0 para i = 0 ::: k ;1 en conse-
cuencia, ya se ha obtenido la matriz A(k)
descrita en 6.15 y que puede escribirse
segun la expresion 6.27, pero sin permutaciones, bajo la forma
A(k)
= A(k)
k+1]11 A(k)
k+1]12
A(k)
k+1]21 A(k)
k+1]22
= G(k)
k+1]11 00000000000000
G(k)
k+1]21 G(k)
k+1]22
G(k;1)
k+1]11 00000000000000
G(k;1)
k+1]21 G(k;1)
k+1]22
:::
::: G(1)
k+1]11 00000000000000
G(1)
k+1]21 G(1)
k+1]22
Ak+1]11 Ak+1]12
Ak+1]21 Ak+1]22
(6:31)
donde se ha realizado la misma particion en las matrices G mostrando expl ci-
tamente sus menores principales y su estructura triangular inferior. A partir de
6.31 es facil ver que
A(k)
k+1]11 = G(k)
k+1]11 G(k;1)
k+1]11 ::: G(1)
k+1]11 Ak+1]11:
Tomando ahora determinantes y recordando que todas las matrices G(i)
k+1]11
tienen diagonales unitarias y que det(Ak+1]11) 6= 0 por hipotesis, es evidente que
det(A(k)
k+1]11) 6= 0. Por lo tanto queda demostrado que el pivote a(k)
k+1 k+1 es
no nulo y el proceso de eliminacion puede seguir. Por induccion se obtendra la
descomposicion de A en LU.
Para demostrar la condicion necesaria en primer lugar se vera que si A = LU
entonces Am]11 = Lm]11U m]11. Para ello basta reutilizar la particion de las
matrices realizada anteriormente, es decir
Am]11 Am]12
Am]21 Am]22
= Lm]11 00000000000000
Lm]21 Lm]22
U m]11 U m]12
00000000000000 U m]22
y efectuar el producto por cajas de las matrices. Ademas, al ser A no singular por
hipotesis, ni L ni U lo seran y por lo tanto Lm]11 y U m]11 tienen determinantes
no nulos. El producto de estas dos ultimas matrices tampoco tendra determinante
nulo es decir, Am]11 es no singular. Todo ello puede realizarse para cualquier
valor de m = 1 ::: n y de esta forma la condicion queda demostrada.
Este resultado muestra que el metodo de Gauss sin pivotamiento puede emplearse si y solo
si todos los menores principales de A son no singulares. Esta condicion es obviamente muy
dif cil de veri car a priori. De hecho, en la mayor a de los casos, es el propio proceso de Gauss el
que indica si es necesario o no realizar pivotamiento de las. De cualquier forma, es importante
se~nalar una extension del teorema anterior para dos clases de matrices extraordinariamente
comunes en las ciencias de la ingenier a.
© Los autores, 1998; © Edicions UPC, 1998.
138 Metodos numericos
Observacion: Si la matriz A es simetrica y de nida positiva (negativa) entonces
sus menores principales tambien son simetricos y de nidos positivos (negativos),
es decir, son no singulares, y, por consiguiente, se puede aplicar el metodo de
Gauss sin pivotamiento.
Para demostrar que Am]11 (menor principal de orden m de la matriz A) es de nido positivo
(negativo) cuando A es de nida positiva (negativa), basta trabajar con vectores cualesquiera
tales que solo las primeras m componentes sean no nulas, es decir, del tipo: (xm]
T 00000000000000T).
Observacion: Si la matriz Aes estrictamente diagonalmente dominante entonces
sus menores principales son no singulares, y, por consiguiente, se puede aplicar el
metodo de Gauss sin pivotamiento.
Para demostrarlo, basta recordar que todos los menores de Ason diagonalmente dominantes
y que toda matriz diagonalmente dominante es no singular.
6.2.4 Metodos de descomposicion
Introduccion
Los metodos de descomposicion (o factorizacion) se fundamentan en las ideas basicas des-
critas en el apartado anterior, donde se ha demostrado que toda matriz regular A puede, con
las permutaciones adecuadas, descomponerse en el producto de una matriz triangular inferior
L por una matriz triangular superior U. Supongase, para mayor claridad de la exposicion,
que las permutaciones no son necesarias (vease el ultimo teorema del apartado anterior y las
observaciones subsiguientes). Es decir, se dispone de dos matrices L y U tales que A = LU.
Entonces, el sistema de ecuaciones original Ax = b puede escribirse como
(
Ly = b
Ux = y (6:32)
donde puede observarse claramente que resolver el sistema original es equivalente a realizar
una sustitucion hacia adelante para determinar y y una sustitucion hacia atras para hallar la
solucion x.
El objetivo sera, por consiguiente, desarrollar algoritmos que, de forma e ciente, permitan
descomponer la matriz original en el producto de matrices triangulares (y, en algunos metodos,
tambien matrices diagonales) para acabar resolviendo sistemas de ecuaciones con solucion in-
mediata.
En el subapartado anterior (Gauss compacto) ya se plantea, de hecho, un metodo de des-
composicion. En ese caso, la matriz L se obtiene de forma simple, pero la matriz U requiere
de las operaciones clasicas del metodo de Gauss, ecuaciones (6.18). Este metodo compacto se
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 139
empleo con frecuencia a nales de los a~nos cincuenta para resolver manualmente los sistemas
inducidos por las primeras aplicaciones del metodo de los elementos nitos en ingenier a. Con
la aparicion de los ordenadores, las mismas operaciones del metodo de Gauss empezaron a
automatizarse. Por desgracia, los primeros ordenadores dispon an de poca memoria y, por
tanto, de poca precision (los calculos habituales hoy en d a con reales de 64 bits o con enteros
de 16 bits entonces eran un lujo) aparecieron los primeros problemas graves de propagacion de
errores de redondeo y, por tanto, se invirtieron muchos esfuerzos para estudiar su origen y para
desarrollar diversas tecnicas que disminuyeran su in uencia en el resultado nal (Householder,
1964 Wilkinson, 1965). Los resultados de dichas investigaciones fueron muy extensos, pues
abarcaban desde el establecimiento de una notacion estandar en analisis numerico de matrices
hasta las acotaciones de dichos errores, pero, en particular, dieron lugar a los metodos de
descomposicion.
La sistematizacion de las modi caciones que realiza el metodo de Gauss compacto sobre la
matriz original A dio lugar al metodo de Doolittle. El metodo de Crout resulta de la misma
sistematizacion pero ahora tomando la matriz U con diagonal unitaria (en vez de la matriz L).
En el proximosubapartadose describe en detalle este metododesarrolladopor PrescottD. Crout
en 1941 para, segun el autor, evaluar determinantes y (solo en segundo lugar) resolver sistemas
lineales. Los demas metodos de descomposicion son casos particulares de los anteriores. Por
consiguiente, los metodos de descomposicion son simplemente una sistematizacion del metodo de
Gauss. Es decir, consisten en organizar las operaciones que se realizan en el metodo de Gauss de
una forma distinta y, por tanto, las propiedades estudiadas en el apartado anterior (unicidad de
la descomposicion, necesidad de pivotamiento, etc.) son identicas en todos los casos. A pesar de
ello, tienen un enfoque conceptual distinto (eliminar la triangular inferior versus descomponer
en producto de triangulares) y esta sutil diferencia induce ciertas particularidades que conviene
tener presentes:
1. Los metodos de descomposicion son especialmente indicados para resolver sucesivamente va-
rios sistemas lineales con la misma matriz y distintos terminos independientes, sin necesidad,
como se hab a comentado anteriormente para el metodo de Gauss original, de recordar las
operaciones de la realizadas durante el proceso de eliminacion. De hecho, la matriz trian-
gular inferior L representa una forma compacta de recordar dichas operaciones, como se ha
visto para la forma compacta del metodo de Gauss. Por tanto, una vez descompuesta la ma-
triz A en el producto de triangulares, basta realizar las dos sustituciones indicadas en 6.32
para tantos vectores b como se desee. En contrapartida, cuando todos los terminos indepen-
dientes son conocidos de antemano y se quiere resolver todos los sistemas simultaneamente,
la simplicidad que exist a en el metodo de Gauss original para realizar las operaciones de la
sobre todos los terminos independientes en paralelo se ha perdido. En la practica, cuando se
opta por un metodo de descomposicion, aunque se conozcan todos los terminos independien-
tes de antemano, se procede de forma secuencial resolviendo consecutivamente para cada
termino independiente dos sistemas triangulares.
2. La compacidad de las operaciones de los metodos de descomposicion permite mejoras en
la precision de los resultados empleando unicamente unas pocas variables de precision alta.
Esta ventaja de los metodos de descomposicion respecto de los metodos de eliminacion ha
perdido importancia con el progresivo abaratamiento de la memoria.
© Los autores, 1998; © Edicions UPC, 1998.
140 Metodos numericos
Metodo de Crout
A continuacion se presenta el metodo de Crout en su version estandar, es decir, sin pivo-
tamiento y para matrices llenas. El metodo de Doolittle tiene un desarrollo paralelo que no
se considera necesario realizar aqu . En el metodo de Crout se realiza la descomposicion de la
matriz A en una L por una U, esta ultima con diagonal unitaria.
Este metodo tiene un planteamiento recursivo en el que se descomponen sucesivamente los
menores principales de la matriz A. Se empieza por el menor principal de orden 1, luego el
de orden 2 y as sucesivamente hasta el menor de orden n, es decir, la matriz original. En
esta ocasion, los menores principales de orden m de la matriz A se denotan por Am]. La
descomposicion del menor principal de orden 1 es sencilla, puesto que A1] = a11 y se ha
tomado U con diagonal unitaria: l11 = a11 y u11 = 1. Suponiendo ahora descompuesto el
menor de orden k, es decir, Ak] = Lk]Uk], interesa estudiar como se descompone el siguiente
menor principal Ak+1].
Conviene primero escribir Ak+1] en funcion de Ak] y de los coe cientes de A necesarios:
Ak+1] = Ak] ck+1]
fT
k+1] ak+1 k+1
(6:33)
donde ck+1] y fk+1] son vectores de IRk:
ck+1] =
0
BB@
a1 k+1
a2 k+1
...
ak k+1
1
CCA fk+1] =
0
BB@
ak+1 1
ak+1 2
...
ak+1 k
1
CCA (6:34)
Seguidamente, se establece la descomposicion de Ak+1] como
Ak+1] = Lk+1] Uk+1]
Ak] ck+1]
fT
k+1] ak+1 k+1
= Lk] 00000000000000
lT
k+1] lk+1 k+1
Uk] uk+1]
00000000000000T 1
(6:35)
donde aparecen los siguientes vectores de IRk:
lk+1] =
0
BB@
lk+1 1
lk+1 2
...
lk+1 k
1
CCA uk+1] =
0
BB@
u1 k+1
u2 k+1
...
uk k+1
1
CCA 00000000000000 =
0
BB@
0
0
...
0
1
CCA (6:36)
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 141
Y, por ultimo, tras proceder a multiplicar las matrices Lk+1] y Uk+1] en la ecuacion 6.35, se
obtienen las ecuaciones necesarias para la descomposicion del menor principal Ak+1]. Es decir,
Lk] uk+1] = ck+1]
UT
k] lk+1] = fk+1]
lk+1 k+1 = ak+1 k+1 ;lT
k+1] uk+1]
(6:37)
Notese que los vectores uk+1] y lk+1] se obtienen resolviendo (mediante sustitucion hacia
adelante) sistemas con matrices triangulares inferiores Lk] y UT
k].
El algoritmo de descomposicion de Crout se obtiene nalmente repitiendo las ecuaciones 6.37
para k = 1 ::: n ; 1, sustituyendo las de niciones de los vectores por las ecuaciones 6.34 y
6.36, y planteando expl citamente las dos sustituciones hacia adelante. Es decir:
l11 = a11 u11 = 1
k = 1 ::: n;1
8

:
u1 k+1 = a1 k+1 = l11
ui k+1 =
0
@ai k+1 ;
i;1X
j=1
lij uj k+1
1
A = lii i = 2 ::: k
lk+1 1 = ak+1 1
lk+1 i = ak+1 i ;
i;1X
j=1
uji lk+1 j i = 2 ::: k
uk+1 k+1 = 1
lk+1 k+1 = ak+1 k+1 ;
kX
i=1
lk+1 i ui k+1
(6:38)
Como ya se ha indicado, se ha supuesto que la matriz A es tal que permite su descom-
posicion sin pivotamiento si esto no fuera as , algun lk+1 k+1 se anular a lo cual impedir a
la descomposicion del siguiente menor, puesto que se producir a una division por cero. Las
tecnicas de pivotamiento tambien pueden emplearse con estos metodos y son muy extendidas
a pesar de que complican considerablemente el algoritmo expuesto en la ecuacion 6.38.
Tambien conviene observar que el numero de operaciones necesarias para la descomposicion
(ecuacion 6.38) y posterior resolucion de los sistemas triangulares (ecuacion 6.32) coincide
exactamente con el metodo de Gauss. A pesar de ello, cada elemento de L y U se evalua de
forma compacta con las ecuaciones descritas anteriormente. Por este motivo, puede reducirse la
© Los autores, 1998; © Edicions UPC, 1998.
142 Metodos numericos
propagacion de errores de redondeo si los sumatorios que aparecen en las expresiones de ui k+1
y lk+1 i se evaluan con una precision mayor (solo es necesario un numero con precision alta).
Esta tecnica de mejora de la precision fue importante en su d a, pero ha ca do en desuso debido
al abaratamiento de la memoria. Ademas, para algunos sistemas lineales, la combinacion de
variables de precision normal y de precision alta puede llegar a producir mas errores de redondeo
que trabajar solamente con variables de precision normal.
(a)
(b)
Fig. 6.2 Esquema gra co de la descomposicion en el metodo de Crout. Obtencion
de: a) la matriz triangular superior b) matriz triangular inferior. Para
calcular el elemento en negro son necesarios los elementos tramados.
Por ultimo, conviene se~nalar que, segun se aprecia en la gura 6.2a, para evaluar un elemento
ui k+1 de U unicamente es necesario conocer el elemento correspondiente ai k+1 de A, los
de U que se encuentren encima de el en su propia columna (us k+1, s = 1 ::: i ; 1) y la
descomposicion previa del menor de A de orden k. Es decir, no son necesarios ninguno de
los coe cientes de A correspondientes a la columna k + 1 por encima de ui k+1 ni del menor
citado. En otras palabras, el elemento ai k+1 es necesario para calcular el ui k+1, pero no para
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 143
calcular los siguientes elementos de U. Por consiguiente, se puede almacenar U sobre (es
decir, empleando los mismos espacios de memoria) la matriz triangular superior de A. Pueden
deducirse conclusiones similares para la matriz L (vease la gura 6.2b). Es decir, el metodo de
Crout esta perfectamente dise~nado para poder reducir las necesidades de memoria almacenando
las dos matrices triangulares en las mismas posiciones de memoria que ocupaba originalmente
la matriz A (la diagonal de U por ser unitaria no es necesario guardarla). Mas aun como se
comentara en el cap tulo 7, el almacenamiento de A, y por tanto el de L y U, puede reducirse
en el caso de que la matriz A tenga estructura en banda o skyline. En realidad, los esquemas de
almacenamiento para estos tipos de matrices se dise~naron para los metodos directos y conviene
emplearlos siempre que la dimension de las matrices exceda las pocas decenas.
Problema 6.2:
El objetivo de este problema es comprobar que el metodo de Crout puede im-
plementarse reservando espacio de memoria unicamente para una matriz y un
vector. Tal y como se acaba de comentar, las matrices triangulares L y U se
pueden almacenar sobre la matriz A. Se pide:
a) Comprobar que en la fase de sustituciones del metodo de Crout, ecuacion 6.32,
el vector y puede almacenarse sobre b, y el vector x puede almacenarse sobre
y (es decir, que basta reservar espacio de memoria para un vector).
b) Escribir el pseudocodigo del metodo de Crout (descomposicion y sustituciones)
empleando unicamente una matriz y un vector.
Metodo de Cholesky
Un caso bastante usual por el gran numero de aplicaciones que se encuentran en el marco
de la resolucion numerica de ecuaciones en derivadas parciales (metodos de diferencias nitas,
elementos nitos, etc.) es el de sistemas con matrices simetricas y de nidas positivas. Como ya
se ha visto anteriormente, este es un caso en el que no es necesario pivotar (vease la observacion
al respecto al nal del analisis matricial del metodo de Gauss), y ademas conviene explotar
el caracter simetrico de A tanto desde el punto de vista del numero de operaciones como del
almacenamiento (vease el problema 6.1). El metodo de Cholesky se propone precisamente
utilizar esta informacion previa para realizar una descomposicion mas e caz que el metodo de
Crout.
De nuevo, la descomposicion se realiza consecutivamente sobre todos los menores de A y
ahora el objetivo es encontrar L tal que A = LLT. Es decir, la incognita es una unica matriz
triangular inferior L, y su traspuesta LT hace de matriz triangular superior. El menor de orden
1 es, de nuevo, muy simple: l11 = pa11, y los siguientes se obtienen a partir de otra relacion de
recurrencia. Descompuesto el menor de orden k, Ak] = Lk]LT
k], se establece la descomposicion
de Ak+1] como
Ak+1] = Lk+1] LT
k+1]
Ak] fk+1]
fT
k+1] ak+1 k+1
= Lk] 00000000000000
lT
k+1] lk+1 k+1
LT
k] lk+1]
00000000000000T lk+1 k+1
(6:39)
Notese que, por ser A una matriz simetrica, los vectores ck+1] y fk+1] de nidos en la ecuacion
6.34 coinciden. A partir de 6.39 se obtienen las ecuaciones necesarias para la descomposicion
© Los autores, 1998; © Edicions UPC, 1998.
144 Metodos numericos
del menor principal Ak+1]:
Lk] lk+1] = fk+1]
lk+1 k+1 =
q
ak+1 k+1 ;lTk+1] lk+1]
(6:40)
Detallando la sustitucion hacia adelante para el calculo de lk+1] se llega al algoritmo:
l11 =
pa11
k = 1 ::: n;1
8

:
lk+1 1 = ak+1 1 = l11
lk+1 i =
0
@ak+1 i ;
i;1X
j=1
lij lk+1 j
1
A = lii i = 2 ::: k
lk+1 k+1 =
vuutak+1 k+1 ;
kX
i=1
l2
k+1 i
(6:41)
Para concluir, es preciso comprobar que este algoritmo puede utilizarse para cualquier matriz
simetrica y de nida positiva. El algoritmo solo fallar a si se se realizaran divisiones por cero o
se calcularan ra ces cuadradas de numeros negativos.
Teorema: La descomposicion de Cholesky dada por la ecuacion 6.41 puede rea-
lizarse para cualquier matriz A simetrica y de nida positiva.
Demostracion: Por ser Asimetrica y de nida positiva, a11  0 y l11 = pa11  0.
A partir de aqu , se procede recursivamente: se supone que se tiene la descom-
posicion Ak] = Lk]LT
k] (es decir, que se han ido obteniendo coe cientes lii po-
sitivos, con i = 1 ::: k), y se comprueba que puede hacerse la descomposicion
Ak+1] = Lk+1]LT
k+1]. Las ecuaciones 6.39 y 6.40 permiten expresar el determi-
nante del menor Ak+1] como det(Ak+1]) = det(Lk])2
(ak+1 k+1 ; lT
k+1] lk+1]).
Se veri ca que det(Ak+1])  0 (por ser A simetrica y de nida positiva) y que
det(Lk])2
 0 (por ser positivos todos sus elementos diagonales). En consecuen-
cia, ak+1 k+1 ; lT
k+1] lk+1] es positivo, y al extraer la ra z cuadrada se obtiene
lk+1 k+1  0.
Metodos LDU y LDLT
Como se ha visto, el metodo de Crout consiste en descomponer la matriz A en el producto
de dos matrices triangulares, una de las cuales (la matriz triangular superior U) tiene unos
en la diagonal. Si se desea, puede conseguirse que ambas matrices (L y U) tengan diagonales
unitarias, a cambio de a~nadir una matriz diagonal D. Se obtiene entonces la descomposicion
© Los autores, 1998; © Edicions UPC, 1998.
6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 145
generalizada A = LDU. Pueden obtenerse las matrices L, D y U de forma recursiva, tal y
como se ha visto para el metodo de Crout.
Asimismo, la descomposicion de Cholesky A = LLT puede generalizarse en A = LDLT.
De nuevo, a cambio de a~nadir una matriz diagonal D, puede imponerse que L tenga diagonal
unitaria.
Para ambos metodos, una vez efectuada la descomposicion, la solucion x del sistema lineal
se obtiene resolviendo tres sistemas con solucion inmediata: dos triangulares y uno diagonal.
Problema 6.3:
A partir de lo visto para los metodos de Crout y de Cholesky en los subapartados
anteriores,
a) Generalizar la ecuacion 6.38 al metodo LDU.
b) Generalizar la ecuacion 6.41 al metodo LDLT.
El rango de aplicacion de las descomposiciones LU y LDU es el mismo. No ocurre lo
mismo para las descomposiciones simetricas LLT y LDLT: solamente las matrices simetricas
y de nidas positivas pueden escribirse como A = LLT en cambio, cualquier matriz simetrica
que no requiera pivotamiento (por ejemplo, las matrices simetricas y de nidas negativas) puede
expresarse como A = LDLT.
6.3 Bibliograf a
Breuer, S. Zwas, G. Numerical Mathematics. A Laboratory Approach. Cambridge University
Press, 1993.
Ciarlet, P.G. Introduction a l'Analyse Numerique Matricielle et a l'Optimisation. Masson,
1982.
Householder, A.S. The Theory of Matrices in Numerical Analysis. Dover Publications Inc.,
1964.
Press, W.H. Flannery, B.P. Teukolsky, S.A. Vetterling, W.T. Numerical Recipes.
The Art of Scienti c Computing. Cambridge University Press, 1986.
Ralston, A. Rabinowitz, P. A First Course in Numerical Analysis. McGraw-Hill, 1978.
Stewart G.W. Afternotes on Numerical Analysis. Society for Industrial Applied Mathematics,
1996.
Wilkinson, J.H. The Algebraic Eigenvalue Problem. Oxford University Press, 1965.
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 147
7 Programacion y aspectos computacionales de los sis-
temas lineales de ecuaciones
Objetivos
Estudiar y analizar el dimensionamiento de matrices.
Desarrollar diversos programas FORTRAN para sistemas triviales.
Realizar varias consideraciones generales sobre la memoria e introducir el concepto
de dimensionamiento dinamico.
Presentar los esquemas de almacenamiento para matrices diagonales, triangulares y
en banda.
7.1 Programacion
7.1.1 Dimensionamiento de matrices
En el algebra numerica lineal es necesario trabajar con vectores y matrices. Estos vectores
y matrices deben tener su representacion en el ordenador para poder programar los distintos
algoritmos.
En primer lugar, es necesario asignar a cada vector y matriz el nombre que le corresponda.
Por ejemplo, un vector dado v 2 IRn puede denominarse vect, mientras que la matriz A 2
IRm n se llamara amat. Si n = 3, las componentes de v, v1, v2 y v3, vienen representadas en el
programa por vect(1), vect(2) y vect(3). De forma similar, si ahora se especi ca m = 2, se
tiene que los elementos (coe cientes) de la matriz A, a11, a12, a13, a21, a22 y a23, se escriben
en FORTRAN como amat(1,1), amat(1,2), amat(1,3), amat(2,1), amat(2,2) y amat(2,3).
© Los autores, 1998; © Edicions UPC, 1998.
148 Metodos numericos
El numero de sub ndices que como maximo puede tener una matriz depende del compilador
empleado, aunque es usual que no pueda exceder de siete sub ndices. En el ejemplo que se
muestra se han empleando nombres, tanto para el vector como la matriz, tales que por defecto
el compilador interpreta que son matrices de numeros reales. De cualquier modo, las matrices,
de la misma manera que todas las variables en FORTRAN, pueden de nirse como se desee:
INTEGER*2, INTEGER*4, REAL*4, REAL*8, COMPLEX*8, COMPLEX*16, CHARACTER y LOGICAL. Los
sub ndices de las matrices son, por el contrario, siempre variables enteras.
Una vez se tienen de nidas las componentes de un vector o bien los coe cientes de la matriz,
se puede operar con ellos tal como se har a con variables estandares. Por ejemplo, si se desea
calcular el modulo de v, vmod, basta escribir:
c___Modulo de vector
vmod = SQRT( vect(1)*vect(1) + vect(2)*vect(2) + vect(3)*vect(3) )
mientras que si se desea evaluar el vector u 2 IR2
, denominado uvec, como producto de A por
v, es decir u = Av, entonces:
c___Producto de matriz por vector
uvec(1) = amat(1,1)*vect(1) + amat(1,2)*vect(2) +
. amat(1,3)*vect(3)
uvec(2) = amat(2,1)*vect(1) + amat(2,2)*vect(2) +
. amat(2,3)*vect(3)
La ventaja de trabajar con sub ndices es precisamente que no resulta necesario explicitar
cada elemento como se ha hecho. Como resulta facil de imaginar, si las dimensiones n o m fueran
valores habituales en las aplicaciones (del orden de varios miles) la programacion de operaciones
tan simples como evaluar el modulo de un vector o el producto de matriz por vector resultar a
algo engorroso. Empleando la instruccion DO ambos ejemplos pueden reescribirse como:
c___Modulo de vector
ndim = 3
vmod = 0.0e0
do 10 i=1,ndim
vmod = vmod + vect(i)*vect(i)
10 continue
vmod = SQRT(vmod)
donde se ha introducido la variable ndim que indica la dimension de v y que permite emplear
el mismo codigo para cualquier dimension deseada. El segundo programa ser a:
c___Producto de matriz por vector
ndim = 3
mdim = 2
do 10 i=1,mdim
uvec(i) = 0.0e0
do 10 j=1,ndim
uvec(i) = uvec(i) + amat(i,j)*vect(j)
10 continue
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 149
Cuando en un programa se emplean variables con sub ndices (vectores y/o matrices) es
necesario proporcionar la siguiente informacion:
1. Que variables tienen sub ndice?
2. Cuantos sub ndices tiene cada variable?
3. Cual es el rango de valores de cada sub ndice?
Para responder a estas preguntas existe la sentencia no ejecutable que se inicia con la pala-
bra dimension. Esta sentencia debe situarse al inicio del programa (en la zona de sentencias no
ejecutables), desde luego antes de utilizar la variable correspondiente. Esta instruccion puede
afectar a todo tipo de variables (enteras, reales, etc.), previamente de nidas, y pueden escribirse
tantas instrucciones dimension como sea necesario. Por ejemplo:
dimension amat(2,3),vect(3),uvec(2)
dimension bmat(0:10,-90:1),cmat(23:230,-314:-157,-1:1,23,-5:-5)
En la primera instruccion se muestra el dimensionamiento de la matriz y los vectores empleados
en los ejemplos anterioresy, en la segunda, otro dimensionamiento de matrices para que se pueda
observar la gran libertad disponible para indicar el rango de valores de los sub ndices. El l mite
inferior de los sub ndices es un entero negativo, nulo o positivo su valor por defecto es uno.
El l mite superior puede ser, de nuevo, un entero negativo, nulo o positivo, siempre que sea
superior o igual al l mite inferior. Para referirse a las componentes de la matriz se emplean
sub ndices entre los l mites designados. De esta forma, cmat(100,-300,0,10,-5) tiene sentido,
mientras que cmat(1,-300,0,10,-5) es una posicion de memoria, en principio, desconocida.
En realidad, la instruccion DIMENSION se emplea cuando las variables han sido de nidas o
bien utilizan su de nicion impl cita (por ejemplo seran enteras aquellas que empiecen por las
letras de i a n). De hecho, existe una manera abreviada de de nirlas y dimensionarlas. Por
ejemplo, las siguientes instrucciones
real*4 amat, uvec, bmat
real*8 vect
character*2 cmat
dimension amat(2,3), vect(3),uvec(2)
dimension bmat(0:10,-90:1),cmat(23:230,-314:-157,-1:1,23,-5:-5)
son equivalentes a
real*4 amat(2,3), uvec(2), bmat(0:10,-90:1)
real*8 vect(3)
character*2 cmat(23:230,-314:-157,-1:1,23,-5:-5)
A modo de ejemplo, en el programa 7.1 primero se generan una matriz y un vector (la
primera es una matriz de Hilbert y el segundo en cada componente contiene la suma de la
la correspondiente de la matriz), a continuacion se calcula su producto, el modulo del vector
resultante y nalmente se escriben los datos y los resultados en un archivo.
© Los autores, 1998; © Edicions UPC, 1998.
150 Metodos numericos
c
c Este programa calcula el producto de una matriz por un
c vector y el modulo del vector
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
parameter (na_max = 100)
dimension a(na_max,na_max),v(na_max),w(na_max)
write (6,*) ' Entra el orden de la matriz: '
read (5,*) ndim
c___Generacion de la matriz (matriz de Hilbert)
do 10 i=1, ndim
do 10 j=1, ndim
a(i,j)= 1.0d0/(dfloat(i+j-1))
10 continue
c___Generacion del vector (suma de las columnas)
do 20 i=1, ndim
v(i)=0.0d0
do 20 j=1, ndim
v(i)= v(i) + a(i,j)
20 continue
c___Calculo del producto de matriz por vector
do 30 i=1,ndim
w(i)=0.0d0
do 30 j=1,ndim
w(i)=w(i) + a(i,j)*v(j)
30 continue
c___Calculo del modulo de un vector
xmodulo=0.0d0
do 40 i=1,ndim
xmodulo=xmodulo+w(i)*w(i)
40 continue
xmodulo=dsqrt(xmodulo)
c___Escritura de los resultados
open (unit=10,file='p7_1.res',status='new')
write (10,50)
do 60 i=1,ndim
write (10,70) (a(i,j),j=1,ndim)
60 continue
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 151
write (10,80)
do 90 i=1,ndim
write (10,100) v(i)
90 continue
write (10,110)
do 120 i=1,ndim
write (10,100) w(i)
120 continue
write (10,130) xmodulo
close (10)
50 format (' La matriz de entrada es: '/)
70 format (5(1x,1pe14.6))
80 format (/' El vector de entrada es: '/)
100 format (1x,1pe14.6)
110 format (/' El vector producto es: '/)
130 format (/' El modulo del vector producto es: ',pe14.6)
stop
end
Prog. 7.1 Calculo del producto de una matriz por un vector y del modulo del vector
En el programa 7.1 se ha introducido un nueva sentencia: es el denominado DO impl cito.
En el fragmento
do 60 i=1,ndim
write (10,70) (a(i,j),j=1,ndim)
60 continue
aparece, por una parte, el bloque DO que se ha presentado anteriormente (ver apartado 3.7.3).
Mediante el contador i, el programa escribe una la de la matriz a en cada l nea del archivo de
resultados (recuerdese que cada instruccion write produce automaticamente un salto de l nea).
Por otra parte, a traves del contador j, impl citamente se escriben, para cada valor de i, todas
las columnas de la matriz c.
En la tabla 7.1 se muestra el chero de resultados creado por el programa 7.1 para el caso
ndim=4.
© Los autores, 1998; © Edicions UPC, 1998.
152 Metodos numericos
Tabla 7.1 Fichero de resultados para ndim=4
La matriz de entrada es:
1.000000E+00 5.000000E-01 3.333333E-01 2.500000E-01
5.000000E-01 3.333333E-01 2.500000E-01 2.000000E-01
3.333333E-01 2.500000E-01 2.000000E-01 1.666667E-01
2.500000E-01 2.000000E-01 1.666667E-01 1.428571E-01
El vector de entrada es:
2.083333E+00
1.283333E+00
9.500000E-01
7.595238E-01
El vector producto es:
3.231548E+00
1.858849E+00
1.331865E+00
1.044337E+00
El modulo del vector producto es: 4.094231E+00
7.1.2 Programacion estructurada: subrutinas
El programa 7.1 permite realizar el producto de la matriz de Hilbert por un vector cuyas
componentes son la suma de las las de dicha matriz si se desea evaluar el producto de otra
matriz por otro vector se debera escribir un programa de nuevo. En realidad, el programador
podr a estar interesado en tener un programa mas general que calcule los productos de una
matriz por un vector cualquiera. Para ello es necesario agrupar y sistematizar los grupos de
sentencias que realicen una tarea concreta, por ejemplo, obtener la matriz o calcularse una cierta
norma. Al ejercicio de programar agrupando las sentencias que realizan una tarea concreta se
le llama programacion estructurada.
Ademas, en un mismo codigo pueden existir tareas repetitivas, por ejemplo, calcular el
producto escalar de dos vectores. En este caso, se tendr a que repetir tantas veces como se
necesite el grupo de sentencias que realizan el calculo del modulo de un vector (ver el ejemplo
anterior). Por consiguiente, a pesar de tener una programacion supuestamente estructurada, el
programador debe reescribir varias veces un mismo grupo de sentencias.
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 153
Para evitar estos problemas se pueden de nir las funciones externas (FUNCTION). Por ejem-
plo, para el modulo de un vector se de ne la funcion externa XMODULO. Pero estas funciones
externas tienen la limitacion de que solo retornan un valor es decir, con una funcion externa re-
sulta complicado realizar el producto de una matriz por un vector, puesto que ahora el resultado
es un vector.
Para solventar estos problemas se de nen las subrutinas: SUBROUTINE. De hecho una sub-
rutina se debe interpretar como un subprogramaque tiene casi total independencia del programa
que la requiere: las variables pueden tener nombres distintos en el programa principal y en cada
uno de los subprogramas pueden compilarse de forma independiente pueden tener sus modulos
de entrada y salida de datos::: En resumen, al igual que las FUNCTIONs, las SUBROUTINEs son
independientes del programa principal, pero es relativamente facil establecer una buena comu-
nicacion entre todas ellas.
Las funciones y la subrutinas empiezan por una sentencia con FUNCTION o SUBROUTINE y
deben terminar con una END (todas ellas sentencias no ejecutables que indican al compilador
donde empieza y termina cada modulo). El nombre de la funcion o de la rutina va seguido de
parentesis que contienen los argumentos, separados por comas si hay mas de uno.
FUNCTION nombre funcion(argumento1, argumento2,:::)
SUBROUTINE nombre subrutina(argumento1, argumento2,:::)
Mientras que con una FUNCTION el nombre de la misma debe aparecer al menos una vez en
sus sentencias para asignarle el valor correspondiente, en el caso de una rutina su nombre no
aparecera por no estar asociado a ningun valor concreto: todos los resultados se de nen en
termino de los argumentos y puede haber cualquier numero de argumentos. Las sentencias
de una subrutina no se ejecutan al introducir simplemente su nombre en una sentencia del
programa, como ocurre con las funciones, sino que es necesario emplear una sentencia
CALL nombre subrutina(argumento1, argumento2,:::)
para que la rutina se ejecute. Los argumentos que se necesiten para ejecutar las instrucciones de
la rutina tendran los valores correspondientes al momento en que se efectua la sentencia CALL.
De la misma forma, los argumentos asociados a los resultados tendran despues de la sentencia
CALL los valores asignados en la rutina. Es importante resaltar que la ultima sentencia que
se ejecuta en una FUNCTION o SUBROUTINE es la sentencia RETURN que devuelve el control al
programa principal.
Como ejemplo de lo expuesto anteriormente, en el programa 7.2 se ha reescrito el programa
que calcula el producto de una matriz por un vector y el modulo de este ultimo empleando
funciones y rutinas. Como se podra observar, dentro de las funciones y rutinas es necesario
volver a indicar que variables tienen sub ndices y cuales no.
© Los autores, 1998; © Edicions UPC, 1998.
154 Metodos numericos
c
c Este programa calcula el producto de una matriz por un
c vector y el modulo del vector mediante funciones y
c rutinas
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
parameter (na_max = 100)
dimension a(na_max,na_max),v(na_max),w(na_max)
write (6,*) ' Entra el orden de la matriz: '
read (5,*) ndim
c___Lectura o generacion de la matriz y del vector
call get_mat_vec (ndim,a,v)
c___Calculo del producto de matriz por vector
call product (ndim,a,v,w)
c___Calculo del modulo de un vector
x=xmodulo(ndim,w)
c___Escritura de los resultados
call write_resul(ndim,a,v,w,x)
stop
end
c___________________Lectura o generacion de la matriz y del vector
subroutine get_mat_vec (n,a,v)
implicit real*8 (a-h,o-z)
dimension a(n,n),v(n)
c___Generacion de la matriz (matriz de Hilbert)
do 10 i=1, n
do 10 j=1, n
a(i,j)= 1.0d0/(dfloat(i+j-1))
10 continue
c___Generacion del vector (suma de las columnas)
do 20 i=1, n
v(i)=0.0d0
do 20 j=1, n
v(i)= v(i) + a(i,j)
20 continue
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 155
return
end
c___________________Calculo del producto de matriz por vector
subroutine product (n,a,v,w)
implicit real*8 (a-h,o-z)
dimension a(n,n),v(n),w(n)
do 10 i=1,n
w(i)=0.0d0
do 10 j=1,n
w(i)=w(i) + a(i,j)*v(j)
10 continue
return
end
c___________________Calculo del modulo de un vector
real*8 function xmodulo(n,b)
implicit real*8 (a-h,o-z)
dimension b(n)
xmodulo=0.0d0
do 10 i=1,n
xmodulo=xmodulo+b(i)*b(i)
10 continue
xmodulo=dsqrt(xmodulo)
return
end
c___________________Escritura de los resultados
subroutine write_resul(n,a_mat,b,c,x)
implicit real*8 (a-h,o-z)
dimension a_mat(n,n),b(n),c(n)
open (unit=10,file='p7_2.res',status='new')
write (10,10)
do 20 i=1,n
write (10,30) (a_mat(i,j),j=1,n)
20 continue
© Los autores, 1998; © Edicions UPC, 1998.
156 Metodos numericos
write (10,40)
do 50 i=1,n
write (10,60) b(i)
50 continue
write (10,70)
do 80 i=1,n
write (10,60) c(i)
80 continue
write (10,90) x
close (10)
10 format (' La matriz de entrada es: '/)
30 format (5(1x,1pe14.6))
40 format (/' El vector de entrada es: '/)
60 format (1x,1pe14.6)
70 format (/' El vector producto es: '/)
90 format (/' El modulo del vector producto es: ',pe14.6)
return
end
Prog. 7.2 Calculo del producto de una matriz por un vector y del modulo del vector
mediante funciones y rutinas
Problema 7.1:
Modi car el programa 7.2 de forma que en lugar de generar una matriz de Hilbert
genere una matriz de Vandermonde. La de nicion de los terminos de la matriz
de Vandermonde es:
aij = (xi)j;1
i j = 1 :: n
donde x1 :: xn, son n numeros reales distintos entre s . Como puede observarse, se
obtienen diferentes matrices de Vandermonde para diferentes valores de x1 :: xn.
En particular se pide:
a) Tomar xi = 10;i+1
, con i = 1 :: n, y presentar los resultados obtenidos con
n = 4.
b) Tomar xi = i, con i = 1 :: n, y presentar los resultados obtenidos con n = 4.
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 157
7.2 Sistemas con solucion inmediata: programacion
7.2.1 Matriz diagonal
Como ya se ha visto anteriormente, la matriz A se escribe como:
A = D =
0
BBBBBB@
d11 0 0
0 d22
...
...
...
... ... ...
...
...
... ... 0
0 0 dnn
1
CCCCCCA
y la solucion se obtiene directamente
xi = bi
dii
i = 1 ::: n
Por lo tanto, es muy sencillo realizar la siguiente subrutina para matrices diagonales.
c_______________Solucion de Sistemas Lineales con matriz DIAGONAL
subroutine solve_diag(ndim, dmat, b, x)
dimension dmat(ndim), b(ndim), x(ndim)
do 10 i=1,ndim
x(i) = b(i)/dmat(i)
10 continue
return
end
Conviene resaltar algunas cuestiones: en primer lugar esta rutina presupone que la matriz
D que le llega es regular (la rutina no comprueba que cada dmat(i) sea no nulo), porque esta
veri cacion puede resultar cara (una sentencia logica para cada componente) y normalmente
la regularidad de D es conocida a priori a pesar de ello, esta veri cacion es absolutamente
necesaria si no se sabe con certeza que D es regular. En segundo lugar, esta rutina se ha
dise~nado para que, a gusto del programador, los resultados (el vector x) se guarden en un
vector distinto o no del vector b. En funcion de lo que se desee, la sentencia que llama a (hace
que se ejecuten la instrucciones de) SOLVE DIAG es:
call solve_diag(ndim, dmat, b, x)
si se han dimensionados los dos vectores b y x, y ademas se desean guardar ambos. O bien,
call solve_diag(ndim, dmat, b, b)
si solo b ha sido dimensionado y se puede escribir el resultado, x, de resolver el sistema sobre el
termino independiente. Se pierde la informacion original de b pero hay un ahorro de memoria
(un vector de dimension ndim).
© Los autores, 1998; © Edicions UPC, 1998.
158 Metodos numericos
7.2.2 Matriz triangular inferior
En este caso, la estructura de la matriz del sistema es
A = L =
0
BBBBBB@
l11 0 0
l21 l22
...
...
...
... ... ...
...
...
... ... 0
ln1 ln n;1 lnn
1
CCCCCCA
y el algoritmo de resolucion que se denomina sustitucion hacia adelante es (ver subapartado
6.2.2)
x1 = b1 = l11
xi = (bi ;
i;1X
j=1
lijxj) = lii i = 2 ::: n
Una subrutina que permite aplicar este algoritmo es la siguiente:
c_______________Solucion de Sistemas Lineales con matriz TRIANGULAR INFERIOR
subroutine solve_tl(ndim, tlmat, b, x)
dimension tlmat(ndim,ndim), b(ndim), x(ndim)
x(1) = b(1) / tlmat(1,1)
do 10 i=2,ndim
x(i) = b(i)
do 20 j=1,i-1
x(i) = x(i) - tlmat(i,j)*x(j)
20 continue
x(i) = x(i) / tlmat(i,i)
10 continue
return
end
Conviene observar que en esta rutina se han anidado los bucles DO de manera natural
siguiendo el algoritmo expuesto: para cada la i se suman las columnas en j. Sin embargo,
tambien podr a plantearse el algoritmo con un bucle primero en las columnas, en j, y luego por
las i. Es decir, la sustitucion hacia adelante puede ser reprogramada de la siguiente forma:
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 159
c_______________Solucion de Sistemas Lineales con matriz TRIANGULAR INFERIOR
subroutine solve_tl(ndim, tlmat, b, x)
dimension tlmat(ndim,ndim), b(ndim), x(ndim)
do 10 i=1,ndim
x(i) = b(i)
10 continue
do 20 j=1,ndim-1
x(j) = x(j) / tlmat(j,j)
do 30 i=j+1,ndim
x(i) = x(i) - tlmat(i,j)*x(j)
30 continue
20 continue
x(ndim) = x(ndim) / tlmat(ndim,ndim)
return
end
En el apartado 7.4 quedaran claras las implicaciones practicas que pueden representar ambas
formas de implementar este algoritmo. A pesar de todo es importante observar que en ambos
casos esta previsto almacenar toda la matriz L. Es decir, se almacenan todos los ceros de la
triangular superior. Este despilfarro de memoria es innecesario y debe ser corregido, como se
vera mas adelante.
Finalmente, se presenta una variante del bucle DO muy conveniente para escribir matrices.
Una rutina que solo escriba los terminos no nulos de la matriz tlmat(ndim,ndim) podr a ser
la siguiente:
c_______________Escritura de una matriz TRIANGULAR INFERIOR
subroutine write_tl(ndim, tlmat)
dimension tlmat(ndim,ndim)
do 30 i=1,ndim
write(6,1000) (tlmat(i,j), j=1,i)
30 continue
1000 format(11(1pe12.6))
return
end
© Los autores, 1998; © Edicions UPC, 1998.
160 Metodos numericos
7.3 Consideraciones sobre la memoria
7.3.1 Tipos de memoria
Como ya se vio en el primer tema, Introduccion al uso de los ordenadores, existen, desde
el punto de vista del hardware, diversos tipos de memoria. En particular, interesa recordar la
memoria RAM y la memoria cache. La primera porque es donde residen los datos, los programas
que ejecuta el usuario y parte del sistema operativo. Y la segunda porque es la que almacena
los datos antes de que los utilice la CPU.
Puesto que la memoria RAM es nita, existe, en principio, una limitacion clara al numero de
datos que como maximo se pueden manipular simultaneamente en un ordenador. Por ejemplo,
si se desea resolver un sistema lineal de ecuaciones con n = 5000 incognitas y se almacenan
todos los coe cientes de la matriz, n2
= 25 106
, como reales de ocho bytes, REAL*8, ser a
necesario disponer de 2 108
bytes, es decir (dividiendo por 10242
) de 191Mbytes, solo para
almacenar la matriz. Es evidente que este numero, que no tiene en cuenta ni otros vectores, ni
las instrucciones del programa, ni el sistema operativo, excede con creces la memoria disponible
en la gran mayor a de los ordenadores.
Por suerte, en los a~nos sesenta se desarrollo una aportacion fundamental en ciencias de la
computacion: la memoria virtual. La idea es sencilla pero su implementacion es complicada. La
memoria que el usuario tiene a su disposicion no coincide con la memoria RAM del ordenador.
El usuario dispone de una cierta cantidad de memoria virtual. Esta memoria esta dividida en
bloques de tama~no relativamente modestos llamados paginas. Puesto que la memoria virtual
es mayor que la memoria RAM, la mayor a de las paginas de memoria virtual se almacenan en
dispositivos alternativos, normalmente discos. Solo unas pocas paginas de la memoria virtual se
encuentran activas en RAM. Los dispositivos alternativos son mucho mas lentos que la memoria
RAM pero permiten aumentar considerablemente las capacidades de memoria direccionable por
el usuario.
Cuando una instruccion de un programareferencia una cierta posicion de la memoria, existen
dos posibilidades:
1. Que la pagina que contiene esa posicion de memoria se encuentre en RAM (un acierto).
En este caso, se accede a esta posicion de memoria inmediatamente.
2. Que la pagina que contiene esa posicion de memoria no se encuentre en RAM (un fallo).
En este caso, el sistema selecciona una de las paginas activas y la cambia por la pagina de
memoria que contenga la informacion deseada.
Cada fallo es caro, puesto que implica la seleccion de la pagina adecuada, su busqueda
en el disco, su lectura y nalmente el intercambio con la pagina activa en RAM. Ademas, en
sistemas multiusuario todos estos procesos implican interacciones entre la CPU y los dispositivos
alternativos de almacenamiento (discos) que se ven retrasadas por las acciones de los demas
usuarios. Es decir, conviene evitar, en la medida de lo posible, los fallos. Normalmente, las
posiciones de memoria cercanas tienen grandes posibilidades de pertenecer a la misma pagina.
Por consiguiente, los programadores deben procurar, para mejorar la e ciencia de sus codigos,
que los datos que se vayan a emplear consecutivamente esten en posiciones de memoria lo mas
proximas posible.
El intercambio de informacion que se produce entre la memoria RAM y el disco tambien
existe entre la memoria cache y la memoria RAM. Puesto que por la memoria cache pasa la
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 161
informacion que va a ser empleada en la CPU, tambien se pueden de nir los aciertos (cuando la
siguiente posicion de memoria deseada ya se encuentra en cache) y los fallos (cuando la posicion
de memoria deseada no esta en memoria cache).
En resumen, el concepto de proximidad de la informacion es fundamental para evitar sobre-
costos en el manejo de la memoria.
7.3.2 Dimensionamiento dinamico
Si se recuerdan las primeras sentencias de los programas que realizan el calculo del producto
de una matriz por un vector (programas 7.1 y 7.2):
...
implicit real*8 (a-h,o-z)
parameter (na_max = 100)
...
dimension a(na_max,na_max), v(na_max), w(na_max)
...
se puede observar que para no tener que recompilar y linkar el programa cada vez que se
desea trabajar con matrices de tama~nos distintos, se ha de nido un parametro na max. Este
parametro indica el tama~no maximo admisible sin necesidad de modi car el programa. En este
caso, se supone que no van a analizarse matrices de orden superior a 100. Para ello se reserva
en memoria espacio su ciente para almacenar la matriz a de 100 100 coe cientes reales de
ocho bytes, posteriormente se reserva el espacio, que como maximo ocupara el vector v (100
REAL*8 mas), y nalmente otro tanto para el vector w.
Despues de reservar el espacio que como maximo puede necesitarse, el programa requiere el
orden que en realidad va a ser empleado:
...
write (6,*) ' Entra el orden de la matriz: '
read (5,*) ndim
...
Si, por ejemplo, se introduce para ndim el valor 4, el programa solo utiliza las primeras 16
posiciones de memoria de la matriz a. El vector v, de 4 componentes, se encontrara almacenado
detras de la matriz a. Es decir, hay 1002
;16 numeros reales de ocho bytes, que no van a ser
usados. Entre los coe cientes de a y las componentes de v existen, por lo tanto, un gran numero
de posiciones de memoria. Es obvio que en este caso no se veri ca la condicion de proximidad
entre posiciones de memoria (ver gura 7.1).
Paraevitar este problema se emplea el dimensionamiento dinamico. El objetivo es almacenar
las matrices y los vectores consecutivamente dejando las posiciones de memoria inutilizadas al
nal del espacio reservado (que es el mismo que antes).
Los programas 7.1 y 7.2 hab an reservado un espacio equivalente a: 1002
+100+100 = 10 200
reales de ocho bytes. Ahora se reservaran las mismas posiciones de memoria (mas una por
comodidad):
© Los autores, 1998; © Edicions UPC, 1998.
162 Metodos numericos
Fig. 7.1 Reserva no consecutiva de espacio de memoria
Fig. 7.2 Reserva consecutiva de espacio de memoria
...
implicit real*8 (a-h,o-z)
parameter (mtot = 10201)
...
dimension dd(mtot)
write (6,*) ' Entra el orden de la matriz: '
read (5,*) ndim
...
pero en un unico vector denominado dd que debe contener la matriz a y los vectores v y w. La
matriz a ocupara las primeras ndim ndim posiciones de dd, el vector v las siguientes ndim, y por
ultimo el vector w utilizara las ndim siguientes. Quedan libres, por lo tanto, las ultimas mtot -
ndim2
- ndim - ndim posiciones del vector dd si ndim= 4 quedan libres 10 177 consecutivas
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 163
y al nal de dd. Con esto se ha conseguido que los coe cientes de a, las componentes de v y las
componentes de w esten proximas, independientemente de ndim (ver gura 7.2).
Queda, sin embargo, el poder enviar a las funciones o rutinas la informacion adecuada: la
matriz y los vectores por separado. Para ello es necesario saber donde empieza cada matriz y
vector. Esto se realiza por medio de punteros: na sera el puntero de la matriz a (donde empieza
la matriz a en dd), nv sera el puntero de v, y nw el de w. Observese que todos ellos son enteros.
Para de nir los punteros se realizan las siguientes instrucciones:
...
c___Definicion de punteros
na = 1 ! matriz a (que ocupa ndim*ndim posiciones)
nv = na + ndim*ndim ! vector v despues de a (y ocupa ndim posiciones)
nw = nv + ndim ! vector w despues de v
nend = nw + ndim
c___Verificacion de espacio necesario
if (nend .gt. mtot) then
write(5,*) ' ERROR  Dimensionamiento Insuficiente !'
write(5,*) ' se requieren',nend,' posiciones'
stop
endif
...
Por ultimo, es imprescindible establecer la comunicacion con las funciones y rutinas: es
necesario que se les transmitan la matriz y los vectores por separado. Para ello, es conveniente
imaginar que el argumento asociado a una matriz, o a un vector, solo transmite a la rutina la
posicion del primer elemento de esta matriz, o vector. Posteriormente, dentro de la rutina y
con la instruccion DIMENSION, se reconoce el espacio que necesita esta matriz, o vector. As ,
por ejemplo,
...
call get_mat_vec (ndim,a,v)
...
es equivalente a
...
call get_mat_vec (ndim,a(1,1),v(1))
...puesto que ambas pasan la posicion del mismo elemento de la matriz a. Es en realidad en la
rutina, cuando se escribe
...
subroutine get_mat_vec (n,a,v)
implicit real*8 (a-h,o-z)
dimension a(n,n),v(n)
...
donde se le da el caracter de matriz de dimension ndim a la posicion de memoria transmitida.
Gracias a esta propiedad, en el caso de dimensionamiento dinamico, solo es necesario trans-
mitir la posicion del primer elemento correspondiente a la matriz o vector deseado. Por ejemplo:
...
call get_mat_vec (ndim,dd(na),dd(nv))
...
© Los autores, 1998; © Edicions UPC, 1998.
164 Metodos numericos
A continuacion se muestra el programa principal para el calculo del producto matriz por
vector modi cado segun el dimensionamiento dinamico.
c
c Este programa calcula el producto de una matriz por un
c vector y el modulo del vector mediante funciones y
c rutinas utilizando dimensionamiento dinamico
c___________________________________________________________________
implicit real*8 (a-h,o-z)
parameter (mtot = 10201)
dimension dd(mtot)
write (6,*) ' Entra el orden de la matriz: '
read (5,*) ndim
c___Definicion de punteros
na = 1
nv = na + ndim*ndim
nw = nv + ndim
nend = nw + ndim
c___Verificacion de espacio necesario
if (nend .gt. mtot) then
write(5,*) ' ERROR  Dimensionamiento Insuficiente !'
write(5,*) ' se requieren',nend,' posiciones'
stop
endif
c___Lectura o generacion de la matriz y del vector
call get_mat_vec (ndim,dd(na),dd(nv))
c___Calculo del producto de matriz por vector
call product (ndim,dd(na),dd(nv),dd(nw))
c___Calculo del modulo de un vector
x=xmodulo(ndim,dd(nw))
c___Escritura de los resultados
call write_resul(ndim,dd(na),dd(nv),dd(nw),x)
stop
end
Prog. 7.3 Programa principal mediante dimensionamiento dinamico
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 165
7.4 Almacenamiento de matrices
7.4.1 Almacenamiento por defecto en FORTRAN
En FORTRAN las variables con dos sub ndices se almacenan por columnas. Por ejemplo,
en la matriz
A =
0
B@
a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44
1
CA
se almacenan los coe cientes siguiendo el orden que imponen las columnas, es decir:
a11 a21 a31 a41 a12 a22 a32 a42 a13 a23 a33 a43 a14 a24 a34 a44
En el caso de que la variable tenga mas de dos sub ndices, el almacenamiento sigue la misma
losof a. Por ejemplo, una variable dimensionada como c(ni,nj,nk), tendra en primer lugar
los elementos c(1,1,1), c(2,1,1), ::: , c(ni,1,1), despues vendran los c(1,2,1), c(2,2,1),
::: , c(ni,2,1), hasta c(1,nj,1), c(2,nj,1), ::: , c(ni,nj,1), para seguir con c(1,1,2),
c(2,1,2), ::: , c(ni,1,2), despues c(1,2,2), c(2,2,2), ::: , c(ni,2,2), hasta c(1,nj,2),
c(2,nj,2), ::: , c(ni,nj,2), hasta llegar nalmente a los ultimos elementos: c(1,nj,nk),
c(2,nj,nk), ::: , c(ni,nj,nk).
Es importante tener en cuenta el hecho de que el lenguaje FORTRAN almacena las matrices
por columnas para el dise~no de los algoritmos. Para ilustrar este punto se van a analizar los
algoritmos propuestos en el apartado 7.2.2 para resolver sistemas con matrices triangulares
inferiores. En este caso, se particulariza, para matrices de orden 4. Es decir,
L =
0
B@
l11 0 0 0
l21 l22 0 0
l31 l32 l33 0
l41 l42 l43 l44
1
CA
Por consiguiente, esta matriz se almacena en el ordenador como
l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44
Ahora, si se observan en detalle los bucles del primer algoritmo propuesto se comprueba que el
orden en que se accede a los coe cientes de L es
1 2 4 7 3 5 8 6 9 10
l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44
Como puede verse, los accesos a los elementos van saltando de un sitio a otro. Es evidente que
en este caso no se accede a los elementos de L ni de forma secuencial ni con proximidad. Este
efecto de saltar entre posiciones lejanas de la memoria se ve acentuado al aumentar el orden de
© Los autores, 1998; © Edicions UPC, 1998.
166 Metodos numericos
la matriz. En cambio, si se estudia el otro algoritmo propuesto, es facil comprobar que a los
elementos de L se accede como sigue:
1 2 3 4 5 6 7 8 9 10
l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44
Parece obvio que de esta forma el acceso a los coe cientes es mas secuencial: se progresa a lo
largo de las columnas de L siguiendo el almacenamiento natural del FORTRAN.
A pesar de todo el almacenamiento de los ceros es claramente un despilfarro de memoria y
ademas separa elementos que se necesitan de forma consecutiva. Mas adelante se analiza como
evitar este almacenamiento innecesario.
Por ultimo conviene resaltar que el almacenamiento por columnas que por defecto se tiene en
FORTRAN no tiene por que reproducirse con otros lenguajes de programacion. Por ejemplo,
el lenguaje C almacena por defecto las matrices por las. En ese caso, el primer algoritmo
propuesto resulta mas e ciente.
7.4.2 Almacenamiento por las y por columnas
Hasta ahora se ha estudiado el almacenamiento que de manera natural proporciona el FOR-
TRAN, pero el usuario puede, si lo desea, modi carlo segun su interes. A continuacion se
presentan las dos maneras de almacenamiento de matrices llenas en un vector: por columnas y
por las.
Almacenamiento por columnas
En algunas ocasiones (cuando, por ejemplo, se mezclan rutinas en C y en FORTRAN) puede
ocurrir que el programador desee efectuar el almacenamiento de una matriz en un vector. En
primer lugar se estudia el caso en que se desee realizar un almacenamiento por columnas. Es
decir que la matriz A 2 IRm n, que es una matriz rectangular de m las y n columnas,
A =
0
BBBB@
a11 a12 a1 n;1 a1n
a21 a22 a2 n;1 a2n
...
...
...
...
am;1 1 am;1 2 am;1 n;1 am;1 n
am1 am2 am n;1 amn
1
CCCCA
se desea almacenar en un vector c 2 IRn m introduciendo consecutivamente las columnas de A.
Es decir
cT = (c1 c2 ::: cm cm+1 cm+2 ::: c2 m ::: ck ::: c(n;1) m+1 c(n;1) m+2 ::: cn m)
=(a11 a21 ::: am1 a12 a22 ::: am2 ::: aij ::: a1n a2n ::: amn)
Como puede verse, en la componente ck de c se almacena el elemento aij de A. La posicion k
se determina a partir de i y de j como
k = (j ;1) m+ i
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 167
En el caso, poco probable, de que dada la posicion k en c se quiera conocer a que la i y
columna j de A se corresponde, es necesario ejecutar el siguiente algoritmo:
i = mod(k,m)
j = (k-i)/m + 1
if (i.eq.0) then
i = m
j = j - 1
endif
Almacenamiento por filas
Si por el contrario el programador desea efectuar un almacenamiento por las, entonces la
matriz A 2 IRm n se guarda en un vector f 2 IRm n introduciendo consecutivamente las las
de A. Es decir,
fT = (f1 f2 ::: fn fn+1 fn+2 ::: f2 n ::: fk ::: f(m;1) n+1 f(m;1) n+2 ::: fm n)
=(a11 a12 ::: a1n a21 a22 ::: a2n ::: aij ::: am1 am2 ::: amn)
Ahora, el elemento aij se almacena en la componente fk de f y la posicion k se determina a
partir de i y de j como
k = (i;1) n+ j
mientras que para recuperar i y j a partir de k el algoritmo es simplemente:
j = mod(k,n)
i = (k-i)/n + 1
if (j.eq.0) then
j = n
i = i - 1
endif
Para ver un ejemplo de lo expuesto anteriormente, se estudia el producto AB = C siendo
A 2 IRm n, B 2 IRn l y, obviamente, C 2 IRm l. Los elementos de C se obtienen a partir de
cij =
nX
k=1
aik bkj i = 1 ::: m j = 1 ::: l
Si A y C se almacenan por las y B se almacena por columnas, el algoritmo para efectuar el
producto es el siguiente:
© Los autores, 1998; © Edicions UPC, 1998.
168 Metodos numericos
...
subroutine AporBenC(m,n,l,fa,cb,fc)
dimension fa(m*n), cb(n*l), fc(m*l)
...
do i = 1, m
iapos = (i-1)*n
icpos = (i-1)*l
do j = 1, l
jbpos = (j-1)*n
kcpos = icpos + j
fc( kcpos ) = dot( n, fa(iapos+1), cb(jbpos+1) )
enddo
enddo
...
7.4.3 Matrices simetricas o matrices triangulares
Si se desea almacenar matrices simetricas basta conservar los elementos de la triangular
inferior o de la triangular superior. Por lo tanto los esquemas que se exponen a continuacion
son validos tanto para matrices simetricas como para matrices triangulares.
Matriz triangular superior
Sea la matriz U que se muestra a continuacion
U =
0
BBBBBBBBBBBBBBBBBBBBBBB@
i j
u11 u12 u1i u1j u1n
0 u22
...
...
...
...
... ...
i 0
... uii uij uin
... ...
...
... ...
...
...
... ...
j 0
... ujj ujn
... ...
...
...
... ... un;1 n
0 0 0 0 unn
1
CCCCCCCCCCCCCCCCCCCCCCCA
En este caso es usual el almacenamiento por columnas de esta matriz. Para evitar el almace-
namiento de los ceros, el vector que se de ne es
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 169
cT = (c1 c2 c3 c4 c5 c6 c7 ::: ::: ck ::: ::: cn(n+1)
2
)
=(u11 u12 u22 u13 u23 u33 u14 ::: u44 ::: uij ::: u1n u2n ::: unn)
y la ecuacion que determina k a partir de i y de j es
k = 1 + 2 + 3 + 4 + :::+ (j ;1) + i
= j(j ;1)
2 + i
Obviamente, esta formula solo tiene sentido para los elementos no nulos de U, es decir para
i j.
El algoritmo de recuperacion (dado k deducir i y j) puede escribirse como
i = 1
j = 0
do while ( i.gt.j )
j = j+1
i = k-j*(j-1)/2
enddo
7.4.4 Matrices en banda
Se dice que una matriz B es una matriz en banda con
1. Semiancho inferior l si todos los elementos de B por debajo de la subdiagonal l son nulos,
es decir, bij = 0 si i;j  l.
2. Semiancho superior u si todos los elementos de B por encima de la subdiagonal u son nulos.
Es decir, bij = 0 si j ;i  u.
Esta matriz puede esquematizarse como sigue
B =
0
BBBBBBBBBBBBBBB@
b11 b12 ::: b1 1+u
b21 b22
...
...
... ...
b1+l 1
... ...
... ... bn;u n
... ...
...
... bn;1 n;1 bn;1 n
bn n;l bn n;1 bnn
1
CCCCCCCCCCCCCCCA
En este caso lo primero que se hace es una transformacion de la matriz anterior a una matriz
© Los autores, 1998; © Edicions UPC, 1998.
170 Metodos numericos
rectangular R con n las y l + 1 + u columnas
R =
0
BBBB@
r11 r12 r1 l+u r1 l+1+u
r21 r22 r2 l+u r2 l+1+u
...
...
...
...
rn;1 1 rn;1 2 rn;1 l+u rn;1 l+1+u
rn1 rn2 rn l+u rn l+1+u
1
CCCCA
Los elementos de B quedan en esta matriz como
R =
0
BBBBBBBBBBBBBBBB@
b11 b1 1+u
b21 b22 b2 2+u
... ...
...
b1+l 1 b1+l 1+l b1+l 1+l+u
...
...
...
...
... bn;u n
...
... ...
... bn;1 n;1 bn;1 n
bn n;l bn n;1 bnn
1
CCCCCCCCCCCCCCCCA
Conviene observar que este esquema de almacenamiento sera ventajoso en la medida que se
veri que: n2
n (l+1+u), es decir, n (l+1+u). En realidad se almacenan (l+1)l
2
+ (u+1)u
2
elementos que a priori se sabe que son nulos, pero no resulta facil evitar considerarlos sin
complicar en exceso los algoritmos de almacenamiento. Ademas resulta facil demostrar que
para l n y u n el numero de ceros innecesariamente almacenados en R es muy inferior a
los que quedan fuera de la banda de B, (n;l;1)(n;l)
2
+ (n;u;1)(n;u)
2
.
Por ultimo, se plantean las formulas de almacenamiento: dado un elemento generico bij de
B, este elemento se almacena en r de R, y los sub ndices y se evaluan como
= i
= 1 + l + (j ;i)
En este caso, la recuperacion de i y de j es tambien trivial
i =
j = ( + ) ;(1 + l)
En la practica, la matriz rectangular R se almacena por las o por columnas. En el primer
caso se tendra almacenada B por las y el el segundo por diagonales.
Por ejemplo, si R se almacena por columnas (B por diagonales) el algoritmo de almace-
namiento que dados los sub ndices i y j de un elemento de la banda de B, indica la componente
k en un vector, es
k = ( ;1) n+
= l + (j ;i)] n+ i
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 171
Problema 7.2:
Se desea encontrar la solucion del sistema lineal de ecuaciones Ax = b, donde A
es una matriz de orden n, simetrica, en banda y con coe cientes:
a11 = 5
aii = 6 i = 2 :: n;1
ann = 5
aij = ;4 i = 1 :: n j = max(1 i;1) min(n i+ 1)
aij = 1 i = 1 :: n j = max(1 i;2) min(n i+ 2)
y b es un vector con coe cientes:
bi = h4
EI pa + pb ;pa
b;a h i i = 1 :: n
donde E, I, a, b, pa, pb son constantes del problema y h = (b ; a)=(n + 1). Se
pide:
a) Escribir un programa en FORTRAN que utilice dimensionamiento dinamico,
que trate la matriz A como matriz simetrica en banda con u = l = 2, que
tenga una estructura modular, y que conste de las siguientes subrutinas:
Lectura de datos de un chero (n, a, b, E, I, pa, pb).
De nicion de punteros.
Generacion de A y b.
Resolucion del sistema Ax = b mediante el metodo de Gauss adaptado
al esquema de almacenamiento optimo de nido para A.
Escritura del resultado x en un chero.
b) Resolver el sistema Ax = b para los datos a = 0, b = 1, pa = 1, pb = 1,
E = 105
, I = 10;5
y
1. n = 5
2. n = 19
3. n = 99
c) Importar los resultados del apartado b desde Excel y generar, para cada valor
de n, una lista de pares ordenados fti xig con i = 0 :: n + 1, segun las
siguientes relaciones:
ti = a + b ;a
n+ 1 i i = 0 :: n+ 1
x0 = 0
xn+1 = 0
y xi, con i = 1 :: n, iguales a los resultados obtenidos a partir del programa.
Presentar en un solo gra co de Excel las tres series de pares ordenados fti xig.
Problema 7.3:
Comparar el coste computacional (numero de operaciones y memoria necesaria)
de la resolucion mediante el metodo de Gauss de un sistema de ecuaciones de
© Los autores, 1998; © Edicions UPC, 1998.
172 Metodos numericos
orden n, Ax = b, en el que la matriz A es simetrica y en banda con u = l = 2
(vease el problema 7.2), considerando las dos alternativas siguientes:
a) Se trata la matriz A como matriz llena y se utiliza el metodo de Gauss
estandar.
b) Se almacena la matriz A de forma optima y se utiliza el metodo de Gauss
adaptado al esquema de almacenamiento.
Concretar los resultados obtenidos con n igual a 10, 100 y 1000.
Problema 7.4:
Un ingeniero esta dise~nando el trazado en alzado de una monta~na rusa para
un nuevo parque tematico. Los datos de dise~no son n + 2 puntos (xi yi), con
i = 0 ::: n + 1, que corresponden a n + 2 puntos de apoyo de la v a (vease la
gura).
Para de nir el trazado de la v a, el ingeniero decide utilizar una cubica en cada
uno de los n+1 tramos xi xi+1] con i = 0 ::: n. Cada cubica puede expresarse
como
si(x) = hi
;s0
i + s0
i+1 ;2ti
x ;xi
hi
3
+
3ti ;hi
;s0
i+1 + 2s0
i
x ;xi
hi
2
+ s0
i (x ;xi) + yi
donde hi = xi+1 ; xi, ti = yi+1 ; yi y s0i es la pendiente en el apoyo i-esimo.
Las unicas pendientes conocidas a priori son las de los dos apoyos extremos:
s00 = s0n+1 = 0. Las pendientes de los apoyos interiores se calculan imponiendo la
continuidad de la segunda derivada (curvatura) en dichos apoyos. Para cumplir
esta condicion, deben veri carselas siguientes relacionesentre las pendientes (para
i = 1 ::: n):
hi
hi + hi;1
s0
i;1 + 2s0
i + hi;1
hi + hi;1
s0
i+1 = 3 hi
hi + hi;1
hi
hi;1
ti;1 + hi;1
hi
ti
Estas n ecuaciones pueden escribirse como un sistema lineal de ecuaciones tri-
diagonal (es decir, en banda y con semianchos l = u = 1) de dimension n. Se
pide:
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 173
a) Justi car razonadamente que el sistema lineal puede resolverse mediante los
metodos de Gauss o de Crout sin necesidad de pivotar.
La particularizacion del metodo de Crout a matrices tridiagonales se denomina
metodo de Thomas. Puesto que no hay que pivotar, puede emplearse un esquema
de almacenamiento para matrices en banda (vease el subapartado 7.4.4).
b) Escribir el pseudocodigo del metodo de Thomas empleando una matriz rectan-
gular de n las y 3 columnas, que contiene la matriz tridiagonal al principio
y los factores L y U al nal.
c) En que orden se accede a los coe cientes r de la matriz R? Justi car
razonadamente que, teniendo en cuenta la paginacion, ser a preferible trabajar
con una matriz rectangular de 3 las y de n columnas (en lugar de n las y 3
columnas).
d) Escribir un programa en FORTRAN para resolver el sistema lineal tridiagonal
dado mediante el metodo de Thomas. El programadebe 1) emplear una matriz
rectangular de 3 las y n columnas, 2) tener estructura modular (subrutinas),
3) leer los datos (n y los puntos (xi yi), con i = 0 ::: n+1) de un archivo de
datos, y 4) escribir los resultados (las pendientes s01 s02 ::: s0n en los apoyos
interiores) en un archivo de resultados.
e) Utilizar el programa para resolver el caso con n = 7, x0 = 0, x1 = 5, x2 = 15,
x3 = 25, x4 = 40, x5 = 48, x6 = 55, x7 = 63, x8 = 73, y0 = 0, y1 = 0:5,
y2 = 6, y3 = ;1, y4 = 2, y5 = 1:75, y6 = 4, y7 = 0:5, y8 = 0. Dibujar el
trazado de la v a en una gra ca de Excel, teniendo en cuenta que en cada
tramo la funcion es una cubica distinta. Comentar los resultados obtenidos.
7.4.5 Almacenamiento en skyline
Algunos de los sistemas lineales de ecuaciones que se obtienen al resolver numericamente
problemas de ingenier a se caracterizan por presentar un ancho de banda muy importante
pero con muchos elementos nulos en su interior. A modo de ejemplo, en la gura 7.3 se
muestra una matriz de orden 7000 donde se han marcado en negro los terminos no nulos.
Como puede observarse, el semiancho de banda ser a muy grande (es de 1737) y aun cuando se
utilizara un almacenamiento en banda, se estar an guardando excesivos elementos (en realidad
se almacenar an (1737+ 1737+ 1) 7000 = 24 325 000 elementos).
El almacenamiento en skyline de una matriz se realiza:
1. En la parte triangular superior por columnas. Se guardan unicamente todos los elementos
comprendidos entre el primer termino no nulo y el termino de la diagonal.
2. En la parte triangular inferior por las. Se guardan unicamente todos los elementos com-
prendidos entre el primer termino no nulo y el termino de la diagonal.
Por ejemplo, en la gura 7.4 se han marcado en negro todos los elementos que se deben
guardar cuando la matriz de la gura 7.3 se almacena en skyline (el numero total de elementos
almacenados es 1 114 757, lo que representa un ahorro muy importante).
Como es usual, si la matriz es simetricasolose deben almacenarlos elementos de la triangular
superior o inferior. En adelante, tan solo se presentara el almacenamiento en skyline para
© Los autores, 1998; © Edicions UPC, 1998.
174 Metodos numericos
matrices triangulares superiores. Su extension a matrices no simetricas se deja como ejercicio
para el lector.
Una de las propiedades mas importantes de este tipo de almacenamiento consiste en que
los metodos directos de resolucion de sistemas lineales de ecuaciones conservan este tipo de
esquemas. Esto hace que el almacenamiento en skyline sea ampliamente utilizado.
Fig. 7.3 Elementos no nulos de una matriz
Fig. 7.4 Almacenamiento en skyline de la matriz mostrada en la gura 7.4
El almacenamiento de la matriz se realiza mediante dos vectores. El primero (vector c)
contiene los elementos de la matriz. Esta se guarda por columnas, y para cada de ellas (em-
pezando por la primera) se almacena desde el primer elemento no nulo hasta la diagonal. El
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 175
segundo (vector l) es un vector de punteros de n componentes, donde n es el orden de la matriz
del sistema. En la i-esima componente de este vector se almacena la posicion que ocupa el
elemento de la diagonal aii en el vector c. Por ejemplo, si la matriz del sistema es
A =
0
BBBBBBBBBBBBBBB@
a11 a13 a15
0 a22 a23 a25
...
... a33 a34 a35
...
... a44 a45 a47
...
... a55 a57
...
... a66 a67
...
... a77
...
... ...
1
CCCCCCCCCCCCCCCA
el vector c contiene los coe cientes
cT =(a11 a22 a13 a23 a33 a34 a44 a15 a25 a35 a45 a55 a66 a47 a57 a67 a77 :::)
mientras que los siete primeros elementos del vector de punteros, l, valen
lT =(1 2 5 7 12 13 17 ::: )
De las de niciones anteriores se desprende que el numero de elementos que se deben almacenar
en la columna j + 1 es
lj+1 ;lj
Dado un elemento generico de la matriz aij, este se almacena en una posicion k del vector c
que viene dada por
k = lj ; (j ;i)
Por el contrario, el algoritmo de recuperacion (conocido k encontrar i y j) puede expresarse
como
do 10 j=2,n
if (l(j).ge.k) goto 10
enddo
10 continue
i= j-(l(j)-k)
Problema 7.5:
Sea A una matriz simetrica y de nida positiva, almacenada en skyline (unica-
mente la triangular superior, gracias a la simetr a de A). El objetivo de este
problema es adaptar el metodo de Cholesky a este esquema de almacenamiento.
Para ello, se pide:
a) Comprobar, a partir del pseudocodigo del metodo de Cholesky dado en la
ecuacion 6.41, que la matriz triangular superior LT tiene el mismo skyline
que la parte superior de la matriz A (en consecuencia, LT puede almacenarse
sobre A, empleando el mismo esquema de almacenamiento en skyline).
b) Escribir el pseudocodigo del metodo de Cholesky adaptado a matrices en sky-
line.
© Los autores, 1998; © Edicions UPC, 1998.
176 Metodos numericos
7.4.6 Almacenamiento compacto
Una matriz A se denomina vac a si la mayor a de sus elementos son cero. Puede ocurrir,
ademas, que la disposicion de los elementos no nulos desaconseje el empleo de los esquemas de
almacenamiento vistos hasta ahora. Si, por ejemplo, la matriz A tiene elementos no nulos muy
alejados de la diagonal, el ancho de banda puede ser muy parecido al orden n de la matriz y el
esquema de almacenamiento en banda no permite ahorrar espacio de memoria.
En estos casos puede utilizarse un esquema de almacenamiento compacto, que consiste en
guardar unicamente los elementos de A distintos de cero.
Almacenamiento comprimido por filas
El almacenamiento comprimido por las es un metodo general para guardar matrices vac as,
que no hace ninguna hipotesis sobre la distribucion de los elementos no nulos. Sea el numero de
coe cientes no nulos de A. La idea es guardar estos elementos en un vector f de componentes,
recorriendo la matriz A por las. As , por ejemplo, para la matriz
A =
0
BBB@
8 0 0 3 0
2 7 0 0 1
0 1 9 0 6
0 0 ;4 5 0
0 4 0 0 ;6
1
CCCA = 12
el vector f es
fT = (8 3 2 7 1 1 9 6 ;4 5 4 ;6)
Desde luego, el vector f por s solo no basta para conocer la matriz A. Hace falta, ademas,
conocer la posicion de las componentes de f en la matriz A. Para ello, se utilizan dos vectores
mas: m (de componentes) y l (de n + 1 componentes). En m se almacenan los ndices de
columna j de los elementos del vector f. Es decir, si fk = aij, entonces mk = j. El vector l
contiene punteros que indican la posicion en f del primer elemento de cada la. Es decir, si
fk = aij, entonces li k  li+1. Por comodidad, se de ne ln+1 = + 1 (de esta forma, la
expresion tambien es valida para la ultima la).
Para la matriz A del ejemplo, el vector m es
mT = (1 4 1 2 5 2 3 5 3 4 2 5)
y el vector l es
lT = (1 3 6 9 11 13)
Por ejemplo, para k = 9 se obtiene f9 = ;4, m9 = 3 y l4 9  l5. Esto signi ca que el
coe ciente de la la 4 y la columna 3 de la matriz A vale ;4.
As pues, la matriz A se almacena mediante tres vectores: uno de numeros reales (en un
caso general), f, y dos de numeros enteros, m y l.
Es muy importante observar que los esquemas de almacenamiento compacto (como el que se
acaba de presentar) no pueden emplearse en la resolucion de un sistema lineal Ax = b mediante
metodos directos. Si el algoritmo de eliminacion gaussiana se aplica a la matriz A del ejemplo,
el coe ciente a(0)
24 = 0 se transforma en a(1)
24 6= 0 despues del primer paso (compruebese). Pero
en los vectores f, m y l no hay espacio para a(1)
24 , puesto que se han guardado unicamente los
elementos no nulos de la matriz A original.
© Los autores, 1998; © Edicions UPC, 1998.
7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 177
Producto de matriz por vector
En cambio, los esquemas de almacenamiento compacto son muy indicados si es necesario
emplear la matriz A como un operador lineal (es decir, para efectuar productos de matriz por
vector). Para ilustrarlo, se describe a continuacion el producto de una matriz vac a por un
vector mediante un algoritmo adaptado al almacenamiento comprimido por las. Sea y = Ax,
es decir,
yi =
nX
j=1
aijxj i = 1 ::: n
Dado que la matriz A es vac a, basta con efectuar los productos aijxj con aij 6= 0. Mediante
los vectores f, m y l, esto puede hacerse con las siguientes instrucciones FORTRAN:
do i=1,n
y(i) = 0.d0
do j=l(i),l(i+1)-1
y(i) = y(i) + f(j)*x(m(j))
enddo
enddo
Notese que, con la ayuda del vector l, en el bucle DO|ENDDO interior (en j) se recorren
solamente los elementos no nulos de la la i (almacenados en el vector f), y se multiplican por
las componentes correspondientes del vector x (detectadas mediante el vector m).
Problema 7.6:
El almacenamiento comprimido por columnas es un esquema para matrices vac as.
Igual que en el almacenamiento comprimido por las, una matriz A de orden n y
elementos no nulos se guarda en tres vectores: 1) un vector c, de componentes,
que contiene los coe cientes no nulos de A por columnas 2) un vector m, de
componentes, con los ndices de la de las componentes del vector c 3) un vector
l, de n + 1 componentes, que contiene punteros que indican la posicion en c del
primer elemento de cada columna de A. Se pide:
a) Cuales son los vectores c, m y l para la matriz con n = 5 y = 12 empleada
para ilustrar el almacenamiento comprimido por las?
b) Detallar el algoritmo de multiplicacion de una matriz A guardada segun un
almacenamiento comprimido por columnas y un vector x, y = Ax.
7.5 Bibliograf a
Borse G. J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e
ingenier a. Anaya, 1989.
Breuer, S. Zwas, G. Numerical Mathematics. A Laboratory Approach. Cambridge University
Press, 1993.
© Los autores, 1998; © Edicions UPC, 1998.
178 Metodos numericos
Ellis T.M.R. FORTRAN 77 Programming. Addison{Wesley Publishing Company, 1990.
Golub, G.H. Van Loan, C.F. Matrix Computations. Segunda edicion, The John Hopkins
University Press, 1990.
Stewart G.W. Afternotes on Numerical Analysis. Society for Industrial Applied Mathematics,
1996.
© Los autores, 1998; © Edicions UPC, 1998.
8 Aplicaciones al calculo integral 179
8 Aplicaciones al calculo integral
Objetivos
Describir dos tecnicas numericas para calcular integrales de nidas
R b
a f(x)dx: el
metodo de las aproximaciones rectangulares y la regla compuesta del trapecio.
Estudiar y comparar los dos metodos mediante algunos ejemplos numericos.
Presentar la extension para el calculo de volumenes.
8.1 Introduccion
En muchos problemas de ingenier a interesa calcular la integral de nida de la funcion f(x)
en el intervalo a b],
I =
Z b
a
f(x)dx (8:1)
Esta integral puede interpretarse como el area de la region limitada por la curva y = f(x) y las
rectas y = 0, x = a e x = b (vease la gura 8.1).
De manera mas rigurosa, la integral I puede de nirse a partir de las aproximaciones rectan-
gulares (superior e inferior). Para ello, se divide el intervalo a b] en n subintervalos iguales,
de longitud h = b;a
n , mediante los puntos x0 = a, x1 = a + h, x2 = a + 2h, :::, xi = a + ih,
:::, xn = b (vease la gura 8.2). A continuacion se construyen los rectangulos superior e
inferior para cada subintervalo xi xi+1].
© Los autores, 1998; © Edicions UPC, 1998.
180 Metodos numericos
Fig. 8.1 Interpretacion gra ca de la integral de nida
Supongase, para jar ideas, que la funcion f(x) es creciente en el intervalo a b], tal como
ocurre en la gura 8.2. En ese caso, la altura del rectangulo inferior es f(xi) (extremo izquierdo)
y la altura del rectangulo superior es f(xi+1) (extremo derecho).
La aproximacion rectangular inferior se de ne como la suma de las areas de todos los rec-
tangulos inferiores
Iinf(h) = hf(x0) + hf(x1) + ::: + hf(xn;1) = h
n;1X
i=0
f(xi) (8:2)
y, analogamente, la aproximacion rectangular superior es la suma de las areas de todos los
rectangulos superiores
Isup(h) = hf(x1) + hf(x2) + ::: + hf(xn) = h
n;1X
i=0
f(xi+1) (8:3)
En la gura 8.2 se ha supuesto que la funcion f es creciente. Si la funcion f fuera decreciente
en lugar de creciente, la altura del rectangulo inferior ser a f(xi+1) (extremo derecho) y la
altura del rectangulo superior ser a f(xi) (extremo izquierdo). En consecuencia, es necesario
intercambiar las de niciones de Iinf(h) e Isup(h) dadas en las ecuaciones 8.2 y 8.3, y tomar
Iinf(h) = h
n;1X
i=0
f(xi+1) Isup(h) = h
n;1X
i=0
f(xi)
© Los autores, 1998; © Edicions UPC, 1998.
8 Aplicaciones al calculo integral 181
Fig. 8.2a Aproximacion rectangular inferior
Fig. 8.2b Aproximacion rectangular superior
© Los autores, 1998; © Edicions UPC, 1998.
182 Metodos numericos
Por ultimo, si la funcion f no fuera monotona, ser a necesario determinar para cada subin-
tervalo xi xi+1] cual es la altura del rectangulo inferior y cual la del rectangulo superior, para
modi car adecuadamente las expresiones de Iinf(h) e Isup(h).
A partir de las ecuaciones 8.2 y 8.3, la integral de nida I se de ne como el l mite de las
aproximaciones rectangulares superior e inferior para h ! 0
I = limh!0
Iinf(h) = limh!0
Isup(h)
Notese que Iinf(h) e Isup(h) son, de hecho, las sumas inferior y superior que se utilizan en la
teor a de integracion de Riemann (asociadas a la particion del intervalo a b] que se muestra en
la gura 8.2).
8.2 El metodo de las aproximaciones rectangulares
En algunos casos, la integral I de la ecuacion 8.1 puede calcularse anal ticamente, obteniendo
una primitiva de la funcion f y evaluandola en los extremos del intervalo, a y b. En otros casos
de interes practico, sin embargo, es imposible (o muy farragoso) obtener una primitiva de f.
Se hace entonces necesario emplear una tecnica numerica para el calculo de la integral I.
Una primera posibilidad es trabajar directamente con las aproximaciones rectangulares em-
pleadas en el apartado anterior para la de nicion de I. En lugar de tomar el l mite para h ! 0,
se trabaja con h nito y se calcula Iinf(h) e Isup(h), a partir de las ecuaciones 8.2 y 8.3. Para
cualquier valor de h, el valor exacto de la integral, I, se halla comprendido entre Iinf(h) e
Isup(h):
Iinf(h)  I  Isup(h)
Ademas, a medida que se toma h cada vez mas peque~no, las aproximaciones Iinf(h) e
Isup(h) se parecen cada vez mas, y as se consigue atrapar el valor exacto I en un intervalo
Iinf(h) Isup(h)] tan peque~no como se quiera.
De hecho, la diferencia entre las aproximaciones rectangulares superior e inferior es una cota
del error absoluto cometido al aproximar la integral I. Teniendo en cuenta las ecuaciones 8.2 y
8.3, puede escribirse
E  Isup(h) ;Iinf(h) = h f(xn) ;f(x0) = h f(b) ;f(a) (8:4)
La ecuacion 8.4 indica que el metodo de las aproximaciones rectangulares es lineal, ya que el
error E es O(h): a medida que h tiende a cero, el error tiende linealmente a cero.
As pues, el metodo numerico de las aproximaciones rectangulares esta ntimamente rela-
cionado con la propia de nicion teorica de la integral de Riemann.
© Los autores, 1998; © Edicions UPC, 1998.
8 Aplicaciones al calculo integral 183
Como ejemplo de aplicacion, se procede a calcular numericamente la integral
R =2
0 sin(x)dx.
Desde luego, esta integral puede resolverse anal ticamente sin ninguna di cultad:
Z =2
0
sin(x)dx = ;cos(x)
=2
0
= 1 (8:5)
Se trata unicamente de un problema sencillo que se emplea para ilustrar el funcionamiento
del metodo. Se escribe un programa en FORTRAN que calcula esta integral (programa 8.1,
apartado 8.5). En la tabla 8.1 se muestra el valor de las aproximaciones rectangulares inferior
y superior para distintos valores de h.
Tabla 8.1 Calculo de
R =2
0 sin(x)dx por el metodo de las aproximaciones rectangulares
n h Iinf Isup
1 1.57080D+00 0.0000000 1.5707963
2 7.85398D-01 0.5553604 1.3407585
5 3.14159D-01 0.8346821 1.1488414
10 1.57080D-01 0.9194032 1.0764828
100 1.57080D-02 0.9921255 1.0078334
1000 1.57080D-03 0.9992144 1.0007852
10000 1.57080D-04 0.9999215 1.0000785
100000 1.57080D-05 0.9999921 1.0000079
1000000 1.57080D-06 0.9999992 1.0000008
10000000 1.57080D-07 0.9999999 1.0000001
Tal y como estaba previsto, la columna Iinf de la tabla 8.1 tiende al valor exacto I = 1 desde
abajo (es decir, con Iinf  1), mientras que la columna Isup tiende a I = 1 desde arriba (con
Isup  1). Es importante notar que el error decrece muy lentamente a medida que n aumenta
(trabajando con diez millones de subintervalos, se obtiene todav a un error relativo de 10;7).
Este fenomeno es debido a que el metodo de aproximaciones rectangulares es lineal (ecuacion
8.4).
8.3 El metodo compuesto del trapecio
En el apartado anterior se han utilizado dos aproximaciones rectangulares (una inferior y
una superior) del area comprendida entre y = f(x), y = 0, x = xi y x = xi+1. Intuitivamente,
parece mejor utilizar como aproximacion el area Ai del trapecio PQRS ( gura 8.3), que puede
calcularse como
Ai = hf(xi) + f(xi+1)
2
© Los autores, 1998; © Edicions UPC, 1998.
184 Metodos numericos
Fig. 8.3 Aproximacion mediante un trapecio
Fig. 8.4 El metodo compuesto del trapecio
© Los autores, 1998; © Edicions UPC, 1998.
8 Aplicaciones al calculo integral 185
El metodo compuesto del trapecio consiste en aproximar la integral I por la suma IT(h) de
las areas de todos los trapecios (vease la gura 8.4):
IT(h) = A0 +A1 +A2 +:::An;1 = h

f(x0)
2 +f(x1)+f(x2)+:::+f(xn;1)+ f(xn)
2
#
(8:6)
En la gura 8.4 puede verse que este metodo permite tratar funciones no monotonas de manera
directa, sin necesidad de distinguir entre los tramos crecientes y los tramos decrecientes.
Se puede demostrar que el error que se comete al aproximar la integral exacta I por IT
(ecuacion 8.6) es O(h2). Esto indica que el metodo compuesto del trapecio es cuadratico:
a medida que h tiende a cero, el error tiende cuadraticamente a cero. Para ver cual es la
implicacion practica de este resultado teorico, se utiliza el metodo compuesto del trapecio para
calcular numericamente la integral 8.5. Para ello se emplea el programa 8.2 (apartado 8.5). La
tabla 8.2 recoge el valor del IT(h) para distintos valores de h.
Tabla 8.2 Calculo de
R =2
0 sin(x)dx por el metodo compuesto del trapecio
n h IT
1 1.57080D+00 0.7853982
2 7.85398D-01 0.9480594
5 3.14159D-01 0.9917618
10 1.57080D-01 0.9979430
100 1.57080D-02 0.9999794
1000 1.57080D-03 0.9999998
10000 1.57080D-04 1.0000000
Comparando las tablas 8.1 y 8.2 queda claro que el metodo compuesto del trapecio tiende al
valor exacto I = 1 mucho mas rapidamente que el metodo de las aproximaciones rectangulares.
Para obtener ocho cifras correctas con el metodo del trapecio, por ejemplo, basta tomar diez
mil subintervalos. Esta mayor rapidez se debe a que el metodo compuesto del trapecio es
cuadratico, mientras que el metodo de las aproximaciones rectangulares es solamente lineal.
Problema 8.1: En este ejercicio se propone veri car experimentalmente el orden
de convergencia de las dos tecnicas numericas presentadas para el calculo de in-
tegrales de nidas: el metodo de las aproximaciones rectangulares (convergencia
lineal) y el metodo compuesto del trapecio (convergencia cuadratica).
a) Construir una tabla donde aparezca el error absoluto cometido al calcular
numericamente la integral de nida
R =2
0 sin(x)dx mediante las dos tecnicas
mencionadas, para los valores de n que aparecen en las tablas 8.1 y 8.2.
© Los autores, 1998; © Edicions UPC, 1998.
186 Metodos numericos
b) Para cada una de las dos tecnicas, representar el error absoluto E (calculado
a partir del valor exacto de la integral y de los resultados del apartado ante-
rior) en funcion del numero de subintervalos, n. Emplear una escala log-log
(logaritmo de E versus logaritmo de n).
c) Obtener una expresion teorica general (es decir, independiente de la integral
de nida que se esta calculando) de la relacion entre el logaritmo de E y el
logaritmo de n en los casos
1. Metodo lineal: E = O(h) = O(1
n)
2. Metodo cuadratico: E = O(h2) = O( 1
n2 )
donde h es el tama~no de los subintervalos.
d) Concuerda la expresion teorica del apartado c con las relaciones obtenidas
en el apartado b? Razonar adecuadamente la respuesta.
Problema 8.2: Un ingeniero esta proyectando una carretera, y necesita calcular
el volumen de movimiento de tierras en el tramo comprendido entre los puntos
kilometricos 1730 y 1810. Dispone para ello de per les transversales cada cinco
metros. En cada per l se han medido con un plan metro las areas de desmonte
AD y terraplen AT (vease la tabla adjunta).
Areas de desmonte y terraplen. Per les transversales cada 5 m
Punto Area Area
kilometrico (m) desmonte (m2) terraplen (m2)
1730 2.51 0.05
1735 1.32 0.61
1740 1.12 0.82
1745 0.85 0.95
1750 0.63 1.21
1755 0.05 1.35
1760 0.00 1.56
1765 0.00 2.58
1770 0.00 2.41
1775 0.25 2.21
1780 0.56 1.90
1785 0.85 1.50
1790 0.94 0.85
1795 1.57 0.34
1800 1.83 0.11
1805 2.61 0.00
1810 2.57 0.20
A partir de estos datos, los volumenes de desmonte VD y terraplen VT pueden
calcularse como
VD =
Z 1810
1730
AD(x)dx VT =
Z 1810
1730
AT (x)dx
© Los autores, 1998; © Edicions UPC, 1998.
8 Aplicaciones al calculo integral 187
Escribir un programa en FORTRAN que calcule, mediante el metodo compuesto
del trapecio: 1) el volumen de desmonte VD 2) el volumen de terraplen VT 3) el
balance de tierras (diferencia entre ambos volumenes). Los datos deben leerse de
un chero de datos, y los resultados deben escribirse por pantalla y en un chero
de resultados.
8.4 Extension al calculo de volumenes
En este apartado se generaliza el metodo compuesto del trapecio para el calculo de integrales
dobles del tipo
I =
Z b
a
Z d
c
f(x y)dxdy (8:7)
Esta integral puede interpretarse como el volumen de la region limitada por la super cie z =
f(x y) y los planos z = 0, x = a, x = b, y = c e y = d (vease la gura 8.5).
La integral 8.7 puede reescribirse como
I =
Z b
a

Z d
c
f(x y)dy
#
dx =
Z b
a
g(x)dx (8:8)
con
g(x) =
Z d
c
f(x y)dy (8:9)
A la vista de las ecuaciones 8.8 y 8.9, puede calcularse numericamente la integral I aplicando
dos veces el metodo compuesto del trapecio: una en direccion y y otra en direccion x. Se utiliza
para ello una cuadr cula de nm rectangulos, con pasos hx = b;a
n en direccion x y hy = d;c
m
en direccion y (vease la gura 8.6). Los nodos de esta cuadr cula son puntos (xi yj), con
xi = a+ ihx e yj = c + jhy.
Para un valor de x jo (x = xi), se calcula g(xi) (ecuacion 8.9), empleando el metodo
compuesto del trapecio en direccion y:
g(xi) = hy

f(xi y0)
2 + f(xi y1) + f(xi y2) + :::+ f(xi ym;1) + f(xi ym)
2
#
(8:10)
Una vez se ha calculado g(xi) para i = 0 ::: n segun la formula 8.10, se emplea el metodo
compuesto del trapecio en direccion x para evaluar I =
R b
a g(x)dx:
I =
Z b
a
g(x)dx = hx

g(x0)
2 + g(x1) + g(x2) + :::+ g(xn;1) + g(xn)
2
#
© Los autores, 1998; © Edicions UPC, 1998.
188 Metodos numericos
Fig. 8.5 Interpretacion gra ca de la integral doble
Fig. 8.6 Cuadr cula para el metodo compuesto del trapecio
© Los autores, 1998; © Edicions UPC, 1998.
8 Aplicaciones al calculo integral 189
8.5 Apendice
c
c Este programa calcula la integral de sin(x) entre 0 y pi/2
c por el metodo de las APROXIMACIONES RECTANGULARES
c___________________________________________________________________
implicit real*8 (a-h,o-z)
pi = 4.d0*atan(1.d0)
c___Numero n de subintervalos
write (6,100)
read (5,*) n
100 format (1x,'n= ')
c___Valor de h
h = 0.5d0*pi/dble(n)
c___Calculo de las aproximaciones inferior y superior
a_sup = 0.d0
x = 0.d0
c___Extremo izquierdo a=0
a_inf = dsin(x)
c___Puntos interiores
do 10 i = 1,n-1
x = x+h
a_inf = a_inf + dsin(x)
a_sup = a_sup + dsin(x)
10 continue
c___Extremo derecho b=pi/2
a_sup = a_sup + dsin(0.5d0*pi)
c___Factor comun h
a_inf = h*a_inf
a_sup = h*a_sup
c___Salida de resultados
write (6,200) n, h , a_inf , a_sup
200 format (1x,i8,1x,1pd12.5,1x,0pf10.7,1x,0pf10.7)
stop
end
Prog. 8.1 Metodo de las aproximaciones rectangulares
© Los autores, 1998; © Edicions UPC, 1998.
190 Metodos numericos
c
c Este programa calcula la integral de sin(x) entre 0 y pi/2
c por el METODO COMPUESTO DEL TRAPECIO
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
pi = 4.d0*atan(1.d0)
c___Numero n de subintervalos
write (6,100)
read (5,*) n
100 format (1x,'n= ')
c___Valor de h
h = 0.5d0*pi/dble(n)
c___Calculo de la aproximacion a_t
x = 0.d0
c___Extremo izquierdo a=0
a_t = 0.5d0*dsin(x)
c___Puntos interiores
do 10 i = 1,n-1
x = x+h
a_t = a_t + dsin(x)
10 continue
c___Extremo derecho b=pi/2
a_t = a_t + 0.5d0*dsin(0.5d0*pi)
c___Factor comun h
a_t = h*a_t
c_____Salida de resultados
write (6,200) n, h , a_t
200 format (1x,i8,1x,1pd12.5,1x,0pf10.7)
stop
end
Prog. 8.2 Metodo compuesto del trapecio
© Los autores, 1998; © Edicions UPC, 1998.
8 Aplicaciones al calculo integral 191
8.6 Bibliograf a
Borse, G.J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e
ingenier a. Anaya, 1989.
Breuer, S. Zwas, G. Numerical Mathematics. A Laboratory Approach. Cambridge Univer-
sity Press, 1993.
Chapra, S.C. Canale, R.P. Metodos numericos para ingenieros con aplicaciones en com-
putadores personales. McGraw-Hill, 1988.
Hoffman, J.D. Numerical Methods for Engineers and Scientists. McGraw-Hill, 1992.
© Los autores, 1998; © Edicions UPC, 1998.
9 Aplicaciones al calculo diferencial 193
9 Aplicaciones al calculo diferencial
Objetivos
Comentar algunos conceptos basicos sobre ecuaciones diferenciales ordinarias(EDOs):
expresion matematica de una EDO, condiciones iniciales, orden de una EDO, sistemas
de EDOs, reduccion de una EDO de orden n a un sistema de n EDOs de primer orden.
Describir dos tecnicas numericas para resolver sistemas de EDOs de primer orden:
metodo de Euler y metodo de Heun.
Estudiar ambos metodos mediante su aplicacion a algunos problemas de ingenier a.
9.1 Introduccion
9.1.1 Ecuacion diferencial ordinaria de primer orden
Una gran cantidad de problemas de la f sica y la ingenier a pueden modelarse matemati-
camente mediante ecuaciones diferenciales. Como problema modelo, considerese el caso mas
sencillo: una ecuacion diferencial ordinaria (EDO) de primer orden,
dy
dx(x) = f(x y) en x 2 a b] (9:1a)
complementada con la condicion inicial
y(a) = (9:1b)
La incognita del problema es la funcion y de una variable x, de nida en el intervalo a b]. La
funcion f(x y) y el escalar son datos. La ecuacion 9.1a es diferencial porque aparece la
© Los autores, 1998; © Edicions UPC, 1998.
194 Metodos numericos
derivada dy
dx de la funcion incognita y ordinaria porque solamente aparecen derivadas totales,
y no derivadas parciales de primer orden porque unicamente aparece la derivada primera, y no
derivadas de orden superior. Bajo ciertas condiciones de regularidad, el problema dado por las
ecuaciones 9.1a y 9.1b tiene solucion unica.
En ciertos casos, esta solucion puede hallarse anal ticamente de manera sencilla. Tomese,
por ejemplo,
dy
dx(x) = cy en x 2 0 1]
y(0) =
9
=
(9:2)
donde las constantes c e son conocidas. La solucion anal tica de la ecuacion 9.2 es
y(x) = exp(cx)
(verif quese). En otros muchos casos, sin embargo, la EDO no puede integrarse anal ticamente
y es necesario emplear alguna tecnica numerica.
9.1.2 Ecuaciones diferenciales ordinarias de orden superior a uno
Puede ocurrir que en la ecuacion diferencial aparezcan derivadas de y de orden superior a
uno. Considerese, por ejemplo, una EDO de orden n, que se escribe como
dny
dxn = f(x y dy
dx
d2
y
dx2
::: dn;1
y
dxn;1
) en x 2 a b] (9:3)
Esta EDO involucra a la funcion y y a sus n primeras derivadas, puesto que la derivada n-
esima depende, segun una funcion conocida f, de x, y y las n ; 1 primeras derivadas. Para
que el problema tenga solucion unica, son necesarias n condiciones adicionales sobre la funcion
incognita y. Estas condiciones adicionales se llaman condiciones iniciales si estan dadas en un
mismo punto del intervalo a b] o condiciones de contorno si estan dadas en mas de un punto
del intervalo a b].
Un caso habitual de condiciones iniciales es que la funcion y y sus n;1 primeras derivadas
tengan valores prescritos conocidos 0, 1, 2, :::, n;1 en el extremo a:
y(a) = 0
dy
dx(a) = 1
d2
y
dx2
(a) = 2 ::: dn;1
y
dxn;1
(a) = n;1 (9:4)
Si se complementa la EDO (ecuacion 9.3) con las condiciones iniciales (ecuacion 9.4), se ob-
tiene un problema de valor inicial: se tiene informacion sobre la funcion y en el punto x = a
(condiciones iniciales), y hay que integrar la EDO para hallar la evolucion de la funcion y (es
decir, su valor en todo el intervalo a b]).
Si, por el contrario, la EDO se complementa con condiciones de contorno, se tiene un
problema de contorno. Como ejemplo de condiciones de contorno, supongase que la funcion y
tiene su valor prescrito en n puntos del intervalo a b]. Los problemas de contorno, que no seran
tratados aqu , se resuelven numericamente transformandolos en problemas de valor inicial.
© Los autores, 1998; © Edicions UPC, 1998.
9 Aplicaciones al calculo diferencial 195
9.1.3 Reduccion de una EDO de orden n a un sistema de n EDOs de primer orden
Una EDO de orden n puede transformarse en un sistema de n EDOs (con n funciones
incognita), todas ellas de primer orden. Es decir, puede reducirse el orden de las derivadas a
costa de aumentar el numero de incognitas.
Esta transformacion es necesaria puesto que las tecnicas numericas para la resolucion de
EDOs (en particular, los dos metodos que se estudiaran en los apartados siguientes) estan
dise~nadas para resolver problemas de primer orden.
La idea basica de la transformacion es tratar expl citamente como funciones incognita a las
n;1 primeras derivadas de la funcion y. Se utiliza la notacion
y(i)
di;1
y
dxi;1
para i = 1 ::: n
con el convenio de que la derivada cero de la funcion es la propia funcion. Las n funciones y(i)
son, por lo tanto,
y(1) y
y(2)
dy
dx =
dy(1)
dx
y(3)
d2
y
dx2
=
dy(2)
dx
...
y(n)
dny
dxn =
dy(n;1)
dx
9
=

(9:5)
En las ecuaciones 9.5 se muestra tambien la relacion que existe entre las funciones y(i): la
derivada primera de y(i) es la siguiente funcion, y(i+1). Esta relacion es una consecuencia
inmediata de la de nicion de las y(i) como derivadas sucesivas de y.
Con ayuda de las ecuaciones 9.5, la EDO de orden n de la ecuacion 9.3 puede reescribirse
como
dy(n)
dx dx = f(x y(1) y(2) y(3) ::: y(n)) en x 2 a b] (9:6)
donde simplemente se ha hecho un cambio de notacion. Si se a~nade la ecuacion 9.6 a las
ecuaciones 9.5 (exceptuando la primera) y se transforman tambien las condiciones iniciales
© Los autores, 1998; © Edicions UPC, 1998.
196 Metodos numericos
(ecuacion 9.4), se obtiene
dy(1)
dx = y(2)
dy(2)
dx = y(3)
...
dy(n;1)
dx = y(n)
dy(n)
dx = f(x y(1) y(2) y(3) ::: y(n))
y(1)(a) = 0
y(2)(a) = 1
...
y(n)(a) = n;1
9
=

(9:7)
Se ha conseguido el objetivo perseguido: las ecuaciones 9.7 son un sistema de n EDOs (con n
funciones incognita, y(i) para i = 1 ::: n) de primer orden, puesto que solo aparecen derivadas
primeras de las y(i).
Para compactar las ecuaciones 9.7, puede emplearse notacion vectorial. Se de nen los vec-
tores y, f e de dimension n como
y =
8

:
y(1)
y(2)
...
y(n;1)
y(n)
9
=

f =
8

:
y(2)
y(3)
...
y(n)
f(x y(1) y(2) ::: y(n))
9
=

=
8

:
0
1
...
n;1)
9
=

(9:8)
Con estos vectores, el sistema de ecuaciones 9.7 puede ponerse nalmente como
dy
dx = f(x y) en x 2 a b]
y(a) =
9
=
(9:9)
Es importante notar que la ecuacion 9.9 es muy similar a la ecuacion 9.1. La unica diferencia
es que ahora se trabaja con vectores en lugar de con escalares. Esta similitud sera muy util en
los apartados siguientes. En primer lugar, se presentan el metodo de Euler (apartado 9.2) y el
metodo de Heun (apartado 9.3) para resolver una EDO de primer orden (ecuacion 9.1) luego
se hace la generalizacion a sistemas de n EDOs de primer orden (ecuacion 9.9), simplemente
cambiando y, f y por y, f e (apartado 9.4).
© Los autores, 1998; © Edicions UPC, 1998.
9 Aplicaciones al calculo diferencial 197
9.2 El metodo de Euler
El metodo de Euler se presenta mediante el problema modelo dado por la ecuacion 9.1.
El primer paso es dividir el intervalo a b] en m subintervalos de longitud h = b;a
m mediante
puntos xi, con i = 0 ::: m (vease la gura 9.1).
Fig. 9.1 Interpretacion gra ca del metodo de Euler
La ecuacion 9.1a debe veri carse para todos los puntos de a b]. Si se particulariza para un
punto xi de la discretizacion, resulta
dy
dx(xi) = f(xi yi) (9:10)
donde se emplea la notacion yi y(xi). La idea basica del metodo de Euler es aproximar la
derivada en el punto xi mediante un cociente incremental hacia adelante, utilizando los puntos
xi y xi+1:
dy
dx(xi) yi+1 ;yi
xi+1 ;xi
= yi+1 ;yi
h (9:11)
La ecuacion 9.11 puede interpretarse geometricamente como aproximar la recta tangente a la
funcion y en xi por la recta secante que pasa por los puntos (xi yi) y (xi+1 yi+1) (vease la
gura 9.2).
© Los autores, 1998; © Edicions UPC, 1998.
198 Metodos numericos
Fig. 9.2 Aproximacion secante a la recta tangente
Si el valor de la derivada en xi que aparece en la ecuacion 9.10 se sustituye por la aproxi-
macion dada por la ecuacion 9.11 se llega a
yi+1 ;yi
h f(xi yi)
de donde puede despejarse yi+1 como
yi+1 yi + hf(xi yi) (9:12)
El signo que aparece en la ecuacion 9.12 esta causado por la aproximacion efectuada
en la ecuacion 9.11. Para poder sustituirlo por un signo = es necesario trabajar con valores
aproximados Y de la funcion y, y escribir
Yi+1 = Yi + hf(xi Yi) (9:13)
La ecuacion 9.13 permite obtener Yi+1 (aproximacion a yi+1) a partir de Yi (aproximacion a
yi). Este esquema de avance, que debe inicializarse con la condicion inicial Y0 = , constituye
el metodo de Euler:
Y0 =
Yi+1 = Yi + hf(xi Yi) para i = 0 ::: m ;1
(9:14)
© Los autores, 1998; © Edicions UPC, 1998.
9 Aplicaciones al calculo diferencial 199
La interpretacion gra ca del metodo de Euler puede verse en la gura 9.1. A partir de los datos
x0 = a e Y0 = , se calcula f(x0 ), que es la pendiente de la tangente a la funcion y en x0. Se
avanza segun esta tangente una distancia h, hasta llegar al punto x1 se obtiene as el valor de
Y1. A partir de x1 e Y1 se evalua f(x1 Y1), que es una aproximacion a la pendiente f(x1 y1)
de la tangente a y en x1. Esta pendiente f(x1 Y1) permite avanzar hasta x2 y obtener Y2,
y as sucesivamente. De esta manera, la funcion incognita y se aproxima mediante una l nea
quebrada, llamada poligonal de Euler. En la gura 9.1 se aprecia claramente la diferencia entre
yi (valor exacto) e Yi (valor aproximado), que en general solo coinciden para i = 0 (condicion
inicial).
A continuacion se muestra un ejemplo de aplicacion del metodo de Euler. Se trata de un
problema sencillo con solucion anal tica, que servira de referencia para la solucion numerica
calculada con distintos valores del numero m de subintervalos.
Un pilar de hormigon de longitud L = 4 m debe resistir una carga P = 100 KN y su peso
propio (peso espec co del hormigon: = 25 KN=m3
). Para conseguir que la tension normal
sea uniforme, se proyecta un pilar de seccion transversal variable S(x), con seccion en la cabeza
del pilar de S0 = 0:07 m2
(vease la gura 9.3). Combinando algunas nociones de f sica y calculo
diferencial puede comprobarse (se deja como ejercicio al lector interesado) que la funcion S(x)
debe veri car
dS(x)
dx = S0
P S(x) en x 2 0 L]
con la condicion inicial
S(x0) = S0
Este problema es muy parecido al ejemplo de la ecuacion 9.2, tomando c = S0=P. La solucion
anal tica es, en consecuencia,
S(x) = S0 exp S0
P x (9:15)
Supongase que el objetivo es calcular la seccion en la base del pilar, S(x = L) con L = 4
m, a efectos de dise~nar la cimentacion. Sustituyendo los valores S0 = 0:07 m2
, = 25 KN=m3
,
P = 100 KN y x = 4 m en la ecuacion 9.15 se halla la solucion anal tica S(L) = 0:075076 m2
.
Con la ayuda de un programa en FORTRAN (programa 9.1, apartado 9.5), se resuelve
numericamente el problema mediante el metodo de Euler para distinto numero de subintervalos,
m. Se llega a los resultados de la tabla 9.1. Puede verse como el valor numerico de la seccion
de la base del pilar tiende al valor exacto a medida que m aumenta.
© Los autores, 1998; © Edicions UPC, 1998.
200 Metodos numericos
Fig. 9.3 Pilar de seccion variable S(x)
Tabla 9.1 Calculo de la seccion en la base del pilar mediante el metodo de Euler
m S(x = 4)
1 0.074900
2 0.074986
5 0.075039
10 0.075057
100 0.075074
1000 0.075075
10000 0.075076
© Los autores, 1998; © Edicions UPC, 1998.
9 Aplicaciones al calculo diferencial 201
9.3 El metodo de Heun
En el metodo de Euler que se acaba de presentar, el avance de la solucion se produce segun
una pendiente calculada al principio de cada paso, es decir, en el extremo izquierdo xi (vease la
ecuacion 9.13). Parece intuitivamente mejor tomar un valor mas representativo de la pendiente
media de la funcion y en todo el intervalo xi xi+1]. Esta es la estrategia utilizada por una
familia de metodos numericos para la resolucion de EDOs, entre los que se encuentra el metodo
de Heun.
Fig. 9.4 Interpretacion gra ca del metodo de Heun
En este metodo, la solucion avanza en cada paso segun el promedio de dos pendientes: la
pendiente en el punto inicial (xi Yi) y la pendiente en un punto nal auxiliar obtenido segun
el metodo de Euler, (xi+1 Yi+1), con Yi+1 = Yi + hf(xi Yi). En consecuencia, la formula de
© Los autores, 1998; © Edicions UPC, 1998.
202 Metodos numericos
avance es
Yi+1 = Yi + hf(xi Yi)
Yi+1 = Yi + h
2 f(xi Yi) + f(xi+1 Yi+1)
(9:16)
Junto con la condicion inicial Y0 = , esta formula proporciona el metodo de Heun:
Y0 =
Yi+1 = Yi + hf(xi Yi)
Yi+1 = Yi + h
2 f(xi Yi) + f(xi+1 Yi+1) para i = 0 ::: m ;1
(9:17)
La interpretacion gra ca del metodo de Heun se muestra en la gura 9.4 para un intervalo
generico xi xi+1]. Puede verse que el avance consta de tres fases: a) determinacion de la
pendiente f(xi Yi) al principio de paso y obtencion del valor auxiliar Yi+1 b) determinacion
de la pendiente f(xi+1 Yi+1) en el punto auxiliar c) avance de medio intervalo con cada una
de las pendientes y obtencion del valor nal Yi+1.
Si se emplea el metodo de Heun para resolver el problema del pilar ( gura 9.3) con distintos
valores de m (numero de subintervalos), se obtienen los resultados de la tabla 9.2.
Tabla 9.2 Calculo de la seccion en la base del pilar mediante el metodo de Heun
m S(x = 4)
1 0.075072
2 0.075075
5 0.075075
10 0.075076
Comparando las tablas 9.1 y 9.2, puede verse que el metodo de Heun tiene una convergencia
mucho mas rapida que el metodo de Euler.
Problema 9.1: En este ejercicio se propone investigarexperimentalmente el orden
de convergencia de los metodos de Euler y Heun, con ayuda del ejemplo del pilar
de hormigon ( gura 9.3).
a) Para cada uno de los metodos, calcular el error absoluto E en la seccion de
la base del pilar, para distintos valores de m (aprovechando y completando
los datos de las tablas 9.1 y 9.2).
b) Representar el error E en funcion de m, en escala log-log.
c) Cual es el orden de convergencia del metodo de Euler? Y del metodo de
Heun?
© Los autores, 1998; © Edicions UPC, 1998.
9 Aplicaciones al calculo diferencial 203
9.4 Extension a un sistema de EDOs de primer orden
Considerese ahora el caso de un sistema de n EDOs de primer orden (ecuacion 9.9):
dy
dx = f(x y) en x 2 a b]
y(a) =
9
=
Este sistema puede ser directamente el modelo matematico de un fenomeno f sico, o puede
provenir de la transformacion de una EDO de orden n, tal y como se ha comentado en el
subapartado 9.1.3.
Los metodos de Euler y de Heun pueden extenderse sin ninguna di cultad para tratar este
sistema. Se trata simplemente de sustituir los escalares , Y0, Yi, Yi+1 y f que aparecen en las
ecuaciones 9.14 y 9.17 por los vectores , Y0, Yi, Yi+1 y f. As , por ejemplo, para el metodo
de Euler se obtiene:
Y0 =
Yi+1 = Yi + hf(xi Yi) para i = 1 ::: n
(9:18)
Teniendo en cuenta la ecuacion 9.8, la ecuacion 9.18puede escribirse, componente a componente,
como
8

:
Y(1)(x0)
Y(2)(x0)
...
Y(n)(x0)
9
=

=
8

:
1
2
...
n
9
=

8

:
Y(1)(xi+1)
Y(2)(xi+1)
...
Y(n;1)(xi+1)
Y(n)(xi+1)
9
=

=
8

:
Y(1)(xi)
Y(2)(xi)
...
Y(n;1)(xi)
Y(n)(xi)
9
=

+ h
8

:
Y(2)(xi)
Y(3)(xi)
...
Y(n)(xi)
f(x Y(1)(xi) Y(2)(xi) ::: Y(n)(xi))
9
=

9
=

(9:19)
donde Y(j)(xi) es la aproximacion a y(j)(xi) (valor de la funcion y(j) en el punto xi).
Es importante darse cuenta de que en la ecuacion 9.19 se tratan todas las ecuaciones del
sistema de forma conjunta. Desde luego, ser a totalmente incorrecto intentar resolver el sistema
tratando las ecuaciones una a una, por separado, empleando el metodo de Euler para una EDO
visto en el apartado 9.2.
Problema 9.2: Generalizar el metodo de Heun (apartado 9.3) al caso de sistemas
de EDOs.
© Los autores, 1998; © Edicions UPC, 1998.
204 Metodos numericos
Problema 9.3: En el dise~no de una estacion depuradora de aguas residuales
es necesario estudiar una reaccion qu mica, donde las concentraciones yA e yB
de los reactivos A y B var an en el tiempo segun un sistema de dos ecuaciones
diferenciales ordinarias de primer orden
dyA
dt = ; yA yB
dyB
dt = ; yA y2
B
9
=

para t 2 0 1]
con condiciones iniciales yA(0) = yB(0) = 1 y siendo = 24 la constante
cinetica de la reaccion.
a) Escribir un programa en FORTRAN que resuelva el sistema de EDOs me-
diante el metodo de Euler y el metodo de Heun.
b) Resolver el problema mediante los dos metodos y para diferentes valores de
m (numero de subintervalos). Comentar los resultados obtenidos.
c) Para que valor del tiempo t el reactivo A ha reducido su concentracion a la
mitad de la concentracion inicial yA(0)?
9.5 Apendice
c
c Este programa resuelve la ecuacion diferencial ordinaria
c y'(x) = cy(x) para x en a,b]
c y(a) = y0
c por el METODO DE EULER
c Aplicacion: problema de la columna con tension uniforme
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
c___Carga vertical P
write (6,100)
read (5,*) p
100 format (1x,'P= ')
c___Peso especifico gamma
write (6,200)
read (5,*) gamma
200 format (1x,'gamma= ')
c___Longitud de la columna hlong
write (6,300)
read (5,*) hlong
300 format (1x,'longitud= ')
© Los autores, 1998; © Edicions UPC, 1998.
9 Aplicaciones al calculo diferencial 205
c___Seccion de la cabeza (extremo superior) de la columna
write (6,400)
read (5,*) s0
400 format (1x,'Seccion extremo superior= ')
c___Numero de intervalos m
write (6,500)
read (5,*) m
500 format (1x,'Numero de intervalos= ')
c___Calculos previos
c___Extremos a, b del intervalo
a = 0.d0
b = hlong
c___Parametro c de la EDO
c = gamma*s0/p
c___Paso h (discretizacion)
h = (b-a)/dble(m)
c___Metodo de Euler
c___Inicializacion
i = 0
x = a
y = s0
c___Bucle
do 10 i=1,m
f = c*y
y = y + h*f
x = x + h
10 continue
c___Salida de resultados
write (6,600) y
600 format (1x, 'La seccion en la base del pilar es=', d12.5)
stop
end
Prog. 9.1 Metodo de Euler
© Los autores, 1998; © Edicions UPC, 1998.
206 Metodos numericos
c
c Este programa resuelve la ecuacion diferencial ordinaria
c y'(x) = cy(x) para x en a,b]
c y(a) = y0
c por el METODO DE HEUN
c Aplicacion: problema de la columna con tension uniforme
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
.
.
.
c___Metodo de Heun
c___Inicializacion
i = 0
x = a
y = s0
c___Bucle
do 10 i=1,m
f = c*y
yaux = y + h*f
x = x + h
faux = c*yaux
y = y + 0.5d0*h*(f+faux)
10 continue
.
.
.
stop
end
Prog. 9.2 Metodo de Heun
Las unicas diferencias entre los programas 9.1 y 9.2 se encuentran en el interior del bucle,
dado que es precisamente aqu donde se aplica la de nicion del metodo de resolucion escogido.
La lectura de datos, la inicializacion de las variables y la escritura de resultados, sustituidos
por puntos suspensivos en el listado del programa 9.2, pueden realizarse de la misma manera
en ambos programas.
© Los autores, 1998; © Edicions UPC, 1998.
9 Aplicaciones al calculo diferencial 207
9.6 Bibliograf a
Borse, G.J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e
ingenier a. Anaya, 1989.
Chapra, S.C. Canale, R.P. Metodos numericos para ingenieros con aplicaciones en com-
putadores personales. McGraw-Hill, 1988.
Hoffman, J.D. Numerical Methods for Engineers and Scientists. McGraw-Hill, 1992.
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 209
10 Resolucion de los problemas propuestos
Objetivos
Comentar los aspectos mas interesantes de los problemas propuestos.
Proporcionar al lector el resultado numerico de los problemas.
10.1 Problemas del cap tulo 2
Problema 2.1
Para conseguir que en la columna C de la hoja de calculo aparezcan las ordenadas de la
funcion y = 3x2 ;2x;3 basta con realizar dos de los pasos descritos en el apartado 2.6.
Fig. 2.1.1 Evaluacion de la funcion y = 3x2 ;2x;3
© Los autores, 1998; © Edicions UPC, 1998.
210 Metodos numericos
1. En primer lugar es necesario introducir en la casilla C2 la formula correspondiente a la
mencionada funcion segun se puede observar en la gura 2.1.1.
2. A continuacion, debe arrastrarse dicha formula en sentido vertical tantas casillas como
abscisas (en este caso 3) se tengan.
Problema 2.2
En este caso, partiendo de los resultados del problema anterior, se trata de modi car el
rango de las abscisas para que las funciones y = 2x + 4 e y = 3x2 ;2x ;3 queden de nidas
en el intervalo -2,2].
En primer lugar, conviene borrar (empleando, por ejemplo, la seleccion de casillas y la
tecla suprimir) los calculos de las celdas B3, B4, C3 y C4. A continuacion, puede introducirse
como valor constante el escalar -2 en la casilla A2 que indica el extremo inferior del intervalo.
Automaticamente, los valores de las casillas B2 y C2 cambiaran a los valores correctos, esto es
0 y 13, segun se puede apreciar en la gura 2.2.1.
La mas sencilla de las posibilidades para de nir la serie de abscisas creciente de 0.5 en 0.5 a
partir de -2 consiste en programar en la casilla B3 la formula que se muestra en la gura 2.2.1
( = A2 + 0,5 ) y a continuacion arrastrar dicha celda en sentido descendente hasta alcanzar
el extremo superior del intervalo. Desgraciadamente, no se trata de un proceso automatico,
en el sentido de que el usuario debe decidir el numero de casillas que arrastra (hasta llegar al
extremo superior del intervalo, 2).
Fig. 2.2.1 Programacion de las abscisas
Finalmente, bastar a con arrastrar las casillas B2 y C2 en sentido descendente para conseguir
el recalculo de las ordenadas correspondientes a ambas funciones. El resultado se puede observar
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 211
en la gura 2.2.2.
Fig. 2.2.2 Evaluacion de las funciones y = 2x+ 4 e y = 3x2 ;2x ;3
Problema 2.3
Para construir la tabla de multiplicar, se comenzara programando por ejemplo en la la 3
y en la columna B los valores de los argumentos que se deben multiplicar. Para ello se puede
emplear lo aprendido en el problema 2.2. As , las casillas C3 y B4 deberan contener los valores
iniciales de ambas series de datos, 2 en ambos casos.
Seguidamente, debera introducirse en la casilla D3 la formula = C3 + 2 y arrastrarla en
sentido horizontal hasta alcanzar la columna G. De la misma manera, la celda B5 debera contener
la formula = B4 + 1, que sera arrastrada en sentido vertical hasta la la 23, segun consta en
la gura 2.3.1.
Finalmente, queda por escribir la formula de multiplicacion. Una de las posibilidades con-
siste en programar en la casilla C4 la expresion = $B4 * C$3. El bloqueo alternativo de las
las para el primer argumento (el que esta a lo largo de la columna B) y de las columnas
para el segundo argumento (el que esta situado a lo largo de la la 3) permite que esta unica
formula arrastrada en sentido horizontal y vertical proporcione el resultado correcto para todas
las casillas, de manera que resulta innecesaria la introduccion de ninguna otra formula.
© Los autores, 1998; © Edicions UPC, 1998.
212 Metodos numericos
Fig. 2.3.1 Tabla de multiplicar
En la gura 2.3.1 se muestra la expresion a introducir en la celda C4 para confeccionar las
tablas de multiplicacion.
Problema 2.4
A partir de la hoja de calculo obtenida en el problema 2.3 basta invocar al Asistente para
gra cos para obtener el dibujo deseado y estimar los puntos de corte.
Los resultados pueden apreciarse en la gura 2.4.1. En ella se observa como uno de los dos
puntos de corte entre la recta y = 2x + 4 y la parabola y = 3x2 ;2x ;3 es x = ;1, mientras
que el otro queda fuera del rango de de nicion del dibujo.
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 213
Ello puede solventarse ampliando el dominio de x y modi cando posteriormente el area de
dibujo, con lo que se obtiene el segundo punto de corte, x = 2:33.
Fig. 2.4.1 Representacion gra ca de las funciones y = 2x+4 e y = 3x2 ;2x;3
Problema 2.5
Las instrucciones necesarias para confeccionar la hoja de calculo se encuentran su ciente-
mente detalladas a lo largo de la explicacion del problema, si bien en algun caso puede resultar
conveniente complementar las citadas indicaciones con las que puede proporcionar el Asistente
de funciones de Excel. Para conocer el signi cado y uso concreto de algunas de las funciones
que aqu se usan basta con emplear la opcion Insertar{Funcion que se encuentra bajo el menu
desplegable Insertar. Los formatos de las celdas en que aparecen expresiones porcentuales o
monetarias se obtienen modi cando el formato original de presentacion de los numeros. Ello se
consigue empleando la opcion Formato{Celdas{Numero del menu desplegable Formato.
Con respecto a la pregunta nal acerca de si esta bien calculada la ultima cuota que se debe
pagar, la respuesta es que no. Ello se debe al hecho de que esta cuota ha sido calculada en la
casilla B8 empleando la funcion redondear. De esta manera se produce un desfase entre el total
teorico que hay que devolver y el real devuelto. Para comprobarlo, basta evaluar la formula
de la casilla B8 (Cuota) sin emplear la funcion redondear. En ese caso, la cuota mensual que
© Los autores, 1998; © Edicions UPC, 1998.
214 Metodos numericos
hay pagar es de 70 260.47 pesetas, lo que al cabo de 24 mensualidades representan un total
de 1 686 251.35 pesetas. En consecuencia, la diferencia con respecto a la casilla E8 (Total a
pagar) asciende a poco mas de 11 pesetas a favor del banco, que deber an ser abonadas en el
ultimo pago {con lo que este pasar a a ser de 70 271 pesetas{ posibilitando la total extincion del
credito. En la gura 2.5.1 se pueden apreciar las formulas introducidas en las diversas casillas
de la hoja de calculo para obtener los mencionados resultados.
Fig. 2.5.1 Formulas para el calculo de las tasas de amortizacion de un credito
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 215
10.2 Problemas del cap tulo 3
Problema 3.1
Al ejecutar el programa se obtiene que las dos variables valen 0. Este resultado implica que
al realizar una division entre variables enteras y almacenar el resultado en otra variable entera,
el FORTRAN escoge la parte entera del cociente (es decir, no redondea al entero mas cercano).
Problema 3.2
En la sentencia OPEN el archivo de resultados RESUL.RES se abre con STATUS='NEW'. Al
ejecutar el programa 3.7 por segunda vez, el archivo RESUL.RES ya existe y se produce un error.
Existen varias maneras de evitar este error. La mas sencilla consiste en renombrar o borrar
el archivo de resultados generado durante la primera ejecucion antes de ejecutar el programa
por segunda vez. Una alternativa es declarar el chero RESUL.RES con STATUS='UNKNOWN'.
De esta forma, si el chero no existe el programa lo crea, y si ya existe escribe encima de la
informacion ya existente esto quiere decir que solo se conservan los resultados correspondientes
a la ultima ejecucion del programa y que, por lo tanto, se pierden los resultados de las anteriores
ejecuciones.
Problema 3.3
El programa 3.3.1 resuelve las cuestiones planteadas de una forma concisa y sistematica. La
justi cacion teorica de los algoritmos utilizados para cada una de las cuestiones se describe a
continuacion. Sea una circunferencia de radio r entero. Si (i j) es un punto perteneciente a
dicha circunferencia, entonces se veri can simultaneamente las condiciones siguientes:
i r (3:3:1)
j r (3:3:2)
i2
+ j2
= r2
(3:3:3)
Para identi car todos los puntos de coordenadas enteras que pertenecen a la circunferencia, se
empieza por recorrer todos los puntos de coordenadas enteras que veri can simultaneamente
las condiciones 3.3.1 y 3.3.2. Para cada uno de estos puntos se evalua la expresion i2 +j2 si se
veri ca la igualdad 3.3.3, entonces se tiene tambien que
(;i)2
+ j2
= r2
i2
+ (;j)2
= r2
(;i)2
+ (;j)2
= r2
es decir, que los puntos (;i j), (i ;j) y (;i ;j) tambien satisfacen la condicion de pertenencia
a la circunferencia. Es interesantenotar que, dado el punto de coordenadas(i j), el punto (;i j)
se obtiene por simetr a del anterior respecto al eje de ordenadas, el punto (i ;j) se obtiene
por simetr a respecto al eje de abscisas y el punto (;i ;j) es el simetrico del (i j) respecto al
origen.
© Los autores, 1998; © Edicions UPC, 1998.
216 Metodos numericos
Para obtener los puntos interiores a la circunferencia, se procede del mismo modo pero
sustituyendo la condicion 3.3.3 por la siguiente:
i2
+ j2
r2
(3:3:4)
A nivel de programacion, es interesante notar la existencia de bucles DO-ENDDO anidados, que
se utilizan para recorrer todos los puntos (i j) que sean candidatos a solucion.
Por lo que respecta a la escritura de los resultados, se pueden observar dos procedimientos
distintos. Por una parte, las coordenadas de cada uno de los puntos se escriben en pantalla
mediante varias sentencias WRITE diferentes cada sentencia WRITE produce la escritura de un
punto, mas un salto de l nea. En cambio, cuando se accede al archivo de resultados se escriben
todos los puntos de una vez, utilizando una sola sentencia WRITE en este caso, el salto de l nea
se controla mediante la instruccion FORMAT correspondiente.
c
c Este programa detecta los puntos con coordenadas
c enteras: 1) sobre una circunferencia
c 2) en el interior de una circunferencia
c___________________________________________________________________
c___Introduccion del valor del radio
10 write (6,*) ' Valor del radio : '
read (5,*) nrad
if ((nrad.le.0) .or. (nrad.gt.100)) goto 10
nrad2 = nrad*nrad
c___Apertura del archivo de resultados
open (unit=20,file='circunferencia.res',status='unknown')
c___Obtencion de puntos sobre la circunferencia
write (6,*) ' Puntos sobre la circunferencia '
write (6,*)
write (20,*) ' Puntos sobre la circunferencia '
write (20,*)
do i=0,nrad
do j=0,nrad
if ( (i*i+j*j) .eq. nrad2) then
write (6,*) ' '
write (6,100) i, j
write (6,100) i,-j
write (6,100) -i, j
write (6,100) -i,-j
write (20,200) i, j, i,-j, -i, j, -i,-j
endif
enddo
enddo
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 217
write (6,*)
c___Obtencion de puntos interiores a la circunferencia
write (6,*) ' Puntos interiores a la circunferencia '
write (6,*)
write (20,*) ' Puntos interiores a la circunferencia '
write (20,*)
do i=0,nrad
do j=0,nrad
if ( (i*i+j*j) .lt. nrad2) then
write (6,*) ' '
write (6,100) i, j
write (6,100) i,-j
write (6,100) -i, j
write (6,100) -i,-j
write (20,200) i, j, i,-j, -i, j, -i,-j
endif
enddo
enddo
close (20)
100 format (5x,'El punto es : (',i4,',',i4,')')
200 format (4(5x,'El punto es : (',i4,',',i4,')'/))
stop
end
Prog. 3.3.1 Puntos de coordenadas enteras en una circunferencia
En la tabla 3.3.1 se presenta el chero de resultados CIRCUNFERENCIA.RES obtenido para
r = 2. Se puede observar que los puntos que tienen una coordenada nula aparecen dos veces, y
que el centro de la circunferencia (que tiene ambas coordenadas nulas) aparece cuatro veces. La
justi cacion de este fenomeno se expone a continuacion. Sea (a 0) un punto de la circunferencia.
El programa realiza tres simetr as de este punto para obtener tres nuevos puntos de la circun-
ferencia en este caso, dichas simetr as dan por resultados los puntos de coordenadas (;a 0),
(a ;0) y (;a ;0). As pues, el numero total de puntos diferentes detectados no es cuatro sino
dos, ya que (a 0) (a ;0) y (;a 0) (;a ;0). Para puntos del tipo (0 b) (pertenecientes
al eje de ordenadas), la situacion es analoga. Finalmente, cuando a = b = 0, es decir, cuando
el punto detectado es el origen de coordenadas, las tres simetr as dan por resultado el punto
original (0 0). Por lo que respecta a la deteccion de puntos interiores a la circunferencia, se
aplican los mismos razonamientos.
© Los autores, 1998; © Edicions UPC, 1998.
218 Metodos numericos
Tabla 3.3.1 Fichero de resultados para r = 2
Puntos sobre la circunferencia
El punto es : ( 0, 2)
El punto es : ( 0, -2)
El punto es : ( 0, 2)
El punto es : ( 0, -2)
El punto es : ( 2, 0)
El punto es : ( 2, 0)
El punto es : ( -2, 0)
El punto es : ( -2, 0)
Puntos interiores a la circunferencia
El punto es : ( 0, 0)
El punto es : ( 0, 0)
El punto es : ( 0, 0)
El punto es : ( 0, 0)
El punto es : ( 0, 1)
El punto es : ( 0, -1)
El punto es : ( 0, 1)
El punto es : ( 0, -1)
El punto es : ( 1, 0)
El punto es : ( 1, 0)
El punto es : ( -1, 0)
El punto es : ( -1, 0)
El punto es : ( 1, 1)
El punto es : ( 1, -1)
El punto es : ( -1, 1)
El punto es : ( -1, -1)
Problema 3.4
El programa 3.4.1 permite evaluar un polinomio p4(x) mediante la regla de Horner. Cabe
comentar dos aspectos. Por una parte, los calculos se realizan en simple precision, puesto que no
se declara expl citamente ninguna variable. Conviene notar que la variable entera I se convierte
al formato REAL*4 a la hora de realizar con ella operaciones aritmeticas que involucren variables
reales esta conversion se lleva a cabo mediante la instruccion FLOAT. Por otra parte, mediante
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 219
la variable INTER el usuario puede seleccionar el numero de intervalos (y, por tanto, el numero
de puntos) en los que se evaluara el polinomio.
c
c Evaluacion de un polinomio mediante la REGLA DE HORNER
c___________________________________________________________________
c___Entrada del los datos
write (6,*) ' Introduce el limite inferior : '
read (5,*) x_inf
write (6,*) ' Introduce el limite superior : '
read (5,*) x_sup
write (6,*) ' Introduce el numero de intervalos : '
read (5,*) inter
c___Calculo del paso
deltax = (x_sup - x_inf) / float(inter)
c___Apertura del archivo de resultados
open (unit=20,file='horner.res',status='unknown')
c___Cabecera del archivo
write (20,50) 'X','P4(X)'
write (20,50) '===========','==========='
c___Evaluacion del polinomio
do i=0,inter
x = x_inf + float(i)*deltax
y= (( (2.0*x + 20.0)*x + 70.0)*x + 100.0)*x + 48.0
write (20,100) x, y
enddo
close (20)
50 format (2x,A15,3x,A15)
100 format (2x,f15.7,3x,f15.7)
stop
end
Prog. 3.4.1 Evaluacion de un polinomio mediante la regla de Horner
En la tabla 3.4.1 se presenta el archivo de resultados HORNER.RES,producido por el programa
3.4.1 al evaluar el polinomio p4(x) = 2x4 ; 20x3 + 70x2 ; 100x + 48 mediante la regla de
© Los autores, 1998; © Edicions UPC, 1998.
220 Metodos numericos
Horner con INTER = 6 (pasos de x = 0:5).
Tabla 3.4.1 Resultados obtenidos para INTER = 6
X P4(X)
=========== ===========
-4.0000000 0.0000000
-3.5000000 -1.8750000
-3.0000000 0.0000000
-2.5000000 1.1250000
-2.0000000 0.0000000
-1.5000000 -1.8750000
-1.0000000 0.0000000
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 221
10.3 Problemas del cap tulo 4
Problema 4.1
Apartado a)
En el apartado 4.2.1 se ha detallado el almacenamiento de los numeros enteros en un orde-
nador cuando se reserva un bit para el signo. Sin embargo, en las variables unsigned no se debe
reservar dicha posicion porque el numero siempre sera positivo. A continuacion se calculara
cual es el mayor y menor numero entero cuando este se representa en sistema binario mediante
S posiciones (ver gura 4.1.1).
Fig. 4.1.1 Representacion de un numero unsigned integer mediante S posiciones
De acuerdo con la expresion 4.1 la representacion es
dS-1 dS-2 ::: d2 d1 d0
2
= dS-12S-1 + dS-22S-2 + ::: + d222 + d121 + d020
En estas condiciones, el numero entero maximo (en valor absoluto) que se puede almacenar es
(ver gura 4.1.2)
Fig. 4.1.2 unsigned integer maximo
y su valor es
Nmax = 1 2S-1 + 1 2S-2 + ::: + 1 22 + 1 21 + 1 20 = 1 1 ; 2S
1 ; 2 = 2S ; 1
Del mismo modo, la gura 4.1.3 muestra el almacenamiento del numero entero no nulo mas
proximo a cero. Su valor es logicamente el mismo que para las variables INTEGER de FORTRAN
(ver expresion 4.3)
Nm{n = 1 20 = 1
© Los autores, 1998; © Edicions UPC, 1998.
222 Metodos numericos
Fig. 4.1.3 unsigned integer no nulo m nimo
Observese que, evidentemente, el numero mayor que se puede almacenar con S posiciones
de memoria sin incluir el signo es el mismo que el numero mayor que se puede almacenar con
S + 1 posiciones incluyendo el signo. Ya que, en ambos casos, el numero de posiciones que
almacenan d gitos (sin el signo) es S. La formula del numero maximo se podr a haber deducido
de la expresion 4.2 del apartado 4.2.1 simplemente sustituyendo S por S + 1.
Apartado b)
El mayor unsigned integer de 16 bits es (S = 16)
Nmax = 216
; 1 = 65535
El mayor unsigned integer de 32 bits es (S = 32)
Nmax = 232
; 1 = 4294967295
El mayor INTEGER*4 del lenguaje FORTRAN es (substituir S = 32 en la expresion 4.2)
Nmax = 232;1
; 1 = 2147483647
Por lo tanto, el unsigned integer de 32 bits permite almacenar el mayor numero entero.
Apartado c)
A partir de los resultados del apartado anterior es facil comprobar que solo el unsigned
integer de 32 bits permite almacenar el numero k = 3125587976. En cambio, ninguno de los
tres tipos de variables enteras permite almacenar el numero , puesto que se trata de un numero
real no entero.
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 223
Problema 4.2
El pseudocodigo correspondiente a la resolucion de una ecuacion de segundo grado es
1. Entrar a, b y c
2. dis = b2 - 4ac
3. Si dis 0 entonces
x1 = (-b +
p
dis) / (2a)
x2 = (-b -
p
dis) / (2a)
Escribir x1 y x2
Si no
z1 = (cmplx(-b) +
pcmplx(dis)) / cmplx(2a)
z2 = (cmplx(-b) -
pcmplx(dis)) / cmplx(2a)
Escribir z1 y z2
Fin de si
4. Parar
La gura 4.2.1 muestra el diagrama de ujo correspondiente al algoritmo de Euclides para
determinar el maximo comun divisor de m y n.
Problema 4.3
Apartado a)
Tras la inicializacion de las variables (que permite la entrada en el bucle), dentro del bucle
de iteraciones la variable a toma por valor las sucesivas potencias de 2, a = (1=2)i. El valor
del contador i se incrementa en cada iteracion y se calcula la potencia de 1=2 correspondiente
multiplicando la potencia del paso anterior por half = 1=2, a = (1=2)i = (1=2)i;1 (1=2), con
la instruccion a a*half. Por lo tanto, durante las iteraciones la variable b toma los valores
b = 1 + a = 1 + (1=2)i para los distintos valores de la variable i.
El bucle sigue iterando mientras se cumple la condicion b  1. En consecuencia, solo se
podra salir del bucle en el momento en que b = 1 + a se confunda con 1. As , cuando se
sale del bucle, la variable a contiene la primera potencia de 1=2 menor que la precision de las
variables con que se trabaja. Es decir, el primer termino del sumatorio que no va a afectar a la
suma total Sn. Por lo tanto, una vez fuera del bucle, la precision de las variables utilizadas se
puede calcular como 2*a o (1=2)i;1 (los valores de la iteracion anterior, que todav a cumpl an
la condicion).
Es importante observar que con este algoritmo se puede calcular la precision de las variables
que se utilizan. No se debe confundir con el numero m nimo almacenable. Cuando se sale del
bucle la variable a tiene un valor menor que la precision (1+a se confunde con 1) pero todav a
© Los autores, 1998; © Edicions UPC, 1998.
224 Metodos numericos
se mantiene por encima del numero m nimo almacenable (a no se confunde con 0 y tiene sentido
calcular 2*a para obtener el valor de la precision).
Fig. 4.2.1 Diagrama de ujo correspondiente al algoritmo de Euclides
Apartado b)
El programa 4.3.1 presenta el codigo correspondiente al algoritmo planteado, tanto en simple
como en doble precision.
En este programa se ha introducido la sentencia DO WHILE. Su sintaxis es
DO WHILE ( condicion )
bloque
ENDDO
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 225
c
c Evaluacion de la precision de la maquina
c___________________________________________________________________
implicit real*4 (a-h)
implicit real*8 (o-z)
c___Resolucion del problema utilizando variables REAL*4
a = 1.e0
b = 2.e0
half=0.5e0
i = 0
do while (b .gt. 1.e0)
a = a * half
i = i + 1
b = 1.e0 + a
enddo
write(6,*) ' '
write(6,*) ' RESULTADOS CALCULADOS CON VARIABLES REAL*4 '
write(6,*) ' mantisa =',i-1
write(6,*) ' precision =',2.e0**(1-i),2.e0*a
c___Resolucion del problema utilizando variables REAL*8
x = 1.d0
y = 2.d0
zhalf=0.5d0
i = 0
do while (y .gt. 1.d0)
x = x * zhalf
i = i + 1
y = 1.d0 + x
enddo
write(6,*) ' '
write(6,*) ' RESULTADOS CALCULADOS CON VARIABLES REAL*8 '
write(*,*) ' mantisa =',i-1
write(*,*) ' precision =',2.d0**(1-i),2.d0*x
stop
end
Prog. 4.3.1 Calculo de la precision mediante las potencias negativas del numero 2
y se interpreta como: ejecutar reiteradamente el bloque de sentencias que hay entre la sentencia
DO WHILE y la sentencia ENDDO mientras la condicion sea verdadera. Por lo tanto, mientras
(b.gt.1.e0) o (y.gt.1.d0) se multiplica a por half, se incrementa i en 1 y se actualiza el
© Los autores, 1998; © Edicions UPC, 1998.
226 Metodos numericos
valor de b.
En la tabla 4.3.1 se presentan los resultados obtenidos al ejecutar el programa en un orde-
nador personal. Los resultados obtenidos concuerdan con lo expuesto en el cap tulo 4 (apartado
4.4.1).
Tabla 4.3.1 Resultados correspondientes al calculo de las potencias negativas del numero 2
RESULTADOS CALCULADOS CON VARIABLES REAL*4
mantisa = 23
precision = 1.1920929E-07 1.1920929E-07
RESULTADOS CALCULADOS CON VARIABLES REAL*8
mantisa = 52
precision = 2.2204460492503131E-16 2.2204460492503131E-16
Problema 4.4
Apartado a)
La gura 4.4.1 muestra el diagrama de las operaciones que deben realizarse para calcular el
per metro de la elipse. As mismo, tambien se han numerado los resultados parciales y se han
incluido los coe cientes que afectan a cada operacion. El error en cada una de las operaciones
es
R1 = ra + ra + r1 = 2ra + r1
R2 = rb + rb + r2 = 2rb + r2
R3 = a2
a2 + b2
R1 + b2
a2 + b2
R2 + r3
R4 = R3 ; ~r2 + r4
R5 = 1
2R3 + r5
R6 = ~r2 + r + r6
R7 = R5 + R6 + r7
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 227
Fig. 4.4.1 Propagacion del error en el calculo del per metro de la elipse
donde r1, r2, r3, r4, r5, r6 y r7 representan el error de almacenamiento de cada una de las
operaciones intermedias. En el resultado anterior hay que comentar dos resultados. Por una
parte, el error de almacenamiento del numero 2, ~r2, es nulo, puesto que se trata de un numero
entero. Por otra, el coe ciente de propagacion del error debido a la ra z cuadrada, f(x) =
px,
queda determinado por la expresion 4.15 del subapartado 4.5.6
rpx = x f0(x)
f(x) rx = x 1=(2
px)px rx = 1
2rx
Si los errores inherentes se designan por ri y los errores de almacenamiento por ra, la expresion
© Los autores, 1998; © Edicions UPC, 1998.
228 Metodos numericos
del error relativo en P es
R7 = 1
2
h a2
a2 + b2 (2ra + r1) + b2
a2 + b2 (2rb + r2) + r3
i
+ r + 1
2r4 + r5 + r6 + r7
= 1
2
h a2
a2 + b2 (2(ri
a + ra
a) + r1) + b2
a2 + b2 (2(ri
b + ra
b) + r2) + r3
i
+ r + 1
2r4 + r5 + r6 + r7
Apartado b)
La cota del error del resultado nal es
jR7j 1
2
h a2
a2 + b2
(2(jri
aj+ jra
aj) + jr1j) + b2
a2 + b2
(2(jri
bj+ jra
bj) + jr2j) + jr3j
i
+ jr j + 1
2jr4j + jr5j + jr6j + jr7j
Apartado c)
Puesto que el operario realiza las operaciones en base diez, coma otante, utilizando tres
d gitos para la mantisa (sin incluir el signo) y redondeando por aproximacion, todos los errores
relativos de almacenamiento son menores en valor absoluto que
r = 1
2 101;3
= 0:005
Ademas, la cota del error inherente de los semiejes a y b es
jri
aj jri
bj ri = 0:025
Por consiguiente, la cota del error total cometido por el operario es
jR7j 1
2
a2
a2 + b2 (2ri + 3r) + b2
a2 + b2 (2ri + 3r) + r + 1
2r + 4r
= ri + 13
2 r = 5:75 10;2
Por lo tanto, el operario puede cometer un error superior a los l mites de dise~no y no puede
asegurar el calculo correcto del per metro. Sin embargo, la expresion anterior permite deducir
la precision que debe tener la cinta metrica para poder calcular el per metro de la elipse con un
error relativo inferior a rp = 5 10;2. En efecto, debe veri carse que
ri + 13
2 r rp
o equivalentemente
ri rp ; 13
2 r = 1:75 10;2
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 229
Problema 4.5
Apartado a)
La gura 4.5.1 muestra los diagramas de propagacion del error correspondientes a las tres
alternativas.
Fig. 4.5.1 Propagacion del error en el calculo del radio de la esfera
© Los autores, 1998; © Edicions UPC, 1998.
230 Metodos numericos
En las siguientes expresiones los super ndices i y a indicaran error inherente y error de
almacenamiento respectivamente. La expresion del error nal mediante la primera alternativa
es
R1 = rD ; ra
2 + r1 = (ri
D + ra
D) ; ra
2 + r1
donde ra
2 es nulo por tratarse del error de almacenamiento de un numero entero. El error de la
segunda alternativa es
~R1 = ra
4 + r + ~r1
~R2 = rS ; ~R1 + ~r2
~R3 = 1
2
~R2 + ~r3 = 1
2 (ri
S + ra
S) ; r ; ~r1 + ~r2 + ~r3
donde ra
4 es nulo por tratarse del error de almacenamiento de un numero entero y el calculo
del coe ciente de propagacion del error debido a la ra z cuadrada se ha realizado como en el
problema 4.4. Por ultimo, el error de la tercera alternativa es
^R1 = ra
3 + rV + ^r1
^R2 = ra
4 + r + ^r2
^R3 = ^R1 ; ^R2 + ^r3
^R4 = 1
3
^R3 + ^r4 = 1
3 (ri
V + ra
V ) + ^r1 ; r ; ^r2 + ^r3 + ^r4
Como en los casos anteriores, ra
3 y ra
4 son nulos por tratarse del error de almacenamiento de un
numero entero. As mismo, el calculo del coe ciente de propagacion del error debido a la ra z
tercera se ha realizado, como en el problema 4.4, a partir de la ecuacion 4.15.
Apartado b)
A partir de las expresiones anteriores, la cota del error para cada una de las alternativas es
R1 = (jri
Dj + jra
Dj) + jr1j
~R3 = 1
2 (jri
Sj + jra
Sj) + jr j + j~r1j + j~r2j + j~r3j
^R4 = 1
3 (jri
V j + jra
V j) + j^r1j + jr j + j^r2j + j^r3j + j^r4j
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 231
Apartado c)
Los errores inherentes de las medidas veri can
jri
Dj
jri
Sj
jri
V j
9
=

ri = 10;3
Ademas, todos los errores de almacenamiento en valor absoluto son menores que
r = 1
221;23
= 1:192 10;7
puesto que se trabaja mediante variables REAL*4. Por consiguiente, se cumple
jR1j ri + 2r = 1:00024 10;3
j~R3j 1
2ri + 3r = 5:0036 10;4
j^R4j 1
3(ri + 8r) = 3:3365 10;4
Por lo que el ingeniero solo puede utilizar la tercera alternativa para calcular el radio A con la
precision requerida.
Problema 4.6
Sean x e y las distancias desde los anclajes hasta la interseccion de la pila y el tablero.
Entonces, la longitud del cable se puede calcular como (teorema de Pitagoras)
L =
p
x2 + y2
Haciendo un estudio de la propagacion del error analogo al realizado en el problema 4.4, se
puede obtener la expresion del error relativo en la longitud de los cables siguiente:
rL = 1
2
x2
x2 + y2
(2rx + r1) + y2
x2 + y2
(2ry + r2) + r3 + r4
donde r1, r2, r3 y r4 son los errores de almacenamiento producidos con cada una de las opera-
ciones, y rx, ry son los errores en x e y respectivamente (que incluiran error inherente y error
de almacenamiento en el caso mas general). La cota del error es
jrLj = 1
2
x2
x2 + y2
(2jrxj+ jr1j) + y2
x2 + y2
(2jryj+ jr2j) + jr3j + jr4j
© Los autores, 1998; © Edicions UPC, 1998.
232 Metodos numericos
Si se trabaja con in nitas cifras signi cativas correctas, solo intervienen en la propagacion
del error los errores inherentes en los datos x e y (r1 = ::: = r4 = 0). Suponiendo que la cota
del error inherente es la misma en ambos casos
rx ry ri
la cota del error se reescribe como
jrLj 1
2
x2
x2 + y2
2ri + y2
x2 + y2
2ri = ri
Un error absoluto de 0:25 m en L representa un error relativo de 0:25=100 = 2:5 10;3. Por lo
tanto, para asegurar la precision deseada es necesario que la cota del error inherente veri que
ri 2:5 10;3
Es necesario tomar las medidas con la misma precision que se desea en el resultado (0.25 % en
este caso).
Si la posicion de los anclajes se conoce exactamente, pues son numeros enteros, el error en
los datos (rx y ry) es nulo, puesto que no hay error inherente y no se produce ningun error al
almacenar un entero. As mismo, x2, y2 y x2 +y2 son numeros enteros, y pueden calcularse sin
error de redondeo. El unico error de redondeo se comete al calcular
px2 + y2.
Si el ingeniero trabaja en base 10 y con dos d gitos de precision (es decir, con dos cifras
signi cativas correctas), la cota del error relativo de redondeo por aproximacion es
r = 1
210;2
= 5 10;3
En estas condiciones la cota del error (debido exclusivamente al error de almacenamiento del
resultado de la ultima operacion {la ra z cuadrada{) es
jrLj r = 5 10;3
 2:5 10;3
y, por lo tanto, es posible que los calculos del ingeniero no tengan la precision necesaria y que
los cables pedidos no sirvan.
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 233
10.4 Problemas del cap tulo 5
Problema 5.1
Apartado a)
Los ceros de la funcion f( ) son cuatro: 1 = 0, 2 = =2, 3 = y 4 = 3 =2,
y corresponden a impactos de la bola P en las intersecciones de los ejes coordenados con la
circunferencia. Conviene notar que la ra z 3 = , a pesar de ser solucion del problema
numerico, carece de sentido f sico, ya que para este valor del angulo la bola P chocar a con la
bola Q antes de impactar con la banda de la mesa.
Apartado b)
Las ra ces 2 = =2, 3 = y 4 = 3 =2 se capturan tomando, por ejemplo, los intervalos
iniciales 1:3 1:7], 3:0 3:3] y 4:5 4:9] respectivamente. Se puede comprobar facilmente que se
produce un cambio de signo de f en cada uno de los mencionados intervalos, condicion su ciente
para iniciar el metodo de la biseccion. En la tabla 5.1.1 se muestran los resultados obtenidos
para el primero de los casos citados.
Al intentar capturar la solucion 1 = 0 el programa genera un error de ejecucion en la fase
de control de convergencia, puesto que la evaluacion de la condicion 5.8 conduce a una division
por 0 en el calculo de rk (ecuacion 5.7). Para que el programa consiga capturar cualquiera
de las ra ces i, sin excepcion, es su ciente con adoptar la condicion 5.9 en lugar de la 5.8. A
nivel de programacion, esto se lleva a cabo sustituyendo la l nea correspondiente al calculo de
la variable REL X por
abs_x = x - pmedio
y modi cando la condicion de control de convergencia
if ((abs(fx).lt.tol_f) .and. (abs(rel_x).lt.tol_x))
por la siguiente
if ((abs(fx).lt.tol_f) .and.
. (abs(abs_x) .lt. (tol_x * abs(pmedio) + tol_e)))
donde TOL E es la tolerancia E que aparece en la ecuacion 5.9 y debe ser introducida por el
usuario junto con los demas datos.
Como comentario nal cabe comentar que, para este problema en particular y utilizando la
© Los autores, 1998; © Edicions UPC, 1998.
234 Metodos numericos
version original del programa 5.1, no es posible capturar la ra z 1 = 0, pero s la ra z = 2 ,
que es f sicamente equivalente esto se consigue inicializando el metodo de la biseccion con el
intervalo 6:0 6:4], por ejemplo.
Tabla 5.1.1 Resultados del problema del billar circular metodo de la biseccion con x0 = 1:3, a = 1:7
Iteracion Extremo a Aproximacion x f(x) Error relativo en x
========= ========== ============== ========== ===================
0 1.3000000 1.7000000 -5.848D-02 1.333D-01
1 1.7000000 1.5000000 3.211D-02 -6.250D-02
2 1.5000000 1.6000000 -1.326D-02 3.226D-02
3 1.6000000 1.5500000 9.440D-03 -1.587D-02
4 1.5500000 1.5750000 -1.908D-03 8.000D-03
5 1.5750000 1.5625000 3.766D-03 -3.984D-03
6 1.5750000 1.5687500 9.290D-04 -1.988D-03
7 1.5687500 1.5718750 -4.897D-04 9.950D-04
8 1.5718750 1.5703125 2.196D-04 -4.973D-04
9 1.5703125 1.5710938 -1.350D-04 2.487D-04
10 1.5710938 1.5707031 4.231D-05 -1.243D-04
11 1.5707031 1.5708984 -4.635D-05 6.217D-05
12 1.5707031 1.5708008 -2.022D-06 3.109D-05
13 1.5708008 1.5707520 2.014D-05 -1.554D-05
14 1.5708008 1.5707764 9.061D-06 -7.771D-06
15 1.5708008 1.5707886 3.519D-06 -3.886D-06
16 1.5708008 1.5707947 7.486D-07 -1.943D-06
17 1.5707947 1.5707977 -6.368D-07 9.714D-07
18 1.5707977 1.5707962 5.592D-08 -4.857D-07
19 1.5707962 1.5707970 -2.904D-07 2.429D-07
20 1.5707962 1.5707966 -1.173D-07 1.214D-07
21 1.5707962 1.5707964 -3.067D-08 6.071D-08
22 1.5707964 1.5707963 1.263D-08 -3.036D-08
23 1.5707963 1.5707963 -9.020D-09 1.518D-08
24 1.5707963 1.5707963 1.803D-09 -7.589D-09
25 1.5707963 1.5707963 -3.608D-09 3.795D-09
Convergencia en la iteracion 25
Solucion para theta= 1.5707963
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 235
Problema 5.2
Apartado a)
Efectivamente, el metodo de la biseccion inicializado con a = 2, x0 = 0 converge sin pro-
blemas. Los resultados obtenidos empleando el programa 5.1 con tolx = 0:5 10;8 TOLf =
0:5 10;8 se muestran en la tabla 5.2.1.
Tabla 5.2.1 Resultados del calculo de
p
2 por el metodo de la biseccion con a = 2, x0 = 0
Iteracion Extremo a Aproximacion x f(x) Error relativo en x
========= ========== ============== ========== ===================
0 2.0000000 0.0000000 -2.000D+00 -1.000D+00
1 2.0000000 1.0000000 -1.000D+00 -3.333D-01
2 1.0000000 1.5000000 2.500D-01 2.000D-01
3 1.5000000 1.2500000 -4.375D-01 -9.091D-02
4 1.5000000 1.3750000 -1.094D-01 -4.348D-02
5 1.3750000 1.4375000 6.641D-02 2.222D-02
6 1.4375000 1.4062500 -2.246D-02 -1.099D-02
. . . . .
. . . . .
. . . . .
27 1.4142136 1.4142136 -2.631D-08 -5.268D-09
28 1.4142136 1.4142136 -5.237D-09 -2.634D-09
29 1.4142136 1.4142136 5.300D-09 1.317D-09
30 1.4142136 1.4142136 3.154D-11 6.585D-10
Convergencia en la iteracion 30
La raiz cuadrada de 2.0000000 es 1.4142136
Apartado b)
En la expresiondel metodo de Newton (ecuacion 5.14) puede verse que, para obtener la nueva
aproximacion a la solucion xk+1, es necesario dividir por la derivada de la funcion evaluada en
la aproximacion anterior, f0(xk). En este caso, dicha derivada tiene la expresion f0(xk) = 2 xk.
Esto quiere decir que, para k = 0, se obtendra f0(x0) = 2 x0 = 0. El programa produce un
error de ejecucion cuando, al intentar calcular x1, se realiza una division por 0.
Gra camente, la interpretacion de este fenomeno es muy sencilla. Para obtener x1, se debe
trazar la recta tangente a la curva y = f(x) = x2 ; 2 por el punto (x0 f(x0)) y obtener
su interseccion con el eje de abscisas. Como x0 = 0, dicha recta tangente tiene pendiente
© Los autores, 1998; © Edicions UPC, 1998.
236 Metodos numericos
f0(x0) = 0, es decir, es una recta horizontal. Al no cortar esta recta al eje de las x es imposible
obtener la nueva aproximacion x1.
Este comportamiento ilustra que, si bien el metodo de Newton, en general, es mas rapido
que el metodo de la biseccion, a veces es tambien menos robusto.
Problema 5.3
Apartado a)
El programa 5.3.1 permite hallar las ra ces del problema del billar circular mediante el
metodo de Newton. Este programa se ha obtenido por modi cacion del programa 5.2 (metodo
de la biseccion para el problema del billar circular {vease el cap tulo 5{). Las unicas diferencias
(re ejadas en el listado) entre estos dos programas son: 1) la entrada de datos (para el metodo
de Newton solo es necesaria una aproximacion inicial), 2) el bloque donde se obtiene la nueva
aproximacion a la solucion a partir de la aproximacion calculada en la iteracion anterior, y 3)
las funciones externas de evaluacion de la funcion f y de su derivada f0.
c
c Metodo de Newton para el problema del billar circular
c___________________________________________________________________
c___Aproximacion inicial x0
write (6,200)
read (5,*) x_actual
200 format (1x,'Aproximacion inicial')
.
.
.
c___Nueva aproximacion
fx = funcion(x_actual,r,xp,yp,xq,yq)
dx = derivada(x_actual,r,xp,yp,xq,yq)
x_nuevo = x_actual - (fx/dx)
.
.
.
c__________________Function funcion(x)
real*8 function funcion(x,r,xp,yp,xq,yq)
implicit real*8 (a-h,o-z)
sx=dsin(x)
cx=dcos(x)
distp=dsqrt( (r*cx - xp)*(r*cx - xp) +
. (r*sx - yp)*(r*sx - yp) )
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 237
distq=dsqrt( (r*cx - xq)*(r*cx - xq) +
. (r*sx - yq)*(r*sx - yq) )
funcion = (xp*sx - yp*cx)/distp + (xq*sx - yq*cx)/distq
return
end
c__________________Function derivada(x)
real*8 function derivada(x,r,xp,yp,xq,yq)
implicit real*8 (a-h,o-z)
sx=dsin(x)
cx=dcos(x)
dpx=(r*cx - xp)*(r*cx - xp)
dpy=(r*sx - yp)*(r*sx - yp)
dp =dpx+dpy
distp=dsqrt(dp)
sump=( (xp*cx + yp*sx) * distp -
. (xp*sx - yp*cx) *
. 2.d0*r*((r*sx-yp)*cx - (r*cx-xp)*sx) /
. (2*distp)
. ) / dp
dqx=(r*cx - xq)*(r*cx - xq)
dqy=(r*sx - yq)*(r*sx - yq)
dq=dqx+dqy
distq=dsqrt(dq)
sumq=( (xq*cx + yq*sx) * distq -
. (xq*sx - yq*cx) *
. 2.d0*r*((r*sx-yq)*cx - (r*cx-xq)*sx) /
. (2*distq)
. ) / dq
derivada = sump + sumq
return
end
Prog. 5.3.1 Metodo de Newton para el problema del billar circular
© Los autores, 1998; © Edicions UPC, 1998.
238 Metodos numericos
Apartado b)
A modo de ejemplo, se muestran los resultados obtenidos al inicializar el metodo de Newton
con x0 = 1:3 (vease la tabla 5.3.1). Para este valor de la aproximacion inicial se converge a la
ra z 2 = =2. Los valores de las tolerancias son los mismos que para los ejemplos anteriores
(tolx = 0:5 10;8 TOLf = 0:5 10;8).
Tabla 5.3.1 Resultados del problema del billar circular metodo de Newton con x0 = 1:3
Iteracion Aproximacion x f(x) Error relativo en x
========= ============== ========== ===================
0 1.3000000 1.213D-01 1.765D-01
1 1.5786010 -3.543D-03 -4.969D-03
2 1.5707962 7.773D-08 1.090D-07
3 1.5707963 -1.110D-16 -1.414D-16
Convergencia en la iteracion 3
El valor del angulo theta es 1.5707963
Problema 5.4
Apartado a)
El programa 5.4.1 permite hallar las ra ces del problema del billar circular mediante el
metodo de la secante. Este programa se ha obtenido por modi cacion del programa 5.3.1
(metodo de Newton para el problema del billar circular). Las unicas diferencias (re ejadas en
el listado) entre estos dos programas son: 1) la entrada de datos (ahora son necesarias dos
aproximaciones iniciales), 2) el bloque donde se obtiene la nueva aproximacion a la solucion a
partir de la aproximacioncalculada en la iteracion anterior, y 3) las funciones externas FUNCTION
(para el metodo de Newton es necesario realizar dos evaluaciones funcionales por iteracion, una
de f y otra de f0, mientras que para el metodo de la secante es su ciente con evaluar f). Por
lo que respecta al punto 3, solo es necesario eliminar del programa 5.3.1 la funcion externa
DERIVADA(X).
Apartado b)
A modo de ejemplo, se muestran los resultados obtenidos al inicializar el metodo de la
secante con x0 = 1:3 y x1 = 1:58 (vease la tabla 5.4.1). Se ha escogido para x1 la segunda
aproximacion calculada por el metodo de Newton (ver resolucion del problema 5.3). De nuevo,
se obtiene sin problemas la ra z 2 = =2. Los valores de las tolerancias son los mismos que
para los ejemplos anteriores (tolx = 0:5 10;8 TOLf = 0:5 10;8).
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 239
c
c Metodo de la secante para el problema del billar circular
c___________________________________________________________________
c___Aproximaciones iniciales
write (6,200)
read (5,*) x_actual
200 format (1x,'Aproximacion inicial x0')
write (6,300)
read (5,*) x_nuevo
300 format (1x,'Aproximacion inicial x1')
.
.
.
c___Nueva aproximacion
f_nuevo = f(x_nuevo,r,xp,yp,xq,yq)
pendiente = (f_nuevo-f_actual)/(x_nuevo-x_actual)
x_actual = x_nuevo
x_nuevo = x_actual - (f_nuevo/pendiente)
Prog. 5.4.1 Metodo de la secante para el problema del billar circular
Tabla 5.4.1 Resultados del problema del billar circular metodo de la secante con x0 = 1:3 x1 = 1:58
Iteracion Aproximacion x f(x) Error relativo en x
========= ============== ========== ===================
0 1.3000000 1.213D-01 1.772D-01
1 1.5800000 -4.178D-03 -5.937D-03
2 1.5706746 5.524D-05 7.747D-05
3 1.5707963 -8.315D-10 -1.166D-09
Convergencia en la iteracion 3
El valor del angulo theta es 1.5707963
Para evitar un error de ejecucion al intentar capturar la ra z 1 = 0, es su ciente con
introducir en el programa un criterio de convergencia en errores absolutos (vease la resolucion
del problema 5.2).
© Los autores, 1998; © Edicions UPC, 1998.
240 Metodos numericos
Problema 5.5
En la gura 5.5.1 se muestran las curvas de convergencia (numero de iteracion versus error
relativo en escala logar tmica) correspondientes a los resultados de las tablas 5.1.1, 5.3.1 y
5.4.1 (ra z capturada: 2 = =2). Como se puede observar, el metodo de la biseccion es
el que presenta un decrecimiento mas lento del error, precisando 25 iteraciones para llegar a
convergencia. El metodo de Newton es el mas rapido para este metodo, el error relativo decrece
mucho en muy pocas iteraciones (el criterio de convergenciase veri ca ya en la tercera iteracion).
El metodo de la secante presenta un comportamiento intermedio entre los dos anteriores.
1,E-18
1,E-15
1,E-12
1,E-09
1,E-06
1,E-03
1,E+00
0 5 10 15 20 25 30
Iteración
Errorrelativo
Bisección
Secante
Newton
Fig. 5.5.1 Comparacion de los tres metodos para el problema del billar circular
Problema 5.6
Los programas 5.1, 5.3 y 5.4 del apartado 5.7 utilizan respectivamente los metodos de la
biseccion, de Newton y de la secante. A partir de ellos puede confeccionarse el programa pedido
en el enunciado.
La funcion f(x) = x2 ;2x+1 = (x;1)2 tiene una unica ra z x = 1. Esta ra z es doble y,
por lo tanto, se veri ca f(x ) = 0 y f0(x ) = 0. La funcion toma unicamente valores positivos
(ver gura 5.6.1) y, en consecuencia, es imposible el calculo de la ra z mediante el metodo de
biseccion.
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 241
0
0,25
0,5
0,75
1
0
0,5
1
1,5
2
x
f(x)=(x-1)^2
Fig. 5.6.1 Funcion f(x) = (x ;1)2
Trabajando con aproximacion inicial x0 = 2 y tolx = 0:5 10;8 TOLf = 0:5 10;8, se
obtienen los resultados de las tablas 5.6.1 (metodo de Newton) y 5.6.2 (metodo de la secante).
Para el metodo de la secante, se toma como aproximacion x1 la obtenida con el metodo de
Newton.
Tabla 5.6.1 Calculo de la ra z de f(x) = (x ;1)2 mediante el metodo de Newton
Iteracion Aproximacion x funcion(x) Error relativo en x
========= ============== ========== ===================
0 2.0000000 1.000D+00 3.333D-01
1 1.5000000 2.500D-01 2.000D-01
2 1.2500000 6.250D-02 1.111D-01
3 1.1250000 1.563D-02 5.882D-02
.
.
25 1.0000000 8.882D-16 1.490D-08
26 1.0000000 2.220D-16 7.451D-09
27 1.0000000 0.000D+00 0.000D+00
Convergencia en la iteracion 27
La raiz es 1.0000000
© Los autores, 1998; © Edicions UPC, 1998.
242 Metodos numericos
Tabla 5.6.2 Calculo de la ra z de f(x) = (x ;1)2 mediante el metodo de la secante
Iteracion Aproximacion x funcion(x) Error relativo en x
========= ============== ========== ===================
0 2.0000000 1.000D+00 3.333D-01
1 1.5000000 2.500D-01 1.250D-01
2 1.3333333 1.111D-01 1.111D-01
3 1.2000000 4.000D-02 6.667D-02
.
.
35 1.0000000 1.776D-15 1.678D-08
36 1.0000000 6.661D-16 1.007D-08
37 1.0000000 2.220D-16 5.034D-09
38 1.0000000 0.000D+00 0.000D+00
Convergencia en la iteracion 38
La raiz es 1.0000000
La gura 5.6.2 muestra el error relativo (en escala logar tmica) en funcion del numero de
iteraciones.
1,E-09
1,E-08
1,E-07
1,E-06
1,E-05
1,E-04
1,E-03
1,E-02
1,E-01
1,E+00
0 10 20 30 40
error
Secante
Newton
iteración
Fig. 5.6.2 Comparacion de dos metodos para el calculo de la ra z de f(x) = (x;1)2
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 243
Los metodos de Newton y de la secante presentan t picamente una convergencia rapida
(vease la gura 5.5.1 del problema anterior, por ejemplo). Para este problema, sin embargo, la
convergencia es mas lenta de lo habitual (tablas 5.6.1 y 5.6.2, gura 5.6.2). La razon es que
f(x) = (x ; 1)2 tiene una ra z doble. Con las sucesivas iteraciones se consigue una sucesion
de valores xk cada vez mas cercanos a la ra z x . Al tratarse de una ra z doble, los valores
de la derivada f0(xk) cada vez son mas cercanos a f0(x ) = 0 y, en consecuencia, al aplicar la
de nicion del metodo de Newton, se divide por numeros muy cercanos a 0. Esto provoca que
el metodo pierda su rapidez. En el caso del metodo de la secante ocurre algo similar. No existe
el calculo de la derivada, pero s se calcula una aproximacion de esta que tambien se acercara
a cero con cada iteracion.
© Los autores, 1998; © Edicions UPC, 1998.
244 Metodos numericos
10.5 Problemas del cap tulo 6
Problema 6.1
Apartado a)
La fase de eliminacion del algoritmo de Gauss sin pivotamiento se escribe (ecuacion 6.18)
como
a(k)
ij = a(k;1)
ij ;mika(k;1)
kj = a(k;1)
ij ; a(k;1)
ik
a(k;1)
kk
a(k;1)
kj
b(k)
i = b(k;1)
i ;mikb(k;1)
k = b(k;1)
i ; a(k;1)
ik
a(k;1)
kk
b(k;1)
k
8

:
k = 1 ::: n ;1
i = k + 1 ::: n
j = k + 1 ::: n
En cada paso (para cada valor de k) se pasa de una matriz A(k;1) a una matriz A(k), anulando
los elementos de la columna k-esima por debajo de la diagonal. Al hacerlo, solo se modi can
los coe cientes de la submatriz llena de orden n;k ( las y columnas k+1 hasta n), que queda
(vease la ecuacion 6.15) 0
B@
a(k)
k+1 k+1 a(k)
k+1 n
...
...
...
a(k)
n k+1 a(k)
nn
1
CA
Sea A A(0) una matriz simetrica. Para aprovechar la simetr a en el algoritmo de Gauss,
basta tener en cuenta que estas submatrices llenas se mantienen simetricas durante toda la fase
de eliminacion. Por ejemplo, para k = 1, la submatriz de orden n;1
0
B@
a(1)
22 a(1)
2n
...
...
...
a(1)
n2 a(1)
nn
1
CA
se calcula como (ecuacion 6.12)
a(1)
ij = a(0)
ij ;mi1a(0)
1j = a(0)
ij ; a(0)
i1
a(0)
11
a(0)
1j
(
i = 2 ::: n
j = 2 ::: n
A partir de la simetr a de A (a(0)
ij = a(0)
ji ), puede deducirse directamente que a(1)
ij = a(1)
ji . En
efecto,
a(1)
ji = a(0)
ji ;
a(0)
j1
a(0)
11
a(0)
1i = a(0)
ij ;
a(0)
1j
a(0)
11
a(0)
i1 = a(1)
ij
(
i = 2 ::: n
j = 2 ::: n
La demostracion se completa por induccion. A partir de a(k;1)
ij = a(k;1)
ji , se comprueba
facilmente que a(k)
ij = a(k)
ji .
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 245
Puesto que las submatrices llenas son simetricas, basta trabajar con los elementos de la
submatriz triangular superior (i j). Esto se consigue reescribiendo el algoritmo de Gauss
(fase de eliminacion) como
a(k)
ij = a(k;1)
ij ;mika(k;1)
kj = a(k;1)
ij ; a(k;1)
ki
a(k;1)
kk
a(k;1)
kj
b(k)
i = b(k;1)
i ;mikb(k;1)
k = b(k;1)
i ; a(k;1)
ki
a(k;1)
kk
b(k;1)
k
8

:
k = 1 ::: n ;1
i = k + 1 ::: n
j = i ::: n
Respecto del algoritmo original (matrices no necesariamente simetricas), se han introducido
unicamente dos modi caciones: 1) en el calculo de mik se emplea el elemento a(k;1)
ki del triangulo
superior en lugar del elemento a(k;1)
ik (del mismo valor, dada la simetr a) del triangulo inferior
2) el ndice de columna j va desde i (y no desde k + 1) hasta n. Con estos dos cambios se
utilizan solamente coe cientes de la matriz triangular superior.
Apartado b)
Al pasar de A(k;1) a A(k) con el algoritmo propuesto en el apartado anterior es necesario
calcular (n ;k + 1)(n ; k)=2 elementos a(k)
ij y n ;k componentes b(k)
i . Para ello es necesario
realizar las siguientes operaciones:
8

:
(n;k)(n ;k + 3)=2 sumas
(n;k)(n ;k + 3)=2 productos
n;k divisiones
Sumando para los n;1 pasos (k = 1 ::: n;1), se obtiene un total de
8

:
n;1X
k=1
(n ;k)(n;k + 3)
2 = n3 + 3n2 ;4n
6 sumas
n;1X
k=1
(n ;k)(n;k + 3)
2 = n3 + 3n2 ;4n
6 productos
n;1X
k=1
n ;k = n(n;1)
2 divisiones
para la fase de eliminacion. Si se a~naden las operaciones de la fase de sustitucion hacia atras
(vease el subapartado 6.2.2), se obtiene que el numero de operaciones necesarias para resolver
un sistema lineal con matriz A simetrica (mediante el algoritmo de Gauss adaptado desarro-
llado el el apartado a) es TGSim = 2n3+15n2;11n
6 . Tal y como era de esperar, este numero es
aproximadamente la mitad del correspondiente al metodo de Gauss estandar, TG = 4n3+9n2;7n
6 .
En efecto, en el caso general se hacen del orden de 2n3
3 operaciones, y en el caso simetrico del
orden de n3
3 .
© Los autores, 1998; © Edicions UPC, 1998.
246 Metodos numericos
La simetr a de la matriz puede aprovecharse tambien a efectos de almacenamiento, em-
pleando el esquema propuesto en el subapartado 7.4.3. La idea basica es guardar solamente
los coe cientes del triangulo superior. De esta forma, los requisitos de memoria para el caso
simetrico son tambien aproximadamente la mitad que para el caso general.
En resumen, el coste computacional del metodo de Gauss sin pivotamiento para matrices
simetricas es aproximadamente la mitad que para matrices no simetricas, tanto en numero de
operaciones como en espacio de memoria.
Apartado c)
El algoritmo desarrollado en el apartado a no puede emplearse si es necesario pivotar. El
pivotamiento (es decir, la permutacion de las) rompe la simetr a de las submatrices llenas de
orden n ;k. Es necesario entonces emplear el algoritmo de Gauss con pivotamiento estandar,
y almacenar la matriz A como matriz llena.
Problema 6.2
Apartado a)
El vector auxiliar y se calcula resolviendo el sistema triangular inferior Ly = b mediante
una sustitucion hacia adelante (ecuacion 6.9):
y1 = b1 = l11
yi =
0
@bi ;
i;1X
j=1
lijyj
1
A = lii i = 2 ::: n
Notese que la componente bi (para i = 1 ::: n) solo es necesaria para calcular la incognita yi.
En consecuencia, una vez calculada yi puede sobreescribirse encima de bi (es decir, yi puede
almacenarse en la posicion de memoria que ocupaba bi).
Pueden hacerse las mismas consideraciones para el sistema triangular superior Ux = y que
permite obtener la solucion x del sistema Ax = b. En la sustitucion hacia atras (ecuacion 6.7),
xn = yn
xi = yi ;
nX
j=i+1
uijyj i = n;1 n;2 ::: 1
puede sobrescribirse xi encima de yi. En conclusion, basta con reservar espacio de memoria
para un unico vector, que contiene los terminos independientes b al principio, el vector auxiliar
y luego y las incognitas x al nal. Desde luego, esta estrategia de ahorro de memoria solo es
valida en el caso (muy habitual) en que no sea necesario disponer del vector ben la memoria una
vez resuelto el sistema lineal. Si se quisiera conservar b, habr a que trabajar con dos vectores
(uno para b, y otro para y y x).
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 247
Apartado b)
Se ha visto que las matrices L y U pueden guardarse encima de A ( gura 6.2) y que los
vectores y y x pueden guardarse encima de b. Esto permite escribir la fase de descomposicion
del algoritmo de Crout como
k = 1 ::: n;1
8

:
a1 k+1 = a1 k+1 = a11
ai k+1 =
0
@ai k+1 ;
i;1X
j=1
aij aj k+1
1
A = aii i = 2 ::: k
ak+1 i = ak+1 i ;
i;1X
j=1
aji ak+1 j i = 2 ::: k
ak+1 k+1 = ak+1 k+1 ;
kX
i=1
ak+1 i ai k+1
Estas ecuaciones se obtienen partiendo de la ecuacion 6.38 y 1) suprimiendo las asignaciones
l11 = a11 y lk+1 1 = ak+1 1 (innecesarias, puesto que L se escribe encima de A), 2) suprimiendo
las asignaciones uii = 1 (los unos de la diagonal de U no se almacenan) y 3) reemplazando lij
y uij por aij en las expresiones restantes.
En cuanto a la fase de sustituciones, se obtiene
b1 = b1 = a11
bi =
0
@bi ;
i;1X
j=1
aijbj
1
A = aii i = 2 ::: n
bi = bi ;
nX
j=i+1
aijbj i = n ;1 n;2 ::: 1
Estas ecuaciones se obtienen partiendo de las vistas en el apartado a y 1) reemplazando lij y uij
por aij, 2) reemplazando xi e yi por bi, y 3) suprimiendo la asignacion (innecesaria) xn = yn.
© Los autores, 1998; © Edicions UPC, 1998.
248 Metodos numericos
Problema 6.3
Apartado a)
Siguiendo el procedimiento visto para el metodo de Crout (ecuacion 6.35), la descomposicion
del menor Ak+1] puede escribirse como
Ak+1] = Lk+1] Dk+1] Uk+1]
Ak] ck+1]
fT
k+1] ak+1 k+1
= Lk] 00000000000000
lT
k+1] 1
Dk] 00000000000000
00000000000000T dk+1 k+1
Uk] uk+1]
00000000000000T 1
A partir de esta expresion, se obtienen las siguientes ecuaciones para calcular los vectores lk+1]
y uk+1] y el escalar dk+1 k+1:
Lk] Dk] uk+1] = ck+1]
UT
k] Dk] lk+1] = fk+1]
dk+1 k+1 = ak+1 k+1 ;lT
k+1]Dk]uk+1]
Para calcular el vector uk+1], hay que resolver primero un sistema triangular inferior Lk]vk+1] =
ck+1] (donde vk+1] es un vector auxiliar) y luego un sistema diagonal Dk]uk+1] = vk+1]. Notese,
sin embargo, que no es necesario reservar espacio de memoria para el vector auxiliar vk+1],
porque puede aprovecharse el espacio destinado para el vector uk+1]. Pueden hacerse conside-
raciones muy similares respecto del calculo del vector lk+1]. As pues, la descomposicion LDU
puede calcularse como con las siguientes ecuaciones (analogas a las ecuaciones 6.38 vistas para
la descomposicion LU):
l11 = 1 d11 = a11 u11 = 1
k = 1 ::: n;1
8

:
u1 k+1 = a1 k+1
ui k+1 = ai k+1 ;
i;1X
j=1
lij uj k+1 i = 2 ::: k
ui k+1 = ui k+1 = dii i = 1 ::: k
lk+1 1 = ak+1 1
lk+1 i = ak+1 i ;
i;1X
j=1
uji lk+1 j i = 2 ::: k
li k+1 = li k+1 = dii i = 1 ::: k
lk+1 k+1 = 1
uk+1 k+1 = 1
dk+1 k+1 = ak+1 k+1 ;
kX
i=1
lk+1 i dii ui k+1
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 249
Existen implementaciones mas e cientes de este algoritmo. Golub y Van Loan (veanse las
referencias del apartado 7.5), por ejemplo, proponen una version basada en recorrer las matrices
triangulares por columnas (y no por las) al realizar las sustituciones hacia adelante, tal y como
se comenta en el subapartado 7.2.2.
Al igual que el metodo de Crout (vease problema 6.2), este metodo puede implementarse
reservando espacio para una unica matriz, que contiene la matriz A al principio y los factores
L, U (sin la diagonal, por ser unitaria) y D despues de la descomposicion.
Apartado b)
El proceso es el mismo que en el apartado anterior. La descomposicion del menor Ak+1] es
Ak+1] = Lk+1] Dk+1] LT
k+1]
Ak] fk+1]
fT
k+1] ak+1 k+1
= Lk] 00000000000000
lT
k+1] 1
Dk] 00000000000000
00000000000000T dk+1 k+1
LT
k] lk+1]
00000000000000T 1
que lleva a las siguientes ecuaciones para el calculo del vector lk+1] y del escalar dk+1 k+1:
Lk] Dk] lk+1] = fk+1]
dk+1 k+1 = ak+1 k+1 ;lT
k+1]Dk]lk+1]
Detallando las operaciones necesarias, se obtiene el siguiente algoritmo:
l11 = 1 d11 = a11
k = 1 ::: n;1
8

:
lk+1 1 = ak+1 1
lk+1 i = ak+1 i ;
i;1X
j=1
lij lk+1 j i = 2 ::: k
lk+1 i = lk+1 i = dii i = 1 ::: k
lk+1 k+1 = 1
dk+1 k+1 = ak+1 k+1 ;
kX
i=1
diil2
k+1 i
© Los autores, 1998; © Edicions UPC, 1998.
250 Metodos numericos
10.6 Problemas del cap tulo 7
Problema 7.1
Las modi caciones realizadas en el programa 7.2 para los casos en que xi = 10;i+1 y xi = i
estan respectivamente en los programas 7.1.1 y 7.1.2. Tan solo ha sido necesario modi car
parte de la subrutina get mat vec. La unica consideracion destacable es que las operaciones
de asignacion de valores a las componentes del vector x deben convertir correctamente el valor
de las variables enteras en reales de doble precision. La tabla 7.1.1 muestra el chero de
resultados para el caso en que xi = 10;i+1 y n = 4, y la tabla 7.1.2 presenta los resultados para
xi = i y n = 4.
c___________________Lectura o generacion de la matriz y del vector
subroutine get_mat_vec (n,a,v)
implicit real*8 (a-h,o-z)
dimension a(n,n),v(n)
c___Generacion de la matriz (matriz de Vandermonde)
do 10 i=1, n
s=10.d0**(1-i)
do 10 j=1, n
a(i,j)= s**(j-1)
10 continue
Prog. 7.1.1 Modi cacion de la subrutina get mat vec para el caso xi = 10;i+1
c___________________Lectura o generacion de la matriz y del vector
subroutine get_mat_vec (n,a,v)
implicit real*8 (a-h,o-z)
dimension a(n,n),v(n)
c___Generacion de la matriz (matriz de Vandermonde)
do 10 i=1, n
s=dfloat(i)
do 10 j=1, n
a(i,j)= s**(j-1)
10 continue
Prog. 7.1.2 Modi cacion de la subrutina get mat vec para el caso xi = i
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 251
Tabla 7.1.1 Fichero de resultados del caso xi = 10;i+1
La matriz de entrada es:
1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00
1.000000E+00 1.000000E-01 1.000000E-02 1.000000E-03
1.000000E+00 1.000000E-02 1.000000E-04 1.000000E-06
1.000000E+00 1.000000E-03 1.000000E-06 1.000000E-09
El vector de entrada es:
4.000000E+00
1.111000E+00
1.010101E+00
1.001001E+00
El vector producto es:
7.122102E+00
4.122202E+00
4.011212E+00
4.001112E+00
El modulo del vector producto es: 9.990776E+00
Problema 7.2
Apartado a)
El programa 7.2.1 sirve para resolver el sistema lineal pentadiagonal y simetrico planteado.
El programa esta realizado con dimensionamiento dinamico y consta de las subrutinas indicadas
en el enunciado.
Se puede observar en el programa principal que la solucion del sistema, x, se almacena en
la misma posicion que ocupa el vector de terminos independientes, b. Esto se puede realizar
porque el vector b no se necesita para realizar calculos tras la resolucion del problema, y de
esta forma se ahorra espacio de memoria.
La matriz A se almacena mediante un esquema de almacenamiento optimo por diagonales.
Al ser A simetrica se ha considerado solamente la diagonal principal y las dos diagonales
superiores. De esta forma se requieren un total de 3n posiciones de memoria para almacenar la
matriz, cantidad muy inferior a las n2 posiciones necesarias si se almacena como como matriz
© Los autores, 1998; © Edicions UPC, 1998.
252 Metodos numericos
llena. Este almacenamiento optimo se puede realizar gracias a que en la resolucion del sistema
no es necesario pivotar.
Tabla 7.1.2 Fichero de resultados del caso xi = i
La matriz de entrada es:
1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00
1.000000E+00 2.000000E+00 4.000000E+00 8.000000E+00
1.000000E+00 3.000000E+00 9.000000E+00 2.700000E+01
1.000000E+00 4.000000E+00 1.600000E+01 6.400000E+01
El vector de entrada es:
4.000000E+00
1.500000E+01
4.000000E+01
8.500000E+01
El vector producto es:
1.440000E+02
8.740000E+02
2.704000E+03
6.144000E+03
El modulo del vector producto es: 6.770891E+03
El metodo de Gauss ha sido adaptado al almacenamiento optimo de nido para la matriz
A. La adaptacion se ha realizado en dos pasos. En primer lugar se ha adaptado el algoritmo a
matrices en banda con semianchos superior e inferior iguales a 2. Este primer paso consiste en
modi car los dos bucles internos en la fase de eliminacion (con contadores i y j) de forma que
solo recorran los elementos necesarios (en ambos casos de k+1 a k+2), y en separar las opera-
ciones que corresponden a k=n-1 del bucle principal. El segundo paso consiste en considerar
que la matriz es simetrica, y por lo tanto es su ciente trabajar con la parte triangular supe-
rior. Este segundo paso implica que, para matrices pentadiagonales, solo es necesario realizar
operaciones de la sobre tres coe cientes de la matriz para cada valor de k, con k de 1 a n-2,
y por tanto se ha sustituido el bucle en i por la asignacion directa i=k+1 e i=k+2. Respecto
de la sustitucion hacia atras solo es importante resaltar que los bucles se han modi cado de
forma adecuada, respetando el almacenamiento de la matriz. Por ultimo, cabe indicar que se
ha utilizado la funcion KPOS para relacionar la notacion matricial de A con el almacenamiento
vectorial utilizado.
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 253
c
c Este programa soluciona el sistema de ecuaciones
c A*x = b
c para el caso en que A es una matriz pentadiagonal
c simetrica y utilizando dimensionamiento dinamico
c________________________________________________________________
implicit real*8 (a-h,o-z)
parameter(mtot=3997)
dimension dd(mtot)
call lecdat(n)
call punter(n,na,nb,mtot)
call gendat(dd(na),dd(nb),n)
call gaus5s(dd(na),dd(nb),n)
call escres(dd(nb),n)
end
c___________________Lectura de datos
subroutine lecdat(n)
implicit real*8 (a-h,o-z)
common /datos/ act,bct,ect,yoct,pact,pbct
open(unit=10,file='pentadiagonal.dat',status='old')
read(10,'(I5)') n
read(10,'(5(E12.6,/),E12.6)')act,bct,ect,yoct,pact,pbct
close(10)
return
end
c___________________Definicion de punteros
subroutine punter(n,na,nb,mtot)
implicit real*8 (a-h,o-z)
na =1
nb =na+3*n
nend=nb+n
if (nend.gt.mtot) then
write(*,*)' Dimensionamiento insuficiente'
write(*,*)' se requieren',nend,' posiciones'
stop
endif
return
end
c___________________Generacion de la matriz y el vector
subroutine gendat(a,b,n)
implicit real*8 (a-h,o-z)
dimension a(5*n),b(n)
common /datos/ act,bct,ect,yoct,pact,pbct
© Los autores, 1998; © Edicions UPC, 1998.
254 Metodos numericos
c___Generar Matriz A
a(1) = 5.D0
a(n+1) =-4.D0
a(2*n+1)= 1.D0
do i=2,n-2
a( i)= 6.D0
a( n+i)=-4.D0
a(2*n+i)= 1.D0
enddo
a(n-1) = 6.D0
a(2*n-1)=-4.D0
a(n) = 5.D0
c___Generar Vector b
h =(bct-act)/dfloat(n+1)
aux1=h**4/(ect*yoct)*pact
aux2=h**5/(ect*yoct)*(pbct-pact)/(bct-act)
do i=1,n
b(i)=aux1+aux2*dfloat(i)
enddo
return
end
c___________________Algoritmo de Gauss adaptado
subroutine gaus5s(a,b,n)
implicit real*8 (a-h,o-z)
dimension a(3*n), b(n)
kpos(i,j) = n*(j-i)+i
c___Eliminacion
do k=1,n-2
i=k+1
fact=a(kpos(k,i))/a(kpos(k,k))
b(i)=b(i)-fact*b(k)
do j=k+1,k+2
a(kpos(i,j))=a(kpos(i,j))-fact*a(kpos(k,j))
enddo
i=k+2
fact=a(kpos(k,i))/a(kpos(k,k))
b(i)=b(i)-fact*b(k)
j=k+2
a(kpos(i,j))=a(kpos(i,j))-fact*a(kpos(k,j))
enddo
fact=a(kpos(n-1,n))/a(kpos(n-1,n-1))
b(n)=b(n)-fact*b(n-1)
a(kpos(n,n))=a(kpos(n,n))-fact*a(kpos(n-1,n))
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 255
c___Sustitucion hacia atras
b(n)=b(n)/a(kpos(n,n))
b(n-1)=(b(n-1)-a(kpos(n-1,n))*b(n))/a(kpos(n-1,n-1))
do i=n-2,1,-1
do j=i+1,i+2
b(i)=b(i)-a(kpos(i,j))*b(j)
enddo
b(i)=b(i)/a(kpos(i,i))
enddo
return
end
c___________________Escritura de los resultados
subroutine escres(x,n)
implicit real*8 (a-h,o-z)
dimension x(n)
open(unit=11,file='t7_p73.res',status='unknown')
write(11,'(6x,a3)' )' x '
write(11,'(n(E15.9,/))')(x(i),i=1,n)
close(11)
return
end
Prog. 7.2.1 Resolucion de sistemas lineales pentadiagonales simetricos
Apartado b)
El programa 7.2.1 se emplea para resolver sistemas lineales pentadiagonales con los datos
indicados. En la tabla 7.2.1 se muestran los resultados obtenidos con n = 5.
Tabla 7.2.1 Resultado para n = 5
x
.675154321E-02
.115740741E-01
.133101852E-01
.115740741E-01
.675154321E-02
© Los autores, 1998; © Edicions UPC, 1998.
256 Metodos numericos
Apartado c)
En la gura 7.2.1 se muestra la gra ca realizada en Excel en la que se presentan las tres
series de pares ordenados fti xig, con i = 0 :: n+ 1, correspondientes a n = 5, 19 y 99.
0,0E+00
2,0E-03
4,0E-03
6,0E-03
8,0E-03
1,0E-02
1,2E-02
1,4E-02
0,0 0,2 0,4 0,6 0,8 1,0
t
x
n=5
n=19
n=99
Fig. 7.2.1 Gra ca de las tres series de pares ordenados fti xig, con i = 0 :: n+1,
correspondientes a n = 5, 19 y 99
Para interpretar los resultados obtenidos es necesario explicar brevemente el problema f sico
asociado al sistema lineal de ecuaciones del enunciado. Este sistema se ha obtenido en la re-
solucion numerica de la ecuacion diferencial ordinaria que modela la deformada de una viga
bajo una carga repartida. Los pares ordenados fti xig corresponden a una serie de puntos uni-
formemente distribuidos segun el eje de la viga, ftig, y sus respectivas echas (desplazamientos
verticales), fxig. Cuanto mas na es la particion segun el eje de la viga (por tanto, con n
mayor), mas correcta es la aproximacion de la deformada obtenida. Esto se debe a dos motivos:
porque al tener mas puntos se puede representar mejor la deformada, y porque al aumentar n
cada uno de los puntos se obtiene con una precision mayor.
Con los datos del enunciado se calcula la deformada de una viga de longitud unidad bajo una
carga uniforme de valor unidad. En el gra co de la gura 7.2.1 se observa como las soluciones
para n = 19 y n = 99 son practicamente iguales, mientras que con n = 5 los puntos quedan un
poco desplazados.
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 257
Por ultimo, puesto que la ecuacion de la deformada de una viga bajo carga uniforme es
conocida, se puede comparar la solucion numerica obtenida mediante la solucion del sistema de
ecuaciones con la solucion anal tica. La echa en el punto medio de la viga es
x(t = b;a
2 ) = 5
384
p(b ;a)4
EI
Se puede veri car que el error relativo cometido con n = 99 es del orden de 10;4, y con n = 999
del orden de 10;6.
Problema 7.3
En la resolucion de este problema se considera que se trabaja con numeros reales en doble
precision y que el vector x se almacena en el mismo sitio que el vector b. En primer lugar se
compara el numero de reales que es necesario almacenar en cada alternativa. Posteriormente
se compara el numero de operaciones en coma otante (por tanto, entre variables reales) que
se realizan, y nalmente se concretan los resultados para n = 10, 100 y 1000.
Respecto de la primera alternativa (apartado a), la matriz A considerada como matriz llena
ocupa un total de n2 posiciones de memoria, y los vectores b y x ocupan en total n posiciones
mas. Por tanto es necesario almacenar n2 +n numeros reales en doble precision. En la segunda
alternativa (apartadob) se ha considerado que la matriz Aesta almacenada de forma optima por
diagonales. Por ser una matriz simetrica es su ciente almacenar las tres diagonales superiores
por tanto necesita 3n posiciones de memoria. Los vectores b y x ocupan la misma cantidad de
memoria que en la primera alternativa. Por tanto basta almacenar 4n numeros reales en doble
precision.
Respecto del numero de operaciones entre variables reales que se realizan, hay que considerar
las dos fases del metodo de Gauss: eliminacion y sustitucion hacia atras. Como se ha visto
en el cap tulo 6, la alternativa a requiere un total de (4n3 + 9n2 ;7n)=6 operaciones en coma
otante. En cambio, la alternativa b requiere tan solo 17n;25 operaciones. Para simpli car el
calculo de este numero de operaciones, se presenta en el programa 7.3.1 una version compacta
de la subrutina gaus5s del programa 7.2.1. Ambas subrutinas corresponden al mismo algoritmo
de Gauss adaptado a matrices pentadiagonales. En la nueva version (programa 7.3.1) es mas
dif cil ver la correspondencia con las distintas partes del algoritmo de Gauss estandar, pero es
mas sencillo contar el numero de operaciones en coma otante realizadas, y obtener el resultado
indicado.
En la tabla 7.3.1 se puede observar como al aumentar n las diferencias entre ambas al-
ternativas son cada vez mas elevadas. El coste computacional de la alternativa a desaconseja
claramente su uso para valores de n del orden de 100 o superiores.
© Los autores, 1998; © Edicions UPC, 1998.
258 Metodos numericos
subroutine gaus5s_b(a,b,n)
implicit real*8 (a-h,o-z)
dimension a(3*n), b(n)
c___Eliminacion
do k=1,n-2
fact =a(n+k)/a(k)
b(k+1) =b(k+1)-fact*b(k)
a(k+1) =a(k+1)-fact*a(n+k)
a(n+k+1)=a(n+k+1)-fact*a(2*n+k)
fact =a(2*n+k)/a(k)
b(k+2)=b(k+2)-fact*b(k)
a(k+2)=a(k+2)-fact*a(2*n+k)
enddo
fact=a(2*n-1)/a(n-1)
b(n)=b(n)-fact*b(n-1)
a(n)=a(n)-fact*a(2*n-1)
c___Sustitucion hacia atras
b(n)=b(n)/a(n)
b(n-1)=(b(n-1)-a(2*n-1)*b(n))/a(n-1)
do i=n-2,1,-1
b(i)=(b(i)-a(n+i)*b(i+1)-a(2*n+i)*b(i+2))/a(i)
enddo
return
end
Prog. 7.3.1 Modi cacion de la subrutina gaus5s del programa 7.2.1
Tabla 7.3.1 Comparacion del coste computacional de las dos alternativas de nidas en el problema 7.3
Alternativa a Alternativa b
Num. operaciones Memoria Num. operaciones Memoria
General (4n3 + 9n2 ;7n)=6 n2 + n 17n;25 4n
n = 10 638 880 b 145 320 b
n = 100 682 103 79 Kb 1675 13 Kb
n = 1000 668 106 7.6 Mb 17 103 31 Kb
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 259
Problema 7.4
Apartado a)
La matriz tridiagonal del sistema es diagonalmente dominante: para cada la, el coe ciente
diagonal es 2, y la suma de los dos coe cientes no diagonales hi=(hi +hi;1) y hi;1=(hi +hi;1)
es 1. Por este motivo, el pivotamiento no es necesario.
Apartado b)
El metodo de Thomas se obtiene particularizando el metodo de Crout al caso u = l = 1.
Puesto que A es una matriz triadiagonal, los vectores ck+1] y fk+1] de nidos en la ecuacion 6.34
solo tienen la ultima componente distinta de cero. Al resolver los sistemas triangulares inferiores
indicados en la ecuacion 6.37, se obtienen vectores uk+1] y lk+1] con la misma propiedad. As
pues, los factores L y U conservan los semianchos de banda de la matriz A.
Con estas consideraciones, las ecuaciones 6.38 pueden reducirse a
l11 = a11 u11 = 1
k = 1 ::: n ;1
8

:
uk k+1 = ak k+1 = lkk
lk+1 k = ak+1 k
lk+1 k+1 = ak+1 k+1 ;lk+1 k uk k+1
El almacenamiento puede optimizarse empleando una matriz rectangular R de n las y
3 columnas (vease el subapartado 7.4.4), que contiene la matriz tridiagonal A antes de la
descomposicion y los factores L y U despues. La relacion entre los ndices y (matriz R) y
los ndices i y j (matrices A, L y U) es = i y = 2+j;i. Las ecuaciones anteriores pueden
reescribirse como
k = 1 ::: n;1
(rk3 = rk3 = rk2
rk+1 2 = rk+1 2 ;rk1 rk3
Notese que se han suprimido algunas asignaciones que son innecesarias por el hecho de trabajar
con una unica matriz (vease el problema 6.2).
En cuanto a las sustituciones, siguiendo el procedimiento indicado en el problema 6.2, se
obtiene
b1 = b1 = r12
bi = (bi ;ri1bi;1) = ri2 i = 2 ::: n
bi = bi ;ri3bi+1 i = n;1 n;2 ::: 1
© Los autores, 1998; © Edicions UPC, 1998.
260 Metodos numericos
Apartado c)
Tanto en la descomposicion como en las sustituciones, se accede a los coe cientes de la
matriz Rpor las. En cambio, la matriz rectangular Resta almacenada por columnas (esquema
de almacenamiento por defecto en FORTRAN, vease el subapartado 7.4.1). Esto no resulta
adecuado desde el punto de vista de la paginacion, puesto que se trabaja con posiciones no
consecutivas de memoria. Podr a optarse por almacenar la matriz R por las en un vector f,
segun se indica en el subapartado 7.4.2. Sin embargo, esto complicar a un poco mas el esquema
de almacenamiento. Por este motivo, se pre ere trabajar con una matriz rectangular de 3 las
y n columnas (la traspuesta de la matriz R de n las y 3 columnas considerada hasta ahora).
Esto puede hacerse simplemente permutando los ndices en las ecuaciones del apartado b. Para
esta nueva matriz, el almacenamiento por columnas ya resulta adecuado.
Apartado d)
El programa 7.4.1 permite resolver sistemas tridiagonales mediante el metodo de Thomas.
La matriz del sistema se almacena en una matriz rectangular de 3 las y n columnas (veanse
las subrutinas build mat vec, descom LU y subs).
c
c Este programa calcula la solucion de un sistema tridiagonal
c de ecuaciones mediante el metodo de Thomas.
c
c Se emplea dimensionamiento dinamico y un esquema de
c almacenamiento por diagonales
c
c El fichero de datos rusa.dat contiene:
c *Linea 1: n (numero de puntos base interiores)
c *Lineas 2,...,n+3: x,f (valores de x e y en los apoyos)
c
c___________________________________________________________________
implicit real*8 (a-h,o-z)
parameter (mtot = 1000)
dimension dd(mtot)
c___Ficheros de datos y de resultados
open (unit=2, file='rusa.dat', status='unknown')
open (unit=4, file='rusa.res', status='unknown')
c___Lectura del numero de puntos base interiores
read (2,*) n
c___Definicion de los punteros
call puntero(n,nx,nf,nh,nt,na,nb,mtot)
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 261
c___Lectura de los datos
call get_data(n,dd(nx),dd(nf))
c___Generacion de la matriz y el vector de terminos independientes
call build_mat_vec(n,dd(nx),dd(nf),dd(nh),dd(nt),dd(na),dd(nb))
c___Descomposicion LU
call descom_LU(n,dd(na))
c___Sustituciones hacia adelante y hacia atras
call subs(n,dd(na),dd(nb))
c___Escritura de los resultados
call write_resul(n,dd(nb))
stop
end
c________________________________________Definicion de los punteros
subroutine puntero (n,nx,nf,nh,nt,na,nb,mtot)
implicit real*8 (a-h,o-z)
nx = 1
nf = nx + (n+2)
nh = nf + (n+2)
nt = nh + (n+1)
na = nt + (n+1)
nb = na + (3*n)
nend = nb + n
if (nend .gt. mtot) then
write(5,*) ' ERROR  Dimensionamiento insuficiente !'
write(5,*) ' se requieren',nend,' posiciones'
stop
endif
return
end
c______________________________________________Lectura de los datos
subroutine get_data (n,x,f)
implicit real*8 (a-h,o-z)
dimension x(0:n+1),f(0:n+1)
do 10 i=0,n+1
read (2,*) x(i),f(i)
10 continue
close (2)
return
end
© Los autores, 1998; © Edicions UPC, 1998.
262 Metodos numericos
c____Generacion de la matriz y el vector de terminos independientes
subroutine build_mat_vec (n,x,f,h,t,r,b)
implicit real*8 (a-h,o-z)
dimension x(0:n+1),f(0:n+1),h(0:n),t(0:n),r(3,n),b(n)
do 20 i=0,n
h(i)=x(i+1)-x(i)
t(i)=f(i+1)-f(i)
20 continue
r(1,1)=0.d0
do 50 i=2,n
r(1,i)=h(i)/(h(i)+h(i-1))
50 continue
do 60 i=1,n
r(2,i)=2.d0
b(i)=3.d0*(h(i)/(h(i-1)+h(i)))*(t(i-1)/h(i-1))
b(i)=b(i)+3.d0*(h(i-1)/(h(i-1)+h(i)))*(t(i)/h(i))
60 continue
do 70 i=1,n-1
r(3,i)=h(i-1)/(h(i)+h(i-1))
70 continue
r(3,n)=0.d0
return
end
c_________________________________________________Descomposicion LU
subroutine descom_LU(n,r)
implicit real*8 (a-h,o-z)
dimension r(3,n)
parameter(tol=1.d-5)
if(abs(r(2,1)).lt.tol) call cero_pivote(1)
r(3,1)=r(3,1)/r(2,1)
do i=2,n-1
r(2,i)=r(2,i)-r(1,i)*r(3,i-1)
if(abs(r(2,i)).lt.tol) call cero_pivote(i)
r(3,i)=r(3,i)/r(2,i)
end do
r(2,n)=r(2,n)-r(1,n)*r(3,n-1)
return
end
subroutine cero_pivote(ieq)
write(6,900)ieq
900 format(3x,'Pivote igual a cero,ecuacion numero: 'i5)
stop
end
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 263
c________________________Sustituciones hacia adelante y hacia atras
subroutine subs(n,r,b)
implicit real*8 (a-h,o-z)
dimension r(3,n),b(n)
b(1)=b(1)/r(2,1)
do i=2,n
b(i)=(b(i)-r(1,i)*b(i-1))/r(2,i)
end do
do i=n-1,1,-1
b(i)=b(i)-r(3,i)*b(i+1)
end do
return
end
c_______________________________________Escritura de los resultados
subroutine write_resul (n,b)
implicit real*8 (a-h,o-z)
dimension b(n)
write(4,100) 0,0.d0
do 60 i=1,n
write (4,100) i,b(i)
60 continue
write(4,100) n+1,0.d0
100 format (1x,'La pendiente en el apoyo ',i3,' es ',1pd13.6)
close (4)
return
end
Prog. 7.4.1 Resolucion de sistemas tridiagonales con el metodo de Thomas
Apartado e)
Para los datos indicados en el enunciado, se obtiene el archivo de resultados de la tabla
7.4.1. Para dibujar el trazado de la v a en una gra ca de Excel, debe tenerse en cuenta que las
cubicas si(x) (es decir, sus coe cientes) son distintas en cada uno de los n + 1 intervalos. Se
obtiene entonces la gra ca de la gura 7.4.1.
© Los autores, 1998; © Edicions UPC, 1998.
264 Metodos numericos
Tabla 7.4.1 Pendientes en los apoyos de la monta~na rusa
La pendiente en el apoyo 0 es 0.000000D+00
La pendiente en el apoyo 1 es 3.890094D-01
La pendiente en el apoyo 2 es -8.405664D-02
La pendiente en el apoyo 3 es -5.027829D-01
La pendiente en el apoyo 4 es 8.999935D-02
La pendiente en el apoyo 5 es 2.184029D-01
La pendiente en el apoyo 6 es -1.550568D-02
La pendiente en el apoyo 7 es -3.936095D-01
La pendiente en el apoyo 8 es 0.000000D+00
-3
-2
-1
0
1
2
3
4
5
6
0 10 20 30 40 50 60 70 80
coordenada x (metros)
altura(metros)
Fig. 7.4.1 Trazado en alzado de la monta~na rusa
La gra ca tiene en los puntos de apoyo las pendientes prescritas en la tabla 7.4.1. Puesto que
el sistema tridiagonal tiene solucion unica, este trazado es el unico que veri ca las condiciones
de dise~no: una cubica en cada intervalo, pendientes nulas en los extremos y continuidad C2.
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 265
Problema 7.5
Apartado a)
El vector lk+1], que contiene los elementos por encima de la diagonal de la columna k-
esima de la matriz LT, se calcula resolviendo el sistema triangular inferior Lk] lk+1] = fk+1].
Durante el proceso de sustitucion hacia adelante, se iran obteniendo ceros hasta encontrar el
primer elemento no nulo del vector fk+1] (k-esima columna de la matriz A). En consecuencia,
el skyline de las matrices LT y A es el mismo.
Apartado b)
Para adaptar el algoritmo de Cholesky a matrices en skyline, se siguen tres pasos. En primer
lugar, las ecuaciones 6.41 se reescriben de manera que 1) se trabaje con elementos del triangulo
superior (y no del inferior), y 2) la matriz LT se sobreescriba encima de A. Se obtiene entonces
a11 =
pa11
k = 1 ::: n;1
8

:
a1 k+1 = a1 k+1 = a11
ai k+1 =
0
@ai k+1 ;
i;1X
j=1
aji aj k+1
1
A = aii i = 2 ::: k
ak+1 k+1 =
vuutak+1 k+1 ;
kX
i=1
a2
i k+1
En segundo lugar, el algoritmo se adapta al per l en skyline eliminando las operaciones
innecesarias, pero sin variar el esquema de almacenamiento. El primer elemento no nulo del
vector lk+1] esta en la la ip = k+2;lk+1 +lk. En consecuencia, pueden modi carse los rangos
de los bucles y obtener
a11 =
pa11
k = 1 ::: n;1
8

:
ip = k + 2 ;lk+1 + lk
aip k+1 = aip k+1 = aip ip
ai k+1 =
0
@ai k+1 ;
i;1X
j=ip
aji aj k+1
1
A = aii i = ip+ 1 ::: k
ak+1 k+1 =
vuutak+1 k+1 ;
kX
i=ip
a2
i k+1
© Los autores, 1998; © Edicions UPC, 1998.
266 Metodos numericos
En tercer lugar, el esquema de almacenamiento se adapta al per l en skyline. Para ello, hay
que tener en cuenta que el elemento aij se almacena en la m-esima componente del vector c,
con m = l(j) ;(j ;i) (vease el subapartado 7.4.5):
c(1) =
p
c(1)
lkk = 1
k = 1 ::: n;1
8

:
lk = lkk
lkk = l(k + 1)
ip = k + 2 ;lk+1 + lk
lip = l(ip)
c(lk + 1) = c(lk + 1) = c(lip)
i = ip+ 1 ::: k
8

:
li = l(i)
c(lkk ;k ;1 + i) =
0
@c(lkk ;k ;1 + i) ;
i;1X
j=ip
c(li;i+ j) c(lkk ;k ;1 + j)
1
A = c(li)
c(lkk) =
vuutc(lkk) ;
kX
i=ip
c(lkk ;k ;1 + i)]2
Se han empleado las variables enteras auxiliares lk, lkk, lip y li para minimizar el numero
de veces que se accede a posiciones de memoria del vector de punteros l.
Problema 7.6
Apartado a)
Recorriendo la matriz A por columnas y guardando sus elementos no nulos en c, se obtiene
cT = (8 2 7 1 4 9 ;4 3 5 1 6 ;6)
El vector m de ndices de la de las componentes de c es
mT = (1 2 2 3 5 3 4 1 4 2 3 5)
y el vector l de punteros de la posicion en c del primer elemento de cada columna de A es
lT = (1 3 6 8 10 13)
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 267
Apartado b)
El producto de una matriz A llena por un vector x puede escribirse como
do i=1,n
y(i) = 0.d0
enddo
do j=1,n
do i=1,n
y(i)=y(i)+a(i,j)*x(j)
enddo
enddo
Con la ordenacion elegida para los bucles (el exterior en j y el interior en i), la matriz A
se recorre por columnas. Esto permite adaptar el algoritmo de multiplicacion a un esquema de
almacenamiento comprimido por columnas:
do i=1,n
y(i) = 0.d0
enddo
do j=1,n
do i=l(j),l(j+1)-1
y(m(i)) = y(m(i)) + c(i)*x(j)
enddo
enddo
Notese que, con la ayuda del vector l, en el bucle DO|ENDDO interior (en i) se recorren
solamente los elementos no nulos de la columna j (almacenados en el vector c).
© Los autores, 1998; © Edicions UPC, 1998.
268 Metodos numericos
10.7 Problemas del cap tulo 8
Problema 8.1
Apartado a)
Los programas 8.1 y 8.2 (apartado 8.5) permiten calcular numericamente la integral in-
de nida
R =2
0 sin(x)dx mediante el metodo de las aproximaciones rectangulares y el metodo
compuesto del trapecio. Modi cando en estos programas las instrucciones de escritura de re-
sultados, de manera que se escriba por pantalla el error absoluto, y ejecutando los programas
para los distintos valores de n que aparecen en las tablas 8.1 y 8.2, se obtienen los resultados
de la tabla 8.1.1.
Tabla 8.1.1 Error absoluto en el calculo de
R =2
0 sin(x)dx por el metodo de las aproximaciones rectan-
gulares (Einf, Esup) y por el metodo compuesto del trapecio (ET)
n h Einf Esup ET
1 1.57080D+00 0.10000D+01 0.57080D+00 0.21460D+00
2 7.85298D+00 0.44464D+00 0.34076D+00 0.51941D-01
5 3.14159D+00 0.16532D+00 0.14884D+00 0.82382D-02
10 1.57080D-01 0.80597D-01 0.76483D-01 0.20570D-02
100 1.57080D-02 0.78745D-02 0.78334D-02 0.20562D-04
1000 1.57080D-03 0.78560D-03 0.78519D-03 0.20562D-06
10000 1.57080D-04 0.78542D-04 0.78538D-04 0.20561D-08
En esta tabla se puede observar como la convergencia a la solucion anal tica del problema,R =2
0 sin(x)dx = 1, es considerablemente mejor para el metodo compuesto del trapecio.
Apartado b)
A partir de los resultados del apartado anterior se puede obtener la gura 8.1.1 donde se
representa logaritmo de E versus logaritmo de n para las dos tecnicas mencionadas.
Apartado c)
Para un metodo lineal, el error en funcion del numero de subintervalos n se comporta segun
la expresion
© Los autores, 1998; © Edicions UPC, 1998.
10 Resolucion de los problemas propuestos 269
1,E-09
1,E-08
1,E-07
1,E-06
1,E-05
1,E-04
1,E-03
1,E-02
1,E-01
1,E+00
1,E+00 1,E+01 1,E+02 1,E+03 1,E+04
Rect. Inf.
Rect. Sup.
Trapecio
Fig. 8.1.1 Comparacion de dos metodos para el calculo de
R =2
0 sin(x)dx
E = C
n
donde C es una constante independiente de n. Tomando logaritmos a ambos lados se obtiene
la expresion equivalente
logE = K ;logn
con K = logC independiente de n. As , para un metodo lineal, si se representa logE en funcion
de logn se obtiene una recta con pendiente ;1.
Analogamente, para un metodo cuadratico el error se comporta segun
E = C
n2
donde C es una constante independiente de n. Y tomando logaritmos a ambos lados se obtiene
la expresion
logE = K ;2logn
Si para un metodo cuadratico se representa logE en funcion de logn se obtiene una recta con
pendiente menos ;2.
© Los autores, 1998; © Edicions UPC, 1998.

Más contenido relacionado

PDF
Metodos
PDF
Software libre.
PDF
Iniciate En El Marketing 2.0 1er Cap
PDF
Xhtml tuto beta
PDF
PST Manual de usuario
PDF
Aplicaciones web
PDF
PDF
Guia microsoft word
Metodos
Software libre.
Iniciate En El Marketing 2.0 1er Cap
Xhtml tuto beta
PST Manual de usuario
Aplicaciones web
Guia microsoft word

Similar a Metodos numericosintroduccionaplicacionesy programacionenfortran (20)

PDF
Fortran15.pdf
PDF
Fundamentos de Programacion.pdf
PDF
Matlab adv esp
PDF
Programacion en Phyton desde ce..........................ro
PDF
Manual dematlab
PDF
Introducción al r
PDF
Introducción a la programación en c
PDF
Introducción a la programación en C
PDF
Algoritmosy estructurasdedatos2015 1
PDF
Guía #8 - Ciclos Iterativos Anidados.pdf
PDF
Matematicas en ingenieria_con_matlab_y_o
PDF
PDF
Vba excel mnumericos1
PDF
Vba excel numericos
PDF
Vba excel mnumericos
PDF
Algoritmos programacion-python
PDF
Algoritmos y programacion_i_-_con_lengua
PDF
Manual completo python
PDF
Python desde 0
Fortran15.pdf
Fundamentos de Programacion.pdf
Matlab adv esp
Programacion en Phyton desde ce..........................ro
Manual dematlab
Introducción al r
Introducción a la programación en c
Introducción a la programación en C
Algoritmosy estructurasdedatos2015 1
Guía #8 - Ciclos Iterativos Anidados.pdf
Matematicas en ingenieria_con_matlab_y_o
Vba excel mnumericos1
Vba excel numericos
Vba excel mnumericos
Algoritmos programacion-python
Algoritmos y programacion_i_-_con_lengua
Manual completo python
Python desde 0
Publicidad

Último (20)

PDF
prg2_t01_p01_Fundamentos POO - parte1.pdf
DOC
informacion acerca de la crianza tecnificada de cerdos
PPT
TRABAJOS EN ALTURA PARA OBRAS DE INGENIERIA
PPTX
MODULO 1.SEGURIDAD Y SALUD CONCEPTOS GENERALES.pptx
PDF
Pensamiento Politico Siglo XXI Peru y Mundo.pdf
PDF
FIJA NUEVO TEXTO DE LA ORDENANZA GENERAL DE LA LEY GENERAL DE URBANISMO Y CON...
PDF
Durabilidad del concreto en zonas costeras
PDF
Curso Introductorio de Cristales Liquidos
PPT
Sustancias Peligrosas de empresas para su correcto manejo
PDF
Copia de Presentación Propuesta de Marketing Corporativo Blanco y Negro.pdf
PPTX
Curso Corto de PLANTA CONCENTRADORA FREEPORT
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
DOCX
Cumplimiento normativo y realidad laboral
PPTX
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
PPTX
A8B08CED-D3D9-415C-B4A3-2A6CA6409A48.1.1Presentación Dirección 2022 unidade...
PDF
Informe Estudio Final Apagon del 25 de febrero
PPTX
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
DOCX
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
PDF
TESTAMENTO DE DESCRIPTIVA ..............
PPTX
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
prg2_t01_p01_Fundamentos POO - parte1.pdf
informacion acerca de la crianza tecnificada de cerdos
TRABAJOS EN ALTURA PARA OBRAS DE INGENIERIA
MODULO 1.SEGURIDAD Y SALUD CONCEPTOS GENERALES.pptx
Pensamiento Politico Siglo XXI Peru y Mundo.pdf
FIJA NUEVO TEXTO DE LA ORDENANZA GENERAL DE LA LEY GENERAL DE URBANISMO Y CON...
Durabilidad del concreto en zonas costeras
Curso Introductorio de Cristales Liquidos
Sustancias Peligrosas de empresas para su correcto manejo
Copia de Presentación Propuesta de Marketing Corporativo Blanco y Negro.pdf
Curso Corto de PLANTA CONCENTRADORA FREEPORT
Manual ISO9001_2015_IATF_16949_2016.pptx
Cumplimiento normativo y realidad laboral
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
A8B08CED-D3D9-415C-B4A3-2A6CA6409A48.1.1Presentación Dirección 2022 unidade...
Informe Estudio Final Apagon del 25 de febrero
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
TESTAMENTO DE DESCRIPTIVA ..............
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
Publicidad

Metodos numericosintroduccionaplicacionesy programacionenfortran

  • 1. Métodos numéricos. Introducción, aplicaciones y propagación Antonio Huerta Cerezuelo Josep Sarrate-Ramos Antonio Rodríguez-Ferran
  • 2. Primera edición:septiembre de 1998 Con la colaboración del Servei de Publicacions de la UPC Diseño de la cubierta: Antoni Gutiérrez © los autores, 1998 © Edicions UPC, 1998 Edicions de la Universitat Politècnica de Catalunya, SL Jordi Girona Salgado 31, 08034 Barcelona Tel. 934 016 883 Fax. 934 015 885 Edicions Virtuals: www.edicionsupc.es e-mail: edupc@sg.upc.es Producción: CPET (Centre de Publicacions del Campus Nord) La Cup. C. Gran Capità s/n, 08034 Barcelona Depósito legal: B-31.600-98 ISBN: 84-8301-265-0 Quedan rigurosamente prohibidas, sin la autorización escrita de los titulares del copyright, bajo las sanciones establecidas en las leyes, la reproducción total o parcial de esta obra por cualquier medio o procedimiento, comprendidos la reprografía y el tratamiento informático y la distribución de ejemplares de ella mediante alquiler o préstamo públicos, así como la exportación e importación de ejemplares para su distribución y venta fuera del ámbito de la Unión Europea.
  • 3. Indice i Indice Prologo vii 1 Introduccion al uso de los ordenadores 1 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 1.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 1.2 Tipos de ordenadores : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 1.3 Ordenadores digitales : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3 1.4 Software : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6 1.5 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7 2 Introduccion a los sistemas operativos 9 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9 2.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9 2.2 Estructura de directorios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10 2.3 Edicion de un archivo : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 11 2.4 Manipulacion de cheros : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 12 2.4.1 Sintaxis de comandos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13 2.4.2 Comodines : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14 2.4.3 Especi cacion de directorios : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14 2.5 Utilizacion del entorno Windows : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16 2.5.1 Los elementos del entorno Windows : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 17 2.5.2 Las ventanas del Windows : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21 2.6 Introduccion al manejo de Excel : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23 2.6.1 Paso 1: Introduccion de constantes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25 2.6.2 Paso 2: Introduccion de formulas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 26
  • 4. ii Metodos numericos 2.6.3 Paso 3: Arrastre de formulas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 27 2.6.4 Paso 4: Modi cacion dinamica: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 28 2.6.5 Representacion gra ca : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29 2.6.6 Importacion de resultados : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 30 2.7 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 35 3 Introduccion a la programacion FORTRAN 37 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37 3.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37 3.2 Fases del desarrollo de un programa en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37 3.3 Organizacion general de un programa en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39 3.3.1 Normas de escritura de un programa en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : 39 3.3.2 Elementos de un programa en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 40 3.4 Constantes y variables en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 41 3.4.1 Constantes y variables enteras : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 42 3.4.2 Constantes y variables reales : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 43 3.4.3 Constantes y variables complejas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45 3.4.4 Constantes y variables logicas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47 3.4.5 Constantes y variables alfanumericas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 48 3.4.6 Sentencia IMPLICIT : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 49 3.5 Funciones en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 50 3.6 Sentencias de entrada{salida en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51 3.7 Sentencias de control en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53 3.7.1 La sentencia IF : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54 3.7.2 La sentencia GO TO : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 55 3.7.3 El bloque DO{ENDDO : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57 3.8 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 61 4 Numero, algoritmo y errores 63 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63 4.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 63 4.2 Numero : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64 4.2.1 Almacenamiento de los numeros enteros : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 65 4.2.2 Almacenamiento de los numeros reales : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67
  • 5. Indice iii 4.2.3 Over ow y under ow : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69 4.3 Algoritmo : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70 4.4 Errores : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72 4.4.1 Error absoluto, error relativo y cifras signi cativas : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72 4.4.2 Clasi cacion de los errores : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 75 4.5 Propagacion del error : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76 4.5.1 Conceptos previos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76 4.5.2 Propagacion del error en la suma : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 78 4.5.3 Propagacion del error en la resta : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79 4.5.4 Propagacion del error en el producto : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80 4.5.5 Propagacion del error en la division : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80 4.5.6 Propagacion del error en una funcion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81 4.6 Analisis de perturbaciones : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 82 4.7 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87 5 Ceros de funciones 89 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89 5.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89 5.1.1 Calculo de ra ces cuadradas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90 5.1.2 Como jugar al billar en una mesa circular : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90 5.2 Metodo de la biseccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 92 5.3 Criterios de convergencia : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 96 5.4 Metodo de Newton : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98 5.4.1 Deduccion anal tica del metodo de Newton : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 98 5.4.2 Deduccion gra ca del metodo de Newton : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 99 5.5 Metodo de la secante : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 102 5.6 Gra cas de convergencia : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 103 5.7 Aspectos computacionales: las funciones externas FUNCTION en FORTRAN : : : : : : 104 5.8 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 115 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 117 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 117 6.1 Consideraciones generales : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 117
  • 6. iv Metodos numericos 6.1.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 117 6.1.2 Planteamiento general : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 119 6.1.3 Resolucion algebraica: metodo de Cramer : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 119 6.1.4 Resolucion numerica: un enfoque global : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 121 6.2 Metodos directos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 124 6.2.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 124 6.2.2 Sistemas con solucion inmediata : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 125 Matriz diagonal : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 125 Matriz triangular superior : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 125 Matriz triangular inferior : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 126 6.2.3 Metodos de eliminacion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 126 Metodo de Gauss : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 126 Metodo de Gauss-Jordan : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 131 Analisis matricial del metodo de Gauss: Gauss compacto : : : : : : : : : : : : : : : : : 133 6.2.4 Metodos de descomposicion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 138 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 138 Metodo de Crout : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 140 Metodo de Cholesky : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 143 Metodos LDU y LDLT : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 144 6.3 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 145 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 147 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147 7.1 Programacion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147 7.1.1 Dimensionamiento de matrices : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147 7.1.2 Programacion estructurada: subrutinas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 152 7.2 Sistemas con solucion inmediata: programacion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 157 7.2.1 Matriz diagonal : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 157 7.2.2 Matriz triangular inferior : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 158 7.3 Consideraciones sobre la memoria : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 160 7.3.1 Tipos de memoria : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 160 7.3.2 Dimensionamiento dinamico : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 161 7.4 Almacenamiento de matrices : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 165
  • 7. Indice v 7.4.1 Almacenamiento por defecto en FORTRAN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 165 7.4.2 Almacenamiento por las y por columnas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 166 Almacenamiento por columnas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 166 Almacenamiento por las : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 167 7.4.3 Matrices simetricas o matrices triangulares : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 168 Matriz triangular superior : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 168 7.4.4 Matrices en banda : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 169 7.4.5 Almacenamiento en skyline : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 173 7.4.6 Almacenamiento compacto : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 176 Almacenamiento comprimido por las : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 176 Producto de matriz por vector : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 177 7.5 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 177 8 Aplicaciones al calculo integral 179 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 179 8.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 179 8.2 El metodo de las aproximaciones rectangulares : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 182 8.3 El metodo compuesto del trapecio : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 183 8.4 Extension al calculo de volumenes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 187 8.5 Apendice : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 189 8.6 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 191 9 Aplicaciones al calculo diferencial 193 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 193 9.1 Introduccion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 193 9.1.1 Ecuacion diferencial ordinaria de primer orden : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 193 9.1.2 Ecuaciones diferenciales ordinarias de orden superior a uno : : : : : : : : : : : : : : : : : : : 194 9.1.3 Reduccion de una EDO de orden n a un sistema de n EDOs de primer orden : 195 9.2 El metodo de Euler : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 197 9.3 El metodo de Heun : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 201 9.4 Extension a un sistema de EDOs de primer orden : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 203 9.5 Apendice : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 204 9.6 Bibliograf a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 207
  • 8. vi Metodos numericos 10 Resolucion de los problemas propuestos 209 Objetivos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 209 10.1 Problemas del cap tulo 2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 209 10.2 Problemas del cap tulo 3 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 215 10.3 Problemas del cap tulo 4 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 221 10.4 Problemas del cap tulo 5 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 233 10.5 Problemas del cap tulo 6 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 244 10.6 Problemas del cap tulo 7 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 250 10.7 Problemas del cap tulo 8 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 268 10.8 Problemas del cap tulo 9 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 273
  • 9. Prologo vii Prologo Este libro presenta una breve introduccion a los metodos numericos. Abarca desde la in- troduccion a los ordenadores y la programacion en lenguaje FORTRAN hasta las aplicaciones, haciendo una incursion en los metodos numericos propiamente dichos. De hecho, todos los temas del libro se tratan de forma basica. Solo al abordar los metodos directos para sistemas lineales de ecuaciones se profundiza mas, buscando dar una base solida, puesto que es uno de los temas fundamentales en metodos numericos para ingenier a. Las erratas y errores son completamente atribuibles a los autores. Sin embargo, los aciertos, tanto en el enfoque como en el contenido, son de todos los profesores que participan y han participado en las asignaturas de metodos numericos que impartimos. Seguramente, de entre todos ellos, el mas se~nalado es Manuel Casteleiro, maestro de todos nosotros.
  • 10. 1 Introduccion al uso de los ordenadores 1 1 Introduccion al uso de los ordenadores Objetivos Describir las diferencias conceptuales entre los ordenadores analogicos y digitales. Presentar las caracter sticas principales de los componentes basicos de un ordenador personal. 1.1 Introduccion Durante las ultimas decadas, el ordenador se ha convertido en una de las herramientas mas potentes y utiles de que dispone el ingeniero. Su utilizacion abarca desde la fase de dise~no y validacion experimental en un laboratorio, hasta la fase de construccion o produccion industrial, pasando por la confeccion de planos y la redaccion de los pliegos de condiciones en los que se utilizan diferentes equipos de CAD y o matica. Paralelamente a este auge tambien ha aparecido la necesidad de recurrir a diferentes, y cada vez mas so sticados, metodos numericos en varias de las anteriores fases. A la vista de lo anterior y aunque el objetivo de este libro no sea el estudio detallado del funcionamiento interno de un ordenador, es muy interesante que un ingeniero posea unos conocimientos m nimos sobre dicho funcionamiento. Ademas, este conocimiento le facilitara la comprension de los lenguajes de programacion as como el analisis e interpretacion tanto de los resultados obtenidos como de los posibles errores de programacion. 1.2 Tipos de ordenadores Desde el punto de vista conceptual, existen dos tipos de ordenadores: los ordenadores analogicos y los digitales. Los ordenadores analogicos se basan en una analog a entre las ecua- ciones que rigen el problema que se desea simular y un fenomeno f sico facilmente reproducible © Los autores, 1998; © Edicions UPC, 1998.
  • 11. 2 Metodos numericos en el laboratorio. Se caracterizan por: 1. Ser dif cilmente programables. Es decir, se dise~nan espec camente para un tipo de pro- blema. 2. La velocidad de calculo depende del fenomeno f sico que se utiliza para simular el problema que se desea resolver. Con el proposito de ilustrar el funcionamiento de este tipo de ordenadores supongase que se debe dise~nar un determinado tipo de suspension. En un estudio preliminar se puede aproximar el sistema de suspension por un muelle perfectamente elastico (de constante elastica k) y un amortiguador viscoso (de viscosidad c) instalados en paralelo como muestra la gura 1.1.a. As mismo se puede aproximar el cuerpo que reposa sobre dicho sistema por una masa puntual m. a) b) Fig. 1.1 a) esquema del tipo de amortiguador que se desea estudiar b) ordenador analogico utilizado para su estudio De acuerdo con la segunda ley de Newton, si sobre la masa puntual m actua una fuerza f(t), su movimiento se puede describir mediante la ecuacion f(t) ; kx(t) ; c_x(t) ; mx(t) = 0 (1:1) donde x(t), _x(t) y x(t) representan la posicion, velocidad y aceleracion de la masa puntual respectivamente. Si se desea construir un ordenador analogico que permita simular el problema anterior, es © Los autores, 1998; © Edicions UPC, 1998.
  • 12. 1 Introduccion al uso de los ordenadores 3 imprescindible hallar un fenomeno que pueda ser descrito mediante una ecuacion similar a la 1.1. Para ello, se puede construir un circuito electrico por el que circule una corriente de intensidad I, formado por una fuente de alimentacion de potencial E(t), conectada en serie a una bobina de inductancia L, a un condensador de capacidad C y una resistencia R, como muestra la gura 1.1.b. De acuerdo con la ley de Ohm y puesto que la intensidad es la derivada temporal de la carga electrica (I = _q(t)), la diferencia de potencial entre los bornes de la fuente de alimentacion veri ca E(t) ; 1 C q(t) ; R _q(t) ; L q(t) = 0 (1:2) Como puede observarse, las ecuaciones que rigen ambos problemas son del mismo tipo, de forma que obteniendo los factores de escala pertinentes se puede predecir el comportamiento del sistema de suspension a partir del circuito electrico. Es importante resaltar que este tipo de ordenador permite simular, casi en tiempo real, el anterior sistema de suspension. Sin embargo, no permite calcular otras cosas, como por ejemplo las ra ces de una ecuacion de segundo grado. Por estas razones, en la actualidad la utilizacion de los ordenadores analogicos se limita, basicamente, a equipos de laboratorio destinados a la adquisicion de datos. Por el contrario, los ordenadores digitales basan su funcionamiento en las diferentes propie- dades de los componentes electronicos que los constituyen. Conceptualmente se identi can por su capacidad de realizar operaciones logicas y aritmeticas con d gitos. Se caracterizan por: 1. Ser facilmente programables. En este sentido, se dice que son ordenadores de proposito general. 2. Presentar una gran potencia de calculo. 3. La velocidad de calculo depende del tipo de ordenador, pero, en general, suele ser inferior a la de los ordenadores analogicos. 1.3 Ordenadores digitales Los ordenadores con los que habitualmente se trabaja (PCs, estaciones de trabajo, super- ordenadores, :::) son ordenadores digitales. Su funcionamiento se basa en un soporte f sico o hardware constituido por todos los componentes materiales que lo forman (circuitos integrados, placas, pantallas, discos, :::), y un soporte logico o software compuesto por un conjunto de programasque gestionan y/o se pueden ejecutar en el ordenador. Se denomina sistema operativo al conjunto de programas y utilidades necesarios para el funcionamiento del ordenador. El hardware de un ordenador se compone basicamente de: 1) la unidad central de proceso o CPU (Central Processing Unit) existen ordenadores con mas de una CPU 2) la memoria central 3) la unidad de control de entrada y salida con los perifericos 4) la unidad de control de comunicacion por red y 5) los perifericos (ver gura 1.2). © Los autores, 1998; © Edicions UPC, 1998.
  • 13. 4 Metodos numericos 1. La unidad central de proceso (CPU) es el componente del ordenador encargado de ejecutar las instrucciones y los programas que residen, total o parcialmente, en la memoria. A nivel conceptual se compone de dos unidades. La primera se denomina unidad de control y se en- carga de controlar la ejecucion de los programas. La segunda es la unidad aritmetico{logica, que se encarga de realizar las operaciones ordenadas por la unidad de control sobre los datos que esta le suministra: suma, resta, multiplicacion, division, concatenacion, comparacion, etc. 2. La memoria es el componente del ordenador encargado de almacenar los datos y los progra- mas que debe tratar la CPU. Se denomina memoria RAM (Random Access Memory) a la parte de la memoria del ordenador susceptible de ser modi cada. En consecuencia, en ella residen los programasque desarrollan los usuarios y los datos que dichos programasprecisan, as como una parte de los programas que gestionan el funcionamiento del ordenador. Se denomina memoria ROM (Read Only Memory) a la parte de la memoria que no es posible modi car y, en consecuencia, solo puede ser le da. En ella reside la parte m nima del sistema operativo necesaria para que el ordenador se pueda poner en marcha. Por ultimo se debe mencionar que la velocidad con que se puede acceder a los datos almacenados en este tipo de memorias es muy inferior (ordenes de magnitud) a la velocidad con que la CPU puede operar con ellos. A n de paliar estas diferencias, entre la memoria del ordenador y su CPU se instala una memoria adicional llamada memoria cache (ver gura 1.2), que se caracte- riza por una velocidad de acceso muy superior, por una capacidad de almacenamiento muy inferior, y en general, por un precio muy elevado. 3. La unidad de control de entrada y salida (E/S) con los perifericos es el componente del ordenador destinado a controlar y gestionar la comunicacion con los diferentes perifericos conectados al mismo. 4. La unidad de control de comunicacion por red es el componente del ordenador encargado del control y la gestion de los dispositivos destinados a la comunicacion entre ordenadores mediante cable coaxial, bra optica o cualquier otro soporte similar. 5. Los perifericosson todos aquellos componentes del ordenadorque facilitan su funcionamiento y la comunicacion entre el y los usuarios. Por ejemplo: a) Unidades de discos jos b) Unidades de discos extra bles c) Unidades de cintas magneticas d) Pantallas e) Teclados © Los autores, 1998; © Edicions UPC, 1998.
  • 14. 1 Introduccion al uso de los ordenadores 5 f) Impresoras g) Plotters h) Equipos de lectura optica (scanners, :::) i) Digitalizadores k) Equipos de comunicacion mediante l neas telefonicas (modems) Fig. 1.2 Organizacion y estructura del hardware de un ordenador En este curso de metodos numericos se utilizara, basicamente, un tipo de ordenador digital denominado ordenador personal o PC (Personal Computer). Como su propio nombre indica, es un tipo de ordenador dise~nado para que lo utilice un solo usuario y que este sea el respon- sable de su gestion (en contraposicion a los ordenadores dise~nados para ser utilizados por varios usuarios al mismo tiempo y gestionados por una persona especialmente formada a tal efecto, denominados ordenadores multiusuario). Sin embargo, debido al gran nivel de expansion y a la ingente disponibilidad de software sobre este tipo de plataformas, ha sido preciso desarrollar nuevosprocedimientos que permitan compartirrecursosy gestionarconjuntos de PCsdestinados a un mismo tipo de trabajo. En consecuencia, han aparecido en el mercado los productos de hardware y software necesarios para realizar dicha conexion. De esta forma han nacido las denominadas redes de PCs que no son mas que un conjunto de ordenadores personales conectados, entre los cuales hay uno, denominado servidor (server), destinado a gestionar y servir recursos al resto de equipos. © Los autores, 1998; © Edicions UPC, 1998.
  • 15. 6 Metodos numericos 1.4 Software Desde un punto de vista muy generico el software existente en un ordenador se puede clasi car en: 1) sistema operativo 2) programas o utilidades genericas y 3) programas y cheros de los usuarios. 1. Como se ha comentado anteriormente, el sistema operativo esta formado por un conjunto de programas encargados de gestionar el funcionamiento del ordenador. Sus tareas cubren un rango muy amplio de aplicaciones que van desde transmitir a la CPU determinados datos hasta visualizar por pantalla el contenido de un archivo. 2. Las utilidades genericas son programas comercializados por el mismo fabricante del orde- nador, o por otra marcas comerciales, que permiten realizar tareas muy diversas, como por ejemplo correo electronico, compiladores, bases de datos, procesadores de texto, entre otras. Estas aplicaciones basan su funcionamiento en el sistema operativo. 3. Los programas y cheros de los usuarios contienen el trabajo que realizan los diferentes usuarios del ordenador. Su funcionamiento y utilizacion se basa tanto en las utilidades genericas como en el propio sistema operativo. Tabla 1.1 Equivalencia entre las diferentes unidades de medida de la informacion UNIDADES DE MEDIDA DE LA INFORMACION Valor original Valor equivalente 1 byte 8 bits 1 Kbyte 1024 bytes 1 Mbyte 1024 Kbytes 1 Gbyte 1024 Mbytes Puesto que el espacio disponible para almacenar todos estos programas y datos es limitado, los usuarios de un ordenador deben poder saber cuanta informacion contiene cada programa (en otras palabras: cuanto ocupa). En un ordenador toda la informacion (programas, datos, etc.) se almacena en sistema binario, esto es, mediante secuencias de unos (1) y ceros (0). A la cantidad m nima de informacion, es decir, un (1) o un (0), se la denomina bit. Evidentemente, esta unidad es demasiado peque~na para medir la cantidad de informacion que normalmente se maneja en un ordenador. En consecuencia, se de nen algunos multiplos del bit (ver tabla 1.1). © Los autores, 1998; © Edicions UPC, 1998.
  • 16. 1 Introduccion al uso de los ordenadores 7 Se denomina byte a una cadena de ocho bits, por ejemplo: 10101010 01101110 As mismo, se de ne un kilobyte (Kbyte) como 1024 bytes (1024 8 = 8192 bits). Del mismo modo se de ne un megabyte (Mbyte) como 1024 Kbytes y un gigabyte (Gbyte) como 1024 Mbytes. Mientras que las unidades anteriores son totalmente estandares y ampliamente utilizadas, en algunos ordenadores se de ne otra unidad denominada bloque que equivale a 512 bytes (1/2 Kbyte). 1.5 Bibliograf a Bishop, P. Conceptos de informatica. Anaya, 1989. Borse, G.J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e ingenier a. Anaya, 1989. Guilera Aguera, Ll. Introduccion a la informatica. Edunsa, 1988. © Los autores, 1998; © Edicions UPC, 1998.
  • 17. 2 Introducci on a los sistemas operativos 9 2 Introducci on a los sistemas operativos Escrito en colaboraci on con Miguel Angel BRETONES Objetivos Establecer la organizaci on de los archivos seg un una estructura de directorios y subdirectorios. Describir las principales instrucciones del sistema operativo MS-DOS. Familiarizarse con el entorno MS Windows. Presentar las principales caracter sticas de la hoja de c alculo MS Excel. 2.1 Introducci on Se denomina sistema operativo al conjunto de programas y utilidades necesarios para el funcionamiento del ordenador. Existen en la actualidad multitud de sistemas operativos, gran parte de ellos asociados casi un vocamente a un tipo de ordenador. As , el sistema operativo de la inmensa mayor a de los ordenadores personales es el llamado MS-DOS abreviatura de MicroSoft Digital Operating System. El conocimiento del sistema operativo consiste, desde el punto de vista del usuario, en aprender a comunicarse con el ordenador de manera que este ejecute ordenes. De esta manera, todo se reduce a conocer la manera de transmitirle instrucciones sin que sea necesario, por ejemplo, saber c omo est a programado el sistema operativo. El MS-DOS de ahora en adelante DOS naci o a nales de los 80; actualmente el uso del entorno Windows se encuentra ampliamente generalizado. El Windows, en cualquiera de © Los autores, 1998; © Edicions UPC, 1998.
  • 18. 10 M etodos num ericos sus sucesivas versiones, es un sistema operativo basado en la plataforma del DOS es decir, aprovecha todas las facilidades que este proporciona pero con vocaci on de resultar m as c omodo de manejo para el usuario. Desde este punto de vista, no puede ser considerado estrictamente distinto del DOS. En muchos casos, tan s olo cambia el interfase el canal de comunicaci on o la manera de transmitir instrucciones con la m aquina. A medida que el entorno Windows ha ido evolucionando, las diferencias por cuanto a facilidad y agilidad de uso se han ido acentuando, pero siempre conservando la mayor parte de ventajas y carencias del DOS. Antes de conocer las instrucciones fundamentales de cualquiera de estos sistemas, conviene de nir algunos conceptos b asicos generales, que son de aplicaci on com un a todo sistema opera- tivo. 2.2 Estructura de directorios Cualquier informaci on, programa, hoja de datos o de resultados, etc., contenida en un ordenador debe estar almacenada en un archivo o chero. Este t ermino hace referencia a un concepto de software: la informaci on est a contenida en cheros desde el punto de vista del software y no del hardware, desde el que se podr a hablar de informaci on almacenada en la memoria RAM, en el disco duro,: : : El s mil m as frecuentemente empleado para describir esta idea consiste en imaginar la memo- ria del ordenador como un archivador. Cada una de las hojas de los diversos expedientes, car- petas o libros almacenados en el ser a un chero inform atico. Naturalmente, las hojas pueden contener informaci on muy diversa, desde poes as a crucigramas, pasando por apuntes de clase, problemas, etc. Ahora bien, resulta razonable suponer que los cheros deber an organizarse siguiendo una es- tructura ordenada que facilite su gesti on: es evidente la diferencia que existe entre un archivador cuyo contenido est a correctamente clasi cado y las mismas hojas almacenadas desordenada- mente en una caja. As , los cheros se agrupan en directorios y subdirectorios, tambi en llama- dos carpetas en el entorno Windows. Siguiendo con el ejemplo del archivador, los directorios representar an las carpetas donde se guardan las hojas de papel. El concepto de directorio es general e independiente del sistema operativo concreto que se est e tratando. No existe una diferencia formal entre directorio y subdirectorio. Usualmente se denomina subdirectorio a aquel directorio contenido en otro directorio. Es perfectamente posible que unos directorios contengan a otros, de la misma manera que una carpeta puede contener, a su vez, otras carpetas junto con hojas sueltas. An alogamente, no puede ocurrir que un archivo contenga directorios. Se puede establecer as una estructura de arbol en la que archivos y directorios se organizan en funci on de a qu e directorio superior aquel que los contiene pertenezcan. El directorio que ocupa la c uspide del arbol es aquel que no est a contenido por ning un otro y generalmente se © Los autores, 1998; © Edicions UPC, 1998.
  • 19. 2 Introducci on a los sistemas operativos 11 denomina directorio principal. La estructura antes descrita permite una ordenaci on racional de la informaci on. Porejemplo, la gura 2.1 podr a representar la estructura t pica del archivador de un estudiante. Directorio Principal Programas Apuntes Otros 1er. Programa ejemplo6 Teoría Problemas archivo carta1 caso1 caso2 Fig. 2.1 Estructura de arbol de directorios Como puede observarse, los diversos temas de inter es est an agrupados por conceptos o materias; lo mismo ocurrir a con los programas cheros de ordenador. En Helv etica guran los nombres de los directorios o subdirectorios, mientras que los archivos aparecen con tipograf a corriente. 2.3 Edici on de un archivo Hasta ahora se ha de nido cu al debe ser la estructura interna de organizaci on de los diversos archivos en un ordenador; en consecuencia se admite que, de alguna manera, estos ya existen. Ahora bien, c omo puede generarse un archivo? Resulta evidente que algunos de los cheros que interesan a los usuarios, como por ejemplo los de resultados, los escribir an los programas que cada usuario dise~na. No ocurrir a lo mismo con el propio programa, un archivo de datos, una carta, etc. Para escribir editar archivos en general se utiliza una aplicaci on conocida gen ericamente como editor que facilita esta tarea. Existen multitud de editores en el mercado, cuyas posibili- dades y facilidad de manejo son bastante semejantes, al menos en el ambito de los ordenadores personales. Adem as, muchos programas y aplicaciones inform aticas incorporan su propio sis- tema de edici on para la escritura de archivos de datos u otros. © Los autores, 1998; © Edicions UPC, 1998.
  • 20. 12 M etodos num ericos En general, un archivo queda identi cado por su nombre. Este puede ser una cadena de n umeros y letras por ejemplo carta1. Adem as, resulta conveniente que ese nombre vaya acompa~nado de una extensi on: una extensi on no es m as que una cadena adicional de letras que informa acerca del contenido del chero. As , existen un conjunto de extensiones est andares en funci on de que se trate de cheros de texto txt, de resultados res, de datos dat, etc. De esta forma, el nombre de un archivo podr a ser carta1.txt. Algunas de estas extensiones son asignadas de manera autom atica por defecto por el propio sistema operativo, mientras que otras se podr an escoger libremente, respetando o no la convenci on antes establecida. En MS-DOS, y en las versiones de Windows anteriores a Windows'95, existe una limitaci on acerca del n umero de caracteres n umeros o letras que puede contener un nombre o una ex- tensi on, que no puede ser superior a 8 y 3 respectivamente. Conviene respetar, en la medida de lo posible, el mencionado criterio incluso en el caso de trabajar con entornos Windows, ya que de esta forman se evitar an, por ejemplo, posibles problemas de compatibilidad de nombres de archivos en entornos de trabajo en red. Para editar el archivo carta1.txt desde el entorno de trabajo que proporciona el MS-DOS, se deber a invocar la aplicaci on concreta de edici on de la que se disponga desde el prompt el s mbolo que aparece en la pantalla del ordenador a la izquierda del cursor y a partir del cual se puede escribir del PC. Para ello en la mayor a de casos basta con escribir su nombre seguido del nombre del archivo que se desea editar. La manera de disponer de una sesi on de DOS en un ordenador cuyo arranque por defecto se produzca en entorno Windows consiste, como posteriormente se ver a, por ejemplo en activar el icono de acceso directo S mbolo de MS-DOS , elegir la opci on MS-DOS dentro del men u desplegable de inicio o en reiniciar la computadora en MS-DOS. 2.4 Manipulaci on de cheros Dentro de cualquier ordenador, los archivos pueden ser manipulados de manera muy diversa: pueden ser copiados, borrados, cambiados de nombre, movidos de directorio, etc. En este apartado se pretenden mostrar las instrucciones elementales del sistema operativo DOS. Todas las operaciones aqu descritas se podr an realizar de manera semejante a trav es del entorno Windows, si bien de un modo m as visual y c omodo v ease apartado 2.5 para m as detalles. Debe tenerse en cuenta que, a diferencia del Windows, el interfase de comunicaci on en DOS es estrictamente alfanum erico: ello quiere decir que las sentencias necesariamente deber an ser cadenas de palabras que se introducir an en el ordenador usando el teclado. Posteriormente veremos que las posibilidades de empleo del rat on en sistema Windows ampl an y simpli can la comunicaci on con el ordenador. Como conceptos previos b asicos, cabr a destacar los siguientes: © Los autores, 1998; © Edicions UPC, 1998.
  • 21. 2 Introducci on a los sistemas operativos 13 2.4.1 Sintaxis de comandos Cualquier conjunto de instrucciones en DOS una sentencia tiene la misma estructura. Por ejemplo: C: DELETE CASO1.* /P ⇑ ⇑ ⇑ ⇑ prompt comando objeto sobre el modificador que se actúa El comando es el nombre propio que de ne la acci on que se desea realizar; en este caso, borrar el archivo que anteriormente se ha editado. A su vez, dicho comando puede ir acompa~nado de modi cadores uno, muchos o ninguno que alteran, aunque no de manera sustancial, la acci on del comando. En este ejemplo, la variante P todos los cali cadores en DOS comienzan por seguidos de una letra obliga a que el ordenador pregunte al usuario si realmente desea borrar el archivo antes de ejecutar la instrucci on el uso de este modi cador resulta por tanto altamente recomendable!. Finalmente, el objeto sobre el que se act ua es, naturalmente, el que recibe la acci on del comando. Existen otras posibilidades, directamente importadas de otros sistemas operativos como el UNIX, para cali car comandos o encadenar sentencias; para aprender su funcionamiento, conviene consultar por ejemplo el signi cado de los siguientes s mbolos: j ; , etc. En las tablas 2.1 y 2.2 se presentan, agrupados por temas, los comandos fundamentales en DOS. Tabla 2.1 Manejo de directorios Modificadores Uso Comando habituales Ejemplo Cambiar el directorio de trabajo CD CD PROGRAMASPROG1 Ver los archivos y directorios DIR P W S DIR /W contenidos en el directorio de trabajo Crear un directorio MKDIR MKDIR PRUEBAS Borrar un directorio RMDIR RMDIR PROG2 Tabla 2.2 Manipulaci on de cheros Modificadores Uso Comando habituales Ejemplo Listar un archivo TYPE TYPE C:PROG2CASO1.FOR Copiar un archivo COPY V COPY CASO1.FOR ..*.* Cambiar de nombre un archivo RENAME REN CASO1.FOR *.TXT Mover un archivo MOVE MOVE *.* APUNTES Borrar un archivo DELETE P DELETE *.* /P © Los autores, 1998; © Edicions UPC, 1998.
  • 22. 14 M etodos num ericos La primera tabla hace referencia a las operaciones m as habituales en el manejo de directorios, como pueden ser su creaci on o borrado. La segunda tabla contiene las sentencias relacionadas con la gesti on de archivos y su relaci on con los directorios a los que pertenecen. A lo largo de este apartado se comprobar a el signi cado concreto de algunos de los ejemplos que acompa~nan a los distintos comandos. Muchos de ellos se pueden abreviar a la hora de ser introducidos en el ordenador. De esta manera, el comando DELETE puede ser abreviado empleando DEL, por ejemplo. Otro tanto ocurre con el comando RENAME, como puede tambi en apreciarse en la tabla 2.2. Uno de los comandos m as empleados es el destinado a conocer los archivos y directorios contenidos en un determinado directorio. La sentencia DIR proporciona dicha informaci on, indicando los nombres y extensiones de los archivos. Los directoriosaparecendiferenciadosde los archivospor ir acompa~nadosde la palabra clave DIR . 2.4.2 Comodines Como se puede observar en el ejemplo del subapartado precedente, el archivo caso1 no queda especi cado por un nombre y una extensi on, sino que en lugar de esta ultima aparece un asterisco *. En DOS, al asterisco se le denomina comod n. Un comod n es un car acter que act ua como sustituto de cualquier otro car acter incluido el espacio en blanco o grupo de caracteres. El mencionado concepto funciona de manera id entica en entorno Windows. De esta forma, la instrucci on completa que serv a de ejemplo en el subapartado 2.4.1 es- peci ca que se borren, previa con rmaci on, todos los archivos caso1 sea cual sea su extensi on caso1.txt, caso1.dat, caso1.res, etc. 2.4.3 Especi caci on de directorios En DOS, un archivo queda de nido por su nombre y su extensi on caso1.for; ahora bien, resulta perfectamente posible la existencia de dos archivos con igual nombre y extensi on, situados en directorios diferentes. En ese caso, c omo distinguirlos? Para responder a esta pregunta, en la gura 2.2 se presenta una posible estructura de directorios. Suponiendo que el archivo caso1.for est e situado en el subdirectorio PROG1, el nombre com- pleto de dicho archivo ser a C:nPROGRAMASnPROG1ncaso1.for. Obs ervese que, de esta manera, cualquier archivo queda caracterizado un vocamente, a pesar de que pueda compartir con otros nombre o extensi on. © Los autores, 1998; © Edicions UPC, 1998.
  • 23. 2 Introducci on a los sistemas operativos 15 C: (Directorio Principal) PROGRAMAS APUNTES PROG1 PROG2 Fig. 2.2 Estructura de directorios Al especi car un archivo tan s olo por su nombre y extensi on caso1.for se asume que este se encuentra en el directorio de trabajo. El usuario puede decidir en cu al de los directorios de los que eventualmente disponga quiere trabajar: eso signi ca que las sentencias que ejecute se realizar an en ese directorio. As , por ejemplo, cuando en el apartado 2.3 se hac a referencia a la edici on del archivo carta1.txt, este quedaba grabado en el directorio de trabajo. Al inicio de una sesi on, el directorio de trabajo, tambi en llamado directorio por defecto, es el directorio principal. Empleando la sentencia CD el usuario puede cambiar el directorio de trabajo. As , en el ejemplo de la tabla 2.1 se puede ver cu al es la sentencia que hay que introducir para cambiar desde el directorio principal al que contiene caso1.for. Trabajando desde cualquier directorio, el usuario puede especi car cualquier archivo en una sentencia utilizando bien su nombre y extensi on o bien su nombre completo. Como se ha comentado anteriormente, para hacer referencia a un archivo contenido en el directorio de trabajo basta emplear su nombre y extensi on. Por contra, si el archivo por ejemplo caso1.for est a contenido en otro subdirectorio PROG2 empleando como directorio de trabajo el principal hay que usar: C:n TYPE C:nPROGRAMASnPROG2nCASO1.FOR que es el ejemplo que gura en la tabla 2.2. Como puede verse, el uso del nombre completo de un archivo permite referirse a el con independencia del directorio por defecto que se est e usando en ese momento, si bien su abuso puede resultar farragoso a la hora de escribir las sentencias que se quieran ejecutar. Existe una ultima posibilidad a la hora de especi car los nombres de los archivos presentes © Los autores, 1998; © Edicions UPC, 1998.
  • 24. 16 M etodos num ericos en un ordenador, que representa un t ermino intermedio entre los casos anteriores. En este el nombre de un archivo no situado en el directorio de trabajo se especi ca describiendo el camino que se debe recorrer, siguiendo el arbol de directorios, para acceder a el desde el directorio de trabajo. As por ejemplo, en la tabla 2.2 aparece la manera como se deber a copiar el archivo caso1.for situado en el subdirectorio PROG1 en el directorio PROGRAMAS. Observando el es- quema de la gura 2.2, el archivo debe quedar copiado en el nivel superior del arbol respecto al que se encuentra inicialmente. La especi caci on formada por dos puntos consecutivos .. signi ca precisamente ascender un nivel en el arbol de directorios. A partir de ah , componiendo ascensos y descensos en los niveles de directorios, siempre separados por barras n, se puede describir el nombre relativo de un archivo. Se debe tener en cuenta que, a diferencia de lo que ocurr a anteriormente, el nombre relativo s depende del directorio de trabajo. Resulta f acil imaginar que existen muchas otras instrucciones y posibilidades en DOS; aqu tan s olo se han destacado las b asicas. En cualquier caso, si desea saber m as cosas, siempre queda el recurso al sistema de informaci on que el propio sistema operativo pone a disposici on del usuario; con el, se puede pedir ayuda acerca de las variantes y posibilidades de un comando cuyo nombre conozcamos. Esto se consigue a trav es del cali cador ? . De esta forma, basta ejecutar C:n DIR ? Para obtener toda la informaci on disponible sobre el comando DIR. Windows'95 marca el declive del uso de las pantallas de MS-DOS, como v a para la ma- nipulaci on de archivos o la ejecuci on de programas. Entre las causas de este fen omeno cabe destacar la masiva adaptaci on de los programasy aplicaciones inform aticas al trabajoen entorno Windows, as como la mejora en las capacidades y versatilidad del propio sistema operativo. 2.5 Utilizaci on del entorno Windows El MS-Windows es probablemente el sistema operativo m as popular. A diferencia de lo que ocurr a con el sistema DOS, en el que est a basado, toda la manipulaci on de cheros puede realizarse de una manera visual, esto es, casi sin la intervenci on de sentencias alfanum ericas o el uso del propio teclado. Antes de presentar el entorno de Windows, es importante destacar un elemento de hardware fundamental en la gesti on del sistema: el rat on. El rat on proporciona un cursor m ovil a lo largo de la pantalla, que permite ejecutar instrucciones, seleccionar iconos y aplicaciones, arrastrar otros objetos, etc. Existen multitud de ratones, la mayor a de ellos con 2, 3 o 4 botones; en Windows est andar el m as importante es el bot on izquierdo, el cual, en funci on de su uso, tiene diversas aplicaciones. Por ejemplo: © Los autores, 1998; © Edicions UPC, 1998.
  • 25. 2 Introducci on a los sistemas operativos 17 1. Pulsar una vez simple-clic el bot on izquierdo sirve para activar o desactivar ventanas o, en general, para seleccionar los diversos elementos del Windows. 2. Pulsar de manera r apida y repetida doble-clic el bot on izquierdo tiene el efecto de ejecutar alg un comando o de activar alguna aplicaci on representada por un icono. Tambi en se emplea para restituir ventanas u otras acciones relacionadas. 3. Finalmente, manteniendo el bot on izquierdo pulsado sin soltarlo se consigue arrastrar co- mandos u objetos. Como posteriormente se comentar a, esta es una de las maniobras fundamentales del en- torno Windows y su utilizaci on resulta b asica en aplicaciones como un procesador de textos o una hoja de c alculo, entre otras. A la vez, tambi en sirve para mover elementos, alterar el tama~no de las ventanas, etc. 4. Una vez seleccionado un objeto empleando el procedimiento descrito en el punto 1, el bot on derecho del rat on suele permitir ejecutar determinadas acciones sobre el objeto, que normalmente depender an de su naturaleza. Ello se consigue gracias a la aparici on, al pulsar el bot on derecho, de un men u desplegable donde se contienen las posibles acciones a ejecutar. 5. As mismo, el solo posicionamiento del puntero del rat on sobre determinados elementos puede producir efectos. Esta acci on generalmente permitir a obtener informaci on y eventualmente ayuda acerca del objeto al cual se apunte. Para ello basta dejar unos segundos quieto el cursor, y aparecer a un globo de ayuda acerca del mencionado objeto; procediendo seg un el punto 1, se obtendr a la informaci on. El uso concreto de todos y cada uno de los movimientos del rat on depende mucho de la situaci on espec ca y de la habilidad del usuario; su manejo preciso y, en general, el de todo el sistema Windows, se convierte as en un proceso de aprendizaje, que contiene dosis importantes de intuici on y experiencia. 2.5.1 Los elementos del entorno Windows La gura 2.3 muestra el aspecto que presenta una pantalla t pica de un ordenador personal funcionando en entorno Windows. Los globos de ayuda que naturalmente no aparecen en la pantalla real indican los nombres de los principales elementos que conforman el sistema de ventanas del Windows. © Los autores, 1998; © Edicions UPC, 1998.
  • 26. 18 M etodos num ericos Botón de inicio Barra de tareas Área de mensajes Iconos de acceso directo Tapiz Fig. 2.3 Aspecto general del entorno Windows En el lenguaje propio del Windows, lo que aparece en la gura 2.3 es el escritorio de nuestro ordenador desktop en las versiones inglesas del programa. Sobre el se encuentran todos los elementos presentes y disponibles para el usuario en cada momento, las aplicaciones, los controles, las propias ventanas de trabajo, etc. El escritorio se encuentra dividido en dos zonas: el tapiz y la barra de tareas. El tapiz ocupa la mayor parte de la pantalla y sobre el se incrustar an dos tipos de elementos fundamentales en Windows: los iconos y las ventanas de trabajo. La barra de tareas es la zona diferenciada del tapiz que normalmente se encuentra en el lado inferior de la pantalla. Como su propio nombre indica, sobre ella aparecer a informaci on relativa, por ejemplo, a las aplicaciones que en aquel momento se est en ejecutando. As , en el ejemplo de la gura 2.3, la barra de tareas aparece vac a. De entre los iconos que aparecen en el tapiz, existen b asicamente de dos tipos: © Los autores, 1998; © Edicions UPC, 1998.
  • 27. 2 Introducci on a los sistemas operativos 19 1. Por una parte, los propios del sistema, como Mi PC, Entorno de red, Mi Malet n o la Papelera de reciclaje. Cada uno de ellos tiene una funci on espec ca pero en general est an relacionados con la gesti on y el manejo de archivos. As , desde Mi PC se puede acceder al conjunto de carpetas que contiene el ordenador, de manera muy semejante a la propia de otros sistemas operativos como el OS de Macintosh. De la misma forma, cualquier archivo borrado pasa a ser depositado en la Papelera de reciclaje. 2. Por otra parte, existen los iconos de acceso directo, que se distinguen de los primeros por tener dibujada una echa en la esquina inferior izquierda. Se trata de iconos asignados un vocamente a las aplicaciones m as frecuentemente empleadas por el usuario. El efecto de ejecutar sobre ellos un doble-clic con el rat on consiste en la activaci on de la aplicaci on deseada. En concreto, en la gura 2.3 se aprecian los iconos de acceso directo a dos aplicaciones, que son la hoja de c alculo Microsoft Excel, sobre la que se hablar a m as tarde, y el navegador de Internet Netscape Communicator. Finalmente, el icono de acceso al MS-DOS posibilita la entrada en el modo MS-DOS, que permite aplicar lo descrito en el apartado 2.4. En la barra de tareas existen, a su vez, otros dos elementos integrados m as. Por una parte, est a el area de mensajes; en ella suelen aparecer una serie de iconos identi cativos de diversos procesos presentes en el sistema. Entre los m as habituales destacan el reloj horario, el funcionamiento de los altavoces o, en general, de cualquier perif erico como tarjetas de red, dispositivos de almacenamiento externo, la actividad de alguna aplicaci on antivirus, etc. Haciendo un doble-clic sobre cada uno de ellos se puede obtener informaci on acerca de su estado de actividad. En segundo lugar, aparece el bot on de inicio. Se trata del objeto m as importante del escritorio, puesto que bajo el se encuentra el men u desplegable principal. Si se ejecuta un simple-clic sobre el bot on de inicio aparecer a el men u de la gura 2.4. En el aparecen los grandes grupos de objetos presentes en el sistema. As , por ejemplo, desde la opci on Ayuda se podr a acceder al sistema de ayuda interactiva de Windows, desde la opci on Cerrar el sistema se podr a apagar el equipo o reiniciarlo en modo MS-DOS, etc. La opci on Programas del men u desplegable principal contiene recogidas por grupos todas las aplicaciones y los programas presentes en el ordenador. Los grupos existentes representan los conjuntos de programas que contiene el sistema y que est an asociados a una aplicaci on concreta. As , por ejemplo, en la gura 2.4 se aprecian, entre otros, el grupo asociado al paquete de programas Microsoft O ce Microsoft Excel, Microsoft Word y otros o a los accesorios del sistema. Cada grupo est a representado por un icono que, como su propio nombre indica, es un s mbolo que representa al objeto en cuesti on. © Los autores, 1998; © Edicions UPC, 1998.
  • 28. 20 M etodos num ericos Fig. 2.4 Men u desplegable de inicio Entre las diversas opciones del men u de programas tambi en aparece la opci on para abrir una ventana de MS-DOS. As , el icono de acceso directo anteriormente aludido y que se hallaba en el tapiz no representa sino un atajo para ejecutar la mencionada aplicaci on, sin tener que desplegar los men us que aparecen en la gura 2.4. Seleccionando esta opci on por cualquiera de los dos procedimientos se conseguir a id entico resultado, eso es, la activaci on de una ventana en modo MS-DOS. © Los autores, 1998; © Edicions UPC, 1998.
  • 29. 2 Introducci on a los sistemas operativos 21 2.5.2 Las ventanas del Windows Una de las aplicaciones fundamentales que proporciona el entorno Windows es el Explo- rador de Windows. Con ella se puede gestionar todo lo referente al manejo de archivos y directorios especi cado en el apartado 2.4, pero desde el punto de vista del Windows; as por ejemplo, se podr a cambiar el nombre de los archivos, su lugar de almacenamiento, borrar archivos,etc. El sistema Windows basa todo su funcionamiento en la representaci on de un conjunto de s mbolos y ventanas. Cada aplicaci on en ejecuci on lleva asociada una o m as ventanas que quedan re ejadas en el tapiz. El aspecto de la ventana del Explorador de Windows, para el ejemplo descrito en la gura 2.2, podr a ser el que aparece en la gura 2.5. Fig. 2.5 Explorador de Windows Esta ventana se abre seleccionando la opci on del Explorador de Windows en el men u des- plegable de programas, seg un se aprecia en la gura 2.4. De la misma forma, para ejecutar la mencionada acci on tambi en se habr a podido emplear el icono de acceso directo presente en el tapiz del escritorio. © Los autores, 1998; © Edicions UPC, 1998.
  • 30. 22 M etodos num ericos En el explorador de Windows, los archivos y directorios aparecen gr a camente representa- dos. En la zona de la izquierda aparece el arbol de directorios correspondiente a la unidad de trabajo. Una vez se ha seleccionado un directorio haciendo un simple-clic sobre el icono de la carpeta correspondiente, en la ventana de la derecha aparecen los archivos y subdirectorios que contiene. Ya sea a trav es de las sentencias ejecutables desde la barra de men us, o desde los men us desplegables que se pueden obtener con el bot on derecho del rat on, se pueden realizar todas las operaciones habituales en la gesti on de archivos y directorios copiar, renombrar, eliminar, etc.. Tambi en se puede acceder a los diversos directorios, arrastrar archivos para moverlos, etc. Todas las ventanas de Windows presentan una estructura muy parecida. En general, una ventana abierta consta, al menos, de los siguientes elementos: 1. Una barra de t tulo, que contiene el nombre de la ventana; su color indica si dicha ventana est a activa o no. En Windows, tan s olo puede haber una ventana activa en cada momento, si bien puede haber m as de una ventana abierta. La diferencia entre un concepto y otro reside en que las instrucciones que el usuario introduce en el ordenador a trav es del rat on o del teclado se ejecutan siempre en la ventana activa. Para activar o desactivar ventanas basta con hacer un simple-clic sobre ellas. En general, los procesos que se ejecutan desde una ventana no se detienen por su desactivaci on. Se entiende por procesos aquellas acciones autom aticas que no requieren de la intervenci on directa del usuario a trav es del teclado o del rat on. 2. La barra de men u contiene una serie de llamadas gen ericas, tales como, por ejemplo, en este caso Archivo, Edici on, Ver, etc. Cuando se selecciona simple-clic una de estas con el rat on, aparece un men u desplegable. En el se encuentran las opciones que pueden ejecutarse seleccion andolas con el rat on normalmente relacionadas con el tema que gura en la barrade men us. As , por ejemplo, en el desplegable Archivose encontrar ancomandos relacionados con el manejo de los archivos, tales como crear nuevos archivos, etc. Para emplear estos men us desplegables es necesario situar el cursor del rat on sobre la opci on deseada y hacer un simple-clic. 3. La barra de movimiento sirve para desplazar la parte de la ventana visible tanto en sentido vertical como horizontal, en el caso en que, dado el tama~no de la ventana, no se pueda ver todo su contenido. La dimensi on de las ventanas puede ser modi cado arrastrando con el rat on sus esquinas. En el caso del explorador de Windows, la ventana principal est a a su vez dividida en dos ventanas secundarias, cada una de las cuales cuenta con sus propias barras de movimiento. 4. Finalmente, en el lado derecho de la barra de t tulos aparecen unos botones cuadrados cuya funci on tambi en est a destinada al manejo de las ventanas. Estos botones son, de izquierda a derecha: © Los autores, 1998; © Edicions UPC, 1998.
  • 31. 2 Introducci on a los sistemas operativos 23 Bot on principal de la aplicaci on: Normalmente representado por el icono de la propia aplicaci on. Si se selecciona con un simple-clic, aparece el men u desplegable de control de la ventana. Entre otras funciones, este men u permite abrir o cerrar la ventana, minimizarla, etc. Botones de minimizar y maximizar: A n de evitar que todas las aplica- ciones abiertas durante una sesi on de trabajo tapen la pantalla, existe la posibilidad de que algunas o todas sean reducidas minimizadas. De esta forma, el bot on de la izquierda transforma la aplicaci on en su icono en la barra de tareas, mientras que el de la derecha la extiende hasta ocupar toda la pantalla. Para devolver una aplicaci on minimizada a su estado nor- mal basta hacer un simple-clic sobre el icono correspondiente en la barra de tareas. Botones de minimizar y restaurar: En la situaci on en que la ventana haya sido maximizada empleando los botones anteriores, estos son sustituidos por la pareja minimizar restaurar. Con el de la izquierda se sigue pasando desde la ventana al icono, mientras que con el de la derecha se restituye el tama~no original que ten a la ventana antes de maximizarla. Bot on de ayuda: Puede aparecer en algunas ventanas especiales, como por ejemplo las relacionadas con los paneles de control o la con guraci on del sistema, para proporcionar ayuda espec ca sobre el contenido de las mis- mas. Bot on de cerrar: Se emplea en todos los casos para cerrar la ventana y, consiguientemente, la aplicaci on que esta pueda representar. A diferencia de otros botones, que pueden estar o no presentes en la ventana, siempre se encontrar a el bot on de cerrar en el extremo superior derecho de todas las ventanas. 2.6 Introducci on al manejo de Excel Una de las aplicaciones m as empleadas, de entre todas las que pueden ejecutarse bajo Windows, es la hoja de c alculo Excel. Una hoja de c alculo es una potente herramienta con la que efectuar, con gran rapidez y de manera interactiva, multitud de c alculos aritm eticos. Por ejemplo, con una hoja de c alculo un usuario puede desde representar en gr a cos los resultados de sus programas hasta construir complejas macros, pasando por todo tipo de operaciones matem aticas. El objetivo de este apartado no es describir exhaustivamente el funcionamiento de Excel por lo dem as, bastante semejante al de otras hojas de c alculo existentes en el mercado, como por ejemplo Lotus 1-2-3 o Quattro Pro sino facilitar los conocimientos b asicos necesarios para poder empezar a trabajar con ella. Antes de comenzar, al igual que en el apartado anterior, en la gura 2.6 se presenta cu al es el aspecto de la ventana asociada a Excel esto es, aquella que se abre cuando se hace doble-clic © Los autores, 1998; © Edicions UPC, 1998.
  • 32. 24 M etodos num ericos sobre el icono de acceso directo de la gura 2.3. La gura 2.6 contiene los elementos b asicos descritos en toda ventana, como las barras de t tulo, men u y movimiento o los botones. Adem as de estos elementos existen otros propios ya de la aplicaci on en este caso la hoja de c alculo como por ejemplo: 1. Los botones de herramientas situados bajo la barra de men u, que est an asociados es decir son sin onimos de todos o algunos de los comandos de los men us desplegables de la barra de men u. Haciendo simple-clic sobre ellos se ejecuta la misma acci on que seleccionando la orden del correspondiente men u, lo que agiliza el manejo de la hoja de c alculo. 2. La barra de f ormulas, inmediatamente por debajo de los botones de herramientas. All se ir an re ejando los c alculos que el usuario vaya programando. 3. Las celdas de Excel. Se trata de cada uno de los rect angulos en que est a dividida el area de trabajo, cada uno de los cuales se identi ca con dos coordenadas: una letra creciente en sentido horizontal y un n umero en vertical. Las reglas que contienen los n umeros y letras de las celdas aparecen en los bordes de la ventana. 4. Las pesta~nas de hoja, situadas sobre la barra inferior izquierda, que permiten seleccionar cada una de las hojas o diversas areas de trabajo de las que consta una hoja de c alculo Excel. 5. Los botones de desplazamiento de pesta~na, situados inmediatamente a la izquierda y que permiten cambiar de hoja. 6. La barra de estado, emplazada en extremo inferior, donde aparecen mensajes en funci on de la acci on que se est a llevando a cabo en cada momento. Las celdas son los elementos fundamentales de la hoja de c alculo: a cada celda se podr a asociar un n umero o una f ormula cuyo resultado, en general tambi en ser a un n umero. De esta manera, a base de realizar c alculos aritm eticos en las diversas celdas es como se resuelve un problema con una hoja de c alculo. La gran potencia de estos sistemas radica en la facilidad para vincular unas operaciones arit- m eticas a otras, lo que permite realizar c alculos con una simplicidad extraordinaria: con todo, el mejor modo de comprender los fundamentos de Excel es conocerlos a trav es de un sencillo ejemplo como el siguiente: © Los autores, 1998; © Edicions UPC, 1998.
  • 33. 2 Introducci on a los sistemas operativos 25 Fig. 2.6 Hoja de c alculo Excel 2.6.1 Paso 1: Introducci on de constantes Para asociar un escalar a una celda, basta seleccionar la casilla donde se desea colocarlo haciendo simple-clic sobre ella con el rat on e introducir el n umero. Por ejemplo, si se desea colocar los valores 1, 2 y 3 en las celdas A2, A3 y A4, se debe seleccionar con el rat on cada una de ellas e introducir respectivamente los valores anteriores. Una vez pulsado Return, el resultado obtenido es: © Los autores, 1998; © Edicions UPC, 1998.
  • 34. 26 M etodos num ericos 2.6.2 Paso 2: Introducci on de f ormulas A continuaci on se realizar a una operaci on elemental con las tres casillas que ya contienen n umeros; para ello, en la celda B2 se de ne la operaci on consistente en tomar el n umero 1, multiplicarlo por 2 y sumarle 4 unidades. La manera de proceder consiste en seleccionar la celda B2 e introducir por teclado la f ormula. A medida que el usuario la escribe, esta aparece re ejada tanto en la barra de f ormulas como en la propia celda: Como puede observarse, existen algunas diferencias con respecto al paso precedente: 1. En primer lugar, el primer car acter introducido es el signo de igualdad =; esta es la manera de decirle a Excel que efect ue el c alculo que a continuaci on se encuentra. Una vez pulsada la tecla Return, la celda B2 dejar a de contener la f ormula para mostrar el valor de la operaci on, seg un se ve en el dibujo posterior en este caso 1 x 2 + 4 = 6. © Los autores, 1998; © Edicions UPC, 1998.
  • 35. 2 Introducci on a los sistemas operativos 27 2. En segundo lugar, obs ervese que en la posici on de la f ormula donde deber a aparecer la cifra 1 gura la coordenada de la casilla en que este se encuentra. Esto se consigue, durante la fase de escritura de la f ormula, haciendo simple-clic sobre la casilla cuyo valor se desea introducir en el momento en que esta debe gurar en la f ormula. Existe una diferencia fundamental entre introducir el 1 y la coordenada A2 que en este momento tiene como valor 1; la manera aqu empleada establece una relaci on din amica entre las casillas A2 y B2, como se ver a posteriormente en el paso 4. Este ser a hasta ahora el resultado del paso 2: 2.6.3 Paso 3: Arrastre de f ormulas A continuaci on se selecciona la celda B2 con simple-clic y se coloca el cursor en el angulo inferior derecho de la celda, justo hasta que el cursor cambia de la forma habitual de echa a la de una cruz +. Seguidamente, manteniendo el bot on pulsado, se arrastra el rat on desde la casilla B2 hasta la B4. Al soltar el bot on, se obtiene: © Los autores, 1998; © Edicions UPC, 1998.
  • 36. 28 M etodos num ericos Lo que ha ocurrido es que la f ormula que conten a la celda B2 ha sido arrastrada a las casillas B3 y B4. Eso signi ca que si la f ormula original de B2 era A2 * 2 + 4 la que est a calculada en B3 es A3 * 2 + 4. En la barra de f ormulas puede verse a qu e corresponde la casilla B4: el hecho de que se haya sustituido la casilla A2 por la A3 o la A4, siguiendo el sentido del arrastre obedece a que cuando se arrastra una f ormula, los v nculos tambi en son arrastrados en el mismo sentido. Esto puede ser evitado, en el caso en que se desee, anteponiendo el s mbolo de d olar $ en las especi caciones de las coordenadas de los v nculos. As por ejemplo, en el caso de introducir en el paso 2 la f ormula como $A$2 * 2 + 4 el resultado que quedar a arrastrado en la casillas B3 y B4 ser a $A$2 * 2 + 4. La anteposici on del car acter $ a una coordenada de la y o columna de una casilla tiene el efecto de bloquearla, impidiendo que se modi que din amicamente cuando la f ormula es arrastrada. En una misma f ormula pueden coexistir casillas libres, bloqueadas por las, por columnas, completamente bloqueadas, etc. El efecto conseguido arrastrando celdas es el mismo que puede obtenerse con las opciones de cortar y pegar f ormulas que guran tanto en el desplegable asociado a Edici on como en los correspondientes botones de herramientas. 2.6.4 Paso 4: Modi caci on din amica Finalmente, continuando con el ejemplo, al sustituir el valor original de la casilla A2, por un 5, se obtiene: Como se puede observar, el valor de la casilla B2 se ha actualizado de 6 a 14 es decir 5 x 2 + 4. No ocurre lo mismo con las f ormulas arrastradas, dado que al depender unicamente de A3 y A4 no deben sufrir modi caciones. Este proceso se realiza autom aticamente en todos los v nculos de ah el nombre de din amicos presentes en una hoja de c alculo. En este hecho y en el anterior el concepto de arrastre es donde radica gran parte de su potencia. © Los autores, 1998; © Edicions UPC, 1998.
  • 37. 2 Introducci on a los sistemas operativos 29 El ejemplo anterior es una muestra muy simpli cada de las capacidades de Excel, muchas de las cuales s olo se van conociendo con el uso del programa. Problema 2.1: A partir del ejemplo descrito en el subapartado 2.6.3, modi carlo de manera que en la columna C de la hoja de c alculo aparezcan las ordenadas de la funci on y = 3x 2 ,2x ,3 siendo A la columna de las abscisas. Problema 2.2: Extender el c alculo de las funciones y = 2x ,4 e y = 3x 2 ,2x ,3 al intervalo en x -2,2 , obteniendo puntos cada 0.5 unidades de x. Problema 2.3: Escribir una hoja de c alculo en la que aparezcan de manera ordenada las tablas de multiplicar de los n umeros pares entre 2 y 10 para los n umeros comprendidos entre 1 y 20. Para conseguirlo, se procurar a emplear la mayor cantidad posible de v nculos din amicos entre las diversas f ormulas necesarias, de manera que la cantidad de celdas en las que se deban introducir expl citamente f ormulas resulte m nima. 2.6.5 Representaci on gr a ca Un aspecto muy util, por cuanto a la representaci on de resultados se re ere, consiste en la posibilidad que proporciona Excel de transformar conjuntos de datos en gr a cos. As por ejemplo, una vez generadas las coordenadas X Y de una gr a ca, puede emplearse el Asistente para gr a cos para construir el correspondiente dibujo, que quedar a insertado en la zona de la hoja de c alculo que se escoja. El mencionado asistente consiste en un conjunto de pantallas de ayuda paso a paso que orientan e informan al usuario acerca del proceso que se debe seguir para obtener el gr a co deseado. El Asistente para gr a cos proporciona m ultiples posibilidades a la hora de escoger la forma, tipo y formato del gr a co que se quiere representar, y s olo requiere de un poco de esfuerzo para familiarizarse con su uso. As , continuando con el ejemplo anterior, los valores calculados en el subapartado 2.6.3 pueden ser interpretados como 3 puntos de la recta y = 2x +4. Al dibujar los datos anteriores se obtiene: © Los autores, 1998; © Edicions UPC, 1998.
  • 38. 30 M etodos num ericos Problema 2.4: Representar gr a camente las funciones del problema 2.2 y estimar sus puntos de intersecci on. 2.6.6 Importaci on de resultados Finalmente, la ultima gran cualidad de Excel hace referencia a la posibilidad de adquirir conjuntos de datos generados por otros programas, por ejemplo los archivos de resultados de los programas de FORTRAN. As , casi cualquier conjunto de datos escrito en un chero puede ser importado de manera autom atica por la hoja de c alculo, esto es, sin necesidad de introducirlos manualmente. A partir de ese momento, siguiendo lo comentado en los anteriores subapartados, pueden realizarse c alculos adicionales con esos resultados o simplemente obtener representaciones m as vistosas de los mismos, por ejemplo con la ayuda de gr a cos. Para importar archivos de resultados debe emplearse el Asistente para importaci on de texto que se activa autom aticamente en el momento de intentar abrir con Excel un archivo que no tenga formato de hoja de c alculo. Por ultimo, debe tenerse en cuenta que, en general, Excel © Los autores, 1998; © Edicions UPC, 1998.
  • 39. 2 Introducci on a los sistemas operativos 31 identi ca el punto decimal con el car acter , de modo que el archivo de datos que se quiera importar debe respetar esta convenci on. Problema 2.5: El ultimo problema de este cap tulo ilustra una de las m ultiples aplicaciones de las hojas de c alculo; concretamente, se calcular a el valor de las amortizaciones de un cr edito a un inter es dado, as como su tipo anual equivalente TAE. Muchas de las f ormulas y procedimientos necesarios para resolver este problema representar an una novedad en el manejo de Excel y est an dirigidas a contribuir a su aprendizaje. Previamente, resulta necesario plantear el problema que se desea resolver. Para calcular las cuotas jas de pr estamos con inter es constante, se de ne x0 como el capital prestado en t = t0 instante inicial a un inter es jo i expresado en tanto por uno. C alculo de cuotas La liquidaci on del pr estamo se realizar a en N pagos por a~no por ejemplo N son los periodos de liquidaci on anual, 12 si son liquidaciones mensuales; as , el inter es asociado a cada periodo de liquidaci on ser a de i=N . Al nal del primer periodo, es decir en t = t1, el capital adeudado el necesario para cancelar el pr estamo ser a de x0 1 + i=N . Ahora bien, en vez de cancelar el pr estamo se paga una cuota c l ogicamente inferior a la cantidad total adeudada. La deuda ser a ahora x1 = x0 1 + i=N ,c. Este proceso se repite sucesivamente hasta la total extinci on del cr edito. Expresando lo anterior en una tabla se tiene: Vencimiento Capital Prestado t0 x0 t1 x1 =x0
  • 40. 1 + i N ,c t2 x2 =x0
  • 42. 1 + i N t3 x3 =x0
  • 45. 1 + i N 2 : : : : : : tn xn =x0
  • 47. 1 + i N n ,1 Este proceso se detiene cuando xn se anula es decir, cuando ya no se tiene m as deuda. A partir de la ecuaci on xn = 0 resulta f acil determinar el valor de la cuota que se debe pagar c, en n periodos totales de liquidaci on: c = x0 i N , 1 + i N n , 1 + i N n ,1 As , el total pagado es de nc y por consiguiente el costo real del pr estamo puede © Los autores, 1998; © Edicions UPC, 1998.
  • 48. 32 M etodos num ericos evaluarse en nc ,x0. La f ormula anterior es util para determinar las cuotas mensuales que hay que pagar, c, o el costo del pr estamo nc ,x0, a pesar de no contemplar las variaciones reales del valor del dinero. A pesar de ello y puesto que c es un n umero real, la f ormula que se emplea en la pr actica tomar a el entero m as pr oximo restos. Tipo Anual Equivalente Es usual tanto en el ambito de pr estamos como en el de intereses de cuentas bancarias que la informaci on emitida por las entidades de ahorrose re era al TAE. Por tanto, resulta necesario conocer c omo se relaciona el inter es anual i expresado en tanto por uno con el tipo anual equivalente, TAE tambi en expresado como un tanto por uno. Si hay N periodos de liquidaci on anual, el inter es asociado a cada periodo de liquidaci on es de nuevo i=N . Sea x0 la cantidad prestada o invertida en t = t0 instante inicial. La acumulaci on de los intereses para cada periodo A~no=N = 4t ser a: Vencimiento Capital Prestado o Invertido t0 x0 t1 = t0 + 4t x0
  • 49. 1 + i N : : : : : : tN = t0 + N 4t = t0 + A~no x0
  • 50. 1 + i N N En consecuencia, si se de ne el TAE como el inter es anual equivalente, entonces debe veri car: 1 + TAE =
  • 51. 1 + i N N A partir de esta f ormula es f acil deducir la relaci on entre i y TAE: TAE =
  • 52. 1 + i N N ,1 i = h 1 + TAE 1 N ,1 i N Se desea elaborar una hoja de c alculo que permita conocer de forma por- menorizada las cuotas, amortizaciones de capital y los intereses del periodo de liquidaci on dado el capital prestado, el n umero de periodos totales para devolverlo y el inter es anual o el TAE del pr estamo. El resultado nal deber a ser semejante a la hoja de c alculo que puede encon- trarse a continuaci on. Seguidamente se indican algunas de las instrucciones clave necesarias para obtenerla. © Los autores, 1998; © Edicions UPC, 1998.
  • 53. 2 Introducci on a los sistemas operativos 33 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 A B C D E AMORTIZACIONES DE UN PRÉSTAMO TAE: 12,13% Periodos anuales: 12 Interés: 11,50% Capital: 1.500.000 Pts Periodos totales: 24 Cuota: 70.260 Pts Total a pagar: 1.686.240 Pts Vencimiento Saldo préstamo Amortización Intereses Cuota a pagar 5-ene-97 1.500.000 Pts 55.885 Pts 14.375 Pts 70.260 Pts 5-feb-97 1.444.115 Pts 56.421 Pts 13.839 Pts 70.260 Pts 5-mar-97 1.387.694 Pts 56.961 Pts 13.299 Pts 70.260 Pts 5-abr-97 1.330.733 Pts 57.507 Pts 12.753 Pts 70.260 Pts 5-may-97 1.273.226 Pts 58.058 Pts 12.202 Pts 70.260 Pts 5-jun-97 1.215.168 Pts 58.615 Pts 11.645 Pts 70.260 Pts 5-jul-97 1.156.553 Pts 59.176 Pts 11.084 Pts 70.260 Pts 5-ago-97 1.097.377 Pts 59.743 Pts 10.517 Pts 70.260 Pts 5-sep-97 1.037.634 Pts 60.316 Pts 9.944 Pts 70.260 Pts 5-oct-97 977.318 Pts 60.894 Pts 9.366 Pts 70.260 Pts 5-nov-97 916.424 Pts 61.478 Pts 8.782 Pts 70.260 Pts 5-dic-97 854.946 Pts 62.067 Pts 8.193 Pts 70.260 Pts 5-ene-98 792.879 Pts 62.662 Pts 7.598 Pts 70.260 Pts 5-feb-98 730.217 Pts 63.262 Pts 6.998 Pts 70.260 Pts 5-mar-98 666.955 Pts 63.868 Pts 6.392 Pts 70.260 Pts 5-abr-98 603.087 Pts 64.480 Pts 5.780 Pts 70.260 Pts 5-may-98 538.607 Pts 65.098 Pts 5.162 Pts 70.260 Pts 5-jun-98 473.509 Pts 65.722 Pts 4.538 Pts 70.260 Pts 5-jul-98 407.787 Pts 66.352 Pts 3.908 Pts 70.260 Pts 5-ago-98 341.435 Pts 66.988 Pts 3.272 Pts 70.260 Pts 5-sep-98 274.447 Pts 67.630 Pts 2.630 Pts 70.260 Pts 5-oct-98 206.817 Pts 68.278 Pts 1.982 Pts 70.260 Pts 5-nov-98 138.539 Pts 68.932 Pts 1.328 Pts 70.260 Pts 5-dic-98 69.607 Pts 69.593 Pts 667 Pts 70.260 Pts Datos del problema: los datos del pr estamo deben introducirse en las casillas B4, B6, B7 y B5; este ultimo valor ser a conocido a priori o bien se copiar a de C5, en funci on de que se sepa como dato el inter es anual o el TAE. Cuota de amortizaci on: en la casilla B8 se introduce la f ormula de nida anterior- mente para la cuota ja a pagar; dicho valor debe ser entero. Inter es y TAE: ambos valores pueden darse como dato inicial del pr estamo, a © Los autores, 1998; © Edicions UPC, 1998.
  • 54. 34 M etodos num ericos pesar de ello, para los c alculos de la tabla s olo se emplea el inter es anual y en particular el valor de nido en B5. Ambos el inter es anual y el TAE se redondear an siempre con dos cifras deci- males. La hoja de c alculo debe estar organizada de forma que si se introduce en valor del inter es anual en B5 y por tanto no se introduce el TAE en B3 entonces aparece el valor del TAE en C3 y queda vac o el valor de C5. Si, por el contrario, se conoce el valor del TAE y no el inter es anual que se introduce en B3, entonces aparece calculado el valor del inter es anual en C5 valor que debe ser copiado en B5 y queda vac o C3. Como ejemplo, la instrucci on que se debe poner en C3 es =SiB3=0;Redondear1+B5 B4^B4-1;4; . En C5 es necesario introducir una f ormula con estructura similar que eval ue el inter es anual a partir del TAE. Puede resultar interesante consultar el Asistente de f ormulas para comprender el signi cado concreto de estas expresiones. Total a pagar: es la suma de todas las cuotas que se deben pagar. Fecha de vencimiento: en A11 se introduce la fecha de inicio y en A12 la f ormula: = FechaA~noA11;MesA11+Entero12 $B$4;DiaA11+ Residuo12;$B$4*30 $B$4. Esta f ormula debe arrastrarse luego a lo largo de la columna. Saldo pr estamo: en B11 se copia la cantidad introducida en B6; las dem as canti- dades se obtienen restando al saldo anterior la amortizaci on realizada, por ejemplo B12 es =B11-C11. A continuaci on se analiza c omo calcular C11. Amortizaci on: es siempre la cuota $B$8 menos los intereses pagados en ese vencimiento, por ejemplo C11 es =$B$8-D11. Intereses: se eval uan siempre de la misma manera: el saldo del pr estamo multipli- cado por el inter es asociado a cada periodo de liquidaci on. Atenci on: es necesario trabajar con n umeros enteros! De esta forma, en D11, por ejemplo, debe intro- ducirse la siguiente f ormula: =RedondearB11*$B$5 $B$4;0. Cuota a pagar: la cuota debe ser el valor que aparezca en B8; para veri car los c alculos conviene sumar la amortizaci on y los intereses. Por ejemplo, E11 es =SumaC11,D11. Nota importante: Est a siempre bien evaluada la ultima cuota que se debe pagar? Adem as de elaborar la hoja de c alculo anterior para el caso indicado, obtener la tabla asociada a un TAE del 12,1 manteniendo los periodos y el capital prestado. © Los autores, 1998; © Edicions UPC, 1998.
  • 55. 2 Introducci on a los sistemas operativos 35 2.7 Bibliograf a Presentando Microsoft Windows95. Manual del usuario. Microsoft Corporation, 1998. Windows para trabajo en grupo MS-DOS. Manual del usuario, Vols. I a III. Microsoft Cor- poration, 1994. Stinson, C. El libro del Windows 3.1. Microsoft Press Anaya, 1993. Matthews, Martin S. Excel para Windows 95 a su alcance. Osborne McGraw-Hill, 1996. The Cobb Group Dodge M.; Kinata C.; Stinson, C. Gu a completa de Microsoft Excel 5 para Windows. McGraw-Hill MS Press, 1996. Microsoft Excel version 5.0c Manual del usuario. Microsoft Corporation, 1994. Todos los nombres de programas, aplicaciones, sistemas operativos, hardware, etc. que aparecen en el texto son marcas registradas de sus respectivas empresas. Las menciones que se hacen de ellas lo son unicamente a t tulo informativo, siendo propiedad de sus representantes legales. En particular, Microsoft, MS, MS-DOS, MS- Windows, Windows'95 y MS-Excel, son marcas registradas de Microsoft Corporation en los Estados Unidos de Am erica y otros pa ses; UNIX es una marca registrada de Unix Systems Laboratories; Lotus 1-2-3 es una marca registrada de Lotus Inc; Quattro Pro es una marca registrada de Borland Inc; Macintosh es una marca reg- istrada de Apple Computer Inc; Netscape Communicator es una marca registrada de Netscape Communications Corporation. © Los autores, 1998; © Edicions UPC, 1998.
  • 56. 3 Introduccion a la programacion FORTRAN 37 3 Introduccion a la programacion FORTRAN Objetivos Describir las fases del desarrollo de un programa en FORTRAN. Presentary analizar los elementos basicos de la sintaxis del lenguaje de programacion FORTRAN. 3.1 Introduccion El lenguaje de programacion FORTRAN fue dise~nado por John Backus en 1954 y la primera version data de 1955. Con posterioridad, han aparecido diferentes versiones que paulatinamente han incorporado mejoras y ampliaciones. As por ejemplo, en 1958 aparecio el FORTRAN II y en 1962 el FORTRAN IV. Una de las versiones mas importantes y que ha perdurado durante mas tiempo es el FORTRAN 77, que fue aprobado por el American National Standards Institute (ANSI) en 1977. Esta version ha sido mundialmente aceptada y ha permanecido hasta la actualidad como el FORTRAN universal. Aunque ya existe la version 90 del FORTRAN, por las razones que se han expresado en el parrafo anterior, en este libro se presentara y se analizara la version FORTRAN 77. 3.2 Fases del desarrollo de un programa en FORTRAN Como se ha comentado en el cap tulo 1, todos los ordenadores funcionan en el sistema binario. En consecuencia, todos los programas deben ser traducidos a dicho sistema, inde- pendientemente del lenguaje de programacion en que hayan sido dise~nados en este sentido, el sistema binario se denomina tambien lenguaje maquina. En el proceso de traduccion se distinguen varias fases (ver gura 3.1): © Los autores, 1998; © Edicions UPC, 1998.
  • 57. 38 Metodos numericos Fig. 3.1 Fases del desarrollo de un programa en FORTRAN 1. Es muy importante que, antes de empezar a escribir el programa en el ordenador, se haya pensado detalladamente cuales son las tareas que el programa debe realizar y como deben programarse. El hecho de invertir cierto tiempo en el dise~no del programa conlleva gene- ralmente un ahorro tanto en el tiempo de programacion como en el de ejecucion. 2. La edicion del programa se realiza mediante un editor de archivos (ver cap tulo 2). Una vez este se ha escrito de acuerdo con la sintaxis FORTRAN se obtiene el programa fuente. Es muy aconsejable que la extension del programa fuente sea FOR.
  • 58. 3 Introduccion a la programacion FORTRAN 39 3. Como ya se ha comentado, el programa fuente debe traducirse a lenguaje maquina. Esta traduccion se realiza en la fase de compilacion. El resultado de esta operacion es un archivo intermedio que se denomina programa objeto. La mayor a de compiladores asignan al programa objeto la extension OBJ. 4. Una vez se ha traducido el programa a lenguaje maquina, aun es preciso realizar ciertas operaciones antes de obtener el programa ejecutable. Estas se realizan en la fase de en- samblado (que generalmente se denomina linkado). En esta fase se unen los diferentes modulos que componen el programa y se reserva el espacio de memoria para las variables, los vectores y las matrices que se hayan de nido en el mismo. A los programas ejecutables se les asigna la extension EXE. 5. El siguiente paso consiste en ejecutar el programa. Naturalmente, siempre se ejecuta el chero ejecutable (EXE) y no el programa fuente (FOR). 6. Por ultimo, los resultados obtenidos deben ser analizados tanto desde el punto de vista computacional como ingenieril. Es importante resaltar que si en alguna de las anteriores fases se produce un error, su correccion debe realizarse sobre el programa fuente por tanto, es preciso volver a realizar las fases de compilacion, ensamblado y ejecucion. 3.3 Organizacion general de un programa en FORTRAN En este apartado se presentan los elementos basicos de la organizacion de un programa escrito en lenguaje FORTRAN. 3.3.1 Normas de escritura de un programa en FORTRAN El archivo donde se van a escribir las instrucciones (sentencias) FORTRAN se puede ima- ginar como una hoja cuadriculada y por tanto, formada por las y columnas. Por lo que respecta al contenido de un programa por las hay que resaltar dos aspectos: 1. Todos los compiladores FORTRAN ignoran las las en blanco. 2. Solo se puede escribir una sentencia en cada la. Si el contenido de una sentencia excede la longitud de la la, se puede utilizar mas de una l nea, como se detalla mas adelante. Si se analiza el contenido del chero por columnas, se distinguen cinco zonas diferentes: Columna 1 Si en la primera columna de una l nea aparece una C, una c, o
  • 59. 40 Metodos numericos un *, signi ca que dicha l nea es un comentario. Por lo tanto, el compilador no la traducira a lenguaje maquina. En general, los comentarios se utilizan para explicar el funcionamiento de cada bloque del programa. Columnas 1-5 Estas columnas se reservan para etiquetar una sentencia. En FORTRAN las sentencias se etiquetan mediante numeros enteros positivos. Estos valores no afectan al orden en que se ejecutaran las instrucciones. Ademas, solo deben etiquetarse aquellas l neas que lo precisen. Columna 6 Si una sentencia ocupa mas de una l nea, debe indicarse al compi- lador que una l nea es continuacion de la anterior. Esto se realiza colocando cualquier caracter diferente de blanco o cero en la sexta columna. Columnas 7-72 En estas columnas se escribe el contenido de las sentencias pro- piamente dichas. Columnas 73-80 Estas columnas no tienen signi cado para el compilador FOR- TRAN y no se deben utilizar. 3.3.2 Elementos de un programa en FORTRAN Desde un punto de vista conceptual, el lenguaje de programacion FORTRAN consta de dos tipos de elementos: los comentarios y las sentencias. Los comentarios, como se ha mencionado anteriormente, no afectan a la forma en que se procesa el programa. Solo representan una ayudan al usuario para su correcta interpretacion. Las sentencias estan formadas por todo el conjunto de instrucciones que forman el lenguaje FORTRAN. Estas, a su vez, se pueden clasi car en sentencias ejecutables y sentencias no ejecutables. 1. Las sentencias ejecutables son aquellas cuyo signi cado se utiliza esencialmente en tiempo de ejecucion (fase en la que se ejecuta el programa). Se incluyen dentro de este tipo la asignacion de valores a variables, las sentencias de control, y las sentencias de entrada/salida entre otras. 2. Las sentencias no ejecutables son aquellas cuyo signi cado se utiliza en tiempo de com- pilacion o ensamblado. Las tareas basicas que se realizan son la declaracion de modulos y variables, la reserva de espacio de memoria para vectores y la se~nalizacion de nal de modulo.
  • 60. 3 Introduccion a la programacion FORTRAN 41 En cualquier modulo escrito en FORTRAN las sentencias deben aparecer en un orden prede- terminado formando tres grandes grupos. Primero deben aparecer las sentencias no ejecutables, donde se declara el inicio de modulo as como las variables, los vectores y las matrices que se utilizaran en el mismo. En segundo lugar se deben escribir las sentencias ejecutables que forman el cuerpo del modulo. Por ultimo aparece la sentencia no ejecutable de n de modulo (sentencia END). El programa 3.1 muestra algunos de los aspectos que se han discutido hasta ahora. c c Este programa muestra algunos aspectos de la organizacion c general de un programa en FORTRAN c c_________________________________________ Sentencias no ejecutables real*4 a,b,c c_________________________________________ Sentencias ejecutables c___Primero hay una linea etiquetada 111 a = 12.5 c___Despues una sentencia escrita en una linea b = -5.1 c___Seguidamente otra sentencia escrita en mas de una linea c = (a + b) * . 1234.5398754485429387029 c___Y por ultimo se detiene la ejecucion del programa stop c_________________________________________ Sentencias no ejecutables end Prog. 3.1 Organizacion general de un programa en FORTRAN 3.4 Constantes y variables en FORTRAN Una constante es un valor que no puede cambiar durante la ejecucion del programa. Por el contrario, una variable es un s mbolo al que se asocia un valor que puede modi carse durante la ejecucion del programa. El nombre de una variable debe estar formado por una cadena de caracteres alfanumericos, el primero de los cuales debe ser una letra. En FORTRAN existen diferentes tipos de constantes y variables, que se diferencian segun el
  • 61. 42 Metodos numericos tipo de informacion que contienen. Siempre es necesario declarar, al principio de cada modulo, el tipo de todas las variables esto se lleva a cabo mediante sentencias no ejecutables. Sin embargo, como se vera en este mismo apartado, el FORTRAN ofrece algunas ayudas que conviene aprovechar. 3.4.1 Constantes y variables enteras Las constantes enteras son numeros enteros escritos sin punto decimal. Las variables enteras son s mbolos que solo pueden representar numeros enteros. Los ordenadores guardan el valor asignado a estas variables como una cadena de longitud nita en sistema binario. Dependiendo de la longitud de esta cadena se distinguen dos tipos de variables enteras. INTEGER*2 Se almacena la variable entera en dos bytes (16 bits). El numero mayor en valor absoluto que se puede almacenar es 32 767 (ver cap tulo 4). INTEGER*4 Se almacena la variable entera en cuatro bytes (32 bits). El numero mayor en valor absoluto que se puede almacenar es 2 147 483 647 (ver cap tulo 4). Una de las ayudas que ofrece el FORTRAN consiste en asignar por defecto un tipo entero a todas aquellas variables que empiezan por: I, J, K, L, M, N Los ordenadores modernos les asignan el tipo INTEGER*4, mientras que algunos de los orde- nadores mas antiguos les asignaban INTEGER*2. Es muy importante respetar este convenio, ya que de esta forma se evitara una perdida de tiempo considerable. El orden de prioridad de los operadores aritmeticos que actuan sobre las variables enteras es el propio del algebra, es decir: 1. ** (potencia) 2. * y / (producto y division respectivamente) 3. + y - (suma y diferencia respectivamente) Si, por algun motivo, se desea alterar dicha prioridad, se deben utilizar parentesis (ver programa 3.2). En este programa se resaltan tres aspectos. El primero es que no ser a preciso declarar las variablesMVAR1, MVAR2, NPOT y JRES,puesto que por defecto yason enteras. El segundo es que en ningun momento se realizan operaciones que involucren variables de tipos diferentes. El tercero es la sentencia WRITE (6,*) NFIN. Como se presentara mas adelante, esta sentencia signi ca escribir en la pantalla del ordenador y con formato libre (de acuerdo con un procedimiento prede nido por el compilador FORTRAN) el valor de la variable NFIN.
  • 62. 3 Introduccion a la programacion FORTRAN 43 c c Este programa muestra algunos aspectos de la utilizacion c de variables enteras c c___________________________________________________________________ c___Declaracion de las variables enteras integer*2 kk integer*4 mvar1,mvar2,npot,jres c___Asignacion de la variable integer*2 kk = 13 c___Asignacion de algunas variables integer*4 mvar1 = 20 mvar2 = -10 npot = 5 c___Calculo de una variable integer*4 declarada explicitamente jres = (mvar1 + mvar2) * 2 c___Calculo de una variable integer*4 declarada por defecto nfin = jres**npot c___Escritura por pantalla del valor de una variable write (6,*) nfin stop end Prog. 3.2 Programacion con variables enteras 3.4.2 Constantes y variables reales Las constantes reales son numeros reales escritos en notacion de coma ja o bien en notacion cient ca. Las variables reales son s mbolos que solo pueden representar numeros reales. Al igual que pasa con las variables enteras, los ordenadores guardan el valor asignado a las variables reales como una cadena de bits de longitud nita. Dependiendo de la longitud de esta cadena se distinguen tres tipos de variables reales. REAL*4 (Simple precision). Se almacena la variable real en cuatro bytes. El numero mayor en valor absoluto que se puede almacenar es del orden de 1:7 1038 y el numero menor en valor absoluto y diferente de cero que se puede almacenar es del orden de 0:29 10;38 (cap tulo 4).
  • 63. 44 Metodos numericos REAL*8 (Doble precision). Se almacena la variable real de ocho bytes. Los numeros mayor y menor en valor absoluto que se puede almacenar son del orden de 0:9 10308 y 0:56 10;308, respectivamente (cap tulo 4). REAL*16 (Cuadruple precision). Se almacena la variable real en dieciseis bytes. Con- viene tener en cuenta que no todos los compiladores aceptan este tipo de variables. Ademas, el numero mayor y menor en valor absoluto que se puede almacenar depende tambien del tipo de ordenador. En general, con este tipo de variables se logran almacenar numeros mayores y mas proximos a cero. As mismo, tambien se logra mas precision. Por defecto, el compilador FORTRAN considera variables del tipo REAL*4 todas aquellas variables que no empiezan por: I, J, K, L, M, N En consecuencia, todas las variables del tipo REAL*8 o REAL*16 se tienen que declarar expl ci- tamente. La prioridad con que actuan los operadores aritmeticos sobre las variables reales es la misma con que actuan sobre las variables enteras. De nuevo, para alterar dicha prioridad deben utilizarse los parentesis. En el programa 3.3 se calcula el volumen de un cilindro y el de una esfera utilizando variables reales de tipo REAL*4 y REAL*8 las variables REAL*8 se han declarado expl citamente, mientras que las variables REAL*4 han sido declaradas por defecto. Conviene notar que en ningun caso se opera con variables de diferente tipo es decir, las operaciones se realizan siempre entre variables de simple precision o entre variables de doble precision. Es importante tener presente que se trata de un ejemplo ilustrativo en el sentido que, en la practica, raramente se utilizan estos dos tipos de variables en el mismo programa es decir, habitualmente, los calculos asociados a un determinado problema se realizan, o bien en simple precision, o bien en doble precision. Por otra parte, se han introducido en este ejemplo dos sentencias nuevas. La primera de ellas es la sentencia WRITE la instruccion WRITE (6,*) ' RADIO DEL CILINDRO:' signi ca escribir en la pantalla la cadena de caracteres RADIO DEL CILINDRO:. La segunda es la sentencia READ la instruccion READ (5,*) ALTURA signi ca leer del teclado el valor de la variable ALTURA. Problema 3.1: Es muy importante saber que sucede cuando la division entre dos numeros enteros da por resultado un numero real no entero y este se asigna a una variable entera. Por ejemplo, en el programa que se lista a continuacion, se realizan cocientes entre variables enteras (declaradas por defecto) y los resultados, que son en todos los casos valores reales no enteros, se almacenan en las variables enteras K1 y K2. Cual es el valor de las variables K1 y K2 que aparecera por la pantalla? Que implican estos resultados?
  • 64. 3 Introduccion a la programacion FORTRAN 45 c c Division de numeros enteros c c_______________________________ c___Asignacion de variables ivar1 = 1 ivar2 = 2 ndeno = 3 c___Calculo de los resultados k1 = ivar1 / ndeno k2 = ivar2 / ndeno c___Escritura por pantalla write (6,*) k1 write (6,*) k2 stop end 3.4.3 Constantes y variables complejas Las constantes complejas se describen como un par ordenado de numeros reales entre parentesis y separados por una coma: (-67.54, 0.53E-1). El primero representa la parte real del numero complejo mientras que el segundo representa su parte imaginaria. Las variables complejas se almacenan como dos numeros reales contiguos (naturalmente, no se almacenan ni los parentesis ni la coma). Dependiendo del tipo de numeros reales utilizados para de nir el numero complejo, se tienen dos tipos de variables complejas: COMPLEX*8 Las partes real e imaginaria se representan mediante un REAL*4. COMPLEX*16 Las partes real e imaginaria se representan mediante un REAL*8. No existen variables complejas que permitan almacenar la parte real y la parte imaginaria mediante numeros reales de diferente tipo. La prioridad con que actuan los operadores arit- meticos sobre las variables complejas es la misma con que actuan sobre los tipos de variables que se han visto hasta el momento. Por otro lado es importante notar que, para este tipo de variables, las operaciones aritmeticas tienen signi cados (de niciones) diferentes de los que ten an para los anteriores tipos de variables.
  • 65. 46 Metodos numericos En el programa 3.4 se manipulan variables complejas como ejemplos de operaciones que se pueden realizar con ellas se han utilizado varias funciones propias del FORTRAN como son CONJG(), REAL() y AIMAG(), que permiten obtener el complejo conjugado, la parte real y la parte imaginaria de un numero complejo respectivamente. c c Este programa muestra algunos aspectos de la utilizacion c de variables reales c c___________________________________________________________________ c___Declaracion de las variables real*8 real*8 radio2, vol2, pi2 c___Asignacion de las variables pi y pi2 pi = 3.141592653589793 pi2 = 3.141592653589793d0 c___Introduccion desde teclado c___de los datos para calculo del volumen de un cilindro write (6,*) 'radio del cilindro:' read (5,*) radio write (6,*) 'altura del cilindro:' read (5,*) altura c___Calculo del volumen del cilindro en simple precision vol = pi * radio * radio * altura c___Introduccion desde teclado c___de los datos para calculo del volumen de una esfera write (6,*) 'radio de la esfera:' read (5,*) radio2 c___Calculo del volumen de la esfera en doble precision vol2 = (4.d0 * pi2 * radio2 * radio2 * radio2) / 3.d0 c___Escritura de resultados write (6,*) 'volumen del cilindro (simple precision)=', vol write (6,*) 'volumen de la esfera (doble precision)=', vol2 stop end Prog. 3.3 Programacion con variables reales
  • 66. 3 Introduccion a la programacion FORTRAN 47 3.4.4 Constantes y variables logicas A las constantes y variables logicas solo se les pueden asignar dos valores distintos, que deben aparecer siempre entre puntos: .TRUE. que signi ca verdadero .FALSE. que signi ca falso c c Este programa muestra como utilizar variables complejas c c___________________________________________________________________ c___Declaracion de las variables complejas complex*8 z1,z2,z3 c___Asignacion de una variable compleja z1 = ( 2.0 , 3.0 ) c___Calculo del conjugado de una variable compleja z2 = conjg(z1) c___Calculo del producto de dos numeros complejos z3=z1*z2 c___Calculo de las partes reales e imaginarias x1 = real (z1) y1 = aimag (z1) x2 = real (z2) y2 = aimag (z2) x3 = real (z3) y3 = aimag (z3) c___Escritura por pantalla de los resultados write (6,*) ' z1 =', z1 write (6,*) ' z2 =', z2 write (6,*) ' z3 =', z3 write (6,*) ' x1 y y1 =', x1 , y1 write (6,*) ' x2 y y2 =', x2 , y2 write (6,*) ' x3 y y3 =', x3 , y3 stop end Prog. 3.4 Programacion con variables complejas
  • 67. 48 Metodos numericos Las variables logicas se deben declarar siempre mediante la sentencia LOGICAL. Como puede observarse en la tabla 3.1, los operadores logicos se pueden clasi car en dos grupos: operadores logicos de relacion, que permiten comparar expresiones aritmeticas dando como resultado una variable logica. operadores logicos espec cos, que permiten operar con variables logicas tambien generan como resultado una variable logica. Como puede observarse, tanto las constantes logicas como los operadores logicos deben escribirseprecedidos y seguidosde un punto (.). En caso de no observarseesta reglase producira un error de compilacion. En el programa 3.5 se muestran varios de los aspectos que se han comentado anteriormente. Tabla 3.1 Operadores logicos OPERADORES LOGICOS DE RELACION ESPECIFICOS .EQ. = .NOT. negacion .NE. 6= .AND. y .LT. .OR. o .LE. .XOR. o exclusivo .GT. .GE. 3.4.5 Constantes y variables alfanumericas Las constantes alfanumericas, como su propio nombre indica, estan formadas por cadenas de caracteres (letras y/o numeros) y se introducen siempre delimitadas por comillas simples, por ejemplo: 'ESTO ES UNA CADENA DE DIGITOS'. Conviene notar que los espacios en blanco tambien forman parte de la cadena. Al principio de cada modulo es siempre necesario declarar todas las variables alfanumericas. Ademas se debe especi car su longitud maxima (el numero maximo de caracteres que pueden contener). Dicha declaracion se realiza mediante la sentencia CHARACTER*n, donde n es un numero entero que representa la longitud de la cadena. Una de las operaciones mas usuales de las que se realizan con variables alfanumericas es la concatenacion es decir, la union de dos o mas variables alfanumericas para formar una unica cadena. Esta operacion se representa mediante el s mbolo //.
  • 68. 3 Introduccion a la programacion FORTRAN 49 En el programa 3.6 se muestra como se opera con este tipo de variables. Puede observarse que la variable CAD TOTAL se ha declarado con una longitud maxima igual a la suma de las longitudes con que se declaran las variables CAD1, CAD2 y CAD3. c c Este programa muestra como utilizar variables logicas c c___________________________________________________________________ c___Declaracion de las variables logicas logical flag1,flag2,flag3 c___Asignacion de variables logicas flag1 = .true. flag2 = .false. c___Operaciones con variables logicas flag3 = flag1 .and. flag2 c___Escritura por pantalla write (6,*) flag1 write (6,*) flag2 write (6,*) flag3 stop end Prog. 3.5 Programacion con variables logicas 3.4.6 Sentencia IMPLICIT Con el propositode simpli car la programacion,en muchoscasosresulta convenientedeclarar del mismo tipo todas las variables que empiezan por una determinada letra. Esto puede re- alizarse mediante la sentencia: IMPLICIT tipo de variable lista de letras As por ejemplo, la sentencia: IMPLICIT COMPLEX*8 Z obliga a que todas las variables que empiecen por la letra Z sean del tipo COMPLEX*8. Del mismo modo, la sentencia: IMPLICIT REAL*8 (A-H,O-Z)
  • 69. 50 Metodos numericos obliga a que, por defecto, todas las variables que empiecen por una letra comprendida entre la A y la H o entre la O y la Z sean del tipo REAL*8. c c Este programa muestra como utilizar variables alfanumericas c c___________________________________________________________________ c___Declaracion de las variables alfanumericas character*1 espacio character*5 cad1,cad2 character*7 cad3 character*19 cad_total c___Asignacion de variables alfanumericas espacio = ' ' cad1 = 'seat' cad2 = 'panda' cad3 = '16v GTI' c___Operacion con variables alfanumericas cad_total = cad1//espacio//cad2//espacio//cad3 c___Escritura por pantalla de los resultados write (6,*) cad_total stop end Prog. 3.6 Programacion con variables alfanumericas 3.5 Funciones en FORTRAN En FORTRAN se pueden distinguir dos clases de funciones: 1. Funciones intr nsecas. Son las funciones que incorpora directamente el compilador. Aunque la mayor a de los nombres asociados a cada una de ellas es estandar, cada fabricante a~nade algunas funciones propias. Para cada compilador se debe consultar el manual correspon- diente. 2. Funciones de usuario. Estas funciones las de ne el propio usuario (ver cap tulo 5).
  • 70. 3 Introduccion a la programacion FORTRAN 51 En los programas mostrados hasta el momento se han utilizado varias funciones intr nsecas (REAL(), AIMAG() o CONJG(), entre otras). Como se puede observar en los listados, las asig- naciones del tipo y = f (x) se realizan en FORTRAN de forma similar a como se realizan en matematicas. Conviene notar, sin embargo, que en las asignaciones FORTRAN las variables x e y deben ser del mismo tipo. 3.6 Sentencias de entrada{salida en FORTRAN En este apartado se exponen los aspectos esenciales de las sentencias asociadas a la lectura y escritura de datos de un archivo. En FORTRAN, el proceso de lectura (o escritura) se puede dividir en tres fases: 1. Primero, se asigna al archivo un numero denominado unidad logica. A partir de este mo- mento, cualquier referencia a dicho archivo se realiza a traves de la unidad logica. Como se comentara seguidamente, tambien se de nen en esta fase algunas propiedades del chero que se desea utilizar. Esta operacion se denomina abrir el archivo y se realiza mediante la instruccion OPEN. 2. A continuacion se realizan todas las operaciones de lectura y escritura. Las sentencias que se utilizan son READ, WRITE y FORMAT. 3. Finalmente, hay que romper la asignacion chero{unidad logica. Esta operacionse denomina cerrar el archivo y se realiza mediante la instruccion CLOSE. La sentencia OPEN debe aparecer antes de leer o escribir en el archivo as mismo, debe escribirse una instruccion CLOSE despues de acceder por ultima vez al chero. La sintaxis de estas dos instrucciones es la siguiente: OPEN ( UNIT = unidad logica, FILE = nombre de chero, STATUS = 8 : `NEW' `OLD' `UNKNOWN' 9 = ) CLOSE ( unidad logica ) donde: unidad logica es una constante o variable entera positiva que representa al chero. Se puede utilizar cualquier valor entero excepto: 1) el 5, que representa, por defecto, al teclado y 2) el 6, que representa, tambien por defecto, a la pantalla. Naturalmente, la unidad 5 solo se utiliza en instrucciones de lectura y la 6 solo en instrucciones de escritura. nombre de chero es una cadena alfanumerica y contiene el nombre del chero que se desea manipular.
  • 71. 52 Metodos numericos STATUS representa el estado en que se encuentra el archivo: NEW indica que el archivo no existe y hay que crearlo OLD indica que el archivo ya existe y no se debe crear y UNKNOWN indica que si el chero existe solo se debe utilizar mientras que si no existe hay que crearlo. La sintaxis de las sentencias READ y WRITE es la siguiente: READ ( UNIT = unidad logica, FORMAT = formato ) lista de variables WRITE ( UNIT = unidad logica, FORMAT = formato ) lista de variables donde: unidad logica es un numero entero positivo que representa al chero con el que se desea operar. Debe ser el mismo que aparece en la sentencia OPEN correspondiente. formato es la etiqueta de una l nea (por tanto, un entero positivo) en la que se especi ca como se desea leer o escribir el contenido de las variables que se detallan en lista de variables. Como se ha comentado anteriormente, si en lugar de una etiqueta aparece un *, la lista de variables se escribira en formato libre. lista de variables es la lista de las variables que hay que leer o escribir los nombres de las variables deben estar separados por comas. La sintaxis de la sentencia FORMAT es la siguiente etiqueta FORMAT ( lista de formato ) donde: etiqueta es la etiqueta de la l nea donde se encuentra la instruccion FORMAT. lista de formato es una lista formada por un conjunto de s mbolos que indican como se desea leer o escribir la lista de variables que aparece en la correspondiente sentencia READ o WRITE a cada variable que aparece dicha lista le corresponde un s mbolo en la lista de formato. Los s mbolos que pueden aparecer en lista de formato son de dos tipos: s mbolos de com- posicion y s mbolos de variables. Entre los primeros, los dos mas usuales son: / Signi ca saltar a la l nea siguiente del chero. nX Signi ca dejar n espacios en blanco. Entre los segundos, los mas utilizados son: nIm Signi ca leer o escribir n numeros enteros de m d gitos cada uno de ellos.
  • 72. 3 Introduccion a la programacion FORTRAN 53 nFm.d Signi ca leer o escribir n numeros reales de simple precision, expresados como parte entera y parte decimal, de m d gitos cada uno de ellos, de los cuales d se destinan a la parte fraccionaria. nEm.d Signi ca leer o escribir n numeros reales de simple precision, expresados en notacion cient ca, de m d gitos cada uno de ellos, de los cuales d se destinan a la parte fraccionaria. nDm.d Signi ca leer o escribir n numeros reales de doble precision, expresados en notacion cient ca, de m d gitos cada uno de ellos, de los cuales d se destinan a la parte fraccionaria. nAm Signi ca leer o escribir n variables alfanumericas de m d gitos cada una de ellas. nL Signi ca leer o escribir n variables logicas. El programa 3.7 permite calcular las ra ces de una ecuacion de segundo grado con coe - cientes reales. Este programa producira un error de ejecucion cuando el coe ciente cuadratico sea nulo o bien las ra ces sean complejas (compruebese). Tal como se puede ver en las instruc- ciones READ y WRITE correspondientes, los datos se leen del teclado, mientras que los resultados (dos cadenas alfanumericas y dos numeros reales en simple precision) se escriben en el chero RESUL.RES. Por otra parte, puede observarse tambien que el chero de resultados se ha abierto con STATUS=`NEW' puesto que no exist a anteriormente. Problema 3.2: Que sucede si el programa 3.7 se ejecuta dos veces consecutivas? Por que? Como deber a modi carse la sentencia OPEN para evitar este inconveniente? 3.7 Sentencias de control en FORTRAN En este apartado se presentan tres sentencias destinadas a controlar el orden con que se ejecutan las instrucciones: La sentencia condicional IF La sentencia GO TO El bloque DO - ENDDO
  • 73. 54 Metodos numericos 3.7.1 La sentencia IF En este subapartado se comentan las tres sintaxis mas utilizadas de la sentencia IF. La primera de ellas, y tambien la mas sencilla, es la siguiente: IF ( condicion ) sentencia donde condicion es una proposicion logica y sentencia es una instruccion que solo se ejecutara si la condicion logica es cierta si la condicion es falsa, se saltara a la siguiente l nea del programa. c c Este programa calcula las raices de una ecuacion de segundo c grado. Todas las variables son del tipo REAL*4 y estan c declaradas por defecto c c___________________________________________________________________ c___Entrada de los coeficientes desde teclado write (6,*) ' Entra el coeficiente cuadratico:' read (5,*) a write (6,*) ' Entra el coeficiente lineal:' read (5,*) b write (6,*) ' Entra el coeficiente independiente:' read (5,*) c c___Calculo de las raices dis = b*b - 4.*a*c x1 = (-1.0*b + sqrt(dis)) / (2.0 * a) x2 = (-1.0*b - sqrt(dis)) / (2.0 * a) c___Escritura de resultados en un archivo open (unit=12, file='resul.res', status='new') write (12,100) ' Primera solucion = ', x1 write (12,100) ' Segunda solucion = ', x2 100 format (2x,a20,2x,e15.8) close (12) stop end Prog. 3.7 Programacion con instrucciones de entrada y salida
  • 74. 3 Introduccion a la programacion FORTRAN 55 La segunda estructura de la sentencia IF esta formada por el siguiente bloque: IF ( condicion ) THEN bloque ENDIF En este caso, si la proposicion logica condicion es cierta, se ejecutaran todas las instrucciones contenidas en las l neas bloque en caso contrario, se ejecutara la l nea siguiente a la instruccion ENDIF. La tercera estructura de la sentencia IF es: IF ( condicion ) THEN primer bloque ELSE segundo bloque ENDIF En este caso, si la condicion es verdadera se ejecuta el primer bloque de sentencias y a contin- uacion la l nea siguiente a la instruccion ENDIF si la condicion es falsa se ejecuta el segundo bloque de instrucciones. El programa 3.8 es una ampliacion del programa 3.7 donde se han introducido dos sentencias IF con dos sintaxis distintas. Este programa permite detectar si el coe ciente cuadratico es demasiado proximo a cero. As mismo, se distinguen los casos en que la ecuacion de segundo grado tiene ra ces complejas. 3.7.2 La sentencia GO TO Esta sentencia trans ere el control del programa a una l nea determinada. Existen tres formas diferentes de utilizar la sentencia GO TO. Dos de ellas se mantienen por compatibilidad con las versiones anteriores del FORTRAN y estan claramente en desuso. La sintaxis mas utilizada es: GO TO etiqueta donde etiqueta es la etiqueta de la l nea que se ejecutara inmediatamente a continuacion de la sentencia GO TO. En el programa 3.9 se ha modi cado el bloque inicial del programa 3.8 a n de ilustrar la utilizacion de la sentencia GO TO. Cuando el coe ciente cuadratico es inferior, en valor absoluto, a una cierta tolerancia, se escribe un mensaje en la pantalla del ordenador y se pide que se introduzca un nuevo valor.
  • 75. 56 Metodos numericos c c Este programa calcula las raices de una ecuacion de segundo c grado. c c___________________________________________________________________ complex*8 z1,z2 c___Entrada de los coeficientes desde teclado tol = 1.0e-5 write (6,*) ' Entra el coeficiente cuadratico:' read (5,*) a if (abs(a).lt.tol) then write (6,*) ' El coeficiente cuadratico debe ser mayor' stop endif write (6,*) ' Entra el coeficiente lineal:' read (5,*) b write (6,*) ' Entra el coeficiente independiente:' read (5,*) c open (unit=12,file='resul.res',status='new') c___Calculo y escritura de las raices dis = b*b - 4.*a*c if (dis.ge.0.) then x1 = (-1.0*b + sqrt(dis)) / (2.0 * a) x2 = (-1.0*b - sqrt(dis)) / (2.0 * a) write (12,100) ' Primera solucion = ', x1 write (12,100) ' Segunda solucion = ', x2 else z1 = (cmplx(-1.0*b) - csqrt (cmplx (dis)))/ (cmplx(2.0*a)) z2 = (cmplx(-1.0*b) + csqrt (cmplx (dis)))/ (cmplx(2.0*a)) write (12,200) ' Primera solucion = ', z1 write (12,200) ' Segunda solucion = ', z2 endif 100 format (2x,a20,2x,e15.8) 200 format (2x,a20,2x,'(',e15.8,','e15.8,')') close (12) stop end Prog. 3.8 Utilizacion del bloque IF-ENDIF
  • 76. 3 Introduccion a la programacion FORTRAN 57 c c Este programa calcula las raices de una ecuacion de segundo c grado. c c___________________________________________________________________ c___Declaracion de variables complex*8 z1,z2 c___Entrada de los coeficientes desde teclado tol = 1.0e-5 10 write (6,*) ' Entra el coeficiente cuadratico:' read (5,*) a if (abs(a).lt.tol) then write (6,*) ' El coeficiente cuadratico debe ser mayor' go to 10 endif write (6,*) ' Entra el coeficiente lineal:' read (5,*) b write (6,*) ' Entra el coeficiente independiente:' read (5,*) c . . . Prog. 3.9 Utilizacion de la sentencia GO TO 3.7.3 El bloque DO { ENDDO El bloque DO-ENDDO se emplea para ejecutar c clicamente un conjunto de instrucciones. Su sintaxis es: DO ivar = n1 n2 n3 bloque ENDDO donde: ivar es la variable entera que controla el bucle. n1 es el valor inicial de la variable ivar.
  • 77. 58 Metodos numericos n2 es el valor nal de la variable ivar. n3 es el valor del incremento de la variable ivar. Si este valor no aparece, por defecto la variable n3 vale 1. Las sentencias contenidas entre las instrucciones DO y ENDDO se ejecutan variando el valor de ivar desde n1 hasta n2 e incrementandolo en n3 a cada paso por el bucle. Una sintaxis alternativa es: DO etiqueta ivar = n1 n2 n3 bloque etiqueta CONTINUE donde ivar, n1, n2 y n3 tienen el mismo signi cado que antes y etiqueta es una etiqueta que marca el principio y el nal del bucle. Un bucle DO-ENDDO siempre inicia su ejecucion mediante la sentencia DO. Es decir, no es posible utilizar una instruccion GO TO dirigida a una sentencia situada en el interior de un bucle. Sin embargo, es posible salir prematuramente de un bucle, es decir, antes de que la variable ivar haya alcanzado su valor maximo. Pueden utilizarse estructuras DO-ENDDO anidadas siempre que el bucle externo incluya todas las instrucciones del bucle interno (ver gura 3.2). Fig. 3.2 a) estructura correcta, y b) estructura incorrecta
  • 78. 3 Introduccion a la programacion FORTRAN 59 c c Este programa realiza una tabla de la funcion sin(x) entre c dos valores de x especificados por el usuario. c c___________________________________________________________________ c___Declaracion de variables implicit real*8 (a-h,o-z) character*20 file_out c___Entrada de los datos write (6,*) ' limite inferior:' read (5,*) xinf write (6,*) ' limite superior:' read (5,*) xsup write (6,*) ' numero de intervalos:' read (5,*) inter write (6,*) ' nombre del archivo:' read (5,'(a20)') file_out c___Realizacion de la tabla open (unit=30,file=file_out,status='new') write (30,50) xpas = (xsup - xinf) / dfloat(inter) do i=1,inter+1 x = xinf + dble(i-1)*xpas y = dsin (x) write (30,100) x,y enddo 50 format (8x,' X ',10x,' SIN(X) '/) 100 format (2(2x,d13.5)) close (30) stop end Prog. 3.10 Utilizacion del bloque DO-ENDDO En el programa 3.10 se muestra como realizar una tabla de la funcion f = sin(x) entre dos valores escogidos por el usuario. En este caso no se especi ca el valor de la variable n3, por lo
  • 79. 60 Metodos numericos que el incremento de la variable de control I vale 1. Otra novedad consiste en la utilizacion de una variable alfanumerica que contiene el nombre del archivo de resultados. En la tabla 3.2 se muestra el chero de resultados que se obtiene cuando el l mite inferior vale 0, el l mite superior vale 3.141592 y el numero de intervalos es 10. Tabla 3.2 Fichero de resultados X SIN(X) .00000D+00 .00000D+00 .31416D+00 .30902D+00 .62832D+00 .58779D+00 .94248D+00 .80902D+00 .12566D+01 .95106D+00 .15708D+01 .10000D+01 .18850D+01 .95106D+00 .21991D+01 .80902D+00 .25133D+01 .58779D+00 .28274D+01 .30902D+00 .31416D+01 .65359D-06 Problema 3.3: Escribir un programa FORTRAN que, dado el valor de un cierto radio r (entero y menor o igual que 100), calcule: 1. Todos los puntos de coordenadas enteras que esten sobre la circunferencia x 2 + y 2 = r 2 2. Todos los puntos de coordenadas enteras que esten dentro de la circunferencia x 2 + y 2 = r 2 Los resultados se deben mostrar por pantalla y guardar en un archivo. Problema 3.4: Se puede demostrar que al evaluar un polinomio pn(x) mediante la expresion: pn(x) = n X i=0 ai x i se deben realizar n(n + 1)=2 multiplicaciones y n sumas. La regla de Horner evalua el mismo polinomio de la siguiente forma: pn(x) = (anx + an;1)x + an;2 x + an;3 : : : ! x + a0
  • 80. 3 Introduccion a la programacion FORTRAN 61 que solo requiere n multiplicaciones y n sumas. Se pide escribir un programa en FORTRAN que construya, utilizando la regla de Horner, una tabla de valores del polinomio: p4(x) = 2x 4 ; 20x 3 + 70x 2 ; 100x + 48 para valores de x en el intervalo ;4 ;1], con saltos de x de valor x = 0:5. 3.8 Bibliograf a Borse, G. J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e ingenier a. Anaya, 1989. Ellis, T.M.R. FORTRAN 77 Programming. Addison{Wesley Publishing Company, 1990. Garc a Merayo, F. Programacion en FORTRAN 77. Paraninfo, 1988. Lignelet, P. FORTRAN 77. Lenguaje FORTRAN V. Masson S.A., 1987. Mouro, D.M. FORTRAN 77. Edward Arnold Ed., 1982.
  • 82. 4 Numero, algoritmo y errores 63 4 Numero, algoritmo y errores Objetivos De nir la expresion general de un numero en una base de numeracion. Comentar las bases de numeracion mas utilizadas. Detallar como se almacenan los numeros enteros y reales en un ordenador. Introducir los conceptos de over ow y under ow. Presentar los tipos de errores en calculo numerico: errores de redondeo, errores de truncamiento y errores inherentes. Discutir la nocion de cifras signi cativas correctas. Estudiar la propagacion del error en las operaciones aritmeticas elementales y en una secuencia de operaciones. 4.1 Introduccion En este cap tulo se presentaran dos conceptos basicos que apareceran posteriormente en la mayor a de las aplicaciones de los metodos numericos. El primero es la representacion de un numero en el ordenador. Para ello se estudiara como el ordenador almacena los numeros enteros y los numeros reales. La caracter stica mas importante es que siempre se utiliza un numero nito de d gitos para su representacion. Por tanto, resulta imposible almacenar numeros como = 3:141592653589793238462643::: exactamente me- diante una cantidad nita de cifras. Esta restriccion implica el concepto de error de redondeo, © Los autores, 1998; © Edicions UPC, 1998.
  • 83. 64 Metodos numericos es decir, el error que se comete al almacenar un numero mediante una cadena nita de d gitos, cuando para almacenarlo exactamente se precisan muchos mas (o in nitos). El segundo es el concepto de algoritmo. Como se comenta mas adelante, un algoritmo debe estar formado por un numero nito de instrucciones. Sin embargo, existen procesos que requieren un numero in nito de pasos. Por ejemplo, el calculo exacto de la exponencial de un numero mediante la serie de Taylor requiere in nitos sumandos ex = 1 + x + x2 2! + x3 3! + x4 4! + x5 5! + Es evidente que resulta imposible calcularlos todos. Por tanto, solo se sumaran unos cuantos terminos y, consecuentemente, solo se obtendra una aproximacion a la exponencial. El error que se comete en los calculos al truncar el proceso in nito se denomina error de truncamiento. Por ultimo, en este cap tulo se analiza como estos errores in uyen en los calculos posteriores. Es decir, se estudia la propagacion de los errores en los metodos numericos. 4.2 Numero Antes de presentar como se almacenan los numeros en el ordenador es necesario repasar algunos conceptos basicos. El primero es la representacion de un numero en una base de nu- meracion. Para representar cualquier cantidad en una cierta base de numeracion n, se precisan n d gitos diferentes (en general: 0 1 2 ::: n ; 1). En la tabla 4.1 se muestran las bases de numeracion mas utilizadas en el ambito de los ordenadores. La representacion general de un numero en una cierta base de numeracion n, si se designa por di el d gito situado en la i{esima posicion, esta de nida por la siguiente expresion dp dp-1 ::: d2 d1 d0 :d-1 d-2 d-3 ::: d-(q-1) d-q n = dpnp + dp-1np-1 + ::: d2n2 + d1n1 + d0n0 + d-1n-1 + d-2n-2 + d-3n-3 ::: d-(q-1)n-(q-1) + d-qn-q (4:1) As por ejemplo, los numeros (745.863)10 y (101.011)2 signi can respectivamente 745.863 10 = 7 102 + 4 101 + 5 100 + 8 10-1 + 6 10-2 + 3 10-3 y 101.011 2 = 1 22 + 0 21 + 1 20 + 0 2-1 + 1 2-2 + 1 2-3 © Los autores, 1998; © Edicions UPC, 1998.
  • 84. 4 Numero, algoritmo y errores 65 Tabla 4.1 Bases de numeracion BASES DE NUMERACION DECIMAL BINARIA OCTAL HEXADECIMAL base 10 base 2 base 8 base 16 0 0 0 0 1 1 1 1 2 10 2 2 3 11 3 3 4 100 4 4 5 101 5 5 6 110 6 6 7 111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F La forma concreta de almacenar los numeros depende ligeramente del tipo de ordenador y del lenguaje de programacion utilizado, pero siempre se almacenan en el sistema binario (base dos). Aunque la expresion 4.1 permite representar tanto numeros enteros (parte fraccionaria nula) como reales, ambos tipos de numeros de almacenan de forma distinta en el ordenador. 4.2.1 Almacenamiento de los numeros enteros Los numeros enteros, representados en el sistema binario, se almacenan en S posiciones (bits), de las cuales se reserva una para indicar el signo del numero (vease la gura 4.1): © Los autores, 1998; © Edicions UPC, 1998.
  • 85. 66 Metodos numericos Fig. 4.1 Almacenamiento de un numero entero De acuerdo con la expresion 4.1, el valor del numero entero es dS-2 ::: d2 d1 d0 2 = dS-22S-2 + ::: + d222 + d121 + d020 En estas condiciones, el numero entero maximo (en valor absoluto) que se puede almacenar se obtiene para dS-2 = = d1 = d0 = 1 (vease la gura 4.2) Fig. 4.2 Numero entero maximo (en valor absoluto) y su valor es Nmax = 1 2S-2 + ::: + 1 22 + 1 21 + 1 20 = 1 ; 2S-1 1 ; 2 = 2S-1 ; 1 (4:2) As pues, utilizando S posiciones pueden guardarse todos los enteros comprendidos entre ;(2S-1 ; 1) y 2S-1 ; 1. En particular, el numero entero no nulo mas proximo a cero que puede almacenarse es logicamente 1 (vease la gura 4.3): Nm{n = 1 20 = 1 (4:3) © Los autores, 1998; © Edicions UPC, 1998.
  • 86. 4 Numero, algoritmo y errores 67 Fig. 4.3 Numero entero no nulo m nimo (en valor absoluto) A partir de la expresion 4.2 es facil comprobar que para una variable INTEGER*2 de FOR- TRAN (S = 16 posiciones para almacenar el numero entero), el numero maximo (en valor absoluto) es 32 767. As mismo, para las variables INTEGER*4 (S = 32 posiciones) el numero maximo (en valor absoluto) es 2 147 483 647. Es importante remarcar que estas limitaciones en la capacidad de almacenar numeros esta asociada a la utilizacion de una aritmetica nita. 4.2.2 Almacenamiento de los numeros reales El almacenamiento de los numeros reales podr a realizarse mediante su representacion ge- neral en una cierta base n (ver expresion 4.1). A este tipo de representacion se le denomina coma ja. Sin embargo, los ordenadores almacenan los numeros reales en una representacion denominada coma otante. En ella, el numero se representamediante una mantisa (fraccionaria) y un exponente (entero). El numero real es la mantisa multiplicada por la base de numeracion elevada al exponente. Porejemplo, el numero (891.246)10 se representacomo (0.891246)10 103 (mantisa 0.891246, exponente 3) y el numero (0.00753)10 se escribe como (0.753)10 10-2 (mantisa 0.753, exponente ;2). Como puede observarse, el punto decimal se desplaza ( ota) hasta que la parte entera es nula y el primer d gito decimal es siempre diferente de cero. Esta misma representacion puede utilizarse en cualquier base de numeracion. Por ejemplo, si se utiliza el sistema binario el numero (101.001)2 es igual a (0.101001)2 2(11)2 . Todos los ordenadores almacenan los numeros reales en base dos y en coma otante. La diferencia entre un tipo de ordenador y otro reside, por una parte, en el numero de d gitos (bits en el sistema binario) que se reserva para la mantisa y el exponente y por otra, en el orden en que estos se almacenan. En cualquier caso, se puede suponer que el ordenador almacena los numeros reales en: Base dos. Coma otante. Con M posiciones para la mantisa (una de ellas, para el signo de la mantisa). Con E posiciones para el exponente (una de ellas, para el signo del exponente). © Los autores, 1998; © Edicions UPC, 1998.
  • 87. 68 Metodos numericos Este tipo de almacenamiento se representa gra camente en la gura 4.4. Puede observarse que se reservan dos posiciones para los signos (el de la mantisa y el del exponente). Fig. 4.4 Almacenamiento de un numero real Teniendo en cuenta la expresion 4.1 y la representacion en coma otante, el valor del numero real es :d-1 d-2 d-3 ::: d-(M-1) 2 2 (dE-2 :::d2 d1 d0)2 = d-12-1 + d-22-2 + ::: + d-(M-1)2-(M-1) 2 (dE-22E-2 + :::+ d121 + d020) Mediante esta representacion, el numero real mayor (en valor absoluto) que se puede almacenar se obtiene a partir de la mantisa maxima y el exponente maximo (vease la gura 4.5): Nmax = 1 2-1 + 1 2-2 + ::: + 1 2-(M-1) 2 1 2E-2 + :::+ 1 21 + 1 20 = 1 2 1 + 1 2 2 + ::: + 1 2 (M-1) 2 2(E;1) ;1 = 1 2 1 ; (1=2)(M;1) 1 ; (1=2) 2 2(E;1) ;1 = ; 1 ; 2(1;M) 2 2(E;1) ;1 (4:4) Fig. 4.5 Numero real maximo (en valor absoluto) © Los autores, 1998; © Edicions UPC, 1998.
  • 88. 4 Numero, algoritmo y errores 69 Por otro lado, el numero real no nulo mas proximo a cero que puede almacenarse se obtiene para la mantisa m nima y el maximo exponente con signo negativo, como muestra la gura 4.6: Fig. 4.6 Numero real no nulo m nimo (en valor absoluto) y su valor es Nm{n = 1 2-1 2 ; 1 2E-2 + :::+ 1 22 + 1 21 + 1 20 = 2;1 2; 2(E;1) ;1 = 2; 2(E;1) (4:5) Notese que la mantisa m nima es 2;1 puesto que, en la de nicion de la representacion de coma otante, se exige que el primer d gito a la derecha de la coma sea distinto de cero. Los valores de M y E en las variables reales del FORTRAN var an ligeramente segun el modelo de ordenador. Para las variables REAL*4, puede tomarse, a t tulo orientativo, M = 24 posiciones para la mantisa y E = 8 posiciones para el exponente. A partir de las expresiones 4.4 y 4.5 se obtiene que pueden almacenarse numeros reales comprendidos entre 0:29 10-38 y 1:7 1038. En cuanto a las variables REAL*8, los valores t picos son M = 53 y E = 11. Esto permite guardar numeros entre 0:56 10-308 y 0:9 10308. Se ha presentado aqu la idea basica del almacenamiento de numeros reales en el ordenador. En la practica, los distintos fabricantes de hardware han empleado ligeras modi caciones de esta idea, con el objetivo de conseguir el maximo de capacidad y de precision para el espacio de memoria destinado a almacenar el numero (Higham, 1996). El formato mas habitual es el del IEEE (Institute of Electrical and Electronic Engineers), que se esta convirtiendo en el estandar mas extendido. En el formato IEEE los valores maximo y m nimo son algo distintos a los se~nalados, pero del mismo orden de magnitud: 10 38 en simple precision y 10 308 en doble precision. 4.2.3 Over ow y under ow En el subapartado anterior se ha demostrado que la representacion de un numero real en el ordenador implica la existencia de un rango de numeros reales que pueden guardarse. Cuando en un programa se intenta almacenar un numero mayor que el maximo ( gura 4.5) se produce © Los autores, 1998; © Edicions UPC, 1998.
  • 89. 70 Metodos numericos un error que se denomina over ow. Del mismo modo, cuando se intenta almacenar un numero menor que el m nimo ( gura 4.6) se produce un error llamado under ow. Lo que sucede exactamente en ambos casos, as como el posible mensaje de error, depende del ordenador y del compilador utilizado. De todos modos, debe ser el programador quien tome las medidas oportunas a n de evitar estos problemas. Problema 4.1: En el lenguaje de programacion C existe un tipo de variable llamado unsigned integer que se caracteriza, basicamente, por ser una variable entera de 16 bits o 32 bits (dependiendo del procesador de que se disponga) que solo puede tomar valores positivos (no se reserva una posicion para el signo). Se pide: a) Determinar para cada caso de unsigned integer (16 bits o 32 bits) cual es el mayor numero entero y el entero mas proximo a cero (ambos en valor absoluto) que se puede almacenar. b) Que tipo de variable permite almacenar un numero mayor en valor absoluto: un unsigned integer de 16 bits, uno de 32 bits (lenguaje C) o un INTEGER*4 en lenguaje FORTRAN? c) Cual de los tres tipos de variables enteras mencionadas en el apartado b permite almacenar el numero k = 3125587976? Cual de los tres anteriores tipos de variable enteras permite almacenar el numero ? 4.3 Algoritmo Un algoritmo es un sistema organizado para resolver un problema, formado por una serie nita de instrucciones que solo se pueden interpretar un vocamente y que se realizan secuen- cialmente. Fig. 4.7 S mbolos mas utilizados en la representacion de algoritmos mediante diagramas de ujo En la actualidad existen, principalmente, dos formas de representar los algoritmos. La © Los autores, 1998; © Edicions UPC, 1998.
  • 90. 4 Numero, algoritmo y errores 71 primera es mediante diagramas de ujo y la segunda mediante pseudocodigo. En la repre- sentacion de algoritmos mediante diagramas de ujo se utilizan una serie de s mbolos con un signi cado predeterminado, que se unen mediante echas que indican el orden en que se deben ejecutar las instrucciones. Aunque estos s mbolos no estan totalmente estandarizados, algunos de ellos si que estan ampliamente aceptados. En la gura 4.7 se muestran los mas utilizados. En la gura 4.8 se presenta mediante un diagrama de ujo el algoritmo utilizado en el programa 3.8 para la resolucion de la ecuacion de segundo grado ax2 + bx + c = 0. Fig. 4.8 Diagrama de ujo correspondiente a la resolucion de una ecuacion de segundo grado En la representacionmediante pseudocodigo, las instrucciones se especi can de forma similar a como se programan en un lenguaje de programacion. Es importante resaltar que no existe ningun convenio acerca de como representar las instrucciones. En este sentido, la forma en que cada persona las detalla depende mucho del lenguaje de programacion que acostumbra a utilizar. Con el proposito de ilustrar este metodo, a continuacion se presenta el algoritmo de Euclides para determinar el maximo comun divisor de dos numeros dados (m y n). © Los autores, 1998; © Edicions UPC, 1998.
  • 91. 72 Metodos numericos 1. Entrar m y n (m n) 2. r = mod (m,n) 3. Si r = 0 entonces MCD = n y FIN 4. m n n r 5. Ir al paso 2 donde mod (m,n) es una funcion que devuelve el resto de la division de m entre n. Problema 4.2: Escribir el algoritmo de resolucion de la ecuacion segundo grado utilizando una representacion en pseudocodigo. As mismo, escribir el algoritmo de Euclides mediante una representacion en diagrama de ujo. 4.4 Errores 4.4.1 Error absoluto, error relativo y cifras signi cativas Sea x el valor exacto de una cantidad y sea x su valor aproximado. Se de ne el error absoluto como Ex = x ; x (4:6) El error absoluto mide la diferencia entre el valor exacto de una cantidad y su valor aproximado. De esta forma se puede a rmar que alguien ha medido la longitud de un campo de futbol o la longitud de un bol grafo con un error de un cent metro. Sin embargo, dicho error no tiene la misma importancia en ambos casos. Para cuanti car la importancia del error respecto del valor exacto de una cierta cantidad x se introduce el concepto de error relativo, que se de ne como rx = Ex x = x ; x x (4:7) Notese que el error relativo no esta de nido para x = 0. La ecuacion 4.7 muestra que el error relativo es una cantidad adimensional, que habitualmente se expresa en tanto por ciento (%). Es importante resaltar que generalmente no se conoce el valor exacto de la cantidad x. En consecuencia, tampoco se puede conocer ni el error absoluto ni el error relativo cometido y hay que conformarse con calcular una cota del error. Puesto que ahora se dispone de una de nicion cuantitativa de la importancia relativa del error, es posible plantearse cual es la cota del error de redondeo cometido al almacenar un numero. Como se ha comentado anteriormente, los numeros reales se almacenan en coma otante. Por ejemplo, los numeros 23:487 se guardan como 0:23487 102. De forma generica, puede escribirse m 10e (4:8) © Los autores, 1998; © Edicions UPC, 1998.
  • 92. 4 Numero, algoritmo y errores 73 donde 0 m 1 representa la mantisa y e es un numero entero que indica el exponente. Sea t el numero de d gitos destinados a la representacion de la mantisa (se supone que t no incluye la posicion del signo). Por consiguiente, si una persona realiza unos calculos trabajando en base diez, coma otante y utilizando cinco d gitos para la mantisa (t = 5), puede representar los siguientes numeros: 0:23754 102, 0:10000 105, o 0:19876 10;3. Sin embargo, que le sucede cuando desea representar el numero a = 0:98567823? Evi- dentemente no puede almacenarlo exactamente puesto que solo dispone de cinco cifras para representar la mantisa. En consecuencia puede optar por una de las dos siguientes alternativas: a1 = 0:98567 o a2 = 0:98568. La primera se denomina redondeo por eliminacion mientras que la segunda se denomina redondeo por aproximacion. En general, se puede demostrar que si se representa un numero en base n, coma otante, reservando t d gitos para la mantisa (sin reservar una posicion para el signo) y redondeando por eliminacion, la cota del error relativo que se comete vale jrej n1;t Por el contrario, si el redondeo es por aproximacion, la cota del error relativo es jraj 1 2 n1;t (4:9) Como se puede observar, la cota del error relativo cuando se redondea por aproximacion es la mitad que cuando se redondea por eliminacion. Por este motivo todos los ordenadores almacenan los numeros reales redondeando por aproximacion. Por ejemplo, si se realiza un calculo representando los numeros en base diez, coma otante, utilizando tres cifras para la mantisa y redondeando por aproximacion, la cota del error relativo debido al redondeo vale jrj 1 2 101;3 = 0:005 En el ordenador sucede exactamente lo mismo. Cuando se representa un numero real mediante una variable REAL*4 (24 bits para la mantisa reservando uno para el signo, por tanto t = 23), la cota del error relativo debido al redondeo es jrj 1 2 21;23 = 2;23 = 1:19 10;7 Si se utilizan variables REAL*8 (53 bits para la mantisa reservando uno para el signo, por tanto t = 52), entonces jrj 1 2 21;52 = 2;52 = 2:22 10;16 Puede verse que mediante variables REAL*8 se obtiene una precision mayor (menor error rela- tivo) que con variables REAL*4. El formato IEEE incorpora una modi cacion que mejora las precisiones recien indicadas. La idea es la siguiente (vease la gura 4.4): el primer d gito de la mantisa, d-1, siempre vale 1 © Los autores, 1998; © Edicions UPC, 1998.
  • 93. 74 Metodos numericos (no puede ser 0 puesto que es el primer d gito a la derecha de la coma) y no hace falta guardarlo (Higham, 1996). Con ello se gana un d gito para la mantisa que permite obtener cotas del error relativo de redondeo de 2;24 = 0:60 10;7 en simple precision y de 2;53 = 1:11 10;16 en doble precision. El error relativo esta relacionado con la nocion de cifras signi cativas correctas. Las cifras signi cativas de un numero son la primera no nula y todas las siguientes. As pues, 2.350 tiene cuatro cifras signi cativas mientras que 0.00023 tiene solo dos. Sea x una aproximacion a x. Parece intuitivamente claro que son las cifras signi cativas correctas de x, pero no es facil dar una de nicion precisa. Por ejemplo, una posible de nicion es la siguiente: una aproximacion x a x tiene q cifras signi cativas correctas si al redondear x y x a q cifras signi cativas se obtiene el mismo resultado. Esta de nicion es aparentemente muy natural. Sin embargo, tomense los valores x = 0:9949 y x = 0:9951. Segun la de nicion, x tiene una cifra signi cativa correcta (al redondear, x ! 1 y x ! 1) y tambien tres cifras signi cativas correctas (x ! 0:995 y x ! 0:995). En cambio, no tiene dos cifras signi cativas correctas! (x ! 1:0 y x ! 0:99). Para evitar estas anomal as, se adopta la siguiente de nicion: la aproximacion x a x tiene q cifras signi cativas correctas si el error relativo veri ca jrxj 1 2 10;q (4:10) Con esta de nicion, un sencillo calculo permite decir, sin ambiguedad, que x = 0:9951 tiene tres cifras signi cativas correctas de x = 0:9949 (compruebese). Problema 4.3: En un proceso de calculo hay que evaluar la serie Sn = 1 + 1 2 + 1 22 + 1 23 + + 1 2n Interesa determinar cuantos terminos de la serie tiene sentido calcular consideran- do la precision del tipo de variables que se utiliza. Como puede observarse, a excepcion del primer termino, cada sumando de la serie representa una potencia negativa del numero 2. Por lo tanto, cada sumando puede interpretarse como un d gito en la representacion en base dos y coma otante de los numeros reales ( gura 4.4). Para calcular dicho numero de terminos se propone el siguiente algoritmo: 1. a 1 half 0.5 i 0 2. b 2 3. Repetir mientras que (b 1) 4. a a * half 5. i i + 1 6. b a + 1 © Los autores, 1998; © Edicions UPC, 1998.
  • 94. 4 Numero, algoritmo y errores 75 7. Fin de repetir 8. Escribir i-1 y 2*a y FIN Se pide: a) Explicar razonadamente el funcionamiento del algoritmo. Por que se escriben las variables i;1 y 2 a ? b) Realizar dos programas, uno en REAL*4 y otro en REAL*8, en los que se implemente el anterior algoritmo. Comentar los resultados obtenidos. 4.4.2 Clasi cacion de los errores En el contexto de los metodos numericos, se considera que el error total que contiene un numero puede ser debido a los siguientes tipos de errores: 1. Error inherente. En muchas ocasiones, los datos con que se inician los calculos contienen un cierto error debido a que se han obtenido mediante la medida experimental de una determinada magnitud f sica. As por ejemplo, el diametro de la seccion de una varilla de acero presentara un error segun se haya medido con una cinta metrica o con un pie de rey. A este tipo de error se le denomina error inherente. 2. Error de redondeo. Como ya se ha comentado, un aspecto muy importante de la repre- sentacion de los numeros reales en el ordenador es que estos se almacenan siempre mediante una cadena nita de d gitos. Por tanto, en muchas ocasiones resulta imposible representar exactamente un numero real (recordar el ejemplo del numero que se ha mencionado en la introduccion de este cap tulo). Sin embargo, hay que considerar esta propiedad en muchos otros casos en los que no parece tan evidente. Por ejemplo, resulta evidente que el numero (0.2)10 puede representarse exactamente mediante una cadena nita de d gitos en dicha base. Sin embargo, su expresion en base dos es (0.2)10 = 0.0011 0011 0011 0011 0011 ::: 2 = .11 0011 0011 0011 0011 ::: 2 2(-10)2 que obviamente no se puede almacenar mediante una cadena nita de d gitos. En conse- cuencia, cuando se almacena un numero real se puede cometer un error. A este error se le denomina error de redondeo. Es importante recordar que la cota del error cometido depende de la base de numeracion utilizada y del numero de d gitos empleados para almacenar la mantisa, pero no depende de las posiciones reservadas para el exponente (ver expresion 4.5). 3. Error de truncamiento. En el apartado 4.3 se ha comentado que un algoritmo debe estar formado por un numero nito de instrucciones. Sin embargo, existen muchos procesos que requieren la ejecucion de un numero in nito de instrucciones para hallar la solucion exacta de un determinado problema. Puesto que es totalmente imposible realizar in nitas © Los autores, 1998; © Edicions UPC, 1998.
  • 95. 76 Metodos numericos instrucciones, el proceso debe truncarse. En consecuencia, no se halla la solucion exacta que se pretend a encontrar, sino una aproximacion a la misma. Al error producido por la nalizacion prematura de un proceso se le denomina error de truncamiento. Un ejemplo del error generado por este tipo de acciones es el desarrollo en serie de Taylor de una funcion f(x) f(x) = f(x0) + f0(x0)(x ;x0) + f00(x0) (x ;x0)2 2! + f000(x0) (x ;x0)3 3! + ::: + f(n) (x0) (x ;x0)n n! + Rn(x) donde el residuo Rn(x) (resto de Lagrange) representa la suma de todos los terminos desde n+ 1 hasta in nito y puede expresarse como Rn(x) = f(n+1) ( ) (x ;x0)n+1 (n + 1)! donde es cualquier valor entre x0 y x. Puesto que, en general, se desconoce el valor de , no puede evaluarse exactamente el valor de Rn(x). Por este motivo, hay que conformarse con obtener una cota del error de truncamiento que se comete al truncar el desarrollo en serie en la derivada n-esima. Como en este ejemplo, en la mayor a de algoritmos tampoco se puede calcular exactamente el error de truncamiento cometido. En cualquier caso, siempre resulta muy interesante hallar una cota de su valor. 4.5 Propagacion del error En este apartado se cuanti cara la propagacion del error al efectuar operaciones. Se ob- tendran expresiones que relacionan el error del resultado obtenido con el error de los datos. Sin embargo, el error de los datos es desconocido (si se conociera, a partir de este y del valor aproximado siempre se podr a calcular el valor exacto). Lo que generalmente se conoce, bien a partir de la precision de los aparatos de medida o bien a partir de desigualdades como la expresion 4.9, es una cota del error de los datos. En consecuencia, el objetivo ahora es deducir una expresion para la cota del error en el resultado de una secuencia de operaciones. En este sentido, si la realizacion de un calculo puede llevarse a cabo mediante dos expresiones, sera aconsejable utilizar aquella que tenga asociada una cota del error menor. 4.5.1 Conceptos previos Las consecuencias de la existencia de un error en los datos de un problema son mas impor- tantes de lo que aparentemente puede parecer. Desafortunadamente, estos errores se propagan y ampli can al realizar operaciones con dichos datos, hasta el punto de que puede suceder que © Los autores, 1998; © Edicions UPC, 1998.
  • 96. 4 Numero, algoritmo y errores 77 el resultado carezca de signi cado. Con el proposito de ilustrar esta situacion, seguidamente se calcula la diferencia entre los numeros a = 0:276435 b = 0:2756 Si los calculos se realizan en base diez, coma otante, redondeando por aproximacion y traba- jando con tres d gitos de mantisa, los valores aproximados a dichos numeros y el error relativo cometido es a = 0:276 jraj = 1:57 10;3 b = 0:276 jrbj = 1:45 10;3 Si ahora se calcula la diferencia entre los valores exactos y la diferencia entre los aproximados se obtiene a ;b = 0:000835 a ;b = 0:0 Debe observarse que el error relativo de la diferencia aproximada es del 100%. Este ejemplo, extraordinariamente sencillo, pone de mani esto como el error de redondeo de los datos se ha ampli cado al realizar una unica operacion, hasta generar un resultado carente de signi cado. El ejemplo anterior es un caso particular de unas propiedades generales que se analizaran en este apartado. As mismo, tambien se propondran algunas normas destinadas a reducir la propagacion de los errores, como por ejemplo: evitar restar numeros muy parecidos o evitar dividir por numeros muy peque~nos comparados con el numerador. Por ultimo, hay que tener en cuenta el efecto conjunto de los tres tipos de errores. Sus con- secuencias se pueden ilustrar a partir del calculo de la exponencial expuesto en la introduccion de este cap tulo ex = 1 + x + x2 2! + x3 3! + x4 4! + x5 5! + ::: Si se representa el valor absoluto del error de truncamiento jrtj frente al numero de terminos de la serie considerados, se observa que tiende asintoticamente a cero al ir calculando mas terminos de dicha serie (ver gura 4.9). Por consiguiente, se puede concluir que cuantos mas terminos se calculen mejor. Sin embargo, si se considera la propagacion del error de redondeo, es de esperar que el valor absoluto de dicho error jrrj aumente con el numero de terminos considerados, puesto que cada vez se realizan mas operaciones (ver gura 4.9). Por lo tanto, si se calcula la suma de los valores absolutos de los dos errores jrsj (error total), se observa que existe un numero de terminos para el cual el error es m nimo. As pues, se puede a rmar que en este tipo de procesos existe un paso mas alla del cual empiezan a obtenerse peores resultados. Desafortunadamente, no existe, en general, un metodo para hallar el valor de dicho paso. En la practica, a partir de criterios f sicos y numericos se impone una cierta tolerancia (valor maximo del error que puede aceptarse). Cuando el error del proceso es menor que dicha tolerancia este se detiene. Es interesante resaltar que el valor asignado a la tolerancia debe escogerse razonadamente. Por ejemplo, en la gura 4.9 se ilustra como al tomar una tolerancia excesivamente peque~na (tolerancia 2 ), el error total nunca es inferior a dicho valor y © Los autores, 1998; © Edicions UPC, 1998.
  • 97. 78 Metodos numericos en consecuencia, el proceso no se detendr a nunca. Por el contrario, si el valor de la tolerancia es superior (tolerancia 1 ), existe un cierto termino en el cual se obtiene la precision requerida. Fig. 4.9 Propagacion del error en un algoritmo numerico 4.5.2 Propagacion del error en la suma En esta y en las siguientes demostraciones se denotara por x e y los valores exactos de dos numeros y por x e y sus valores aproximados. As mismo, los errores absolutos y relativos de estas cantidades se denotaran por Ex, Ey, rx, ry, respectivamente. Si se representa por s = x + y al valor exacto de la suma y por s = x + y su valor aproximado, entonces el error absoluto de la suma es Es = s ; s = (x + y) ; (x + y) = Ex + Ey La expresion anterior indica que el error absoluto de la suma es la suma de valores absolutos de los sumandos. El error relativo vale rs = Es s = Ex + Ey x + y = x x + y rx + y x + y ry (4:11) donde se puede observar que el error relativo de la suma es la suma de los errores relativos de los datos multiplicados por unos factores que dependen de dichos datos. Esta dependencia se muestra gra camente en la gura 4.10. © Los autores, 1998; © Edicions UPC, 1998.
  • 98. 4 Numero, algoritmo y errores 79 Fig. 4.10 Propagacion del error relativo en una suma 4.5.3 Propagacion del error en la resta La deduccion para la propagacion del error mediante la resta es muy parecida a la anterior. Si se representa por r = x ; y al valor exacto de la resta y por r = x ; y su valor aproximado, entonces el error absoluto es Er = r ; r = (x ; y) ; (x ;y) = Ex ; Ey y el error relativo es rr = Er r = Ex ; Ey x ; y = x x ; y rx ; y x ; y ry (4:12) Fig. 4.11 Propagacion del error relativo en una resta En la gura 4.11 se representa gra camente la propagacion del error relativo de la resta. Ahora puede observarse el efecto de ampli cacion del error que los coe cientes de la expresion 4.12 pueden producir. En efecto, si se calcula la diferencia entre dos numeros muy parecidos, los terminos x=(x;y) y ;y=(x;y) seran extraordinariamente grandes y, en consecuencia, el error relativo rr sera muy superior a los errores rx y ry. Desafortunadamente, la unica forma de evitar este comportamiento es no restando numeros muy parecidos. Obviamente, este mismo fenomeno se produce al sumar dos numeros x e y tales que x ;y (ver expresion 4.11). © Los autores, 1998; © Edicions UPC, 1998.
  • 99. 80 Metodos numericos 4.5.4 Propagacion del error en el producto Si se representa el producto de dos numeros exactos mediante p = xy y el valor aproximado del producto por p = xy, el error absoluto del producto se puede calcular como Ep = p ; p = (x y) ; (x y) = (x y) ; (x ; Ex) (y ; Ey) = xEy + yEx ; Ex Ey xEy + yEx Fig. 4.12 Propagacion del error relativo en un producto A partir de este resultado, se obtiene que el error relativo del producto es rp = Ep p = xEy + yEx ; Ex Ey x y = rx + ry + rx ry rx + ry (4:13) que indica que el error relativo del producto es suma de los errores relativos de los datos como se ilustra en la gura 4.12. En la expresion 4.13 se ha supuesto que los errores relativos son su cientemente peque~nos como para despreciar el termino cuadratico frente a los lineales. 4.5.5 Propagacion del error en la division Si ahora se representa el cociente de dos numeros exactos mediante d = x=y y su valor aproximado mediante d = x=y, el error absoluto del cociente vale Ed = d ; d = x y ; x y = x y ; (x ; Ex) (y ; Ey) = yEx ; xEy y(y ; Ey) yEx ; xEy y2 En este caso se debe resaltar que si el denominador es un numero muy peque~no, el error absoluto del cociente puede ser muy superior al error absoluto de los datos. Por consiguiente y en la medida de lo posible, hay que evitar dividir por numeros peque~nos comparados con el numerador. © Los autores, 1998; © Edicions UPC, 1998.
  • 100. 4 Numero, algoritmo y errores 81 De la expresion anterior se deduce que el error relativo del cociente es rd = Ed d = yEx ;xEy y(y;Ey) x y = yEx ; xEy x(y ; Ey) = rx ; ry 1 ;ry rx ; ry (4:14) De acuerdo con la expresion anterior, en la gura 4.13 se ilustra como el error relativo del cociente es la resta de los errores relativos de los datos. Fig. 4.13 Propagacion del error relativo en una division 4.5.6 Propagacion del error en una funcion Sea z = f(x) la imagen mediante la funcion f del valor exacto de un numero x y sea z = f(x) la imagen de su valor aproximado. Entonces, el error absoluto de la imagen es Ez = f(x) ; f(x) = f(x) ; f(x ; Ex) = f(x) ; f(x) ; f0(x)Ex + f00(x) Ex2 2! ; f000(x) Ex3 3! + = f0(x)Ex ; f00(x) Ex2 2! + f000(x) Ex3 3! ; f0(x)Ex En consecuencia, el error relativo que se comete al evaluar la funcion f esta determinado por la expresion rz = Ez z = f0(x)Ex ; f00(x) Ex 2 2! + f000(x) Ex 3 3! ; ::: f(x) x f0(x) f(x) rx (4:15) que gra camente se muestra en la gura 4.14. Fig. 4.14 Propagacion del error relativo al evaluar una funcion © Los autores, 1998; © Edicions UPC, 1998.
  • 101. 82 Metodos numericos 4.6 Analisis de perturbaciones En el apartado anterior se han deducido las expresiones que gobiernan la propagacion del error en las operaciones aritmeticas elementales. El objetivo de este apartado es desarrollar un metodo que permita analizar que sucede con la propagacion del error cuando se realizan varias operaciones. La caracter stica basica de este tipo de estudios radica en el desconocimiento exacto del error que presentan los datos. Como se ha comentado anteriormente, lo unico que se conoce es una cota del error. Por lo tanto, tan solo se puede aspirar a conocer una cota del error nal de las operaciones. La cota del error que se comete en una secuencia de operaciones se puede calcular mediante los siguientes pasos: 1. Realizar un diagrama que represente el orden en que se realizan las operaciones ( gura 4.15). 2. Numerar los resultados parciales que aparecen en dicho diagrama. 3. Especi car los coe cientes para el calculo del error en cada una de las operaciones. 4. Determinar la expresion del error en cada uno de los resultados parciales que aparecen en el diagrama (el error correspondiente a la ultima operacion sera el error nal de la secuencia de operaciones). 5. Calcular la cota del error nal. Con el proposito de ilustrar este metodo se propone el siguiente ejemplo. Se desea realizar el calculo z = a(b + c) (4:16) que alternativamente se puede realizar mediante la expresion z = ab + ac (4:17) La cuestion es saber mediante cual de las dos expresiones anteriores se obtiene una cota del error menor. En la gura 4.15 se presentan los tres primeros pasos del estudio de propagacion de error para cada una de las alternativas presentadas en las ecuaciones 4.16 y 4.17. El error relativo que se produce en la i-esima operacion de la primera secuencia de operaciones (expresion 4.16) se designa mediante Ri, mientras que el error relativo de la i-esima operacion de la segunda (expresion 4.17) se representa por ^Ri. © Los autores, 1998; © Edicions UPC, 1998.
  • 102. 4 Numero, algoritmo y errores 83 Fig. 4.15 Esquemas de representacion de la propagacion del error En el cuarto paso del metodo hay que determinar el error en cada uno de los resultados parciales. El error que se comete en las diferentes operaciones de la primera alternativa es R1 = b b+ c rb + c b+ c rc + r1 R2 = R1 + ra + r2 = b b+ c rb + c b+ c rc + r1 + ra + r2 (4:18) donde r1 y r2 representan los errores de redondeo que se cometen al almacenar los resultados intermedios de las dos operaciones. El error en las operaciones de la segunda alternativa es ^R1 = ra + rb + ^r1 ^R2 = ra + rc + ^r2 ^R3 = ab ab+ ac ^R1 + ac ab+ ac ^R2 + ^r3 = b b+ c ra + rb + ^r1 + c b + c ra + rc + ^r2 + ^r3 (4:19) Como en el caso anterior, ^r1, ^r2 y ^r3 representan los errores de redondeo cometidos al almacenar los resultados obtenidos en las tres operaciones. © Los autores, 1998; © Edicions UPC, 1998.
  • 103. 84 Metodos numericos Por ultimo (quinto paso del metodo) hay que calcular la cota del error en la ultima expresion de cada alternativa. Para ello, se deben realizar las suposiciones pertinentes sobre como se realizan las operaciones y sobre la composicion del error de los datos. Por ejemplo, en el estudio que se esta realizando se puede suponer que: 1. Las operaciones se realizan manualmente (en base diez), coma otante, utilizando cua- tro d gitos para la parte fraccionaria y redondeando siempre por aproximacion. En estas condiciones y de acuerdo con la expresion 4.9, la cota del error relativo de redondeo es r = (1=2)101;4 = 0:0005. 2. Los datos no contienen error inherente. Es decir, el error que puedan presentar los datos solo es debido al error de redondeo. Bajo estas hipotesis, los erroresde los datos (ra, rb, y rc) y los errores cometidos al almacenar los resultados intermedios de las diversas operaciones (r1, r2, ^r1, ^r2 y ^r3) se deben solo al error de redondeo. Por consiguiente veri can que jraj r jr1j r j^r1j r jrbj r jr2j r j^r2j r jrcj r j^r3j r Se debe resaltar que las desigualdades anteriores indican claramente que se desconoce el valor exacto del error relativo de redondeo. En este sentido, lo unico que se puede a rmar es que el valor absoluto del error relativo de redondeo que se produce al almacenar los numeros es inferior a una cierta cantidad r. Por lo tanto, al realizar el analisis de perturbaciones hay que tomar el valor absoluto de las expresiones 4.18 y 4.19. En consecuencia, para la primera alternativa se obtiene jR2j = b b+ c rb + c b+ c rc + r1 + ra + r2 b b+ c jrbj + c b+ c jrcj + jr1j + jraj + jr2j b b+ c r + c b+ c r + r + r + r b b+ c + c b+ c + 3 # r (4:20) © Los autores, 1998; © Edicions UPC, 1998.
  • 104. 4 Numero, algoritmo y errores 85 mientras que para la segunda se obtiene j^R3j = b b+ c ra + rb + ^r1 + c b+ c ra + rc + ^r2 + ^r3 b b+ c jra + rb + ^r1 j + c b+ c jra + rc + ^r2 j + j^r3j b b+ c h jra j + jrb j + j^r1 j i + c b+ c h jra j + jrc j + j^r2 j i + j^r3 j h b b+ c + c b+ c i 3 + 1 # r (4:21) Las expresiones4.20 y 4.21 muestran que la cota del errorrelativo de ambas operaciones depende linealmente de la cota del error relativo de redondeo. Ademas, muestran que la cota del error no es la misma paraambas alternativas. Este resultadoparece contradecirla propiedad distributiva del producto respecto de la suma. Sin embargo se debe recordar que en esta deduccion se ha considerado que los numeros se almacenan mediante una cadena nita de d gitos. Por ultimo, del resultado anterior se desprende la siguiente pregunta: cual de los dos metodos proporciona una cota del error menor? Para ello se plantea si es cierta la siguiente desigualdad jR2j j^R3j Es decir b b+ c + c b+ c + 3 # r h b b+ c + c b + c i 3 + 1 # r b b + c + c b+ c + 2 h b b+ c + c b+ c i 3 1 b b+ c + c b+ c que evidentemente es cierta. Por lo tanto, desde el punto de vista numerico, es preferible utilizar la primera alternativa puesto que conlleva una cota del error del resultado menor. Problema 4.4: En el proceso de dise~no de unas piezas metalicas, se debe calcular el per metro P de una elipse de semiejes a y b con un error relativo inferior a 5 10;2. Para ello se ha decidido utilizar la siguiente expresion P = 2 r a2 + b2 2 Se pide: a) Efectuar un estudio completo de propagacion de errores, incluidos los errores inherentes y los errores de redondeo, para el calculo del per metro P. b) Obtener una expresion de la cota del error relativo del per metro P. © Los autores, 1998; © Edicions UPC, 1998.
  • 105. 86 Metodos numericos c) Un operario asegura que siempre se podra calcular correctamente dicho per - metro si se miden los semiejes con una cinta metrica de precision igual a 2:5% y se realizan las operaciones en base diez, coma otante, utilizando tres d gitos para la mantisa (sin incluir el signo) y redondeando por aproximacion. Es cierta esta a rmacion? En caso negativo, determinar cual deber a ser la precision exigible a la cinta metrica. Problema 4.5: Para iniciar la fabricacion en masa de rodamientos de alta calidad, un ingeniero debe medir, con la mayor precision posible, el radio A de una peque~na esfera metalica que forma parte del prototipo. Para ello dispone de tres alternativas: 1. Medir el diametro D con un pie de rey y obtener el radio A como A = D=2. 2. Medir la super cie S mediante tecnicas indirectas y obtener el radio como A = q S 4 . 3. Medir el volumen V sumergiendo la esfera en un l quido y obtener el radio como A = 3 q 3V 4 . Se pide: a) Efectuar un estudio completo de propagacion de errores, incluidos los errores inherentes y los errores de redondeo, para cada una de las tres alternativas. b) Obtener una cota del error relativo en el radio A, para cada una de las tres alternativas. El ingeniero sabe que la cota del error relativo inherente de las medidas ex- perimentales D, S y V es de 10;3. Para efectuar los calculos, utiliza un sencillo programa en FORTRAN, que trabaja con variables REAL*4. Ciertos condicio- nantes de dise~no exigen la obtencion del radio A con un error relativo maximo del 0.05%. c) Cual de las tres alternativa(s) puede utilizar el ingeniero para obtener el radio A con la precision requerida? Cual es la mas indicada? Problema 4.6: Durante la construccion de un puente atirantado los ingenieros se plantean el si- guiente problema: con que precision hay que medir la posicion de los anclajes de los tirantes, tanto en la pila como en el tablero, para tener un error en la longitud de los cables inferior a 25 cm? Se sabe que aproximadamente los cables miden 100 m, se puede suponer que se trabaja con in nitas cifras signi cativas correctas (sin errores de redondeo) y que el error inherente de las medidas necesarias es siempre el mismo. En realidad la posicion de los anclajes se conoc a exactamente, siendo sus coor- denadas numeros enteros, y uno de los ingenieros de obra encargo ya los tirantes. Dicho ingeniero tiene por costumbre realizar los calculos en obra con dos d gitos de precision. Serviran los cables por el pedidos? Nota: se supondra que el peso propio de los tirantes es despreciable y que la estructura no se deforma. As pues, el conjunto formado por el tablero, la pila y el cable de ne un triangulo rectangulo. © Los autores, 1998; © Edicions UPC, 1998.
  • 106. 4 Numero, algoritmo y errores 87 4.7 Bibliograf a Henrici, P. Elementos de analisis numerico. Trillas, 1972. Higham, N.J. Accuracy and Stability of Numerical Algorithms. SIAM, 1996. Hildebrand, F.B. Introduction to Numerical Analysis. McGraw-Hill, 1974. © Los autores, 1998; © Edicions UPC, 1998.
  • 107. 5 Ceros de funciones 89 5 Ceros de funciones Objetivos Describir tres tecnicas numericas iterativas para hallar ceros de funciones (f(x) = 0): metodo de la biseccion, metodo de Newton y metodo de la secante. Estudiar y comparar los tres metodos mediante algunos ejemplos numericos. Explicar las funciones externas FUNCTION de FORTRAN. 5.1 Introduccion Muchos problemas pueden modelarse matematicamente como una ecuacion f(x) = 0 (5:1) donde f es una cierta funcion de una variable x. Se trata pues de hallar los valores de x que satisfacen la ecuacion 5.1. Estos valores se llaman ceros de la funcion f o ra ces de la ecuacion f(x) = 0, y se denotan por x . Gra camente, los ceros de una funcion son los puntos de interseccion de la gra ca y = f(x) con el eje de las x. Para algunos casos sencillos, la ecuacion 5.1 puede resolverse anal ticamente. Supongase, por ejemplo, que f es un polinomio de segundo grado, f(x) = ax2+bx+c. Entonces, el numero de ceros (reales) depende del valor del discriminante = b2 ; 4ac para 0, la funcion f tiene dos ceros x = (;b p )=2a. En un problema mas general, si f es una funcion cualquiera, la ecuacion 5.1 no puede resolverse anal ticamente. De hecho, ni siquiera se sabe a priori cuantos ceros tiene f: varios, uno, ninguno? En estos casos, es necesario utilizar una tecnica numerica iterativa: a partir de una aproximacion inicial x0 a un cero x de f, se construye iterativamente una sucesion de © Los autores, 1998; © Edicions UPC, 1998.
  • 108. 90 Metodos numericos aproximaciones fxkg. El super ndice k es el contador de iteraciones: en la primera iteracion, se calcula x1 en la segunda, x2, y as sucesivamente. El proceso iterativo se detiene cuando, para un cierto valor de k, el valor xk es una aproximacion su cientemente buena a x . Puede verse pues que para obtener numericamente un cero de f hay que responder las tres preguntas siguientes: 1. Como se elige la aproximacion inicial x0? 2. Como se construye la sucesion fxkg de aproximaciones? 3. Como se decide si xk es una aproximacion su cientemente buena a x ? Estas preguntas se responden a lo largo del cap tulo. De momento, y para terminar este apartado de introduccion, se presentan dos ejemplos de la ecuacion 5.1. 5.1.1 Calculo de ra ces cuadradas Un ingeniero necesita calcular la ra z cuadrada x de un numero s, x = ps, haciendo unicamente operaciones aritmeticas elementales (suma, resta, producto y division). Esta es la situacion real en el dise~no de algunos ordenadores, puesto que solo estas cuatro operaciones estan incorporadas a nivel de hardware, y las demas operaciones deben hacerse a partir de ellas. Dado que no se puede calcular directamente la ra z cuadrada ps, se utiliza una estrategia alternativa. Elevando la expresion x = ps al cuadrado y pasando s a la izquierda de la igualdad, puede escribirse f(x) = x2 ;s = 0 (5:2) En la ecuacion 5.2 queda claro que el calculo de ps equivale a obtener el cero de la funcion f(x) = x2 ;s. En otras palabras, se trata de hallar la interseccion de la gra ca y = f(x) con el eje de las x (vease la gura 5.1). Como se vera en los apartados siguientes, la ecuacion 5.2 puede resolverse de manera iterativa empleando unicamente las cuatro operaciones aritmeticas elementales. 5.1.2 Como jugar al billar en una mesa circular La ultima moda entre los a cionados al billar es la mesa circular (vease la gura 5.2). Para los principiantes, el juego consiste simplemente en golpear la bola Q con la bola P despues de un impacto I en la banda. Los parametros del problema pueden verse en la gura 5.2: la mesa tiene radio R, la posicion de las bolas P y Q queda determinada por las coordenadas cartesianas (xP yP ) y (xQ yQ), y el punto de impacto I viene de nido por el angulo . © Los autores, 1998; © Edicions UPC, 1998.
  • 109. 5 Ceros de funciones 91 Fig. 5.1 Gra ca de la funcion f(x) = x2 ;s Fig. 5.2 Jugando al billar en una mesa circular © Los autores, 1998; © Edicions UPC, 1998.
  • 110. 92 Metodos numericos Mediante consideraciones geometricas sencillas (que se dejan como ejercicio al lector intere- sado) puede verse que los valores de que proporcionan los puntos de impacto I son las ra ces de la ecuacion f( ) = xP sin ;yP cosp (Rcos ;xP )2 + (Rsin ;yP )2 + xQ sin ;yQ cos p (Rcos ;xQ)2 + (Rsin ;yQ)2 = 0 (5:3) Notese que es la unica incognita de la ecuacion 5.3. Los valores de R, xP , yP , xQ e yQ son datos del problema. Para resolver la ecuacion 5.3 hay que utilizar una tecnica numerica iterativa, que construya una sucesion f kg de aproximaciones a un cero de la funcion f. 5.2 Metodo de la biseccion La primera tecnica iterativa para hallar ceros de funciones que se presenta aqu es el metodo de la biseccion. Se ilustrara mediante el calculo de p 2 a partir de operaciones aritmeticas elementales. Se trata, pues, de tomar s = 2 en la ecuacion 5.2. Tal como ya se ha comentado,p 2 es el cero de la funcion f(x) = x2 ;2 (vease la gura 5.3). Fig. 5.3 Calculo de p 2 por el metodo de la biseccion © Los autores, 1998; © Edicions UPC, 1998.
  • 111. 5 Ceros de funciones 93 El metodo de la biseccion consiste en: 1. Inicializar el contador de iteraciones a cero (k = 0). 2. Elegir una aproximacion inicial x0 y otro valor a de manera que el intervalo que de nen estos dos puntos (que sera x0 a para x0 a y a x0 para x0 a) contenga el cero buscado x y solo ese cero. Para el problema que se esta estudiando es muy sencillo ver que la funcion f(x) = x2 ;2 tiene un unico cero x = p 2 en el intervalo 1 2]. Se toma, por tanto, x0 = 1 y a = 2. Para un problema general, se utiliza el siguiente control para elegir x0 y a: si f es una funcion continua y el intervalo de extremos x0 y a contiene un cero de f, entonces f(x0) y f(a) tienen signos distintos (es decir, f(x0)f(a) 0). En la gura 5.3 puede verse como, efectivamente, f(x0) 0 y f(a) 0. 3. Tomar el punto medio del intervalo, xk+1 = (xk + a)=2, como siguiente aproximacion a x . Notese que xk+1 divide al intervalo de extremos xk y a en dos nuevos intervalos con la mitad de longitud. Por este motivo, se habla de metodo de la biseccion. 4. Decidir si xk+1 es una aproximacion su cientemente buena a x . En caso a rmativo, detener el proceso iterativo y tomar x xk+1. En caso negativo, seguir iterando. Para tomar la decision es necesario emplear algun criterio de convergencia (ver apartado 5.3). 5. Detectar cual de los dos intervalos obtenidos en el paso 3 contiene x . Puede hacerse de manera sistematica, sin necesidad de dibujar la gra ca de la funcion, a partir del signo de f(xk+1). Si f(xk+1) y f(xk) tienen signos distintos, entonces x esta en el intervalo de extremos xk y xk+1. Si, por el contrario, el cambio de signo de f se produce entre xk+1 y a, el cero x esta entre xk+1 y a. Por ultimo, puede ocurrir que f(xk+1) = 0 en este caso, xk+1 es el cero x y se detiene el proceso iterativo de biseccion. 6. Tomar el intervalo escogido en el paso 5 como nuevo intervalo de trabajo. Para obtener un algoritmo mas compacto y facilitar su programacion, interesa denotar por a uno de los extremos del intervalo (el otro extremo es xk+1) durante todo el proceso. Para ello se adopta el siguiente criterio: si 8 : f(xk+1)f(xk) 0 a xk f(xk+1)f(xk) 0 a a 7. Incrementar en 1 el contador de iteraciones (k k + 1) y volver al paso 3. En resumen, en el metodo de la biseccion se parte de un intervalo inicial que contiene el cero x , y se va subdividiendo este intervalo hasta encerrar a x en un intervalo tan peque~no como se desee. Observese que el algoritmo que se acaba de presentar aborda las tres cuestiones planteadas en el apartado 5.1: eleccion de la aproximacion inicial x0 (paso 2), construccion de la sucesion fxkg de aproximaciones a x (pasos 3, 5, 6 y 7) y nalizacion de las iteraciones (paso 4). © Los autores, 1998; © Edicions UPC, 1998.
  • 112. 94 Metodos numericos En el apartado 5.7 se muestra un programa FORTRAN (programa 5.1) que calcula ra ces cuadradas por el metodo de la biseccion. El programa trabaja en doble precision (variables REAL*8). Al utilizar el programa para calcular p 2 con x0 = 1, a = 2, y tolerancias de conver- gencia (ver apartado siguiente) de tolx = TOLf = 0:5 10;8, se obtienen los resultados de la tabla 5.1. Tabla 5.1 Calculo de p 2 por el metodo de la biseccion a partir de x0 = 1 y a = 2 Iteracion Extremo a Aproximacion x f(x) Error relativo en x ========= ========== ============== ========== =================== 0 2.0000000 1.0000000 -1.000D+00 -3.333D-01 1 1.0000000 1.5000000 2.500D-01 2.000D-01 2 1.5000000 1.2500000 -4.375D-01 -9.091D-02 3 1.5000000 1.3750000 -1.094D-01 -4.348D-02 4 1.3750000 1.4375000 6.641D-02 2.222D-02 5 1.4375000 1.4062500 -2.246D-02 -1.099D-02 6 1.4062500 1.4218750 2.173D-02 5.525D-03 7 1.4218750 1.4140625 -4.272D-04 -2.755D-03 8 1.4140625 1.4179688 1.064D-02 1.379D-03 9 1.4140625 1.4160156 5.100D-03 6.901D-04 10 1.4140625 1.4150391 2.336D-03 3.452D-04 11 1.4140625 1.4145508 9.539D-04 1.726D-04 12 1.4140625 1.4143066 2.633D-04 8.632D-05 13 1.4143066 1.4141846 -8.200D-05 -4.316D-05 14 1.4141846 1.4142456 9.063D-05 2.158D-05 15 1.4141846 1.4142151 4.315D-06 1.079D-05 16 1.4142151 1.4141998 -3.884D-05 -5.395D-06 17 1.4142151 1.4142075 -1.726D-05 -2.697D-06 18 1.4142151 1.4142113 -6.475D-06 -1.349D-06 19 1.4142151 1.4142132 -1.080D-06 -6.743D-07 20 1.4142132 1.4142141 1.617D-06 3.372D-07 21 1.4142132 1.4142137 2.687D-07 1.686D-07 22 1.4142137 1.4142134 -4.056D-07 -8.429D-08 23 1.4142137 1.4142135 -6.846D-08 -4.215D-08 24 1.4142135 1.4142136 1.001D-07 2.107D-08 25 1.4142135 1.4142136 1.584D-08 1.054D-08 26 1.4142136 1.4142136 -2.631D-08 -5.268D-09 27 1.4142136 1.4142136 -5.237D-09 -2.634D-09 28 1.4142136 1.4142136 5.300D-09 1.317D-09 29 1.4142136 1.4142136 3.154D-11 6.585D-10 Convergencia en la iteracion 29 La raiz cuadrada de 2.0000000 es 1.4142136 Los valores de las tolerancias utilizados en el ejemplo de la tabla 5.1 son muy estrictos, y se utilizan en este cap tulo paradistinguir bien el comportamientorelativo de los distintos metodos. © Los autores, 1998; © Edicions UPC, 1998.
  • 113. 5 Ceros de funciones 95 Notese que, con estas tolerancias, se obtienen ocho cifras signi cativas en los resultados. Puede verse en la tabla 5.1 como el intervalo inicial 1 2] se va subdividiendo hasta llegar, despues de 29 iteraciones, a x29 = 1:4142136, que se toma como aproximacion a p 2. Otra entrada del programa es la variable MAXITER, que representa el numero de iteraciones que se desea realizar como maximo. En caso de alcanzarse este valor, el programa nalizara sin ningun mensaje de convergencia. Habitualmente, al detectarse este fenomeno se debe ejecutar de nuevo el programa inicializandose el metodo mas cerca de la solucion. Considerese ahora al problema del billar circular. Tomando como punto de partida el programa 5.1, se escribe el programa 5.2 (apartado 5.7) que resuelve la ecuacion 5.3 en lugar de la ecuacion 5.2. Se toman los valores R = 1, xP = 0:6, yP = 0, xQ = ;0:6, yQ = 0 (vease la gura 5.4). Un punto de impacto I viene dado entonces por = =2. Se puede capturar esta solucion tomando x0 = 1:5 =2, a = 1:6 =2. Si se mantienen las tolerancias tolx = TOLf = 0:5 10;8, el metodo de la biseccion proporciona los resultados de la tabla 5.2. Efectivamente, en 23 iteraciones se obtiene 23 = 1:5707963 =2. Fig. 5.4 Problema del billar para R = 1, xP = 0:6, yP = 0, xQ = ;0:6 e yQ = 0 En cada iteracion del metodo de la biseccion es necesario evaluar f(xk) (paso 5). Para ello, en el programa FORTRAN se trabaja con una funcion externa (FUNCTION). Se ha visto en el cap tulo 3 que el FORTRAN dispone de una biblioteca de funciones intr nsecas(trigonometricas, logar tmicas, exponenciales, etc.) ya incorporadas. Las FUNCTIONs, por el contrario, son funciones de usuario que se pueden de nir a voluntad para resolver un problema concreto. Por ejemplo, para el problema del billar circular se ha de nido f( ) (ver ecuacion 5.3) como una FUNCTION. En el apartado 5.7 se explica como de nir y trabajar con funciones externas FUNCTION. Problema 5.1: a) Determinar, por simple inspeccion visual, cuales son los demas ceros de la funcion f( ) (ecuacion 5.3) para los datos de la gura 5.4 (Pista: hay un total © Los autores, 1998; © Edicions UPC, 1998.
  • 114. 96 Metodos numericos de cuatro ceros). Son todos estos ceros soluciones validas desde un punto de vista f sico? b) Veri car que los valores obtenidos en el apartado a son realmente ceros de f( ) utilizando el metodo de la biseccion. Justi car razonadamente los resultados obtenidos. Tabla 5.2 Obtencion de la solucion = =2 por el metodo de la biseccion Iteracion Extremo a Aproximacion x f(x) Error relativo en x ========= ========== ============== ========== =================== 0 1.6000000 1.5000000 3.211D-02 -3.226D-02 1 1.6000000 1.5500000 9.440D-03 -1.587D-02 2 1.5500000 1.5750000 -1.908D-03 8.000D-03 3 1.5750000 1.5625000 3.766D-03 -3.984D-03 4 1.5750000 1.5687500 9.290D-04 -1.988D-03 5 1.5687500 1.5718750 -4.897D-04 9.950D-04 6 1.5718750 1.5703125 2.196D-04 -4.973D-04 7 1.5703125 1.5710938 -1.350D-04 2.487D-04 8 1.5710938 1.5707031 4.231D-05 -1.243D-04 9 1.5707031 1.5708984 -4.635D-05 6.217D-05 10 1.5707031 1.5708008 -2.022D-06 3.109D-05 11 1.5708008 1.5707520 2.014D-05 -1.554D-05 12 1.5708008 1.5707764 9.061D-06 -7.771D-06 13 1.5708008 1.5707886 3.519D-06 -3.886D-06 14 1.5708008 1.5707947 7.486D-07 -1.943D-06 15 1.5707947 1.5707977 -6.368D-07 9.714D-07 16 1.5707977 1.5707962 5.592D-08 -4.857D-07 17 1.5707962 1.5707970 -2.904D-07 2.429D-07 18 1.5707962 1.5707966 -1.173D-07 1.214D-07 19 1.5707962 1.5707964 -3.067D-08 6.071D-08 20 1.5707964 1.5707963 1.263D-08 -3.036D-08 21 1.5707963 1.5707963 -9.020D-09 1.518D-08 22 1.5707963 1.5707963 1.803D-09 -7.589D-09 23 1.5707963 1.5707963 -3.608D-09 3.795D-09 Convergencia en la iteracion 23 Solucion para theta= 1.5707963 5.3 Criterios de convergencia Se dice que la sucesion fxkg converge a x si limk!1 xk = x © Los autores, 1998; © Edicions UPC, 1998.
  • 115. 5 Ceros de funciones 97 que puede ponerse tambien como limk!1 Ek = limk!1 (xk ;x ) = 0 (5:4) donde Ek es el error absoluto de la aproximacion xk a x . Es decir, la sucesion converge si el error absoluto tiende a cero cuando el contador de iteraciones k tiende a in nito. Al dividir la ecuacion 5.4 por x (suponiendo x 6= 0) se obtiene limk!1 rk = limk!1 xk ;x x = 0 (5:5) donde rk es el error relativo de la aproximacion xk. Para aceptar una aproximacion xk como su cientemente buena se exige que su error relativo rk sea, en valor absoluto, inferior a una tolerancia preestablecida tolx: jrk j tolx (5:6) Sin embargo, a la vista de la expresion de rk (ecuacion 5.5) esta claro que en la practica no se puede calcular rk, puesto que para ello ser a necesario conocer el cero x . Dado que x es precisamente la incognita del problema, se hace la siguiente aproximacion: rk xk ;xk+1 xk+1 (5:7) En la ecuacion 5.7 se ha sustituido x por la aproximacion en la siguiente iteracion, xk+1. La idea es que, si la sucesion converge, entonces xk+1 es mas proxima al cero x que xk y puede utilizarse como valor aproximado de referencia. Combinando las ecuaciones 5.6 y 5.7 se obtiene el criterio practico de convergencia xk ;xk+1 xk+1 tolx (5:8) Este criterio de convergenciafallar asi x = 0 (division por cero), porque el error relativo dejar a de estar de nido. Se har a necesario entonces trabajar con errores absolutos, reescribiendo la ecuacion 5.8 como xk ;xk+1 tolx xk+1 + E (5:9) donde E es una cota del error absoluto xk ;xk+1 para el caso x = 0. T picamente E se escoge ordenes de magnitud menor que tolx. De esta forma, para x 6= 0, el criterio de convergencia 5.9 coincide practicamente con el criterio de convergencia 5.8. Desde un punto de vista algor tmico, los criterios de convergencia 5.8 o 5.9 implican que para decidir si xk es o no una aproximacion su cientemente buena a x es necesario calcular la siguiente aproximacion xk+1. © Los autores, 1998; © Edicions UPC, 1998.
  • 116. 98 Metodos numericos Debido a la aproximacion hecha en la ecuacion 5.7, puede ocurrir en algunos casos que la condicion de convergencia dada por la ecuacion 5.8 se cumpla estando xk lejos de x . Para evitar estos problemas, se complementa el criterio relativo en x (ecuacion 5.8) con un criterio absoluto en f. Para ello, basta darse cuenta de que, si fxkg converge a x , se veri ca tambien limk!1 f(xk ) = 0 puesto que f(x ) = 0. Esto signi ca que f(xk) es directamente el error absoluto en f. Para aceptar xk como aproximacion nal a x se exige |ademas de la condicion 5.8| que este error absoluto sea, en valor absoluto, inferior a una tolerancia TOLf preestablecida: jf(xk )j TOLf 5.4 Metodo de Newton Se ha comprobado en el apartado 5.2 que el metodo de la biseccion es una tecnica robusta para hallar ceros de funciones: basta que f sea una funcion continua, que el intervalo inicial de nido por x0 y a contenga un cero x y que f tenga signos distintos en los extremos del intervalo (f(x0)f(a) 0) para garantizar que el metodo va encerrando a x en un intervalo cada vez mas peque~no. La longitud del intervalo nal puede controlarse mediante las tolerancias de convergencia. Sin embargo, los dos ejemplos del apartado 5.2 tambien muestran que la biseccion es una tecnica lenta: para las tolerancias exigidas, han sido necesarias entre 20 y 30 iteraciones para alcanzar la convergencia. Una tecnica mas rapida (aunque no tan robusta, como se vera) es el metodo de Newton. Se hara en primer lugar una deduccion anal tica del metodo y luego una deduccion gra ca. 5.4.1 Deduccion anal tica del metodo de Newton Supongase que xk es una aproximacion a un cero x de una cierta funcion f. Puesto que xk 6= x , resulta f(xk ) 6= 0 Dado que xk no es el cero x buscado, se intenta que la siguiente aproximacion xk+1 s lo sea. Para ello se de ne xk+1 como xk+1 = xk + xk+1 (5:10) donde xk+1 es la correccion que se hace a xk para obtener xk+1. El criterio para calcular esta correccion xk+1 es precisamente imponer que xk+1 sea un cero de f, es decir, f(xk+1) = 0. Teniendo en cuenta la ecuacion 5.10, esto se escribe como f(xk + xk+1) = 0 (5:11) © Los autores, 1998; © Edicions UPC, 1998.
  • 117. 5 Ceros de funciones 99 Esta claro que para una funcion f arbitraria no es posible despejar xk+1 en la ecuacion 5.11. Por este motivo, se hace un desarrollo en serie de Taylor de primer orden de f alrededor de xk, y se obtiene f(xk + xk+1) f(xk ) + f0(xk ) xk+1 (5:12) Es importante resaltar que la ecuacion 5.12 es una aproximacion y no una igualdad, porque se han despreciado los terminos del desarrollo de Taylor con derivadas de orden superior a uno. Si ahora se sustituye f(xk + xk+1) en la ecuacion 5.11 por la aproximacion obtenida en 5.12, resulta f(xk ) + f0(xk ) xk+1 = 0 de donde puede aislarse xk+1 como xk+1 = ; f(xk) f0(xk) (5:13) siempre que f0(xk) 6= 0. Finalmente, reemplazando esta expresion de xk+1 en la ecuacion 5.10 se llega a la expresion del metodo de Newton: xk+1 = xk ; f(xk) f0(xk) (5:14) La ecuacion 5.14 proporciona una estrategia para construir la sucesion de aproximaciones fxkg a un cero x . Como ya se ha comentado, para completar el metodo es necesario elegir una aproximacion inicial x0 y un criterio de nalizacion de iteraciones. En cuanto a este ultimo punto, se emplean los mismos criterios de convergencia (relativo en x y absoluto en f) que para el metodo de la biseccion (ver apartado 5.3). 5.4.2 Deduccion gra ca del metodo de Newton El metodo de Newton puede deducirse tambien de manera gra ca, tal y como se muestra en la gura 5.5. La idea es la siguiente: dada una cierta xk, se aproxima la funcion f por la recta tangente a la curva y = f(x) en el punto (xk f(xk)). La pendiente de esta recta es justamente la derivada de f en xk. A continuacion se toma la interseccion de esta recta con el eje de las x como siguiente aproximacion xk+1. En la gura 5.5 se puede observar que f(xk), xk+1 y la pendiente f0(xk) estan relacionados segun f(xk) ; xk+1 = f0(xk ) que es equivalente a la ecuacion 5.13 obtenida en la deduccion anal tica del metodo. Se ha escrito un programa en FORTRAN para calcular ra ces cuadradas a partir de ope- raciones elementales mediante el metodo de Newton (programa 5.3, apartado 5.7). En este caso, es necesario de nir dos funciones externas FUNCTION: una para la funcion f y otra para su derivada f0. © Los autores, 1998; © Edicions UPC, 1998.
  • 118. 100 Metodos numericos Si se emplea el programa5.3 para calcular p 2 con los mismos datos utilizados para el metodo de la biseccion (x0 = 1, tolx = TOLf = 0:5 10;8), el metodo de Newton arroja los resultados de la tabla 5.3. Fig. 5.5 Deduccion gra ca del metodo de Newton Tabla 5.3 Calculo de p 2 por el metodo de Newton a partir de x0 = 1 Iteracion Aproximacion x f(x) Error relativo en x ========= ============== ========== =================== 0 1.0000000 -1.000D+00 -3.333D-01 1 1.5000000 2.500D-01 5.882D-02 2 1.4166667 6.944D-03 1.733D-03 3 1.4142157 6.007D-06 1.502D-06 4 1.4142136 4.511D-12 1.128D-12 Convergencia en la iteracion 4 La raiz cuadrada de 2.0000000 es 1.4142136 © Los autores, 1998; © Edicions UPC, 1998.
  • 119. 5 Ceros de funciones 101 Las tablas 5.1 y 5.3 ponen de mani esto que la convergencia a p 2 es mucho mas rapida para el metodo de Newton que para el metodo de la biseccion. Esto es debido a que el metodo de Newton se basa en una estrategia muy inteligente: a medida que la aproximacion xk se va acercando al cero x de f, la recta tangente se va pareciendo parece cada vez mas a la curva y = f(x), hasta confundirse con ella (vease la gura 5.6). Debido a su rapidez, el metodo de Newton es ampliamente utilizado en la practica. Sin embargo, no es tan robusto como el metodo de la biseccion, tal como se ilustra en el problema 5.2. Problema 5.2: Se desea calcular p 2 tomando x0 = 0 como aproximacion inicial. Veri car que: a) puede hacerse sin di cultades mediante el metodo de la biseccion (con a = 2, por ejemplo). b) el metodo de Newton falla. Por que? Problema 5.3: a) Escribir un programa en FORTRAN que resuelva el problema del billar cir- cular mediante el metodo de Newton. b) Utilizar el programa para hallar las soluciones con los datos de la gura 5.4. Fig. 5.6 El metodo de Newton es rapido! © Los autores, 1998; © Edicions UPC, 1998.
  • 120. 102 Metodos numericos 5.5 Metodo de la secante Se ha visto en el apartado anterior que la rapidez del metodo de Newton es debida a la utilizacion de la recta tangente en cadapunto. Ello obligaa efectuar dos evaluacionesfuncionales en cada iteracion (la funcion y su derivada), en lugar de trabajar unicamente con valores de la funcion. Esto hace que el coste computacional por iteracion sea mas elevado para el metodo de Newton que para el metodo de la biseccion. En los ejemplos expuestos aqu el calculo de f y f0 no es excesivamente costoso, pero es bastante comun en problemas reales que la evaluacion de f y f0 requiera resolver un problema complejo cada vez. Por otro lado, puede ocurrir que para un determinado problema el calculo de derivadas sea muy farragoso o incluso imposible (por ejemplo, si no se dispone de una expresion anal tica de f(x)). En estos casos, se puede utilizar el metodo de la secante. La idea basica de este metodo se ilustra en la gura 5.7: la recta tangente a la curva y = f(x) en el punto (xk f(xk)) se aproxima mediante la recta secante que pasa por este punto y el punto (xk;1 f(xk;1)), obtenido en la iteracion anterior. En otras palabras, la derivada f0(xk) no se calcula, sino que se aproxima por f0(xk ) f(xk) ;f(xk;1) xk ;xk;1 La interseccion de esta recta secante con el eje de las x se toma como siguiente aproximacion xk+1. Este metodo necesita dos aproximaciones iniciales (x0 y x1) para poder trazar la primera recta secante. El programa 5.4 (ver apartado 5.7) es un programa FORTRAN que halla ra ces cuadradas mediante el metodo de la secante. Al calcular p 2 con x0 = 1, x1 = 1:5 (es decir, las dos primeras aproximaciones del metodo de Newton, vease la tabla 5.3) y tolx = TOLf = 0:5 10;8, se obtienen los resultados de la tabla 5.4. Comparando las tablas 5.1, 5.3 y 5.4 puede verse que la convergencia del metodo de la secante es ligeramente mas lenta que la del metodo de Newton, pero claramente mas rapida que la del metodo de la biseccion. Tabla 5.4 Calculo de p 2 por el metodo de la secante a partir de x0 = 1 y x1 = 1:5 Iteracion Aproximacion x f(x) Error relativo en x ========= ============== ========== =================== 0 1.0000000 -1.000D+00 -3.333D-01 1 1.5000000 2.500D-01 7.143D-02 2 1.4000000 -4.000D-02 -9.756D-03 3 1.4137931 -1.189D-03 -2.988D-04 4 1.4142157 6.007D-06 1.502D-06 5 1.4142136 -8.931D-10 -2.233D-10 Convergencia en la iteracion 5 La raiz cuadrada de 2.0000000 es 1.4142136 © Los autores, 1998; © Edicions UPC, 1998.
  • 121. 5 Ceros de funciones 103 Fig. 5.7 Metodo de la secante Problema 5.4: a) Escribir un programa en FORTRAN que resuelva el problema del billar cir- cular mediante el metodo de la secante. b) Utilizar el programa para hallar las soluciones con los datos de la gura 5.4. 5.6 Gra cas de convergencia Una manera habitual de presentar los resultados de convergencia de los distintos metodos es mediante gra cas que muestran como decrece el error relativo (en escala logar tmica) al aumentar el numero de iteraciones. En la gura 5.8 se muestran las curvas correspondientes a los tres metodos expuestos para el problema del calculo de p 2. La mayor rapidez del metodo de Newton queda re ejada en una curva que decrece mucho en pocas iteraciones. En el otro extremo esta el metodo de la © Los autores, 1998; © Edicions UPC, 1998.
  • 122. 104 Metodos numericos biseccion, con un decrecimiento mucho mas lento del error. 1,E-12 1,E-10 1,E-08 1,E-06 1,E-04 1,E-02 1,E+00 0 5 10 15 20 25 30 Iteración Errorrelativo Bisección Secante Newton Fig. 5.8 Comparacion de los tres metodos para el calculo de p 2 Problema 5.5: Representar en gra cas de convergencia los resultados obtenidos en los problemas 5.1, 5.3 y 5.4, correspondientes a la resolucion del problema del billar circular por los metodos de biseccion, Newton y secante. Comparar razonadamente las distintas curvas. Problema 5.6: Escribir un programa FORTRAN para obtener el(los) cero(s) de la funcion f(x) = x2;2x+1 mediante los metodos de la biseccion, de Newton y de la secante (el usuario debe poder elegir, al principio de la ejecucion, que metodo desea emplear). Comentar razonadamente los resultados obtenidos. Presentan los metodos su comportamiento t pico? 5.7 Aspectos computacionales: las funciones externas FUNCTION en FORTRAN La sentencia FUNCTION permite al programadorde nir sus propias funciones. Estas funciones se llaman externas para distinguirlas de las funciones intr nsecas, ya incorporadas en el lenguaje FORTRAN. Supongase que en un programa es necesario calcular el area de muchos triangulos distintos A a partir de su base y su altura (A = (bh)=2). Para no tener que programar esta formula © Los autores, 1998; © Edicions UPC, 1998.
  • 123. 5 Ceros de funciones 105 repetidamente a lo largo del programa principal, se de ne como una funcion externa en un subprograma: function area(base,altura) area = (base*altura)/2. return end Cada vez que sea necesario evaluar el area de un triangulo, desde el programa principal puede utilizarse la funcion externa haciendo: a = area(b,h) Tal como se puede observar en el ejemplo: La funcion externa se declara con la sentencia FUNCTION seguida del nombre de la funcion y de sus argumentos entre parentesis. Puesto que se trata de un subprograma independiente del programa principal, es necesario terminar la funcion externa con las sentencias RETURN (para volver al programa principal) y END (para indicar el nal del subprograma). Ambos programas (el principal y el subpro- grama) pueden estar en un mismo archivo o en archivos distintos. Los nombres de los argumentos de la funcion pueden ser distintos en la llamada desde el programa principal (b, h) y en el subprograma (base, altura). Lo unico que importa es el orden que ocupan en la lista de argumentos, su nombre es indiferente. Debe existir concordancia de tipo entre la funcion y el resultado que devuelve. Es decir que, por ejemplo, utilizando declaraciones por defecto, si el resultado arrojado por la funcion es un INTEGER*4, el nombre de la funcion debe empezar por I, J, K, L, M o N, mientras que si es un REAL*4 la inicial del nombre de la funcion debe estar comprendida entre A-H y O-Z. Si el resultado es de otro tipo (INTEGER*2, REAL*8, REAL*16, COMPLEX, LOGICAL o CHARACTER), debe constar expl citamente en la declaracion de la funcion. As , por ejemplo, para calcular el area de un triangulo en doble precision se puede utilizar la funcion externa real*8 function area(base,altura) implicit real*8 (a-h,o-z) area = (base*altura)/2.d0 return end El programa 5.1, empleado en el apartado 5.2 para calcular ra ces de ecuaciones del tipo f(x) = 0 por el metodo de la biseccion, utiliza una FUNCTION para programar la funcion f. Como puede observarse, la funcion externa FUNCTION que evalua la funcion f es del mismo tipo (REAL*8) que la variable F a la que esta asignada, y en el interior es necesario volver a declarar © Los autores, 1998; © Edicions UPC, 1998.
  • 124. 106 Metodos numericos todas las variables (en este caso, mediante la sentencia IMPLICIT). c c Este programa calcula raices cuadradas a partir de c operaciones aritmeticas elementales mediante el c metodo de la BISECCION c c___________________________________________________________________ implicit real*8 (a-h,o-z) c___Numero s cuya raiz cuadrada se desea calcular write (6,10) read (5,*) s 10 format (1x,'Raiz cuadrada de:') c___Aproximacion inicial x0 write (6,20) read (5,*) x 20 format (1x,'Aproximacion inicial') c___Extremo a del intervalo inicial write (6,30) read (5,*) a 30 format (1x,'Extremo a del intervalo inicial') c___Tolerancia en x write (6,40) read (5,*) tol_x 40 format (1x,'Tolerancia en x') c___Tolerancia en f write (6,50) read (5,*) tol_f 50 format (1x,'Tolerancia en f') c___Numero maximo de iteraciones write (6,60) read (5,*) maxiter 60 format (1x,'Numero maximo de iteraciones') c___Titulos de la salida de resultados write (6,510) 510 format (/,1x, 'Iteracion', 3x, 'Extremo a', 4x, © Los autores, 1998; © Edicions UPC, 1998.
  • 125. 5 Ceros de funciones 107 . 'Aproximacion x', 4x, ' f(x) ', 4x, . 'Error relativo en x') write (6,520) 520 format (1x, '=========', 3x, '==========', . 3x, '==============', 4x, '==========', . 4x, '===================') c___Control para decidir si se puede iniciar la biseccion c___Tienen f(a) y f(x0) signos opuestos? fa = f(a,s) fx = f(x,s) if( (fa*fx) .gt. 0.d0 ) then write (6,*) ' No se cumple la condicion f(a)*f(x0) 0' stop endif c___Inicio del proceso iterativo c___del metodo de la biseccion do k=0, maxiter pmedio = (a+x)/2.d0 fmedio = f(pmedio,s) c___Calculo del error relativo en x rel_x = (x - pmedio)/pmedio c___Impresion de resultados write (6,600) k,a,x,fx,rel_x 600 format (3x, i3, 7x, f10.7, 5x, f10.7, 6x, 1pd10.3, . 8x, 1pd10.3) c___Control de convergencia if ( (abs(fx).lt.tol_f) .and. (abs(rel_x).lt.tol_x) ) then write (6,700) k 700 format (/,1x, 'Convergencia en la iteracion', i3) write (6,800) s,x 800 format (1x,'La raiz cuadrada de ', f10.7, ' es ', f10.7) stop endif c___Eleccion del nuevo intervalo segun el valor de f(pmedio) if ( (fmedio*fx) .lt. 0.d0 ) then a = x x = pmedio fx = fmedio © Los autores, 1998; © Edicions UPC, 1998.
  • 126. 108 Metodos numericos else x = pmedio fx = fmedio endif enddo end c___________________Function f(x,s) real*8 function f(x,s) implicit real*8 (a-h,o-z) f = x*x - s return end Prog. 5.1 Calculo de ra ces cuadradas por el metodo de la biseccion Como se puede ver, la utilizacion de las sentencias FUNCTION permite realizar de manera natural una programacion en modulos (programacion estructurada) este aspecto se comentara en detalle en el cap tulo 7. En este sentido, es interesante resaltar que si se desea utilizar el programa 5.1 para hallar el cero de otra funcion distinta, solo es necesario modi car la FUNCTION correspondiente (y la entrada de datos necesarios para este caso). Por ejemplo, el programa 5.2 se ha obtenido modi cando adecuadamente el programa 5.1 presentado anteriormente para hallar las ra ces de la ecuacion 5.3 (juego del billar en una mesa circular) mediante el metodo de la biseccion. c c Este programa resuelve el problema del billar circular c mediante el metodo de la BISECCION c c___________________________________________________________________ implicit real*8 (a-h,o-z) c___Radio R de la mesa de billar y posicion de las dos bolas P y Q write (6,100) read (5,*) r write (6,110) read (5,*) xp,yp write (6,120) read (5,*) xq,yq 100 format (1x,'Radio de la mesa:') 110 format (1x,'Coordenadas de la bola P:') 120 format (1x,'Coordenadas de la bola Q:') © Los autores, 1998; © Edicions UPC, 1998.
  • 127. 5 Ceros de funciones 109 c___Aproximacion inicial x0 write (6,200) read (5,*) x 200 format (1x,'Aproximacion inicial') c___Extremo a del intervalo inicial write (6,210) read (5,*) a 210 format (1x,'Extremo a del intervalo inicial') c___Tolerancia en x write (6,220) read (5,*) tol_x 220 format (1x,'Tolerancia en x') c___Tolerancia en f write (6,230) read (5,*) tol_f 230 format (1x,'Tolerancia en f') c___Numero maximo de iteraciones write (6,240) read (5,*) maxiter 240 format (1x,'Numero maximo de iteraciones') c___Titulos de la salida de resultados write (6,510) 510 format (/,1x, 'Iteracion', 3x, 'Extremo a', 4x, . 'Aproximacion x', 4x, ' f(x) ', 4x, . 'Error relativo en x') write (6,520) 520 format (1x, '=========', 3x, '==========', . 3x, '==============', 4x, '==========', . 4x, '===================') c___Control para decidir si se puede iniciar la biseccion c___Tienen f(a) y f(x0) signos opuestos? fa = f(a,r,xp,yp,xq,yq) fx = f(x,r,xp,yp,xq,yq) if( (fa*fx) .gt. 0.d0 ) then write (6,*) ' No se cumple la condicion f(a)*f(x0) 0' stop endif c___Inicio del proceso iterativo c___del metodo de la biseccion © Los autores, 1998; © Edicions UPC, 1998.
  • 128. 110 Metodos numericos do k=0, maxiter pmedio = (a+x)/2.d0 fmedio = f(pmedio,r,xp,yp,xq,yq) c___Calculo del error relativo en x rel_x = (x - pmedio)/pmedio c___Impresion de resultados write (6,600) k,a,x,fx,rel_x 600 format (3x, i3, 7x, f10.7, 5x, f10.7, 6x, 1pd10.3, . 8x, 1pd10.3) c___Control de convergencia if ( (abs(fx).lt.tol_f) .and. (abs(rel_x).lt.tol_x) ) then write (6,700) k 700 format (/,1x, 'Convergencia en la iteracion', i3) write (6,800) x 800 format (1x,'Solucion para theta= ', f10.7) stop endif c___Eleccion del nuevo intervalo segun el valor de f(pmedio) if ( (fmedio*fx) .lt. 0.d0 ) then a = x x = pmedio fx = fmedio else x = pmedio fx = fmedio endif enddo end c__________________Function f(theta) real*8 function f(theta,r,xp,yp,xq,yq) implicit real*8 (a-h,o-z) stheta = sin(theta) ctheta = cos(theta) distp = ((r*ctheta-xp)*(r*ctheta-xp)+ . (r*stheta-yp)*(r*stheta-yp))**0.5 © Los autores, 1998; © Edicions UPC, 1998.
  • 129. 5 Ceros de funciones 111 distq = ((r*ctheta-xq)*(r*ctheta-xq)+ . (r*stheta-yq)*(r*stheta-yq))**0.5 f = ((xp*stheta-yp*ctheta)/distp) + . ((xq*stheta-yq*ctheta)/distq) return end Prog. 5.2 Calculo de las ra ces de la ecuacion 5.3 por el metodo de la biseccion En el programa 5.3 (metodo de Newton) se hace necesario utilizar dos FUNCTIONs la primera calcula los valores de f(x) y la segunda, los de su derivada f0(x). De nuevo, si se desea utilizar este programa para hallar los ceros de otra funcion distinta, solo es preciso modi car estos dos modulos. c c Este programa calcula raices cuadradas a partir de c operaciones aritmeticas elementales mediante el c metodo de NEWTON c c___________________________________________________________________ implicit real*8 (a-h,o-z) c___Numero s cuya raiz cuadrada se desea calcular write (6,10) read (5,*) s 10 format (1x,'Raiz cuadrada de:') c___Aproximacion inicial x0 write (6,20) read (5,*) x_actual 20 format (1x,'Aproximacion inicial') c___Tolerancia en x write (6,30) read (5,*) tol_x 30 format (1x,'Tolerancia en x') c___Tolerancia en f write (6,40) read (5,*) tol_f 40 format (1x,'Tolerancia en f') © Los autores, 1998; © Edicions UPC, 1998.
  • 130. 112 Metodos numericos c___Numero maximo de iteraciones write (6,50) read (5,*) maxiter 50 format (1x,'Numero maximo de iteraciones') c___Titulos de la salida de resultados write (6,510) 510 format (/,1x, 'Iteracion', 3x, 'Aproximacion x', . 4x, ' f(x) ', 4x, 'Error relativo en x') write (6,520) 520 format (1x, '=========', 3x, '==============', . 4x, '==========', 4x, '===================') c___Inicio del proceso iterativo c___del metodo de Newton do k=0, maxiter c___Nueva aproximacion fx = funcion(x_actual,s) dx = derivada(x_actual) x_nuevo = x_actual - (fx/dx) c___Calculo del error relativo en x rel_x = (x_actual - x_nuevo)/x_nuevo c___Impresion de resultados write (6,600) k,x_actual,fx,rel_x 600 format (3x, i3, 9x, f10.7, 6x, 1pd10.3, 8x, 1pd10.3) c___Control de convergencia if ((abs(fx) .lt. tol_f) .and. (abs(rel_x) .lt. tol_x)) then write (6,700) k 700 format (/,1x, 'Convergencia en la iteracion', i3) write (6,800) s,x_actual 800 format (1x,'La raiz cuadrada de ', f10.7, ' es ', f10.7) stop endif x_actual = x_nuevo enddo end © Los autores, 1998; © Edicions UPC, 1998.
  • 131. 5 Ceros de funciones 113 c__________________Function funcion(x,s) real*8 function funcion(x,s) implicit real*8 (a-h,o-z) funcion = x*x - s return end c__________________Function derivada(x) real*8 function derivada(x) implicit real*8 (a-h,o-z) derivada = 2.d0*x return end Prog. 5.3 Calculo de ra ces cuadradas por el metodo de Newton Como se ha podido observar, la utilizacion adecuada de FUNCTIONs facilita y rentabiliza considerablemente la programacion. Incluso es posible reutilizar casi totalmente el programa 5.3 para implementar el metodo de la secante (ver programa 5.4). c c Este programa calcula raices cuadradas a partir de c operaciones aritmeticas elementales mediante el c metodo de la SECANTE c c__________________Entrada de datos implicit real*8 (a-h,o-z) c___Numero s cuya raiz cuadrada se desea calcular write (6,10) read (5,*) s 10 format (1x,'Raiz cuadrada de:') c___Aproximaciones iniciales write (6,20) read (5,*) x_actual 20 format (1x,'Aproximacion inicial x0') write (6,30) read (5,*) x_nuevo 30 format (1x,'Aproximacion inicial x1') © Los autores, 1998; © Edicions UPC, 1998.
  • 132. 114 Metodos numericos c___Tolerancia en x write (6,40) read (5,*) tol_x 40 format (1x,'Tolerancia en x') c___Tolerancia en f write (6,50) read (5,*) tol_f 50 format (1x,'Tolerancia en f') c___Numero maximo de iteraciones write (6,60) read (5,*) maxiter 60 format (1x,'Numero maximo de iteraciones') c___Titulos de la salida de resultados write (6,510) 510 format (/,1x, 'Iteracion', 3x, 'Aproximacion x', . 4x, ' f(x) ', 4x, 'Error relativo en x') write (6,520) 520 format (1x, '=========', 3x, '==============', . 4x, '==========', 4x, '===================') c___Inicio del proceso iterativo c___del metodo de la secante do k=0, maxiter c___Calculo del error relativo en x rel_x = (x_actual - x_nuevo)/x_nuevo c___Valor de f en x_actual f_actual = f(x_actual,s) c___Impresion de resultados write (6,600) k,x_actual,f_actual,rel_x 600 format (3x, i3, 9x, f10.7, 6x, 1pd10.3, 8x, 1pd10.3) c___Control de convergencia if ((abs(f_actual).lt.tol_f).and.(abs(rel_x).lt.tol_x)) then write (6,700) k 700 format (/,1x, 'Convergencia en la iteracion', i3) write (6,800) s,x_actual 800 format (1x,'La raiz cuadrada de ', f10.7, ' es ', f10.7) stop endif © Los autores, 1998; © Edicions UPC, 1998.
  • 133. 5 Ceros de funciones 115 c___Nueva aproximacion f_nuevo = f(x_nuevo,s) pendiente = (f_nuevo-f_actual)/(x_nuevo-x_actual) x_actual = x_nuevo x_nuevo = x_actual - (f_nuevo/pendiente) enddo end c__________________Function f(x,s) real*8 function f(x,s) implicit real*8 (a-h,o-z) f = x*x - s return end Prog. 5.4 Calculo de ra ces cuadradas por el metodo de la secante 5.8 Bibliograf a Borse, G.J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e ingenier a. Anaya, 1989. Breuer, S. Zwas, G. Numerical Mathematics. A Laboratory Approach. Cambridge Univer- sity Press, 1993. Chapra, S.C. Canale, R.P. Metodos numericos para ingenieros con aplicaciones en com- putadores personales. McGraw-Hill, 1988. Hoffman, J.D. Numerical Methods for Engineers and Scientists. McGraw-Hill, 1992. © Los autores, 1998; © Edicions UPC, 1998.
  • 134. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 117 6 Una introduccion a los metodos gaussianos para sis- temas lineales de ecuaciones Objetivos Presentar y clasi car los metodos de resolucion numerica de sistemas lineales de ecuaciones. Estudiar detalladamente los metodos directos: de solucion inmediata, de eliminacion y de descomposicion. Desarrollar el analisis matricial del metodo de Gauss. 6.1 Consideraciones generales 6.1.1 Introduccion El objetivo de este tema es introducir al lector en la resolucion de sistemas lineales de ecuaciones por metodos gaussianos. Parece conveniente, en primer lugar, establecer la notacion y algunas de las bases de algebra lineal necesarias para alcanzar el objetivo planteado. Siguiendo la notacion introducida por Householder en 1964, en general se emplean mayusculas en negrita A L U para las matrices, minusculas con sub ndices aij lij uij ij ij para los coe cientes de matrices, minusculas en negrita x y z b c d para los vectores, letras griegas en minuscula para los escalares. El espacio vectorial de las matrices reales m n se denota por IRm n un elemento cualquiera de ese espacio, A 2 IRm n, es una matriz rectangular de m las y n columnas que puede escribirse © Los autores, 1998; © Edicions UPC, 1998.
  • 135. 118 Metodos numericos como A = 0 BBBB@ a11 a12 a1 n;1 a1n a21 a22 a2 n;1 a2n ... ... ... ... am;1 1 am;1 2 am;1 n;1 am;1 n am1 am2 am n;1 amn 1 CCCCA Si m = n entonces A es cuadrada y se dice que tiene orden n. De la misma forma, Cm n es el espacio vectorial de las matrices de coe cientes complejos. Los vectores, que pueden ser interpretados como un caso particular del anterior con IRn 1 (equivalente a IRn), siempre se asumen como vectores columna, es decir x 2 IRn es x = 0 BBBB@ x1 x2 ... xn;1 xn 1 CCCCA donde las componentes xi son numeros reales. Puesto que por convencion se toman los vectores como columna, objetos del tipo (x1 x2 xn;1 xn) o bien (x1 ::: xn) son vectores la y se denotan por xT (T indica matriz o vector traspuesto). Ademas de las operaciones inherentes al espacio vectorial (suma interna y producto exterior por reales) conviene resaltar por su importancia el producto escalar de vectores. Si xe y son dos vectores de IRn, entonces xTy = x1y1 +x2y2 + +xnyn 2 IR. Notese, que de forma equivalente, si A y B son dos matrices de IRm n, entonces, ATB 2 IRn n. El producto escalar de vectores permite de nir una metrica: la norma eucl dea de x, que es simplemente kxk = p xTx. Del mismo modo que se ha de nido xTy, tambien se puede de nir xyT. Sin embargo, el signi cado de este ultimo producto entre vectores es radicalmente distinto. Sean x e y dos vectores no nulos la matriz xyT es de IRn n, se escribe como xyT = 0 BBBB@ x1y1 x1y2 x1yn;1 x1yn x2y1 x2y2 x2yn;1 x2yn ... ... ... ... xn;1y1 xn;1y2 xn;1yn;1 xn;1yn xny1 xny2 xnyn;1 xnyn 1 CCCCA y todas sus columnas (y las) de nen vectores paralelos, es decir, elementos de un espacio vectorial de dimension uno. Por consiguiente, esta matriz es de rango uno. En realidad, toda matriz de rango uno puede expresarse como el producto de dos vectores de la forma xyT. Estas matrices son comunes en metodos numericos y conviene saber trabajar con ellas. Por ejemplo, su almacenamiento no se hace guardando todos los coe cientes de la matriz, lo que implicar a almacenar n2 numeros reales estas matrices se almacenan guardando unicamente las componentes de los vectores x e y, es decir 2n numeros reales. Para tener una idea del ahorro computacional que esto representa basta suponer que n = 1000: mientras almacenar x e y solo necesita de 2000 variables reales, xyT requiere un millon (es decir, 500 veces mas memoria). © Los autores, 1998; © Edicions UPC, 1998.
  • 136. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 119 6.1.2 Planteamiento general A lo largo de este tema se plantea la resolucion de sistemas lineales de ecuaciones Ax = b (6:1) donde A es una matriz de n n coe cientes reales aij con i = 1 ::: n, j = 1 ::: n b es el termino independiente, tambien de coe cientes reales, bT = (b1 ::: bn) y nalmente xT = (x1 ::: xn) es el vector solucion del sistema. La existencia y unicidad de soluciones del sistema de nido en 6.1 es por fortuna un tema ampliamente estudiado en el algebra lineal. Precisamente, el algebra lineal proporciona una serie de condiciones que permiten veri car si 6.1 tiene solucion: Si A 2 IRn n, entonces las siguientes a rmaciones son equivalentes: 1. Para cualquier b 2 IRn, el sistema Ax = b tiene solucion. 2. Si Ax = b tiene solucion, esta es unica. 3. Para cualquier x 2 IRn, Ax = 00000000000000 =) x = 00000000000000. 4. Las columnas ( las) de A son linealmente independientes. 5. Existe A;1 matriz inversa de A tal que AA;1 = A;1 A = I (I matriz identidad de orden n). 6. det(A) = jAj 6= 0. A pesar de la indudable importancia de todas estas condiciones, en el ambito de la resolucion numerica de sistemas de ecuaciones deben ser empleadas con sumo cuidado. 6.1.3 Resolucion algebraica: metodo de Cramer A continuacion se plantea la resolucion anal tica de problemas muy peque~nos siguiendo un posible enfoque algebraico clasico. El sistema de ecuaciones planteado en 6.1 tiene solucion unica si y solo si det(A) = jAj 6= 0. En este caso, existe la matriz inversa de A, A;1 , que permite escribir la solucion del sistema de ecuaciones como x = A;1 b (6:2) La ecuacion anterior no es solo una expresion formal de la solucion sino que describe un posible algoritmo que permitir a obtenerla: 1. Calcular jAj. 2. Si jAj = 0 indicar que la matriz es singular y FIN. 3. Calcular la inversa C = A;1 . 4. Calcular la solucion x = Cb. 5. Escribir la solucion y FIN. © Los autores, 1998; © Edicions UPC, 1998.
  • 137. 120 Metodos numericos A pesar de tener todo el fundamento anal tico necesario, este algoritmo para obtener la solucion de 6.1 es el peor metodo posible desde un punto de vista numerico. De hecho, salvo en contadas excepciones, este algoritmo esta condenado al mas absoluto fracaso. Para darse cuenta de ello, basta observar solo dos de los problemas que plantea. En primer lugar, el calculo del determinante puede ser bastante tedioso puesto que el de- terminante puede variar bruscamente con peque~nos escalados de la matriz. Observese que si A es de orden n, entonces det( A) = n det(A). Para ver las implicaciones que esta igualdad impone basta tomar el caso particular de n = 100 (numero de ecuaciones peque~no hoy en d a), entonces: det(0:1 A) = 10;100 det(A). Es decir, dividiendo los coe cientes de A por diez, se reduce el determinante de A en un factor de 10;100 . Por consiguiente, es muy dif cil determinar numericamente si el determinante de una matriz es realmente nulo. El uso del determinante se centra basicamente en estudios teoricos. En segundo lugar, el calculo de la inversa de A (que presenta serios problemas asociados al almacenamiento de la matriz y a la precision con la que obtengan los resultados), no se emplear a ni en el casoescalar(n = 1). Porejemplo, pararesolver15x = 3 no se evaluar aprimero c = 1=15 para despues calcular x como x = 3c. Lo mas logico ser a dividir directamente 3 por 15, x = 3=15, lo que permitir a ahorrarse una operacion y un error de almacenamiento. Esta situacion puede extrapolarse al caso de orden n donde la diferencia en numero de operaciones es muy considerable y ademas los errores de redondeo pueden dar lugar a inestabilidades numericas. A continuacion se estudia el metodo de Cramer. Este metodo es una mejora del algoritmo anterior puesto que permite realizar los pasos 3 y 4 de una sola vez. A pesar de ello no es un metodo adecuado desde un punto de vista numerico. La expresion general de la solucion por el metodo de Cramer es: xi = a11 ::: a1 i;1 b1 a1 i+1 ::: a1n a21 ::: a2 i;1 b2 a2 i+1 ::: a2n ... ... ... ... ... an1 ::: an i;1 bn an i+1 ::: ann jAj i = 1 ::: n (6:3) Es interesante evaluar el numero de operaciones elementales (sumas, productos y divisiones) necesarias para obtener la solucion del sistema. En primer lugar hay que evaluar n + 1 deter- minantes y luego realizar n divisiones. Para el calculo de los determinantes, una de las posibles tecnicas necesita de n! n multiplicaciones y n!;1 sumas. Por consiguiente, el metodo de Cramer necesita de 8 : (n + 1) (n! ;1) sumas (n+ 1) n! n productos n divisiones Cada operacion elemental puede tener un coste computacional distinto (por ejemplo, muchos ordenadores dividen empleando el metodo de Newton para ceros de funciones). A pesar de ello, aqu se les asignara el mismo coste computacional a todas las operaciones elementales © Los autores, 1998; © Edicions UPC, 1998.
  • 138. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 121 puesto que ello ya permite realizar las comparaciones pertinentes. El numero de operaciones elementales con el metodo de Cramer es TC = (n+1)2 n! ; 1. La tabla 6.1 muestra los valores de TC para diferentes tama~nos del sistema de ecuaciones. Tabla 6.1 Operaciones elementales del metodo de Cramer segun el tama~no de la matriz (n) n TC 5 4 319 10 4 108 100 10158 Los numeros presentados en la tabla 6.1 adquieren un mayor relieve cuando se asocian al tiempo necesario para efectuarlos. Si se dispusiera de un superordenador capaz de realizar 100 millones de operaciones en coma otante por segundo (100 M ops), el sistema de n = 100 necesitar a aproximadamente 3 10142 a~nos para ser resuelto. Es evidente que el numero de operaciones asociado a este metodo hace prohibitivo su uso, aun para sistemas peque~nos. Si ademas se tiene en cuenta que el ENIAC (primer ordenador digital, fabricado en 1940) realizaba solo 300 operaciones por segundo y ten a un tiempo medio entre aver as de 12 horas, se comprendera por que la resolucion de sistemas lineales de ecuaciones esta en el origen del desarrollo de los metodos numericos. 6.1.4 Resolucion numerica: un enfoque global La estrategia y metodolog a que se aplica a la resolucion numerica de sistemas lineales de ecuaciones parte de una losof a distinta a la expuesta anteriormente. La regularidad de la matriz A no se determina por un calculo previo de su determinante. Sin embargo, en algunos problemas se puede estudiar la regularidad de A en funcion de su origen (por ejemplo cuando proviene de la discretizacion de ecuaciones diferenciales) o a partir de propiedades facilmente computables como la dominancia diagonal. Por lo general se aplica alguno de los metodos de resolucion que se veran seguidamente sin evaluar previamente el determinante en muchas ocasionesel determinante y la inversade la matriz son un subproducto de los calculos efectuados. En realidad los algoritmos e caces para la resolucion de sistemas lineales plantean procesos con un enfoque radicalmente distinto, sobretodo desde una perspectiva que contempla el hecho de que los calculos se realizan en ordenadores digitales. Por consiguiente, es logico que los algoritmos se evaluen en funcion de su e cacia y siguiendo criterios directamente relacionados con su implementacion en ordenadores digitales. Existen tres criterios fundamentales para analizar los algoritmos: 1. Numero de operaciones necesarias, ntimamente ligado al tiempo de CPU. Se tendran en cuenta las operaciones elementales entre numeros en coma otante ( op): +, -, / o *, todas a un mismo coste computacional aunque no sea exactamente cierto. El numero de opera- ciones es obviamente un excelente indicador del coste computacional pero no debe tomarse © Los autores, 1998; © Edicions UPC, 1998.
  • 139. 122 Metodos numericos en un sentido estricto. De hecho, multiplicar el tiempo necesario para una operacion por el numero de operaciones siempre infravalora el tiempo necesario del algoritmo. Ademas del tiempo invertido en efectuar las operaciones hay una sobrecarga, debido a la gestion de la memoria, al manejo de los ndices enteros, a las instrucciones logicas en los propios bucles, etc. A pesar de ello, y por fortuna, el numero de operaciones es un buen indicador del tiempo de CPU porque esta sobrecarga es generalmente proporcional al numero de operaciones, de forma que, aunque no se pueda predecir exactamente el tiempo de CPU, se puede saber como var a (linealmente, cuadraticamente, etc.) al modi car, por ejemplo, el orden n de la matriz. 2. Necesidades de almacenamiento, que inciden clara y directamente en las limitaciones de la memoria de los diversos ordenadores los diferentes metodos de resolucion requieren almacenar las matrices de distinta forma en el ordenador y esto var a considerablemente las necesidades de memoria. 3. Rango de aplicabilidad: no todos los metodos sirven para cualquier matriz no singular ademas, en funcion del metodo y de las propiedades de la matriz, la precision de los resul- tados puede verse afectada dramaticamente. Como se vera mas adelante, peque~nos errores de redondeo pueden producir errores en la solucion numerica completamente despropor- cionados. No se debe olvidar que debido al enorme numero de operaciones necesarias para la resolucion de un sistema de ecuaciones de tama~no medio{grande, el analisis estandar de propagacion de errores de redondeo no es en absoluto trivial. Conviene resaltar que cada uno de estos criterios puede ser determinante para rechazar un algoritmo. Por ejemplo, para un tipo de ordenador dado, metodos que impliquen exceder la memoria disponible son inutilizables por muy rapidos y precisos que resulten. Por lo tanto, el desarrollo de los algoritmos que se plantean a continuacion debe tener presentes estos tres criterios simultaneamente. Desde un punto de vista general las matrices mas usuales en las ciencias aplicadas y en ingenier a pueden englobarse en dos grandes categor as: 1. Matrices llenas pero no muy grandes. Por llenas se entiende que poseen pocos elementos nulos y por no muy grandes que el numero de ecuaciones es de unos pocos miles a lo sumo. Estas matrices aparecen en problemas estad sticos, matematicos, f sicos e ingenieriles. 2. Matrices vac as y muy grandes. En oposicion al caso anterior, vac as indica que hay pocos elementos no nulos y ademas estan situados con una cierta regularidad. En la mayor a de estos casos el numero de ecuaciones supera los miles y puede llegar en ocasiones a los millo- nes. Estas matrices son comunes en la resolucion de ecuaciones diferenciales de problemas de ingenier a. Parece logico que los metodos para resolver sistemas lineales de ecuaciones se adecuen a las categor as de matrices anteriormente expuestas. En general los metodos directos se aplican al primer tipo de matrices, mientras que los metodos iterativos se emplean con el segundo © Los autores, 1998; © Edicions UPC, 1998.
  • 140. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 123 grupo. Es importante observar que no existen reglas absolutas y que todav a en la actualidad existe cierta controversia sobre los metodos optimos a aplicar en cada caso. En particular, la distincion establecida entre matrices llenas y vac as depende en gran medida del ordenador disponible (fundamentalmente de la memoria). De hecho, los l mites han ido evolucionando a lo largo de los a~nos a medida que tambien evolucionaban los ordenadores (cada vez mas rapidos y con mas memoria, o al menos mas barata). A pesar de ello, casi nadie recomendar a metodos iterativos para matrices llenas con pocas ecuaciones en cambio, algunos autores trabajan con metodos directos altamente so sticados y particularizados al entorno informatico disponible para resolver sistemas con varios millones de ecuaciones. Observacion: En todo lo que sigue se supone que A y b son de coe cientes reales. Si los elementos de A o b son complejos, aparte de las generalizaciones de los metodos que aqu se estudian o de los algoritmos espec cos para este caso, se puede replantear el problema como un sistema lineal, con matriz y termino independiente reales, de 2n ecuaciones e incognitas. Para ello se escriben la matriz y los vectores de la siguiente manera: A = C + iD b = c+ id x = y + iz donde C y D son matrices reales n n, y c d, y y z son de IRn. El sistema lineal de ecuaciones original se escribe ahora como: C ;D D C y z = c d que es el resultado deseado. © Los autores, 1998; © Edicions UPC, 1998.
  • 141. 124 Metodos numericos 6.2 Metodos directos 6.2.1 Introduccion Los metodos directos de resolucion de sistemas lineales de ecuaciones son aquellos que per- miten obtener la solucion despues de un numero nito de operaciones aritmeticas. Este numero de operaciones es funcion del tama~no de la matriz. Si los ordenadores pudieran almacenar y operar con todas las cifras de los numeros reales, es decir, si emplearan una aritmetica exacta, con los metodos directos se obtendr a la solucion exacta del sistema en un numero nito de pasos. Puesto que los ordenadorestienen una precision nita, los errores de redondeo se propagan y la solucion numerica obtenida siempre di ere de la solucion exacta. La cota del error, para una matriz y termino independiente dados, se asocia por lo general al numero de operaciones de cada metodo. Se pretende, por lo tanto, obtener metodos con el m nimo numero de operaciones posible. 8 : Sistemas con solucion inmediata 8 : . Matriz diagonal, A = D . Matriz triangular superior, A = U . Matriz triangular inferior, A = L Metodos de eliminacion (. Metodo de Gauss . Metodo de Gauss-Jordan Metodos de descomposicion 8 : . Metodo de Doolittle, A = LU . Metodo de Crout, A = LU . Metodo de Cholesky, A = LLT . Descomposicion generalizada, A = LDLT . Metodo de Thomas (A tridiagonal) Metodos de ortogonalizacion, A = QR Fig. 6.1 Clasi cacion de los metodos directos Otra particularidad de los metodos directos es que siempre conducen, despues de ciertas operaciones, a la resolucion de uno o varios sistemas con solucion inmediata. Es decir, sistemas donde la matriz es diagonal o triangular. Los metodos para sistemas de resolucion inmediata son de hecho metodos directos. Ademas de estos, los metodos directos se dividen en metodos © Los autores, 1998; © Edicions UPC, 1998.
  • 142. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 125 de eliminacion y metodos de descomposicion. En la gura 6.1 se presenta un esquema con la clasi cacion de los metodos directos mas caracter sticos. 6.2.2 Sistemas con solucion inmediata Matriz diagonal En este caso la matriz A se escribe como: A = D = 0 BBBBBB@ d11 0 0 0 d22 ... ... ... ... ... ... ... ... ... dn;1 n;1 0 0 0 dnn 1 CCCCCCA (6:4) y la solucion se obtiene directamente xi = bi dii i = 1 ::: n (6:5) Existe solucion si todos los terminos de diagonal son no nulos. Ademas, si se desea evaluar el determinante de A solo es necesario calcular el producto de todos los terminos de la diagonal. Por ultimo, el numero de operaciones necesario es de n divisiones, es decir TD = n operaciones elementales. Matriz triangular superior A = U = 0 BBBBBB@ u11 u12 u1n 0 u22 ... ... ... ... ... ... ... ... ... un;1 n;1 un;1 n 0 0 unn 1 CCCCCCA (6:6) En este caso la solucion de la ultima ecuacion es trivial xn = bn = unn. Una vez conocido xn, la penultima ecuacion (la n ;1) solo tiene una incognita que se deduce de forma sencilla. Conocidos ahora xn y xn;1, se pasa a la ecuacion anterior (la n;2) y se resuelve para su unica incognita, xn;2. Retrocediendo progresivamente se obtiene el algoritmo de sustitucion hacia atras que se escribe de la siguiente forma xn = bn = unn xi = 0 @bi ; nX j=i+1 uijxj 1 A = uii i = n;1 n;2 ::: 1 (6:7) © Los autores, 1998; © Edicions UPC, 1998.
  • 143. 126 Metodos numericos De nuevo la solucion existe si todos los terminos de la diagonal de U son no nulos. El de- terminante se evalua multiplicando los terminos de la diagonal. El numero de operaciones es ahora: 8 : 1 + 2 + + (n ;1) = n(n ;1) 2 sumas 1 + 2 + + (n ;1) = n(n ;1) 2 productos n divisiones por consiguiente T4 = n2 operaciones elementales. Matriz triangular inferior A = L = 0 BBBBBB@ l11 0 0 l21 l22 ... ... ... ... ... ... ... ... ... ln;1 n;1 0 ln1 ln n;1 lnn 1 CCCCCCA (6:8) Se aplica un algoritmo similar al anterior que se denomina de sustitucion hacia adelante: x1 = b1 = l11 xi = 0 @bi ; i;1X j=1 lijxj 1 A = lii i = 2 ::: n (6:9) La existencia de solucion, el determinante y el numero de operaciones se evaluan exactamente como en el caso anterior y se llega a los mismos resultados. 6.2.3 Metodos de eliminacion Metodo de Gauss En el metodo de eliminacion de Gauss el problema original, Ax = b, se transforma mediante permutaciones adecuadas y combinaciones lineales de las ecuaciones en un sistema de la forma Ux = c donde U es una matriz triangular superior. Este nuevo sistema equivalente al original es de resolucion inmediata: solo es necesario aplicar el algoritmo de sustitucion hacia atras presentado en el subapartado anterior. Durante la transformacion del sistema original al equivalente con matriz triangular, las ope- raciones (que solo dependen de la matriz A) se realizan sobre la matriz y al mismo tiempo sobre el termino independiente. Esto constituye una de las grandes ventajas y a la vez inconve- nientes de los metodos de eliminacion. Si se dispone de una serie de terminos independientes, © Los autores, 1998; © Edicions UPC, 1998.
  • 144. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 127 bj j = 1 ::: m, conocidos de antemano, se efectuan sobre todos ellos, y al mismo tiempo, las operaciones necesarias para reducir el sistema y obtener una serie de cj j = 1 ::: m. Por consiguiente, se almacenan y se manipulan todos los terminos independientes a la vez. Poste- riormente se resuelve un sistema con matriz triangular U para cada uno de los cj. Si, por el contrario, no se conocen todos los terminos independientes al iniciar los calculos, es necesario recordar todas las transformaciones necesarias para obtener c1 partiendo de b1 seguidamente se repiten todas estas operaciones sobre los demas terminos independientes hasta obtener todos los cj deseados. Hoy en d a, en la mayor a de los problemas con matrices de tama~no peque~no o medio, esta propiedad de los metodos de eliminacion es la determinante para su eleccion frente a los metodos de descomposicion. Otro punto importante que conviene valorar en el metodo de Gauss es su importante valor pedagogico. Muchos autores denominan de manera generica metodos gaussianos al resto de los metodos de eliminacion y de descomposicion, puesto que la mayor a derivan del trabajo original de Gauss escrito en 1823 (que como otros metodos fundamentales del calculo numerico fue desarrollado mucho antes de la aparicion del primer ordenador). Su implementacion en un ordenador sigue siendo la mas simple, y con pocas modi caciones, como ya se vera, se obtiene el metodo mas general que existe para la resolucion de sistemas lineales de ecuaciones. El algoritmo que se presenta a continuacion parte de la ecuacion 6.1 que se escribira como: 0 BBBBB@ a(0) 11 a(0) 12 a(0) 13 a(0) 1n a(0) 21 a(0) 22 a(0) 23 a(0) 2n a(0) 31 a(0) 32 a(0) 33 a(0) 3n ... ... ... ... ... a(0) n1 a(0) n2 a(0) n3 a(0) nn 1 CCCCCA 0 BBBB@ x1 x2 x3 ... xn 1 CCCCA = 0 BBBBB@ b(0) 1 b(0) 2 b(0) 3 ... b(0) n 1 CCCCCA (6:10) donde el super ndice (0) indica coe ciente de la matriz o del termino independiente originales. Si a(0) 11 6= 0, se sustrae de todas la ecuaciones, a partir de la segunda la, la primera ecuacion multiplicada por mi1 = a(0) i1 a(0) 11 con i = 2 ::: n. Esto induce el primer sistema equivalente derivado del original donde la primera columna tiene todos los coe cientes nulos exceptuando el primer coe ciente, y el resto de los coe cientes de la matriz y del termino independiente se han visto modi cados a partir de la segunda la. 0 BBBBB@ a(0) 11 a(0) 12 a(0) 13 a(0) 1n 0 a(1) 22 a(1) 23 a(1) 2n 0 a(1) 32 a(1) 33 a(1) 3n ... ... ... ... ... 0 a(1) n2 a(1) n3 a(1) nn 1 CCCCCA 0 BBBB@ x1 x2 x3 ... xn 1 CCCCA = 0 BBBBB@ b(0) 1 b(1) 2 b(1) 3 ... b(1) n 1 CCCCCA (6:11) con a(1) ij = a(0) ij ;mi1a(0) 1j = a(0) ij ; a(0) i1 a(0) 11 a(0) 1j b(1) i = b(0) i ;mi1b(0) 1 = b(0) i ; a(0) i1 a(0) 11 b(0) 1 ( i = 2 ::: n j = 2 ::: n (6:12) © Los autores, 1998; © Edicions UPC, 1998.
  • 145. 128 Metodos numericos Ahora, si a(1) 22 (que ya no coincide con el coe ciente que originalmente se encontraba en su posicion, a(0) 22 ) es distinto de cero, se sustrae de todas la ecuacionessiguientes la segundaecuacion multiplicada por mi2 = a(1) i2 a(1) 22 con i = 3 ::: n. Despues de realizadas estas operaciones sobre el sistema 6.11 se obtiene el segundo sistema equivalente al original 0 BBBBB@ a(0) 11 a(0) 12 a(0) 13 a(0) 1n 0 a(1) 22 a(1) 23 a(1) 2n 0 0 a(2) 33 a(2) 3n ... ... ... ... ... 0 0 a(2) n3 a(2) nn 1 CCCCCA 0 BBBB@ x1 x2 x3 ... xn 1 CCCCA = 0 BBBBB@ b(0) 1 b(1) 2 b(2) 3 ... b(2) n 1 CCCCCA (6:13) donde la segunda columna a partir de la tercera la solo contiene terminos nulos y los nuevos coe cientes de la matriz y termino independiente se obtienen con las siguientes ecuaciones a(2) ij = a(1) ij ;mi2a(1) 2j = a(1) ij ; a(1) i2 a(1) 22 a(1) 2j b(2) i = b(1) i ;mi2b(1) 2 = b(1) i ; a(1) i2 a(1) 22 b(1) 2 ( i = 3 ::: n j = 3 ::: n (6:14) Cada paso conduce a un nuevo sistema equivalente al original (ecuacion 6.1) con la particula- ridad de que la k-esima matriz es triangular superior si solo se miran las primeras k ecuaciones y k incognitas. En general, se escribe como 0 BBBBBBBBBBBB@ a(0) 11 a(0) 12 a(0) 1k a(0) 1 k+1 a(0) 1n 0 a(1) 22 a(1) 2k a(1) 2 k+1 a(1) 2n ... ... ... ... ... ... ... ... a(k;1) kk a(k;1) k k+1 a(k;1) kn 0 0 a(k) k+1 k+1 a(k) k+1 n ... ... ... ... ... 0 0 a(k) n k+1 a(k) nn 1 CCCCCCCCCCCCA 0 BBBBBBBBB@ x1 x2 ... xk xk+1 ... xn 1 CCCCCCCCCA = 0 BBBBBBBBBBB@ b(0) 1 b(1) 2 ... b(k;1) k b(k) k+1 ... b(k) n 1 CCCCCCCCCCCA (6:15) que se ha obtenido a partir de las siguientes ecuaciones a(k) ij = a(k;1) ij ;mika(k;1) kj = a(k;1) ij ; a(k;1) ik a(k;1) kk a(k;1) kj b(k) i = b(k;1) i ;mikb(k;1) k = b(k;1) i ; a(k;1) ik a(k;1) kk b(k;1) k ( i = k + 1 ::: n j = k + 1 ::: n (6:16) Observese que al pasar del (k ;1)-esimo al k-esimo sistema es necesario realizar las siguientes operaciones © Los autores, 1998; © Edicions UPC, 1998.
  • 146. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 129 8 : (n ;k)(n ;k + 1) sumas (n ;k)(n ;k + 1) productos n;k divisiones Finalmente, al deducir el (n ;1)-esimo sistema se obtiene una matriz triangular superior: 0 BBBBBB@ a(0) 11 a(0) 12 a(0) 13 a(0) 1n 0 a(1) 22 a(1) 23 a(1) 2n 0 ... ... ... ... ... ... ... a(n;2) n;1 n 0 0 a(n;1) nn 1 CCCCCCA 0 BBBB@ x1 x2 ... xn;1 xn 1 CCCCA = 0 BBBBBB@ b(0) 1 b(1) 2 ... b(n;2) n;1 b(n;1) n 1 CCCCCCA (6:17) A cada uno de los terminos que aparecen en la diagonal de la matriz anterior se le denomina pivote. Conviene resaltar que los pivotes no coinciden con los terminos originales de la diagonal de A es decir, a(k;1) kk 6= a(0) kk para k = 1 ::: n. Para resumir todos los pasos realizados hasta obtener el sistema 6.17, es necesario suponer que todos los pivotes son no nulos. Es decir, a(i;1) ii 6= 0 i = 1 ::: n. A continuacion se presenta el algoritmo que permite obtener la matriz y el termino independiente del sistema 6.17, a(k) ij = a(k;1) ij ;mika(k;1) kj = a(k;1) ij ; a(k;1) ik a(k;1) kk a(k;1) kj b(k) i = b(k;1) i ;mikb(k;1) k = b(k;1) i ; a(k;1) ik a(k;1) kk b(k;1) k 8 : k = 1 ::: n;1 i = k + 1 ::: n j = k + 1 ::: n (6:18) donde los terminos de super ndice (0) son iguales a los originales del sistema de ecuaciones. El sistema triangular obtenido en 6.17 es de resolucion inmediata (vease el subapartado 6.2.2). El numero de operaciones necesarias para realizar esta primera fase de eliminacion ha sido de 8 : n;1X k=1 (n;k)(n ;k + 1) = n(n2 ;1) 3 sumas n;1X k=1 (n;k)(n ;k + 1) = n(n2 ;1) 3 productos n;1X k=1 n;k = n(n;1) 2 divisiones Si se tienen en cuenta las operaciones correspondientes a la segunda fase de sustitucion hacia atras, el numero total de operaciones elementales necesarias para el metodo de Gauss es TG = 4n3 +9n2 ;7n 6 . La tabla 6.2 muestra el numero de operaciones elementales para distintos tama~nos © Los autores, 1998; © Edicions UPC, 1998.
  • 147. 130 Metodos numericos del sistema de ecuaciones. Obviamente, se ha obtenido una importante reduccion al disponer ahora de un metodo que crece con n3 , en vez de n! n2 (Cramer). Tabla 6.2 Operaciones elementales del metodo de Gauss sin pivotamiento segun el tama~no de la matriz (n) n TG 5 115 10 805 100 681 550 1000 6:68 108 Como ya se ha comentado, se ha supuesto a lo largo de toda esta deduccion que los pivotes eran distintos de cero. Si durante el proceso de eliminacion se obtiene un pivote nulo, por ejemplo el a(k;1) kk , se debe buscar en la parte inferior de la columna k-esima un coe ciente no nulo, es decir de entre los a(k;1) ik i = k + 1 ::: n se toma uno que sea distinto de cero. Se sustituye entonces la la k (y su termino independiente) por la la i (y su terminoindependiente) que se haya escogido. Si dicho coe ciente no nulo no existiera, la matriz ser a singular. Mas adelante se vera una justi cacion teorica de este proceder. Esta permutacion de las no solo tiene interes cuando el pivote es exactamente cero. Es obvio que valores peque~nos del pivote pueden producir grandes errores de redondeo, ya que siempre se divide por el valor del pivote. Por consiguiente, para reducir los errores de redondeo conviene escoger el pivote maximo en valor absoluto. Para ello, hay dos tecnicas posibles: 1. En el k-esimo sistema (veanse las ecuaciones 6.15 y 6.16) se toma como pivote el coe ciente mayor en valor absoluto de la columna k situado por debajo de la la k inclusive. Para ello es necesario permutar las las k y la correspondiente al pivote escogido en la matriz y su termino independiente. Esta tecnica se denomina metodo de Gauss con pivotamiento parcial. 2. En el k-esimo sistema, se toma como pivote el coe ciente mayor en valor absoluto de la submatriz de orden n;k de nida por los coe cientes que quedan por debajo de la la k y a la derecha de la columna k. Paraello, se permuta la la k (y el termino independiente asociado) y la columna k con las correspondientes al coe ciente que cumple la condicion citada. Al nal del proceso deben ponerse en el orden inicial las componentes del vector solucion, puesto que su posicion ha sido modi cada al realizar las permutaciones de columnas. Esta tecnica es el metodo de Gauss con pivotamiento total. Estas dos ultimas estrategias producen metodos numericamente estables. El metodo de Gauss sin pivotamiento no es necesariamente estable. El estudio detallado de la estabilidad y propagacion de errores de redondeo del metodo de Gauss no es trivial (vease Wilkinson (1965)). © Los autores, 1998; © Edicions UPC, 1998.
  • 148. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 131 Desde el punto de vista de la implementacion practica de los metodos de Gauss con pivo- tamiento, conviene se~nalar que las permutaciones no se realizan f sicamente en el ordenador, sino que se emplean vectores de redireccionamiento de memoria similares a los empleados en los esquemas de almacenamiento espec cos para matrices con estructuras simples. Observacion: Si la matriz A es simetrica, las matrices llenas de orden n ; k sobre las que se aplica sucesivamente el algoritmo solo permanecen simetricas si no se realiza ninguna permutacion de las o columnas (vease el problema 6.1). La misma observacion es valida si la matriz A tiene una estructura que permite el almacenamiento en banda o en per l (apartado 7.4). Problema 6.1: Sea A una matriz regular simetrica. Se desea resolver el sistema lineal Ax = b mediante el metodo de Gauss sin pivotamiento. a) Adaptar el algoritmo de Gauss al caso de matrices simetricas, aprovechando la simetr a para eliminar las operaciones innecesarias. Sugerencia: notese que en cada paso del proceso de eliminacion, cuando se anulan los terminos de la columna k-esima por debajo del pivote, a(k;1) kk , solo se modi ca la submatriz llena de orden n;k: 0 B@ a(k) k+1 k+1 a(k) k+1 n ... ... ... a(k) n k+1 a(k) nn 1 CA Emplear la propiedad de que en k = 0 la submatriz correspondiente (que es la matriz original A) es simetrica. b) Calcular el numero de operaciones necesarias, y compararlo con el caso general (matrices no simetricas). c) Puede emplearse el algoritmo desarrollado en el apartado a si es necesario pivotar? Por que? Metodo de Gauss-Jordan A continuacion se presenta una variante del metodo de Gauss que conviene considerar. En este metodo, ademas de sustraer la la k multiplicada por mik = a(k;1) ik =a(k;1) kk a las las poste- riores, tambien se sustrae a las anteriores. Es practica comun, en este caso, dividir la la k por su pivote para que el termino de la diagonal quede unitario. De esta forma, el k-esimo sistema as obtenido se escribe como: © Los autores, 1998; © Edicions UPC, 1998.
  • 149. 132 Metodos numericos 0 BBBBBBBBBBBBBBBB@ 1 0 0 0 a(k) 1 k+1 a(k) 1n 0 1 0 0 a(k) 2 k+1 a(k) 2n ... ... ... ... ... ... ... ... ... ... 0 a(k) k;1 k+1 a(k) k;1 n ... ... 1 a(k) k k+1 a(k) kn 0 0 a(k) k+1 k+1 a(k) k+1 n ... ... ... ... ... 0 0 a(k) n k+1 a(k) nn 1 CCCCCCCCCCCCCCCCA 0 BBBBBBBBBBB@ x1 x2 ... xk;1 xk xk+1 ... xn 1 CCCCCCCCCCCA = 0 BBBBBBBBBBBBB@ b(k) 1 b(k) 2 ... b(k) k;1 b(k) k b(k) k+1 ... b(k) n 1 CCCCCCCCCCCCCA (6:19) Como se puede observar, al anular todos los coe cientes de la columa k, excepto el diago- nal, se va transformando la matriz original en la identidad. Al nal, la (n ; 1)-esima matriz obtenida por operaciones simples de la es la identidad, y por lo tanto, el (n;1)-esimo termino independiente, (b(n;1) 1 ::: b(n;1) n )T es la solucion del sistema de ecuaciones original. El algoritmo necesario para la transformacion de la matriz es el siguiente a(k) kj = a(k;1) kj a(k;1) kk a(k) ij = a(k;1) ij ;a(k;1) ik a(k;1) kj b(k) k = b(k;1) k a(k;1) kk b(k) i = b(k;1) i ;a(k;1) ik b(k;1) k 8 : k = 1 ::: n;1 i = 1 ::: k ;1 k + 1 ::: n j = k + 1 ::: n (6:20) El numero de operaciones que se deben realizar es 8 : n;1X k=1 (n ;1)(n;k + 1) = (n ;1)2 (n;2) 2 sumas n;1X k=1 (n ;1)(n;k + 1) = (n ;1)2 (n;2) 2 productos n;1X k=1 (n;k + 1) = (n ;1)(n;2) 2 divisiones Por consiguiente el numero total de operaciones elementales del metodo de Gauss-Jordan, tal como se ha presentado aqu , es de TGJ = n3 + 1 2 n2 ; 5 2 n + 1 © Los autores, 1998; © Edicions UPC, 1998.
  • 150. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 133 Analisis matricial del Metodo de Gauss: Gauss compacto La presentacion del metodo de Gauss se ha realizado de forma constructiva mostrando el desarrollo del algoritmo. A continuacion se presenta el desarrollo matricial del metodo. De esta forma se sientan las bases de los metodos de descomposicion y, ademas, se analizan las justi caciones teoricas del metodo de Gauss sin o con pivotamiento. Se puede suponer que de momento, la eliminacion (reduccion de la matriz original a una triangular superior) puede realizarse sin pivotamiento. Entonces se toman las matrices: G(k) = 0 BBBBBBBBBBBBBBBB@ 1 0 0 0 0 0 1 ... ... ... ... ... ... ... ... ... ... ... ... ... 1 0 ... ... 0 0 1 0 0 ... ... ;mk+1 k 1 ... ... ... ... ;mk+2 k 0 ... ... ... ... ... ... ... ... 1 0 0 0 ;mn k 0 0 1 1 CCCCCCCCCCCCCCCCA k = 1 ::: n;1 (6:21) donde mik = a(k;1) ik a(k;1) kk para i = k + 1 ::: n. Denominando A(k) y b(k) a los k-esimos matriz y vector de terminos independientes obte- nidos por el metodo de Gauss sin pivotamiento, se puede observar que las ecuaciones que realizan el paso entre (k ;1) y k (ecuaciones 6.16) pueden escribirse como A(k) = G(k) A(k;1) b(k) = G(k) b(k;1) Por lo tanto, el (n;1)-esimo sistema de ecuaciones obtenido al nal del proceso de eliminacion es simplemente A(n;1) = G(n;1) G(n;2) :::G(1) A b(n;1) = G(n;1) G(n;2) :::G(1) b (6:22) Puesto que A(n;1) es triangular superior, y que el producto de matrices triangulares inferio- res con diagonal unitaria es una matriz triangular inferior con diagonal unitaria, la primera ecuacion de 6.22 puede escribirse como A = L U donde U = A(n;1) L = h G(n;1) G(n;2) ::: G(1) i;1 = h G(1) i;1 h G(2) i;1 ::: h G(n;1) i;1 (6:23) © Los autores, 1998; © Edicions UPC, 1998.
  • 151. 134 Metodos numericos Puesto que las inversas de las G(k) son triangulares inferiores con diagonal unitaria, puede comprobarse que L = 0 BBBBBB@ 1 0 0 m21 1 ... ... ... ... ... ... ... ... ... ... 0 mn1 mn n;1 1 1 CCCCCCA (6:24) Por consiguiente, la ecuacion 6.23 demuestra que se ha descompuesto la matriz original A en el producto de una matriz triangular inferior con diagonal unitaria por una triangular superior. A partir de esta misma ecuacion se puede observar que el determinante de la matriz A se obtiene como un subproducto del metodo de eliminacion: puesto que L es triangular con diagonal unitaria y U = A(n;1) es una triangular, el determinante de A es det(A) = det(A(n;1) ) = nY i=1 a(i;1) ii (6:25) De esta forma el calculo del determinante de una matriz necesita de 2n3 3 operaciones aproxi- madamente que es muy inferior al orden n! que se hab a obtenido previamente. El metodode Gauss planteado en su forma compacta, como se acabade describir, se compone de dos fases diferenciadas: 1) descomposicion de la matriz original en el producto de L por U sin que sea necesario efectuar operaciones sobre el termino independiente, y 2) resolucion de dos sistemas triangulares, el primero de los cuales se corresponde con la segunda ecuacion de 6.22. Estas dos fases aparecen tambien en los metodos de descomposicion (vease el subapartado 6.2.4), que se distinguen del metodo de Gauss compacto en la forma de calcular las matrices triangulares L y U. Como ya se hab a indicado, conviene aprovechar la forma compacta del metodo de Gauss para justi car teoricamente los algoritmos que se han presentado. Para ello se consideran los siguientes teoremas: Teorema: Si A es inversible y factorizable bajo la forma A = LU (donde L tiene la diagonal unitaria), entonces la descomposicion es unica. Demostracion: Supongase que existen dos descomposiciones posibles de la matriz A, es decir, A = L1U1 = L2U2. Si A es inversible, entonces L1, U1, L2, y U2 tambien lo son (tomense por ejemplo determinantes en la ecuacion anterior). Por consiguiente, L1U1 = L2U2 () L;1 2 L1 = U2U;1 1 pero el primer miembro de la igualdad es una triangular inferior con diagonal unitaria mientras que el segundo es una triangular superior. Ambos miembros, por lo tanto, son iguales a la matriz identidad, de donde se deduce que L1 = L2 y U1 = U2. © Los autores, 1998; © Edicions UPC, 1998.
  • 152. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 135 Teorema: Si A es inversible, existe una matriz de permutacion P tal que P A es factorizable bajo la forma LU donde Les triangular inferior con diagonal unitaria y U es triangular superior. Demostracion: Sea Pij una matriz que permute las las i, j. Esta matriz se escribe como Pij = 0 BBBBBBBBBBBBBBBBBBB@ i j 1 0 0 0 0 0 ... ... ... ... ... 1 0 0 i 0 0 0 0 0 1 0 0 0 1 0 ... ... ... ... ... 0 1 0 j 0 0 1 0 0 0 0 0 0 0 1 ... ... ... ... ... 0 0 0 0 0 1 1 CCCCCCCCCCCCCCCCCCCA (6:26) Esta matriz solo di ere de la identidad en las las y columnas i y j. La k-esima matriz, A(k) , obtenida con el algoritmo de Gauss con pivotamiento parcial, puede escribirse como A(k) = G(k) Pk `kA(k;1) , donde se ha permutado la la k con la `k (k `k). Observese que si no es necesario pivotar Pk `k = I, es decir k = `k. Esta k-esima matriz tambien puede escribirse como A(k) = G(k) Pk `kG(k;1) Pk;1 `k;1 ::: G(1) P1 `1 A (6:27) Para poder seguir con el proceso de eliminacion, el pivote de esta matriz y todos los terminos debajo de el deben ser no nulos. Si no es as , el determinante de A(k) es nulo y por lo tanto tambien es nulo el determinante de la matriz original A (las matrices G y P tienen diagonales unitarias). Es decir, si A es regular, entonces A(k) tambien lo es y siempre se puede encontrar la permutacion de las adecuada para seguir con el proceso de eliminacion. Queda todav a por demostrar que PA es factorizable. A partir de la ecuacion 6.27 puede obtenerse la expresion de la ultima matriz obtenida con el algoritmo de Gauss con pivotamiento parcial A(n;1) = G(n;1) Pn;1 `n;1 G(n;2) Pn;2 `n;2 ::: G(1) P1 `1 A (6:28) Si k i j, entonces existe una matriz eG(k) tal que PijG(k) = eG(k) Pij en la que simplemente se han permutado los coe cientes ;mik y ;mjk. Por lo tanto, la ecuacion 6.28 puede reescribirse como A(n;1) = G(n;1) eG(n;2) ::: eG(1) Pn;1 `n;1 Pn;2 `n;2 ::: P1 `1 A (6:29) © Los autores, 1998; © Edicions UPC, 1998.
  • 153. 136 Metodos numericos que permite, con las de niciones adecuadas, P = Pn;1 `n;1 Pn;2 `n;2 ::: P1 `1 U = A(n;1) L = h G(n;1) eG(n;2) ::: eG(1) i;1 (6:30) volver a escribir la ecuacion 6.28 como PA = LU donde L es triangular inferior con diagonal unitaria y U es triangular superior y de esta forma nalizar la demostracion. Esta demostracion puede extenderse al caso de Gauss con pivotamiento total empleando matrices de permutacion P y Q tales que P A Q sea factorizable como LU. As mismo, todas las propiedades anteriores de existencia y unicidad de la descomposicion se veri can tambien para U triangular superior con diagonal unitaria en vez de L con diagonal unitaria. Por otro lado, el determinante de la matriz original se obtiene, de nuevo, como un subpro- ducto del proceso de eliminacion por el metodo de Gauss, det(A) = det(A(n;1) ) = nY i=1 a(i;1) ii donde el signo depende del numero de permutaciones realizadas. Para nalizar este apartado, donde se han formalizado las diferentes variantes del metodo de Gauss, conviene conocer bajo que condiciones puede aplicarse el metodo de Gauss sin pivo- tamiento. Esto es as porque solo en esta variante (sin pivotamiento) pueden emplearse esque- mas de almacenamiento espec cos para algunos tipos de matrices muy frecuentes en calculo numerico (por ejemplo, matrices en banda y en skyline, simetricas o no). Como se vera en el cap tulo siguiente, se consigue un ahorro computacional considerable mediante estos esquemas de almacenamiento matricial, tanto en numero de operaciones como en memoria necesaria. Para ello, el siguiente teorema presenta la condicion necesaria y su ciente para aplicar el metodo de Gauss sin pivotamiento. Se denomina Am]11 al menor principal de A de orden m. Es decir, los coe cientes de Am]11 son los aij de A para i = 1 ::: m y i = 1 ::: m. Por extension A(k) m]11 sera el menor de orden m de A(k) . Las tres cajas que completan la matriz A se denotan por Am]12, Am]21 y Am]22, de forma que A = m columnas (n;m) columnas m las Am]11 Am]12 (n;m) las Am]21 Am]22 Teorema: La condicion necesaria y su ciente para que una matriz no singular A pueda descomponerse en la forma A = LU es que det(Am]11) 6= 0 para cualquier m = 1 ::: n. Demostracion: Para demostrar que es condicion su ciente hay que mostrar que una vez obtenida la matriz A(k) , el proceso de eliminacion puede seguir es decir, © Los autores, 1998; © Edicions UPC, 1998.
  • 154. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 137 que el pivote a(k) k+1 k+1 es no nulo. Para ello supongase que det(Am]11) 6= 0 8m = 1 ::: n. En particular esto se veri ca para m = 1 es decir, a(0) 1 1 = det(A1]11) 6= 0 y, por lo tanto, la primera etapa del algoritmo de Gauss puede aplicarse. Para las siguientes etapas, supongase que a(i) i+1 i+1 6= 0 para i = 0 ::: k ;1 en conse- cuencia, ya se ha obtenido la matriz A(k) descrita en 6.15 y que puede escribirse segun la expresion 6.27, pero sin permutaciones, bajo la forma A(k) = A(k) k+1]11 A(k) k+1]12 A(k) k+1]21 A(k) k+1]22 = G(k) k+1]11 00000000000000 G(k) k+1]21 G(k) k+1]22 G(k;1) k+1]11 00000000000000 G(k;1) k+1]21 G(k;1) k+1]22 ::: ::: G(1) k+1]11 00000000000000 G(1) k+1]21 G(1) k+1]22 Ak+1]11 Ak+1]12 Ak+1]21 Ak+1]22 (6:31) donde se ha realizado la misma particion en las matrices G mostrando expl ci- tamente sus menores principales y su estructura triangular inferior. A partir de 6.31 es facil ver que A(k) k+1]11 = G(k) k+1]11 G(k;1) k+1]11 ::: G(1) k+1]11 Ak+1]11: Tomando ahora determinantes y recordando que todas las matrices G(i) k+1]11 tienen diagonales unitarias y que det(Ak+1]11) 6= 0 por hipotesis, es evidente que det(A(k) k+1]11) 6= 0. Por lo tanto queda demostrado que el pivote a(k) k+1 k+1 es no nulo y el proceso de eliminacion puede seguir. Por induccion se obtendra la descomposicion de A en LU. Para demostrar la condicion necesaria en primer lugar se vera que si A = LU entonces Am]11 = Lm]11U m]11. Para ello basta reutilizar la particion de las matrices realizada anteriormente, es decir Am]11 Am]12 Am]21 Am]22 = Lm]11 00000000000000 Lm]21 Lm]22 U m]11 U m]12 00000000000000 U m]22 y efectuar el producto por cajas de las matrices. Ademas, al ser A no singular por hipotesis, ni L ni U lo seran y por lo tanto Lm]11 y U m]11 tienen determinantes no nulos. El producto de estas dos ultimas matrices tampoco tendra determinante nulo es decir, Am]11 es no singular. Todo ello puede realizarse para cualquier valor de m = 1 ::: n y de esta forma la condicion queda demostrada. Este resultado muestra que el metodo de Gauss sin pivotamiento puede emplearse si y solo si todos los menores principales de A son no singulares. Esta condicion es obviamente muy dif cil de veri car a priori. De hecho, en la mayor a de los casos, es el propio proceso de Gauss el que indica si es necesario o no realizar pivotamiento de las. De cualquier forma, es importante se~nalar una extension del teorema anterior para dos clases de matrices extraordinariamente comunes en las ciencias de la ingenier a. © Los autores, 1998; © Edicions UPC, 1998.
  • 155. 138 Metodos numericos Observacion: Si la matriz A es simetrica y de nida positiva (negativa) entonces sus menores principales tambien son simetricos y de nidos positivos (negativos), es decir, son no singulares, y, por consiguiente, se puede aplicar el metodo de Gauss sin pivotamiento. Para demostrar que Am]11 (menor principal de orden m de la matriz A) es de nido positivo (negativo) cuando A es de nida positiva (negativa), basta trabajar con vectores cualesquiera tales que solo las primeras m componentes sean no nulas, es decir, del tipo: (xm] T 00000000000000T). Observacion: Si la matriz Aes estrictamente diagonalmente dominante entonces sus menores principales son no singulares, y, por consiguiente, se puede aplicar el metodo de Gauss sin pivotamiento. Para demostrarlo, basta recordar que todos los menores de Ason diagonalmente dominantes y que toda matriz diagonalmente dominante es no singular. 6.2.4 Metodos de descomposicion Introduccion Los metodos de descomposicion (o factorizacion) se fundamentan en las ideas basicas des- critas en el apartado anterior, donde se ha demostrado que toda matriz regular A puede, con las permutaciones adecuadas, descomponerse en el producto de una matriz triangular inferior L por una matriz triangular superior U. Supongase, para mayor claridad de la exposicion, que las permutaciones no son necesarias (vease el ultimo teorema del apartado anterior y las observaciones subsiguientes). Es decir, se dispone de dos matrices L y U tales que A = LU. Entonces, el sistema de ecuaciones original Ax = b puede escribirse como ( Ly = b Ux = y (6:32) donde puede observarse claramente que resolver el sistema original es equivalente a realizar una sustitucion hacia adelante para determinar y y una sustitucion hacia atras para hallar la solucion x. El objetivo sera, por consiguiente, desarrollar algoritmos que, de forma e ciente, permitan descomponer la matriz original en el producto de matrices triangulares (y, en algunos metodos, tambien matrices diagonales) para acabar resolviendo sistemas de ecuaciones con solucion in- mediata. En el subapartado anterior (Gauss compacto) ya se plantea, de hecho, un metodo de des- composicion. En ese caso, la matriz L se obtiene de forma simple, pero la matriz U requiere de las operaciones clasicas del metodo de Gauss, ecuaciones (6.18). Este metodo compacto se © Los autores, 1998; © Edicions UPC, 1998.
  • 156. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 139 empleo con frecuencia a nales de los a~nos cincuenta para resolver manualmente los sistemas inducidos por las primeras aplicaciones del metodo de los elementos nitos en ingenier a. Con la aparicion de los ordenadores, las mismas operaciones del metodo de Gauss empezaron a automatizarse. Por desgracia, los primeros ordenadores dispon an de poca memoria y, por tanto, de poca precision (los calculos habituales hoy en d a con reales de 64 bits o con enteros de 16 bits entonces eran un lujo) aparecieron los primeros problemas graves de propagacion de errores de redondeo y, por tanto, se invirtieron muchos esfuerzos para estudiar su origen y para desarrollar diversas tecnicas que disminuyeran su in uencia en el resultado nal (Householder, 1964 Wilkinson, 1965). Los resultados de dichas investigaciones fueron muy extensos, pues abarcaban desde el establecimiento de una notacion estandar en analisis numerico de matrices hasta las acotaciones de dichos errores, pero, en particular, dieron lugar a los metodos de descomposicion. La sistematizacion de las modi caciones que realiza el metodo de Gauss compacto sobre la matriz original A dio lugar al metodo de Doolittle. El metodo de Crout resulta de la misma sistematizacion pero ahora tomando la matriz U con diagonal unitaria (en vez de la matriz L). En el proximosubapartadose describe en detalle este metododesarrolladopor PrescottD. Crout en 1941 para, segun el autor, evaluar determinantes y (solo en segundo lugar) resolver sistemas lineales. Los demas metodos de descomposicion son casos particulares de los anteriores. Por consiguiente, los metodos de descomposicion son simplemente una sistematizacion del metodo de Gauss. Es decir, consisten en organizar las operaciones que se realizan en el metodo de Gauss de una forma distinta y, por tanto, las propiedades estudiadas en el apartado anterior (unicidad de la descomposicion, necesidad de pivotamiento, etc.) son identicas en todos los casos. A pesar de ello, tienen un enfoque conceptual distinto (eliminar la triangular inferior versus descomponer en producto de triangulares) y esta sutil diferencia induce ciertas particularidades que conviene tener presentes: 1. Los metodos de descomposicion son especialmente indicados para resolver sucesivamente va- rios sistemas lineales con la misma matriz y distintos terminos independientes, sin necesidad, como se hab a comentado anteriormente para el metodo de Gauss original, de recordar las operaciones de la realizadas durante el proceso de eliminacion. De hecho, la matriz trian- gular inferior L representa una forma compacta de recordar dichas operaciones, como se ha visto para la forma compacta del metodo de Gauss. Por tanto, una vez descompuesta la ma- triz A en el producto de triangulares, basta realizar las dos sustituciones indicadas en 6.32 para tantos vectores b como se desee. En contrapartida, cuando todos los terminos indepen- dientes son conocidos de antemano y se quiere resolver todos los sistemas simultaneamente, la simplicidad que exist a en el metodo de Gauss original para realizar las operaciones de la sobre todos los terminos independientes en paralelo se ha perdido. En la practica, cuando se opta por un metodo de descomposicion, aunque se conozcan todos los terminos independien- tes de antemano, se procede de forma secuencial resolviendo consecutivamente para cada termino independiente dos sistemas triangulares. 2. La compacidad de las operaciones de los metodos de descomposicion permite mejoras en la precision de los resultados empleando unicamente unas pocas variables de precision alta. Esta ventaja de los metodos de descomposicion respecto de los metodos de eliminacion ha perdido importancia con el progresivo abaratamiento de la memoria. © Los autores, 1998; © Edicions UPC, 1998.
  • 157. 140 Metodos numericos Metodo de Crout A continuacion se presenta el metodo de Crout en su version estandar, es decir, sin pivo- tamiento y para matrices llenas. El metodo de Doolittle tiene un desarrollo paralelo que no se considera necesario realizar aqu . En el metodo de Crout se realiza la descomposicion de la matriz A en una L por una U, esta ultima con diagonal unitaria. Este metodo tiene un planteamiento recursivo en el que se descomponen sucesivamente los menores principales de la matriz A. Se empieza por el menor principal de orden 1, luego el de orden 2 y as sucesivamente hasta el menor de orden n, es decir, la matriz original. En esta ocasion, los menores principales de orden m de la matriz A se denotan por Am]. La descomposicion del menor principal de orden 1 es sencilla, puesto que A1] = a11 y se ha tomado U con diagonal unitaria: l11 = a11 y u11 = 1. Suponiendo ahora descompuesto el menor de orden k, es decir, Ak] = Lk]Uk], interesa estudiar como se descompone el siguiente menor principal Ak+1]. Conviene primero escribir Ak+1] en funcion de Ak] y de los coe cientes de A necesarios: Ak+1] = Ak] ck+1] fT k+1] ak+1 k+1 (6:33) donde ck+1] y fk+1] son vectores de IRk: ck+1] = 0 BB@ a1 k+1 a2 k+1 ... ak k+1 1 CCA fk+1] = 0 BB@ ak+1 1 ak+1 2 ... ak+1 k 1 CCA (6:34) Seguidamente, se establece la descomposicion de Ak+1] como Ak+1] = Lk+1] Uk+1] Ak] ck+1] fT k+1] ak+1 k+1 = Lk] 00000000000000 lT k+1] lk+1 k+1 Uk] uk+1] 00000000000000T 1 (6:35) donde aparecen los siguientes vectores de IRk: lk+1] = 0 BB@ lk+1 1 lk+1 2 ... lk+1 k 1 CCA uk+1] = 0 BB@ u1 k+1 u2 k+1 ... uk k+1 1 CCA 00000000000000 = 0 BB@ 0 0 ... 0 1 CCA (6:36) © Los autores, 1998; © Edicions UPC, 1998.
  • 158. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 141 Y, por ultimo, tras proceder a multiplicar las matrices Lk+1] y Uk+1] en la ecuacion 6.35, se obtienen las ecuaciones necesarias para la descomposicion del menor principal Ak+1]. Es decir, Lk] uk+1] = ck+1] UT k] lk+1] = fk+1] lk+1 k+1 = ak+1 k+1 ;lT k+1] uk+1] (6:37) Notese que los vectores uk+1] y lk+1] se obtienen resolviendo (mediante sustitucion hacia adelante) sistemas con matrices triangulares inferiores Lk] y UT k]. El algoritmo de descomposicion de Crout se obtiene nalmente repitiendo las ecuaciones 6.37 para k = 1 ::: n ; 1, sustituyendo las de niciones de los vectores por las ecuaciones 6.34 y 6.36, y planteando expl citamente las dos sustituciones hacia adelante. Es decir: l11 = a11 u11 = 1 k = 1 ::: n;1 8 : u1 k+1 = a1 k+1 = l11 ui k+1 = 0 @ai k+1 ; i;1X j=1 lij uj k+1 1 A = lii i = 2 ::: k lk+1 1 = ak+1 1 lk+1 i = ak+1 i ; i;1X j=1 uji lk+1 j i = 2 ::: k uk+1 k+1 = 1 lk+1 k+1 = ak+1 k+1 ; kX i=1 lk+1 i ui k+1 (6:38) Como ya se ha indicado, se ha supuesto que la matriz A es tal que permite su descom- posicion sin pivotamiento si esto no fuera as , algun lk+1 k+1 se anular a lo cual impedir a la descomposicion del siguiente menor, puesto que se producir a una division por cero. Las tecnicas de pivotamiento tambien pueden emplearse con estos metodos y son muy extendidas a pesar de que complican considerablemente el algoritmo expuesto en la ecuacion 6.38. Tambien conviene observar que el numero de operaciones necesarias para la descomposicion (ecuacion 6.38) y posterior resolucion de los sistemas triangulares (ecuacion 6.32) coincide exactamente con el metodo de Gauss. A pesar de ello, cada elemento de L y U se evalua de forma compacta con las ecuaciones descritas anteriormente. Por este motivo, puede reducirse la © Los autores, 1998; © Edicions UPC, 1998.
  • 159. 142 Metodos numericos propagacion de errores de redondeo si los sumatorios que aparecen en las expresiones de ui k+1 y lk+1 i se evaluan con una precision mayor (solo es necesario un numero con precision alta). Esta tecnica de mejora de la precision fue importante en su d a, pero ha ca do en desuso debido al abaratamiento de la memoria. Ademas, para algunos sistemas lineales, la combinacion de variables de precision normal y de precision alta puede llegar a producir mas errores de redondeo que trabajar solamente con variables de precision normal. (a) (b) Fig. 6.2 Esquema gra co de la descomposicion en el metodo de Crout. Obtencion de: a) la matriz triangular superior b) matriz triangular inferior. Para calcular el elemento en negro son necesarios los elementos tramados. Por ultimo, conviene se~nalar que, segun se aprecia en la gura 6.2a, para evaluar un elemento ui k+1 de U unicamente es necesario conocer el elemento correspondiente ai k+1 de A, los de U que se encuentren encima de el en su propia columna (us k+1, s = 1 ::: i ; 1) y la descomposicion previa del menor de A de orden k. Es decir, no son necesarios ninguno de los coe cientes de A correspondientes a la columna k + 1 por encima de ui k+1 ni del menor citado. En otras palabras, el elemento ai k+1 es necesario para calcular el ui k+1, pero no para © Los autores, 1998; © Edicions UPC, 1998.
  • 160. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 143 calcular los siguientes elementos de U. Por consiguiente, se puede almacenar U sobre (es decir, empleando los mismos espacios de memoria) la matriz triangular superior de A. Pueden deducirse conclusiones similares para la matriz L (vease la gura 6.2b). Es decir, el metodo de Crout esta perfectamente dise~nado para poder reducir las necesidades de memoria almacenando las dos matrices triangulares en las mismas posiciones de memoria que ocupaba originalmente la matriz A (la diagonal de U por ser unitaria no es necesario guardarla). Mas aun como se comentara en el cap tulo 7, el almacenamiento de A, y por tanto el de L y U, puede reducirse en el caso de que la matriz A tenga estructura en banda o skyline. En realidad, los esquemas de almacenamiento para estos tipos de matrices se dise~naron para los metodos directos y conviene emplearlos siempre que la dimension de las matrices exceda las pocas decenas. Problema 6.2: El objetivo de este problema es comprobar que el metodo de Crout puede im- plementarse reservando espacio de memoria unicamente para una matriz y un vector. Tal y como se acaba de comentar, las matrices triangulares L y U se pueden almacenar sobre la matriz A. Se pide: a) Comprobar que en la fase de sustituciones del metodo de Crout, ecuacion 6.32, el vector y puede almacenarse sobre b, y el vector x puede almacenarse sobre y (es decir, que basta reservar espacio de memoria para un vector). b) Escribir el pseudocodigo del metodo de Crout (descomposicion y sustituciones) empleando unicamente una matriz y un vector. Metodo de Cholesky Un caso bastante usual por el gran numero de aplicaciones que se encuentran en el marco de la resolucion numerica de ecuaciones en derivadas parciales (metodos de diferencias nitas, elementos nitos, etc.) es el de sistemas con matrices simetricas y de nidas positivas. Como ya se ha visto anteriormente, este es un caso en el que no es necesario pivotar (vease la observacion al respecto al nal del analisis matricial del metodo de Gauss), y ademas conviene explotar el caracter simetrico de A tanto desde el punto de vista del numero de operaciones como del almacenamiento (vease el problema 6.1). El metodo de Cholesky se propone precisamente utilizar esta informacion previa para realizar una descomposicion mas e caz que el metodo de Crout. De nuevo, la descomposicion se realiza consecutivamente sobre todos los menores de A y ahora el objetivo es encontrar L tal que A = LLT. Es decir, la incognita es una unica matriz triangular inferior L, y su traspuesta LT hace de matriz triangular superior. El menor de orden 1 es, de nuevo, muy simple: l11 = pa11, y los siguientes se obtienen a partir de otra relacion de recurrencia. Descompuesto el menor de orden k, Ak] = Lk]LT k], se establece la descomposicion de Ak+1] como Ak+1] = Lk+1] LT k+1] Ak] fk+1] fT k+1] ak+1 k+1 = Lk] 00000000000000 lT k+1] lk+1 k+1 LT k] lk+1] 00000000000000T lk+1 k+1 (6:39) Notese que, por ser A una matriz simetrica, los vectores ck+1] y fk+1] de nidos en la ecuacion 6.34 coinciden. A partir de 6.39 se obtienen las ecuaciones necesarias para la descomposicion © Los autores, 1998; © Edicions UPC, 1998.
  • 161. 144 Metodos numericos del menor principal Ak+1]: Lk] lk+1] = fk+1] lk+1 k+1 = q ak+1 k+1 ;lTk+1] lk+1] (6:40) Detallando la sustitucion hacia adelante para el calculo de lk+1] se llega al algoritmo: l11 = pa11 k = 1 ::: n;1 8 : lk+1 1 = ak+1 1 = l11 lk+1 i = 0 @ak+1 i ; i;1X j=1 lij lk+1 j 1 A = lii i = 2 ::: k lk+1 k+1 = vuutak+1 k+1 ; kX i=1 l2 k+1 i (6:41) Para concluir, es preciso comprobar que este algoritmo puede utilizarse para cualquier matriz simetrica y de nida positiva. El algoritmo solo fallar a si se se realizaran divisiones por cero o se calcularan ra ces cuadradas de numeros negativos. Teorema: La descomposicion de Cholesky dada por la ecuacion 6.41 puede rea- lizarse para cualquier matriz A simetrica y de nida positiva. Demostracion: Por ser Asimetrica y de nida positiva, a11 0 y l11 = pa11 0. A partir de aqu , se procede recursivamente: se supone que se tiene la descom- posicion Ak] = Lk]LT k] (es decir, que se han ido obteniendo coe cientes lii po- sitivos, con i = 1 ::: k), y se comprueba que puede hacerse la descomposicion Ak+1] = Lk+1]LT k+1]. Las ecuaciones 6.39 y 6.40 permiten expresar el determi- nante del menor Ak+1] como det(Ak+1]) = det(Lk])2 (ak+1 k+1 ; lT k+1] lk+1]). Se veri ca que det(Ak+1]) 0 (por ser A simetrica y de nida positiva) y que det(Lk])2 0 (por ser positivos todos sus elementos diagonales). En consecuen- cia, ak+1 k+1 ; lT k+1] lk+1] es positivo, y al extraer la ra z cuadrada se obtiene lk+1 k+1 0. Metodos LDU y LDLT Como se ha visto, el metodo de Crout consiste en descomponer la matriz A en el producto de dos matrices triangulares, una de las cuales (la matriz triangular superior U) tiene unos en la diagonal. Si se desea, puede conseguirse que ambas matrices (L y U) tengan diagonales unitarias, a cambio de a~nadir una matriz diagonal D. Se obtiene entonces la descomposicion © Los autores, 1998; © Edicions UPC, 1998.
  • 162. 6 Una introduccion a los metodos gaussianos para sistemas lineales de ecuaciones 145 generalizada A = LDU. Pueden obtenerse las matrices L, D y U de forma recursiva, tal y como se ha visto para el metodo de Crout. Asimismo, la descomposicion de Cholesky A = LLT puede generalizarse en A = LDLT. De nuevo, a cambio de a~nadir una matriz diagonal D, puede imponerse que L tenga diagonal unitaria. Para ambos metodos, una vez efectuada la descomposicion, la solucion x del sistema lineal se obtiene resolviendo tres sistemas con solucion inmediata: dos triangulares y uno diagonal. Problema 6.3: A partir de lo visto para los metodos de Crout y de Cholesky en los subapartados anteriores, a) Generalizar la ecuacion 6.38 al metodo LDU. b) Generalizar la ecuacion 6.41 al metodo LDLT. El rango de aplicacion de las descomposiciones LU y LDU es el mismo. No ocurre lo mismo para las descomposiciones simetricas LLT y LDLT: solamente las matrices simetricas y de nidas positivas pueden escribirse como A = LLT en cambio, cualquier matriz simetrica que no requiera pivotamiento (por ejemplo, las matrices simetricas y de nidas negativas) puede expresarse como A = LDLT. 6.3 Bibliograf a Breuer, S. Zwas, G. Numerical Mathematics. A Laboratory Approach. Cambridge University Press, 1993. Ciarlet, P.G. Introduction a l'Analyse Numerique Matricielle et a l'Optimisation. Masson, 1982. Householder, A.S. The Theory of Matrices in Numerical Analysis. Dover Publications Inc., 1964. Press, W.H. Flannery, B.P. Teukolsky, S.A. Vetterling, W.T. Numerical Recipes. The Art of Scienti c Computing. Cambridge University Press, 1986. Ralston, A. Rabinowitz, P. A First Course in Numerical Analysis. McGraw-Hill, 1978. Stewart G.W. Afternotes on Numerical Analysis. Society for Industrial Applied Mathematics, 1996. Wilkinson, J.H. The Algebraic Eigenvalue Problem. Oxford University Press, 1965. © Los autores, 1998; © Edicions UPC, 1998.
  • 163. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 147 7 Programacion y aspectos computacionales de los sis- temas lineales de ecuaciones Objetivos Estudiar y analizar el dimensionamiento de matrices. Desarrollar diversos programas FORTRAN para sistemas triviales. Realizar varias consideraciones generales sobre la memoria e introducir el concepto de dimensionamiento dinamico. Presentar los esquemas de almacenamiento para matrices diagonales, triangulares y en banda. 7.1 Programacion 7.1.1 Dimensionamiento de matrices En el algebra numerica lineal es necesario trabajar con vectores y matrices. Estos vectores y matrices deben tener su representacion en el ordenador para poder programar los distintos algoritmos. En primer lugar, es necesario asignar a cada vector y matriz el nombre que le corresponda. Por ejemplo, un vector dado v 2 IRn puede denominarse vect, mientras que la matriz A 2 IRm n se llamara amat. Si n = 3, las componentes de v, v1, v2 y v3, vienen representadas en el programa por vect(1), vect(2) y vect(3). De forma similar, si ahora se especi ca m = 2, se tiene que los elementos (coe cientes) de la matriz A, a11, a12, a13, a21, a22 y a23, se escriben en FORTRAN como amat(1,1), amat(1,2), amat(1,3), amat(2,1), amat(2,2) y amat(2,3). © Los autores, 1998; © Edicions UPC, 1998.
  • 164. 148 Metodos numericos El numero de sub ndices que como maximo puede tener una matriz depende del compilador empleado, aunque es usual que no pueda exceder de siete sub ndices. En el ejemplo que se muestra se han empleando nombres, tanto para el vector como la matriz, tales que por defecto el compilador interpreta que son matrices de numeros reales. De cualquier modo, las matrices, de la misma manera que todas las variables en FORTRAN, pueden de nirse como se desee: INTEGER*2, INTEGER*4, REAL*4, REAL*8, COMPLEX*8, COMPLEX*16, CHARACTER y LOGICAL. Los sub ndices de las matrices son, por el contrario, siempre variables enteras. Una vez se tienen de nidas las componentes de un vector o bien los coe cientes de la matriz, se puede operar con ellos tal como se har a con variables estandares. Por ejemplo, si se desea calcular el modulo de v, vmod, basta escribir: c___Modulo de vector vmod = SQRT( vect(1)*vect(1) + vect(2)*vect(2) + vect(3)*vect(3) ) mientras que si se desea evaluar el vector u 2 IR2 , denominado uvec, como producto de A por v, es decir u = Av, entonces: c___Producto de matriz por vector uvec(1) = amat(1,1)*vect(1) + amat(1,2)*vect(2) + . amat(1,3)*vect(3) uvec(2) = amat(2,1)*vect(1) + amat(2,2)*vect(2) + . amat(2,3)*vect(3) La ventaja de trabajar con sub ndices es precisamente que no resulta necesario explicitar cada elemento como se ha hecho. Como resulta facil de imaginar, si las dimensiones n o m fueran valores habituales en las aplicaciones (del orden de varios miles) la programacion de operaciones tan simples como evaluar el modulo de un vector o el producto de matriz por vector resultar a algo engorroso. Empleando la instruccion DO ambos ejemplos pueden reescribirse como: c___Modulo de vector ndim = 3 vmod = 0.0e0 do 10 i=1,ndim vmod = vmod + vect(i)*vect(i) 10 continue vmod = SQRT(vmod) donde se ha introducido la variable ndim que indica la dimension de v y que permite emplear el mismo codigo para cualquier dimension deseada. El segundo programa ser a: c___Producto de matriz por vector ndim = 3 mdim = 2 do 10 i=1,mdim uvec(i) = 0.0e0 do 10 j=1,ndim uvec(i) = uvec(i) + amat(i,j)*vect(j) 10 continue © Los autores, 1998; © Edicions UPC, 1998.
  • 165. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 149 Cuando en un programa se emplean variables con sub ndices (vectores y/o matrices) es necesario proporcionar la siguiente informacion: 1. Que variables tienen sub ndice? 2. Cuantos sub ndices tiene cada variable? 3. Cual es el rango de valores de cada sub ndice? Para responder a estas preguntas existe la sentencia no ejecutable que se inicia con la pala- bra dimension. Esta sentencia debe situarse al inicio del programa (en la zona de sentencias no ejecutables), desde luego antes de utilizar la variable correspondiente. Esta instruccion puede afectar a todo tipo de variables (enteras, reales, etc.), previamente de nidas, y pueden escribirse tantas instrucciones dimension como sea necesario. Por ejemplo: dimension amat(2,3),vect(3),uvec(2) dimension bmat(0:10,-90:1),cmat(23:230,-314:-157,-1:1,23,-5:-5) En la primera instruccion se muestra el dimensionamiento de la matriz y los vectores empleados en los ejemplos anterioresy, en la segunda, otro dimensionamiento de matrices para que se pueda observar la gran libertad disponible para indicar el rango de valores de los sub ndices. El l mite inferior de los sub ndices es un entero negativo, nulo o positivo su valor por defecto es uno. El l mite superior puede ser, de nuevo, un entero negativo, nulo o positivo, siempre que sea superior o igual al l mite inferior. Para referirse a las componentes de la matriz se emplean sub ndices entre los l mites designados. De esta forma, cmat(100,-300,0,10,-5) tiene sentido, mientras que cmat(1,-300,0,10,-5) es una posicion de memoria, en principio, desconocida. En realidad, la instruccion DIMENSION se emplea cuando las variables han sido de nidas o bien utilizan su de nicion impl cita (por ejemplo seran enteras aquellas que empiecen por las letras de i a n). De hecho, existe una manera abreviada de de nirlas y dimensionarlas. Por ejemplo, las siguientes instrucciones real*4 amat, uvec, bmat real*8 vect character*2 cmat dimension amat(2,3), vect(3),uvec(2) dimension bmat(0:10,-90:1),cmat(23:230,-314:-157,-1:1,23,-5:-5) son equivalentes a real*4 amat(2,3), uvec(2), bmat(0:10,-90:1) real*8 vect(3) character*2 cmat(23:230,-314:-157,-1:1,23,-5:-5) A modo de ejemplo, en el programa 7.1 primero se generan una matriz y un vector (la primera es una matriz de Hilbert y el segundo en cada componente contiene la suma de la la correspondiente de la matriz), a continuacion se calcula su producto, el modulo del vector resultante y nalmente se escriben los datos y los resultados en un archivo. © Los autores, 1998; © Edicions UPC, 1998.
  • 166. 150 Metodos numericos c c Este programa calcula el producto de una matriz por un c vector y el modulo del vector c c___________________________________________________________________ implicit real*8 (a-h,o-z) parameter (na_max = 100) dimension a(na_max,na_max),v(na_max),w(na_max) write (6,*) ' Entra el orden de la matriz: ' read (5,*) ndim c___Generacion de la matriz (matriz de Hilbert) do 10 i=1, ndim do 10 j=1, ndim a(i,j)= 1.0d0/(dfloat(i+j-1)) 10 continue c___Generacion del vector (suma de las columnas) do 20 i=1, ndim v(i)=0.0d0 do 20 j=1, ndim v(i)= v(i) + a(i,j) 20 continue c___Calculo del producto de matriz por vector do 30 i=1,ndim w(i)=0.0d0 do 30 j=1,ndim w(i)=w(i) + a(i,j)*v(j) 30 continue c___Calculo del modulo de un vector xmodulo=0.0d0 do 40 i=1,ndim xmodulo=xmodulo+w(i)*w(i) 40 continue xmodulo=dsqrt(xmodulo) c___Escritura de los resultados open (unit=10,file='p7_1.res',status='new') write (10,50) do 60 i=1,ndim write (10,70) (a(i,j),j=1,ndim) 60 continue © Los autores, 1998; © Edicions UPC, 1998.
  • 167. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 151 write (10,80) do 90 i=1,ndim write (10,100) v(i) 90 continue write (10,110) do 120 i=1,ndim write (10,100) w(i) 120 continue write (10,130) xmodulo close (10) 50 format (' La matriz de entrada es: '/) 70 format (5(1x,1pe14.6)) 80 format (/' El vector de entrada es: '/) 100 format (1x,1pe14.6) 110 format (/' El vector producto es: '/) 130 format (/' El modulo del vector producto es: ',pe14.6) stop end Prog. 7.1 Calculo del producto de una matriz por un vector y del modulo del vector En el programa 7.1 se ha introducido un nueva sentencia: es el denominado DO impl cito. En el fragmento do 60 i=1,ndim write (10,70) (a(i,j),j=1,ndim) 60 continue aparece, por una parte, el bloque DO que se ha presentado anteriormente (ver apartado 3.7.3). Mediante el contador i, el programa escribe una la de la matriz a en cada l nea del archivo de resultados (recuerdese que cada instruccion write produce automaticamente un salto de l nea). Por otra parte, a traves del contador j, impl citamente se escriben, para cada valor de i, todas las columnas de la matriz c. En la tabla 7.1 se muestra el chero de resultados creado por el programa 7.1 para el caso ndim=4. © Los autores, 1998; © Edicions UPC, 1998.
  • 168. 152 Metodos numericos Tabla 7.1 Fichero de resultados para ndim=4 La matriz de entrada es: 1.000000E+00 5.000000E-01 3.333333E-01 2.500000E-01 5.000000E-01 3.333333E-01 2.500000E-01 2.000000E-01 3.333333E-01 2.500000E-01 2.000000E-01 1.666667E-01 2.500000E-01 2.000000E-01 1.666667E-01 1.428571E-01 El vector de entrada es: 2.083333E+00 1.283333E+00 9.500000E-01 7.595238E-01 El vector producto es: 3.231548E+00 1.858849E+00 1.331865E+00 1.044337E+00 El modulo del vector producto es: 4.094231E+00 7.1.2 Programacion estructurada: subrutinas El programa 7.1 permite realizar el producto de la matriz de Hilbert por un vector cuyas componentes son la suma de las las de dicha matriz si se desea evaluar el producto de otra matriz por otro vector se debera escribir un programa de nuevo. En realidad, el programador podr a estar interesado en tener un programa mas general que calcule los productos de una matriz por un vector cualquiera. Para ello es necesario agrupar y sistematizar los grupos de sentencias que realicen una tarea concreta, por ejemplo, obtener la matriz o calcularse una cierta norma. Al ejercicio de programar agrupando las sentencias que realizan una tarea concreta se le llama programacion estructurada. Ademas, en un mismo codigo pueden existir tareas repetitivas, por ejemplo, calcular el producto escalar de dos vectores. En este caso, se tendr a que repetir tantas veces como se necesite el grupo de sentencias que realizan el calculo del modulo de un vector (ver el ejemplo anterior). Por consiguiente, a pesar de tener una programacion supuestamente estructurada, el programador debe reescribir varias veces un mismo grupo de sentencias. © Los autores, 1998; © Edicions UPC, 1998.
  • 169. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 153 Para evitar estos problemas se pueden de nir las funciones externas (FUNCTION). Por ejem- plo, para el modulo de un vector se de ne la funcion externa XMODULO. Pero estas funciones externas tienen la limitacion de que solo retornan un valor es decir, con una funcion externa re- sulta complicado realizar el producto de una matriz por un vector, puesto que ahora el resultado es un vector. Para solventar estos problemas se de nen las subrutinas: SUBROUTINE. De hecho una sub- rutina se debe interpretar como un subprogramaque tiene casi total independencia del programa que la requiere: las variables pueden tener nombres distintos en el programa principal y en cada uno de los subprogramas pueden compilarse de forma independiente pueden tener sus modulos de entrada y salida de datos::: En resumen, al igual que las FUNCTIONs, las SUBROUTINEs son independientes del programa principal, pero es relativamente facil establecer una buena comu- nicacion entre todas ellas. Las funciones y la subrutinas empiezan por una sentencia con FUNCTION o SUBROUTINE y deben terminar con una END (todas ellas sentencias no ejecutables que indican al compilador donde empieza y termina cada modulo). El nombre de la funcion o de la rutina va seguido de parentesis que contienen los argumentos, separados por comas si hay mas de uno. FUNCTION nombre funcion(argumento1, argumento2,:::) SUBROUTINE nombre subrutina(argumento1, argumento2,:::) Mientras que con una FUNCTION el nombre de la misma debe aparecer al menos una vez en sus sentencias para asignarle el valor correspondiente, en el caso de una rutina su nombre no aparecera por no estar asociado a ningun valor concreto: todos los resultados se de nen en termino de los argumentos y puede haber cualquier numero de argumentos. Las sentencias de una subrutina no se ejecutan al introducir simplemente su nombre en una sentencia del programa, como ocurre con las funciones, sino que es necesario emplear una sentencia CALL nombre subrutina(argumento1, argumento2,:::) para que la rutina se ejecute. Los argumentos que se necesiten para ejecutar las instrucciones de la rutina tendran los valores correspondientes al momento en que se efectua la sentencia CALL. De la misma forma, los argumentos asociados a los resultados tendran despues de la sentencia CALL los valores asignados en la rutina. Es importante resaltar que la ultima sentencia que se ejecuta en una FUNCTION o SUBROUTINE es la sentencia RETURN que devuelve el control al programa principal. Como ejemplo de lo expuesto anteriormente, en el programa 7.2 se ha reescrito el programa que calcula el producto de una matriz por un vector y el modulo de este ultimo empleando funciones y rutinas. Como se podra observar, dentro de las funciones y rutinas es necesario volver a indicar que variables tienen sub ndices y cuales no. © Los autores, 1998; © Edicions UPC, 1998.
  • 170. 154 Metodos numericos c c Este programa calcula el producto de una matriz por un c vector y el modulo del vector mediante funciones y c rutinas c c___________________________________________________________________ implicit real*8 (a-h,o-z) parameter (na_max = 100) dimension a(na_max,na_max),v(na_max),w(na_max) write (6,*) ' Entra el orden de la matriz: ' read (5,*) ndim c___Lectura o generacion de la matriz y del vector call get_mat_vec (ndim,a,v) c___Calculo del producto de matriz por vector call product (ndim,a,v,w) c___Calculo del modulo de un vector x=xmodulo(ndim,w) c___Escritura de los resultados call write_resul(ndim,a,v,w,x) stop end c___________________Lectura o generacion de la matriz y del vector subroutine get_mat_vec (n,a,v) implicit real*8 (a-h,o-z) dimension a(n,n),v(n) c___Generacion de la matriz (matriz de Hilbert) do 10 i=1, n do 10 j=1, n a(i,j)= 1.0d0/(dfloat(i+j-1)) 10 continue c___Generacion del vector (suma de las columnas) do 20 i=1, n v(i)=0.0d0 do 20 j=1, n v(i)= v(i) + a(i,j) 20 continue © Los autores, 1998; © Edicions UPC, 1998.
  • 171. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 155 return end c___________________Calculo del producto de matriz por vector subroutine product (n,a,v,w) implicit real*8 (a-h,o-z) dimension a(n,n),v(n),w(n) do 10 i=1,n w(i)=0.0d0 do 10 j=1,n w(i)=w(i) + a(i,j)*v(j) 10 continue return end c___________________Calculo del modulo de un vector real*8 function xmodulo(n,b) implicit real*8 (a-h,o-z) dimension b(n) xmodulo=0.0d0 do 10 i=1,n xmodulo=xmodulo+b(i)*b(i) 10 continue xmodulo=dsqrt(xmodulo) return end c___________________Escritura de los resultados subroutine write_resul(n,a_mat,b,c,x) implicit real*8 (a-h,o-z) dimension a_mat(n,n),b(n),c(n) open (unit=10,file='p7_2.res',status='new') write (10,10) do 20 i=1,n write (10,30) (a_mat(i,j),j=1,n) 20 continue © Los autores, 1998; © Edicions UPC, 1998.
  • 172. 156 Metodos numericos write (10,40) do 50 i=1,n write (10,60) b(i) 50 continue write (10,70) do 80 i=1,n write (10,60) c(i) 80 continue write (10,90) x close (10) 10 format (' La matriz de entrada es: '/) 30 format (5(1x,1pe14.6)) 40 format (/' El vector de entrada es: '/) 60 format (1x,1pe14.6) 70 format (/' El vector producto es: '/) 90 format (/' El modulo del vector producto es: ',pe14.6) return end Prog. 7.2 Calculo del producto de una matriz por un vector y del modulo del vector mediante funciones y rutinas Problema 7.1: Modi car el programa 7.2 de forma que en lugar de generar una matriz de Hilbert genere una matriz de Vandermonde. La de nicion de los terminos de la matriz de Vandermonde es: aij = (xi)j;1 i j = 1 :: n donde x1 :: xn, son n numeros reales distintos entre s . Como puede observarse, se obtienen diferentes matrices de Vandermonde para diferentes valores de x1 :: xn. En particular se pide: a) Tomar xi = 10;i+1 , con i = 1 :: n, y presentar los resultados obtenidos con n = 4. b) Tomar xi = i, con i = 1 :: n, y presentar los resultados obtenidos con n = 4. © Los autores, 1998; © Edicions UPC, 1998.
  • 173. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 157 7.2 Sistemas con solucion inmediata: programacion 7.2.1 Matriz diagonal Como ya se ha visto anteriormente, la matriz A se escribe como: A = D = 0 BBBBBB@ d11 0 0 0 d22 ... ... ... ... ... ... ... ... ... ... 0 0 0 dnn 1 CCCCCCA y la solucion se obtiene directamente xi = bi dii i = 1 ::: n Por lo tanto, es muy sencillo realizar la siguiente subrutina para matrices diagonales. c_______________Solucion de Sistemas Lineales con matriz DIAGONAL subroutine solve_diag(ndim, dmat, b, x) dimension dmat(ndim), b(ndim), x(ndim) do 10 i=1,ndim x(i) = b(i)/dmat(i) 10 continue return end Conviene resaltar algunas cuestiones: en primer lugar esta rutina presupone que la matriz D que le llega es regular (la rutina no comprueba que cada dmat(i) sea no nulo), porque esta veri cacion puede resultar cara (una sentencia logica para cada componente) y normalmente la regularidad de D es conocida a priori a pesar de ello, esta veri cacion es absolutamente necesaria si no se sabe con certeza que D es regular. En segundo lugar, esta rutina se ha dise~nado para que, a gusto del programador, los resultados (el vector x) se guarden en un vector distinto o no del vector b. En funcion de lo que se desee, la sentencia que llama a (hace que se ejecuten la instrucciones de) SOLVE DIAG es: call solve_diag(ndim, dmat, b, x) si se han dimensionados los dos vectores b y x, y ademas se desean guardar ambos. O bien, call solve_diag(ndim, dmat, b, b) si solo b ha sido dimensionado y se puede escribir el resultado, x, de resolver el sistema sobre el termino independiente. Se pierde la informacion original de b pero hay un ahorro de memoria (un vector de dimension ndim). © Los autores, 1998; © Edicions UPC, 1998.
  • 174. 158 Metodos numericos 7.2.2 Matriz triangular inferior En este caso, la estructura de la matriz del sistema es A = L = 0 BBBBBB@ l11 0 0 l21 l22 ... ... ... ... ... ... ... ... ... ... 0 ln1 ln n;1 lnn 1 CCCCCCA y el algoritmo de resolucion que se denomina sustitucion hacia adelante es (ver subapartado 6.2.2) x1 = b1 = l11 xi = (bi ; i;1X j=1 lijxj) = lii i = 2 ::: n Una subrutina que permite aplicar este algoritmo es la siguiente: c_______________Solucion de Sistemas Lineales con matriz TRIANGULAR INFERIOR subroutine solve_tl(ndim, tlmat, b, x) dimension tlmat(ndim,ndim), b(ndim), x(ndim) x(1) = b(1) / tlmat(1,1) do 10 i=2,ndim x(i) = b(i) do 20 j=1,i-1 x(i) = x(i) - tlmat(i,j)*x(j) 20 continue x(i) = x(i) / tlmat(i,i) 10 continue return end Conviene observar que en esta rutina se han anidado los bucles DO de manera natural siguiendo el algoritmo expuesto: para cada la i se suman las columnas en j. Sin embargo, tambien podr a plantearse el algoritmo con un bucle primero en las columnas, en j, y luego por las i. Es decir, la sustitucion hacia adelante puede ser reprogramada de la siguiente forma: © Los autores, 1998; © Edicions UPC, 1998.
  • 175. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 159 c_______________Solucion de Sistemas Lineales con matriz TRIANGULAR INFERIOR subroutine solve_tl(ndim, tlmat, b, x) dimension tlmat(ndim,ndim), b(ndim), x(ndim) do 10 i=1,ndim x(i) = b(i) 10 continue do 20 j=1,ndim-1 x(j) = x(j) / tlmat(j,j) do 30 i=j+1,ndim x(i) = x(i) - tlmat(i,j)*x(j) 30 continue 20 continue x(ndim) = x(ndim) / tlmat(ndim,ndim) return end En el apartado 7.4 quedaran claras las implicaciones practicas que pueden representar ambas formas de implementar este algoritmo. A pesar de todo es importante observar que en ambos casos esta previsto almacenar toda la matriz L. Es decir, se almacenan todos los ceros de la triangular superior. Este despilfarro de memoria es innecesario y debe ser corregido, como se vera mas adelante. Finalmente, se presenta una variante del bucle DO muy conveniente para escribir matrices. Una rutina que solo escriba los terminos no nulos de la matriz tlmat(ndim,ndim) podr a ser la siguiente: c_______________Escritura de una matriz TRIANGULAR INFERIOR subroutine write_tl(ndim, tlmat) dimension tlmat(ndim,ndim) do 30 i=1,ndim write(6,1000) (tlmat(i,j), j=1,i) 30 continue 1000 format(11(1pe12.6)) return end © Los autores, 1998; © Edicions UPC, 1998.
  • 176. 160 Metodos numericos 7.3 Consideraciones sobre la memoria 7.3.1 Tipos de memoria Como ya se vio en el primer tema, Introduccion al uso de los ordenadores, existen, desde el punto de vista del hardware, diversos tipos de memoria. En particular, interesa recordar la memoria RAM y la memoria cache. La primera porque es donde residen los datos, los programas que ejecuta el usuario y parte del sistema operativo. Y la segunda porque es la que almacena los datos antes de que los utilice la CPU. Puesto que la memoria RAM es nita, existe, en principio, una limitacion clara al numero de datos que como maximo se pueden manipular simultaneamente en un ordenador. Por ejemplo, si se desea resolver un sistema lineal de ecuaciones con n = 5000 incognitas y se almacenan todos los coe cientes de la matriz, n2 = 25 106 , como reales de ocho bytes, REAL*8, ser a necesario disponer de 2 108 bytes, es decir (dividiendo por 10242 ) de 191Mbytes, solo para almacenar la matriz. Es evidente que este numero, que no tiene en cuenta ni otros vectores, ni las instrucciones del programa, ni el sistema operativo, excede con creces la memoria disponible en la gran mayor a de los ordenadores. Por suerte, en los a~nos sesenta se desarrollo una aportacion fundamental en ciencias de la computacion: la memoria virtual. La idea es sencilla pero su implementacion es complicada. La memoria que el usuario tiene a su disposicion no coincide con la memoria RAM del ordenador. El usuario dispone de una cierta cantidad de memoria virtual. Esta memoria esta dividida en bloques de tama~no relativamente modestos llamados paginas. Puesto que la memoria virtual es mayor que la memoria RAM, la mayor a de las paginas de memoria virtual se almacenan en dispositivos alternativos, normalmente discos. Solo unas pocas paginas de la memoria virtual se encuentran activas en RAM. Los dispositivos alternativos son mucho mas lentos que la memoria RAM pero permiten aumentar considerablemente las capacidades de memoria direccionable por el usuario. Cuando una instruccion de un programareferencia una cierta posicion de la memoria, existen dos posibilidades: 1. Que la pagina que contiene esa posicion de memoria se encuentre en RAM (un acierto). En este caso, se accede a esta posicion de memoria inmediatamente. 2. Que la pagina que contiene esa posicion de memoria no se encuentre en RAM (un fallo). En este caso, el sistema selecciona una de las paginas activas y la cambia por la pagina de memoria que contenga la informacion deseada. Cada fallo es caro, puesto que implica la seleccion de la pagina adecuada, su busqueda en el disco, su lectura y nalmente el intercambio con la pagina activa en RAM. Ademas, en sistemas multiusuario todos estos procesos implican interacciones entre la CPU y los dispositivos alternativos de almacenamiento (discos) que se ven retrasadas por las acciones de los demas usuarios. Es decir, conviene evitar, en la medida de lo posible, los fallos. Normalmente, las posiciones de memoria cercanas tienen grandes posibilidades de pertenecer a la misma pagina. Por consiguiente, los programadores deben procurar, para mejorar la e ciencia de sus codigos, que los datos que se vayan a emplear consecutivamente esten en posiciones de memoria lo mas proximas posible. El intercambio de informacion que se produce entre la memoria RAM y el disco tambien existe entre la memoria cache y la memoria RAM. Puesto que por la memoria cache pasa la © Los autores, 1998; © Edicions UPC, 1998.
  • 177. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 161 informacion que va a ser empleada en la CPU, tambien se pueden de nir los aciertos (cuando la siguiente posicion de memoria deseada ya se encuentra en cache) y los fallos (cuando la posicion de memoria deseada no esta en memoria cache). En resumen, el concepto de proximidad de la informacion es fundamental para evitar sobre- costos en el manejo de la memoria. 7.3.2 Dimensionamiento dinamico Si se recuerdan las primeras sentencias de los programas que realizan el calculo del producto de una matriz por un vector (programas 7.1 y 7.2): ... implicit real*8 (a-h,o-z) parameter (na_max = 100) ... dimension a(na_max,na_max), v(na_max), w(na_max) ... se puede observar que para no tener que recompilar y linkar el programa cada vez que se desea trabajar con matrices de tama~nos distintos, se ha de nido un parametro na max. Este parametro indica el tama~no maximo admisible sin necesidad de modi car el programa. En este caso, se supone que no van a analizarse matrices de orden superior a 100. Para ello se reserva en memoria espacio su ciente para almacenar la matriz a de 100 100 coe cientes reales de ocho bytes, posteriormente se reserva el espacio, que como maximo ocupara el vector v (100 REAL*8 mas), y nalmente otro tanto para el vector w. Despues de reservar el espacio que como maximo puede necesitarse, el programa requiere el orden que en realidad va a ser empleado: ... write (6,*) ' Entra el orden de la matriz: ' read (5,*) ndim ... Si, por ejemplo, se introduce para ndim el valor 4, el programa solo utiliza las primeras 16 posiciones de memoria de la matriz a. El vector v, de 4 componentes, se encontrara almacenado detras de la matriz a. Es decir, hay 1002 ;16 numeros reales de ocho bytes, que no van a ser usados. Entre los coe cientes de a y las componentes de v existen, por lo tanto, un gran numero de posiciones de memoria. Es obvio que en este caso no se veri ca la condicion de proximidad entre posiciones de memoria (ver gura 7.1). Paraevitar este problema se emplea el dimensionamiento dinamico. El objetivo es almacenar las matrices y los vectores consecutivamente dejando las posiciones de memoria inutilizadas al nal del espacio reservado (que es el mismo que antes). Los programas 7.1 y 7.2 hab an reservado un espacio equivalente a: 1002 +100+100 = 10 200 reales de ocho bytes. Ahora se reservaran las mismas posiciones de memoria (mas una por comodidad): © Los autores, 1998; © Edicions UPC, 1998.
  • 178. 162 Metodos numericos Fig. 7.1 Reserva no consecutiva de espacio de memoria Fig. 7.2 Reserva consecutiva de espacio de memoria ... implicit real*8 (a-h,o-z) parameter (mtot = 10201) ... dimension dd(mtot) write (6,*) ' Entra el orden de la matriz: ' read (5,*) ndim ... pero en un unico vector denominado dd que debe contener la matriz a y los vectores v y w. La matriz a ocupara las primeras ndim ndim posiciones de dd, el vector v las siguientes ndim, y por ultimo el vector w utilizara las ndim siguientes. Quedan libres, por lo tanto, las ultimas mtot - ndim2 - ndim - ndim posiciones del vector dd si ndim= 4 quedan libres 10 177 consecutivas © Los autores, 1998; © Edicions UPC, 1998.
  • 179. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 163 y al nal de dd. Con esto se ha conseguido que los coe cientes de a, las componentes de v y las componentes de w esten proximas, independientemente de ndim (ver gura 7.2). Queda, sin embargo, el poder enviar a las funciones o rutinas la informacion adecuada: la matriz y los vectores por separado. Para ello es necesario saber donde empieza cada matriz y vector. Esto se realiza por medio de punteros: na sera el puntero de la matriz a (donde empieza la matriz a en dd), nv sera el puntero de v, y nw el de w. Observese que todos ellos son enteros. Para de nir los punteros se realizan las siguientes instrucciones: ... c___Definicion de punteros na = 1 ! matriz a (que ocupa ndim*ndim posiciones) nv = na + ndim*ndim ! vector v despues de a (y ocupa ndim posiciones) nw = nv + ndim ! vector w despues de v nend = nw + ndim c___Verificacion de espacio necesario if (nend .gt. mtot) then write(5,*) ' ERROR Dimensionamiento Insuficiente !' write(5,*) ' se requieren',nend,' posiciones' stop endif ... Por ultimo, es imprescindible establecer la comunicacion con las funciones y rutinas: es necesario que se les transmitan la matriz y los vectores por separado. Para ello, es conveniente imaginar que el argumento asociado a una matriz, o a un vector, solo transmite a la rutina la posicion del primer elemento de esta matriz, o vector. Posteriormente, dentro de la rutina y con la instruccion DIMENSION, se reconoce el espacio que necesita esta matriz, o vector. As , por ejemplo, ... call get_mat_vec (ndim,a,v) ... es equivalente a ... call get_mat_vec (ndim,a(1,1),v(1)) ...puesto que ambas pasan la posicion del mismo elemento de la matriz a. Es en realidad en la rutina, cuando se escribe ... subroutine get_mat_vec (n,a,v) implicit real*8 (a-h,o-z) dimension a(n,n),v(n) ... donde se le da el caracter de matriz de dimension ndim a la posicion de memoria transmitida. Gracias a esta propiedad, en el caso de dimensionamiento dinamico, solo es necesario trans- mitir la posicion del primer elemento correspondiente a la matriz o vector deseado. Por ejemplo: ... call get_mat_vec (ndim,dd(na),dd(nv)) ... © Los autores, 1998; © Edicions UPC, 1998.
  • 180. 164 Metodos numericos A continuacion se muestra el programa principal para el calculo del producto matriz por vector modi cado segun el dimensionamiento dinamico. c c Este programa calcula el producto de una matriz por un c vector y el modulo del vector mediante funciones y c rutinas utilizando dimensionamiento dinamico c___________________________________________________________________ implicit real*8 (a-h,o-z) parameter (mtot = 10201) dimension dd(mtot) write (6,*) ' Entra el orden de la matriz: ' read (5,*) ndim c___Definicion de punteros na = 1 nv = na + ndim*ndim nw = nv + ndim nend = nw + ndim c___Verificacion de espacio necesario if (nend .gt. mtot) then write(5,*) ' ERROR Dimensionamiento Insuficiente !' write(5,*) ' se requieren',nend,' posiciones' stop endif c___Lectura o generacion de la matriz y del vector call get_mat_vec (ndim,dd(na),dd(nv)) c___Calculo del producto de matriz por vector call product (ndim,dd(na),dd(nv),dd(nw)) c___Calculo del modulo de un vector x=xmodulo(ndim,dd(nw)) c___Escritura de los resultados call write_resul(ndim,dd(na),dd(nv),dd(nw),x) stop end Prog. 7.3 Programa principal mediante dimensionamiento dinamico © Los autores, 1998; © Edicions UPC, 1998.
  • 181. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 165 7.4 Almacenamiento de matrices 7.4.1 Almacenamiento por defecto en FORTRAN En FORTRAN las variables con dos sub ndices se almacenan por columnas. Por ejemplo, en la matriz A = 0 B@ a11 a12 a13 a14 a21 a22 a23 a24 a31 a32 a33 a34 a41 a42 a43 a44 1 CA se almacenan los coe cientes siguiendo el orden que imponen las columnas, es decir: a11 a21 a31 a41 a12 a22 a32 a42 a13 a23 a33 a43 a14 a24 a34 a44 En el caso de que la variable tenga mas de dos sub ndices, el almacenamiento sigue la misma losof a. Por ejemplo, una variable dimensionada como c(ni,nj,nk), tendra en primer lugar los elementos c(1,1,1), c(2,1,1), ::: , c(ni,1,1), despues vendran los c(1,2,1), c(2,2,1), ::: , c(ni,2,1), hasta c(1,nj,1), c(2,nj,1), ::: , c(ni,nj,1), para seguir con c(1,1,2), c(2,1,2), ::: , c(ni,1,2), despues c(1,2,2), c(2,2,2), ::: , c(ni,2,2), hasta c(1,nj,2), c(2,nj,2), ::: , c(ni,nj,2), hasta llegar nalmente a los ultimos elementos: c(1,nj,nk), c(2,nj,nk), ::: , c(ni,nj,nk). Es importante tener en cuenta el hecho de que el lenguaje FORTRAN almacena las matrices por columnas para el dise~no de los algoritmos. Para ilustrar este punto se van a analizar los algoritmos propuestos en el apartado 7.2.2 para resolver sistemas con matrices triangulares inferiores. En este caso, se particulariza, para matrices de orden 4. Es decir, L = 0 B@ l11 0 0 0 l21 l22 0 0 l31 l32 l33 0 l41 l42 l43 l44 1 CA Por consiguiente, esta matriz se almacena en el ordenador como l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44 Ahora, si se observan en detalle los bucles del primer algoritmo propuesto se comprueba que el orden en que se accede a los coe cientes de L es 1 2 4 7 3 5 8 6 9 10 l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44 Como puede verse, los accesos a los elementos van saltando de un sitio a otro. Es evidente que en este caso no se accede a los elementos de L ni de forma secuencial ni con proximidad. Este efecto de saltar entre posiciones lejanas de la memoria se ve acentuado al aumentar el orden de © Los autores, 1998; © Edicions UPC, 1998.
  • 182. 166 Metodos numericos la matriz. En cambio, si se estudia el otro algoritmo propuesto, es facil comprobar que a los elementos de L se accede como sigue: 1 2 3 4 5 6 7 8 9 10 l11 l21 l31 l41 0 l22 l32 l42 0 0 l33 l43 0 0 0 l44 Parece obvio que de esta forma el acceso a los coe cientes es mas secuencial: se progresa a lo largo de las columnas de L siguiendo el almacenamiento natural del FORTRAN. A pesar de todo el almacenamiento de los ceros es claramente un despilfarro de memoria y ademas separa elementos que se necesitan de forma consecutiva. Mas adelante se analiza como evitar este almacenamiento innecesario. Por ultimo conviene resaltar que el almacenamiento por columnas que por defecto se tiene en FORTRAN no tiene por que reproducirse con otros lenguajes de programacion. Por ejemplo, el lenguaje C almacena por defecto las matrices por las. En ese caso, el primer algoritmo propuesto resulta mas e ciente. 7.4.2 Almacenamiento por las y por columnas Hasta ahora se ha estudiado el almacenamiento que de manera natural proporciona el FOR- TRAN, pero el usuario puede, si lo desea, modi carlo segun su interes. A continuacion se presentan las dos maneras de almacenamiento de matrices llenas en un vector: por columnas y por las. Almacenamiento por columnas En algunas ocasiones (cuando, por ejemplo, se mezclan rutinas en C y en FORTRAN) puede ocurrir que el programador desee efectuar el almacenamiento de una matriz en un vector. En primer lugar se estudia el caso en que se desee realizar un almacenamiento por columnas. Es decir que la matriz A 2 IRm n, que es una matriz rectangular de m las y n columnas, A = 0 BBBB@ a11 a12 a1 n;1 a1n a21 a22 a2 n;1 a2n ... ... ... ... am;1 1 am;1 2 am;1 n;1 am;1 n am1 am2 am n;1 amn 1 CCCCA se desea almacenar en un vector c 2 IRn m introduciendo consecutivamente las columnas de A. Es decir cT = (c1 c2 ::: cm cm+1 cm+2 ::: c2 m ::: ck ::: c(n;1) m+1 c(n;1) m+2 ::: cn m) =(a11 a21 ::: am1 a12 a22 ::: am2 ::: aij ::: a1n a2n ::: amn) Como puede verse, en la componente ck de c se almacena el elemento aij de A. La posicion k se determina a partir de i y de j como k = (j ;1) m+ i © Los autores, 1998; © Edicions UPC, 1998.
  • 183. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 167 En el caso, poco probable, de que dada la posicion k en c se quiera conocer a que la i y columna j de A se corresponde, es necesario ejecutar el siguiente algoritmo: i = mod(k,m) j = (k-i)/m + 1 if (i.eq.0) then i = m j = j - 1 endif Almacenamiento por filas Si por el contrario el programador desea efectuar un almacenamiento por las, entonces la matriz A 2 IRm n se guarda en un vector f 2 IRm n introduciendo consecutivamente las las de A. Es decir, fT = (f1 f2 ::: fn fn+1 fn+2 ::: f2 n ::: fk ::: f(m;1) n+1 f(m;1) n+2 ::: fm n) =(a11 a12 ::: a1n a21 a22 ::: a2n ::: aij ::: am1 am2 ::: amn) Ahora, el elemento aij se almacena en la componente fk de f y la posicion k se determina a partir de i y de j como k = (i;1) n+ j mientras que para recuperar i y j a partir de k el algoritmo es simplemente: j = mod(k,n) i = (k-i)/n + 1 if (j.eq.0) then j = n i = i - 1 endif Para ver un ejemplo de lo expuesto anteriormente, se estudia el producto AB = C siendo A 2 IRm n, B 2 IRn l y, obviamente, C 2 IRm l. Los elementos de C se obtienen a partir de cij = nX k=1 aik bkj i = 1 ::: m j = 1 ::: l Si A y C se almacenan por las y B se almacena por columnas, el algoritmo para efectuar el producto es el siguiente: © Los autores, 1998; © Edicions UPC, 1998.
  • 184. 168 Metodos numericos ... subroutine AporBenC(m,n,l,fa,cb,fc) dimension fa(m*n), cb(n*l), fc(m*l) ... do i = 1, m iapos = (i-1)*n icpos = (i-1)*l do j = 1, l jbpos = (j-1)*n kcpos = icpos + j fc( kcpos ) = dot( n, fa(iapos+1), cb(jbpos+1) ) enddo enddo ... 7.4.3 Matrices simetricas o matrices triangulares Si se desea almacenar matrices simetricas basta conservar los elementos de la triangular inferior o de la triangular superior. Por lo tanto los esquemas que se exponen a continuacion son validos tanto para matrices simetricas como para matrices triangulares. Matriz triangular superior Sea la matriz U que se muestra a continuacion U = 0 BBBBBBBBBBBBBBBBBBBBBBB@ i j u11 u12 u1i u1j u1n 0 u22 ... ... ... ... ... ... i 0 ... uii uij uin ... ... ... ... ... ... ... ... ... j 0 ... ujj ujn ... ... ... ... ... ... un;1 n 0 0 0 0 unn 1 CCCCCCCCCCCCCCCCCCCCCCCA En este caso es usual el almacenamiento por columnas de esta matriz. Para evitar el almace- namiento de los ceros, el vector que se de ne es © Los autores, 1998; © Edicions UPC, 1998.
  • 185. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 169 cT = (c1 c2 c3 c4 c5 c6 c7 ::: ::: ck ::: ::: cn(n+1) 2 ) =(u11 u12 u22 u13 u23 u33 u14 ::: u44 ::: uij ::: u1n u2n ::: unn) y la ecuacion que determina k a partir de i y de j es k = 1 + 2 + 3 + 4 + :::+ (j ;1) + i = j(j ;1) 2 + i Obviamente, esta formula solo tiene sentido para los elementos no nulos de U, es decir para i j. El algoritmo de recuperacion (dado k deducir i y j) puede escribirse como i = 1 j = 0 do while ( i.gt.j ) j = j+1 i = k-j*(j-1)/2 enddo 7.4.4 Matrices en banda Se dice que una matriz B es una matriz en banda con 1. Semiancho inferior l si todos los elementos de B por debajo de la subdiagonal l son nulos, es decir, bij = 0 si i;j l. 2. Semiancho superior u si todos los elementos de B por encima de la subdiagonal u son nulos. Es decir, bij = 0 si j ;i u. Esta matriz puede esquematizarse como sigue B = 0 BBBBBBBBBBBBBBB@ b11 b12 ::: b1 1+u b21 b22 ... ... ... ... b1+l 1 ... ... ... ... bn;u n ... ... ... ... bn;1 n;1 bn;1 n bn n;l bn n;1 bnn 1 CCCCCCCCCCCCCCCA En este caso lo primero que se hace es una transformacion de la matriz anterior a una matriz © Los autores, 1998; © Edicions UPC, 1998.
  • 186. 170 Metodos numericos rectangular R con n las y l + 1 + u columnas R = 0 BBBB@ r11 r12 r1 l+u r1 l+1+u r21 r22 r2 l+u r2 l+1+u ... ... ... ... rn;1 1 rn;1 2 rn;1 l+u rn;1 l+1+u rn1 rn2 rn l+u rn l+1+u 1 CCCCA Los elementos de B quedan en esta matriz como R = 0 BBBBBBBBBBBBBBBB@ b11 b1 1+u b21 b22 b2 2+u ... ... ... b1+l 1 b1+l 1+l b1+l 1+l+u ... ... ... ... ... bn;u n ... ... ... ... bn;1 n;1 bn;1 n bn n;l bn n;1 bnn 1 CCCCCCCCCCCCCCCCA Conviene observar que este esquema de almacenamiento sera ventajoso en la medida que se veri que: n2 n (l+1+u), es decir, n (l+1+u). En realidad se almacenan (l+1)l 2 + (u+1)u 2 elementos que a priori se sabe que son nulos, pero no resulta facil evitar considerarlos sin complicar en exceso los algoritmos de almacenamiento. Ademas resulta facil demostrar que para l n y u n el numero de ceros innecesariamente almacenados en R es muy inferior a los que quedan fuera de la banda de B, (n;l;1)(n;l) 2 + (n;u;1)(n;u) 2 . Por ultimo, se plantean las formulas de almacenamiento: dado un elemento generico bij de B, este elemento se almacena en r de R, y los sub ndices y se evaluan como = i = 1 + l + (j ;i) En este caso, la recuperacion de i y de j es tambien trivial i = j = ( + ) ;(1 + l) En la practica, la matriz rectangular R se almacena por las o por columnas. En el primer caso se tendra almacenada B por las y el el segundo por diagonales. Por ejemplo, si R se almacena por columnas (B por diagonales) el algoritmo de almace- namiento que dados los sub ndices i y j de un elemento de la banda de B, indica la componente k en un vector, es k = ( ;1) n+ = l + (j ;i)] n+ i © Los autores, 1998; © Edicions UPC, 1998.
  • 187. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 171 Problema 7.2: Se desea encontrar la solucion del sistema lineal de ecuaciones Ax = b, donde A es una matriz de orden n, simetrica, en banda y con coe cientes: a11 = 5 aii = 6 i = 2 :: n;1 ann = 5 aij = ;4 i = 1 :: n j = max(1 i;1) min(n i+ 1) aij = 1 i = 1 :: n j = max(1 i;2) min(n i+ 2) y b es un vector con coe cientes: bi = h4 EI pa + pb ;pa b;a h i i = 1 :: n donde E, I, a, b, pa, pb son constantes del problema y h = (b ; a)=(n + 1). Se pide: a) Escribir un programa en FORTRAN que utilice dimensionamiento dinamico, que trate la matriz A como matriz simetrica en banda con u = l = 2, que tenga una estructura modular, y que conste de las siguientes subrutinas: Lectura de datos de un chero (n, a, b, E, I, pa, pb). De nicion de punteros. Generacion de A y b. Resolucion del sistema Ax = b mediante el metodo de Gauss adaptado al esquema de almacenamiento optimo de nido para A. Escritura del resultado x en un chero. b) Resolver el sistema Ax = b para los datos a = 0, b = 1, pa = 1, pb = 1, E = 105 , I = 10;5 y 1. n = 5 2. n = 19 3. n = 99 c) Importar los resultados del apartado b desde Excel y generar, para cada valor de n, una lista de pares ordenados fti xig con i = 0 :: n + 1, segun las siguientes relaciones: ti = a + b ;a n+ 1 i i = 0 :: n+ 1 x0 = 0 xn+1 = 0 y xi, con i = 1 :: n, iguales a los resultados obtenidos a partir del programa. Presentar en un solo gra co de Excel las tres series de pares ordenados fti xig. Problema 7.3: Comparar el coste computacional (numero de operaciones y memoria necesaria) de la resolucion mediante el metodo de Gauss de un sistema de ecuaciones de © Los autores, 1998; © Edicions UPC, 1998.
  • 188. 172 Metodos numericos orden n, Ax = b, en el que la matriz A es simetrica y en banda con u = l = 2 (vease el problema 7.2), considerando las dos alternativas siguientes: a) Se trata la matriz A como matriz llena y se utiliza el metodo de Gauss estandar. b) Se almacena la matriz A de forma optima y se utiliza el metodo de Gauss adaptado al esquema de almacenamiento. Concretar los resultados obtenidos con n igual a 10, 100 y 1000. Problema 7.4: Un ingeniero esta dise~nando el trazado en alzado de una monta~na rusa para un nuevo parque tematico. Los datos de dise~no son n + 2 puntos (xi yi), con i = 0 ::: n + 1, que corresponden a n + 2 puntos de apoyo de la v a (vease la gura). Para de nir el trazado de la v a, el ingeniero decide utilizar una cubica en cada uno de los n+1 tramos xi xi+1] con i = 0 ::: n. Cada cubica puede expresarse como si(x) = hi ;s0 i + s0 i+1 ;2ti x ;xi hi 3 + 3ti ;hi ;s0 i+1 + 2s0 i x ;xi hi 2 + s0 i (x ;xi) + yi donde hi = xi+1 ; xi, ti = yi+1 ; yi y s0i es la pendiente en el apoyo i-esimo. Las unicas pendientes conocidas a priori son las de los dos apoyos extremos: s00 = s0n+1 = 0. Las pendientes de los apoyos interiores se calculan imponiendo la continuidad de la segunda derivada (curvatura) en dichos apoyos. Para cumplir esta condicion, deben veri carselas siguientes relacionesentre las pendientes (para i = 1 ::: n): hi hi + hi;1 s0 i;1 + 2s0 i + hi;1 hi + hi;1 s0 i+1 = 3 hi hi + hi;1 hi hi;1 ti;1 + hi;1 hi ti Estas n ecuaciones pueden escribirse como un sistema lineal de ecuaciones tri- diagonal (es decir, en banda y con semianchos l = u = 1) de dimension n. Se pide: © Los autores, 1998; © Edicions UPC, 1998.
  • 189. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 173 a) Justi car razonadamente que el sistema lineal puede resolverse mediante los metodos de Gauss o de Crout sin necesidad de pivotar. La particularizacion del metodo de Crout a matrices tridiagonales se denomina metodo de Thomas. Puesto que no hay que pivotar, puede emplearse un esquema de almacenamiento para matrices en banda (vease el subapartado 7.4.4). b) Escribir el pseudocodigo del metodo de Thomas empleando una matriz rectan- gular de n las y 3 columnas, que contiene la matriz tridiagonal al principio y los factores L y U al nal. c) En que orden se accede a los coe cientes r de la matriz R? Justi car razonadamente que, teniendo en cuenta la paginacion, ser a preferible trabajar con una matriz rectangular de 3 las y de n columnas (en lugar de n las y 3 columnas). d) Escribir un programa en FORTRAN para resolver el sistema lineal tridiagonal dado mediante el metodo de Thomas. El programadebe 1) emplear una matriz rectangular de 3 las y n columnas, 2) tener estructura modular (subrutinas), 3) leer los datos (n y los puntos (xi yi), con i = 0 ::: n+1) de un archivo de datos, y 4) escribir los resultados (las pendientes s01 s02 ::: s0n en los apoyos interiores) en un archivo de resultados. e) Utilizar el programa para resolver el caso con n = 7, x0 = 0, x1 = 5, x2 = 15, x3 = 25, x4 = 40, x5 = 48, x6 = 55, x7 = 63, x8 = 73, y0 = 0, y1 = 0:5, y2 = 6, y3 = ;1, y4 = 2, y5 = 1:75, y6 = 4, y7 = 0:5, y8 = 0. Dibujar el trazado de la v a en una gra ca de Excel, teniendo en cuenta que en cada tramo la funcion es una cubica distinta. Comentar los resultados obtenidos. 7.4.5 Almacenamiento en skyline Algunos de los sistemas lineales de ecuaciones que se obtienen al resolver numericamente problemas de ingenier a se caracterizan por presentar un ancho de banda muy importante pero con muchos elementos nulos en su interior. A modo de ejemplo, en la gura 7.3 se muestra una matriz de orden 7000 donde se han marcado en negro los terminos no nulos. Como puede observarse, el semiancho de banda ser a muy grande (es de 1737) y aun cuando se utilizara un almacenamiento en banda, se estar an guardando excesivos elementos (en realidad se almacenar an (1737+ 1737+ 1) 7000 = 24 325 000 elementos). El almacenamiento en skyline de una matriz se realiza: 1. En la parte triangular superior por columnas. Se guardan unicamente todos los elementos comprendidos entre el primer termino no nulo y el termino de la diagonal. 2. En la parte triangular inferior por las. Se guardan unicamente todos los elementos com- prendidos entre el primer termino no nulo y el termino de la diagonal. Por ejemplo, en la gura 7.4 se han marcado en negro todos los elementos que se deben guardar cuando la matriz de la gura 7.3 se almacena en skyline (el numero total de elementos almacenados es 1 114 757, lo que representa un ahorro muy importante). Como es usual, si la matriz es simetricasolose deben almacenarlos elementos de la triangular superior o inferior. En adelante, tan solo se presentara el almacenamiento en skyline para © Los autores, 1998; © Edicions UPC, 1998.
  • 190. 174 Metodos numericos matrices triangulares superiores. Su extension a matrices no simetricas se deja como ejercicio para el lector. Una de las propiedades mas importantes de este tipo de almacenamiento consiste en que los metodos directos de resolucion de sistemas lineales de ecuaciones conservan este tipo de esquemas. Esto hace que el almacenamiento en skyline sea ampliamente utilizado. Fig. 7.3 Elementos no nulos de una matriz Fig. 7.4 Almacenamiento en skyline de la matriz mostrada en la gura 7.4 El almacenamiento de la matriz se realiza mediante dos vectores. El primero (vector c) contiene los elementos de la matriz. Esta se guarda por columnas, y para cada de ellas (em- pezando por la primera) se almacena desde el primer elemento no nulo hasta la diagonal. El © Los autores, 1998; © Edicions UPC, 1998.
  • 191. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 175 segundo (vector l) es un vector de punteros de n componentes, donde n es el orden de la matriz del sistema. En la i-esima componente de este vector se almacena la posicion que ocupa el elemento de la diagonal aii en el vector c. Por ejemplo, si la matriz del sistema es A = 0 BBBBBBBBBBBBBBB@ a11 a13 a15 0 a22 a23 a25 ... ... a33 a34 a35 ... ... a44 a45 a47 ... ... a55 a57 ... ... a66 a67 ... ... a77 ... ... ... 1 CCCCCCCCCCCCCCCA el vector c contiene los coe cientes cT =(a11 a22 a13 a23 a33 a34 a44 a15 a25 a35 a45 a55 a66 a47 a57 a67 a77 :::) mientras que los siete primeros elementos del vector de punteros, l, valen lT =(1 2 5 7 12 13 17 ::: ) De las de niciones anteriores se desprende que el numero de elementos que se deben almacenar en la columna j + 1 es lj+1 ;lj Dado un elemento generico de la matriz aij, este se almacena en una posicion k del vector c que viene dada por k = lj ; (j ;i) Por el contrario, el algoritmo de recuperacion (conocido k encontrar i y j) puede expresarse como do 10 j=2,n if (l(j).ge.k) goto 10 enddo 10 continue i= j-(l(j)-k) Problema 7.5: Sea A una matriz simetrica y de nida positiva, almacenada en skyline (unica- mente la triangular superior, gracias a la simetr a de A). El objetivo de este problema es adaptar el metodo de Cholesky a este esquema de almacenamiento. Para ello, se pide: a) Comprobar, a partir del pseudocodigo del metodo de Cholesky dado en la ecuacion 6.41, que la matriz triangular superior LT tiene el mismo skyline que la parte superior de la matriz A (en consecuencia, LT puede almacenarse sobre A, empleando el mismo esquema de almacenamiento en skyline). b) Escribir el pseudocodigo del metodo de Cholesky adaptado a matrices en sky- line. © Los autores, 1998; © Edicions UPC, 1998.
  • 192. 176 Metodos numericos 7.4.6 Almacenamiento compacto Una matriz A se denomina vac a si la mayor a de sus elementos son cero. Puede ocurrir, ademas, que la disposicion de los elementos no nulos desaconseje el empleo de los esquemas de almacenamiento vistos hasta ahora. Si, por ejemplo, la matriz A tiene elementos no nulos muy alejados de la diagonal, el ancho de banda puede ser muy parecido al orden n de la matriz y el esquema de almacenamiento en banda no permite ahorrar espacio de memoria. En estos casos puede utilizarse un esquema de almacenamiento compacto, que consiste en guardar unicamente los elementos de A distintos de cero. Almacenamiento comprimido por filas El almacenamiento comprimido por las es un metodo general para guardar matrices vac as, que no hace ninguna hipotesis sobre la distribucion de los elementos no nulos. Sea el numero de coe cientes no nulos de A. La idea es guardar estos elementos en un vector f de componentes, recorriendo la matriz A por las. As , por ejemplo, para la matriz A = 0 BBB@ 8 0 0 3 0 2 7 0 0 1 0 1 9 0 6 0 0 ;4 5 0 0 4 0 0 ;6 1 CCCA = 12 el vector f es fT = (8 3 2 7 1 1 9 6 ;4 5 4 ;6) Desde luego, el vector f por s solo no basta para conocer la matriz A. Hace falta, ademas, conocer la posicion de las componentes de f en la matriz A. Para ello, se utilizan dos vectores mas: m (de componentes) y l (de n + 1 componentes). En m se almacenan los ndices de columna j de los elementos del vector f. Es decir, si fk = aij, entonces mk = j. El vector l contiene punteros que indican la posicion en f del primer elemento de cada la. Es decir, si fk = aij, entonces li k li+1. Por comodidad, se de ne ln+1 = + 1 (de esta forma, la expresion tambien es valida para la ultima la). Para la matriz A del ejemplo, el vector m es mT = (1 4 1 2 5 2 3 5 3 4 2 5) y el vector l es lT = (1 3 6 9 11 13) Por ejemplo, para k = 9 se obtiene f9 = ;4, m9 = 3 y l4 9 l5. Esto signi ca que el coe ciente de la la 4 y la columna 3 de la matriz A vale ;4. As pues, la matriz A se almacena mediante tres vectores: uno de numeros reales (en un caso general), f, y dos de numeros enteros, m y l. Es muy importante observar que los esquemas de almacenamiento compacto (como el que se acaba de presentar) no pueden emplearse en la resolucion de un sistema lineal Ax = b mediante metodos directos. Si el algoritmo de eliminacion gaussiana se aplica a la matriz A del ejemplo, el coe ciente a(0) 24 = 0 se transforma en a(1) 24 6= 0 despues del primer paso (compruebese). Pero en los vectores f, m y l no hay espacio para a(1) 24 , puesto que se han guardado unicamente los elementos no nulos de la matriz A original. © Los autores, 1998; © Edicions UPC, 1998.
  • 193. 7 Programacion y aspectos computacionales de los sistemas lineales de ecuaciones 177 Producto de matriz por vector En cambio, los esquemas de almacenamiento compacto son muy indicados si es necesario emplear la matriz A como un operador lineal (es decir, para efectuar productos de matriz por vector). Para ilustrarlo, se describe a continuacion el producto de una matriz vac a por un vector mediante un algoritmo adaptado al almacenamiento comprimido por las. Sea y = Ax, es decir, yi = nX j=1 aijxj i = 1 ::: n Dado que la matriz A es vac a, basta con efectuar los productos aijxj con aij 6= 0. Mediante los vectores f, m y l, esto puede hacerse con las siguientes instrucciones FORTRAN: do i=1,n y(i) = 0.d0 do j=l(i),l(i+1)-1 y(i) = y(i) + f(j)*x(m(j)) enddo enddo Notese que, con la ayuda del vector l, en el bucle DO|ENDDO interior (en j) se recorren solamente los elementos no nulos de la la i (almacenados en el vector f), y se multiplican por las componentes correspondientes del vector x (detectadas mediante el vector m). Problema 7.6: El almacenamiento comprimido por columnas es un esquema para matrices vac as. Igual que en el almacenamiento comprimido por las, una matriz A de orden n y elementos no nulos se guarda en tres vectores: 1) un vector c, de componentes, que contiene los coe cientes no nulos de A por columnas 2) un vector m, de componentes, con los ndices de la de las componentes del vector c 3) un vector l, de n + 1 componentes, que contiene punteros que indican la posicion en c del primer elemento de cada columna de A. Se pide: a) Cuales son los vectores c, m y l para la matriz con n = 5 y = 12 empleada para ilustrar el almacenamiento comprimido por las? b) Detallar el algoritmo de multiplicacion de una matriz A guardada segun un almacenamiento comprimido por columnas y un vector x, y = Ax. 7.5 Bibliograf a Borse G. J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e ingenier a. Anaya, 1989. Breuer, S. Zwas, G. Numerical Mathematics. A Laboratory Approach. Cambridge University Press, 1993. © Los autores, 1998; © Edicions UPC, 1998.
  • 194. 178 Metodos numericos Ellis T.M.R. FORTRAN 77 Programming. Addison{Wesley Publishing Company, 1990. Golub, G.H. Van Loan, C.F. Matrix Computations. Segunda edicion, The John Hopkins University Press, 1990. Stewart G.W. Afternotes on Numerical Analysis. Society for Industrial Applied Mathematics, 1996. © Los autores, 1998; © Edicions UPC, 1998.
  • 195. 8 Aplicaciones al calculo integral 179 8 Aplicaciones al calculo integral Objetivos Describir dos tecnicas numericas para calcular integrales de nidas R b a f(x)dx: el metodo de las aproximaciones rectangulares y la regla compuesta del trapecio. Estudiar y comparar los dos metodos mediante algunos ejemplos numericos. Presentar la extension para el calculo de volumenes. 8.1 Introduccion En muchos problemas de ingenier a interesa calcular la integral de nida de la funcion f(x) en el intervalo a b], I = Z b a f(x)dx (8:1) Esta integral puede interpretarse como el area de la region limitada por la curva y = f(x) y las rectas y = 0, x = a e x = b (vease la gura 8.1). De manera mas rigurosa, la integral I puede de nirse a partir de las aproximaciones rectan- gulares (superior e inferior). Para ello, se divide el intervalo a b] en n subintervalos iguales, de longitud h = b;a n , mediante los puntos x0 = a, x1 = a + h, x2 = a + 2h, :::, xi = a + ih, :::, xn = b (vease la gura 8.2). A continuacion se construyen los rectangulos superior e inferior para cada subintervalo xi xi+1]. © Los autores, 1998; © Edicions UPC, 1998.
  • 196. 180 Metodos numericos Fig. 8.1 Interpretacion gra ca de la integral de nida Supongase, para jar ideas, que la funcion f(x) es creciente en el intervalo a b], tal como ocurre en la gura 8.2. En ese caso, la altura del rectangulo inferior es f(xi) (extremo izquierdo) y la altura del rectangulo superior es f(xi+1) (extremo derecho). La aproximacion rectangular inferior se de ne como la suma de las areas de todos los rec- tangulos inferiores Iinf(h) = hf(x0) + hf(x1) + ::: + hf(xn;1) = h n;1X i=0 f(xi) (8:2) y, analogamente, la aproximacion rectangular superior es la suma de las areas de todos los rectangulos superiores Isup(h) = hf(x1) + hf(x2) + ::: + hf(xn) = h n;1X i=0 f(xi+1) (8:3) En la gura 8.2 se ha supuesto que la funcion f es creciente. Si la funcion f fuera decreciente en lugar de creciente, la altura del rectangulo inferior ser a f(xi+1) (extremo derecho) y la altura del rectangulo superior ser a f(xi) (extremo izquierdo). En consecuencia, es necesario intercambiar las de niciones de Iinf(h) e Isup(h) dadas en las ecuaciones 8.2 y 8.3, y tomar Iinf(h) = h n;1X i=0 f(xi+1) Isup(h) = h n;1X i=0 f(xi) © Los autores, 1998; © Edicions UPC, 1998.
  • 197. 8 Aplicaciones al calculo integral 181 Fig. 8.2a Aproximacion rectangular inferior Fig. 8.2b Aproximacion rectangular superior © Los autores, 1998; © Edicions UPC, 1998.
  • 198. 182 Metodos numericos Por ultimo, si la funcion f no fuera monotona, ser a necesario determinar para cada subin- tervalo xi xi+1] cual es la altura del rectangulo inferior y cual la del rectangulo superior, para modi car adecuadamente las expresiones de Iinf(h) e Isup(h). A partir de las ecuaciones 8.2 y 8.3, la integral de nida I se de ne como el l mite de las aproximaciones rectangulares superior e inferior para h ! 0 I = limh!0 Iinf(h) = limh!0 Isup(h) Notese que Iinf(h) e Isup(h) son, de hecho, las sumas inferior y superior que se utilizan en la teor a de integracion de Riemann (asociadas a la particion del intervalo a b] que se muestra en la gura 8.2). 8.2 El metodo de las aproximaciones rectangulares En algunos casos, la integral I de la ecuacion 8.1 puede calcularse anal ticamente, obteniendo una primitiva de la funcion f y evaluandola en los extremos del intervalo, a y b. En otros casos de interes practico, sin embargo, es imposible (o muy farragoso) obtener una primitiva de f. Se hace entonces necesario emplear una tecnica numerica para el calculo de la integral I. Una primera posibilidad es trabajar directamente con las aproximaciones rectangulares em- pleadas en el apartado anterior para la de nicion de I. En lugar de tomar el l mite para h ! 0, se trabaja con h nito y se calcula Iinf(h) e Isup(h), a partir de las ecuaciones 8.2 y 8.3. Para cualquier valor de h, el valor exacto de la integral, I, se halla comprendido entre Iinf(h) e Isup(h): Iinf(h) I Isup(h) Ademas, a medida que se toma h cada vez mas peque~no, las aproximaciones Iinf(h) e Isup(h) se parecen cada vez mas, y as se consigue atrapar el valor exacto I en un intervalo Iinf(h) Isup(h)] tan peque~no como se quiera. De hecho, la diferencia entre las aproximaciones rectangulares superior e inferior es una cota del error absoluto cometido al aproximar la integral I. Teniendo en cuenta las ecuaciones 8.2 y 8.3, puede escribirse E Isup(h) ;Iinf(h) = h f(xn) ;f(x0) = h f(b) ;f(a) (8:4) La ecuacion 8.4 indica que el metodo de las aproximaciones rectangulares es lineal, ya que el error E es O(h): a medida que h tiende a cero, el error tiende linealmente a cero. As pues, el metodo numerico de las aproximaciones rectangulares esta ntimamente rela- cionado con la propia de nicion teorica de la integral de Riemann. © Los autores, 1998; © Edicions UPC, 1998.
  • 199. 8 Aplicaciones al calculo integral 183 Como ejemplo de aplicacion, se procede a calcular numericamente la integral R =2 0 sin(x)dx. Desde luego, esta integral puede resolverse anal ticamente sin ninguna di cultad: Z =2 0 sin(x)dx = ;cos(x) =2 0 = 1 (8:5) Se trata unicamente de un problema sencillo que se emplea para ilustrar el funcionamiento del metodo. Se escribe un programa en FORTRAN que calcula esta integral (programa 8.1, apartado 8.5). En la tabla 8.1 se muestra el valor de las aproximaciones rectangulares inferior y superior para distintos valores de h. Tabla 8.1 Calculo de R =2 0 sin(x)dx por el metodo de las aproximaciones rectangulares n h Iinf Isup 1 1.57080D+00 0.0000000 1.5707963 2 7.85398D-01 0.5553604 1.3407585 5 3.14159D-01 0.8346821 1.1488414 10 1.57080D-01 0.9194032 1.0764828 100 1.57080D-02 0.9921255 1.0078334 1000 1.57080D-03 0.9992144 1.0007852 10000 1.57080D-04 0.9999215 1.0000785 100000 1.57080D-05 0.9999921 1.0000079 1000000 1.57080D-06 0.9999992 1.0000008 10000000 1.57080D-07 0.9999999 1.0000001 Tal y como estaba previsto, la columna Iinf de la tabla 8.1 tiende al valor exacto I = 1 desde abajo (es decir, con Iinf 1), mientras que la columna Isup tiende a I = 1 desde arriba (con Isup 1). Es importante notar que el error decrece muy lentamente a medida que n aumenta (trabajando con diez millones de subintervalos, se obtiene todav a un error relativo de 10;7). Este fenomeno es debido a que el metodo de aproximaciones rectangulares es lineal (ecuacion 8.4). 8.3 El metodo compuesto del trapecio En el apartado anterior se han utilizado dos aproximaciones rectangulares (una inferior y una superior) del area comprendida entre y = f(x), y = 0, x = xi y x = xi+1. Intuitivamente, parece mejor utilizar como aproximacion el area Ai del trapecio PQRS ( gura 8.3), que puede calcularse como Ai = hf(xi) + f(xi+1) 2 © Los autores, 1998; © Edicions UPC, 1998.
  • 200. 184 Metodos numericos Fig. 8.3 Aproximacion mediante un trapecio Fig. 8.4 El metodo compuesto del trapecio © Los autores, 1998; © Edicions UPC, 1998.
  • 201. 8 Aplicaciones al calculo integral 185 El metodo compuesto del trapecio consiste en aproximar la integral I por la suma IT(h) de las areas de todos los trapecios (vease la gura 8.4): IT(h) = A0 +A1 +A2 +:::An;1 = h f(x0) 2 +f(x1)+f(x2)+:::+f(xn;1)+ f(xn) 2 # (8:6) En la gura 8.4 puede verse que este metodo permite tratar funciones no monotonas de manera directa, sin necesidad de distinguir entre los tramos crecientes y los tramos decrecientes. Se puede demostrar que el error que se comete al aproximar la integral exacta I por IT (ecuacion 8.6) es O(h2). Esto indica que el metodo compuesto del trapecio es cuadratico: a medida que h tiende a cero, el error tiende cuadraticamente a cero. Para ver cual es la implicacion practica de este resultado teorico, se utiliza el metodo compuesto del trapecio para calcular numericamente la integral 8.5. Para ello se emplea el programa 8.2 (apartado 8.5). La tabla 8.2 recoge el valor del IT(h) para distintos valores de h. Tabla 8.2 Calculo de R =2 0 sin(x)dx por el metodo compuesto del trapecio n h IT 1 1.57080D+00 0.7853982 2 7.85398D-01 0.9480594 5 3.14159D-01 0.9917618 10 1.57080D-01 0.9979430 100 1.57080D-02 0.9999794 1000 1.57080D-03 0.9999998 10000 1.57080D-04 1.0000000 Comparando las tablas 8.1 y 8.2 queda claro que el metodo compuesto del trapecio tiende al valor exacto I = 1 mucho mas rapidamente que el metodo de las aproximaciones rectangulares. Para obtener ocho cifras correctas con el metodo del trapecio, por ejemplo, basta tomar diez mil subintervalos. Esta mayor rapidez se debe a que el metodo compuesto del trapecio es cuadratico, mientras que el metodo de las aproximaciones rectangulares es solamente lineal. Problema 8.1: En este ejercicio se propone veri car experimentalmente el orden de convergencia de las dos tecnicas numericas presentadas para el calculo de in- tegrales de nidas: el metodo de las aproximaciones rectangulares (convergencia lineal) y el metodo compuesto del trapecio (convergencia cuadratica). a) Construir una tabla donde aparezca el error absoluto cometido al calcular numericamente la integral de nida R =2 0 sin(x)dx mediante las dos tecnicas mencionadas, para los valores de n que aparecen en las tablas 8.1 y 8.2. © Los autores, 1998; © Edicions UPC, 1998.
  • 202. 186 Metodos numericos b) Para cada una de las dos tecnicas, representar el error absoluto E (calculado a partir del valor exacto de la integral y de los resultados del apartado ante- rior) en funcion del numero de subintervalos, n. Emplear una escala log-log (logaritmo de E versus logaritmo de n). c) Obtener una expresion teorica general (es decir, independiente de la integral de nida que se esta calculando) de la relacion entre el logaritmo de E y el logaritmo de n en los casos 1. Metodo lineal: E = O(h) = O(1 n) 2. Metodo cuadratico: E = O(h2) = O( 1 n2 ) donde h es el tama~no de los subintervalos. d) Concuerda la expresion teorica del apartado c con las relaciones obtenidas en el apartado b? Razonar adecuadamente la respuesta. Problema 8.2: Un ingeniero esta proyectando una carretera, y necesita calcular el volumen de movimiento de tierras en el tramo comprendido entre los puntos kilometricos 1730 y 1810. Dispone para ello de per les transversales cada cinco metros. En cada per l se han medido con un plan metro las areas de desmonte AD y terraplen AT (vease la tabla adjunta). Areas de desmonte y terraplen. Per les transversales cada 5 m Punto Area Area kilometrico (m) desmonte (m2) terraplen (m2) 1730 2.51 0.05 1735 1.32 0.61 1740 1.12 0.82 1745 0.85 0.95 1750 0.63 1.21 1755 0.05 1.35 1760 0.00 1.56 1765 0.00 2.58 1770 0.00 2.41 1775 0.25 2.21 1780 0.56 1.90 1785 0.85 1.50 1790 0.94 0.85 1795 1.57 0.34 1800 1.83 0.11 1805 2.61 0.00 1810 2.57 0.20 A partir de estos datos, los volumenes de desmonte VD y terraplen VT pueden calcularse como VD = Z 1810 1730 AD(x)dx VT = Z 1810 1730 AT (x)dx © Los autores, 1998; © Edicions UPC, 1998.
  • 203. 8 Aplicaciones al calculo integral 187 Escribir un programa en FORTRAN que calcule, mediante el metodo compuesto del trapecio: 1) el volumen de desmonte VD 2) el volumen de terraplen VT 3) el balance de tierras (diferencia entre ambos volumenes). Los datos deben leerse de un chero de datos, y los resultados deben escribirse por pantalla y en un chero de resultados. 8.4 Extension al calculo de volumenes En este apartado se generaliza el metodo compuesto del trapecio para el calculo de integrales dobles del tipo I = Z b a Z d c f(x y)dxdy (8:7) Esta integral puede interpretarse como el volumen de la region limitada por la super cie z = f(x y) y los planos z = 0, x = a, x = b, y = c e y = d (vease la gura 8.5). La integral 8.7 puede reescribirse como I = Z b a Z d c f(x y)dy # dx = Z b a g(x)dx (8:8) con g(x) = Z d c f(x y)dy (8:9) A la vista de las ecuaciones 8.8 y 8.9, puede calcularse numericamente la integral I aplicando dos veces el metodo compuesto del trapecio: una en direccion y y otra en direccion x. Se utiliza para ello una cuadr cula de nm rectangulos, con pasos hx = b;a n en direccion x y hy = d;c m en direccion y (vease la gura 8.6). Los nodos de esta cuadr cula son puntos (xi yj), con xi = a+ ihx e yj = c + jhy. Para un valor de x jo (x = xi), se calcula g(xi) (ecuacion 8.9), empleando el metodo compuesto del trapecio en direccion y: g(xi) = hy f(xi y0) 2 + f(xi y1) + f(xi y2) + :::+ f(xi ym;1) + f(xi ym) 2 # (8:10) Una vez se ha calculado g(xi) para i = 0 ::: n segun la formula 8.10, se emplea el metodo compuesto del trapecio en direccion x para evaluar I = R b a g(x)dx: I = Z b a g(x)dx = hx g(x0) 2 + g(x1) + g(x2) + :::+ g(xn;1) + g(xn) 2 # © Los autores, 1998; © Edicions UPC, 1998.
  • 204. 188 Metodos numericos Fig. 8.5 Interpretacion gra ca de la integral doble Fig. 8.6 Cuadr cula para el metodo compuesto del trapecio © Los autores, 1998; © Edicions UPC, 1998.
  • 205. 8 Aplicaciones al calculo integral 189 8.5 Apendice c c Este programa calcula la integral de sin(x) entre 0 y pi/2 c por el metodo de las APROXIMACIONES RECTANGULARES c___________________________________________________________________ implicit real*8 (a-h,o-z) pi = 4.d0*atan(1.d0) c___Numero n de subintervalos write (6,100) read (5,*) n 100 format (1x,'n= ') c___Valor de h h = 0.5d0*pi/dble(n) c___Calculo de las aproximaciones inferior y superior a_sup = 0.d0 x = 0.d0 c___Extremo izquierdo a=0 a_inf = dsin(x) c___Puntos interiores do 10 i = 1,n-1 x = x+h a_inf = a_inf + dsin(x) a_sup = a_sup + dsin(x) 10 continue c___Extremo derecho b=pi/2 a_sup = a_sup + dsin(0.5d0*pi) c___Factor comun h a_inf = h*a_inf a_sup = h*a_sup c___Salida de resultados write (6,200) n, h , a_inf , a_sup 200 format (1x,i8,1x,1pd12.5,1x,0pf10.7,1x,0pf10.7) stop end Prog. 8.1 Metodo de las aproximaciones rectangulares © Los autores, 1998; © Edicions UPC, 1998.
  • 206. 190 Metodos numericos c c Este programa calcula la integral de sin(x) entre 0 y pi/2 c por el METODO COMPUESTO DEL TRAPECIO c c___________________________________________________________________ implicit real*8 (a-h,o-z) pi = 4.d0*atan(1.d0) c___Numero n de subintervalos write (6,100) read (5,*) n 100 format (1x,'n= ') c___Valor de h h = 0.5d0*pi/dble(n) c___Calculo de la aproximacion a_t x = 0.d0 c___Extremo izquierdo a=0 a_t = 0.5d0*dsin(x) c___Puntos interiores do 10 i = 1,n-1 x = x+h a_t = a_t + dsin(x) 10 continue c___Extremo derecho b=pi/2 a_t = a_t + 0.5d0*dsin(0.5d0*pi) c___Factor comun h a_t = h*a_t c_____Salida de resultados write (6,200) n, h , a_t 200 format (1x,i8,1x,1pd12.5,1x,0pf10.7) stop end Prog. 8.2 Metodo compuesto del trapecio © Los autores, 1998; © Edicions UPC, 1998.
  • 207. 8 Aplicaciones al calculo integral 191 8.6 Bibliograf a Borse, G.J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e ingenier a. Anaya, 1989. Breuer, S. Zwas, G. Numerical Mathematics. A Laboratory Approach. Cambridge Univer- sity Press, 1993. Chapra, S.C. Canale, R.P. Metodos numericos para ingenieros con aplicaciones en com- putadores personales. McGraw-Hill, 1988. Hoffman, J.D. Numerical Methods for Engineers and Scientists. McGraw-Hill, 1992. © Los autores, 1998; © Edicions UPC, 1998.
  • 208. 9 Aplicaciones al calculo diferencial 193 9 Aplicaciones al calculo diferencial Objetivos Comentar algunos conceptos basicos sobre ecuaciones diferenciales ordinarias(EDOs): expresion matematica de una EDO, condiciones iniciales, orden de una EDO, sistemas de EDOs, reduccion de una EDO de orden n a un sistema de n EDOs de primer orden. Describir dos tecnicas numericas para resolver sistemas de EDOs de primer orden: metodo de Euler y metodo de Heun. Estudiar ambos metodos mediante su aplicacion a algunos problemas de ingenier a. 9.1 Introduccion 9.1.1 Ecuacion diferencial ordinaria de primer orden Una gran cantidad de problemas de la f sica y la ingenier a pueden modelarse matemati- camente mediante ecuaciones diferenciales. Como problema modelo, considerese el caso mas sencillo: una ecuacion diferencial ordinaria (EDO) de primer orden, dy dx(x) = f(x y) en x 2 a b] (9:1a) complementada con la condicion inicial y(a) = (9:1b) La incognita del problema es la funcion y de una variable x, de nida en el intervalo a b]. La funcion f(x y) y el escalar son datos. La ecuacion 9.1a es diferencial porque aparece la © Los autores, 1998; © Edicions UPC, 1998.
  • 209. 194 Metodos numericos derivada dy dx de la funcion incognita y ordinaria porque solamente aparecen derivadas totales, y no derivadas parciales de primer orden porque unicamente aparece la derivada primera, y no derivadas de orden superior. Bajo ciertas condiciones de regularidad, el problema dado por las ecuaciones 9.1a y 9.1b tiene solucion unica. En ciertos casos, esta solucion puede hallarse anal ticamente de manera sencilla. Tomese, por ejemplo, dy dx(x) = cy en x 2 0 1] y(0) = 9 = (9:2) donde las constantes c e son conocidas. La solucion anal tica de la ecuacion 9.2 es y(x) = exp(cx) (verif quese). En otros muchos casos, sin embargo, la EDO no puede integrarse anal ticamente y es necesario emplear alguna tecnica numerica. 9.1.2 Ecuaciones diferenciales ordinarias de orden superior a uno Puede ocurrir que en la ecuacion diferencial aparezcan derivadas de y de orden superior a uno. Considerese, por ejemplo, una EDO de orden n, que se escribe como dny dxn = f(x y dy dx d2 y dx2 ::: dn;1 y dxn;1 ) en x 2 a b] (9:3) Esta EDO involucra a la funcion y y a sus n primeras derivadas, puesto que la derivada n- esima depende, segun una funcion conocida f, de x, y y las n ; 1 primeras derivadas. Para que el problema tenga solucion unica, son necesarias n condiciones adicionales sobre la funcion incognita y. Estas condiciones adicionales se llaman condiciones iniciales si estan dadas en un mismo punto del intervalo a b] o condiciones de contorno si estan dadas en mas de un punto del intervalo a b]. Un caso habitual de condiciones iniciales es que la funcion y y sus n;1 primeras derivadas tengan valores prescritos conocidos 0, 1, 2, :::, n;1 en el extremo a: y(a) = 0 dy dx(a) = 1 d2 y dx2 (a) = 2 ::: dn;1 y dxn;1 (a) = n;1 (9:4) Si se complementa la EDO (ecuacion 9.3) con las condiciones iniciales (ecuacion 9.4), se ob- tiene un problema de valor inicial: se tiene informacion sobre la funcion y en el punto x = a (condiciones iniciales), y hay que integrar la EDO para hallar la evolucion de la funcion y (es decir, su valor en todo el intervalo a b]). Si, por el contrario, la EDO se complementa con condiciones de contorno, se tiene un problema de contorno. Como ejemplo de condiciones de contorno, supongase que la funcion y tiene su valor prescrito en n puntos del intervalo a b]. Los problemas de contorno, que no seran tratados aqu , se resuelven numericamente transformandolos en problemas de valor inicial. © Los autores, 1998; © Edicions UPC, 1998.
  • 210. 9 Aplicaciones al calculo diferencial 195 9.1.3 Reduccion de una EDO de orden n a un sistema de n EDOs de primer orden Una EDO de orden n puede transformarse en un sistema de n EDOs (con n funciones incognita), todas ellas de primer orden. Es decir, puede reducirse el orden de las derivadas a costa de aumentar el numero de incognitas. Esta transformacion es necesaria puesto que las tecnicas numericas para la resolucion de EDOs (en particular, los dos metodos que se estudiaran en los apartados siguientes) estan dise~nadas para resolver problemas de primer orden. La idea basica de la transformacion es tratar expl citamente como funciones incognita a las n;1 primeras derivadas de la funcion y. Se utiliza la notacion y(i) di;1 y dxi;1 para i = 1 ::: n con el convenio de que la derivada cero de la funcion es la propia funcion. Las n funciones y(i) son, por lo tanto, y(1) y y(2) dy dx = dy(1) dx y(3) d2 y dx2 = dy(2) dx ... y(n) dny dxn = dy(n;1) dx 9 = (9:5) En las ecuaciones 9.5 se muestra tambien la relacion que existe entre las funciones y(i): la derivada primera de y(i) es la siguiente funcion, y(i+1). Esta relacion es una consecuencia inmediata de la de nicion de las y(i) como derivadas sucesivas de y. Con ayuda de las ecuaciones 9.5, la EDO de orden n de la ecuacion 9.3 puede reescribirse como dy(n) dx dx = f(x y(1) y(2) y(3) ::: y(n)) en x 2 a b] (9:6) donde simplemente se ha hecho un cambio de notacion. Si se a~nade la ecuacion 9.6 a las ecuaciones 9.5 (exceptuando la primera) y se transforman tambien las condiciones iniciales © Los autores, 1998; © Edicions UPC, 1998.
  • 211. 196 Metodos numericos (ecuacion 9.4), se obtiene dy(1) dx = y(2) dy(2) dx = y(3) ... dy(n;1) dx = y(n) dy(n) dx = f(x y(1) y(2) y(3) ::: y(n)) y(1)(a) = 0 y(2)(a) = 1 ... y(n)(a) = n;1 9 = (9:7) Se ha conseguido el objetivo perseguido: las ecuaciones 9.7 son un sistema de n EDOs (con n funciones incognita, y(i) para i = 1 ::: n) de primer orden, puesto que solo aparecen derivadas primeras de las y(i). Para compactar las ecuaciones 9.7, puede emplearse notacion vectorial. Se de nen los vec- tores y, f e de dimension n como y = 8 : y(1) y(2) ... y(n;1) y(n) 9 = f = 8 : y(2) y(3) ... y(n) f(x y(1) y(2) ::: y(n)) 9 = = 8 : 0 1 ... n;1) 9 = (9:8) Con estos vectores, el sistema de ecuaciones 9.7 puede ponerse nalmente como dy dx = f(x y) en x 2 a b] y(a) = 9 = (9:9) Es importante notar que la ecuacion 9.9 es muy similar a la ecuacion 9.1. La unica diferencia es que ahora se trabaja con vectores en lugar de con escalares. Esta similitud sera muy util en los apartados siguientes. En primer lugar, se presentan el metodo de Euler (apartado 9.2) y el metodo de Heun (apartado 9.3) para resolver una EDO de primer orden (ecuacion 9.1) luego se hace la generalizacion a sistemas de n EDOs de primer orden (ecuacion 9.9), simplemente cambiando y, f y por y, f e (apartado 9.4). © Los autores, 1998; © Edicions UPC, 1998.
  • 212. 9 Aplicaciones al calculo diferencial 197 9.2 El metodo de Euler El metodo de Euler se presenta mediante el problema modelo dado por la ecuacion 9.1. El primer paso es dividir el intervalo a b] en m subintervalos de longitud h = b;a m mediante puntos xi, con i = 0 ::: m (vease la gura 9.1). Fig. 9.1 Interpretacion gra ca del metodo de Euler La ecuacion 9.1a debe veri carse para todos los puntos de a b]. Si se particulariza para un punto xi de la discretizacion, resulta dy dx(xi) = f(xi yi) (9:10) donde se emplea la notacion yi y(xi). La idea basica del metodo de Euler es aproximar la derivada en el punto xi mediante un cociente incremental hacia adelante, utilizando los puntos xi y xi+1: dy dx(xi) yi+1 ;yi xi+1 ;xi = yi+1 ;yi h (9:11) La ecuacion 9.11 puede interpretarse geometricamente como aproximar la recta tangente a la funcion y en xi por la recta secante que pasa por los puntos (xi yi) y (xi+1 yi+1) (vease la gura 9.2). © Los autores, 1998; © Edicions UPC, 1998.
  • 213. 198 Metodos numericos Fig. 9.2 Aproximacion secante a la recta tangente Si el valor de la derivada en xi que aparece en la ecuacion 9.10 se sustituye por la aproxi- macion dada por la ecuacion 9.11 se llega a yi+1 ;yi h f(xi yi) de donde puede despejarse yi+1 como yi+1 yi + hf(xi yi) (9:12) El signo que aparece en la ecuacion 9.12 esta causado por la aproximacion efectuada en la ecuacion 9.11. Para poder sustituirlo por un signo = es necesario trabajar con valores aproximados Y de la funcion y, y escribir Yi+1 = Yi + hf(xi Yi) (9:13) La ecuacion 9.13 permite obtener Yi+1 (aproximacion a yi+1) a partir de Yi (aproximacion a yi). Este esquema de avance, que debe inicializarse con la condicion inicial Y0 = , constituye el metodo de Euler: Y0 = Yi+1 = Yi + hf(xi Yi) para i = 0 ::: m ;1 (9:14) © Los autores, 1998; © Edicions UPC, 1998.
  • 214. 9 Aplicaciones al calculo diferencial 199 La interpretacion gra ca del metodo de Euler puede verse en la gura 9.1. A partir de los datos x0 = a e Y0 = , se calcula f(x0 ), que es la pendiente de la tangente a la funcion y en x0. Se avanza segun esta tangente una distancia h, hasta llegar al punto x1 se obtiene as el valor de Y1. A partir de x1 e Y1 se evalua f(x1 Y1), que es una aproximacion a la pendiente f(x1 y1) de la tangente a y en x1. Esta pendiente f(x1 Y1) permite avanzar hasta x2 y obtener Y2, y as sucesivamente. De esta manera, la funcion incognita y se aproxima mediante una l nea quebrada, llamada poligonal de Euler. En la gura 9.1 se aprecia claramente la diferencia entre yi (valor exacto) e Yi (valor aproximado), que en general solo coinciden para i = 0 (condicion inicial). A continuacion se muestra un ejemplo de aplicacion del metodo de Euler. Se trata de un problema sencillo con solucion anal tica, que servira de referencia para la solucion numerica calculada con distintos valores del numero m de subintervalos. Un pilar de hormigon de longitud L = 4 m debe resistir una carga P = 100 KN y su peso propio (peso espec co del hormigon: = 25 KN=m3 ). Para conseguir que la tension normal sea uniforme, se proyecta un pilar de seccion transversal variable S(x), con seccion en la cabeza del pilar de S0 = 0:07 m2 (vease la gura 9.3). Combinando algunas nociones de f sica y calculo diferencial puede comprobarse (se deja como ejercicio al lector interesado) que la funcion S(x) debe veri car dS(x) dx = S0 P S(x) en x 2 0 L] con la condicion inicial S(x0) = S0 Este problema es muy parecido al ejemplo de la ecuacion 9.2, tomando c = S0=P. La solucion anal tica es, en consecuencia, S(x) = S0 exp S0 P x (9:15) Supongase que el objetivo es calcular la seccion en la base del pilar, S(x = L) con L = 4 m, a efectos de dise~nar la cimentacion. Sustituyendo los valores S0 = 0:07 m2 , = 25 KN=m3 , P = 100 KN y x = 4 m en la ecuacion 9.15 se halla la solucion anal tica S(L) = 0:075076 m2 . Con la ayuda de un programa en FORTRAN (programa 9.1, apartado 9.5), se resuelve numericamente el problema mediante el metodo de Euler para distinto numero de subintervalos, m. Se llega a los resultados de la tabla 9.1. Puede verse como el valor numerico de la seccion de la base del pilar tiende al valor exacto a medida que m aumenta. © Los autores, 1998; © Edicions UPC, 1998.
  • 215. 200 Metodos numericos Fig. 9.3 Pilar de seccion variable S(x) Tabla 9.1 Calculo de la seccion en la base del pilar mediante el metodo de Euler m S(x = 4) 1 0.074900 2 0.074986 5 0.075039 10 0.075057 100 0.075074 1000 0.075075 10000 0.075076 © Los autores, 1998; © Edicions UPC, 1998.
  • 216. 9 Aplicaciones al calculo diferencial 201 9.3 El metodo de Heun En el metodo de Euler que se acaba de presentar, el avance de la solucion se produce segun una pendiente calculada al principio de cada paso, es decir, en el extremo izquierdo xi (vease la ecuacion 9.13). Parece intuitivamente mejor tomar un valor mas representativo de la pendiente media de la funcion y en todo el intervalo xi xi+1]. Esta es la estrategia utilizada por una familia de metodos numericos para la resolucion de EDOs, entre los que se encuentra el metodo de Heun. Fig. 9.4 Interpretacion gra ca del metodo de Heun En este metodo, la solucion avanza en cada paso segun el promedio de dos pendientes: la pendiente en el punto inicial (xi Yi) y la pendiente en un punto nal auxiliar obtenido segun el metodo de Euler, (xi+1 Yi+1), con Yi+1 = Yi + hf(xi Yi). En consecuencia, la formula de © Los autores, 1998; © Edicions UPC, 1998.
  • 217. 202 Metodos numericos avance es Yi+1 = Yi + hf(xi Yi) Yi+1 = Yi + h 2 f(xi Yi) + f(xi+1 Yi+1) (9:16) Junto con la condicion inicial Y0 = , esta formula proporciona el metodo de Heun: Y0 = Yi+1 = Yi + hf(xi Yi) Yi+1 = Yi + h 2 f(xi Yi) + f(xi+1 Yi+1) para i = 0 ::: m ;1 (9:17) La interpretacion gra ca del metodo de Heun se muestra en la gura 9.4 para un intervalo generico xi xi+1]. Puede verse que el avance consta de tres fases: a) determinacion de la pendiente f(xi Yi) al principio de paso y obtencion del valor auxiliar Yi+1 b) determinacion de la pendiente f(xi+1 Yi+1) en el punto auxiliar c) avance de medio intervalo con cada una de las pendientes y obtencion del valor nal Yi+1. Si se emplea el metodo de Heun para resolver el problema del pilar ( gura 9.3) con distintos valores de m (numero de subintervalos), se obtienen los resultados de la tabla 9.2. Tabla 9.2 Calculo de la seccion en la base del pilar mediante el metodo de Heun m S(x = 4) 1 0.075072 2 0.075075 5 0.075075 10 0.075076 Comparando las tablas 9.1 y 9.2, puede verse que el metodo de Heun tiene una convergencia mucho mas rapida que el metodo de Euler. Problema 9.1: En este ejercicio se propone investigarexperimentalmente el orden de convergencia de los metodos de Euler y Heun, con ayuda del ejemplo del pilar de hormigon ( gura 9.3). a) Para cada uno de los metodos, calcular el error absoluto E en la seccion de la base del pilar, para distintos valores de m (aprovechando y completando los datos de las tablas 9.1 y 9.2). b) Representar el error E en funcion de m, en escala log-log. c) Cual es el orden de convergencia del metodo de Euler? Y del metodo de Heun? © Los autores, 1998; © Edicions UPC, 1998.
  • 218. 9 Aplicaciones al calculo diferencial 203 9.4 Extension a un sistema de EDOs de primer orden Considerese ahora el caso de un sistema de n EDOs de primer orden (ecuacion 9.9): dy dx = f(x y) en x 2 a b] y(a) = 9 = Este sistema puede ser directamente el modelo matematico de un fenomeno f sico, o puede provenir de la transformacion de una EDO de orden n, tal y como se ha comentado en el subapartado 9.1.3. Los metodos de Euler y de Heun pueden extenderse sin ninguna di cultad para tratar este sistema. Se trata simplemente de sustituir los escalares , Y0, Yi, Yi+1 y f que aparecen en las ecuaciones 9.14 y 9.17 por los vectores , Y0, Yi, Yi+1 y f. As , por ejemplo, para el metodo de Euler se obtiene: Y0 = Yi+1 = Yi + hf(xi Yi) para i = 1 ::: n (9:18) Teniendo en cuenta la ecuacion 9.8, la ecuacion 9.18puede escribirse, componente a componente, como 8 : Y(1)(x0) Y(2)(x0) ... Y(n)(x0) 9 = = 8 : 1 2 ... n 9 = 8 : Y(1)(xi+1) Y(2)(xi+1) ... Y(n;1)(xi+1) Y(n)(xi+1) 9 = = 8 : Y(1)(xi) Y(2)(xi) ... Y(n;1)(xi) Y(n)(xi) 9 = + h 8 : Y(2)(xi) Y(3)(xi) ... Y(n)(xi) f(x Y(1)(xi) Y(2)(xi) ::: Y(n)(xi)) 9 = 9 = (9:19) donde Y(j)(xi) es la aproximacion a y(j)(xi) (valor de la funcion y(j) en el punto xi). Es importante darse cuenta de que en la ecuacion 9.19 se tratan todas las ecuaciones del sistema de forma conjunta. Desde luego, ser a totalmente incorrecto intentar resolver el sistema tratando las ecuaciones una a una, por separado, empleando el metodo de Euler para una EDO visto en el apartado 9.2. Problema 9.2: Generalizar el metodo de Heun (apartado 9.3) al caso de sistemas de EDOs. © Los autores, 1998; © Edicions UPC, 1998.
  • 219. 204 Metodos numericos Problema 9.3: En el dise~no de una estacion depuradora de aguas residuales es necesario estudiar una reaccion qu mica, donde las concentraciones yA e yB de los reactivos A y B var an en el tiempo segun un sistema de dos ecuaciones diferenciales ordinarias de primer orden dyA dt = ; yA yB dyB dt = ; yA y2 B 9 = para t 2 0 1] con condiciones iniciales yA(0) = yB(0) = 1 y siendo = 24 la constante cinetica de la reaccion. a) Escribir un programa en FORTRAN que resuelva el sistema de EDOs me- diante el metodo de Euler y el metodo de Heun. b) Resolver el problema mediante los dos metodos y para diferentes valores de m (numero de subintervalos). Comentar los resultados obtenidos. c) Para que valor del tiempo t el reactivo A ha reducido su concentracion a la mitad de la concentracion inicial yA(0)? 9.5 Apendice c c Este programa resuelve la ecuacion diferencial ordinaria c y'(x) = cy(x) para x en a,b] c y(a) = y0 c por el METODO DE EULER c Aplicacion: problema de la columna con tension uniforme c c___________________________________________________________________ implicit real*8 (a-h,o-z) c___Carga vertical P write (6,100) read (5,*) p 100 format (1x,'P= ') c___Peso especifico gamma write (6,200) read (5,*) gamma 200 format (1x,'gamma= ') c___Longitud de la columna hlong write (6,300) read (5,*) hlong 300 format (1x,'longitud= ') © Los autores, 1998; © Edicions UPC, 1998.
  • 220. 9 Aplicaciones al calculo diferencial 205 c___Seccion de la cabeza (extremo superior) de la columna write (6,400) read (5,*) s0 400 format (1x,'Seccion extremo superior= ') c___Numero de intervalos m write (6,500) read (5,*) m 500 format (1x,'Numero de intervalos= ') c___Calculos previos c___Extremos a, b del intervalo a = 0.d0 b = hlong c___Parametro c de la EDO c = gamma*s0/p c___Paso h (discretizacion) h = (b-a)/dble(m) c___Metodo de Euler c___Inicializacion i = 0 x = a y = s0 c___Bucle do 10 i=1,m f = c*y y = y + h*f x = x + h 10 continue c___Salida de resultados write (6,600) y 600 format (1x, 'La seccion en la base del pilar es=', d12.5) stop end Prog. 9.1 Metodo de Euler © Los autores, 1998; © Edicions UPC, 1998.
  • 221. 206 Metodos numericos c c Este programa resuelve la ecuacion diferencial ordinaria c y'(x) = cy(x) para x en a,b] c y(a) = y0 c por el METODO DE HEUN c Aplicacion: problema de la columna con tension uniforme c c___________________________________________________________________ implicit real*8 (a-h,o-z) . . . c___Metodo de Heun c___Inicializacion i = 0 x = a y = s0 c___Bucle do 10 i=1,m f = c*y yaux = y + h*f x = x + h faux = c*yaux y = y + 0.5d0*h*(f+faux) 10 continue . . . stop end Prog. 9.2 Metodo de Heun Las unicas diferencias entre los programas 9.1 y 9.2 se encuentran en el interior del bucle, dado que es precisamente aqu donde se aplica la de nicion del metodo de resolucion escogido. La lectura de datos, la inicializacion de las variables y la escritura de resultados, sustituidos por puntos suspensivos en el listado del programa 9.2, pueden realizarse de la misma manera en ambos programas. © Los autores, 1998; © Edicions UPC, 1998.
  • 222. 9 Aplicaciones al calculo diferencial 207 9.6 Bibliograf a Borse, G.J. Programacion FORTRAN77 con aplicaciones de calculo numerico en ciencias e ingenier a. Anaya, 1989. Chapra, S.C. Canale, R.P. Metodos numericos para ingenieros con aplicaciones en com- putadores personales. McGraw-Hill, 1988. Hoffman, J.D. Numerical Methods for Engineers and Scientists. McGraw-Hill, 1992. © Los autores, 1998; © Edicions UPC, 1998.
  • 223. 10 Resolucion de los problemas propuestos 209 10 Resolucion de los problemas propuestos Objetivos Comentar los aspectos mas interesantes de los problemas propuestos. Proporcionar al lector el resultado numerico de los problemas. 10.1 Problemas del cap tulo 2 Problema 2.1 Para conseguir que en la columna C de la hoja de calculo aparezcan las ordenadas de la funcion y = 3x2 ;2x;3 basta con realizar dos de los pasos descritos en el apartado 2.6. Fig. 2.1.1 Evaluacion de la funcion y = 3x2 ;2x;3 © Los autores, 1998; © Edicions UPC, 1998.
  • 224. 210 Metodos numericos 1. En primer lugar es necesario introducir en la casilla C2 la formula correspondiente a la mencionada funcion segun se puede observar en la gura 2.1.1. 2. A continuacion, debe arrastrarse dicha formula en sentido vertical tantas casillas como abscisas (en este caso 3) se tengan. Problema 2.2 En este caso, partiendo de los resultados del problema anterior, se trata de modi car el rango de las abscisas para que las funciones y = 2x + 4 e y = 3x2 ;2x ;3 queden de nidas en el intervalo -2,2]. En primer lugar, conviene borrar (empleando, por ejemplo, la seleccion de casillas y la tecla suprimir) los calculos de las celdas B3, B4, C3 y C4. A continuacion, puede introducirse como valor constante el escalar -2 en la casilla A2 que indica el extremo inferior del intervalo. Automaticamente, los valores de las casillas B2 y C2 cambiaran a los valores correctos, esto es 0 y 13, segun se puede apreciar en la gura 2.2.1. La mas sencilla de las posibilidades para de nir la serie de abscisas creciente de 0.5 en 0.5 a partir de -2 consiste en programar en la casilla B3 la formula que se muestra en la gura 2.2.1 ( = A2 + 0,5 ) y a continuacion arrastrar dicha celda en sentido descendente hasta alcanzar el extremo superior del intervalo. Desgraciadamente, no se trata de un proceso automatico, en el sentido de que el usuario debe decidir el numero de casillas que arrastra (hasta llegar al extremo superior del intervalo, 2). Fig. 2.2.1 Programacion de las abscisas Finalmente, bastar a con arrastrar las casillas B2 y C2 en sentido descendente para conseguir el recalculo de las ordenadas correspondientes a ambas funciones. El resultado se puede observar © Los autores, 1998; © Edicions UPC, 1998.
  • 225. 10 Resolucion de los problemas propuestos 211 en la gura 2.2.2. Fig. 2.2.2 Evaluacion de las funciones y = 2x+ 4 e y = 3x2 ;2x ;3 Problema 2.3 Para construir la tabla de multiplicar, se comenzara programando por ejemplo en la la 3 y en la columna B los valores de los argumentos que se deben multiplicar. Para ello se puede emplear lo aprendido en el problema 2.2. As , las casillas C3 y B4 deberan contener los valores iniciales de ambas series de datos, 2 en ambos casos. Seguidamente, debera introducirse en la casilla D3 la formula = C3 + 2 y arrastrarla en sentido horizontal hasta alcanzar la columna G. De la misma manera, la celda B5 debera contener la formula = B4 + 1, que sera arrastrada en sentido vertical hasta la la 23, segun consta en la gura 2.3.1. Finalmente, queda por escribir la formula de multiplicacion. Una de las posibilidades con- siste en programar en la casilla C4 la expresion = $B4 * C$3. El bloqueo alternativo de las las para el primer argumento (el que esta a lo largo de la columna B) y de las columnas para el segundo argumento (el que esta situado a lo largo de la la 3) permite que esta unica formula arrastrada en sentido horizontal y vertical proporcione el resultado correcto para todas las casillas, de manera que resulta innecesaria la introduccion de ninguna otra formula. © Los autores, 1998; © Edicions UPC, 1998.
  • 226. 212 Metodos numericos Fig. 2.3.1 Tabla de multiplicar En la gura 2.3.1 se muestra la expresion a introducir en la celda C4 para confeccionar las tablas de multiplicacion. Problema 2.4 A partir de la hoja de calculo obtenida en el problema 2.3 basta invocar al Asistente para gra cos para obtener el dibujo deseado y estimar los puntos de corte. Los resultados pueden apreciarse en la gura 2.4.1. En ella se observa como uno de los dos puntos de corte entre la recta y = 2x + 4 y la parabola y = 3x2 ;2x ;3 es x = ;1, mientras que el otro queda fuera del rango de de nicion del dibujo. © Los autores, 1998; © Edicions UPC, 1998.
  • 227. 10 Resolucion de los problemas propuestos 213 Ello puede solventarse ampliando el dominio de x y modi cando posteriormente el area de dibujo, con lo que se obtiene el segundo punto de corte, x = 2:33. Fig. 2.4.1 Representacion gra ca de las funciones y = 2x+4 e y = 3x2 ;2x;3 Problema 2.5 Las instrucciones necesarias para confeccionar la hoja de calculo se encuentran su ciente- mente detalladas a lo largo de la explicacion del problema, si bien en algun caso puede resultar conveniente complementar las citadas indicaciones con las que puede proporcionar el Asistente de funciones de Excel. Para conocer el signi cado y uso concreto de algunas de las funciones que aqu se usan basta con emplear la opcion Insertar{Funcion que se encuentra bajo el menu desplegable Insertar. Los formatos de las celdas en que aparecen expresiones porcentuales o monetarias se obtienen modi cando el formato original de presentacion de los numeros. Ello se consigue empleando la opcion Formato{Celdas{Numero del menu desplegable Formato. Con respecto a la pregunta nal acerca de si esta bien calculada la ultima cuota que se debe pagar, la respuesta es que no. Ello se debe al hecho de que esta cuota ha sido calculada en la casilla B8 empleando la funcion redondear. De esta manera se produce un desfase entre el total teorico que hay que devolver y el real devuelto. Para comprobarlo, basta evaluar la formula de la casilla B8 (Cuota) sin emplear la funcion redondear. En ese caso, la cuota mensual que © Los autores, 1998; © Edicions UPC, 1998.
  • 228. 214 Metodos numericos hay pagar es de 70 260.47 pesetas, lo que al cabo de 24 mensualidades representan un total de 1 686 251.35 pesetas. En consecuencia, la diferencia con respecto a la casilla E8 (Total a pagar) asciende a poco mas de 11 pesetas a favor del banco, que deber an ser abonadas en el ultimo pago {con lo que este pasar a a ser de 70 271 pesetas{ posibilitando la total extincion del credito. En la gura 2.5.1 se pueden apreciar las formulas introducidas en las diversas casillas de la hoja de calculo para obtener los mencionados resultados. Fig. 2.5.1 Formulas para el calculo de las tasas de amortizacion de un credito © Los autores, 1998; © Edicions UPC, 1998.
  • 229. 10 Resolucion de los problemas propuestos 215 10.2 Problemas del cap tulo 3 Problema 3.1 Al ejecutar el programa se obtiene que las dos variables valen 0. Este resultado implica que al realizar una division entre variables enteras y almacenar el resultado en otra variable entera, el FORTRAN escoge la parte entera del cociente (es decir, no redondea al entero mas cercano). Problema 3.2 En la sentencia OPEN el archivo de resultados RESUL.RES se abre con STATUS='NEW'. Al ejecutar el programa 3.7 por segunda vez, el archivo RESUL.RES ya existe y se produce un error. Existen varias maneras de evitar este error. La mas sencilla consiste en renombrar o borrar el archivo de resultados generado durante la primera ejecucion antes de ejecutar el programa por segunda vez. Una alternativa es declarar el chero RESUL.RES con STATUS='UNKNOWN'. De esta forma, si el chero no existe el programa lo crea, y si ya existe escribe encima de la informacion ya existente esto quiere decir que solo se conservan los resultados correspondientes a la ultima ejecucion del programa y que, por lo tanto, se pierden los resultados de las anteriores ejecuciones. Problema 3.3 El programa 3.3.1 resuelve las cuestiones planteadas de una forma concisa y sistematica. La justi cacion teorica de los algoritmos utilizados para cada una de las cuestiones se describe a continuacion. Sea una circunferencia de radio r entero. Si (i j) es un punto perteneciente a dicha circunferencia, entonces se veri can simultaneamente las condiciones siguientes: i r (3:3:1) j r (3:3:2) i2 + j2 = r2 (3:3:3) Para identi car todos los puntos de coordenadas enteras que pertenecen a la circunferencia, se empieza por recorrer todos los puntos de coordenadas enteras que veri can simultaneamente las condiciones 3.3.1 y 3.3.2. Para cada uno de estos puntos se evalua la expresion i2 +j2 si se veri ca la igualdad 3.3.3, entonces se tiene tambien que (;i)2 + j2 = r2 i2 + (;j)2 = r2 (;i)2 + (;j)2 = r2 es decir, que los puntos (;i j), (i ;j) y (;i ;j) tambien satisfacen la condicion de pertenencia a la circunferencia. Es interesantenotar que, dado el punto de coordenadas(i j), el punto (;i j) se obtiene por simetr a del anterior respecto al eje de ordenadas, el punto (i ;j) se obtiene por simetr a respecto al eje de abscisas y el punto (;i ;j) es el simetrico del (i j) respecto al origen. © Los autores, 1998; © Edicions UPC, 1998.
  • 230. 216 Metodos numericos Para obtener los puntos interiores a la circunferencia, se procede del mismo modo pero sustituyendo la condicion 3.3.3 por la siguiente: i2 + j2 r2 (3:3:4) A nivel de programacion, es interesante notar la existencia de bucles DO-ENDDO anidados, que se utilizan para recorrer todos los puntos (i j) que sean candidatos a solucion. Por lo que respecta a la escritura de los resultados, se pueden observar dos procedimientos distintos. Por una parte, las coordenadas de cada uno de los puntos se escriben en pantalla mediante varias sentencias WRITE diferentes cada sentencia WRITE produce la escritura de un punto, mas un salto de l nea. En cambio, cuando se accede al archivo de resultados se escriben todos los puntos de una vez, utilizando una sola sentencia WRITE en este caso, el salto de l nea se controla mediante la instruccion FORMAT correspondiente. c c Este programa detecta los puntos con coordenadas c enteras: 1) sobre una circunferencia c 2) en el interior de una circunferencia c___________________________________________________________________ c___Introduccion del valor del radio 10 write (6,*) ' Valor del radio : ' read (5,*) nrad if ((nrad.le.0) .or. (nrad.gt.100)) goto 10 nrad2 = nrad*nrad c___Apertura del archivo de resultados open (unit=20,file='circunferencia.res',status='unknown') c___Obtencion de puntos sobre la circunferencia write (6,*) ' Puntos sobre la circunferencia ' write (6,*) write (20,*) ' Puntos sobre la circunferencia ' write (20,*) do i=0,nrad do j=0,nrad if ( (i*i+j*j) .eq. nrad2) then write (6,*) ' ' write (6,100) i, j write (6,100) i,-j write (6,100) -i, j write (6,100) -i,-j write (20,200) i, j, i,-j, -i, j, -i,-j endif enddo enddo © Los autores, 1998; © Edicions UPC, 1998.
  • 231. 10 Resolucion de los problemas propuestos 217 write (6,*) c___Obtencion de puntos interiores a la circunferencia write (6,*) ' Puntos interiores a la circunferencia ' write (6,*) write (20,*) ' Puntos interiores a la circunferencia ' write (20,*) do i=0,nrad do j=0,nrad if ( (i*i+j*j) .lt. nrad2) then write (6,*) ' ' write (6,100) i, j write (6,100) i,-j write (6,100) -i, j write (6,100) -i,-j write (20,200) i, j, i,-j, -i, j, -i,-j endif enddo enddo close (20) 100 format (5x,'El punto es : (',i4,',',i4,')') 200 format (4(5x,'El punto es : (',i4,',',i4,')'/)) stop end Prog. 3.3.1 Puntos de coordenadas enteras en una circunferencia En la tabla 3.3.1 se presenta el chero de resultados CIRCUNFERENCIA.RES obtenido para r = 2. Se puede observar que los puntos que tienen una coordenada nula aparecen dos veces, y que el centro de la circunferencia (que tiene ambas coordenadas nulas) aparece cuatro veces. La justi cacion de este fenomeno se expone a continuacion. Sea (a 0) un punto de la circunferencia. El programa realiza tres simetr as de este punto para obtener tres nuevos puntos de la circun- ferencia en este caso, dichas simetr as dan por resultados los puntos de coordenadas (;a 0), (a ;0) y (;a ;0). As pues, el numero total de puntos diferentes detectados no es cuatro sino dos, ya que (a 0) (a ;0) y (;a 0) (;a ;0). Para puntos del tipo (0 b) (pertenecientes al eje de ordenadas), la situacion es analoga. Finalmente, cuando a = b = 0, es decir, cuando el punto detectado es el origen de coordenadas, las tres simetr as dan por resultado el punto original (0 0). Por lo que respecta a la deteccion de puntos interiores a la circunferencia, se aplican los mismos razonamientos. © Los autores, 1998; © Edicions UPC, 1998.
  • 232. 218 Metodos numericos Tabla 3.3.1 Fichero de resultados para r = 2 Puntos sobre la circunferencia El punto es : ( 0, 2) El punto es : ( 0, -2) El punto es : ( 0, 2) El punto es : ( 0, -2) El punto es : ( 2, 0) El punto es : ( 2, 0) El punto es : ( -2, 0) El punto es : ( -2, 0) Puntos interiores a la circunferencia El punto es : ( 0, 0) El punto es : ( 0, 0) El punto es : ( 0, 0) El punto es : ( 0, 0) El punto es : ( 0, 1) El punto es : ( 0, -1) El punto es : ( 0, 1) El punto es : ( 0, -1) El punto es : ( 1, 0) El punto es : ( 1, 0) El punto es : ( -1, 0) El punto es : ( -1, 0) El punto es : ( 1, 1) El punto es : ( 1, -1) El punto es : ( -1, 1) El punto es : ( -1, -1) Problema 3.4 El programa 3.4.1 permite evaluar un polinomio p4(x) mediante la regla de Horner. Cabe comentar dos aspectos. Por una parte, los calculos se realizan en simple precision, puesto que no se declara expl citamente ninguna variable. Conviene notar que la variable entera I se convierte al formato REAL*4 a la hora de realizar con ella operaciones aritmeticas que involucren variables reales esta conversion se lleva a cabo mediante la instruccion FLOAT. Por otra parte, mediante © Los autores, 1998; © Edicions UPC, 1998.
  • 233. 10 Resolucion de los problemas propuestos 219 la variable INTER el usuario puede seleccionar el numero de intervalos (y, por tanto, el numero de puntos) en los que se evaluara el polinomio. c c Evaluacion de un polinomio mediante la REGLA DE HORNER c___________________________________________________________________ c___Entrada del los datos write (6,*) ' Introduce el limite inferior : ' read (5,*) x_inf write (6,*) ' Introduce el limite superior : ' read (5,*) x_sup write (6,*) ' Introduce el numero de intervalos : ' read (5,*) inter c___Calculo del paso deltax = (x_sup - x_inf) / float(inter) c___Apertura del archivo de resultados open (unit=20,file='horner.res',status='unknown') c___Cabecera del archivo write (20,50) 'X','P4(X)' write (20,50) '===========','===========' c___Evaluacion del polinomio do i=0,inter x = x_inf + float(i)*deltax y= (( (2.0*x + 20.0)*x + 70.0)*x + 100.0)*x + 48.0 write (20,100) x, y enddo close (20) 50 format (2x,A15,3x,A15) 100 format (2x,f15.7,3x,f15.7) stop end Prog. 3.4.1 Evaluacion de un polinomio mediante la regla de Horner En la tabla 3.4.1 se presenta el archivo de resultados HORNER.RES,producido por el programa 3.4.1 al evaluar el polinomio p4(x) = 2x4 ; 20x3 + 70x2 ; 100x + 48 mediante la regla de © Los autores, 1998; © Edicions UPC, 1998.
  • 234. 220 Metodos numericos Horner con INTER = 6 (pasos de x = 0:5). Tabla 3.4.1 Resultados obtenidos para INTER = 6 X P4(X) =========== =========== -4.0000000 0.0000000 -3.5000000 -1.8750000 -3.0000000 0.0000000 -2.5000000 1.1250000 -2.0000000 0.0000000 -1.5000000 -1.8750000 -1.0000000 0.0000000 © Los autores, 1998; © Edicions UPC, 1998.
  • 235. 10 Resolucion de los problemas propuestos 221 10.3 Problemas del cap tulo 4 Problema 4.1 Apartado a) En el apartado 4.2.1 se ha detallado el almacenamiento de los numeros enteros en un orde- nador cuando se reserva un bit para el signo. Sin embargo, en las variables unsigned no se debe reservar dicha posicion porque el numero siempre sera positivo. A continuacion se calculara cual es el mayor y menor numero entero cuando este se representa en sistema binario mediante S posiciones (ver gura 4.1.1). Fig. 4.1.1 Representacion de un numero unsigned integer mediante S posiciones De acuerdo con la expresion 4.1 la representacion es dS-1 dS-2 ::: d2 d1 d0 2 = dS-12S-1 + dS-22S-2 + ::: + d222 + d121 + d020 En estas condiciones, el numero entero maximo (en valor absoluto) que se puede almacenar es (ver gura 4.1.2) Fig. 4.1.2 unsigned integer maximo y su valor es Nmax = 1 2S-1 + 1 2S-2 + ::: + 1 22 + 1 21 + 1 20 = 1 1 ; 2S 1 ; 2 = 2S ; 1 Del mismo modo, la gura 4.1.3 muestra el almacenamiento del numero entero no nulo mas proximo a cero. Su valor es logicamente el mismo que para las variables INTEGER de FORTRAN (ver expresion 4.3) Nm{n = 1 20 = 1 © Los autores, 1998; © Edicions UPC, 1998.
  • 236. 222 Metodos numericos Fig. 4.1.3 unsigned integer no nulo m nimo Observese que, evidentemente, el numero mayor que se puede almacenar con S posiciones de memoria sin incluir el signo es el mismo que el numero mayor que se puede almacenar con S + 1 posiciones incluyendo el signo. Ya que, en ambos casos, el numero de posiciones que almacenan d gitos (sin el signo) es S. La formula del numero maximo se podr a haber deducido de la expresion 4.2 del apartado 4.2.1 simplemente sustituyendo S por S + 1. Apartado b) El mayor unsigned integer de 16 bits es (S = 16) Nmax = 216 ; 1 = 65535 El mayor unsigned integer de 32 bits es (S = 32) Nmax = 232 ; 1 = 4294967295 El mayor INTEGER*4 del lenguaje FORTRAN es (substituir S = 32 en la expresion 4.2) Nmax = 232;1 ; 1 = 2147483647 Por lo tanto, el unsigned integer de 32 bits permite almacenar el mayor numero entero. Apartado c) A partir de los resultados del apartado anterior es facil comprobar que solo el unsigned integer de 32 bits permite almacenar el numero k = 3125587976. En cambio, ninguno de los tres tipos de variables enteras permite almacenar el numero , puesto que se trata de un numero real no entero. © Los autores, 1998; © Edicions UPC, 1998.
  • 237. 10 Resolucion de los problemas propuestos 223 Problema 4.2 El pseudocodigo correspondiente a la resolucion de una ecuacion de segundo grado es 1. Entrar a, b y c 2. dis = b2 - 4ac 3. Si dis 0 entonces x1 = (-b + p dis) / (2a) x2 = (-b - p dis) / (2a) Escribir x1 y x2 Si no z1 = (cmplx(-b) + pcmplx(dis)) / cmplx(2a) z2 = (cmplx(-b) - pcmplx(dis)) / cmplx(2a) Escribir z1 y z2 Fin de si 4. Parar La gura 4.2.1 muestra el diagrama de ujo correspondiente al algoritmo de Euclides para determinar el maximo comun divisor de m y n. Problema 4.3 Apartado a) Tras la inicializacion de las variables (que permite la entrada en el bucle), dentro del bucle de iteraciones la variable a toma por valor las sucesivas potencias de 2, a = (1=2)i. El valor del contador i se incrementa en cada iteracion y se calcula la potencia de 1=2 correspondiente multiplicando la potencia del paso anterior por half = 1=2, a = (1=2)i = (1=2)i;1 (1=2), con la instruccion a a*half. Por lo tanto, durante las iteraciones la variable b toma los valores b = 1 + a = 1 + (1=2)i para los distintos valores de la variable i. El bucle sigue iterando mientras se cumple la condicion b 1. En consecuencia, solo se podra salir del bucle en el momento en que b = 1 + a se confunda con 1. As , cuando se sale del bucle, la variable a contiene la primera potencia de 1=2 menor que la precision de las variables con que se trabaja. Es decir, el primer termino del sumatorio que no va a afectar a la suma total Sn. Por lo tanto, una vez fuera del bucle, la precision de las variables utilizadas se puede calcular como 2*a o (1=2)i;1 (los valores de la iteracion anterior, que todav a cumpl an la condicion). Es importante observar que con este algoritmo se puede calcular la precision de las variables que se utilizan. No se debe confundir con el numero m nimo almacenable. Cuando se sale del bucle la variable a tiene un valor menor que la precision (1+a se confunde con 1) pero todav a © Los autores, 1998; © Edicions UPC, 1998.
  • 238. 224 Metodos numericos se mantiene por encima del numero m nimo almacenable (a no se confunde con 0 y tiene sentido calcular 2*a para obtener el valor de la precision). Fig. 4.2.1 Diagrama de ujo correspondiente al algoritmo de Euclides Apartado b) El programa 4.3.1 presenta el codigo correspondiente al algoritmo planteado, tanto en simple como en doble precision. En este programa se ha introducido la sentencia DO WHILE. Su sintaxis es DO WHILE ( condicion ) bloque ENDDO © Los autores, 1998; © Edicions UPC, 1998.
  • 239. 10 Resolucion de los problemas propuestos 225 c c Evaluacion de la precision de la maquina c___________________________________________________________________ implicit real*4 (a-h) implicit real*8 (o-z) c___Resolucion del problema utilizando variables REAL*4 a = 1.e0 b = 2.e0 half=0.5e0 i = 0 do while (b .gt. 1.e0) a = a * half i = i + 1 b = 1.e0 + a enddo write(6,*) ' ' write(6,*) ' RESULTADOS CALCULADOS CON VARIABLES REAL*4 ' write(6,*) ' mantisa =',i-1 write(6,*) ' precision =',2.e0**(1-i),2.e0*a c___Resolucion del problema utilizando variables REAL*8 x = 1.d0 y = 2.d0 zhalf=0.5d0 i = 0 do while (y .gt. 1.d0) x = x * zhalf i = i + 1 y = 1.d0 + x enddo write(6,*) ' ' write(6,*) ' RESULTADOS CALCULADOS CON VARIABLES REAL*8 ' write(*,*) ' mantisa =',i-1 write(*,*) ' precision =',2.d0**(1-i),2.d0*x stop end Prog. 4.3.1 Calculo de la precision mediante las potencias negativas del numero 2 y se interpreta como: ejecutar reiteradamente el bloque de sentencias que hay entre la sentencia DO WHILE y la sentencia ENDDO mientras la condicion sea verdadera. Por lo tanto, mientras (b.gt.1.e0) o (y.gt.1.d0) se multiplica a por half, se incrementa i en 1 y se actualiza el © Los autores, 1998; © Edicions UPC, 1998.
  • 240. 226 Metodos numericos valor de b. En la tabla 4.3.1 se presentan los resultados obtenidos al ejecutar el programa en un orde- nador personal. Los resultados obtenidos concuerdan con lo expuesto en el cap tulo 4 (apartado 4.4.1). Tabla 4.3.1 Resultados correspondientes al calculo de las potencias negativas del numero 2 RESULTADOS CALCULADOS CON VARIABLES REAL*4 mantisa = 23 precision = 1.1920929E-07 1.1920929E-07 RESULTADOS CALCULADOS CON VARIABLES REAL*8 mantisa = 52 precision = 2.2204460492503131E-16 2.2204460492503131E-16 Problema 4.4 Apartado a) La gura 4.4.1 muestra el diagrama de las operaciones que deben realizarse para calcular el per metro de la elipse. As mismo, tambien se han numerado los resultados parciales y se han incluido los coe cientes que afectan a cada operacion. El error en cada una de las operaciones es R1 = ra + ra + r1 = 2ra + r1 R2 = rb + rb + r2 = 2rb + r2 R3 = a2 a2 + b2 R1 + b2 a2 + b2 R2 + r3 R4 = R3 ; ~r2 + r4 R5 = 1 2R3 + r5 R6 = ~r2 + r + r6 R7 = R5 + R6 + r7 © Los autores, 1998; © Edicions UPC, 1998.
  • 241. 10 Resolucion de los problemas propuestos 227 Fig. 4.4.1 Propagacion del error en el calculo del per metro de la elipse donde r1, r2, r3, r4, r5, r6 y r7 representan el error de almacenamiento de cada una de las operaciones intermedias. En el resultado anterior hay que comentar dos resultados. Por una parte, el error de almacenamiento del numero 2, ~r2, es nulo, puesto que se trata de un numero entero. Por otra, el coe ciente de propagacion del error debido a la ra z cuadrada, f(x) = px, queda determinado por la expresion 4.15 del subapartado 4.5.6 rpx = x f0(x) f(x) rx = x 1=(2 px)px rx = 1 2rx Si los errores inherentes se designan por ri y los errores de almacenamiento por ra, la expresion © Los autores, 1998; © Edicions UPC, 1998.
  • 242. 228 Metodos numericos del error relativo en P es R7 = 1 2 h a2 a2 + b2 (2ra + r1) + b2 a2 + b2 (2rb + r2) + r3 i + r + 1 2r4 + r5 + r6 + r7 = 1 2 h a2 a2 + b2 (2(ri a + ra a) + r1) + b2 a2 + b2 (2(ri b + ra b) + r2) + r3 i + r + 1 2r4 + r5 + r6 + r7 Apartado b) La cota del error del resultado nal es jR7j 1 2 h a2 a2 + b2 (2(jri aj+ jra aj) + jr1j) + b2 a2 + b2 (2(jri bj+ jra bj) + jr2j) + jr3j i + jr j + 1 2jr4j + jr5j + jr6j + jr7j Apartado c) Puesto que el operario realiza las operaciones en base diez, coma otante, utilizando tres d gitos para la mantisa (sin incluir el signo) y redondeando por aproximacion, todos los errores relativos de almacenamiento son menores en valor absoluto que r = 1 2 101;3 = 0:005 Ademas, la cota del error inherente de los semiejes a y b es jri aj jri bj ri = 0:025 Por consiguiente, la cota del error total cometido por el operario es jR7j 1 2 a2 a2 + b2 (2ri + 3r) + b2 a2 + b2 (2ri + 3r) + r + 1 2r + 4r = ri + 13 2 r = 5:75 10;2 Por lo tanto, el operario puede cometer un error superior a los l mites de dise~no y no puede asegurar el calculo correcto del per metro. Sin embargo, la expresion anterior permite deducir la precision que debe tener la cinta metrica para poder calcular el per metro de la elipse con un error relativo inferior a rp = 5 10;2. En efecto, debe veri carse que ri + 13 2 r rp o equivalentemente ri rp ; 13 2 r = 1:75 10;2 © Los autores, 1998; © Edicions UPC, 1998.
  • 243. 10 Resolucion de los problemas propuestos 229 Problema 4.5 Apartado a) La gura 4.5.1 muestra los diagramas de propagacion del error correspondientes a las tres alternativas. Fig. 4.5.1 Propagacion del error en el calculo del radio de la esfera © Los autores, 1998; © Edicions UPC, 1998.
  • 244. 230 Metodos numericos En las siguientes expresiones los super ndices i y a indicaran error inherente y error de almacenamiento respectivamente. La expresion del error nal mediante la primera alternativa es R1 = rD ; ra 2 + r1 = (ri D + ra D) ; ra 2 + r1 donde ra 2 es nulo por tratarse del error de almacenamiento de un numero entero. El error de la segunda alternativa es ~R1 = ra 4 + r + ~r1 ~R2 = rS ; ~R1 + ~r2 ~R3 = 1 2 ~R2 + ~r3 = 1 2 (ri S + ra S) ; r ; ~r1 + ~r2 + ~r3 donde ra 4 es nulo por tratarse del error de almacenamiento de un numero entero y el calculo del coe ciente de propagacion del error debido a la ra z cuadrada se ha realizado como en el problema 4.4. Por ultimo, el error de la tercera alternativa es ^R1 = ra 3 + rV + ^r1 ^R2 = ra 4 + r + ^r2 ^R3 = ^R1 ; ^R2 + ^r3 ^R4 = 1 3 ^R3 + ^r4 = 1 3 (ri V + ra V ) + ^r1 ; r ; ^r2 + ^r3 + ^r4 Como en los casos anteriores, ra 3 y ra 4 son nulos por tratarse del error de almacenamiento de un numero entero. As mismo, el calculo del coe ciente de propagacion del error debido a la ra z tercera se ha realizado, como en el problema 4.4, a partir de la ecuacion 4.15. Apartado b) A partir de las expresiones anteriores, la cota del error para cada una de las alternativas es R1 = (jri Dj + jra Dj) + jr1j ~R3 = 1 2 (jri Sj + jra Sj) + jr j + j~r1j + j~r2j + j~r3j ^R4 = 1 3 (jri V j + jra V j) + j^r1j + jr j + j^r2j + j^r3j + j^r4j © Los autores, 1998; © Edicions UPC, 1998.
  • 245. 10 Resolucion de los problemas propuestos 231 Apartado c) Los errores inherentes de las medidas veri can jri Dj jri Sj jri V j 9 = ri = 10;3 Ademas, todos los errores de almacenamiento en valor absoluto son menores que r = 1 221;23 = 1:192 10;7 puesto que se trabaja mediante variables REAL*4. Por consiguiente, se cumple jR1j ri + 2r = 1:00024 10;3 j~R3j 1 2ri + 3r = 5:0036 10;4 j^R4j 1 3(ri + 8r) = 3:3365 10;4 Por lo que el ingeniero solo puede utilizar la tercera alternativa para calcular el radio A con la precision requerida. Problema 4.6 Sean x e y las distancias desde los anclajes hasta la interseccion de la pila y el tablero. Entonces, la longitud del cable se puede calcular como (teorema de Pitagoras) L = p x2 + y2 Haciendo un estudio de la propagacion del error analogo al realizado en el problema 4.4, se puede obtener la expresion del error relativo en la longitud de los cables siguiente: rL = 1 2 x2 x2 + y2 (2rx + r1) + y2 x2 + y2 (2ry + r2) + r3 + r4 donde r1, r2, r3 y r4 son los errores de almacenamiento producidos con cada una de las opera- ciones, y rx, ry son los errores en x e y respectivamente (que incluiran error inherente y error de almacenamiento en el caso mas general). La cota del error es jrLj = 1 2 x2 x2 + y2 (2jrxj+ jr1j) + y2 x2 + y2 (2jryj+ jr2j) + jr3j + jr4j © Los autores, 1998; © Edicions UPC, 1998.
  • 246. 232 Metodos numericos Si se trabaja con in nitas cifras signi cativas correctas, solo intervienen en la propagacion del error los errores inherentes en los datos x e y (r1 = ::: = r4 = 0). Suponiendo que la cota del error inherente es la misma en ambos casos rx ry ri la cota del error se reescribe como jrLj 1 2 x2 x2 + y2 2ri + y2 x2 + y2 2ri = ri Un error absoluto de 0:25 m en L representa un error relativo de 0:25=100 = 2:5 10;3. Por lo tanto, para asegurar la precision deseada es necesario que la cota del error inherente veri que ri 2:5 10;3 Es necesario tomar las medidas con la misma precision que se desea en el resultado (0.25 % en este caso). Si la posicion de los anclajes se conoce exactamente, pues son numeros enteros, el error en los datos (rx y ry) es nulo, puesto que no hay error inherente y no se produce ningun error al almacenar un entero. As mismo, x2, y2 y x2 +y2 son numeros enteros, y pueden calcularse sin error de redondeo. El unico error de redondeo se comete al calcular px2 + y2. Si el ingeniero trabaja en base 10 y con dos d gitos de precision (es decir, con dos cifras signi cativas correctas), la cota del error relativo de redondeo por aproximacion es r = 1 210;2 = 5 10;3 En estas condiciones la cota del error (debido exclusivamente al error de almacenamiento del resultado de la ultima operacion {la ra z cuadrada{) es jrLj r = 5 10;3 2:5 10;3 y, por lo tanto, es posible que los calculos del ingeniero no tengan la precision necesaria y que los cables pedidos no sirvan. © Los autores, 1998; © Edicions UPC, 1998.
  • 247. 10 Resolucion de los problemas propuestos 233 10.4 Problemas del cap tulo 5 Problema 5.1 Apartado a) Los ceros de la funcion f( ) son cuatro: 1 = 0, 2 = =2, 3 = y 4 = 3 =2, y corresponden a impactos de la bola P en las intersecciones de los ejes coordenados con la circunferencia. Conviene notar que la ra z 3 = , a pesar de ser solucion del problema numerico, carece de sentido f sico, ya que para este valor del angulo la bola P chocar a con la bola Q antes de impactar con la banda de la mesa. Apartado b) Las ra ces 2 = =2, 3 = y 4 = 3 =2 se capturan tomando, por ejemplo, los intervalos iniciales 1:3 1:7], 3:0 3:3] y 4:5 4:9] respectivamente. Se puede comprobar facilmente que se produce un cambio de signo de f en cada uno de los mencionados intervalos, condicion su ciente para iniciar el metodo de la biseccion. En la tabla 5.1.1 se muestran los resultados obtenidos para el primero de los casos citados. Al intentar capturar la solucion 1 = 0 el programa genera un error de ejecucion en la fase de control de convergencia, puesto que la evaluacion de la condicion 5.8 conduce a una division por 0 en el calculo de rk (ecuacion 5.7). Para que el programa consiga capturar cualquiera de las ra ces i, sin excepcion, es su ciente con adoptar la condicion 5.9 en lugar de la 5.8. A nivel de programacion, esto se lleva a cabo sustituyendo la l nea correspondiente al calculo de la variable REL X por abs_x = x - pmedio y modi cando la condicion de control de convergencia if ((abs(fx).lt.tol_f) .and. (abs(rel_x).lt.tol_x)) por la siguiente if ((abs(fx).lt.tol_f) .and. . (abs(abs_x) .lt. (tol_x * abs(pmedio) + tol_e))) donde TOL E es la tolerancia E que aparece en la ecuacion 5.9 y debe ser introducida por el usuario junto con los demas datos. Como comentario nal cabe comentar que, para este problema en particular y utilizando la © Los autores, 1998; © Edicions UPC, 1998.
  • 248. 234 Metodos numericos version original del programa 5.1, no es posible capturar la ra z 1 = 0, pero s la ra z = 2 , que es f sicamente equivalente esto se consigue inicializando el metodo de la biseccion con el intervalo 6:0 6:4], por ejemplo. Tabla 5.1.1 Resultados del problema del billar circular metodo de la biseccion con x0 = 1:3, a = 1:7 Iteracion Extremo a Aproximacion x f(x) Error relativo en x ========= ========== ============== ========== =================== 0 1.3000000 1.7000000 -5.848D-02 1.333D-01 1 1.7000000 1.5000000 3.211D-02 -6.250D-02 2 1.5000000 1.6000000 -1.326D-02 3.226D-02 3 1.6000000 1.5500000 9.440D-03 -1.587D-02 4 1.5500000 1.5750000 -1.908D-03 8.000D-03 5 1.5750000 1.5625000 3.766D-03 -3.984D-03 6 1.5750000 1.5687500 9.290D-04 -1.988D-03 7 1.5687500 1.5718750 -4.897D-04 9.950D-04 8 1.5718750 1.5703125 2.196D-04 -4.973D-04 9 1.5703125 1.5710938 -1.350D-04 2.487D-04 10 1.5710938 1.5707031 4.231D-05 -1.243D-04 11 1.5707031 1.5708984 -4.635D-05 6.217D-05 12 1.5707031 1.5708008 -2.022D-06 3.109D-05 13 1.5708008 1.5707520 2.014D-05 -1.554D-05 14 1.5708008 1.5707764 9.061D-06 -7.771D-06 15 1.5708008 1.5707886 3.519D-06 -3.886D-06 16 1.5708008 1.5707947 7.486D-07 -1.943D-06 17 1.5707947 1.5707977 -6.368D-07 9.714D-07 18 1.5707977 1.5707962 5.592D-08 -4.857D-07 19 1.5707962 1.5707970 -2.904D-07 2.429D-07 20 1.5707962 1.5707966 -1.173D-07 1.214D-07 21 1.5707962 1.5707964 -3.067D-08 6.071D-08 22 1.5707964 1.5707963 1.263D-08 -3.036D-08 23 1.5707963 1.5707963 -9.020D-09 1.518D-08 24 1.5707963 1.5707963 1.803D-09 -7.589D-09 25 1.5707963 1.5707963 -3.608D-09 3.795D-09 Convergencia en la iteracion 25 Solucion para theta= 1.5707963 © Los autores, 1998; © Edicions UPC, 1998.
  • 249. 10 Resolucion de los problemas propuestos 235 Problema 5.2 Apartado a) Efectivamente, el metodo de la biseccion inicializado con a = 2, x0 = 0 converge sin pro- blemas. Los resultados obtenidos empleando el programa 5.1 con tolx = 0:5 10;8 TOLf = 0:5 10;8 se muestran en la tabla 5.2.1. Tabla 5.2.1 Resultados del calculo de p 2 por el metodo de la biseccion con a = 2, x0 = 0 Iteracion Extremo a Aproximacion x f(x) Error relativo en x ========= ========== ============== ========== =================== 0 2.0000000 0.0000000 -2.000D+00 -1.000D+00 1 2.0000000 1.0000000 -1.000D+00 -3.333D-01 2 1.0000000 1.5000000 2.500D-01 2.000D-01 3 1.5000000 1.2500000 -4.375D-01 -9.091D-02 4 1.5000000 1.3750000 -1.094D-01 -4.348D-02 5 1.3750000 1.4375000 6.641D-02 2.222D-02 6 1.4375000 1.4062500 -2.246D-02 -1.099D-02 . . . . . . . . . . . . . . . 27 1.4142136 1.4142136 -2.631D-08 -5.268D-09 28 1.4142136 1.4142136 -5.237D-09 -2.634D-09 29 1.4142136 1.4142136 5.300D-09 1.317D-09 30 1.4142136 1.4142136 3.154D-11 6.585D-10 Convergencia en la iteracion 30 La raiz cuadrada de 2.0000000 es 1.4142136 Apartado b) En la expresiondel metodo de Newton (ecuacion 5.14) puede verse que, para obtener la nueva aproximacion a la solucion xk+1, es necesario dividir por la derivada de la funcion evaluada en la aproximacion anterior, f0(xk). En este caso, dicha derivada tiene la expresion f0(xk) = 2 xk. Esto quiere decir que, para k = 0, se obtendra f0(x0) = 2 x0 = 0. El programa produce un error de ejecucion cuando, al intentar calcular x1, se realiza una division por 0. Gra camente, la interpretacion de este fenomeno es muy sencilla. Para obtener x1, se debe trazar la recta tangente a la curva y = f(x) = x2 ; 2 por el punto (x0 f(x0)) y obtener su interseccion con el eje de abscisas. Como x0 = 0, dicha recta tangente tiene pendiente © Los autores, 1998; © Edicions UPC, 1998.
  • 250. 236 Metodos numericos f0(x0) = 0, es decir, es una recta horizontal. Al no cortar esta recta al eje de las x es imposible obtener la nueva aproximacion x1. Este comportamiento ilustra que, si bien el metodo de Newton, en general, es mas rapido que el metodo de la biseccion, a veces es tambien menos robusto. Problema 5.3 Apartado a) El programa 5.3.1 permite hallar las ra ces del problema del billar circular mediante el metodo de Newton. Este programa se ha obtenido por modi cacion del programa 5.2 (metodo de la biseccion para el problema del billar circular {vease el cap tulo 5{). Las unicas diferencias (re ejadas en el listado) entre estos dos programas son: 1) la entrada de datos (para el metodo de Newton solo es necesaria una aproximacion inicial), 2) el bloque donde se obtiene la nueva aproximacion a la solucion a partir de la aproximacion calculada en la iteracion anterior, y 3) las funciones externas de evaluacion de la funcion f y de su derivada f0. c c Metodo de Newton para el problema del billar circular c___________________________________________________________________ c___Aproximacion inicial x0 write (6,200) read (5,*) x_actual 200 format (1x,'Aproximacion inicial') . . . c___Nueva aproximacion fx = funcion(x_actual,r,xp,yp,xq,yq) dx = derivada(x_actual,r,xp,yp,xq,yq) x_nuevo = x_actual - (fx/dx) . . . c__________________Function funcion(x) real*8 function funcion(x,r,xp,yp,xq,yq) implicit real*8 (a-h,o-z) sx=dsin(x) cx=dcos(x) distp=dsqrt( (r*cx - xp)*(r*cx - xp) + . (r*sx - yp)*(r*sx - yp) ) © Los autores, 1998; © Edicions UPC, 1998.
  • 251. 10 Resolucion de los problemas propuestos 237 distq=dsqrt( (r*cx - xq)*(r*cx - xq) + . (r*sx - yq)*(r*sx - yq) ) funcion = (xp*sx - yp*cx)/distp + (xq*sx - yq*cx)/distq return end c__________________Function derivada(x) real*8 function derivada(x,r,xp,yp,xq,yq) implicit real*8 (a-h,o-z) sx=dsin(x) cx=dcos(x) dpx=(r*cx - xp)*(r*cx - xp) dpy=(r*sx - yp)*(r*sx - yp) dp =dpx+dpy distp=dsqrt(dp) sump=( (xp*cx + yp*sx) * distp - . (xp*sx - yp*cx) * . 2.d0*r*((r*sx-yp)*cx - (r*cx-xp)*sx) / . (2*distp) . ) / dp dqx=(r*cx - xq)*(r*cx - xq) dqy=(r*sx - yq)*(r*sx - yq) dq=dqx+dqy distq=dsqrt(dq) sumq=( (xq*cx + yq*sx) * distq - . (xq*sx - yq*cx) * . 2.d0*r*((r*sx-yq)*cx - (r*cx-xq)*sx) / . (2*distq) . ) / dq derivada = sump + sumq return end Prog. 5.3.1 Metodo de Newton para el problema del billar circular © Los autores, 1998; © Edicions UPC, 1998.
  • 252. 238 Metodos numericos Apartado b) A modo de ejemplo, se muestran los resultados obtenidos al inicializar el metodo de Newton con x0 = 1:3 (vease la tabla 5.3.1). Para este valor de la aproximacion inicial se converge a la ra z 2 = =2. Los valores de las tolerancias son los mismos que para los ejemplos anteriores (tolx = 0:5 10;8 TOLf = 0:5 10;8). Tabla 5.3.1 Resultados del problema del billar circular metodo de Newton con x0 = 1:3 Iteracion Aproximacion x f(x) Error relativo en x ========= ============== ========== =================== 0 1.3000000 1.213D-01 1.765D-01 1 1.5786010 -3.543D-03 -4.969D-03 2 1.5707962 7.773D-08 1.090D-07 3 1.5707963 -1.110D-16 -1.414D-16 Convergencia en la iteracion 3 El valor del angulo theta es 1.5707963 Problema 5.4 Apartado a) El programa 5.4.1 permite hallar las ra ces del problema del billar circular mediante el metodo de la secante. Este programa se ha obtenido por modi cacion del programa 5.3.1 (metodo de Newton para el problema del billar circular). Las unicas diferencias (re ejadas en el listado) entre estos dos programas son: 1) la entrada de datos (ahora son necesarias dos aproximaciones iniciales), 2) el bloque donde se obtiene la nueva aproximacion a la solucion a partir de la aproximacioncalculada en la iteracion anterior, y 3) las funciones externas FUNCTION (para el metodo de Newton es necesario realizar dos evaluaciones funcionales por iteracion, una de f y otra de f0, mientras que para el metodo de la secante es su ciente con evaluar f). Por lo que respecta al punto 3, solo es necesario eliminar del programa 5.3.1 la funcion externa DERIVADA(X). Apartado b) A modo de ejemplo, se muestran los resultados obtenidos al inicializar el metodo de la secante con x0 = 1:3 y x1 = 1:58 (vease la tabla 5.4.1). Se ha escogido para x1 la segunda aproximacion calculada por el metodo de Newton (ver resolucion del problema 5.3). De nuevo, se obtiene sin problemas la ra z 2 = =2. Los valores de las tolerancias son los mismos que para los ejemplos anteriores (tolx = 0:5 10;8 TOLf = 0:5 10;8). © Los autores, 1998; © Edicions UPC, 1998.
  • 253. 10 Resolucion de los problemas propuestos 239 c c Metodo de la secante para el problema del billar circular c___________________________________________________________________ c___Aproximaciones iniciales write (6,200) read (5,*) x_actual 200 format (1x,'Aproximacion inicial x0') write (6,300) read (5,*) x_nuevo 300 format (1x,'Aproximacion inicial x1') . . . c___Nueva aproximacion f_nuevo = f(x_nuevo,r,xp,yp,xq,yq) pendiente = (f_nuevo-f_actual)/(x_nuevo-x_actual) x_actual = x_nuevo x_nuevo = x_actual - (f_nuevo/pendiente) Prog. 5.4.1 Metodo de la secante para el problema del billar circular Tabla 5.4.1 Resultados del problema del billar circular metodo de la secante con x0 = 1:3 x1 = 1:58 Iteracion Aproximacion x f(x) Error relativo en x ========= ============== ========== =================== 0 1.3000000 1.213D-01 1.772D-01 1 1.5800000 -4.178D-03 -5.937D-03 2 1.5706746 5.524D-05 7.747D-05 3 1.5707963 -8.315D-10 -1.166D-09 Convergencia en la iteracion 3 El valor del angulo theta es 1.5707963 Para evitar un error de ejecucion al intentar capturar la ra z 1 = 0, es su ciente con introducir en el programa un criterio de convergencia en errores absolutos (vease la resolucion del problema 5.2). © Los autores, 1998; © Edicions UPC, 1998.
  • 254. 240 Metodos numericos Problema 5.5 En la gura 5.5.1 se muestran las curvas de convergencia (numero de iteracion versus error relativo en escala logar tmica) correspondientes a los resultados de las tablas 5.1.1, 5.3.1 y 5.4.1 (ra z capturada: 2 = =2). Como se puede observar, el metodo de la biseccion es el que presenta un decrecimiento mas lento del error, precisando 25 iteraciones para llegar a convergencia. El metodo de Newton es el mas rapido para este metodo, el error relativo decrece mucho en muy pocas iteraciones (el criterio de convergenciase veri ca ya en la tercera iteracion). El metodo de la secante presenta un comportamiento intermedio entre los dos anteriores. 1,E-18 1,E-15 1,E-12 1,E-09 1,E-06 1,E-03 1,E+00 0 5 10 15 20 25 30 Iteración Errorrelativo Bisección Secante Newton Fig. 5.5.1 Comparacion de los tres metodos para el problema del billar circular Problema 5.6 Los programas 5.1, 5.3 y 5.4 del apartado 5.7 utilizan respectivamente los metodos de la biseccion, de Newton y de la secante. A partir de ellos puede confeccionarse el programa pedido en el enunciado. La funcion f(x) = x2 ;2x+1 = (x;1)2 tiene una unica ra z x = 1. Esta ra z es doble y, por lo tanto, se veri ca f(x ) = 0 y f0(x ) = 0. La funcion toma unicamente valores positivos (ver gura 5.6.1) y, en consecuencia, es imposible el calculo de la ra z mediante el metodo de biseccion. © Los autores, 1998; © Edicions UPC, 1998.
  • 255. 10 Resolucion de los problemas propuestos 241 0 0,25 0,5 0,75 1 0 0,5 1 1,5 2 x f(x)=(x-1)^2 Fig. 5.6.1 Funcion f(x) = (x ;1)2 Trabajando con aproximacion inicial x0 = 2 y tolx = 0:5 10;8 TOLf = 0:5 10;8, se obtienen los resultados de las tablas 5.6.1 (metodo de Newton) y 5.6.2 (metodo de la secante). Para el metodo de la secante, se toma como aproximacion x1 la obtenida con el metodo de Newton. Tabla 5.6.1 Calculo de la ra z de f(x) = (x ;1)2 mediante el metodo de Newton Iteracion Aproximacion x funcion(x) Error relativo en x ========= ============== ========== =================== 0 2.0000000 1.000D+00 3.333D-01 1 1.5000000 2.500D-01 2.000D-01 2 1.2500000 6.250D-02 1.111D-01 3 1.1250000 1.563D-02 5.882D-02 . . 25 1.0000000 8.882D-16 1.490D-08 26 1.0000000 2.220D-16 7.451D-09 27 1.0000000 0.000D+00 0.000D+00 Convergencia en la iteracion 27 La raiz es 1.0000000 © Los autores, 1998; © Edicions UPC, 1998.
  • 256. 242 Metodos numericos Tabla 5.6.2 Calculo de la ra z de f(x) = (x ;1)2 mediante el metodo de la secante Iteracion Aproximacion x funcion(x) Error relativo en x ========= ============== ========== =================== 0 2.0000000 1.000D+00 3.333D-01 1 1.5000000 2.500D-01 1.250D-01 2 1.3333333 1.111D-01 1.111D-01 3 1.2000000 4.000D-02 6.667D-02 . . 35 1.0000000 1.776D-15 1.678D-08 36 1.0000000 6.661D-16 1.007D-08 37 1.0000000 2.220D-16 5.034D-09 38 1.0000000 0.000D+00 0.000D+00 Convergencia en la iteracion 38 La raiz es 1.0000000 La gura 5.6.2 muestra el error relativo (en escala logar tmica) en funcion del numero de iteraciones. 1,E-09 1,E-08 1,E-07 1,E-06 1,E-05 1,E-04 1,E-03 1,E-02 1,E-01 1,E+00 0 10 20 30 40 error Secante Newton iteración Fig. 5.6.2 Comparacion de dos metodos para el calculo de la ra z de f(x) = (x;1)2 © Los autores, 1998; © Edicions UPC, 1998.
  • 257. 10 Resolucion de los problemas propuestos 243 Los metodos de Newton y de la secante presentan t picamente una convergencia rapida (vease la gura 5.5.1 del problema anterior, por ejemplo). Para este problema, sin embargo, la convergencia es mas lenta de lo habitual (tablas 5.6.1 y 5.6.2, gura 5.6.2). La razon es que f(x) = (x ; 1)2 tiene una ra z doble. Con las sucesivas iteraciones se consigue una sucesion de valores xk cada vez mas cercanos a la ra z x . Al tratarse de una ra z doble, los valores de la derivada f0(xk) cada vez son mas cercanos a f0(x ) = 0 y, en consecuencia, al aplicar la de nicion del metodo de Newton, se divide por numeros muy cercanos a 0. Esto provoca que el metodo pierda su rapidez. En el caso del metodo de la secante ocurre algo similar. No existe el calculo de la derivada, pero s se calcula una aproximacion de esta que tambien se acercara a cero con cada iteracion. © Los autores, 1998; © Edicions UPC, 1998.
  • 258. 244 Metodos numericos 10.5 Problemas del cap tulo 6 Problema 6.1 Apartado a) La fase de eliminacion del algoritmo de Gauss sin pivotamiento se escribe (ecuacion 6.18) como a(k) ij = a(k;1) ij ;mika(k;1) kj = a(k;1) ij ; a(k;1) ik a(k;1) kk a(k;1) kj b(k) i = b(k;1) i ;mikb(k;1) k = b(k;1) i ; a(k;1) ik a(k;1) kk b(k;1) k 8 : k = 1 ::: n ;1 i = k + 1 ::: n j = k + 1 ::: n En cada paso (para cada valor de k) se pasa de una matriz A(k;1) a una matriz A(k), anulando los elementos de la columna k-esima por debajo de la diagonal. Al hacerlo, solo se modi can los coe cientes de la submatriz llena de orden n;k ( las y columnas k+1 hasta n), que queda (vease la ecuacion 6.15) 0 B@ a(k) k+1 k+1 a(k) k+1 n ... ... ... a(k) n k+1 a(k) nn 1 CA Sea A A(0) una matriz simetrica. Para aprovechar la simetr a en el algoritmo de Gauss, basta tener en cuenta que estas submatrices llenas se mantienen simetricas durante toda la fase de eliminacion. Por ejemplo, para k = 1, la submatriz de orden n;1 0 B@ a(1) 22 a(1) 2n ... ... ... a(1) n2 a(1) nn 1 CA se calcula como (ecuacion 6.12) a(1) ij = a(0) ij ;mi1a(0) 1j = a(0) ij ; a(0) i1 a(0) 11 a(0) 1j ( i = 2 ::: n j = 2 ::: n A partir de la simetr a de A (a(0) ij = a(0) ji ), puede deducirse directamente que a(1) ij = a(1) ji . En efecto, a(1) ji = a(0) ji ; a(0) j1 a(0) 11 a(0) 1i = a(0) ij ; a(0) 1j a(0) 11 a(0) i1 = a(1) ij ( i = 2 ::: n j = 2 ::: n La demostracion se completa por induccion. A partir de a(k;1) ij = a(k;1) ji , se comprueba facilmente que a(k) ij = a(k) ji . © Los autores, 1998; © Edicions UPC, 1998.
  • 259. 10 Resolucion de los problemas propuestos 245 Puesto que las submatrices llenas son simetricas, basta trabajar con los elementos de la submatriz triangular superior (i j). Esto se consigue reescribiendo el algoritmo de Gauss (fase de eliminacion) como a(k) ij = a(k;1) ij ;mika(k;1) kj = a(k;1) ij ; a(k;1) ki a(k;1) kk a(k;1) kj b(k) i = b(k;1) i ;mikb(k;1) k = b(k;1) i ; a(k;1) ki a(k;1) kk b(k;1) k 8 : k = 1 ::: n ;1 i = k + 1 ::: n j = i ::: n Respecto del algoritmo original (matrices no necesariamente simetricas), se han introducido unicamente dos modi caciones: 1) en el calculo de mik se emplea el elemento a(k;1) ki del triangulo superior en lugar del elemento a(k;1) ik (del mismo valor, dada la simetr a) del triangulo inferior 2) el ndice de columna j va desde i (y no desde k + 1) hasta n. Con estos dos cambios se utilizan solamente coe cientes de la matriz triangular superior. Apartado b) Al pasar de A(k;1) a A(k) con el algoritmo propuesto en el apartado anterior es necesario calcular (n ;k + 1)(n ; k)=2 elementos a(k) ij y n ;k componentes b(k) i . Para ello es necesario realizar las siguientes operaciones: 8 : (n;k)(n ;k + 3)=2 sumas (n;k)(n ;k + 3)=2 productos n;k divisiones Sumando para los n;1 pasos (k = 1 ::: n;1), se obtiene un total de 8 : n;1X k=1 (n ;k)(n;k + 3) 2 = n3 + 3n2 ;4n 6 sumas n;1X k=1 (n ;k)(n;k + 3) 2 = n3 + 3n2 ;4n 6 productos n;1X k=1 n ;k = n(n;1) 2 divisiones para la fase de eliminacion. Si se a~naden las operaciones de la fase de sustitucion hacia atras (vease el subapartado 6.2.2), se obtiene que el numero de operaciones necesarias para resolver un sistema lineal con matriz A simetrica (mediante el algoritmo de Gauss adaptado desarro- llado el el apartado a) es TGSim = 2n3+15n2;11n 6 . Tal y como era de esperar, este numero es aproximadamente la mitad del correspondiente al metodo de Gauss estandar, TG = 4n3+9n2;7n 6 . En efecto, en el caso general se hacen del orden de 2n3 3 operaciones, y en el caso simetrico del orden de n3 3 . © Los autores, 1998; © Edicions UPC, 1998.
  • 260. 246 Metodos numericos La simetr a de la matriz puede aprovecharse tambien a efectos de almacenamiento, em- pleando el esquema propuesto en el subapartado 7.4.3. La idea basica es guardar solamente los coe cientes del triangulo superior. De esta forma, los requisitos de memoria para el caso simetrico son tambien aproximadamente la mitad que para el caso general. En resumen, el coste computacional del metodo de Gauss sin pivotamiento para matrices simetricas es aproximadamente la mitad que para matrices no simetricas, tanto en numero de operaciones como en espacio de memoria. Apartado c) El algoritmo desarrollado en el apartado a no puede emplearse si es necesario pivotar. El pivotamiento (es decir, la permutacion de las) rompe la simetr a de las submatrices llenas de orden n ;k. Es necesario entonces emplear el algoritmo de Gauss con pivotamiento estandar, y almacenar la matriz A como matriz llena. Problema 6.2 Apartado a) El vector auxiliar y se calcula resolviendo el sistema triangular inferior Ly = b mediante una sustitucion hacia adelante (ecuacion 6.9): y1 = b1 = l11 yi = 0 @bi ; i;1X j=1 lijyj 1 A = lii i = 2 ::: n Notese que la componente bi (para i = 1 ::: n) solo es necesaria para calcular la incognita yi. En consecuencia, una vez calculada yi puede sobreescribirse encima de bi (es decir, yi puede almacenarse en la posicion de memoria que ocupaba bi). Pueden hacerse las mismas consideraciones para el sistema triangular superior Ux = y que permite obtener la solucion x del sistema Ax = b. En la sustitucion hacia atras (ecuacion 6.7), xn = yn xi = yi ; nX j=i+1 uijyj i = n;1 n;2 ::: 1 puede sobrescribirse xi encima de yi. En conclusion, basta con reservar espacio de memoria para un unico vector, que contiene los terminos independientes b al principio, el vector auxiliar y luego y las incognitas x al nal. Desde luego, esta estrategia de ahorro de memoria solo es valida en el caso (muy habitual) en que no sea necesario disponer del vector ben la memoria una vez resuelto el sistema lineal. Si se quisiera conservar b, habr a que trabajar con dos vectores (uno para b, y otro para y y x). © Los autores, 1998; © Edicions UPC, 1998.
  • 261. 10 Resolucion de los problemas propuestos 247 Apartado b) Se ha visto que las matrices L y U pueden guardarse encima de A ( gura 6.2) y que los vectores y y x pueden guardarse encima de b. Esto permite escribir la fase de descomposicion del algoritmo de Crout como k = 1 ::: n;1 8 : a1 k+1 = a1 k+1 = a11 ai k+1 = 0 @ai k+1 ; i;1X j=1 aij aj k+1 1 A = aii i = 2 ::: k ak+1 i = ak+1 i ; i;1X j=1 aji ak+1 j i = 2 ::: k ak+1 k+1 = ak+1 k+1 ; kX i=1 ak+1 i ai k+1 Estas ecuaciones se obtienen partiendo de la ecuacion 6.38 y 1) suprimiendo las asignaciones l11 = a11 y lk+1 1 = ak+1 1 (innecesarias, puesto que L se escribe encima de A), 2) suprimiendo las asignaciones uii = 1 (los unos de la diagonal de U no se almacenan) y 3) reemplazando lij y uij por aij en las expresiones restantes. En cuanto a la fase de sustituciones, se obtiene b1 = b1 = a11 bi = 0 @bi ; i;1X j=1 aijbj 1 A = aii i = 2 ::: n bi = bi ; nX j=i+1 aijbj i = n ;1 n;2 ::: 1 Estas ecuaciones se obtienen partiendo de las vistas en el apartado a y 1) reemplazando lij y uij por aij, 2) reemplazando xi e yi por bi, y 3) suprimiendo la asignacion (innecesaria) xn = yn. © Los autores, 1998; © Edicions UPC, 1998.
  • 262. 248 Metodos numericos Problema 6.3 Apartado a) Siguiendo el procedimiento visto para el metodo de Crout (ecuacion 6.35), la descomposicion del menor Ak+1] puede escribirse como Ak+1] = Lk+1] Dk+1] Uk+1] Ak] ck+1] fT k+1] ak+1 k+1 = Lk] 00000000000000 lT k+1] 1 Dk] 00000000000000 00000000000000T dk+1 k+1 Uk] uk+1] 00000000000000T 1 A partir de esta expresion, se obtienen las siguientes ecuaciones para calcular los vectores lk+1] y uk+1] y el escalar dk+1 k+1: Lk] Dk] uk+1] = ck+1] UT k] Dk] lk+1] = fk+1] dk+1 k+1 = ak+1 k+1 ;lT k+1]Dk]uk+1] Para calcular el vector uk+1], hay que resolver primero un sistema triangular inferior Lk]vk+1] = ck+1] (donde vk+1] es un vector auxiliar) y luego un sistema diagonal Dk]uk+1] = vk+1]. Notese, sin embargo, que no es necesario reservar espacio de memoria para el vector auxiliar vk+1], porque puede aprovecharse el espacio destinado para el vector uk+1]. Pueden hacerse conside- raciones muy similares respecto del calculo del vector lk+1]. As pues, la descomposicion LDU puede calcularse como con las siguientes ecuaciones (analogas a las ecuaciones 6.38 vistas para la descomposicion LU): l11 = 1 d11 = a11 u11 = 1 k = 1 ::: n;1 8 : u1 k+1 = a1 k+1 ui k+1 = ai k+1 ; i;1X j=1 lij uj k+1 i = 2 ::: k ui k+1 = ui k+1 = dii i = 1 ::: k lk+1 1 = ak+1 1 lk+1 i = ak+1 i ; i;1X j=1 uji lk+1 j i = 2 ::: k li k+1 = li k+1 = dii i = 1 ::: k lk+1 k+1 = 1 uk+1 k+1 = 1 dk+1 k+1 = ak+1 k+1 ; kX i=1 lk+1 i dii ui k+1 © Los autores, 1998; © Edicions UPC, 1998.
  • 263. 10 Resolucion de los problemas propuestos 249 Existen implementaciones mas e cientes de este algoritmo. Golub y Van Loan (veanse las referencias del apartado 7.5), por ejemplo, proponen una version basada en recorrer las matrices triangulares por columnas (y no por las) al realizar las sustituciones hacia adelante, tal y como se comenta en el subapartado 7.2.2. Al igual que el metodo de Crout (vease problema 6.2), este metodo puede implementarse reservando espacio para una unica matriz, que contiene la matriz A al principio y los factores L, U (sin la diagonal, por ser unitaria) y D despues de la descomposicion. Apartado b) El proceso es el mismo que en el apartado anterior. La descomposicion del menor Ak+1] es Ak+1] = Lk+1] Dk+1] LT k+1] Ak] fk+1] fT k+1] ak+1 k+1 = Lk] 00000000000000 lT k+1] 1 Dk] 00000000000000 00000000000000T dk+1 k+1 LT k] lk+1] 00000000000000T 1 que lleva a las siguientes ecuaciones para el calculo del vector lk+1] y del escalar dk+1 k+1: Lk] Dk] lk+1] = fk+1] dk+1 k+1 = ak+1 k+1 ;lT k+1]Dk]lk+1] Detallando las operaciones necesarias, se obtiene el siguiente algoritmo: l11 = 1 d11 = a11 k = 1 ::: n;1 8 : lk+1 1 = ak+1 1 lk+1 i = ak+1 i ; i;1X j=1 lij lk+1 j i = 2 ::: k lk+1 i = lk+1 i = dii i = 1 ::: k lk+1 k+1 = 1 dk+1 k+1 = ak+1 k+1 ; kX i=1 diil2 k+1 i © Los autores, 1998; © Edicions UPC, 1998.
  • 264. 250 Metodos numericos 10.6 Problemas del cap tulo 7 Problema 7.1 Las modi caciones realizadas en el programa 7.2 para los casos en que xi = 10;i+1 y xi = i estan respectivamente en los programas 7.1.1 y 7.1.2. Tan solo ha sido necesario modi car parte de la subrutina get mat vec. La unica consideracion destacable es que las operaciones de asignacion de valores a las componentes del vector x deben convertir correctamente el valor de las variables enteras en reales de doble precision. La tabla 7.1.1 muestra el chero de resultados para el caso en que xi = 10;i+1 y n = 4, y la tabla 7.1.2 presenta los resultados para xi = i y n = 4. c___________________Lectura o generacion de la matriz y del vector subroutine get_mat_vec (n,a,v) implicit real*8 (a-h,o-z) dimension a(n,n),v(n) c___Generacion de la matriz (matriz de Vandermonde) do 10 i=1, n s=10.d0**(1-i) do 10 j=1, n a(i,j)= s**(j-1) 10 continue Prog. 7.1.1 Modi cacion de la subrutina get mat vec para el caso xi = 10;i+1 c___________________Lectura o generacion de la matriz y del vector subroutine get_mat_vec (n,a,v) implicit real*8 (a-h,o-z) dimension a(n,n),v(n) c___Generacion de la matriz (matriz de Vandermonde) do 10 i=1, n s=dfloat(i) do 10 j=1, n a(i,j)= s**(j-1) 10 continue Prog. 7.1.2 Modi cacion de la subrutina get mat vec para el caso xi = i © Los autores, 1998; © Edicions UPC, 1998.
  • 265. 10 Resolucion de los problemas propuestos 251 Tabla 7.1.1 Fichero de resultados del caso xi = 10;i+1 La matriz de entrada es: 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E-01 1.000000E-02 1.000000E-03 1.000000E+00 1.000000E-02 1.000000E-04 1.000000E-06 1.000000E+00 1.000000E-03 1.000000E-06 1.000000E-09 El vector de entrada es: 4.000000E+00 1.111000E+00 1.010101E+00 1.001001E+00 El vector producto es: 7.122102E+00 4.122202E+00 4.011212E+00 4.001112E+00 El modulo del vector producto es: 9.990776E+00 Problema 7.2 Apartado a) El programa 7.2.1 sirve para resolver el sistema lineal pentadiagonal y simetrico planteado. El programa esta realizado con dimensionamiento dinamico y consta de las subrutinas indicadas en el enunciado. Se puede observar en el programa principal que la solucion del sistema, x, se almacena en la misma posicion que ocupa el vector de terminos independientes, b. Esto se puede realizar porque el vector b no se necesita para realizar calculos tras la resolucion del problema, y de esta forma se ahorra espacio de memoria. La matriz A se almacena mediante un esquema de almacenamiento optimo por diagonales. Al ser A simetrica se ha considerado solamente la diagonal principal y las dos diagonales superiores. De esta forma se requieren un total de 3n posiciones de memoria para almacenar la matriz, cantidad muy inferior a las n2 posiciones necesarias si se almacena como como matriz © Los autores, 1998; © Edicions UPC, 1998.
  • 266. 252 Metodos numericos llena. Este almacenamiento optimo se puede realizar gracias a que en la resolucion del sistema no es necesario pivotar. Tabla 7.1.2 Fichero de resultados del caso xi = i La matriz de entrada es: 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 2.000000E+00 4.000000E+00 8.000000E+00 1.000000E+00 3.000000E+00 9.000000E+00 2.700000E+01 1.000000E+00 4.000000E+00 1.600000E+01 6.400000E+01 El vector de entrada es: 4.000000E+00 1.500000E+01 4.000000E+01 8.500000E+01 El vector producto es: 1.440000E+02 8.740000E+02 2.704000E+03 6.144000E+03 El modulo del vector producto es: 6.770891E+03 El metodo de Gauss ha sido adaptado al almacenamiento optimo de nido para la matriz A. La adaptacion se ha realizado en dos pasos. En primer lugar se ha adaptado el algoritmo a matrices en banda con semianchos superior e inferior iguales a 2. Este primer paso consiste en modi car los dos bucles internos en la fase de eliminacion (con contadores i y j) de forma que solo recorran los elementos necesarios (en ambos casos de k+1 a k+2), y en separar las opera- ciones que corresponden a k=n-1 del bucle principal. El segundo paso consiste en considerar que la matriz es simetrica, y por lo tanto es su ciente trabajar con la parte triangular supe- rior. Este segundo paso implica que, para matrices pentadiagonales, solo es necesario realizar operaciones de la sobre tres coe cientes de la matriz para cada valor de k, con k de 1 a n-2, y por tanto se ha sustituido el bucle en i por la asignacion directa i=k+1 e i=k+2. Respecto de la sustitucion hacia atras solo es importante resaltar que los bucles se han modi cado de forma adecuada, respetando el almacenamiento de la matriz. Por ultimo, cabe indicar que se ha utilizado la funcion KPOS para relacionar la notacion matricial de A con el almacenamiento vectorial utilizado. © Los autores, 1998; © Edicions UPC, 1998.
  • 267. 10 Resolucion de los problemas propuestos 253 c c Este programa soluciona el sistema de ecuaciones c A*x = b c para el caso en que A es una matriz pentadiagonal c simetrica y utilizando dimensionamiento dinamico c________________________________________________________________ implicit real*8 (a-h,o-z) parameter(mtot=3997) dimension dd(mtot) call lecdat(n) call punter(n,na,nb,mtot) call gendat(dd(na),dd(nb),n) call gaus5s(dd(na),dd(nb),n) call escres(dd(nb),n) end c___________________Lectura de datos subroutine lecdat(n) implicit real*8 (a-h,o-z) common /datos/ act,bct,ect,yoct,pact,pbct open(unit=10,file='pentadiagonal.dat',status='old') read(10,'(I5)') n read(10,'(5(E12.6,/),E12.6)')act,bct,ect,yoct,pact,pbct close(10) return end c___________________Definicion de punteros subroutine punter(n,na,nb,mtot) implicit real*8 (a-h,o-z) na =1 nb =na+3*n nend=nb+n if (nend.gt.mtot) then write(*,*)' Dimensionamiento insuficiente' write(*,*)' se requieren',nend,' posiciones' stop endif return end c___________________Generacion de la matriz y el vector subroutine gendat(a,b,n) implicit real*8 (a-h,o-z) dimension a(5*n),b(n) common /datos/ act,bct,ect,yoct,pact,pbct © Los autores, 1998; © Edicions UPC, 1998.
  • 268. 254 Metodos numericos c___Generar Matriz A a(1) = 5.D0 a(n+1) =-4.D0 a(2*n+1)= 1.D0 do i=2,n-2 a( i)= 6.D0 a( n+i)=-4.D0 a(2*n+i)= 1.D0 enddo a(n-1) = 6.D0 a(2*n-1)=-4.D0 a(n) = 5.D0 c___Generar Vector b h =(bct-act)/dfloat(n+1) aux1=h**4/(ect*yoct)*pact aux2=h**5/(ect*yoct)*(pbct-pact)/(bct-act) do i=1,n b(i)=aux1+aux2*dfloat(i) enddo return end c___________________Algoritmo de Gauss adaptado subroutine gaus5s(a,b,n) implicit real*8 (a-h,o-z) dimension a(3*n), b(n) kpos(i,j) = n*(j-i)+i c___Eliminacion do k=1,n-2 i=k+1 fact=a(kpos(k,i))/a(kpos(k,k)) b(i)=b(i)-fact*b(k) do j=k+1,k+2 a(kpos(i,j))=a(kpos(i,j))-fact*a(kpos(k,j)) enddo i=k+2 fact=a(kpos(k,i))/a(kpos(k,k)) b(i)=b(i)-fact*b(k) j=k+2 a(kpos(i,j))=a(kpos(i,j))-fact*a(kpos(k,j)) enddo fact=a(kpos(n-1,n))/a(kpos(n-1,n-1)) b(n)=b(n)-fact*b(n-1) a(kpos(n,n))=a(kpos(n,n))-fact*a(kpos(n-1,n)) © Los autores, 1998; © Edicions UPC, 1998.
  • 269. 10 Resolucion de los problemas propuestos 255 c___Sustitucion hacia atras b(n)=b(n)/a(kpos(n,n)) b(n-1)=(b(n-1)-a(kpos(n-1,n))*b(n))/a(kpos(n-1,n-1)) do i=n-2,1,-1 do j=i+1,i+2 b(i)=b(i)-a(kpos(i,j))*b(j) enddo b(i)=b(i)/a(kpos(i,i)) enddo return end c___________________Escritura de los resultados subroutine escres(x,n) implicit real*8 (a-h,o-z) dimension x(n) open(unit=11,file='t7_p73.res',status='unknown') write(11,'(6x,a3)' )' x ' write(11,'(n(E15.9,/))')(x(i),i=1,n) close(11) return end Prog. 7.2.1 Resolucion de sistemas lineales pentadiagonales simetricos Apartado b) El programa 7.2.1 se emplea para resolver sistemas lineales pentadiagonales con los datos indicados. En la tabla 7.2.1 se muestran los resultados obtenidos con n = 5. Tabla 7.2.1 Resultado para n = 5 x .675154321E-02 .115740741E-01 .133101852E-01 .115740741E-01 .675154321E-02 © Los autores, 1998; © Edicions UPC, 1998.
  • 270. 256 Metodos numericos Apartado c) En la gura 7.2.1 se muestra la gra ca realizada en Excel en la que se presentan las tres series de pares ordenados fti xig, con i = 0 :: n+ 1, correspondientes a n = 5, 19 y 99. 0,0E+00 2,0E-03 4,0E-03 6,0E-03 8,0E-03 1,0E-02 1,2E-02 1,4E-02 0,0 0,2 0,4 0,6 0,8 1,0 t x n=5 n=19 n=99 Fig. 7.2.1 Gra ca de las tres series de pares ordenados fti xig, con i = 0 :: n+1, correspondientes a n = 5, 19 y 99 Para interpretar los resultados obtenidos es necesario explicar brevemente el problema f sico asociado al sistema lineal de ecuaciones del enunciado. Este sistema se ha obtenido en la re- solucion numerica de la ecuacion diferencial ordinaria que modela la deformada de una viga bajo una carga repartida. Los pares ordenados fti xig corresponden a una serie de puntos uni- formemente distribuidos segun el eje de la viga, ftig, y sus respectivas echas (desplazamientos verticales), fxig. Cuanto mas na es la particion segun el eje de la viga (por tanto, con n mayor), mas correcta es la aproximacion de la deformada obtenida. Esto se debe a dos motivos: porque al tener mas puntos se puede representar mejor la deformada, y porque al aumentar n cada uno de los puntos se obtiene con una precision mayor. Con los datos del enunciado se calcula la deformada de una viga de longitud unidad bajo una carga uniforme de valor unidad. En el gra co de la gura 7.2.1 se observa como las soluciones para n = 19 y n = 99 son practicamente iguales, mientras que con n = 5 los puntos quedan un poco desplazados. © Los autores, 1998; © Edicions UPC, 1998.
  • 271. 10 Resolucion de los problemas propuestos 257 Por ultimo, puesto que la ecuacion de la deformada de una viga bajo carga uniforme es conocida, se puede comparar la solucion numerica obtenida mediante la solucion del sistema de ecuaciones con la solucion anal tica. La echa en el punto medio de la viga es x(t = b;a 2 ) = 5 384 p(b ;a)4 EI Se puede veri car que el error relativo cometido con n = 99 es del orden de 10;4, y con n = 999 del orden de 10;6. Problema 7.3 En la resolucion de este problema se considera que se trabaja con numeros reales en doble precision y que el vector x se almacena en el mismo sitio que el vector b. En primer lugar se compara el numero de reales que es necesario almacenar en cada alternativa. Posteriormente se compara el numero de operaciones en coma otante (por tanto, entre variables reales) que se realizan, y nalmente se concretan los resultados para n = 10, 100 y 1000. Respecto de la primera alternativa (apartado a), la matriz A considerada como matriz llena ocupa un total de n2 posiciones de memoria, y los vectores b y x ocupan en total n posiciones mas. Por tanto es necesario almacenar n2 +n numeros reales en doble precision. En la segunda alternativa (apartadob) se ha considerado que la matriz Aesta almacenada de forma optima por diagonales. Por ser una matriz simetrica es su ciente almacenar las tres diagonales superiores por tanto necesita 3n posiciones de memoria. Los vectores b y x ocupan la misma cantidad de memoria que en la primera alternativa. Por tanto basta almacenar 4n numeros reales en doble precision. Respecto del numero de operaciones entre variables reales que se realizan, hay que considerar las dos fases del metodo de Gauss: eliminacion y sustitucion hacia atras. Como se ha visto en el cap tulo 6, la alternativa a requiere un total de (4n3 + 9n2 ;7n)=6 operaciones en coma otante. En cambio, la alternativa b requiere tan solo 17n;25 operaciones. Para simpli car el calculo de este numero de operaciones, se presenta en el programa 7.3.1 una version compacta de la subrutina gaus5s del programa 7.2.1. Ambas subrutinas corresponden al mismo algoritmo de Gauss adaptado a matrices pentadiagonales. En la nueva version (programa 7.3.1) es mas dif cil ver la correspondencia con las distintas partes del algoritmo de Gauss estandar, pero es mas sencillo contar el numero de operaciones en coma otante realizadas, y obtener el resultado indicado. En la tabla 7.3.1 se puede observar como al aumentar n las diferencias entre ambas al- ternativas son cada vez mas elevadas. El coste computacional de la alternativa a desaconseja claramente su uso para valores de n del orden de 100 o superiores. © Los autores, 1998; © Edicions UPC, 1998.
  • 272. 258 Metodos numericos subroutine gaus5s_b(a,b,n) implicit real*8 (a-h,o-z) dimension a(3*n), b(n) c___Eliminacion do k=1,n-2 fact =a(n+k)/a(k) b(k+1) =b(k+1)-fact*b(k) a(k+1) =a(k+1)-fact*a(n+k) a(n+k+1)=a(n+k+1)-fact*a(2*n+k) fact =a(2*n+k)/a(k) b(k+2)=b(k+2)-fact*b(k) a(k+2)=a(k+2)-fact*a(2*n+k) enddo fact=a(2*n-1)/a(n-1) b(n)=b(n)-fact*b(n-1) a(n)=a(n)-fact*a(2*n-1) c___Sustitucion hacia atras b(n)=b(n)/a(n) b(n-1)=(b(n-1)-a(2*n-1)*b(n))/a(n-1) do i=n-2,1,-1 b(i)=(b(i)-a(n+i)*b(i+1)-a(2*n+i)*b(i+2))/a(i) enddo return end Prog. 7.3.1 Modi cacion de la subrutina gaus5s del programa 7.2.1 Tabla 7.3.1 Comparacion del coste computacional de las dos alternativas de nidas en el problema 7.3 Alternativa a Alternativa b Num. operaciones Memoria Num. operaciones Memoria General (4n3 + 9n2 ;7n)=6 n2 + n 17n;25 4n n = 10 638 880 b 145 320 b n = 100 682 103 79 Kb 1675 13 Kb n = 1000 668 106 7.6 Mb 17 103 31 Kb © Los autores, 1998; © Edicions UPC, 1998.
  • 273. 10 Resolucion de los problemas propuestos 259 Problema 7.4 Apartado a) La matriz tridiagonal del sistema es diagonalmente dominante: para cada la, el coe ciente diagonal es 2, y la suma de los dos coe cientes no diagonales hi=(hi +hi;1) y hi;1=(hi +hi;1) es 1. Por este motivo, el pivotamiento no es necesario. Apartado b) El metodo de Thomas se obtiene particularizando el metodo de Crout al caso u = l = 1. Puesto que A es una matriz triadiagonal, los vectores ck+1] y fk+1] de nidos en la ecuacion 6.34 solo tienen la ultima componente distinta de cero. Al resolver los sistemas triangulares inferiores indicados en la ecuacion 6.37, se obtienen vectores uk+1] y lk+1] con la misma propiedad. As pues, los factores L y U conservan los semianchos de banda de la matriz A. Con estas consideraciones, las ecuaciones 6.38 pueden reducirse a l11 = a11 u11 = 1 k = 1 ::: n ;1 8 : uk k+1 = ak k+1 = lkk lk+1 k = ak+1 k lk+1 k+1 = ak+1 k+1 ;lk+1 k uk k+1 El almacenamiento puede optimizarse empleando una matriz rectangular R de n las y 3 columnas (vease el subapartado 7.4.4), que contiene la matriz tridiagonal A antes de la descomposicion y los factores L y U despues. La relacion entre los ndices y (matriz R) y los ndices i y j (matrices A, L y U) es = i y = 2+j;i. Las ecuaciones anteriores pueden reescribirse como k = 1 ::: n;1 (rk3 = rk3 = rk2 rk+1 2 = rk+1 2 ;rk1 rk3 Notese que se han suprimido algunas asignaciones que son innecesarias por el hecho de trabajar con una unica matriz (vease el problema 6.2). En cuanto a las sustituciones, siguiendo el procedimiento indicado en el problema 6.2, se obtiene b1 = b1 = r12 bi = (bi ;ri1bi;1) = ri2 i = 2 ::: n bi = bi ;ri3bi+1 i = n;1 n;2 ::: 1 © Los autores, 1998; © Edicions UPC, 1998.
  • 274. 260 Metodos numericos Apartado c) Tanto en la descomposicion como en las sustituciones, se accede a los coe cientes de la matriz Rpor las. En cambio, la matriz rectangular Resta almacenada por columnas (esquema de almacenamiento por defecto en FORTRAN, vease el subapartado 7.4.1). Esto no resulta adecuado desde el punto de vista de la paginacion, puesto que se trabaja con posiciones no consecutivas de memoria. Podr a optarse por almacenar la matriz R por las en un vector f, segun se indica en el subapartado 7.4.2. Sin embargo, esto complicar a un poco mas el esquema de almacenamiento. Por este motivo, se pre ere trabajar con una matriz rectangular de 3 las y n columnas (la traspuesta de la matriz R de n las y 3 columnas considerada hasta ahora). Esto puede hacerse simplemente permutando los ndices en las ecuaciones del apartado b. Para esta nueva matriz, el almacenamiento por columnas ya resulta adecuado. Apartado d) El programa 7.4.1 permite resolver sistemas tridiagonales mediante el metodo de Thomas. La matriz del sistema se almacena en una matriz rectangular de 3 las y n columnas (veanse las subrutinas build mat vec, descom LU y subs). c c Este programa calcula la solucion de un sistema tridiagonal c de ecuaciones mediante el metodo de Thomas. c c Se emplea dimensionamiento dinamico y un esquema de c almacenamiento por diagonales c c El fichero de datos rusa.dat contiene: c *Linea 1: n (numero de puntos base interiores) c *Lineas 2,...,n+3: x,f (valores de x e y en los apoyos) c c___________________________________________________________________ implicit real*8 (a-h,o-z) parameter (mtot = 1000) dimension dd(mtot) c___Ficheros de datos y de resultados open (unit=2, file='rusa.dat', status='unknown') open (unit=4, file='rusa.res', status='unknown') c___Lectura del numero de puntos base interiores read (2,*) n c___Definicion de los punteros call puntero(n,nx,nf,nh,nt,na,nb,mtot) © Los autores, 1998; © Edicions UPC, 1998.
  • 275. 10 Resolucion de los problemas propuestos 261 c___Lectura de los datos call get_data(n,dd(nx),dd(nf)) c___Generacion de la matriz y el vector de terminos independientes call build_mat_vec(n,dd(nx),dd(nf),dd(nh),dd(nt),dd(na),dd(nb)) c___Descomposicion LU call descom_LU(n,dd(na)) c___Sustituciones hacia adelante y hacia atras call subs(n,dd(na),dd(nb)) c___Escritura de los resultados call write_resul(n,dd(nb)) stop end c________________________________________Definicion de los punteros subroutine puntero (n,nx,nf,nh,nt,na,nb,mtot) implicit real*8 (a-h,o-z) nx = 1 nf = nx + (n+2) nh = nf + (n+2) nt = nh + (n+1) na = nt + (n+1) nb = na + (3*n) nend = nb + n if (nend .gt. mtot) then write(5,*) ' ERROR Dimensionamiento insuficiente !' write(5,*) ' se requieren',nend,' posiciones' stop endif return end c______________________________________________Lectura de los datos subroutine get_data (n,x,f) implicit real*8 (a-h,o-z) dimension x(0:n+1),f(0:n+1) do 10 i=0,n+1 read (2,*) x(i),f(i) 10 continue close (2) return end © Los autores, 1998; © Edicions UPC, 1998.
  • 276. 262 Metodos numericos c____Generacion de la matriz y el vector de terminos independientes subroutine build_mat_vec (n,x,f,h,t,r,b) implicit real*8 (a-h,o-z) dimension x(0:n+1),f(0:n+1),h(0:n),t(0:n),r(3,n),b(n) do 20 i=0,n h(i)=x(i+1)-x(i) t(i)=f(i+1)-f(i) 20 continue r(1,1)=0.d0 do 50 i=2,n r(1,i)=h(i)/(h(i)+h(i-1)) 50 continue do 60 i=1,n r(2,i)=2.d0 b(i)=3.d0*(h(i)/(h(i-1)+h(i)))*(t(i-1)/h(i-1)) b(i)=b(i)+3.d0*(h(i-1)/(h(i-1)+h(i)))*(t(i)/h(i)) 60 continue do 70 i=1,n-1 r(3,i)=h(i-1)/(h(i)+h(i-1)) 70 continue r(3,n)=0.d0 return end c_________________________________________________Descomposicion LU subroutine descom_LU(n,r) implicit real*8 (a-h,o-z) dimension r(3,n) parameter(tol=1.d-5) if(abs(r(2,1)).lt.tol) call cero_pivote(1) r(3,1)=r(3,1)/r(2,1) do i=2,n-1 r(2,i)=r(2,i)-r(1,i)*r(3,i-1) if(abs(r(2,i)).lt.tol) call cero_pivote(i) r(3,i)=r(3,i)/r(2,i) end do r(2,n)=r(2,n)-r(1,n)*r(3,n-1) return end subroutine cero_pivote(ieq) write(6,900)ieq 900 format(3x,'Pivote igual a cero,ecuacion numero: 'i5) stop end © Los autores, 1998; © Edicions UPC, 1998.
  • 277. 10 Resolucion de los problemas propuestos 263 c________________________Sustituciones hacia adelante y hacia atras subroutine subs(n,r,b) implicit real*8 (a-h,o-z) dimension r(3,n),b(n) b(1)=b(1)/r(2,1) do i=2,n b(i)=(b(i)-r(1,i)*b(i-1))/r(2,i) end do do i=n-1,1,-1 b(i)=b(i)-r(3,i)*b(i+1) end do return end c_______________________________________Escritura de los resultados subroutine write_resul (n,b) implicit real*8 (a-h,o-z) dimension b(n) write(4,100) 0,0.d0 do 60 i=1,n write (4,100) i,b(i) 60 continue write(4,100) n+1,0.d0 100 format (1x,'La pendiente en el apoyo ',i3,' es ',1pd13.6) close (4) return end Prog. 7.4.1 Resolucion de sistemas tridiagonales con el metodo de Thomas Apartado e) Para los datos indicados en el enunciado, se obtiene el archivo de resultados de la tabla 7.4.1. Para dibujar el trazado de la v a en una gra ca de Excel, debe tenerse en cuenta que las cubicas si(x) (es decir, sus coe cientes) son distintas en cada uno de los n + 1 intervalos. Se obtiene entonces la gra ca de la gura 7.4.1. © Los autores, 1998; © Edicions UPC, 1998.
  • 278. 264 Metodos numericos Tabla 7.4.1 Pendientes en los apoyos de la monta~na rusa La pendiente en el apoyo 0 es 0.000000D+00 La pendiente en el apoyo 1 es 3.890094D-01 La pendiente en el apoyo 2 es -8.405664D-02 La pendiente en el apoyo 3 es -5.027829D-01 La pendiente en el apoyo 4 es 8.999935D-02 La pendiente en el apoyo 5 es 2.184029D-01 La pendiente en el apoyo 6 es -1.550568D-02 La pendiente en el apoyo 7 es -3.936095D-01 La pendiente en el apoyo 8 es 0.000000D+00 -3 -2 -1 0 1 2 3 4 5 6 0 10 20 30 40 50 60 70 80 coordenada x (metros) altura(metros) Fig. 7.4.1 Trazado en alzado de la monta~na rusa La gra ca tiene en los puntos de apoyo las pendientes prescritas en la tabla 7.4.1. Puesto que el sistema tridiagonal tiene solucion unica, este trazado es el unico que veri ca las condiciones de dise~no: una cubica en cada intervalo, pendientes nulas en los extremos y continuidad C2. © Los autores, 1998; © Edicions UPC, 1998.
  • 279. 10 Resolucion de los problemas propuestos 265 Problema 7.5 Apartado a) El vector lk+1], que contiene los elementos por encima de la diagonal de la columna k- esima de la matriz LT, se calcula resolviendo el sistema triangular inferior Lk] lk+1] = fk+1]. Durante el proceso de sustitucion hacia adelante, se iran obteniendo ceros hasta encontrar el primer elemento no nulo del vector fk+1] (k-esima columna de la matriz A). En consecuencia, el skyline de las matrices LT y A es el mismo. Apartado b) Para adaptar el algoritmo de Cholesky a matrices en skyline, se siguen tres pasos. En primer lugar, las ecuaciones 6.41 se reescriben de manera que 1) se trabaje con elementos del triangulo superior (y no del inferior), y 2) la matriz LT se sobreescriba encima de A. Se obtiene entonces a11 = pa11 k = 1 ::: n;1 8 : a1 k+1 = a1 k+1 = a11 ai k+1 = 0 @ai k+1 ; i;1X j=1 aji aj k+1 1 A = aii i = 2 ::: k ak+1 k+1 = vuutak+1 k+1 ; kX i=1 a2 i k+1 En segundo lugar, el algoritmo se adapta al per l en skyline eliminando las operaciones innecesarias, pero sin variar el esquema de almacenamiento. El primer elemento no nulo del vector lk+1] esta en la la ip = k+2;lk+1 +lk. En consecuencia, pueden modi carse los rangos de los bucles y obtener a11 = pa11 k = 1 ::: n;1 8 : ip = k + 2 ;lk+1 + lk aip k+1 = aip k+1 = aip ip ai k+1 = 0 @ai k+1 ; i;1X j=ip aji aj k+1 1 A = aii i = ip+ 1 ::: k ak+1 k+1 = vuutak+1 k+1 ; kX i=ip a2 i k+1 © Los autores, 1998; © Edicions UPC, 1998.
  • 280. 266 Metodos numericos En tercer lugar, el esquema de almacenamiento se adapta al per l en skyline. Para ello, hay que tener en cuenta que el elemento aij se almacena en la m-esima componente del vector c, con m = l(j) ;(j ;i) (vease el subapartado 7.4.5): c(1) = p c(1) lkk = 1 k = 1 ::: n;1 8 : lk = lkk lkk = l(k + 1) ip = k + 2 ;lk+1 + lk lip = l(ip) c(lk + 1) = c(lk + 1) = c(lip) i = ip+ 1 ::: k 8 : li = l(i) c(lkk ;k ;1 + i) = 0 @c(lkk ;k ;1 + i) ; i;1X j=ip c(li;i+ j) c(lkk ;k ;1 + j) 1 A = c(li) c(lkk) = vuutc(lkk) ; kX i=ip c(lkk ;k ;1 + i)]2 Se han empleado las variables enteras auxiliares lk, lkk, lip y li para minimizar el numero de veces que se accede a posiciones de memoria del vector de punteros l. Problema 7.6 Apartado a) Recorriendo la matriz A por columnas y guardando sus elementos no nulos en c, se obtiene cT = (8 2 7 1 4 9 ;4 3 5 1 6 ;6) El vector m de ndices de la de las componentes de c es mT = (1 2 2 3 5 3 4 1 4 2 3 5) y el vector l de punteros de la posicion en c del primer elemento de cada columna de A es lT = (1 3 6 8 10 13) © Los autores, 1998; © Edicions UPC, 1998.
  • 281. 10 Resolucion de los problemas propuestos 267 Apartado b) El producto de una matriz A llena por un vector x puede escribirse como do i=1,n y(i) = 0.d0 enddo do j=1,n do i=1,n y(i)=y(i)+a(i,j)*x(j) enddo enddo Con la ordenacion elegida para los bucles (el exterior en j y el interior en i), la matriz A se recorre por columnas. Esto permite adaptar el algoritmo de multiplicacion a un esquema de almacenamiento comprimido por columnas: do i=1,n y(i) = 0.d0 enddo do j=1,n do i=l(j),l(j+1)-1 y(m(i)) = y(m(i)) + c(i)*x(j) enddo enddo Notese que, con la ayuda del vector l, en el bucle DO|ENDDO interior (en i) se recorren solamente los elementos no nulos de la columna j (almacenados en el vector c). © Los autores, 1998; © Edicions UPC, 1998.
  • 282. 268 Metodos numericos 10.7 Problemas del cap tulo 8 Problema 8.1 Apartado a) Los programas 8.1 y 8.2 (apartado 8.5) permiten calcular numericamente la integral in- de nida R =2 0 sin(x)dx mediante el metodo de las aproximaciones rectangulares y el metodo compuesto del trapecio. Modi cando en estos programas las instrucciones de escritura de re- sultados, de manera que se escriba por pantalla el error absoluto, y ejecutando los programas para los distintos valores de n que aparecen en las tablas 8.1 y 8.2, se obtienen los resultados de la tabla 8.1.1. Tabla 8.1.1 Error absoluto en el calculo de R =2 0 sin(x)dx por el metodo de las aproximaciones rectan- gulares (Einf, Esup) y por el metodo compuesto del trapecio (ET) n h Einf Esup ET 1 1.57080D+00 0.10000D+01 0.57080D+00 0.21460D+00 2 7.85298D+00 0.44464D+00 0.34076D+00 0.51941D-01 5 3.14159D+00 0.16532D+00 0.14884D+00 0.82382D-02 10 1.57080D-01 0.80597D-01 0.76483D-01 0.20570D-02 100 1.57080D-02 0.78745D-02 0.78334D-02 0.20562D-04 1000 1.57080D-03 0.78560D-03 0.78519D-03 0.20562D-06 10000 1.57080D-04 0.78542D-04 0.78538D-04 0.20561D-08 En esta tabla se puede observar como la convergencia a la solucion anal tica del problema,R =2 0 sin(x)dx = 1, es considerablemente mejor para el metodo compuesto del trapecio. Apartado b) A partir de los resultados del apartado anterior se puede obtener la gura 8.1.1 donde se representa logaritmo de E versus logaritmo de n para las dos tecnicas mencionadas. Apartado c) Para un metodo lineal, el error en funcion del numero de subintervalos n se comporta segun la expresion © Los autores, 1998; © Edicions UPC, 1998.
  • 283. 10 Resolucion de los problemas propuestos 269 1,E-09 1,E-08 1,E-07 1,E-06 1,E-05 1,E-04 1,E-03 1,E-02 1,E-01 1,E+00 1,E+00 1,E+01 1,E+02 1,E+03 1,E+04 Rect. Inf. Rect. Sup. Trapecio Fig. 8.1.1 Comparacion de dos metodos para el calculo de R =2 0 sin(x)dx E = C n donde C es una constante independiente de n. Tomando logaritmos a ambos lados se obtiene la expresion equivalente logE = K ;logn con K = logC independiente de n. As , para un metodo lineal, si se representa logE en funcion de logn se obtiene una recta con pendiente ;1. Analogamente, para un metodo cuadratico el error se comporta segun E = C n2 donde C es una constante independiente de n. Y tomando logaritmos a ambos lados se obtiene la expresion logE = K ;2logn Si para un metodo cuadratico se representa logE en funcion de logn se obtiene una recta con pendiente menos ;2. © Los autores, 1998; © Edicions UPC, 1998.
  • 284. 270 Metodos numericos Apartado d) El resultado teorico concuerda con el gra co de la gura 8.1.1. Con ambos metodos se obtiene una recta que relaciona logE con logn. Para cada una de las rectas se puede calcular su pendiente considerando dos parejas de valores flogn,logEg cualesquiera. Con el metodo de las aproximaciones rectangulares (lineal) se comprueba que las dos rectas (correspondientes a las aproximaciones con rectangulos inferiores o rectangulos superiores), casi superpuestas, tienen pendiente ;1, mientras que para el metodo compuesto del trapecio (cuadratico) la recta tiene pendiente ;2. Problema 8.2 El programa 8.2 (apartado 8.5) calcula la integral de nida de la funcion sin(x) en el intervalo 0 =2] mediante el metodo compuesto del trapecio. Puede servir facilmente como base para construir un programa que calcule integrales de nidas de una funcion cualquiera en un intervalo cualquiera. Para el problema planteado no se dispone de la de nicion de la funcion, solo se dispone de su valor en una serie de puntos equiespaciados, pero esta diferencia respecto del programa 8.2 se soluciona simplemente sustituyendo la evaluacion de la funcion por la lectura del valor correspondiente del archivo de datos. Al no conocer la de nicion de la funcion, la integracion numerica es obligada. Por otro lado, el numero de subintervalos queda ya determinado (numero de datos menos uno) y, por lo tanto, la precision con que se puede obtener la solucion es limitada. El programa 8.2.1 (inspirado en el programa 8.2) calcula los volumenes VD y VT a partir de los valores conocidos de las funciones AD y AT (que se leen de los archivosde datos AREAS D.DAT y AREAS T.DAT respectivamente). c c Este programa calcula los volumenes de desmonte y terraplen c por el METODO COMPUESTO DEL TRAPECIO a partir de las areas. c (datos equiespaciados) c___________________________________________________________________ implicit real*8 (a-h,o-z) c___Asignacion de las unidades de lectura y escritura n_lec = 1 n_esc = 2 c___Calculo del volumen de desmonte open(unit=n_lec,file='areas_d.dat',status='old') V_d = volumen(n_lec) close(n_lec) c___Calculo del volumen de terraplen © Los autores, 1998; © Edicions UPC, 1998.
  • 285. 10 Resolucion de los problemas propuestos 271 open(unit=n_lec,file='areas_t.dat',status='old') V_t = volumen(n_lec) close(n_lec) c___Calculo del balance de tierras balance = V_d - V_t c___Escritura de resultados open(unit=n_esc,file='volumen.res',status='new') write (n_esc,200) V_d,V_t,balance close(n_esc) write (6,200) V_d,V_t,balance 200 format(/,1x,'Volumen de desmonte = ',0pf12.7,/, . 1x,'Volumen de terraplen = ',0pf12.7,/, . 1x,'Balance de tierras = ',0pf12.7,/) stop end c___________________Calculo del volumen real*8 function volumen(n_lec) implicit real*8 (a-h,o-z) c___Numero n de subintervalos read (n_lec,*) n c___Extremo izquierdo read(n_lec,*) a c___Extremo derecho read(n_lec,*) b c___Valor de h h = (b-a)/dble(n) c___Calculo de la aproximacion V C___valor en el extremo izquierdo read(n_lec,*) area V = 0.5d0*area c___Puntos interiores do 10 i = 1,n-1 read(n_lec,*) area V = V + area 10 continue © Los autores, 1998; © Edicions UPC, 1998.
  • 286. 272 Metodos numericos c___Extremo derecho read(n_lec,*) area V = V + 0.5d0*area c___Factor comun h volumen = V*h return end Prog. 8.2.1 Metodo compuesto del trapecio para el balance de tierras El listado incluye la FUNCTION VOLUMEN que dada una unidad de lectura N LEC, correspon- diente al archivo de datos que contiene las areas, retorna el valor del volumen. Lee del archivo el numero de subintervalos y los extremos de integracion y, con ayuda de un bucle, lee los valores de las areas y a~nade su contribucion a la integral segun el metodo compuesto del trapecio. Esta misma FUNCTION se puede utilizar para calcular la integral de cualquier funcion a partir de sus valores en puntos equiespaciados (introducidos en un archivo). El programa principal utiliza dos veces la FUNCTION VOLUMEN. Para el calculo de VD abre el archivo que contiene la areas de desmonte, con unidad de lectura N LEC, y utiliza la funcion para el calculo del volumen. Luego, abriendo el archivo que contiene las areas de terraplen tambien con unidad N LEC, calcula el volumen VT con ayuda de la funcion. Finalmente, calcula el balance de tierras como diferencia de volumenes y escribe los resultados por pantalla y en el archivo VOLUMEN.RES, que se muestra en la tabla 8.2.1. Tabla 8.2.1 Balance de tierras Volumen de desmonte = 75.6000000 Volumen de terraplen = 92.6250000 Balance de tierras = -17.0250000 Observese que la funcion implementada en el programa 8.2.1 calcula la integral a partir de los datos de un archivo solo en el caso de que los puntos sean equiespaciados. En un caso mas general, con puntos no necesariamente equiespaciados, cada subintervalo tendr a un tama~no diferente, tal como se muestra en la gura 8.4 (apartado 8.3), y ser a necesario utilizar una formula mas general para el metodo compuesto del trapecio. En cada subintervalo el area del trapecio ser a Ai = hi f(xi) + f(xi+1) 2 donde hi = xi+1 ;xi no puede tomarse como factor comun, y el area total se calcular a como IT = A0 + A1 + A2 + :::An;1 © Los autores, 1998; © Edicions UPC, 1998.
  • 287. 10 Resolucion de los problemas propuestos 273 10.8 Problemas del cap tulo 9 Problema 9.1 Apartado a) Los programas 9.1 y 9.2 (apartado 9.5) permiten calcular numericamente la seccion de la base del pilar mediante el metodo de Euler y el metodo de Heun. Modi cando en estos programas las instrucciones de escritura de resultados, de manera que se escriba por pantalla el error absoluto, y ejecutando los programas para distintos valores de m, se pueden obtener los resultados de la tabla 9.1.1. Tabla 9.1.1 Error absoluto en el calculo de la seccion del pilar por los metodos de Euler y de Heun m Euler Heun 1 0.17557D-03 0.40727D-05 2 0.89823D-04 0.10452D-05 5 0.36438D-04 0.16988D-06 10 0.18306D-04 0.42693D-07 100 0.18385D-05 0.42896D-09 1000 0.18393D-06 0.42915D-11 A la hora de calcular el error absoluto, en la modi cacion de los programas se debe calcular la solucion anal tica evaluando la expresion 9.15 del apartado 9.2 para x = L. Dado que se va a ejecutar cada uno de los programas varias veces, puede resultar comodo asignar los valores de las constantes del problema a las variables correspondientes (L = 4, P = 100, S0 = 0:07,:::) en lugar de leer estos valores del teclado. En la tabla 9.1.1 se puede observar como la convergencia a la solucion anal tica del problema es considerablemente mas rapida para el metodo de Heun que para el metodo de Euler. Apartado b) A partir de los resultados del apartado anterior se puede obtener el gra co de la gura 9.1.1, donde se representa logaritmo de E versus logaritmo de m para los dos metodos. © Los autores, 1998; © Edicions UPC, 1998.
  • 288. 274 Metodos numericos 1,E-12 1,E-11 1,E-10 1,E-09 1,E-08 1,E-07 1,E-06 1,E-05 1,E-04 1,E-03 1,E+00 1,E+01 1,E+02 1,E+03 Euler Heun Fig. 9.1.1 Comparacion de dos metodos de integracion numerica Apartado c) En el problema 8.1 se comprobo que, al representar logE en funcion de logm, se obtiene una recta de pendiente ;1 para un metodo lineal (E = O( 1 m)) y una recta de pendiente ;2 para un metodo cuadratico (E = O( 1 m2 )). Si se calculan las pendientes de las dos rectas de la gura 9.1.1 (tomando dos parejas de valores flogm logEg) se obtienen valores de ;1 para el metodo de Euler y de ;2 para el metodo de Heun. Esto es debido a que el primer metodo es lineal, mientras que el segundo metodo es cuadratico. © Los autores, 1998; © Edicions UPC, 1998.
  • 289. 10 Resolucion de los problemas propuestos 275 Problema 9.2 El sistema de ecuaciones diferenciales ordinarias de dimension n dy(1) dt = f(1)(t y(1) y(2) ::: y(n)) dy(2) dt = f(2)(t y(1) y(2) ::: y(n)) en t 2 a b] ... dy(n) dt = f(n)(t y(1) y(2) ::: y(n)) y(1)(a) = (1) y(2)(a) = (2) ... y(n)(a) = (n) 9 = puede reescribirse con notacion vectorial como dy = f(t y) en t 2 a b] y(a) = ) donde y = (y(1) y(2) ::: y(n))T y f(t y) = (f(1)(t y) f(2)(t y) ::: f(n)(t y))T. La extension del metodo de Heun a este problema es Y0 = Yi+1 = Yi + hf(ti Yi) Yi+1 = Yi + h 2 f(ti Yi) + f(ti+1 Yi+1) para i = 1 ::: n donde simplemente se han sustituido los escalares , Y0, Yi, Yi+1, Yi+1 y f en la de nicion del metodo de Heun (ecuacion 9.17, apartado 9.3) por los vectores , Y0, Yi, Yi+1, Yi+1 y f. El metodo de Heun puede escribirse, componente a componente, como8 : Y(1)(t0) Y(2)(t0) ... Y(n)(t0) 9 = = 8 : (1) (2) ... (n) 9 = 8 : Y(1)(ti+1) Y(2)(ti+1) ... Y(n)(ti+1) 9 = = 8 : Y(1)(ti) Y(2)(ti) ... Y(n)(ti) 9 = + h 8 : f(1)(ti Yi) f(2)(ti Yi) ... f(n)(ti Yi) 9 = 8 : Y(1)(ti+1) Y(2)(ti+1) ... Y(n)(ti+1) 9 = = 8 : Y(1)(ti) Y(2)(ti) ... Y(n)(ti) 9 = + h 2 0 BBB@ 8 : f(1)(ti Yi) f(2)(ti Yi) ... f(n)(ti Yi) 9 = + 8 : f(1)(ti+1 Yi+1) f(2)(ti+1 Yi+1) ... f(n)(ti+1 Yi+1) 9 = 1 CCCA 9 = © Los autores, 1998; © Edicions UPC, 1998.
  • 290. 276 Metodos numericos donde Yi = (Y(1)(ti) Y(2)(ti) ::: Y(n)(ti))T y Yi+1 = (Y(1)(ti+1) Y(2)(ti) ::: Y(n)(ti+1))T. Problema 9.3 El sistema de dos ecuaciones diferenciales ordinarias puede reescribirse en forma vectorial como dy = f(t y) en t 2 0 1] y(0) = ) con y = y(1) y(2) = yA yB f(t yyyyyyyyyyyyyy) = f(t y(1) y(2)) = ;ky(1)y(2) ;ky(1)y2 (2) = 1 1 Apartado a) El programa 9.3.1 resuelve este problema mediante el metodo de Euler y el metodo de Heun. El programa esta escrito de forma modular, de manera que puede resolver cualquier sistema de ecuaciones diferenciales ordinarias simplemente modi cando la de nicion de la subrutina que proporciona los valores de las derivadas, calcula f. En todo el programa se utiliza la notacion vectorial comentada en el apartado 9.4 (metodo de Euler) y en la resolucion del problema 9.2 (metodo de Heun). c c Este programa resuelve el sistema de n ecuaciones c diferenciales ordinarias c y'=f(y,t) para t en a,b] c y(a)=alpha c (donde y es un vector con n componentes) c por el METODO DE EULER y el METODO DE HEUN. c Aplicacion: problema de la estacion depuradora de aguas c__________________________________________________________________ implicit real*8 (a-h,o-z) parameter(maxdim=10) dimension alpha(maxdim), y(maxdim) c___Extremos a,b del intervalo write(6,100) read(5,*) a,b 100 format(/,2x,'Extremos del intervalo = ',$) c___Numero de subintervalos m write(6,200) read(5,*) m 200 format(/,2x,'Numero de subintervalos = ',$) © Los autores, 1998; © Edicions UPC, 1998.
  • 291. 10 Resolucion de los problemas propuestos 277 c___Numero de componentes del vector y write(6,300) read(5,*) n 300 format(/,2x,'Dimension del sistema de edo''s = ',$) c___Valores iniciales, alpha write(6,400) n read(5,*) (alpha(i),i=1,n) 400 format(/,1x,i2,1x,'valores iniciales: ',$) c___Eleccion del metodo de resolucion write(6,500) read(5,*) metodo 500 format(/,2x,'Metodo de resolucion: . ',/,7x,'(1) EULER',/,7x,'(2) HEUN') c___Llamada a la subrutina del metodo correspondiente if(metodo.eq.1) call euler(a,b,m,alpha,y,n) if(metodo.eq.2) call heun(a,b,m,alpha,y,n) stop end c___________________metodo de Euler subroutine euler(a,b,m,alpha,y,n) implicit real*8 (a-h,o-z) parameter(maxdim=10) dimension alpha(n), y(n), f(maxdim) c___Apertura del archivo de resultados open(unit=1,file='euler.res',status='unknown') write(1,*) 'METODO DE EULER' c___Paso h (discretizacion) h = (b-a)/dble(m) c___Inicializacion t = a do i=1,n y(i) = alpha(i) enddo write(1,100) ipas,t,y c___Bucle do ipas=1,m call calcula_f(y,t,f) do i=1,n © Los autores, 1998; © Edicions UPC, 1998.
  • 292. 278 Metodos numericos y(i) = y(i) + h*f(i) enddo t = t + h write(1,100) ipas,t,y enddo c___Cierre del archivo de resultados close(1) 100 format(1x,i7,2x,'t =',f7.5,5x, . 'y = ( ',n-1(f12.8,','),f12.8,')') return end c___________________metodo de Heun subroutine heun(a,b,m,alpha,y,n) implicit real*8 (a-h,o-z) parameter(maxdim=10) dimension alpha(n), y(n), f(maxdim) dimension yaux(maxdim), faux(maxdim) c___Apertura del archivo de resultados open(unit=1,file='heun.res',status='unknown') write(1,*) 'METODO DE HEUN' c___Paso h (discretizacion) h = (b-a)/dble(m) c___Inicializacion t = a do i=1,n y(i) = alpha(i) enddo write(1,100) ipas,t,y c___Bucle do ipas=1,m call calcula_f(y,t,f) do i=1,n yaux(i) = y(i) + h*f(i) enddo t = t + h call calcula_f(yaux,t,faux) do i=1,n y(i) = y(i) + 0.5d0*h*(f(i)+faux(i)) enddo write(1,100) ipas,t,y © Los autores, 1998; © Edicions UPC, 1998.
  • 293. 10 Resolucion de los problemas propuestos 279 enddo c___Cierre del archivo de resultados close(1) 100 format(1x,i7,2x,'t =',f7.5,5x, . 'y = ( ',n-1(f12.8,','),f12.8,')') return end c___________________Definicion del vector de derivadas subroutine calcula_f(y,t,f) implicit real*8 (a-h,o-z) dimension y(2), f(2) f(1) = -24.d0*y(1)*y(2) f(2) = -24.d0*y(1)*(y(2)**2) return end Prog. 9.3.1 Resolucion de un sistema de ecuaciones diferenciales ordinarias me- diante los metodos de Euler y de Heun El programa 9.3.1 contiene dos subrutinas para el calculo de la solucion: la rutina euler y la rutina heun. En ambos casos los datos de entrada para la subrutina son los extremos del intervalo de calculo a b], el numero de subintervalos m, la dimension n del sistema de ecuaciones diferenciales ordinarias y el vector de condiciones iniciales . Una vez ejecutada cualquiera de las dos subrutinas, el vector y contiene el vector solucion Yn ' y(b). Durante el calculo se escriben los calculos intermedios Yi ' y(xi), i = 1 :::n en el archivo euler.res o en el archivo heun.res respectivamente. La implementacion de cada uno de los metodos es similar a la de los programas 9.1 (Euler) y 9.2 (Heun). Simplemente hay que sustituir las asignaciones de variables por bucles para recorrer las componentes de los vectores correspondientes, cuando sea necesario. Por ejemplo, la asignacion y = y + h*f se debe reescribir como do i=1,n y(i) = y(i) + h*f(i) enddo dado que tanto y como f son ahora vectores. Una vez implementadas las subrutinas, el programa principal simplemente lee las constantes © Los autores, 1998; © Edicions UPC, 1998.
  • 294. 280 Metodos numericos que de nen el problema y que se deben pasar a las subrutinas de calculo, pide al usuario el metodo de resolucion y llama a la rutina correspondiente. Apartado b) Ejecutando el programa 9.3.1 para diferentes valores del numero de subintervalos m se obtienen los resultados de la tabla 9.3.1. Tabla 9.3.1 Solucion numerica en el instante t = 1 para los metodos de Euler y Heun m Euler Heun 10 overflow overflow 100 (0.00006882, 0.34668445) (0.00006748, 0.36787680) 1000 (0.00006549, 0.36624375) (0.00006602, 0.36791095) 10000 (0.00006596, 0.36774095) (0.00006601, 0.36790380) 100000 (0.00006601, 0.36788748) (0.00006601, 0.36790373) Como solucion de referencia se tomara la obtenida con el metodo de mayor orden de con- vergencia (Heun) y para la discretizacion mas na (m = 100 000 subintervalos). Es razonable suponer que esta solucion es la mas precisa de las re ejadas en la tabla 9.3.1. Esta solucion se utilizara para hacer una comparacion de la convergencia de ambos metodos. En la tabla 9.3.1 se puede observar como para m = 10 el valor de h no es su cientemente peque~no como para poder aproximar correctamente la solucion con ninguno de los dos metodos. Es necesario un numero mayor de puntos para poder capturar aproximadamente la solucion. Pero, para valores su cientemente grandes de m, se puede observar la convergencia de ambos metodos a la solucion exacta esta es considerablemente mejor para el metodo de Heun. La tabla 9.3.2 muestra el logaritmo decimal del error en yB(1) para ambos metodos y para distintos valores de m (comparando con el resultado de referencia yB(1) = 0:36790373). Puede observarse como logE en funcion de logm corresponde a una recta de pendiente ;1 para el metodo de Euler (lineal) y pendiente ;2 para el metodo de Heun (cuadratico), tal como se comento en el problema 9.1. © Los autores, 1998; © Edicions UPC, 1998.
  • 295. 10 Resolucion de los problemas propuestos 281 Tabla 9.3.2 Logaritmo de E para la componente yB en t = 1 con los metodos de Euler y Heun m logm Euler Heun 100 2 -1.67326937951316 -4.56984776155033 1000 3 -2.77989886255826 -5.14130282722359 10000 4 -3.78839376954350 -7.12364816033703 Apartado b) La solucion de referencia (metodo de Heun, m = 100 000) se recoge en la tabla 9.3.3. Tabla 9.3.3 Solucion de referencia: metodo de Heun, m = 100 000 METODO DE HEUN 0 t = 0.00000 y = ( 1.00000000, 1.00000000) . . . 3854 t = 0.03854 y = ( 0.50009555, 0.60658862) 3855 t = 0.03855 y = ( 0.50002276, 0.60654446) 3856 t = 0.03856 y = ( 0.49994998, 0.60650032) 3857 t = 0.03857 y = ( 0.49987721, 0.60645619) . . . 100000 t = 1.00000 y = ( 0.00006601, 0.36790373) De la tabla 9.3.3 puede deducirse que el reactivo A reduce su concentracion a la mitad en el instante t = 0:03855 aproximadamente. Si fuese necesario obtener el instante de tiempo con una mayor precision se deber an hacer los calculos con un numero de subintervalos m mayor. De todas formas, con los resultados de que se dispone se puede intentar ajustar un poco mas el instante de tiempo a partir de los resultados en los instantes t = 0:03855 y t = 0:03856. Suponiendo que yA(t) se comporta como una recta en este peque~no intervalo yA(t) = yA(0:03855)+yA(0:03856);yA(0:03855) 0:00001 (t;0:03855) = 0:50002276;7:278(t;0:03855) se puede imponer yA(t) = 0:5 0:50002276;7:278(t;0:03855) = 0:5 con lo que se obtiene el instante de tiempo t = 0:038553 © Los autores, 1998; © Edicions UPC, 1998.