SlideShare una empresa de Scribd logo
MÉTODOS NUMÉRICOS CON SCILAB
Héctor Manuel Mora Escobar
hectormora@yahoo.com hmmorae@unal.edu.co
www.hectormora.info
22 de abril de 2014
2
Prólogo
Este libro presenta los principales temas de Métodos Numéricos: solución
de sistemas de ecuaciones lineales (capı́tulos 2 y 3), ecuaciones no lineales
(capı́tulo 4), interpolación y aproximación (capı́tulo 5), integración y dife-
renciación (capı́tulo 6), ecuaciones diferenciales ordinarias (capı́tulo 7), ecua-
ciones diferenciales parciales (capı́tulo 8) y valores propios (capı́tulo 9).
Para cada tema hay varios métodos, obviamente no están todos. Los temas
y los métodos que aparecen fueron escogidos teniendo en cuenta y haciendo
un balance entre popularidad, eficiencia, aplicabilidad y facilidad de pre-
sentación. Por ejemplo, el método de elementos finitos, aunque es impor-
tantı́simo para ecuaciones diferenciales parciales, su presentación es volu-
minosa y está fuera del alcance de este libro. Los métodos numéricos para
optimización requieren uno o más libros y tampoco están en este libro.
Scilab es un software para cáculos numéricos. Se puede usar de manera in-
teractiva o se puede programar por medio de su lenguaje de alto nivel. Es
de libre uso y está disponible para varias plataformas: Linux, Mac OS X y
Windows. Se puede descargar en la página www.scilab.org, donde además
hay bastante información, manuales en varios idiomas y otras herramientas.
Fue desarrollado por el INRIA (Institut National de Recherche en Informa-
tique et Automatique) de Francia y la ENPC (École Nationale des Ponts et
Chaussées). Actualmente está manejado por Scilab Enterprises. El lengua-
je de programación de Scilab y los nombres de muchas funciones son muy
parecidos o idénticos a los de Matlab y Octave. De hecho, hay traductores
de Matlab a Scilab.
Se supone que el lector tiene nociones de Scilab o que las puede ir adquiriendo
poco a poco. En este libro no está incluı́do un manual de Scilab. En la
página de Scilab o, en general, en internet hay varios manuales y tutoriales
disponibles. Por ejemplo, en www.hectormora.info .
i
En cada capı́tulo hay una sección sobre cómo se utiliza Scilab o qué función
se puede usar para resolver el problema del capı́tulo. Además para algunos
de los métodos hay una implementación sencilla del método en Scilab. Esta
implementación no es de ninguna manera una competidora con la función
especı́fica de Scilab. La implementación aparece simplemente para ayudar
a entender el método y para dar ideas sobre su posible adaptación para
una caso especı́fico. Por ejemplo, si se desea resolver numéricamente una
ecuación diferencial ordinaria, en la gran mayorı́a de los casos prácticos y
reales, la mejor opción es utilizar la función ode de Scilab. En un caso muy
especı́fico o de estructura muy particular y que no esté previsto en Scilab,
serı́a útil hacer una implementación personal.
Las implementaciones hechas en Scilab siguen directamente el algoritmo
sin buscar atajos ni utilización eficiente de las caracterı́sticas matriciales de
Scilab. En las lı́neas de comentario de los programas de Scilab no habrá tildes
ni sı́mbolos especiales como la letra ñ. Esto busca simplemente evitar lo que
algunas veces sucede: estos sı́mbolos especiales desaparecen o quedan modi-
ficados al cambiar de tipo de codificación, de editor o de sistema operativo.
El punto de partida de este libro es Introducción a C y a métodos numéricos,
del mismo autor, publicado en la Universidad Nacional de Colombia y tiene
varias partes iguales. Obviamente no tiene la parte de C pero tiene dos
grandes temas nuevos, ecuaciones diferenciales parciales y valores propios.
El libro o la mayorı́a de él puede ser usado para cursos de un semestre de
Métodos Numéricos para estudiantes de Ingenierı́a o de Ciencias. El autor
estará muy agradecido por correcciones, sugerencias o comentarios enviados
a hectormora@yahoo.com
Quiero agradecer a todas las personas, estudiantes, colegas, correctores de
estilo y otros lectores, por sus opiniones y correcciones, en especial a los
profesores Humberto Sarria de la Universidad Nacional y Manuel Mejı́a de
la Universidad Central. También deseo manifestar mis agradecimientos a
la Universidad Central y a la Directora del Departamento de Matemáticas,
profesora Edel Serrano.
ii
Índice general
Notación IX
1. Preliminares 1
1.1. Repaso de algunos conceptos de cálculo . . . . . . . . . . . . 1
1.2. Sucesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3. Polinomio de Taylor . . . . . . . . . . . . . . . . . . . . . . . 6
1.4. Derivadas parciales . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5. Teorema espectral para matrices simétricas . . . . . . . . . . 11
1.6. Notación O grande . . . . . . . . . . . . . . . . . . . . . . . . 12
1.7. Orden de convergencia . . . . . . . . . . . . . . . . . . . . . . 12
1.8. Números en un computador . . . . . . . . . . . . . . . . . . . 15
1.9. Truncamiento y redondeo . . . . . . . . . . . . . . . . . . . . 17
1.10. Errores absoluto y relativo . . . . . . . . . . . . . . . . . . . . 18
1.11. Errores lineal y exponencial . . . . . . . . . . . . . . . . . . . 19
1.12. Condicionamiento de un problema . . . . . . . . . . . . . . . 21
1.13. Teorema de punto fijo de Banach . . . . . . . . . . . . . . . . 22
2. Sistemas de ecuaciones lineales 24
2.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2. Notación para submatrices en Scilab . . . . . . . . . . . . . . 26
2.3. Métodos ingenuos . . . . . . . . . . . . . . . . . . . . . . . . . 26
iii
ÍNDICE GENERAL ÍNDICE GENERAL
2.4. Sistema diagonal . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5. Sistema triangular superior . . . . . . . . . . . . . . . . . . . 28
2.5.1. Número de operaciones . . . . . . . . . . . . . . . . . 31
2.6. Sistema triangular inferior . . . . . . . . . . . . . . . . . . . . 31
2.7. Método de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.7.1. Número de operaciones . . . . . . . . . . . . . . . . . 39
2.8. Factorización LU . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.9. Método de Gauss con pivoteo parcial . . . . . . . . . . . . . . 43
2.10. Factorización LU=PA . . . . . . . . . . . . . . . . . . . . . . 48
2.11. Método de Cholesky . . . . . . . . . . . . . . . . . . . . . . 51
2.11.1. Matrices definidas positivas . . . . . . . . . . . . . . 52
2.11.2. Factorización de Cholesky . . . . . . . . . . . . . . . 54
2.11.3. Número de operaciones de la factorización . . . . . . 60
2.11.4. Solución del sistema . . . . . . . . . . . . . . . . . . 61
2.12. Solución por mı́nimos cuadrados . . . . . . . . . . . . . . . . 63
2.12.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.12.2. Ecuaciones normales . . . . . . . . . . . . . . . . . . . 65
2.13. Sistemas tridiagonales . . . . . . . . . . . . . . . . . . . . . . 69
2.14. Cálculo de la inversa . . . . . . . . . . . . . . . . . . . . . . 73
3. Métodos iterativos para sistemas de ecuaciones lineales 80
3.1. Método de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . 81
3.2. Normas vectoriales . . . . . . . . . . . . . . . . . . . . . . . . 86
3.2.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3. Normas matriciales . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.4. Condicionamiento de una matriz . . . . . . . . . . . . . . . . 98
3.5. Método de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . 102
iv
ÍNDICE GENERAL ÍNDICE GENERAL
3.6. Método iterativo general . . . . . . . . . . . . . . . . . . . . . 104
3.7. Método de sobrerrelajación . . . . . . . . . . . . . . . . . . . 105
3.8. Métodos de minimización . . . . . . . . . . . . . . . . . . . . 112
3.9. Método del descenso más pendiente . . . . . . . . . . . . . . . 113
3.10. Método del gradiente conjugado . . . . . . . . . . . . . . . . . 117
4. Ecuaciones no lineales 123
4.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
4.2. Método de Newton . . . . . . . . . . . . . . . . . . . . . . . . 126
4.2.1. Orden de convergencia . . . . . . . . . . . . . . . . . . 130
4.3. Método de la secante . . . . . . . . . . . . . . . . . . . . . . . 133
4.4. Método de la bisección . . . . . . . . . . . . . . . . . . . . . . 136
4.5. Método de regula falsi . . . . . . . . . . . . . . . . . . . . . . 140
4.6. Modificación del método de regula ralsi . . . . . . . . . . . . 142
4.7. Método de punto fijo . . . . . . . . . . . . . . . . . . . . . . . 143
4.7.1. Modificación del método de punto fijo . . . . . . . . . 149
4.7.2. Método de punto fijo y método de Newton . . . . . . 150
4.8. Método de Newton en Rn . . . . . . . . . . . . . . . . . . . . 151
4.8.1. Matriz jacobiana . . . . . . . . . . . . . . . . . . . . . 152
4.8.2. Fórmula de Newton en Rn . . . . . . . . . . . . . . . . 152
4.9. Método de Müller . . . . . . . . . . . . . . . . . . . . . . . . . 155
4.10. Método de Bairstow . . . . . . . . . . . . . . . . . . . . . . . 162
5. Interpolación y aproximación 171
5.1. Interpolación . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.1.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.1.2. Caso general . . . . . . . . . . . . . . . . . . . . . . . 174
5.2. Interpolación polinomial de Lagrange . . . . . . . . . . . . . . 177
5.2.1. Polinomios de Lagrange . . . . . . . . . . . . . . . . . 178
v
ÍNDICE GENERAL ÍNDICE GENERAL
5.2.2. Existencia, unicidad y error . . . . . . . . . . . . . . . 181
5.3. Diferencias divididas de Newton . . . . . . . . . . . . . . . . . 183
5.3.1. Tabla de diferencias divididas . . . . . . . . . . . . . . 186
5.3.2. Cálculo del valor interpolado . . . . . . . . . . . . . . 189
5.4. Diferencias finitas . . . . . . . . . . . . . . . . . . . . . . . . . 193
5.4.1. Tabla de diferencias finitas . . . . . . . . . . . . . . . 194
5.4.2. Cálculo del valor interpolado . . . . . . . . . . . . . . 195
5.5. Trazadores cúbicos, interpolación polinomial por trozos, splines198
5.6. Aproximación por mı́nimos cuadrados . . . . . . . . . . . . . 205
6. Integración y diferenciación 211
6.1. Integración numérica . . . . . . . . . . . . . . . . . . . . . . . 211
6.2. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
6.3. Fórmula del trapecio . . . . . . . . . . . . . . . . . . . . . . . 213
6.3.1. Errores local y global . . . . . . . . . . . . . . . . . . 216
6.4. Fórmula de Simpson . . . . . . . . . . . . . . . . . . . . . . . 218
6.4.1. Errores local y global . . . . . . . . . . . . . . . . . . 220
6.5. Otras fórmulas de Newton-Cotes . . . . . . . . . . . . . . . . 224
6.5.1. Fórmulas de Newton-Cotes abiertas . . . . . . . . . . 224
6.6. Cuadratura adaptativa . . . . . . . . . . . . . . . . . . . . . . 225
6.7. Cuadratura de Gauss-Legendre . . . . . . . . . . . . . . . . . 228
6.7.1. Polinomios de Legendre . . . . . . . . . . . . . . . . . 233
6.7.2. Cuadratura de Gauss-Laguerre y Gauss-Hermite . . . 234
6.8. Derivación numérica . . . . . . . . . . . . . . . . . . . . . . . 236
6.8.1. Derivadas parciales . . . . . . . . . . . . . . . . . . . . 238
6.8.2. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 239
7. Ecuaciones diferenciales ordinarias 243
7.0.3. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 244
vi
ÍNDICE GENERAL ÍNDICE GENERAL
7.1. Método de Euler . . . . . . . . . . . . . . . . . . . . . . . . . 245
7.2. Método de Heun . . . . . . . . . . . . . . . . . . . . . . . . . 248
7.3. Método del punto medio . . . . . . . . . . . . . . . . . . . . . 251
7.4. Método de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . 254
7.5. Deducción de RK2 . . . . . . . . . . . . . . . . . . . . . . . . 259
7.6. Control del paso . . . . . . . . . . . . . . . . . . . . . . . . . 261
7.7. Orden del método y orden del error . . . . . . . . . . . . . . . 267
7.7.1. Verificación numérica del orden del error . . . . . . . . 268
7.8. Métodos multipaso explı́citos . . . . . . . . . . . . . . . . . . 269
7.9. Métodos multipaso implı́citos . . . . . . . . . . . . . . . . . . 273
7.10. Sistemas de ecuaciones diferenciales . . . . . . . . . . . . . . 278
7.10.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 281
7.11. Ecuaciones diferenciales de orden superior . . . . . . . . . . 283
7.12. Ecuaciones diferenciales con condiciones de frontera . . . . . 285
7.13. Ecuaciones lineales con condiciones de frontera . . . . . . . . 288
8. Ecuaciones diferenciales parciales 293
8.1. Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
8.2. Elı́pticas: ecuación de Poisson . . . . . . . . . . . . . . . . . . 294
8.3. Parabólicas: ecuación del calor . . . . . . . . . . . . . . . . . 300
8.3.1. Método explı́cito . . . . . . . . . . . . . . . . . . . . . 302
8.3.2. Método implı́cito . . . . . . . . . . . . . . . . . . . . . 305
8.3.3. Método de Crank-Nicolson . . . . . . . . . . . . . . . 308
8.4. Hiperbólicas: ecuación de onda . . . . . . . . . . . . . . . . . 312
8.4.1. Método explı́cito . . . . . . . . . . . . . . . . . . . . . 313
8.4.2. Método implı́cito . . . . . . . . . . . . . . . . . . . . . 317
9. Valores propios 321
9.1. Preliminares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
vii
ÍNDICE GENERAL ÍNDICE GENERAL
9.1.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 325
9.2. Método de la potencia . . . . . . . . . . . . . . . . . . . . . . 325
9.3. Método de la potencia inversa . . . . . . . . . . . . . . . . . . 329
9.4. Factorización QR . . . . . . . . . . . . . . . . . . . . . . . . . 331
9.4.1. Matrices de Householder . . . . . . . . . . . . . . . . . 332
9.4.2. Matrices de Givens . . . . . . . . . . . . . . . . . . . . 335
9.4.3. Factorización QR con matrices de Householder . . . . 337
9.4.4. Factorización QR con matrices de Givens . . . . . . . 341
9.4.5. Solución por mı́nimos cuadrados . . . . . . . . . . . . 345
9.5. Método QR para valores propios de matrices simétricas . . . 346
9.5.1. Tridiagonalización por matrices de Householder para
matrices simétricas . . . . . . . . . . . . . . . . . . . . 347
9.5.2. Tridiagonalización por matrices de Givens para ma-
trices simétricas . . . . . . . . . . . . . . . . . . . . . 349
9.5.3. Valores propios de matrices tridiagonales simétricas . 351
viii
Notación
[a, b] = {x ∈ R : a ≤ x ≤ b}, intervalo cerrado.
]a, b[ = {x ∈ R : a < x < b}, intervalo abierto. También es usual denotar el
intervalo abierto por (a, b) pero puede confundirse con la pareja ordenada
(a, b).
[[i, j]] = {n ∈ Z : i ≤ n ≤ j}, intervalo de enteros (i y j son enteros).
Si A es un conjunto de números reales acotado superiormente, el supremo
de A es el mı́nimo del conjunto de cotas superiores de A:
sup A = min{M : M es cota superior de A} .
C[a, b] es el conjunto de funciones continuas que van del intervalo [a, b] en
los reales.
C1[a, b] es el conjunto de funciones definidas sobre [a, b] cuya primera deriva-
da existe y es continua.
Cn[a, b] es el conjunto de funciones con n derivadas continuas sobre [a, b].
Con esta notación C[a, b] = C0[a, b]. Algunas veces, por brevedad, se dice
que f es de clase Cn.
C∞[a, b] es el conjunto de funciones que se pueden derivar tantas veces como
se desee. Por ejemplo: f(x) = ex, g(x) = 3x5 − 8x2 + 12, h(x) = sen(2x).
Pn es el conjunto de todos los polinomios de grado menor o igual a n.
I(c, d) es el intervalo cerrado más pequeño contiene a c y a d. Por
ejemplo I(3, 5) = [3, 5], I(2, 1.8) = [1.8, 2].
Rn = {(x1, x2, . . . , xn) : xj ∈ R, ∀j}.
ix
Rm×n = conjunto de matrices reales de tamaño m×n. Si A ∈ Rm×n, entonces
A =





a11 a12 . . . a1n
a21 a22 . . . a2n
.
.
.
.
.
.
...
.
.
.
am1 am2 . . . amn





aij es la entrada (“elemento” o componente) de A en la fila i y en la columna
j.
Rn×1 = conjunto de matrices columna de n componentes.
R1×n = conjunto de matrices fila de n componentes.
R1×1 = R.
AT
= la transpuesta de la matriz A.
Rn := Rn×1, es decir,
x = (x1, x2, . . . , xn) :=





x1
x2
.
.
.
xn





xT
=

x1 x2 . . . xn

Ai· =

ai1 ai2 . . . ain

, fila i-ésima de la matriz A.
A·j =





a1j
a2j
.
.
.
amj





, columna j-ésima de la matriz A.
kxk1 =
n
X
i=1
|xi|
kxk2 =
n
X
i=1
x2
i
1/2
kxk∞ = max
1≤i≤n
|xi|
f′(x̄) = ∇f(x̄) = gradf (x̄) = gradiente de f calculado en x̄,
f′
(x̄) =













∂f
∂x1
(x̄)
∂f
∂x2
(x̄)
.
.
.
∂f
∂xn
(x̄)













f′′(x̄) = ∇2f(x̄) = Hf (x̄) = H(x̄) = Hessiano o matriz hessiana de f en x̄,
f′′
(x̄) =













∂2f
∂x2
1
(x̄)
∂2f
∂x2∂x1
(x̄) . . .
∂2f
∂xn∂x1
(x̄)
∂2f
∂x1∂x2
(x̄)
∂2f
∂x2
2
(x̄) . . .
∂2f
∂xn∂x2
(x̄)
.
.
.
.
.
.
...
.
.
.
∂2f
∂x1∂xn
(x̄)
∂2f
∂x2∂xn
(x̄) . . .
∂2f
∂x2
n
(x̄)













Rn
+ = {(x1, x2, ..., xn) : xi ≥ 0, ∀i}, el ortante no negativo de Rn.
ej = j-ésima columna de la matriz identidad
ρ(A) = max{|λi|C : λi es valor propio de A}, radio espectral de A.
♦ : fin del ejemplo.
 : fin de demostración.
⌊x⌋ = max{n ∈ Z : n ≤ x}, parte entera o parte entera inferior o piso de x.
⌈x⌉ = min{n ∈ Z : n ≥ x}, parte entera superior o techo de x.
espec(A) = espectro de A = conjunto de valores propios de A.
sssi = si y solamente si
Mı́nimo o valor mı́nimo y argumento que minimiza. Sea f : Rn → R una
función. Cuando existen,
min f(x) = min{f(x) : x ∈ Rn
}
argmin f(x) = x̄ si f(x̄) = min f(x)
Por ejemplo, si f(x1, x2) = (x1 − 2)2 + (x2 − 3)2 + 4,
min f(x) = 4
argmin f(x) = (2, 3).
En la escritura de números decimales, las cifras enteras están separadas de
las decimales por medio de un punto, en lugar de una coma como es la
convención del español. No se utiliza el punto para separar las unidades de
mil de las centenas. Por ejemplo, en este libro se escribe 12345.67 en lugar
de 12.345, 67.
Capı́tulo 1
Preliminares
El siguiente resultado sobre polinomios se usará en la sección de polinomios
de Lagrange.
Teorema 1.1. Sea p ∈ Pn, es decir, p es un polinomio de grado menor o
igual a n. Si existen n + 1 valores diferentes x1, x2, ..., xn, xn+1 tales que
p(xi) = 0 ∀i, entonces p(x) = 0 ∀x, es decir, p es el polinomio nulo.
1.1. Repaso de algunos conceptos de cálculo
En lo que sigue, mientras no se diga lo contrario, se considera una función
f : R → R y un número real c.
Se dice que el número real L es el lı́mite de f cuando x tiende a c, denotado
por,
lim
x→c
f(x) = L ,
si dado ε  0, existe δ  0 tal que
si 0  |x − c| ≤ δ, entonces |f(x) − L| ≤ ε.
La función f es continua en c, si lim
x→c
f(x) existe y
lim
x→c
f(x) = f(c) .
1
2 CAPÍTULO 1. PRELIMINARES
a b
x̃
f(x̃)
x̄
f(x̄)
Figura 1.1. Teorema de valores extremos
Se dice que f es continua en el intervalo [a, b], si es continua en todos los
puntos de [a, b].
Se dice que f es derivable en c, si existe el lı́mite
lim
h→0
f(c + h) − f(c)
h
= lim
ξ→c
f(ξ) − f(c)
ξ − c
.
En este caso, el lı́mite es la derivada de f en c y se denota por f′(c).
Teorema 1.2. Teorema de valores extremos. Ver figura 1.1. Sea f
continua en el intervalo [a, b] (recordemos que se puede denotar f ∈ C[a, b] ),
entonces existe por lo menos un x̄ ∈ [a, b] tal que
f(x̄) ≤ f(x) para todo x ∈ [a, b] .
Este punto x̄ se llama minimizador absoluto o global, o punto de mı́nimo
global de f en [a, b]. De manera análoga, existe por lo menos un punto x̃,
maximizador global o punto de máximo global, tal que
f(x̃) ≥ f(x) para todo x ∈ [a, b] .
Teorema 1.3. Teorema del valor intermedio. Ver figura 1.2. Sea f
continua en [a, b], m = min{f(a), f(b)}, M = max{f(a), f(b)}. Si t es un
valor intermedio, m ≤ t ≤ M, entonces existe por lo menos un c ∈ [a, b] tal
que
f(c) = t.
Héctor M. Mora E. Métodos Numéricos con Scilab 3
a b
M
m
t
c c̃
Figura 1.2. Teorema del valor intermedio
a b
c
Figura 1.3. Teorema de Rolle
Teorema 1.4. Teorema de Rolle. Ver figura 1.3. Si f es una función
continua en [a, b], derivable en ]a, b[ y f(a) = f(b), entonces existe c ∈]a, b[
tal que
f′
(c) = 0.
Teorema 1.5. Teorema del valor medio. Ver figura 1.4. Si f es una
función continua en [a, b] y derivable en ]a, b[, entonces existe c ∈]a, b[ tal
que
f′
(c) =
f(b) − f(a)
b − a
.
4 CAPÍTULO 1. PRELIMINARES
a b
c
Figura 1.4. Teorema del valor medio
1.2. Sucesiones
Una sucesión es simplemente una función que va del conjunto de los números
naturales en los reales:
u :N → R
n 7→ un
En algunos casos las sucesiones están definidas para los naturales positivos
(no para el 0). Como se observa, habitualmente se escribe un en lugar de
u(n). Es frecuente denotar la sucesión ası́: {un}n∈N o {un}∞
n=0 o, si no hay
confusión, de manera aún más simple, {un} o un.
Ejemplo 1.1. un = 1/n2, vn = 5 +
(−1)n
n3
, wm =
m3 − 2m
100m2 + 20m
. ✸
Una sucesión se puede definir de manera recurrente a partir del primer
término o de los primeros términos. Por ejemplo, la sucesión de números
de Fibonacci (Leonardo de Pisa) se define por:
u0 = 0
u1 = 1
un = un−2 + un−1, para n ≥ 2.
Ası́, u0 = 0, u1 = 1, u2 = 1, u3 = 2, u4 = 3, u5 = 5, u6 = 8, u7 = 13, ...
Se dice que la sucesión xn converge al número L, o que L es el lı́mite de la
sucesión, si dado cualquier ε  0 (generalmente pequeño), existe un natural
N tal que
|xn − L| ≤ ε para n  N.
Héctor M. Mora E. Métodos Numéricos con Scilab 5
Es usual escribir
lim
n→∞
xn = L ,
o
xn −→
n→∞
L ,
o simplemente, si no hay confusión,
xn −→ L .
Ejemplo 1.2. Sea
xn = 5 +
1
n2
.
Veamos que el lı́mite es 5. Si ε = 0.01, se requiere que
5 +
1
n2
− 5 ≤ 0.01
1
n2
≤ 0.01
1
0.01
≤ n2
100 ≤ n2
10 ≤ n.
Es decir, para ε = 0.01 basta con tomar N ≥ 10. En general, para un ε
cualquiera, basta con tomar N ≥
r
1
ε
. ✸
Se dice que la sucesión xn tiende a +∞ y se escribe:
lim
n→∞
xn = +∞
o simplemente
xn −→ +∞
6 CAPÍTULO 1. PRELIMINARES
si dado cualquier real M  0 (generalmente grande), existe un natural N
tal que
xn  M para n  N.
En este caso, la sucesión no es convergente, pero, como se observa, se utiliza
la misma notación. Se define y se denota de manera análoga cuando la
sucesión tiende a −∞.
Ejemplo 1.3. La sucesión geométrica an converge o diverge dependiendo
de a:
lim
n→∞
an
= 0, si |a|  1,
lim
n→∞
an
= 1, si a = 1,
lim
n→∞
an
= +∞, si a  1,
lim
n→∞
an
no existe, si a ≤ −1. ✸
1.3. Polinomio de Taylor
Sea la función f : R → R continua y derivable cuantas veces sea necesario y
sea x̄ un valor fijo. Se desea encontrar p ∈ P1 tal que
p(x̄) = f(x̄) y
p′
(x̄) = f′
(x̄).
Este polinomio es
p(x) = f(x̄) + f′
(x̄)(x − x̄).
Ahora se desea encontrar p ∈ P2 tal que
p(x̄) = f(x̄),
p′
(x̄) = f′
(x̄),
p′′
(x̄) = f′′
(x̄).
Entonces
p(x) = f(x̄) + f′
(x̄)(x − x̄) +
f′′(x̄)
2
(x − x̄)2
.
Héctor M. Mora E. Métodos Numéricos con Scilab 7
De manera general, sea p ∈ Pn tal que
p(x̄) = f(x̄),
p′
(x̄) = f′
(x̄),
p′′
(x̄) = f′′
(x̄),
.
.
.
p(n)
(x̄) = f(n)
(x̄).
Este polinomio es
p(x) = f(x̄) + f′
(x̄)(x − x̄) +
f′′(x̄)
2
(x − x̄)2
+ · · · +
f(n)(x̄)
n!
(x − x̄)n
=
n
X
k=0
f(k)(x̄)
k!
(x − x̄)k
(1.1)
llamado polinomio de Taylor de orden n alrededor de x̄.
Teorema 1.6. Sea f ∈ Cn[a, b], tal que f(n+1) existe en [a, b] y x̄ ∈ [a, b].
Entonces, para todo x ∈ [a, b]
f(x) = pn(x) + Rn(x),
donde pn(x) es el polinomio de Taylor de orden n y
Rn(x) =
f(n+1)(ξ(x))
(n + 1)!
(x − x̄)n+1
(1.2)
es el residuo, con ξ(x) entre x̄ y x (es decir, ξ(x) ∈ I(x̄, x) ). Si f es de clase
C∞, entonces
f(x) =
∞
X
k=0
f(k)(x̄)
k!
(x − x̄)k
.
La anterior expresión es el desarrollo en serie de Taylor de f alrededor de
x̄.
El teorema anterior no permite evaluar exactamente el residuo, pero sı́ per-
mite acotarlo:
|Rn(x)| ≤
|x − x̄|n+1
(n + 1)!
max
t∈I(x,x̄)
f(n+1)
(t) (1.3)
8 CAPÍTULO 1. PRELIMINARES
Ejemplo 1.4. Obtener la serie de Taylor de f(x) = ex alrededor de x̄ = 0.
f′
(x) = ex
f′′
(x) = ex
f(n)
(x) = ex
f(0) = 1
f′
(0) = 1
f′′
(0) = 1
f(n)
(0) = 1
ex
= 1 + x +
x2
2
+
x3
3!
+
x4
4!
+ · · ·
ex
=
∞
X
n=0
xn
n!
. ✸
Ejemplo 1.5. Obtener la serie de Taylor de f(x) = sen(x) alrededor de
x̄ = 0.
f′
(x) = cos(x)
f′′
(x) = − sen(x)
f′′′
(x) = − cos(x)
f(4)
(x) = sen(x)
f(5)
(x) = cos(x)
f(0) = 0
f′
(0) = 1
f′′
(0) = 0
f′′′
(0) = −1
f(4)
(0) = 0
f(5)
(0) = 1
sen(x) = x −
x3
3!
+
x5
5!
−
x7
7!
+ · · · ✸
Ejemplo 1.6. Obtener la serie de Taylor de f(x) = cos(x) alrededor de
x̄ = 0.
Héctor M. Mora E. Métodos Numéricos con Scilab 9
f′
(x) = − sen(x)
f′′
(x) = − cos(x)
f′′′
(x) = sen(x)
f(4)
(x) = cos(x)
f(5)
(x) = − sen(x)
f(0) = 1
f′
(0) = 0
f′′
(x) = −1
f′′′
(x) = 0
f(4)
(0) = 1
f(5)
(0) = 0
cos(x) = 1 −
x2
2!
+
x4
4!
−
x6
6!
+ · · · ✸
Ejemplo 1.7. Obtener el polinomio de Taylor de orden 2 de cos(x) alrede-
dor de π, acotar el error para x = 3 y calcular el error.
p2(x) = cos(π) − sen(π)(x − π) −
cos(π)
2
(x − π)2
p2(x) = −1 +
1
2
(x − π)2
|error| ≤
|3 − π|3
6
max
t∈[3,π]
| sen(t)|
|error| ≤ 0.0004731 × sen(3)
|error| ≤ 0.0004731 × 0.1411 = 0.0000668
|error| ≤ 0.0000668
En este caso sencillo, se puede evaluar explı́citamente el error:
|error| = | cos(3) − p2(3)|
= | − 0.9899925 − −0.9899758|
= 0.0000167 ✸
10 CAPÍTULO 1. PRELIMINARES
Algunas veces se expresa x = x̄ + h, entonces el polinomio de Taylor, el
residuo y la serie de Taylor quedan:
pn(x̄ + h) =
n
X
k=0
f(k)(x̄)
k!
hk
(1.4)
Rn(x̄ + h) =
f(n+1)(ξ(h))
(n + 1)!
hn+1
, ξ(h) ∈ I(0, h), (1.5)
f(x̄ + h) =
∞
X
k=0
f(k)(x̄)
k!
hk
. (1.6)
1.4. Derivadas parciales
Sea f : Rn → R y x̄ ∈ Rn. Si se dejan fijas todas las variables salvo
la primera, se obtiene una función de una sola variable. Se puede entonces
pensar en buscar (puede existir o no) la derivada de esta nueva función.
Se obtiene ası́ la derivada parcial de f con respecto a x1. De manera más
precisa, si el siguiente lı́mite existe, este es la derivada parcial de f con
respecto a x1 evaluada en x̄, denotada como aparece a continuación:
∂f
∂x1
(x̄) = lim
h→0
f(x̄1 + h, x̄2, ..., x̄n) − f(x̄1, x̄2, ..., x̄n)
h
.
De manera análoga,
∂f
∂x2
(x̄) = lim
h→0
f(x̄1, x̄2 + h, x̄3, ..., x̄n) − f(x̄1, x̄2, x̄3, ..., x̄n)
h
.
Con frecuencia se utilizan las derivadas parciales, no en un punto especı́fi-
co como x̄ = (2, −2, 4, 1/3), sino en un punto variable. Para obtener las
derivadas parciales se utilizan las mismas reglas de la derivación en una
variable, considerando las otras variables como constantes.
Héctor M. Mora E. Métodos Numéricos con Scilab 11
Por ejemplo, si f(x1, x2, x3, x4) = (4x3
1 + 6x4)9 + 5x1x2 + 8x4,
∂f
∂x1
= 9(4x3
1 + 6x4)8
(12x2
1) + 5x2,
∂f
∂x2
= 5x1,
∂f
∂x3
= 0,
∂f
∂x4
= 54(4x3
1 + 6x4)8
+ 8.
1.5. Teorema espectral para matrices simétricas
Este teorema de gran importancia, algunas veces no aparece en los libros
introductorios de Álgebra Lineal, razón por la cual está en este capı́tulo.
Teorema 1.7. Si A es una matriz real simétrica, existe una matriz Q orto-
gonal (Q−1 = QT
o QQT
= I) tal que
D = QT
AQ ,
donde D es una matriz diagonal. Otra manera de decirlo es: A es diagona-
lizable por medio de una matriz ortogonal.
Estas dos matrices Q y D, en general, no son únicas, sin embargo hay car-
caterı́sticas comunes. Los elementos diagonales de D son los valores propios
de A, siempre reales por ser A simétrica. Las columnas de la matriz Q son
vectores propios normalizados de A.
Ejemplo 1.8.
A =

1 2
2 3

D =

2 −
√
5 0
0 2 +
√
5

Q =




−
q
1+
√
5
2
√
5
q
−1+
√
5
2
√
5
q
−1+
√
5
2
√
5
q
1+
√
5
2
√
5




12 CAPÍTULO 1. PRELIMINARES
1.6. Notación O grande
Algunas veces es útil comparar aproximadamente el comportamiento de dos
funciones en las cercanı́as de 0. Se dice que, cuando x → 0, f(x) es O grande
de g(x),
f(x) = O(g(x))
si existen dos constantes positivas C y δ (pequeña) tales que
|f(x)| ≤ C|g(x)| para |x| ≤ δ.
Ejemplo 1.9. Sea f(x) = 4x3+5x6. Recordemos que, si 0  y  1, entonces
y  y2  y3  · · · . Ası́, si |x|  1,
|x3
| ≤ |x|
|4x3
| ≤ 4|x|
|x6
| ≤ |x|
|5x6
| ≤ 5|x|
|4x3
+ 5x6
| ≤ 9|x|
4x3
+ 5x6
= O(x).
Aunque lo anterior es cierto, es preferible buscar el mayor exponente posible.
Mediante pasos semejantes a los anteriores llegamos a
4x3
+ 5x6
= O(x3
).
Obviamente, no es cierto que 4x3 + 5x6 = O(x4). ✸
Según la notación O grande, el residuo para el polinomio de Taylor (1.5) se
puede expresar
Rn(x̄ + h) = O(hn+1
).
1.7. Orden de convergencia
Sea {xk} una sucesión de números reales con lı́mite L, tal que xk 6= L para
todo k. Se dice que la convergencia tiene convergencia lineal, si el siguiente
lı́mite existe:
lim
k→∞
|xk+1 − L|
|xk − L|
= β ∈]0, 1[.
Héctor M. Mora E. Métodos Numéricos con Scilab 13
Se dice que la convergencia tiene orden de convergencia p  1, si el siguiente
lı́mite existe.
lim
k→∞
|xk+1 − L|
|xk − L|p
= β  0 .
En este caso se dice que β es la tasa de convergencia. Obsérvese que cuando
p = 1 (convergencia lineal), se exige además que β  1.
La convergencia se llama superlineal si:
lim
k→∞
|xk+1 − L|
|xk − L|
= 0.
La convergencia se llama sublineal si:
lim
k→∞
|xk+1 − L|
|xk − L|
= 1.
Cuando el orden es 2, se dice que la convergencia es cuadrática.
Si
lim
k→∞
|xk+1 − L|
|xk − L|p
= 0 ,
el orden de convergencia es superior a p.
Lo ideal es tener órdenes de convergencia altos con tasas pequeñas. Una
convergencia sublineal es una convergencia muy lenta. Una convergencia
cuadrática es muy buena, por ejemplo, el método de Newton, que se verá en
el capı́tulo 4, tiene convergencia cuadrática.
Ejemplo 1.10. xk = π +
1
k
. Esta sucesión converge a π. Veamos qué pasa
con p = 1.
lim
k→∞
|xk+1 − L|
|xk − L|
= lim
k→∞
|π +
1
k + 1
− π|
|π +
1
k
− π|
= lim
k→∞
1
k + 1
1
k
= lim
k→∞
k
k + 1
= 1.
14 CAPÍTULO 1. PRELIMINARES
Entonces, podemos decir que la convergencia es sublineal. ✸
Ejemplo 1.11. xk =
1
2k
. Esta sucesión converge a 0. Directamente veamos
qué pasa con p = 1
lim
k→∞
|xk+1 − L|
|xk − L|1
= lim
k→∞
1
2k+1
1
2k
= lim
k→∞
2k
2k+1
= lim
k→∞
1
2
=
1
2
Entonces, la sucesión tiene convergencia lineal con tasa 1/2. ✸
Ejemplo 1.12.
x1 =
69
10
xn = 6 + (xn−1 − 6)2
, n ≥ 2.
Los primeros valores son los siguientes:
n xn
1 6.900000000000000
2 6.810000000000000
3 6.656100000000000
4 6.430467210000001
5 6.185302018885185
6 6.034336838202925
7 6.001179018457774
8 6.000001390084524
9 6.000000000001933
10 6.000000000000000
Héctor M. Mora E. Métodos Numéricos con Scilab 15
Se puede mostrar que
xn = 6 + yn , n = 1, 2, ...
y1 =
9
10
yn = y2
n−1 , n = 2, 3, ...
yn =

9
10
2n−1
, n = 1, 2, ...
Como yn → 0, entonces xn → 6.
lim
k→∞
|xk+1 − L|
|xk − L|p
= lim
k→∞
yk+1
yp
k
= lim
k→∞
y2
k
yp
k
= lim
k→∞
y2−p
k
Si p = 1, el lı́mite es 0, es decir, la convergencia es superlineal. Si p = 2, el
lı́mite es 1, luego la convergencia es cuadrática.
Cuando la convergencia es cuadrática, el número de dı́gitos decimales exactos
se va duplicando (aproximadamente) en cada iteración. En el ejemplo, para
los valores de n = 6, 7, 8, 9, el número de dı́gitos decimales exactos (ceros
en este caso) es 1, 2, 5, 11. ✸
1.8. Números en un computador
Sea x un número real positivo. La representación decimal normalizada de x
en un computador, con k cifras significativas, es
x̃ = 0.d1d2 · · · dk × 10n
donde di es un entero en el intervalo [0, 9] y d1 ≥ 1. El valor k, los valores
mı́nimo y máximo permitidos para n, dependen del computador, del sistema
operativo o del lenguaje. Una manera aproximada de obtener estos valores
en Scilab es la siguiente:
16 CAPÍTULO 1. PRELIMINARES
format(30)
x = 1/3
El resultado es
0.3333333333333333148296
Únicamente hay 16 dı́gitos correctos, los demás son “basura” producida por
Scilab para satisfacer el formato deseado. Esto nos indica que en Scilab,
no hay más de 16 cifras significativas, en la representación interna de un
número.
En relación con el concepto anterior, está el épsilon de la máquina, que se
define ası́:
εmaq = min{t  0 : 1 + t 6= 1}
La anterior definición usa los números utilizados en el computador. Este
conjunto de números es finito y la definición tiene sentido. Obviamente, si
los valores t se tomaran en R, el valor épsilon de la máquina estarı́a mal
definido.
Una manera aproximada de obtener el épsilon de la máquina consiste en
buscar, por ensayo y error, un valor x tal que 1 + x  1 y 1 + x/10 = 1.
La orden
x = 1.0e-10; x1 = 1+x; x2 = 1+x/10; (x1  1)  (x2 == 1)
produce F, false, en cambio,
x = 1.0e-15; x1 = 1+x; x2 = 1+x/10; (x1  1)  (x2 == 1)
produce T true. Esto nos indica que un valor aproximado es justamente
10−15. Scilab tiene un valor predefinido
%eps = 2.220E-16
Para averiguar si un número positivo y pequeño es considerado como nulo,
se puede ensayar con diferentes valores de la potencia de 10, por ejemplo:
x = 1.0e-20; x == 0.0
produce como resultado F, lo que indica que x no es nulo. Al ensayar
x = 1.0e-100; x == 0.0
el resultado de nuevo es F. Después de varios ensayos
x = 1.0e-323; x == 0.0
Héctor M. Mora E. Métodos Numéricos con Scilab 17
produce F y
x = 1.0e-324; x == 0.0
produce T, es decir, 10−324 es considerado como nulo.
Para no recurrir al método de ensayo y error, se puede utilizar la siguiente
secuencia de órdenes:
x = 1;
while x/10  0.0
x0 = x;
x = x/10;
end
x_final = x0
El resultado obtenido es 9.881-323 . Obsérvese que x toma los valores 1,
1/10, 1/100, ... Sin embargo, el resultado obtenido no es exactamente una
potencia de 10.
Ahora queremos averiguar qué tan grandes pueden ser los números en Scilab.
Ası́, la orden
x = 1.0e308
muestra en la pantalla 1.000+308, resultado esperado. La orden
x = 1.0e309
muestra en la pantalla Inf , lo que da cuenta de que Scilab considera
10309 como “infinito” y no lo puede manejar adecuadamente.
1.9. Truncamiento y redondeo
Sea x un real (supuesto positivo por facilidad de presentación),
x̃ = 0.d1d2 · · · dk × 10n
su representación normalizada y t, un entero positivo menor que k. El
número obtenido por truncamiento con t cifras significativas es
x̃′
= 0.d1d2 · · · dt × 10n
.
18 CAPÍTULO 1. PRELIMINARES
Dicho de otra forma, se quitan los últimos k − t dı́gitos. El redondeo con t
cifras significativas se puede presentar de varias maneras equivalentes. Una
de ellas es la siguiente:
redondeo(x, t) = truncamiento(x̃ + 0. 00 · · · 0
| {z }
t−1
5 × 10n
) , t)
truncamiento(1234.56789, 2) = 1200
truncamiento(1234.56789, 6) = 1234.56
redondeo(1234.56789, 2) = 1200
redondeo(1234.56789, 6) = 1234.57
Una manera sencilla, que funciona cuando dt ≤ 8, es la siguiente: los primeros
t − 1 dı́gitos son los mismos y el dı́gito en la posición t es:
δt =
(
dt si dt+1 ≤ 4
dt + 1 si dt+1 ≥ 5.
Si dt = 9 y dt+1 ≤ 4, entonces δt = dt. Ahora bien, el caso especial se tiene
si dt = 9 y dt+1 ≥ 5, entonces se suma 1 a dt = 9, volviéndose 10 y se escribe
δt = 0, pero hay que agregar (“llevar”) 1 al dı́gito dt−1, etc.
1.10. Errores absoluto y relativo
Si x es un número real y x̃ es una aproximación, se definen el error absoluto
(siempre no negativo) y el error relativo cuando x 6= 0, de la siguiente forma:
error absoluto = |x − x̃| ,
error relativo =
|x − x̃|
|x|
.
Ejemplo 1.13. Sean x y y números reales, x̃ el redondeo de x con n = 5
cifras significativas, ỹ el redondeo de y con n cifras significativas, z = x − y,
z̃ el redondeo de x̃ − ỹ con n cifras significativas, ea el error absoluto entre
z y z̃, er el error relativo.
Héctor M. Mora E. Métodos Numéricos con Scilab 19
x y x̃ ỹ z z̃ ea er
1/7 2/3 0.14286 0.66667 −11/21 −0.52381 4.8e-7 9.1e-7
1/7 0.14284 0.14286 0.14284 0.00001714... 0.00002 2.9e-6 1.7e-1
En el segundo caso, el error relativo es grande, aproximadamente del 17 %.
✸
Los principales casos en los que los errores pueden ser grandes o que pueden
inducir errores grandes, son:
1. Suma de cantidades de tamaños muy diferentes.
2. Resta de cantidades muy parecidas.
3. División por un número cercano a cero.
Estos casos, en cuanto sea posible, deben evitarse y, si no es posible, los
resultados deben ser interpretados de manera muy cuidadosa.
1.11. Errores lineal y exponencial
En los procesos numéricos, muy frecuentemente, es necesario realizar muchas
operaciones aritméticas. Sea e0 el error inicial en los datos o en la primera
operación y en , el error después de n operaciones. El error inicial incide
en las operaciones siguientes y los errores, en la gran mayorı́a de los casos,
van aumentando progresivamente. Usualmente se dice que los errores se
propagan de dos maneras:
Error lineal: en ≈ nce0
Error exponencial: en ≈ cne0, con c  1.
Es claro que un error exponencial (propagación exponencial del error) es
muy peligroso y no es conveniente utilizar un algoritmo con esta clase de
error. Con base en el tipo de error, se habla de algoritmos estables cuando
el error es lineal y, de algoritmos inestables cuando el error es exponencial.
Ejemplo 1.14. Consideremos la sucesión definida ası́ (ver [KiC94]):
x0 = 1
x1 = 1/3
(∗) xn =
13
3
xn−1 −
4
3
xn−2, n ≥ 2.
20 CAPÍTULO 1. PRELIMINARES
Se puede demostrar que
(∗∗) xn =
1
3n
, n = 0, 1, 2, ...
La siguiente tabla muestra los valores de x̄n obtenidos en Scilab aplicando
la fórmula explı́cita (**), x̃n obtenido por la fórmula de recurrencia (*) con
todas las cifras que utiliza Scilab, x̃′
n obtenido por la fórmula de recurrencia
(*) pero trabajando con 8 cifras significativas y x̃′′
n obtenido por la fórmula
de recurrencia (*) pero usando 4 cifras significativas.
n x̄n (**) x̃n (*) x̃′
n 8 cifras x̃′′
n 4 cifras
0 1.00000000 1.00000000 1.00000000 1.00000000
1 0.33333333 0.33333333 0.33333333 0.33330000
2 0.11111111 0.11111111 0.11111110 0.11100000
3 0.03703704 0.03703704 0.03703700 0.03670000
4 0.01234568 0.01234568 0.01234554 0.01100000
5 0.00411523 0.00411523 0.00411468 -0.00126000
6 0.00137174 0.00137174 0.00136954 -0.02012000
7 0.00045725 0.00045725 0.00044843 -0.08550000
8 0.00015242 0.00015242 0.00011715 -0.34370000
9 0.00005081 0.00005081 -0.00009025 -1.37500000
10 0.00001694 0.00001694 -0.00054728 -5.50000000
11 0.00000565 0.00000564 -0.00225123 -22.0000000
12 0.00000188 0.00000188 -0.00902562 -88.0000000
13 0.00000063 0.00000063 -0.03610937 -352.000000
14 0.00000021 0.00000021 -0.14443977 -1408.00000
15 0.00000007 0.00000006 -0.57775985 -5632.00000
16 0.00000002 -0.00000003 -2.31103960 -22520.0000
17 0.00000001 -0.00000020 -9.24415860 -90070.0000
18 0.00000000 -0.00000085 -36.9766340 -360300.000
19 0.00000000 -0.00000340 -147.906540 -1441000.00
20 0.00000000 -0.00001361 -591.626160 -5764000.00
21 0.00000000 -0.00005445 -2366.50460 -23060000.0
25 0.00000000 -0.01393856 -605825.110 -5.904E+09
Se observa que la fórmula de recurrencia es un proceso inestable. La inesta-
bilidad se nota más cuando hay menos cifras significativas. ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 21
1.12. Condicionamiento de un problema
Supongamos que un problema se puede resolver de manera exacta. Se dice
que un problema es bien condicionado, si al hacer cambios pequeños en
los datos, se obtienen cambios pequeños en la solución. Un problema es
mal condicionado, si al hacer cambios pequeños en los datos, puede haber
cambios grandes en la solución.
Cuando no hay un método exacto de solución, se dice que un problema es
mal condicionado si, al hacer cambios pequeños en los datos puede haber
cambios grandes en la solución, con todos los métodos utilizados.
Ejemplo 1.15. Consideremos el sistema de ecuaciones Ax = b, donde
A =

10.01 10.00
10.00 9.99

, b =

20.01
19.99

.
La solución exacta de este problema es
x = [1 1]T
,
Consideremos ahora un sistema de ecuaciones muy parecido, Ax′ = b′, única-
mente hay cambios pequeños en b,
b′
=

20.02
19.98

.
La solución exacta de este problema es
x′
= [−1998 2002]T
,
Este problema es mal condicionado, ya que estos cambios pequeños en b
produjeron cambios grandes en la solución. ✸
En un problema puede darse el siguiente caso: unos cambios pequeños en
los datos producen cambios pequeños en los resultados, pero, otros cambios
pequeños en los datos producen cambios grandes en los resultados. De todas
maneras el problema es mal condicionado.
Más adelante se verá cómo determinar el buen o mal condicionamiento de
un sistema de ecuaciones.
22 CAPÍTULO 1. PRELIMINARES
1.13. Teorema de punto fijo de Banach
Es un resultado muy importante del análisis matemático. Se aplica en espa-
cios métricos. A continuación, están las definiciones previas y su enunciado
para el caso particular de un espacio vectorial con norma, más especı́fica-
mente para Rn. En el capı́tulo 3 está la definición de norma, denotada por
|| · ||.
Sea f : Rn → Rn una función. Un punto x̄ ∈ Rn es un punto fijo de f si
f(x̄) = x̄.
Se dice que f es una contracción si existe 0 ≤ k  1, tal que,
||f(x) − f(y)|| ≤ k ||x − y||, ∀ x, y ∈ Rn
.
Teorema 1.8. Si f : Rn → Rn es una contracción, entonces tiene un único
punto fijo x̄.
Ver detalles y demostración en [Apo79].
Ejercicios
1.1 Obtenga p2(x), el polinomio de Taylor de orden 2, para f(x) = ex
alrededor de x̄ = 0.5. Utilice 6 cifras decimales. Calcule p2(0.7). Por
medio de (1.3) obtenga una cota para el error. Compare con el error
realmente cometido.
1.2 Como el ejercicio 1, para f(x) = ex, x̄ = 0.5 y p3(0.7).
1.3 Como el ejercicio 1, para f(x) =
√
x, x̄ = 1 y p2(1.1).
1.4 Como el ejercicio 1, para f(x) = ln x, x̄ = 1 y p2(0.9).
1.5 Como el ejercicio 1, para f(x) = seng (x) (la función seno para el
ángulo en grados), x̄ = 90 y p3(80).
1.6 Sea f(x) = cos(x), x̄ = 0. ¿Cuál es el mı́nimo valor de n para el cual
la cota del error según (1.3) es menor o igual a 10−6 para pn(0.1)?
1.7 Sea f(x) = cos(x), x̄ = 0. ¿Cuál es el mayor valor de t para el cual la
cota del error según (1.3) es menor o igual a 10−6 para p2(t)?
Héctor M. Mora E. Métodos Numéricos con Scilab 23
1.8 Sea x = 0.6. Obtenga su expresión binaria. Sea x̄ la expresión truncada
a cuatro dı́gitos binarios (después del punto). ¿Cuáles son los errores
absoluto y relativo? Sea x̃ la expresión redondeada a cuatro dı́gitos.
¿Cuáles son los errores absoluto y relativo? Responda las mismas pre-
guntas utilizando esta vez 8 dı́gitos.
Capı́tulo 2
Sistemas de ecuaciones
lineales
Uno de los problemas numéricos más frecuentes, o tal vez el más frecuente,
consiste en resolver un sistema de ecuaciones de la forma
Ax = b (2.1)
donde A es una matriz cuadrada, de tamaño n × n, invertible. Esto implica
que el sistema tiene una única solución.
Se trata de resolver un sistema de ecuaciones de orden mucho mayor que
2. En la práctica se pueden encontrar sistemas de tamaño 20, 100, 1000 o
mucho más grandes. Puesto que se trata de resolver el sistema con la ayuda
de un computador, entonces las operaciones realizadas involucran errores de
redondeo o truncamiento. La solución obtenida no es absolutamente exacta,
pero se desea que la acumulación de los errores sea relativamente pequeña
o casi despreciable.
2.1. En Scilab
Para resolver (2.1) es necesario haber definido una matriz cuadrada a y un
vector columna b. La orden es simplemente
x = ab
Por ejemplo,
24
Héctor M. Mora E. Métodos Numéricos con Scilab 25
a = [ 2 3; 4 5], b = [-5; -7], x = ab
da como resultado
x =
2.
- 3.
Una manera que también permite obtener la solución es x = inv(a)*b,
pero requiere más operaciones y el resultado final es menos preciso puesto
que se calcula explı́citamente la inversa de la matriz.
Ejemplo 2.1. Las siguientes órdenes de Scilab
n = 500;
a = rand(n,n);
x = rand(n,1);
b = a*x;
tic()
x1 = ab;
t_sol = toc();
tic()
x2 = inv(a)*b;
t_inv = toc();
error1 = norm(x1-x);
error2 = norm(x2-x);
printf(’t_sol = %f t_inv = %fn’, t_sol, t_inv)
printf(’error_sol = %e error_inv = %en’, error1, error2)
producen un resultado análogo a
t_sol = 0.622000 t_inv = 1.737000
error_sol = 7.990870e-12 error_inv = 1.687945e-11
26 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Estos resultados dependen del computador, del sistema operacional y aún en
el mismo computador no son siempre iguales, pero sı́ parecidos. Las funciones
tic y toc permiten obtener una medida del tiempo de un proceso. ✸
2.2. Notación para submatrices en Scilab
Sean A una matriz m × n, con elementos aij, i = 1, ...m, j = 1, ..., n y
x = (x1, x2, ..., xn). Para denotar filas o columnas, o partes de ellas, se
usará la notación de Matlab y Scilab.
parte de un vector: x(5 : 7) = (x5, x6, x7),
fila i-ésima: Ai· = A(i, :),
columna j-ésima: A·j = A(:, j),
parte de la fila i-ésima: A(i, 1 : 4) = [ ai1 ai2 ai3 ai4 ]
parte de la columna j-ésima: A(2 : 4, j) = [ a2j a3j a4j ]T
submatriz: A(3 : 6, 2 : 5) .
2.3. Métodos ingenuos
Teóricamente, resolver el sistema Ax = b es equivalente a la expresión
x = A−1
b.
Es claro que calcular la inversa de una matriz es mucho más dispendioso que
resolver un sistema de ecuaciones; entonces, este camino solamente se utiliza
en deducciones teóricas o, en muy raros casos, cuando A−1 puede calcularse
muy fácilmente.
Otro método que podrı́a utilizarse para resolver Ax = b es la regla de
Cramer. Para un sistema de orden tres las fórmulas son:
x1 =
det


b1 a12 a13
b2 a22 a23
b3 a32 a33


det(A)
, x2 =
det


a11 b1 a13
a21 b2 a23
a31 b3 a33


det(A)
,
x3 =
det


a11 a12 b1
a21 a22 b2
a31 a32 b3


det(A)
·
Héctor M. Mora E. Métodos Numéricos con Scilab 27
Supongamos ahora que cada determinante se calcula por medio de cofac-
tores. Este cálculo se puede hacer utilizando cualquier fila o cualquier colum-
na; por ejemplo, si A es 3 × 3, se puede usar la primera fila,
det(A) = a11 det

a22 a23
a32 a33

− a12 det

a21 a23
a31 a33

+ a13 det

a21 a22
a31 a32

.
En general, sea Aij la matriz (n − 1) × (n − 1), obtenida al suprimir de A la
fila i y la columna j. Si se calcula det(A) utilizando la primera fila,
det(A) = a11 det(A11) − a12 det(A12) + · · · + (−1)(1+n)
a1n det(A1n).
Sea µn el número de multiplicaciones necesarias para calcular, por cofactores,
el determinante de una matriz de orden n. La fórmula anterior nos indica
que
µn  nµn−1.
Como a su vez µn−1  (n − 1)µn−2 y µn−2  (n − 2)µn−3, ..., entonces
µn  n(n − 1)(n − 2) · · · µ2 = n(n − 1)(n − 2) · · · 2,
µn  n! .
Para resolver un sistema de ecuaciones por la regla de Cramer, hay que calcu-
lar n+1 determinantes, luego el número total de multiplicaciones necesarias
para resolver un sistema de ecuaciones por la regla de Cramer, calculando
los determinantes por cofactores, es superior a (n + 1)!.
Tomemos un sistema relativamente pequeño, n = 20,
21! = 5.1091E19.
Siendo muy optimistas (sin tener en cuenta las sumas y otras operaciones
concomitantes), supongamos que un computador hace 1000 millones de mul-
tiplicaciones por segundo. Entonces, el tiempo necesario para resolver un
sistema de ecuaciones de orden 20 por la regla de Cramer y el método de
cofactores es francamente inmanejable:
tiempo  5.1091E10 segundos = 16.2 siglos.
2.4. Sistema diagonal
El caso más sencillo de (2.1) corresponde a una matriz diagonal. Para ma-
trices triangulares, en particular para las diagonales, el determinante es el
28 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
producto de los n elementos diagonales. Entonces, una matriz triangular es
invertible si y solamente si todos los elementos diagonales son diferentes de
cero.
La solución de un sistema diagonal se obtiene mediante
xi =
bi
aii
, i = 1, ..., n. (2.2)
Como los elementos diagonales son no nulos, las divisiones pueden efecturase
sin problema.
2.5. Sistema triangular superior
Resolver un sistema triangular superior, A es triangular superior, es muy
sencillo. Antes de ver el algoritmo en el caso general, veamos, por medio de
un ejemplo, cómo se resuelve un sistema de orden 4.
Ejemplo 2.2. Resolver el siguiente sistema:
4x1 + 3x2 − 2x3 + x4 = 4
−0.25x2 + 2.5x3 + 4.25x4 = −11
45x3 + 79x4 = −203
2.8x4 = −5.6
De la cuarta ecuación, se deduce que x4 = −5.6/2.8 = −2. A partir de la
tercera ecuación
45x3 = −203 − (79x4)
x3 =
−203 − (79x4)
45
·
Reemplazando x4 por su valor, se obtiene x3 = −1. A partir de la segunda
ecuación
−0.25x2 = −11 − (2.5x3 + 4.25x4)
x2 =
−11 − (2.5x3 + 4.25x4)
−0.25
·
Reemplazando x3 y x4 por sus valores, se obtiene x2 = 0. Finalmente, uti-
lizando la primera ecuación,
4x1 = 4 − (3x2 − 2x3 + x4)
x1 =
4 − (3x2 − 2x3 + x4)
4
·
Héctor M. Mora E. Métodos Numéricos con Scilab 29
Reemplazando x2, x3 y x4 por sus valores, se obtiene x1 = 1. ✸
En general, para resolver un sistema triangular, primero se calcula xn =
bn/ann. Con este valor se puede calcular xn−1, y ası́ sucesivamente. Conoci-
dos los valores xi+1, xi+2, ..., xn, la ecuación i-ésima es
aiixi + ai,i+1xi+1 + ai,i+2xi+2 + ... + ainxn = bi,
aiixi + A(i, i + 1 : n) x(i + 1 : n) = bi,
xi =
bi − A(i, i + 1 : n) x(i + 1 : n)
aii
.
Como se supone que A es regular (invertible o no singular), los elementos
diagonales son no nulos y no se presentan problemas al efectuar la división.
El esquema del algoritmo es el siguiente:
Solución de un sistema triangular
xn = bn/ann
para i = n − 1, ..., 1
xi = (bi − A(i, i + 1 : n) x(i + 1 : n))/aii
fin-para
Esto se puede escribir en Scilab
x(n) = b(n)/a(n,n)
for i = n-1:-1:1
x(i) = ( b(i) - a(i,i+1:n)*x(i+1:n) )/a(i,i)
end
La función completa podrı́a ser ası́:
function [x, res] = solTriSup(a, b, eps)
//
// Solucion del sistema triangular superior a x = b.
//
// a es una matriz triangular superior
// b es un vector columna
// eps es una valor positivo pequeno
// (parametro opcional).
30 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
// res valdra 0 si el valor absoluto de un elemento
// diagonal de a es menor o igual a eps
// 1 si todo funciono bien.
// x sera un vector columna con la solucion, si res = 1.
//
// Esta funcion trabaja unicamente con la parte triangular
// superior de a y no verifica si realmente es triangular
// superior.
if argn(2)  3, eps = 1.0e-10, end
x = []
res = 0
if min(abs(diag(a))) = eps, return, end
res = 1
n = size(a,1)
x = zeros(n,1)
x(n) = b(n)/a(n,n)
for k = n-1:-1:1
x(k) = (b(k) - a(k,k+1:n)*x(k+1:n) )/a(k,k)
end
endfunction
Teniendo en cuenta las buenas caracterı́sticas de Scilab, la función anterior
se puede escribir de manera más abreviada. Sea u = [ 2 3 5 7 11 13]’.
La orden v = u(4:2) produce un vector “vacı́o”, es decir, [ ]. Además,
s = 3.1 - u(4:2)*u(6:5)
asignará a s el valor 3.1. Entonces, el cálculo de x(n) se puede hacer dentro
del for :
for k = n:-1:1
x(k) = (b(k) - a(k,k+1:n)*x(k+1:n) )/a(k,k)
end
Héctor M. Mora E. Métodos Numéricos con Scilab 31
2.5.1. Número de operaciones
Una de las maneras de medir la rapidez o lentitud de un método es medi-
ante el conteo del número de operaciones. Usualmente se tienen en cuen-
ta las sumas, restas, multiplicaciones y divisiones entre números de punto
flotante, aunque hay más operaciones fuera de las anteriores, por ejemplo,
las comparaciones y las operaciones entre enteros. Las cuatro operaciones
se conocen con el nombre genérico de operaciones de punto flotante flops
(floating point operations). Algunas veces se hacen dos grupos: por un lado,
sumas y restas, y por otro, multiplicaciones y divisiones. Si se supone que
el tiempo necesario para efectuar una multiplicación es bastante mayor que
el tiempo de una suma, entonces se acostumbra a dar el número de mul-
tiplicaciones (o divisiones). El diseño de los procesadores actuales muestra
tendencia al hecho de que los dos tiempos sean comparables. Entonces, se
acostumbra a evaluar el número de flops.
Sumas y restas Multiplicaciones
y divisiones
cálculo de xn 0 1
cálculo de xn−1 1 2
cálculo de xn−2 2 3
...
cálculo de x2 n − 2 n − 1
cálculo de x1 n − 1 n
Total n2/2 − n/2 n2/2 + n/2
Número total de operaciones de punto flotante: n2.
2.6. Sistema triangular inferior
La solución de un sistema triangular inferior Ax = b, A triangular inferior,
es análoga al caso de un sistema triangular superior. Primero se calcula x1,
después x2, enseguida x3 y ası́ sucesivamente hasta xn.
xi =
bi −
i−1
X
j=1
aijxj
aii
· (2.3)
32 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
El esquema del algoritmo es el siguiente:
para i = 1, ..., n
xi = (bi − A(i, 1 : i − 1) x(1 : i − 1))/aii
fin-para
El número de operaciones es exactamente el mismo del caso triangular su-
perior.
2.7. Método de Gauss
El método de Gauss para resolver el sistema Ax = b tiene dos partes; la
primera es la triangularización del sistema, es decir, por medio de opera-
ciones elementales, se construye un sistema
A′
x = b′
, (2.4)
equivalente al primero, tal que A′ sea triangular superior. Que los sistemas
sean equivalentes quiere decir que la solución de Ax = b es exactamente la
misma solución de A′x = b′. La segunda parte es simplemente la solución
del sistema triangular superior.
Para una matriz, con ı́ndices entre 1 y n, el esquema de triangularización se
puede escribir ası́:
para k = 1, ..., n − 1
buscar ceros en la columna k, por debajo de la diagonal.
fin-para k
Afinando un poco más:
para k = 1, ..., n − 1
para i = k + 1, ..., n
buscar ceros en la posición de aik.
fin-para i
fin-para k
Héctor M. Mora E. Métodos Numéricos con Scilab 33
Ejemplo 2.3. Consideremos el siguiente sistema de ecuaciones:
4x1 + 3x2 − 2x3 + x4 = 4
3x1 + 2x2 + x3 + 5x4 = −8
−2x1 + 3x2 + x3 + 2x4 = −7
−5x1 + x3 + x4 = −8
En forma matricial se puede escribir:




4 3 −2 1
3 2 1 5
−2 3 1 2
−5 0 1 1








x1
x2
x3
x4



 =




4
−8
−7
−8




Es usual trabajar únicamente con los números, olvidando temporalmente los
xi. Más aún, se acostumbra trabajar con una matriz ampliada, resultado de
pegar a la derecha de A el vector b.




4 3 −2 1
3 2 1 5
−2 3 1 2
−5 0 1 1
4
−8
−7
−8




Inicialmente, hay que buscar ceros en la primera columna. Para buscar cero
en la posición (2,1), fila 2 y columna 1, se hace la siguiente operación:
fila2nueva ← fila2vieja − (3/4)∗fila1
Para hacer más sencilla la escritura, la expresión anterior se escribirá sim-
plemente:
fila2 ← fila2 − (3/4)∗fila1




4 3 -2 1 4
0 -0.25 2.5 4.25 -11
-2 3 1 2 -7
-5 0 1 1 -8




Para buscar cero en la posición (3,1), se hace la siguiente operación:
fila3 ← fila3 − (−2/4)∗fila1




4 3 -2 1 4
0 -0.25 2.5 4.25 -11
0 4.5 0 2.5 -5
-5 0 1 1 -8




34 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Para buscar cero en la posición (4,1) se hace la siguiente operación:
fila4 ← fila4 − (−5/4)∗fila1




4 3 -2 1 4
0 -0.25 2.5 4.25 -11
0 4.5 0 2.5 -5
0 3.75 -1.5 2.25 -3




Ahora hay que buscar ceros en la segunda columna. Para buscar cero en la
posición (3,2) se hace la siguiente operación:
fila3 ← fila3 − (4.5/(−0.25))∗fila2




4 3 -2 1 4
0 -0.25 2.5 4.25 -11
0 0 45 79 -203
0 3 -1.5 2.25 -3




Para buscar cero en la posición (4,2), se hace siguiente operación:
fila4 ← fila4 − (3.75/(−0.25))∗fila2




4 3 -2 1 4
0 -0.25 2.5 4.25 -11
0 0 45 79 -203
0 0 36 66 -168




Para buscar cero en la posición (4,3) se hace la siguiente operación:
fila4 ← fila4 − (36/45)∗fila3




4 3 -2 1 4
0 -0.25 2.5 4.25 -11
0 0 45 79 -203
0 0 0 2.8 -5.6




El sistema resultante ya es triangular superior. Entonces, se calcula primero
x4 = −5.6/2.8 = −2. Con este valor, utilizando la tercera ecuación resul-
tante, se calcula x3, después x2 y x1.
x = (1, 0, −1, −2). ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 35
De manera general, cuando ya hay ceros por debajo de la diagonal, en las
columnas 1, 2, ..., k − 1, para obtener cero en la posición (i, k) se hace la
operación
filai ← filai − (aik/akk)∗filak
Lo anterior se puede reescribir ası́:
lik = aik/akk
A(i, :) = A(i, :) − lik ∗ A(k, :)
bi = bi − lik ∗ bk
Como en las columnas 1, 2, ..., k − 1 hay ceros, tanto en la fila k como
en la fila i, entonces ai1, ai2, ..., ai,k−1 seguirán siendo cero. Además, las
operaciones se hacen de tal manera que aik se vuelva cero. Entonces, aik no
se calcula puesto que dará 0. Luego, los cálculos se hacen en la fila i a partir
de la columna k + 1.
lik = aik/akk
aik = 0
A(i, k + 1 : n) = A(i, k + 1 : n) − lik ∗ A(k, k + 1 : n)
bi = bi − lik ∗ bk
En resumen, el esquema de la triangularización es:
Triangularización del sistema
para k = 1, ..., n − 1
para i = k + 1, ..., n
lik = aik/akk, aik = 0
A(i, k + 1 : n) = A(i, k + 1 : n)−lik∗A(k, k + 1 : n)
bi = bi−lik∗bk
fin-para i
fin-para k
Este esquema funciona, siempre y cuando no aparezca un pivote, akk, nulo
o casi nulo. Cuando aparezca es necesario buscar un elemento no nulo en el
resto de la columna. Si, en el proceso de triangularización, toda la columna
A(k : n, k) es nula o casi nula, entonces A es singular.
36 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
para k = 1, ..., n − 1
si |akk| ≤ ε ent
buscar m, k + 1 ≤ m ≤ n, tal que |amk|  ε
si no fue posible ent salir
intercambiar(A(k, k : n), A(m, k : n))
intercambiar(bk, bm)
fin-si
para i = k + 1, ..., n
lik = aik/akk, aik = 0
A(i, k + 1 : n) = A(i, k + 1 : n)−lik∗A(k, k + 1 : n)
bi = bi−lik∗bk
fin-para i
fin-para k
si |ann| ≤ ε ent salir
Cuando en un proceso una variable toma valores enteros desde un lı́mite
inferior hasta un lı́mite superior, y el lı́mite inferior es mayor que el lı́mite
superior, el proceso no se efectúa.
Ası́, en el algoritmo anterior se puede hacer variar k, en el bucle externo,
entre 1 y n, y entonces no es necesario controlar si ann ≈ 0 ya que, cuando
k = n, no es posible buscar m entre n + 1 y n.
Triangularización con control de pivote
para k = 1, ..., n
si |akk| ≤ ε ent
buscar m, k + 1 ≤ m ≤ n, tal que |amk|  ε
si no fue posible ent salir
intercambiar(A(k, k : n), A(m, k : n))
intercambiar(bk, bm)
fin-si
para i = k + 1, ..., n
lik = aik/akk, aik = 0
A(i, k + 1 : n) = A(i, k + 1 : n)−lik∗A(k, k + 1 : n)
bi = bi−lik∗bk
fin-para i
fin-para k
function [a, b, indic] = triangulariza(a, b, eps)
// Triangulariza un sistema de ecuaciones
Héctor M. Mora E. Métodos Numéricos con Scilab 37
// con matriz invertible.
//
// indic valdra 1 si todo funciono bien,
// 0 si la matriz es singular o casi.
//
n = size(a,1)
if argn(2)  3, eps = 1.0e-10, end
for k=1:n
if abs(a(k,k)) = eps
m = posNoNulo(a, k)
if m == 0
indic = 0
return
end
t = a(k,k:n)
a(k,k:n) = a(m,k:n)
a(m,k:n) = t
t = b(k)
b(k) = b(m)
b(m) = t
end
for i=k+1:n
lik = a(i,k)/a(k,k)
a(i,k) = 0
a(i,k+1:n) = a(i,k+1:n) - lik*a(k,k+1:n)
b(i) = b(i) - lik*b(k)
end
end
indic = 1
endfunction
//----------------------------------------------------------
function m = posNoNulo(a, k, eps)
// Busca la posicion del primer elemento no nulo en la
// columna k, debajo de la diagonal.
//
// Si no es posible encontrarlo, m valdra 0.
//
if argn(2)  3, eps = 1.0e-10, end
n = size(a,1)
for i = k+1:n
38 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
if abs(a(i,k)) = eps
m = i
return
end
end
m = 0
endfunction
//----------------------------------------------------------
function [x, indic] = Gauss(a, b, eps)
// Solucion de un sistema de ecuaciones
// por el metodode Gauss.
//
// indic valdra 1 si todo funciono bien,
// en este caso el vector columna x
// sera la solucion.
// 0 si la matriz es singular o casi
// -1 los tamanos son incompatibles.
//
indic = -1
x = []
n = verifTamanoAb(a, b)
if n == 0, return, end
if argn(2)  3, eps = 1.0e-10, end
indic = 0
x = []
[a, b, res] = triangulariza(a, b, eps)
if res == 0, return, end
indic = 1
x = solTriSup(a, b, eps)
endfunction
//----------------------------------------------------------
function n = verifTamanoAb(a, b)
// Esta funcion verifica si los tamanos de a, b
// corresponden a un sistema cuadrado a x = b.
// Devuelve n (num. de filas) si todo esta bien,
// devuelve 0 si hay errores.
Héctor M. Mora E. Métodos Numéricos con Scilab 39
[n1, n2] = size(a)
[n3, n4] = size(b)
if n1  n2 | n1  n3 | n4  1 | n1  1
printf(’nTamanos inadecuados.nn’)
n = 0
else
n = n1
end
endfunction
2.7.1. Número de operaciones
En el método de Gauss hay que tener en cuenta el número de operaciones
de cada uno de los dos procesos: triangularización y solución del sistema
triangular.
Triangularización
Consideremos inicialmente la búsqueda de cero en la posición (2, 1). Para
efectuar A(2, 2 : n) = A(2, 2 : n) − lik ∗ A(1, 2 : n) es necesario hacer n − 1
sumas y restas. Para b2 = b2−lik∗b1 es necesario una resta. En resumen,
n sumas (o restas). Multiplicaciones y divisiones: una división para calcular
lik; n − 1 multiplicaciones para lik ∗ A(1, 2 : n) y una para lik∗b1. En
resumen, n + 1 multiplicaciones (o divisiones).
Para obtener un cero en la posición (3, 1) se necesita exactamente el mis-
mo número de operaciones. Entonces, para la obtener ceros en la primera
columna:
Sumas y restas Multiplicaciones
y divisiones
cero en la posición de a21 n n + 1
cero en la posición de a31 n n + 1
...
cero en la posición de an1 n n + 1
Total para la columna 1 (n − 1)n (n − 1)(n + 1)
Un conteo semejante permite ver que se requieren n − 1 sumas y n multipli-
caciones para obtener un cero en la posición de a32. Para buscar ceros en la
columna 2 se van a necesitar (n−2)(n−1) sumas y (n−2)n multiplicaciones.
40 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Sumas y restas Multiplicaciones
y divisiones
ceros en la columna 1 (n − 1)n (n − 1)(n + 1)
ceros en la columna 2 (n − 2)(n − 1) (n − 2)n
ceros en la columna 3 (n − 3)(n − 2) (n − 3)(n − 1)
...
ceros en la columna n − 2 2(3) 2(4)
ceros en la columna n − 1 1(2) 1(3)
Es necesario utilizar el resultado
m
X
i=1
i2
=
m(m + 1)(2m + 1)
6
·
Número de sumas y restas:
n−1
X
i=1
i(i + 1) =
n−1
X
i=1
(i2
+ i) =
n3
3
−
n
3
≈
n3
3
·
Número de multiplicaciones y divisiones:
n−1
X
i=1
i(i + 2) =
n−1
X
i=1
(i2
+ 2i) =
n3
3
+
n2
2
−
5n
6
≈
n3
3
·
Número de operaciones:
n3
3
−
n
3
+
n3
3
+
n2
2
−
5n
6
=
2n3
3
+
n2
2
−
7n
6
≈
2n3
3
·
Proceso completo
El número de operaciones para las dos partes, triangularización y solución
del sistema triangular, es
2n3
3
+
3n2
2
−
7n
6
≈
2n3
3
·
Para valores grandes de n el número de operaciones de la solución del sis-
tema triangular es despreciable con respecto al número de operaciones de la
triangularización.
Héctor M. Mora E. Métodos Numéricos con Scilab 41
2.8. Factorización LU
Si durante el proceso del método de Gauss no fue necesario intercambiar
filas, entonces se puede demostrar que se obtiene fácilmente la factorización
A = LU, donde L es una matriz triangular inferior con unos en la diagonal y
U es una matriz triangular superior. La matriz U es simplemente la matriz
triangular superior obtenida al final del proceso.
Para el ejemplo anterior:
U =




4 3 -2 1
0 -0.25 2.5 4.25
0 0 45 79
0 0 0 2.8




La matriz L, con unos en la diagonal, va a estar formada simplemente por
los coeficientes lik= lik = aik/akk.
L =







1 0 0 · · · 0
l21 1 0 · · · 0
l31 l32 1 · · · 0
.
.
.
...
.
.
.
ln1 ln2 ln3 · · · 1







Siguiendo con el ejemplo:
L =




1 0 0 0
0.75 1 0 0
-0.5 -18 1 0
-1.25 -15 0.8 1




En este ejemplo, fácilmente se comprueba que LU = A. Esta factorización
es útil para resolver otro sistema Ax = b̃, exactamente con la misma matriz
de coeficientes, pero con diferentes términos independientes.
Ax = b̃,
LUx = b̃,
Ly = b̃,
donde Ux = y.
En resumen:
42 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Resolver Ly = b̃ para obtener y.
Resolver Ux = y para obtener x.
Ejemplo 2.4. Resolver
4x1 + 3x2 − 2x3 + x4 = 8
3x1 + 2x2 + x3 + 5x4 = 30
−2x1 + 3x2 + x3 + 2x4 = 15
−5x1 + x3 + x4 = 2
Al resolver




1 0 0 0
0.75 1 0 0
-0.5 -18 1 0
-1.25 -15 0.8 1








y1
y2
y3
y4



 =




8
30
15
2




se obtiene y =

8 24 451 11.2
T
. Al resolver




4 3 -2 1
0 -0.25 2.5 4.25
0 0 45 79
0 0 0 2.8








x1
x2
x3
x4



 =




8.0
24.0
451.0
11.2




se obtiene la solución final x =

1 2 3 4
T
. ✸
Resolver un sistema triangular, con unos en la diagonal, requiere n2 −n ≈ n2
operaciones. Entonces, para resolver un sistema adicional, con la misma
matriz A, se requiere efectuar aproximadamente 2n2 operaciones, en lugar
de 2n3/3 operaciones, las cuales se requerirı́an si se volviera a empezar el
proceso.
La factorización A = LU es un subproducto gratuito del método de Gauss;
gratuito en tiempo y en requerimientos de memoria. No se requiere tiempo
adicional, puesto que el cálculo de los lik se hace dentro del método de
Gauss. Tampoco se requiere memoria adicional ya que los valores lik se
pueden ir almacenando en A en el sitio de aik que justamente vale cero.
En el algoritmo hay únicamente un pequeño cambio:
Héctor M. Mora E. Métodos Numéricos con Scilab 43
.
.
.
lik = aik/akk
aik = lik
A(i, k + 1 : n − 1) = A(i, k + 1 : n − 1)−lik∗A(k, k + 1 : n − 1)
bi = bi−lik∗bk
.
.
.
En la matriz final A estará la información indispensable de L y de U.
L =







u11 u12 u13 · · · u1n
l21 u22 u23 · · · u2n
l31 l32 u31 · · · u3n
.
.
.
...
.
.
.
ln1 ln2 ln3 · · · unn







En el ejemplo anterior, la matriz final con información de L y de U es:




4 3 -2 1
0.75 -0.25 2.5 4.25
-0.5 -18 45 79
-1.25 -15 0.8 2.8




2.9. Método de Gauss con pivoteo parcial
En el método de Gauss clásico, únicamente se intercambian filas cuando
el pivote, akk, es nulo o casi nulo. Como el pivote (el elemento akk en la
iteración k) será divisor para el cálculo de lik, y como el error de redondeo
o de truncamiento se hace mayor cuando el divisor es cercano a cero, entonces
es muy conveniente buscar que el pivote sea grande en valor absoluto. Es
decir, hay que evitar los pivotes que sin ser nulos son cercanos a cero.
En el método de Gauss con pivoteo parcial se busca el elemento dominante,
o sea, el de mayor valor absoluto en la columna k de la diagonal hacia abajo,
es decir, entre los valores |akk|, |ak+1,k|, |ak+2,k|, ..., |akn|, y se intercambian
la fila k y la fila del valor dominante. Esto mejora notablemente, en muchos
casos, la precisión de la solución final obtenida.
Se dice que el pivoteo es total si en la iteración k se busca el mayor valor
de {|aij| : k ≤ i, j ≤ n}. En este caso, es necesario intercambiar dos filas y
dos columnas. Ası́ se consigue mejorar un poco la precisión con respecto al
44 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
método de pivoteo parcial, pero a un costo nada despreciable. En el método
de pivoteo parcial se busca el mayor valor entre n−k+1 valores. En el pivoteo
total se busca entre (n−k+1)2 valores. Si se busca, de manera secuencial, el
máximo entre p elementos, entonces hay que hacer, además de operaciones
de asignación, por lo menos p − 1 comparaciones. Estas operaciones no son
de punto flotante y son más rápidas que ellas, pero para n grande, el tiempo
utilizado no es despreciable.
En el método de pivoteo parcial hay aproximadamente n2/2 comparaciones;
en el pivoteo total, aproximadamente n3/6. En resumen, con el pivoteo total
se gana un poco de precisión, pero se gasta mucho más tiempo. El balance
aconseja preferir el pivoteo parcial.
Triangularización con pivoteo parcial
para k = 1, ..., n
buscar m, tal que |amk| = max{|akk|, |ak+1,k|, ..., |ank|}
si |amk| ≤ ε ent salir
si m  k ent
intercambiar(A(k, k : n), A(m, k : n))
intercambiar(bk, bm)
fin-si
para i = k + 1, ..., n
lik = aik/akk, aik = 0
A(i, k + 1 : n) = A(i, k + 1 : n)−lik∗A(k, k + 1 : n)
bi = bi−lik∗bk
fin-para i
fin-para k
Ejemplo 2.5. Resolver por el método de Gauss con pivoteo parcial el si-
guiente sistema de ecuaciones.
4x1 + 3x2 − 2x3 + x4 = 4
3x1 + 2x2 + x3 + 5x4 = −8
−2x1 + 3x2 + x3 + 2x4 = −7
−5x1 + x3 + x4 = −8
La matriz aumentada es:




4 3 -2 1 4
3 2 1 5 -8
-2 3 1 2 -7
-5 0 1 1 -8




Héctor M. Mora E. Métodos Numéricos con Scilab 45
El valor dominante de A(1 : 4, 1) es −5 y está en la fila 4. Entonces, se
intercambian las filas 1 y 4.




-5 0 1 1 -8
3 2 1 5 -8
-2 3 1 2 -7
4 3 -2 1 4




Buscar ceros en las posiciones de a21, a31, a41 se hace de la manera habitual
usando los valores de lik= 3/(−5) = −0.6, 0.4 y −0.8. Se obtiene




-5 0 1 1 -8
0 2 1.6 5.6 -12.8
0 3 0.6 1.6 -3.8
0 3 -1.2 1.8 -2.4




El valor dominante de A(2 : 4, 2) es 3 y está en la fila 3 (o en la fila 4).
Entonces, se intercambian las filas 2 y 3.




-5 0 1 1 -8
0 3 0.6 1.6 -3.8
0 2 1.6 5.6 -12.8
0 3 -1.2 1.8 -2.4




Buscar ceros en las posiciones de a32 y de a42 se hace usando los valores de
lik= 2/3 = 0.6666 y 1. Se obtiene




-5 0 1 1 -8
0 3 0.6 1.6 -3.8
0 0 1.2 4.5333 -10.2667
0 0 -1.8 0.2 1.4




Hay que intercambiar las filas 3 y 4.




-5 0 1 1 -8
0 3 0.6 1.6 -3.8
0 0 -1.8 0.2 1.4
0 0 1.2 4.5333 -10.2667




El valor de lik es 1.2/(−1.8) = −0.6667. Se obtiene




-5 0 1 1 -8
0 3 0.6 1.6 -3.8
0 0 -1.8 0.2 1.4
0 0 0 4.6667 -9.3333




46 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Al resolver el sistema triangular superior, se encuentra la solución:
x = (1, 0, −1, −2) . ✸
En Scilab, la búsqueda del valor dominante y su fila se puede hacer mediante:
[vmax, posMax] = max(abs(a(k:n,k)))
m = k - 1 + posMax
if vmax = eps, indic = 0, return, end
El ejemplo anterior sirve simplemente para mostrar el desarrollo del método
de Gauss con pivoteo parcial, pero no muestra sus ventajas. El ejemplo si-
guiente, tomado de [Atk78], se resuelve inicialmente por el método de Gauss
sin pivoteo y después con pivoteo parcial. Los cálculos se hacen con cuatro
cifras decimales.
0.729x1 + 0.81x2 + 0.9x3 = 0.6867
x1 + x2 + x3 = 0.8338
1.331x1 + 1.21x2 + 1.1x3 = 1
Tomando cuatro cifras decimales de la solución exacta:
x = ( 0.2245, 0.2814, 0.3279 ).
Al resolver el sistema por el método de Gauss, con cuatro cifras decimales
y sin pivoteo, resultan los siguientes pasos:


0.7290 0.8100 0.9000 0.6867
1.0000 1.0000 1.0000 0.8338
1.3310 1.2100 1.1000 1.0000


Con lik = 1.3717 y con lik = 1.8258 se obtiene


0.7290 0.8100 0.9000 0.6867
0.0000 -0.1111 -0.2345 -0.1081
0.0000 -0.2689 -0.5432 -0.2538


Con lik = 2.4203 se obtiene


0.7290 0.8100 0.9000 0.6867
0.0000 -0.1111 -0.2345 -0.1081
0.0000 0.0000 0.0244 0.0078


Héctor M. Mora E. Métodos Numéricos con Scilab 47
La solución del sistema triangular es:
x = ( 0.2163, 0.2979, 0.3197 ).
Sea x∗ la solución exacta del sistema Ax = b. Para comparar x1 y x2, dos
aproximaciones de la solución, se calculan sus distancias a x∗:
kx1
− x∗
k , kx2
− x∗
k.
Si kx1 − x∗k  kx2 − x∗k, entonces x1 aproxima mejor a x∗ que x2. Cuando
no se conoce x∗, se utiliza la norma del vector residuo o resto, r = Ax−b. Si
x es la solución exacta, entonces la norma de su resto vale cero. Entonces,
hay que comparar
kAx1
− bk , kAx2
− bk.
Para la solución obtenida por el método de Gauss, sin pivoteo,
kAx − bk = 1.0357e-004 , kx − x∗
k = 0.0202 .
En seguida está el método de Gauss con pivoteo parcial, haciendo cálculos
con 4 cifras decimales.


0.7290 0.8100 0.9000 0.6867
1.0000 1.0000 1.0000 0.8338
1.3310 1.2100 1.1000 1.0000


Intercambio de las filas 1 y 3:


1.3310 1.2100 1.1000 1.0000
1.0000 1.0000 1.0000 0.8338
0.7290 0.8100 0.9000 0.6867


Con lik = 0.7513 y con lik = 0.5477 se obtiene


1.3310 1.2100 1.1000 1.0000
0.0000 0.0909 0.1736 0.0825
0.0000 0.1473 0.2975 0.1390


Intercambio de las filas 2 y 3.


1.3310 1.2100 1.1000 1.0000
0.0000 0.1473 0.2975 0.1390
0.0000 0.0909 0.1736 0.0825


48 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Con lik = 0.6171 se obtiene


1.3310 1.2100 1.1000 1.0000
0.0000 0.1473 0.2975 0.1390
0.0000 0.0000 -0.0100 -0.0033


La solución del sistema triangular da:
x = ( 0.2267, 0.2770, 0.3300 ).
El cálculo del residuo y la comparación con la solución exacta da:
kAx − bk = 1.5112e-004 , kx − x∗
k = 0.0053 .
En este ejemplo, se observa que la norma del residuo es del mismo orden de
magnitud que la norma del residuo correspondiente a la solución obtenida
sin pivoteo, aunque algo mayor. La comparación directa con la solución
exacta favorece notablemente al método de pivoteo parcial: 0.0053 y 0.0202,
relación de 1 a 4, aproximadamente. Además, “visualmente” se observa la
mejor calidad de la solución obtenida con pivoteo.
2.10. Factorización LU=PA
Si se aplica el método de Gauss con pivoteo parcial muy probablemente
se hace, por lo menos, un intercambio de filas y no se puede obtener la
factorización A = LU, pero sı́ se puede obtener la factorización
LU = PA.
Las matrices L y U tienen el mismo significado de la factorización LU. P
es una matriz de permutación, es decir, se obtiene mediante permutación de
filas de la matriz identidad, I.
Si P y Q son matrices de permutación, entonces:
PQ es una matriz de permutación.
P−1 = PT
(P es ortogonal).
PA es una permutación de las filas de A.
AP es una permutación de las columnas de A.
Héctor M. Mora E. Métodos Numéricos con Scilab 49
Una matriz de permutación P se puede representar de manera más compacta
por medio de un vector p ∈ Rn con la siguiente convención:
Pi· = Ipi·
En palabras, la fila i de P es simplemente la fila pi de I. Obviamente, p debe
cumplir:
pi ∈ {1, 2, 3, ..., n} ∀i
pi 6= pj ∀i 6= j.
Por ejemplo, p = (2, 4, 3, 1) representa la matriz
P =




0 1 0 0
0 0 0 1
0 0 1 0
1 0 0 0



 .
De la misma forma que en la factorización LU, los valores lik se almacenan en
el sitio donde se anula el valor aik. El vector p inicialmente es (1, 2, 3, ..., n).
A medida que se intercambian las filas de la matriz, se intercambian las
componentes de p.
Ejemplo 2.6. Obtener la factorización LU = PA, donde
A =




4 3 -2 1
3 2 1 5
-2 3 1 2
-5 0 1 1



 .
Inicialmente p = (1, 2, 3, 4). Para buscar el mejor pivote, se intercambian las
filas 1 y 4.
p = (4, 2, 3, 1),




-5 0 1 1
3 2 1 5
-2 3 1 2
4 3 -2 1



 .
Buscando ceros en la primera columna y almacenando allı́ los valores lik se
obtiene: 



-5 0 1 1
-0.6 2 1.6 5.6
0.4 3 0.6 1.6
-0.8 3 -1.2 1.8



 .
50 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Para buscar el mejor pivote, se intercambian las filas 2 y 3.
p = (4, 3, 2, 1),




-5 0 1 1
0.4 3 0.6 1.6
-0.6 2 1.6 5.6
-0.8 3 -1.2 1.8



 .
Buscando ceros en la segunda columna y almacenando allı́ los valores lik se
obtiene: 



-5 0 1 1
0.4 3 0.6 1.6
-0.6 0.6667 1.2 4.5333
-0.8 1 -1.8 0.2



 .
Para buscar el mejor pivote, se intercambian las filas 3 y 4.
p = (4, 3, 1, 2),




-5 0 1 1
0.4 3 0.6 1.6
-0.8 1 -1.8 0.2
-0.6 0.6667 1.2 4.5333



 .
Buscando ceros en la tercera columna y almacenando allı́ los valores lik se
obtiene: 



-5 0 1 1
0.4 3 0.6 1.6
-0.8 1 -1.8 0.2
-0.6 0.6667 -0.6667 4.6667



 .
En esta última matriz y en el arreglo p está toda la información necesaria
para obtener L, U, P. Entonces:
L =




1 0 0 0
0.4 1 0 0
-0.8 1 1 0
-0.6 0.6667 -0.6667 1



 ,
U =




-5 0 1 1
0 3 0.6 1.6
0 0 -1.8 0.2
0 0 0 4.6667



 ,
P =




0 0 0 1
0 0 1 0
1 0 0 0
0 1 0 0



 . ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 51
Si se desea resolver el sistema Ax = b a partir de la descomposición PA =
LU, se obtiene P−1LUx = b, o sea, PT
LUx = b. Sean z = LUx y y = Ux.
La solución de Ax = b tiene tres pasos:
Resolver PT
z = b, o sea, z = Pb.
Resolver Ly = z.
Resolver Ux = y.
Ejemplo 2.7. Para la matriz A del ejemplo anterior, resolver Ax = b con
b = [4 − 8 − 7 − 8]T
.
z = Pb =




-8
-7
4
-8




Ly = z , entonces y =




-8
-3.8
1.4
-9.3333




Ux = y , entonces x =




1
0
-1
-2



 ✸
En Scilab, la factorización se puede obtener mediante la orden
[L, U, P] = lu(A)
2.11. Método de Cholesky
Este método sirve para resolver el sistema Ax = b cuando la matriz A es
definida positiva (también llamada positivamente definida). Este tipo de
matrices se presenta en problemas especı́ficos de ingenierı́a y fı́sica, princi-
palmente.
52 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
2.11.1. Matrices definidas positivas
Una matriz simétrica es definida positiva si
xT
Ax  0, ∀ x ∈ Rn
, x 6= 0. (2.5)
Para una matriz cuadrada cualquiera,
xT
Ax =

x1 x2 . . . xn





a11 a12 . . . a1n
a21 a22 . . . a2n
an1 an2 . . . ann








x1
x2
. . .
xn




=

x1 x2 . . . xn





a11x1 + a12x2 + · · · + a1nxn
a21x1 + a22x2 + · · · + a2nxn
an1x1 + an2x2 + · · · + annxn




=
n
X
i=1
n
X
j=i
aijxixj.
Si A es simétrica,
xT
Ax =
n
X
i=1
aiix2
i + 2
n−1
X
i=1
n
X
j=i+1
aijxixj.
Ejemplo 2.8. Sea I la matriz identidad de orden n. Entonces, xT
Ix =
xT
x = kxk2. Luego, la matriz I es definida positiva. ✸
Ejemplo 2.9. Sea A la matriz nula de orden n. Entonces, xT
0 x = 0. Luego,
la matriz nula no es definida positiva. ✸
Ejemplo 2.10. Sea
A =

1 2
2 5

.
xT
Ax = x2
1 + 5x2
2 + 4x1x2
= x2
1 + 4x1x2 + 4x2
2 + x2
2
= (x1 + 2x2)2
+ x2
2.
Obviamente xT
Ax ≥ 0. Además xT
Ax = 0 si y solamente si los dos sumandos
son nulos, es decir, si y solamente si x2 = 0 y x1 = 0, o sea, cuando x = 0.
Luego, A es definida positiva. ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 53
Ejemplo 2.11. Sea
A =

1 2
2 4

.
xT
Ax = x2
1 + 4x2
2 + 4x1x2
= (x1 + 2x2)2
.
Obviamente xT
Ax ≥ 0. Pero si x = (6, −3), entonces xT
Ax = 0. Luego, A
no es definida positiva. ✸
Ejemplo 2.12. Sea
A =

1 2
2 3

.
xT
Ax = x2
1 + 3x2
2 + 4x1x2
= (x1 + 2x2)2
− x2
2.
Si x = (6, −3), entonces xT
Ax = −9. Luego, A no es definida positiva. ✸
Ejemplo 2.13. Sea
A =

1 2
3 4

.
Como A no es simétrica, entonces no es definida positiva. ✸
Sean λ1, λ2, . . . , λn los valores propios de A. Si A es simétrica, entonces todos
sus valores propios son reales.
Sea δi el determinante de la submatriz de A, de tamaño i × i, obtenida al
quitar de A las filas i + 1, i + 2, ..., n y las columnas i + 1, i + 2, ..., n. O
sea,
δ1 = det([a11]) = a11,
δ2 = det

a11 a12
a21 a22

,
δ3 = det


a11 a12 a13
a21 a22 a13
a31 a32 a33

 ,
.
.
.
δn = det(A).
54 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
La definición 2.5 tiene relación directa con el nombre matriz definida posi-
tiva. Sin embargo, no es una manera fácil o práctica de saber cuándo una
matriz simétrica es definida positiva, sobre todo si A es grande. El teorema
siguiente presenta algunas de las caracterizaciones de las matrices definidas
positivas. Para matrices pequeñas (n ≤ 4), la caracterización por medio de
los δi puede ser la de aplicación más sencilla. La última caracterización, lla-
mada factorización de Cholesky, es la más adecuada para matrices grandes.
En [Str86], [NoD88] y [Mor01] hay demostraciones y ejemplos.
Proposición 2.1. Sea A simétrica. Las siguientes afirmaciones son equiv-
alentes.
A es definida positiva.
λi  0, ∀i.
δi  0, ∀i.
Existe U matriz triangular superior e invertible tal que A = UT
U.
Un resultado relacionado con la factorización de Cholesky, pero un poco más
general, agrega dos equivalencias adicionales. Permite garantizar cuándo una
matriz es definida positiva.
Teorema 2.1. Sea A simétrica. Las siguientes afirmaciones son equiva-
lentes.
A es definida positiva.
Existe una matriz B invertible, tal que A = BT
B.
Existe una matriz C con columnas linealmente independientes, tal que
A = CT
C.
Existe una matriz F con filas linealmente independientes, tal que A =
FFT
.
2.11.2. Factorización de Cholesky
Scilab tiene la función chol para obtener la factorización de Cholesky.
Cuando no es posible aparecerá un mensaje de error.
Héctor M. Mora E. Métodos Numéricos con Scilab 55
a = [ 4 -6; -6 25]
u = chol(a)
Antes de estudiar el caso general, veamos la posible factorización para los
ejemplos de la sección anterior.
La matriz identidad se puede escribir como I = IT
I, siendo I triangular
superior invertible. Luego, existe la factorización de Cholesky para la matriz
identidad.
Si existe la factorización de Cholesky de una matriz, al ser U y UT
invertibles,
entonces A debe ser invertible. Luego, la matriz nula no tiene factorización
de Cholesky.
Sea
A =

1 2
2 5

.
Entonces,

u11 0
u12 u22
 
u11 u12
0 u22

=

1 2
2 5

u2
11 = 1
u11u12 = 2,
u2
12 + u2
22 = 5
Se deduce que
u11 = 1
u12 = 2,
u22 = 1,
U =

1 2
0 1

.
En consecuencia, existe la factorización de Cholesky de A.
Cuando se calculó u11 se hubiera podido tomar u11 = −1 y se hubiera podido
obtener otra matriz U. Se puede demostrar que si se escogen los elementos
diagonales uii positivos, entonces la factorización, cuando existe, es única.
Sea
A =

1 2
2 4

.
56 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Entonces,

u11 0
u12 u22
 
u11 u12
0 u22

=

1 2
2 4

u2
11 = 1
u11u12 = 2,
u2
12 + u2
22 = 4
Se deduce que
u11 = 1
u12 = 2,
u22 = 0,
U =

1 2
0 0

.
Por lo tanto, aunque existe U tal que A = UT
U, sin embargo no existe la
factorización de Cholesky de A, ya que U no es invertible.
Sea
A =

1 2
2 3

.
Entonces,

u11 0
u12 u22
 
u11 u12
0 u22

=

1 2
2 3

u2
11 = 1
u11u12 = 2,
u2
12 + u2
22 = 3
Se deduce que
u11 = 1
u12 = 2,
u2
22 = −1.
Entonces, no existe la factorización de Cholesky de A.
Héctor M. Mora E. Métodos Numéricos con Scilab 57
En el caso general,













u11
.
.
.
u1k · · · ukk
.
.
.
u1j · · · ukj · · · ujj
.
.
.
u1n · · · ukn · · · ujn · · · unn


























u11 · · · u1k · · · u1j · · · u1n
.
.
.
ukk · · · ukj · · · ukn
.
.
.
ujj · · · ujn
.
.
.
unn













El producto de la fila 1 de UT
por la columna 1 de U da:
u2
11 = a11.
Luego,
u11 =
√
a11. (2.6)
El producto de la fila 1 de UT
por la columna j de U da:
u11u1j = a1j.
Luego,
u1j =
a1j
u11
, j = 2, ..., n. (2.7)
Al hacer el producto de la fila 2 de UT
por la columna 2 de U, se puede
calcular u22. Al obtener el producto de la fila 2 de UT
por la columna j de
U, se puede calcular u2j. Se observa que el cálculo de los elementos de U
se hace fila por fila. Supongamos ahora que se conocen los elementos de las
filas 1, 2, ..., k − 1 de U y se desea calcular los elementos de la fila k de U.
El producto de la fila k de UT
por la columna k de U da:
k
X
i=1
u2
ik = akk
k−1
X
i=1
u2
ik + u2
kk = akk.
Luego,
ukk =
v
u
u
takk −
k−1
X
i=1
u2
ik , k = 2, ..., n. (2.8)
58 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
El producto de la fila k de UT
por la columna j de U da:
k
X
i=1
uikuij = akj.
Luego,
ukj =
akj −
k−1
X
i=1
uikuij
ukk
, k = 2, ..., n, j = k + 1, ..., n. (2.9)
Si consideramos que el valor de la sumatoria es 0 cuando el lı́mite inferior
es más grande que el lı́mite superior, entonces las fórmulas 2.8 y 2.9 pueden
ser usadas para k = 1, ..., n.
Ejemplo 2.14. Sea
A =




16 −12 8 −16
−12 18 −6 9
8 −6 5 −10
−16 9 −10 46



 .
u11 =
√
16 = 4
u12 =
−12
4
= −3
u13 =
8
4
= 2
u14 =
−16
4
= −4
u22 =
p
18 − (−3)2 = 3
u23 =
−6 − (−3)(2)
3
= 0
u24 =
9 − (−3)(−4)
3
= −1
u33 =
p
5 − (22 + 02) = 1
u34 =
−10 − ( 2(−4) + 0(−1) )
1
= −2
Héctor M. Mora E. Métodos Numéricos con Scilab 59
u44 =
p
46 − ( (−4)2 + (−1)2 + (−2)2 ) = 5 .
Entonces,
U =




4 −3 2 −4
0 3 0 −1
0 0 1 −2
0 0 0 5



 . ✸
La factorización de Cholesky no existe cuando en la fórmula 2.8 la cantidad
dentro del radical es negativa o nula. Utilizando el producto entre matrices,
las fórmulas 2.8 y 2.9 se pueden reescribir ası́:
t = akk − U(1 : k − 1, k)T
U(1 : k − 1, k),
ukk =
√
t,
ukj =
akj − U(1 : k − 1, k)T
U(1 : k − 1, j)
ukk
Para ahorrar espacio de memoria, los valores ukk y ukj se pueden almacenar
sobre los antiguos valores de akk y akj. O sea, al empezar el algoritmo se
tiene la matriz A. Al finalizar, en la parte triangular superior del espacio
ocupado por A estará U.
t = akk − U(1 : k − 1, k)T
U(1 : k − 1, k), (2.10)
akk =
√
t, (2.11)
akj =
akj − U(1 : k − 1, k)T
U(1 : k − 1, j)
akk
(2.12)
El siguiente es el esquema del algoritmo para la factorización de Cholesky. Si
acaba normalmente, la matriz A es definida positiva. Si en algún momento
t ≤ ε, entonces A no es definida positiva.
Factorización de Cholesky
datos: A, ε
para k = 1, ..., n
cálculo de t según (2.10)
si t ≤ ε ent salir
akk =
√
t
para j = k + 1, ..., n
cálculo de akj según (2.12)
fin-para j
fin-para k
60 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
La siguiente es la implementación en Scilab, utilizando las operaciones ma-
triciales de Scilab:
function [U, ind] = Cholesky(A)
//
// Factorizacion de Cholesky.
//
// Trabaja unicamente con la parte triangular superior.
//
// ind = 1 si se obtuvo la factorizacion de Choleky
// = 0 si A no es definida positiva
//
//************
eps = 1.0e-8
//************
n = size(A,1)
U = zeros(n,n)
for k = 1:n
t = A(k,k) - U(1:k-1,k)’*U(1:k-1,k)
if t = eps
printf(’Matriz no definida positiva.n’)
ind = 0
return
end
U(k,k)= sqrt(t)
for j = k+1:n
U(k,j) = ( A(k,j) - U(1:k-1,k)’*U(1:k-1,j) )/U(k,k)
end
end
ind = 1
endfunction
2.11.3. Número de operaciones de la factorización
Para el cálculo del número de operaciones, supongamos que el tiempo nece-
sario para calcular una raı́z cuadrada es del mismo orden de magnitud que
el tiempo de una multiplicación.
Héctor M. Mora E. Métodos Numéricos con Scilab 61
Sumas y restas Multiplicaciones,
divisiones y raı́ces
cálculo de u11 0 1
cálculo de u12 0 1
cálculo de u1n 0 1
cálculo de u22 1 2
cálculo de u23 1 2
cálculo de u2n 1 2
...
cálculo de unn n − 1 n
Agrupando por filas:
Sumas y restas Multiplicaciones,
divisiones y raı́ces
cálculo de U1· n(0) n(1)
cálculo de U2· (n − 1)1 (n − 1)2
cálculo de U3· (n − 2)2 (n − 2)3
. . .
cálculo de Un· 1(n − 1) 1(n)
Número de sumas y restas:
n−1
X
i=1
(n − i)i =
n3 − n
6
≈
n3
6
.
Número de multiplicaciones, divisiones y raı́ces:
n
X
i=1
(n + 1 − i)i =
n3
6
+
n2
2
+
n
3
≈
n3
6
.
Número total de operaciones:
n3
3
+
n2
2
+
n
6
≈
n3
3
.
2.11.4. Solución del sistema
Una vez obtenida la factorización de Cholesky, resolver Ax = b es lo mismo
que resolver UT
Ux = b. Al hacer el cambio de variable Ux = y, se tiene
62 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
UT
y = b. La solución del sistema Ax = b se calcula en dos pasos:
resolver UT
y = b, (2.13)
resolver Ux = y. (2.14)
Resolver cada uno de los dos sistemas es muy fácil. El primero es triangular
inferior, el segundo, triangular superior. El número total de operaciones
para resolver el sistema está dado por la factorización más la solución de
dos sistemas triangulares.
Número de operaciones ≈
n3
3
+ 2 n2
≈
n3
3
·
Esto quiere decir que para valores grandes de n, resolver un sistema, con
A definida positiva, por el método de Cholesky, gasta la mitad del tiempo
requerido por el método de Gauss.
El método de Cholesky se utiliza para matrices definidas positivas. Pero
no es necesario tratar de averiguar por medio de otro criterio si la matriz
es definida positiva. Simplemente se trata de obtener la factorización de
Cholesky de A simétrica. Si fue posible, entonces A es definida positiva y se
continúa con la solución de los dos sistemas triangulares. Si no fue posible
obtener la factorización de Cholesky, entonces A no es definida positiva y
no se puede aplicar el método de Cholesky para resolver Ax = b.
Ejemplo 2.15. Resolver


16 −12 8
−12 18 −6
8 −6 8




x1
x2
x3

 =


76
−66
46

 .
La factorización de Cholesky es posible (A es definida positiva):
U =


4 −3 2
0 3 0
0 0 2

 .
Al resolver UT
y = b se obtiene
y = (19, −3, 4).
Finalmente, al resolver Ux = y se obtiene
x = (3, −1, 2). ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 63
La implementación en Scilab de la solución de un sistema con matriz simétri-
ca y definida positiva se puede hacer por medio de una función que llama
tres funciones:
function [x, info] = solCholesky(a, b)
// Solucion de un sistema de ecuaciones por
// el método de Cholesky
//
// Se supone que a es simetrica y se utiliza
// unicamente la parte triangular superior de a.
//
// info valdra 1 si a es definida positiva,
// asi x sera un vector columna
// con la solucion,
// 0 si a no es definida positiva.
//
[a, info] = Cholesky(a)
if info == 0, return, end
y = sol_UT_y_b(a, b)
x = solTriSup(a, y)
endfunction
La segunda función, y = sol_UT_y_b(U, b) resuelve el sistema UT
y = b ,
pero se tiene la información de U. Si se sabe con certeza que la matriz
es definida positiva, en lugar de Cholesky, es preferible usar la función de
Scilab chol, que es más eficiente.
2.12. Solución por mı́nimos cuadrados
Consideremos ahora un sistema de ecuaciones Ax = b, no necesariamente
cuadrado, donde A es una matriz m × n cuyas columnas son linealmente
independientes. Esto implica que hay más filas que columnas, m ≥ n, y que
además el rango de A es n. Es muy probable que este sistema no tenga solu-
ción, es decir, tal vez no existe x que cumpla exactamente las m igualdades.
64 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Se desea que
Ax = b,
Ax − b = 0,
kAx − bk = 0,
kAx − bk2 = 0,
kAx − bk2
2 = 0.
Es posible que lo deseado no se cumpla, entonces se quiere que el incumplim-
iento (el error) sea lo más pequeño posible. Se desea minimizar esa cantidad,
min kAx − bk2
2 . (2.15)
El vector x que minimice kAx−bk2
2 se llama solución por mı́nimos cuadrados.
Como se verá más adelante, tal x existe y es único (suponiendo que las
columnas de A son linealmente independientes).
2.12.1. En Scilab
La orden para hallar la solución por mı́nimos cuadrados es la misma que
se usa para resolver sistemas de ecuaciones cuadrados, a saber, ab . Por
ejemplo, para resolver el sistema


2 3
4 5
6 7



x1
x2

“=”


43
77
109


basta con
a = [ 2 3; 4 5; 7 6 ], b = [ 43 77 109 ]’
x = ab
El resultado obtenido es
x =
7.6019417
9.3009709
Héctor M. Mora E. Métodos Numéricos con Scilab 65
2.12.2. Ecuaciones normales
Con el ánimo de hacer más clara la deducción, supongamos que A es una
matriz 4 × 3. Sea f(x) = kAx − bk2
2,
f(x) =(a11x1 + a12x2 + a13x3 − b1)2
+ (a21x1 + a22x2 + a23x3 − b2)2
+
(a31x1 + a32x2 + a33x3 − b3)2
+ (a41x1 + a42x2 + a43x3 − b4)2
.
Para obtener el mı́nimo de f se requiere que las tres derivadas parciales,
∂f/∂x1, ∂f/∂x2 y ∂f/∂x3, sean nulas.
∂f
∂x1
=2(a11x1 + a12x2 + a13x3 − b1)a11
+ 2(a21x1 + a22x2 + a23x3 − b2)a21
+ 2(a31x1 + a32x2 + a33x3 − b3)a31
+ 2(a41x1 + a42x2 + a43x3 − b4)a41.
Escribiendo de manera matricial,
∂f
∂x1
=2(A1·x − b1)a11 + 2(A2·x − b2)a21 + 2(A3·x − b3)a31
+ 2(A4·x − b4)a41.
Si B es una matriz y u un vector columna, entonces (Bu)i = Bi·u.
∂f
∂x1
= 2

((Ax)1 − b1)a11 + ((Ax)2 − b2)a21 + ((Ax)3 − b3)a31
+((Ax)4 − b4a41

,
= 2
4
X
i=1
(Ax − b)i ai1,
= 2
4
X
i=1
(A·1)i(Ax − b)i,
= 2
4
X
i=1
(AT
1·)i(Ax − b)i,
= 2AT
1·(Ax − b),
= 2 AT
(Ax − b)

1
66 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
De manera semejante,
∂f
∂x2
= 2 AT
(Ax − b)

2
,
∂f
∂x3
= 2 AT
(Ax − b)

3
Igualando a cero las tres derivadas parciales y quitando el 2, se tiene
AT
(Ax − b)

1
= 0,
AT
(Ax − b)

2
= 0,
AT
(Ax − b)

3
= 0
Es decir,
AT
(Ax − b) = 0,
AT
A x = AT
b . (2.16)
Las ecuaciones (2.16) se llaman ecuaciones normales para la solución (o
seudosolución) de un sistema de ecuaciones por mı́nimos cuadrados.
La matriz AT
A es simétrica, de tamaño n×n. En general, si A es una matriz
m × n de rango r, entonces AT
A también es de rango r (ver [Str86]). Como
se supuso que el rango de A es n, entonces AT
A es invertible. Más aún, AT
A
es definida positiva.
Por ser AT
A invertible, hay una única solución de (2.16), o sea, hay un
solo vector x que hace que las derivadas parciales sean nulas. En general,
las derivadas parciales nulas son simplemente una condición necesaria para
obtener el mı́nimo de una función (también lo es para máximos o para puntos
de silla), pero en este caso, como AT
A es definida positiva, f es convexa, y
entonces anular las derivadas parciales se convierte en condición necesaria y
suficiente para el mı́nimo.
En resumen, si las columnas de A son linealmente independientes, entonces
la solución por mı́nimos cuadrados existe y es única. Para obtener la solución
por mı́nimos cuadrados se resuelven las ecuaciones normales.
Como AT
A es definida positiva, (2.16) se puede resolver por el método de
Cholesky. Si m ≥ n y al hacer la factorización de Cholesky resulta que
AT
A no es definida positiva, entonces las columnas de A son linealmente
dependientes.
Si el sistema Ax = b tiene solución exacta, ésta coincide con la solución por
mı́nimos cuadrados.
Héctor M. Mora E. Métodos Numéricos con Scilab 67
Ejemplo 2.16. Resolver por mı́nimos cuadrados:




2 1 0
−1 −2 3
−2 2 1
5 4 −2






x1
x2
x3

 =




3.1
8.9
−3.1
0.1



 .
Las ecuaciones normales dan:


34 20 −15
20 25 −12
−15 −12 14




x1
x2
x3

 =


4.0
−20.5
23.4


La solución por mı́nimos cuadrados es:
x = (2.0252, −1.0132, 2.9728) .
El error, Ax − b, es:




−0.0628
0.0196
−0.0039
0.0275



 . ✸
Ejemplo 2.17. Resolver por mı́nimos cuadrados:




2 1 3
−1 −2 0
−2 2 −6
5 4 6






x1
x2
x3

 =




3
9
−3
0



 .
Las ecuaciones normales dan:


34 20 48
20 25 15
48 15 81




x1
x2
x3

 =


3
−21
27


Al tratar de resolver este sistema de ecuaciones por el método de Cholesky;
no se puede obtener la factorización de Cholesky, luego AT
A no es definida
positiva, es decir, las columnas de A son linealmente dependientes. Si se
aplica el método de Gauss, se obtiene que AT
A es singular y se concluye que
las columnas de A son linealmente dependientes. ✸
68 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Ejemplo 2.18. Resolver por mı́nimos cuadrados:




2 1
−1 −2
−2 2
5 4





x1
x2

=




3
0
−6
6



 .
Las ecuaciones normales dan:

34 20
20 25
 
x1
x2

=

48
15

La solución por mı́nimos cuadrados es:
x = (2, −1) .
El error, Ax − b, es: 



0
0
0
0



 .
En este caso, el sistema inicial tenı́a solución exacta y la solución por mı́ni-
mos cuadrados coincide con ella. ✸
La solución por mı́nimos cuadrados de un sistema sobredeterminado tam-
bién se puede hacer en Scilab mediante (a’*a)(a’*b) o por medio de
pinv(a)*b , pero ambas son menos eficientes que ab .
La implementación eficiente de la solución por mı́nimos cuadrados, vı́a ecua-
ciones normales, debe tener en cuenta algunos detalles. No es necesario cons-
truir toda la matriz simétrica AT
A (n2 elementos). Basta con almacenar en
un arreglo de tamaño n(n + 1)/2 la parte triangular superior de AT
A.
Este almacenamiento puede ser por filas, es decir, primero los n elementos
de la primera fila, enseguida los n − 1 elementos de la segunda fila a par-
tir del elemento diagonal, después los n − 2 de la tercera fila a partir del
elemento diagonal y ası́ sucesivamente, hasta almacenar un solo elemento
de la fila n. Si se almacena la parte triangular superior de AT
A por colum-
nas, se almacena primero un elemento de la primera columna, enseguida dos
elementos de la segunda columna y ası́ sucesivamente. Cada una de estas
dos formas tiene sus ventajas y desventajas. La solución por el método de
Cholesky debe tener en cuenta este tipo de estructura de almacenamiento
de la información.
Héctor M. Mora E. Métodos Numéricos con Scilab 69
Otros métodos eficientes para resolver sistemas de ecuaciones por mı́nimos
cuadrados utilizan matrices ortogonales de Givens o de Householder.
2.13. Sistemas tridiagonales
Un sistema Ax = b se llama tridiagonal si la matriz A es tridiagonal, o sea,
si
aij = 0 cuando |i − j|  1,
es decir, A es de la forma
A =









a11 a12 0 0 · · · 0
a21 a22 a23 0 0
0 a32 a33 a34 0
0 0 a43 a44 0
.
.
.
0 0 0 0 · · · ann









.
Estos sistemas se presentan en algunos problemas particulares, por ejemplo,
al resolver, mediante diferencias finitas, una ecuación diferencial lineal de
segundo orden con condiciones de frontera o en el cálculo de los coeficientes
de un trazador cúbico (spline).
Obviamente este sistema se puede resolver mediante el método de Gauss.
No obstante, dadas las caracterı́sticas especiales de la matriz, es mucho más
eficiente sacar provecho de ellas. Se puede mostrar que, si A admite descom-
posición LU, entonces estas dos matrices también guardan la estructura de
A, es decir, L, además de ser triangular inferior, tiene ceros por debajo de
la “subdiagonal” y U, además de ser triangular superior, tiene ceros por
encima de la “superdiagonal”.
Para simplificar, denotemos con fi los elementos de la subdiagonal de L, di
los elementos de la diagonal de U y ui los elementos de la superdiagonal de
70 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
U. Se conoce A y se desea conocer L y U a partir de la siguiente igualdad:











1 0 0 0 · · · 0 0
f1 1 0 0 0 0
0 f2 1 0 0 0
0 0 f3 1 0 0
...
0 0 0 0 1 0
0 0 0 0 fn−1 1






















d1 u1 0 0 · · · 0 0
0 d2 u2 0 0 0
0 0 d3 u3 0 0
0 0 0 d4 0 0
...
0 0 0 0 dn−1 un−1
0 0 0 0 0 dn











= A .
Sean Fi la fila i de L y Cj la columna j de U. Entonces, los productos de
las filas de L por las columnas de U producen las siguientes igualdades:
F1C1 : d1 = a11
F1C2 : u1 = a12
F2C1 : f1d1 = a21
F2C2 : f1u1 + d2 = a22
F2C3 : u2 = a23
F3C2 : f2d2 = a32
F3C3 : f2u2 + d3 = a33
F3C4 : u3 = a34
.
.
.
FiCi−1 : fi−1di−1 = ai,i−1
FiCi : fi−1ui−1 + di = aii
FiCi+1 : ui = ai,i+1
A partir de las igualdades anteriores se obtienen los valores ui, fi y di:
d1 = a11,
ui = ai,i+1 , i = 1, ..., n − 1,
fi =
ai+1,i
di
,
di+1 = ai+1,i+1 − fiui
(2.17)
Resolver Ax = b es equivalente a resolver LUx = b. Entonces, si Ux = y, se
resuelve Ly = b y después Ux = y. Al explicitar las anteriores igualdades se
Héctor M. Mora E. Métodos Numéricos con Scilab 71
tiene:
y1 = b1,
fi−1yi−1 + yi = bi,
dnxn = yn,
dixi + uixi+1 = yi .
Las fórmulas explı́citas son:
y1 = b1,
yi = bi − fi−1yi−1, i = 2, ..., n,
xn =
yn
dn
,
xi =
yi − uixi+1
di
, i = n − 1, n − 2, ..., 1.
(2.18)
Ejemplo 2.19. Resolver el sistema Ax = b, con
A =




2 4 0 0
3 5 6 0
0 −4 −5 1
0 0 −1 −2



 , b =




−8
1
−2
−10



 .
Entonces,
d1 = 2 ,
u1 = 4 ,
f1 =
3
2
= 1.5 ,
d2 = 5 − 1.5 × 4 = −1 ,
u2 = 6 ,
f2 =
−4
−1
= 4 ,
d3 = −5 − 4 × 6 = −29 ,
u3 = 1,
f3 =
−1
−29
= 0.034483 ,
d4 = −2 − 0.034483 × 1 = −2.034483 ,
72 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
Ahora, la solución de los sistemas Ly = b, Ux = y :
y1 = −8,
y2 = 1 − 1.5 × (−8) = 13 ,
y3 = −2 − 4 × 13 = −54 ,
y4 = −10 − 0.034483 × −54 = −8.137931 ,
x4 =
−8.137931
−2.034483
= 4 ,
x3 =
−54 − 1 × 4
−29
= 2 ,
x2 =
13 − 6 × 2
−1
= −1 ,
x1 =
−8 − 4 × (−1)
2
= −2 . ✸
Las fórmulas (2.17) y (2.18) se pueden utilizar sin ningún problema si todos
los di son no nulos. Algún elemento diagonal de U resulta nulo si la matriz
A no es invertible o si simplemente A no tiene factorización LU.
Ejemplo 2.20. Consideremos las dos matrices siguientes:
A =

2 −3
−8 12

, A′
=

0 2
3 4

.
La matriz A no es invertible y d2 resulta nulo. La matriz A′ es invertible
pero no tiene factorización LU. En este último caso, se obtiene d1 = 0 . ✸
Si la matriz A es grande no se justifica almacenar todos los n2 elementos.
Basta con almacenar la diagonal, la subdiagonal y la superdiagonal, es decir
3n − 2 números. Mejor aún, en el mismo sitio donde inicialmente se al-
macenan los elementos diagonales de A se pueden almacenar los elementos
diagonales de U a medida que se van calculando, donde se almacenan los
elementos subdiagonales de A se pueden almacenar los elementos subdiag-
onales de L, los elementos superdiagonales de A son los mismos elementos
superdiagonales de U, donde se almacena b se puede almacenar y y, poste-
riormente, x.
En resumen, una implementación eficiente utiliza 4 vectores d, f, u y b. El
primero y el cuarto están en Rn, los otros dos están en Rn−1. Al comienzo
Héctor M. Mora E. Métodos Numéricos con Scilab 73
d, f, u contienen datos de A y los términos independientes están en b. Al
final d, f, u contienen datos de L, U y la solución final (los xi) estará en b.
Solución de sistema tridiagonal
datos: d, f, u, b, ε
si |d1| ≤ ε ent parar
para i = 1, ..., n − 1
fi =
fi
di
di+1 = di+1 − fi ∗ ui
si |di+1| ≤ ε ent parar
fin-para
para i = 2, ..., n
bi = bi − fi−1bi−1
fin-para
bn =
bn
dn
para i = n − 1, n − 2, ..., 1
bi =
bi − uibi+1
di
fin-para
2.14. Cálculo de la inversa
En la mayorı́a de los casos no es necesario calcular explı́citamente la inversa
de una matriz, pues basta con resolver un sistema de ecuaciones. De todas
formas, algunas veces es indispensable obtener la inversa.
A continuación se presenta el algoritmo para el cálculo de la inversa, tomado
y adaptado de [Ste98], basado en la factorización LU = PA (con pivoteo
parcial). Se utiliza un vector p en Zn−1 que tiene toda la información in-
dispensable para obtener la matriz P, pero no representa directamente la
permutación. Al principio p es simplemente (1, 2, ..., n − 1).
Solamente se utiliza memoria para una matriz. Al principio está A; al final
del algoritmo, si indic = 1, está la inversa. Cuando indic = 0, la matriz
es singular o casi singular.
Se utiliza la notación de Matlab y Scilab para las submatrices de A. Para
los elementos de A y p se utiliza la notación usual con subı́ndices.
74 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
datos: A, ε
resultados: la inversa almacenada en A, indic
Parte 1: factorización
p = (1, 2, ..., n − 1)
para k = 1 : n − 1
determinar m tal que |amk| = max{ |aik| : i = k, ..., n}
si |amk| ≤ ε
indic = 0, parar
fin-si
pk = m
si m  k
A(k, : ) ↔ A(m, : )
fin-si
A(k + 1 : n, k) = A(k + 1 : n, k)/akk
A(k + 1 : n, k + 1 : n) = A(k + 1 : n, k + 1 : n) − A(k + 1 : n, k)A(k, k + 1 : n)
fin-para
si |ann| ≤ ε
indic = 0, parar
fin-si
indic = 1
Parte 2: cálculo de U−1
para k = 1 : n
akk = 1/akk
para i = 1 : k − 1
aik = −akkA(i, i : k − 1)A(i : k − 1, k)
fin-para
fin-para
Parte 3: cálculo de U−1L−1
para k = n − 1 : −1 : 1
t = A(k + 1 : n, k)
A(k + 1 : n, k) = 0
A( : , k) = A( : , k) − A( : , k + 1 : n) t
fin-para
Héctor M. Mora E. Métodos Numéricos con Scilab 75
Parte 4: reordenamiento de columnas
para k = n − 1 : −1 : 1
si pk 6= k
A( : , k) ↔ A( : , pk)
fin-si
fin-para
Ejemplo 2.21.
A inicial
-2.0000 -4.0000 4.0000 -2.0000
-5.0000 1.0000 2.0000 1.0000
4.0000 -3.0000 0.0000 -4.0000
-2.0000 -3.0000 1.0000 -1.0000
p inicial :
1 2 3
Factorización
k = 1
m = 2
p :
2 2 3
intercambio de filas : 1 2
A después de intercambio
-5.0000 1.0000 2.0000 1.0000
-2.0000 -4.0000 4.0000 -2.0000
4.0000 -3.0000 0.0000 -4.0000
-2.0000 -3.0000 1.0000 -1.0000
A después de operaciones
-5.0000 1.0000 2.0000 1.0000
0.4000 -4.4000 3.2000 -2.4000
-0.8000 -2.2000 1.6000 -3.2000
0.4000 -3.4000 0.2000 -1.4000
k = 2
m = 2
p :
2 2 3
A después de operaciones
76 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
-5.0000 1.0000 2.0000 1.0000
0.4000 -4.4000 3.2000 -2.4000
-0.8000 0.5000 0.0000 -2.0000
0.4000 0.7727 -2.2727 0.4545
k = 3
m = 4
p :
2 2 4
intercambio de filas : 3 4
A después de intercambio
-5.0000 1.0000 2.0000 1.0000
0.4000 -4.4000 3.2000 -2.4000
0.4000 0.7727 -2.2727 0.4545
-0.8000 0.5000 0.0000 -2.0000
A después de operaciones
-5.0000 1.0000 2.0000 1.0000
0.4000 -4.4000 3.2000 -2.4000
0.4000 0.7727 -2.2727 0.4545
-0.8000 0.5000 -0.0000 -2.0000
A después de calcular inv. de U
-0.2000 -0.0455 -0.2400 -0.1000
0.4000 -0.2273 -0.3200 0.2000
0.4000 0.7727 -0.4400 -0.1000
-0.8000 0.5000 -0.0000 -0.5000
A después de calcular U1*L1
-0.2600 0.1900 -0.2400 -0.1000
0.3200 -0.0800 -0.3200 0.2000
-0.0600 0.3900 -0.4400 -0.1000
-0.5000 0.2500 0.0000 -0.5000
inversa: después de reordenamiento
0.1900 -0.2600 -0.1000 -0.2400
-0.0800 0.3200 0.2000 -0.3200
0.3900 -0.0600 -0.1000 -0.4400
0.2500 -0.5000 -0.5000 0.0000
Expresiones explı́citas de L, U, P
Héctor M. Mora E. Métodos Numéricos con Scilab 77
L
1.0000 0.0000 0.0000 0.0000
0.4000 1.0000 0.0000 0.0000
0.4000 0.7727 1.0000 0.0000
-0.8000 0.5000 -0.0000 1.0000
U
-5.0000 1.0000 2.0000 1.0000
0.0000 -4.4000 3.2000 -2.4000
0.0000 0.0000 -2.2727 0.4545
0.0000 0.0000 0.0000 -2.0000
P :
0 1 0 0
1 0 0 0
0 0 0 1
0 0 1 0
Ejercicios
2.1 Considere los sistemas de ecuaciones x = b con los siguientes datos.
Trate de obtener la solución por varios métodos. Algunos métodos no
se pueden aplicar.
A =




3 1 −2 −2
0 −3 5 0
0 0 1 1
0 0 0 −5



 , b =




4
5
−2
15




2.2
A =




4 0 0 0
1 −3 0 0
−3 −3 4 0
3 0 5 −1



 , b =




12
−3
−23
0




2.3
A =




5 −4 5 0
4 0 1 2
−2 0 5 −5
4 4 3 −1



 , b =




−17
−23
18
−24




78 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES
2.4
A =




−1 −2 4 1
4 2 −3 −3
3 2 3 −3
24 0 46 −20



 , b =




−2
−6
−16
−140




2.5
A =




16 −8 −16 −16
−8 29 28 −12
−16 28 48 −12
−16 −12 −12 66



 , b =




−32
146
184
−208




2.6
A =


40 −8 −52
−8 3 9
−52 9 69

 , b =


120
−17
−163


2.7
A =




16 4 0 16
4 10 12 −8
0 12 41 −1
16 −8 −1 21



 , b =




80
−16
−83
87




2.8
A =






−15 −12 0 0 0
15 4 −16 0 0
0 4 7 −4 0
0 0 3 20 2
0 0 0 0 5






, b =






87
−15
−44
46
−5






2.9
A =






25 5 0 0 0
10 2 0 0 0
0 0 −5 4 0
0 0 −4 12 −10
0 0 0 2 −2






, b =






115
46
16
48
8






2.10
A =








9 15 −15 0 0 0
15 26 −23 4 0 0
−15 −23 38 2 −12 0
0 4 2 45 −12 0
0 0 −12 −12 36 4
0 0 0 0 4 29








, b =








39
73
−31
20
−8
116








Héctor M. Mora E. Métodos Numéricos con Scilab 79
Utilice el método de Cholesky. Compare la forma de U con la forma
de A. Obtenga información sobre las matrices banda
2.11 Resuelva el sistema Ax = b obteniendo la factorización PA = LU.
Usándola, resuelva Ax = d.
A =


4 −5 5
2 −1 −5
4 4 −3

 , b =


−38
2
14

 , d =


3
−9
14


2.12 En Scilab construya G, una matriz aleatoria grande, por ejemplo,
n = 2000 o 3000, con entradas en ]0, 1[. Si es necesario, modifique
stacksize. Construya S = G + GT
(simétrica). Construya A = S +
2nIn. Averigüe sobre matrices de diagonal dominante. Demuestre que
A lo es. ¿Es definida positiva? Construya aleatoriamente un vector
columna b. Mida el tiempo de ab. Mida el tiempo de chola(a). ¿Co-
incide más o menos con lo esperado?
Capı́tulo 3
Métodos iterativos para
sistemas de ecuaciones
lineales
Los métodos de Gauss y Cholesky hacen parte de los métodos directos o
finitos. Al cabo de un número finito de operaciones, en ausencia de errores
de redondeo, se obtiene x∗ solución del sistema Ax = b.
Los métodos de Jacobi, Gauss-Seidel, sobrerrelajación (SOR), hacen parte
de los métodos llamados indirectos o iterativos. En ellos se comienza con
x0 = (x0
1, x0
2, ..., x0
n), una aproximación inicial de la solución. A partir de x0
se construye una nueva aproximación de la solución, x1 = (x1
1, x1
2, ..., x1
n).
A partir de x1 se construye x2 (aquı́ el superı́ndice indica la iteración y
no indica una potencia). Ası́ sucesivamente se construye una sucesión de
vectores {xk}, con el objetivo, no siempre garantizado, de que
lim
k→∞
xk
= x∗
.
Generalmente los métodos indirectos son una buena opción cuando la matriz
es muy grande y dispersa o rala (sparse), es decir, cuando el número de
elementos no nulos es pequeño en comparación con n2, número total de
elementos de A. En estos casos se debe utilizar una estructura de datos
adecuada que permita almacenar únicamente los elementos no nulos.
80
Héctor M. Mora E. Métodos Numéricos con Scilab 81
3.1. Método de Gauss-Seidel
En cada iteración del método de Gauss-Seidel, hay n subiteraciones. En la
primera subiteración se modifica únicamente x1. Las demás coordenadas x2,
x3, ..., xn no se modifican. El cálculo de x1 se hace de tal manera que se
satisfaga la primera ecuación.
x1
1 =
b1 − (a12x0
2 + a13x0
3 + · · · + a1nx0
n)
a11
,
x1
i = x0
i , i = 2, ..., n.
En la segunda subiteración se modifica únicamente x2. Las demás coorde-
nadas x1, x3, ..., xn no se modifican. El cálculo de x2 se hace de tal manera
que se satisfaga la segunda ecuación.
x2
2 =
b2 − (a21x1
1 + a23x1
3 + · · · + a2nx1
n)
a22
,
x2
i = x1
i , i = 1, 3, ..., n.
Ası́ sucesivamente, en la n-ésima subiteración se modifica únicamente xn.
Las demás coordenadas x1, x2, ..., xn−1 no se modifican. El cálculo de xn se
hace de tal manera que se satisfaga la n-ésima ecuación.
xn
n =
bn − (an1xn−1
1 + an3xn−1
3 + · · · + annxn−1
n )
ann
,
xn
i = xn−1
i , i = 1, 2, ..., n − 1.
Ejemplo 3.1. Resolver




10 2 −1 0
1 20 −2 3
−2 1 30 0
1 2 3 20








x1
x2
x3
x4



 =




26
−15
53
47




82
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
partiendo de x0 = (1, 2, 3, 4).
x1
1 =
26 − (2 × 2 + (−1) × 3 + 0 × 4)
10
= 2.5,
x1
= (2.5, 2, 3, 4).
x2
2 =
−15 − (1 × 2.5 + (−2) × 3 + 3 × 4)
20
= −1.175,
x2
= (2.5, −1.175, 3, 4).
x3
3 =
53 − (−2 × 2.5 + 1 × (−1.175) + 0 × 4)
30
= 1.9725,
x3
= (2.5, −1.175, 1.9725, 4).
x4
4 =
47 − (1 × 2.5 + 2 × (−1.175) + 3 × 1.9725)
20
= 2.0466,
x4
= (2.5, −1.175, 1.9725, 2.0466).
Una vez que se ha hecho una iteración completa (n subiteraciones), se utiliza
el último x obtenido como aproximación inicial y se vuelve a empezar; se
calcula x1 de tal manera que se satisfaga la primera ecuación, luego se calcula
x2... A continuación están las iteraciones siguientes para el ejemplo anterior.
3.0323 −1.1750 1.9725 2.0466
3.0323 −1.0114 1.9725 2.0466
3.0323 −1.0114 2.0025 2.0466
3.0323 −1.0114 2.0025 1.9991
3.0025 −1.0114 2.0025 1.9991
3.0025 −0.9997 2.0025 1.9991
3.0025 −0.9997 2.0002 1.9991
3.0025 −0.9997 2.0002 1.9998
3.0000 −0.9997 2.0002 1.9998
3.0000 −1.0000 2.0002 1.9998
3.0000 −1.0000 2.0000 1.9998
3.0000 −1.0000 2.0000 2.0000
3.0000 −1.0000 2.0000 2.0000
3.0000 −1.0000 2.0000 2.0000
3.0000 −1.0000 2.0000 2.0000
3.0000 −1.0000 2.0000 2.0000
Héctor M. Mora E. Métodos Numéricos con Scilab 83
Teóricamente, el método de Gauss-Seidel puede ser un proceso infinito. En
la práctica, el proceso se acaba cuando de xk a xk+n los cambios son muy
pequeños. Esto quiere decir que el x actual es casi la solución x∗.
Como el método no siempre converge, entonces otra detención del proceso,
no deseada pero posible, está determinada cuando el número de iteraciones
realizadas es igual a un número máximo de iteraciones previsto.
El siguiente ejemplo no es convergente, ni siquiera empezando de con una
aproximación inicial muy cercana a la solución. La solución exacta es x =
(1, 1, 1).
Ejemplo 3.2. Resolver


−1 2 10
11 −1 2
1 5 2




x1
x2
x3

 =


11
12
8


partiendo de x0 = (1.0001, 1.0001, 1.0001).
1.0012 1.0001 1.0001
1.0012 1.0134 1.0001
1.0012 1.0134 0.9660
0.6863 1.0134 0.9660
0.6863 −2.5189 0.9660
0.6863 −2.5189 9.9541
83.5031 −2.5189 9.9541
83.5031 926.4428 9.9541
83.5031 926.4428 −2353.8586
Algunos criterios garantizan la convergencia del método de Gauss-Seidel.
Por ser condiciones suficientes para la convergencia son criterios demasiado
fuertes, es decir, la matriz A puede no cumplir estos requisitos y, sin embargo,
el método puede ser convergente. En la práctica, con frecuencia, es muy
dispendioso poder aplicar estos criterios.
Una matriz cuadrada es de diagonal estrictamente dominante por filas si
en cada fila el valor absoluto del elemento diagonal es mayor que la suma
de los valores absolutos de los otros elementos de la fila,
|aii| 
n
X
j=1,j6=i
|aij| , ∀i.
84
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Teorema 3.1. Si A es de diagonal estrictamente dominante por filas, en-
tonces el método de Gauss-Seidel converge para cualquier x0 inicial.
Teorema 3.2. Si A es definida positiva, entonces el método de Gauss-Seidel
converge para cualquier x0 inicial.
Teóricamente el método de Gauss-Seidel se deberı́a detener cuando kxk −
x∗k  ε. Sin embargo, la condición anterior necesita conocer x∗, que es pre-
cisamente lo que se está buscando. Entonces, de manera práctica el método
de GS se detiene cuando kxk − xk+nk  ε.
Dejando de lado los superı́ndices, las fórmulas del método de Gauss-Seidel
se pueden reescribir para facilitar el algoritmo y para mostrar que kxk −x∗k
y kxk − xk+nk están relacionadas.
xi ←
bi −
n
X
j=1,j6=i
aijxj
aii
,
xi ←
bi −
n
X
j=1
aijxj + aiixi
aii
,
xi ← xi +
bi − Ai· x
aii
.
Sean
ri = bi − Ai· x,
δi =
ri
aii
·
El valor ri es el error, residuo o resto que se comete en la i-ésima ecuación
al utilizar el x actual. Si ri = 0, entonces la ecuación i-ésima se satisface. El
valor δi es la modificación que sufre xi en una iteración.
Sean r = (r1, r2, ..., rn), δ = (δ1, δ2, ..., δn). Entonces xk+n = xk +δ. Además,
xk es solución si y solamente si r = 0, o sea, si y solamente si δ = 0. Lo
anterior justifica que el método de GS se detenga cuando kδk ≤ ε. La norma
kδk puede ser la norma euclidiana o cualquier otra norma.
Si en el criterio de parada del algoritmo se desea enfatizar sobre los errores o
residuos, entonces se puede comparar kδk con ε/k(a11, ..., ann)k; por ejemplo,
kδk ≤
ε
max |aii|
·
Héctor M. Mora E. Métodos Numéricos con Scilab 85
El esquema del algoritmo para resolver un sistema de ecuaciones por el
método de Gauss-Seidel es:
Método de Gauss-Seidel
datos: A, b, x0, ε, maxit
x = x0
para k = 1, ...,maxit
nrmD← 0
para i = 1, ..., n
δi = (bi − Ai· x)/aii
xi ← xi + δi
nrmD←nrmD+|δi|
fin-para i
si nrmD ≤ ε ent x∗ ≈ x, salir
fin-para k
A continuación hay una versión, no muy eficiente, que permite mostrar los
resultados intermedios
function [x, ind, k] = GS(A, b, x0, eps, maxit)
//
// metodo de Gauss Seidel para resolver A x = b
//
// A matriz cuadrada,
// b vector columna de terminos independientes,
// x0 vector columna inicial
//
// ind valdra -1 si hay un elemento diagonal nulo o casi,
//
// 1 si se obtuvo un aproximacion
// de la solucion, con la precision deseada,
//
// 0 si no se obtuvo una buena aproximacion.
//
// k indicara el numero de iteraciones
if min( abs(diag(A)) ) = %eps
ind = -1
x = []
86
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
return
end
x = x0
n = size(x,1)
ind = 1
for k = 1:maxit
//printf(’n k = %dn’, k)
D = 0
for i = 1:n
di = ( b(i) - A(i,:)*x )/A(i,i)
x(i) = x(i) + di
D = max(D, abs(di))
end
disp(x’)
if D  eps, return, end
end
ind = 0
endfunction
En una implementación eficiente para matrices dispersas, se requiere una
estructura en la que se almacenan únicamente los elementos no nulos y que
permita efectuar el producto de una fila de A por un vector, es decir, que
permita reemplazar eficientemente la orden A(i,:)*x.
3.2. Normas vectoriales
El concepto de norma corresponde simplemente a la abstracción del con-
cepto de tamaño de un vector. Consideremos el vector que va de (0, 0, 0) a
(2, 3, −4). Su tamaño o magnitud es simplemente
p
22 + 32 + (−4)2 =
√
29 .
Sea V un espacio vectorial real. Una norma es una función µ : V → R tal
que
µ(x) ≥ 0, ∀x ∈ V,
µ(x) = 0 sssi x = 0,
µ(αx) = |α| µ(x), ∀α ∈ R, ∀x ∈ V,
µ(x + y) ≤ µ(x) + µ(y), ∀x, y ∈ V. (desigualdad triangular)
Héctor M. Mora E. Métodos Numéricos con Scilab 87
Algunos ejemplos clásicos de normas en Rn son:
1. ||x||2 = ||x|| =
Pn
i=1 x2
i
1/2
norma euclidiana,
2. ||x||p = (
Pn
i=1 |xi|p)1/p
norma de Holder de orden p ≥ 1,
3. ||x||∞ = ||x||max = max1≤i≤n |xi|,
4. k||x|| con k  0 y || || una norma,
5. ||x||A =
√
xT
Ax con A definida positiva.
Se puede mostrar que
lim
p→∞
||x||p = ||x||∞ = ||x||max.
Sea x = (3, 0, −4), entonces
||x||1 = 7,
||x||2 = 5,
||x||∞ = 4.
3.2.1. En Scilab
Si x es un vector fila o columna, entonces
norm(x) calcula ||x||2 ,
norm(x, 2) calcula ||x||2 ,
norm(x, 1) calcula ||x||1 ,
norm(x, 4) calcula ||x||4 ,
norm(x, ’inf’) calcula ||x||∞ .
3.3. Normas matriciales
En el conjunto de matrices cuadradas de orden n se puede utilizar cualquier
norma definida sobre Rn2
. Dado que en el conjunto de matrices cuadradas
está definido el producto, es interesante contar con normas que tengan carac-
terı́sticas especiales relativas al producto entre matrices y al producto entre
88
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
una matriz y un vector. En algunos casos, es conveniente que se tengan estas
dos propiedades:
i) ||AB|| ≤ ||A|| ||B||,
ii) ||Ax|| ≤ ||A|| ||x||.
Ejemplo 3.3. Sean
A =

1 2
3 4

, B =

5 6
7 8

, x =

5
6

,
entonces
AB =

19 22
43 50

, Ax =

17
39

,
pero
||AB||∞ = 50, ||A||∞||B||∞ = 4 × 8 = 32
||Ax||∞ = 39, ||A||∞||x||∞ = 4 × 6 = 24. ✸
Una norma || || definida sobre el Rn×n (conjunto de matrices n × n) se
llama matricial o submultiplicativa si, además de las propiedades usuales de
una norma, para cualquier par de matrices A y B
||AB|| ≤ ||A|| ||B||.
Sean || ||m una norma matricial sobre Rn×n y || ||v una norma sobre Rn.
Estas dos normas se llaman compatibles o consistentes si, para toda matriz
A ∈ Rn×n y para todo x ∈ Rn
||Ax||v ≤ ||A||m||x||v .
Una manera común de construir una norma que sean matricial y compatible
consiste en generarla a partir de un norma sobre Rn. Sea || || una norma
sobre Rn. La norma generado o inducida por esta norma se define de varias
Héctor M. Mora E. Métodos Numéricos con Scilab 89
maneras, todas ellas equivalentes:
|||A||| = sup
x6=0
||Ax||
||x||
(3.1)
|||A||| = max
x6=0
||Ax||
||x||
(3.2)
|||A||| = sup
||x||=1
||Ax|| (3.3)
|||A||| = max
||x||=1
||Ax||. (3.4)
Proposición 3.1. La definición anterior está bien hecha, es decir, ||| |||
es una norma, es matricial y es compatible con || ||.
Demostración. Sea
µ(A) = sup
x6=0
||Ax||
||x||
Ante todo es necesario mostrar que la función µ está bien definida, o sea,
para toda matriz A,
µ(A) = sup
x6=0
||Ax||
||x||
 ∞.
µ(A) = sup
x6=0
A

||x||
x
||x||

||x||
= sup
x6=0
||x||A
x
||x||
||x||
= sup
x6=0
||x|| A
x
||x||
||x||
= sup
x6=0
A
x
||x||
= sup
||ξ||=1
||Aξ||
La función ξ 7→ ϕ(ξ) = ||Aξ|| es continua y el conjunto S = {ξ ∈ Rn : ||ξ|| =
1} es compacto (cerrado y acotado), luego ϕ(S) es compacto, en particular
acotado, es decir, µ(A) = sup ϕ(S)  ∞. Además, el sup se alcanza en un
punto de S. Luego las cuatro definiciones, (3.1) y siguientes, coinciden.
Claramente µ(A) ≥ 0. Veamos que µ(A) = 0 sssi A = 0. Si A = 0, entonces
µ(A) = 0. Sea A 6= 0. Entonces A tiene por lo menos una columna no nula.
90
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Sea A·j 6= 0 y v = ej/||ej|| . Por definición ||v|| = 1.
µ(A) ≥ ||Av|| = A
ej
||ej||
=
A·j
||ej||
=
||A·j||
||ej||
 0.
µ(λA) = max
||x||=1
||λAx|| = max
||x||=1
|λ| ||Ax|| = |λ| max
||x||=1
||Ax|| = |λ|µ(A).
Para mostrar que µ(A + B) ≤ µ(A) + µ(B) se usa la siguiente propiedad:
sup
x∈X
( f(x) + g(x) ) ≤ sup
x∈X
f(x) + sup
x∈X
g(x)
µ(A + B) = sup
||x||=1
||(A + B)x|| = sup
||x||=1
||Ax + Bx|| ≤ sup
||x||=1
(||Ax|| + ||Bx||)
≤ sup
||x||=1
||Ax|| + sup
||x||=1
||Bx|| = µ(A) + µ(B)
Hasta ahora se ha mostrado que µ es una norma sobre Rn×n. Si se uti-
lizó la norma || ||△ en Rn, la norma generada o subordinada sobre Rn×n se
denotarı́a por ||| |||△. Sin embargo, cuando no hay ambigüedad, es la
notación más usual, ||A||△ indica la norma generada evaluada en
la matriz A y ||x||△ indica la norma original evaluada en el vector
columna x.
Veamos ahora que la norma original y la generada son compatibles. Obvi-
amente si x = 0, entonces ||Ax|| ≤ ||A|| ||x||. Sea x 6= 0 y ξ = x/||x|| de
norma uno.
||A|| ≥ ||Aξ|| = A
x
||x||
=
||Ax||
||x||
, luego ||A|| ||x|| ≥ ||Ax||.
Héctor M. Mora E. Métodos Numéricos con Scilab 91
Queda por mostrar que esta norma generada es matricial.
||AB|| = max
||x||=1
||ABx|| = max
||x||=1
||A(Bx)|| ≤ max
||x||=1
||A|| ||Bx||
= ||A|| max
||x||=1
||Bx|| = ||A|| ||B||. △
Para las tres normas vectoriales más usadas, las normas matriciales gener-
adas son:
||A||1 = max
1≤j≤n
n
X
i=1
|aij|, (3.5)
||A||2 =
p
ρ(AT
A) (norma espectral), (3.6)
||A||∞ = max
1≤i≤n
n
X
j=1
|aij|. (3.7)
Si la matriz A se considera como un vector, entonces se puede aplicar la
norma euclidiana. Esta norma resulta ser matricial. Esta norma se conoce
con el nombre de norma de Frobenius o también de Schur.
||A||F =


X
i,j
(aij)2


1/2
. (3.8)
Para cualquier norma generada ||I|| = 1. Como ||I||F =
√
n, entonces esta
norma no puede ser generada por ninguna norma vectorial
Ejemplo 3.4. Sea
A =

1 2
3 −4

Entonces,
AT
A =

10 −10
−10 20

Sus valores propios son 3.8196601 y 26.18034. Luego
||A||1 = 6,
||A||2 = 5.1166727,
||A||∞ = 7.
92
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Proposición 3.2. ||A||1 = max
j
n
X
i=1
|aij|
Demostración.
||A||1 = max
||x||1 =1
||Ax||1 = max
||x||1 =1
n
X
i=1
|(Ax)i|
= max
||x||1 =1
n
X
i=1
|Ai·x| = max
||x||1 =1
n
X
i=1
n
X
j=1
aijxj
≤ max
||x||1 =1
n
X
i=1
n
X
j=1
|aijxj| = max
||x||1 =1
n
X
i=1
n
X
j=1
|aij| |xj|
= max
||x||1 =1
n
X
j=1
|xj|
n
X
i=1
|aij| = max
||x||1 =1
n
X
j=1
|xj|sj
donde sj =
Pn
i=1 |aij|. Si αj, βj ≥ 0 para todo j, entonces
n
X
j=1
αjβj ≤

max
j
βj



n
X
j=1
αj

 .
Luego
||A||1 ≤ max
||x||1 =1



max
j
sj



n
X
j=1
|xj|




= max
||x||1 =1

max
j
sj

= max
j
sj = max
j
n
X
i=1
|aij|
En resumen,
||A||1 ≤ max
j
n
X
i=1
|aij|.
Sea k tal que
Héctor M. Mora E. Métodos Numéricos con Scilab 93
n
X
i=1
|aik| = max
j
n
X
i=1
|aij|
||A||1 = max
||x||1 =1
||Ax||1 ≥ ||Ax||1 para todo x con ||x||1 = 1
||A||1 ≥ ||Aek
||1 = ||A·k||1 =
n
X
i=1
|aik| = max
j
n
X
i=1
|aij|
es decir,
||A||1 ≥ max
j
n
X
i=1
|aij|. 
Proposición 3.3. ||A||2 =
p
ρ(AT
A).
Demostración.
||A||2 = max
||x||2=1
||Ax||2
||A||2
2 = max
||x||2=1
||Ax||2
2 = max
||x||2=1
xT
AT
Ax
La matriz AT
A es simétrica y semidefinida positiva, todos sus valores propios
λ1, ..., λn son reales y no negativos. Se puede suponer que están ordenados:
ρ(AT
A) = λ1 ≥ λ2 ≥ ... ≥ λn ≥ 0.
Por el teorema espectral, AT
A es semejante, ortogonalmente, a la matriz
diagonal de sus valores propios. Las matrices se pueden reordenar para que
V T
(AT
A)V = diag(λ1, ..., λn) , con V ortogonal.
Sean v1, v2, ..., vn las columnas de V . Entonces v1, v2, ..., vn forman un
conjunto ortonormal de vectores propios, es decir,
(AT
A)vi
= λivi
,
viT
vj
= δij .
94
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Sea x tal que ||x||2 = 1, α = V T
x. Entonces ||α||2 = 1 y V α = V V T
x = x,
es decir,
x =
n
X
i=1
αivi
.
Entonces,
AT
Ax = AT
A
n
X
i=1
αivi
=
n
X
i=1
αiAT
Avi
=
n
X
i=1
αiλivi
xT
AT
Ax =


n
X
j=1
αjvj


T
n
X
i=1
αiλivi
!
=
n
X
i=1
α2
i λi
≤ λ1
n
X
i=1
α2
i = λ1
En resumen,
||A||2
2 ≤ λ1
||A||2 ≤
p
λ1
Por otro lado,
||A||2 ≥
√
xT
AT
Ax para todo x con ||x||2 = 1
||A||2 ≥
p
v1T
AT
Av1 =
p
v1T
λ1v1 =
p
λ1v1T
v1
||A||2 ≥
p
λ1. 
Proposición 3.4. ||A||∞ = max
i
n
X
j=1
|aij|
Héctor M. Mora E. Métodos Numéricos con Scilab 95
Demostración
||A||∞ = max
||x||∞ =1
||Ax||∞ = max
||x||∞ =1
max
i
|(Ax)i|
= max
||x||∞ =1
max
i
|Ai·x| = max
||x||∞ =1
max
i
|
n
X
j=1
aijxj|
≤ max
||x||∞ =1
max
i
n
X
j=1
|aij| |xj|
Como |xj| ≤ ||x||∞
||A||∞ ≤ max
||x||∞ =1
max
i
n
X
j=1
|aij| ||x||∞ = max
||x||∞ =1
||x||∞ max
i
n
X
j=1
|aij|
= max
i
n
X
j=1
|aij|
Veamos ahora la otra desigualdad. Si A = 0, se cumple la igualdad. Sea k
tal que
n
X
j=1
|akj| = max
i
n
X
j=1
|aij|
y sea x̄ definido por
x̄j =



0 si akj = 0
signo(akj) =
|akj|
akj
si akj 6= 0.
96
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
||A||∞ ≥ ||Ax||∞ si ||x||∞ = 1,
||A||∞ ≥ ||Ax̄||∞ = max
i
|(Ax̄)i| = max
i
|Ai·x̄|
= |Ai·x̄| para todo i,
||A||∞ ≥ |Ak·x̄| =
n
X
j=1
akj
|akj|
akj
=
n
X
j=1
|akj| =
n
X
j=1
|akj|
= max
i
n
X
j=1
|aij|.
En las sumas de las desigualdades anteriores, los términos donde akj = 0 no
se consideran. 
Proposición 3.5. Si || ||α es una norma matricial, entonces existe por lo
menos una norma vectorial compatible con ella.
Demostración. Sean X = [x 0 0 · · · 0] ∈ Rn×n y ||x|| = ||X||α. Se
puede comprobar que || || es una norma en Rn y que es compatible con
|| ||α.
Resumen de resultados
|| || definida en (3.4), es una norma.
|| || definida en (3.4), es matricial.
|| || (para matrices) es compatible con || || (para vectores columna).
||I|| = 1.
||A||1 = max
j
n
X
i=1
|aij|
||A||∞ = max
i
n
X
j=1
|aij|
Héctor M. Mora E. Métodos Numéricos con Scilab 97
||A||2 =
p
ρ(AT
A)
||A||2 = max{σ1, σ2, ..., σn} = max{valores singulares de A} (ver [AlK02]).
||A||2 = ρ(A) si A  0.
||A||F =
p
tr(AT
A) =
v
u
u
t
n
X
i=1
σ2
i
Si Q es ortogonal ||QA||F = ||AQ||F = ||A||F .
||A||2 ≤ ||A||F ≤
√
n||A||2
||A||2 = ||A||F sssi r(A) = 1.
1
√
n
||A||1 ≤ ||A||F ≤
√
n||A||1
1
√
n
||A||∞ ≤ ||A||F ≤
√
n||A||∞
||A||2
2 ≤ ||A||1||A||∞
ρ(A) ≤ ||A|| para toda norma matricial || ||.
Sea ε  0. Entonces existe una norma matricial || || tal que
||A|| ≤ ρ(A) + ε
|| ||F es multiplicativa (ver [Ste98]).
|| ||F y || ||2 son compatibles.
|| ||F no es la norma generada por ninguna norma || ||, ya que ||I||F =
√
n 6= 1.
n max
i,j
|aij| es matricial (ver [Man04]).
n max
i,j
|aij| es compatible con || ||1 , || ||2 y || ||∞ .
98
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
3.3.1. En Scilab
Si A es una matriz, entonces
norm(A) calcula ||A||2 ,
norm(A, 2) calcula ||A||2 ,
norm(A, 1) calcula ||A||1 ,
norm(A, ’inf’) calcula ||A||∞ ,
norm(A, ’fro’) calcula ||A||F .
3.4. Condicionamiento de una matriz
Cuando se resuelve un sistema de ecuaciones Ax = b se desea conocer cómo
son los cambios en la solución cuando se cambia ligeramente el vector de
términos independientes b.
De manera más precisa, sea x̄ la solución de Ax = b y x̄′ la solución de
Ax = b′. Se puede suponer que
b′
= b + ∆b,
x̄′
= x̄ + ∆x.
Se espera que si ||∆b|| es pequeña, entonces también ||∆x|| lo sea. En realidad
es mejor considerar cambios relativos. Se espera que si el valor ||∆b||/||b|| es
pequeño, entonces ||∆x||/||x̄|| también lo sea. Las deducciones que siguen,
relacionan los dos cambios relativos.
∆x = x̄′
− x̄ = A−1
b′
− A−1
b
= A−1
(b + ∆b) − A−1
b
= A−1
∆b.
Al utilizar una norma y la norma matricial generada por esta se obtiene
||∆x|| ≤ ||A−1
|| ||∆b||.
Héctor M. Mora E. Métodos Numéricos con Scilab 99
Por otro lado,
b = Ax
||b|| ≤ ||A|| ||x̄||
1
||x̄||
≤
||A||
||b||
Multiplicando la primera y la última desigualdad
||∆x||
||x̄||
≤ ||A|| ||A−1
||
||∆b||
||b||
.
El valor ||A|| ||A−1|| se llama condicionamiento o número de condición de la
matriz A (invertible) y se denota
κ(A) = ||A|| ||A−1
||. (3.9)
Entonces,
||∆x||
||x̄||
≤ κ(A)
||∆b||
||b||
. (3.10)
Ejemplo 3.5. Calcular κ1(A), κ2(A) y κ∞(A) para la matriz
A =

−10 −7
6 4

.
Entonces,
A−1
=

2 7/2
−3 −5

AT
A =

136 94
94 65

A−1T
A−1
=

13 22
22 149/4

espec(AT
A) = {0.0199025, 200.9801}
espec(A−1T
A−1
) = {0.0049756, 50.245024}
||A||2 = 14.176745
||A−1
||2 = 7.0883725
κ2(A) = 100.49005
100
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
||A||1 = 16
||A−1
||1 = 17/2
κ1(A) = 136
||A||∞ = 17
||A−1
||∞ = 8
κ∞(A) = 136. ✸
El condicionamiento, definido para normas matriciales inducidas de normas
vectoriales, tiene las siguientes propiedades:
κ(A) ≥ 1.
κ(αA) = κ(A) si α 6= 0.
κ2(A) = 1 si y solamente si A es un múltiplo de una matriz ortogonal
(o unitaria).
La desigualdad (3.10) indica que si κ(A) es pequeño, entonces un cambio
relativo en b pequeño produce un cambio relativo en x pequeño.
Una matriz A es bien condicionada si κ(A) es cercano a 1 y es mal condi-
cionada si κ(A) es grande. Para el condicionamiento κ2 (definido con la
norma espectral), las matrices mejor condicionadas son las matrices ortogo-
nales, puesto que κ2(A) = 1.
Ejemplo 3.6. Resolver los sistemas Ax = b y Ax′ = b′, donde
A =

10 10
10 −9

, b =

20.01
19.99

, b′
=

20.02
19.98

.
Entonces,
∆b = [0.01 − 0.01]T
,
||∆b||
||b||
= 0.0005,
κ(A) = 1.0752269.
Héctor M. Mora E. Métodos Numéricos con Scilab 101
Al resolver los dos sistemas se obtiene:
x = [1.9999474 0.0010526]T
,
x′
= [1.9998947 0.0021053]T
,
∆x = [−0.0000526 .0010526]T
,
||∆x||
||x||
= 0.0005270,
κ(A)
||∆b||
||b||
= 0.0005376.
La matriz A es muy bien condicionada y entonces cambios pequeños en b
producen cambios pequeños en x. ✸
Ejemplo 3.7. Resolver los sistemas Ax = b y Ax′ = b′, donde
A =

10.01 10.00
10.00 9.99

, b =

20.01
19.99

, b′
=

20.02
19.98

.
Entonces,
∆b = [0.01 − 0.01]T
,
||∆b||
||b||
= 0.0005,
A−1
=

−99900 100000
100000 −100100

,
κ(A) = 4000002.
Al resolver los dos sistemas se obtiene:
x = [1 1]T
,
x′
= [−1998 2002]T
,
∆x = [−1999 2001]T
,
||∆x||
||x||
= 2000.0002,
κ(A)
||∆b||
||b||
= 2000.0008.
La matriz A es muy mal condicionada y entonces cambios pequeños en b
pueden producir cambios muy grandes en la solución. ✸
102
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Ejemplo 3.8. Resolver los sistemas Ax = b y Ax′′ = b′′, donde
A =

10.01 10.00
10.00 9.99

, b =

20.01
19.99

, b′′
=

20.02
20.00

.
Entonces,
∆b = [0.01 0.01]T
,
||∆b||
||b||
= 0.0005,
A−1
=

−99900 100000
100000 −100100

,
κ(A) = 4000002.
Al resolver los dos sistemas se obtiene:
x = [1 1]T
,
x′′
= [2 0]T
,
∆x = [1 − 1]T
,
||∆x||
||x||
= 1,
κ(A)
||∆b||
||b||
= 2000.0008.
La matriz A, la misma del ejemplo anterior, es muy mal condicionada y
entonces cambios pequeños en b pueden producir cambios muy grandes en
la solución. Sin embargo, los cambios en la solución, aunque no desprecia-
bles, no fueron tan grandes como en el ejemplo anterior, o sea, ||∆x||/||x||
está lejos de la cota superior. ✸
En Scilab el condicionamiento para la norma euclidiana se calcula por medio
de cond( A ).
3.5. Método de Jacobi
Este método se parece al método GS, también se utiliza la ecuación i-ésima
para calcular xi y el cálculo de xi se hace de la misma forma. Pero un valor
Héctor M. Mora E. Métodos Numéricos con Scilab 103
recién calculado de xi no se utiliza inmediatamente. Los valores nuevos de xi
solamente se empiezan a utilizar cuando ya se calcularon todos los n valores
xi.
Ejemplo 3.9.
A =


4 1 −1
2 5 0
−2 3 10

 , b =


7
19
45

 , x0
=


1.2
1.5
1.6

 .
Gauss-Seidel Jacobi
x1 x2 x3 x1 x2 x3
1.2 1.5 1.6 1.2 1.5 1.6
1.775 1.5 1.6 1.775 1.5 1.6
1.775 3.09 1.6 1.775 3.32 1.6
1.775 3.09 3.928 1.775 3.32 4.29
1.9595 3.09 3.928 1.9925 3.32 4.29
1.9595 3.0162 3.928 1.9925 3.09 4.29
1.9595 3.0162 3.98704 1.9925 3.09 3.859
El primer vector calculado es igual en los dos métodos. Para calcular x2 en
el método GS se usa el valor x1 = 1.775 recién calculado:
x2 =
19 − 2 × 1.775 − 0 × 1.6
5
= 3.09 .
En cambio, en el método de Jacobi:
x2 =
19 − 2 × 1.2 − 0 × 1.6
5
= 3.32 .
En el método de GS:
x3 =
45 + 2 × 1.775 − 3 × 3.09
10
= 3.928 .
En el método de Jacobi:
x3 =
45 + 2 × 1.2 − 3 × 1.5
10
= 4.29 .
Ahora sı́, en el método de Jacobi, los valores calculados de x2 y x3 se utilizan
para volver a calcular x1. ✸
104
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
3.6. Método iterativo general
Muchos método iterativos, en particular, los métodos de Jacobi, GS, SOR
se pueden expresar de la forma
xk+1
= Mxk
+ p. (3.11)
Al aplicar varias veces la fórmula anterior, se está buscando un punto fijo de
la función f(x) = Mx + p. Utilizando el teorema de punto fijo de Banach,
uno de los resultados más importantes del análisis matemático, se tiene el
siguiente resultado.
Teorema 3.3. Si existe una norma matricial || || tal que
||M||  1.
entonces existe un único punto fijo x∗, tal que x∗ = Mx∗ + p. Este punto se
puede obtener como lı́mite de la iteración (3.11) para cualquier x0 inicial.
En algunos casos el criterio anterior se puede aplicar fácilmente al encontrar
una norma adecuada. Empero, si después de ensayar con varias normas, no se
ha encontrado una que sirva, no se puede concluir que no habrá convergencia.
El siguiente criterio es más preciso pero puede ser numéricamente más difı́cil
de calcular.
Teorema 3.4. La iteración de punto fijo (3.11) converge si y solamente si
ρ(M)  1.
El radio espectral de una matriz cuadrada M, denotado generalmente ρ(M),
es la máxima norma de los valores propios de M (reales o complejos),
ρ(M) = max
1≤i≤n
{|λi| : λi ∈ esp(M)},
donde esp(M) es el conjunto de valores propios de M.
La convergencia es lenta cuando ρ(M) es cercano a 1, es rápida cuando ρ(M)
es pequeño (cercano a 0).
Cualquier matriz cuadrada A se puede expresar de la forma
A = L + D + U,
Héctor M. Mora E. Métodos Numéricos con Scilab 105
donde L es la matriz triangular inferior correspondiente a la parte triangular
estrictamente inferior de A, D es la matriz diagonal correspondiente a los
elementos diagonales de A y U es la matriz triangular superior correspondi-
ente a la parte triangular estrictamente superior de A.
Para el método de Jacobi:
MJ = −D−1
(L + U), (3.12a)
pJ = D−1
b. (3.12b)
Para el método GS
MGS = −(D + L)−1
U, (3.13a)
pGS = (D + L)−1
b. (3.13b)
3.7. Método de sobrerrelajación
Este método, conocido como SOR, successive over relaxation, se puede con-
siderar como una generalización del método GS. Las fórmulas que definen
el método GS son:
ri = bi − Ai· x ,
δi =
ri
aii
,
xi ← xi + δi .
En el método SOR únicamente cambia la última asignación, introduciendo
un parámetro ω,
ri = bi − Ai·x ,
δi =
ri
aii
,
xi ← xi + ωδi .
(3.14)
Si 0  ω  1 se tiene una subrrelajación, si 1  ω se tiene la sobrerrela-
jación propiamente dicha. Si ω = 1, se tiene el método GS. Una escogencia
adecuada de ω mejora la convergencia del método GS. Este método se usa
en algunas técnicas de solución de ecuaciones diferenciales parciales.
Una condición necesaria para que el método SOR converja, ver [Dem97], es
que
0  ω  2 .
106
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Para matrices definidas positivas el método SOR converge para cualquier ω
en el intervalo ]0, 2[.
Ejemplo 3.10. Resolver el sistema Ax = b por el método SOR con ω = 1.4
partiendo de x0 = (1, 1, 1, 1).
A =




5 −1 2 −2
0 4 2 3
3 3 8 −2
−1 4 −1 6



 , b =




25
−10
35
−33



 .
Entonces,
r1 = b1 − A1·x = 25 − 4 = 21
δ1 =
21
5
= 4.2
ωδ1 = 5.88
x1 = 1 + 5.88 = 6.88
r2 = −10 − 9 = −19
δ2 =
−19
4
= −4.75
ωδ2 = −6.65
x2 = 1 − 6.65 = −5.65
r3 = 35 − 9.69 = 25.31
δ3 =
25.31
8
= 3.163750
ωδ3 = 4.429250
x3 = 1 + 4.429250 = 5.429250
r4 = −33 − −28.909250 = −4.090750
δ4 =
−4.090750
6
= −0.681792
ωδ4 = −0.954508
x4 = 1 − 0.954508 = 0.045492
Héctor M. Mora E. Métodos Numéricos con Scilab 107
r1 = 25 − 50.817517 = −25.817517
δ1 =
−25.817517
5
= −5.163503
ωδ1 = −7.228905
x1 = 6.880000 + −7.228905 = −0.348905
La siguiente tabla muestra las primeras 15 iteraciones completas
Sobrerrelajación, ω = 1.4
k x1 x2 x3 x4
0 1.000000 1.000000 1.000000 1.000000
1 6.880000 -5.650000 5.429250 0.045492
2 -0.348905 -5.088241 6.823724 -1.458380
3 1.076876 -4.710011 4.792473 -1.351123
4 1.810033 -3.552048 4.649676 -2.337041
5 1.368852 -2.880061 4.240550 -2.768266
6 1.721105 -2.409681 3.821389 -3.050409
7 1.788640 -2.008170 3.644054 -3.337915
8 1.812353 -1.742759 3.462571 -3.507443
9 1.883878 -1.543881 3.333868 -3.638593
10 1.909584 -1.395632 3.248121 -3.738508
11 1.932877 -1.289998 3.179762 -3.807650
12 1.952699 -1.211802 3.131447 -3.859624
13 1.964616 -1.154687 3.096340 -3.897553
14 1.974261 -1.113133 3.070228 -3.925007
15 1.981287 -1.082649 3.051371 -3.945238
La tabla siguiente muestra los resultados de la solución del mismo sistema
por el método GS. La solución exacta es x = (2, −1, 3, −4). Se aprecia que
en la iteración 15 se tiene una mejor aproximación de la solución con el
método de sobrerrelajación.
108
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Gauss-Seidel
k x1 x2 x3 x4
0 1.000000 1.000000 1.000000 1.000000
1 5.200000 -3.750000 4.081250 -1.453125
2 2.036250 -3.450781 4.542168 -2.103076
3 1.651746 -3.193777 4.427492 -2.357609
4 1.647204 -2.945539 4.272474 -2.549694
5 1.682025 -2.723966 4.128304 -2.715634
6 1.717631 -2.527427 3.999765 -2.862150
7 1.749749 -2.353270 3.885783 -2.991898
8 1.778274 -2.198968 3.784786 -3.106845
9 1.803554 -2.062259 3.695303 -3.208684
10 1.825953 -1.941139 3.616023 -3.298912
11 1.845798 -1.833828 3.545783 -3.378851
12 1.863381 -1.738753 3.483552 -3.449676
13 1.878958 -1.654519 3.428416 -3.512425
14 1.892760 -1.579890 3.379568 -3.568019
15 1.904987 -1.513770 3.336289 -3.617274
✸
El método SOR depende de la escogencia de ω y queda entonces la pre-
gunta: ¿cómo escoger ω? La respuesta no es sencilla. Algunas veces se hace
simplemente por ensayo y error. Si se desea resolver muchos sistemas de
ecuaciones parecidos, por ejemplo, provenientes del mismo tipo de problema
pero con datos ligeramente diferentes, se puede pensar que un valor ade-
cuado de ω para un problema, puede servir para uno parecido. Entonces, se
puede pensar en hacer ensayos con varios valores de ω para “ver” y escoger
el ω que se supone sirva para este tipo de problemas.
En algunos casos muy particulares se puede hacer un estudio teórico. Tal es
el caso de la solución, por diferencias finitas, de la ecuación de Poisson en
un rectángulo. Allı́ se demuestra que
ωopt =
2
1 + sin
π
m + 1
·
Este resultado y otros teóricos se basan en el radio espectral de la matriz de
la iteración de punto fijo.
Se puede mostrar que el método SOR se puede expresar como una iteración
Héctor M. Mora E. Métodos Numéricos con Scilab 109
de punto fijo con
MSOR = (D + ωL)−1
(1 − ω)D − ωU

, (3.15a)
pSOR = ω(D + ωL)−1
b. (3.15b)
La deducción anterior proviene de descomponer
A =
1
ω
D + L + (1 −
1
ω
)D + U
=
1
ω
D + ωL

+
1
ω
(ω − 1)D + ωU

=
D + ωL
ω
+
(ω − 1)D + ωU
ω
·
Entonces,
Ax = b
D + ωL
ω
+
(ω − 1)D + ωU
ω

x = b
D + ωL + (ω − 1)D + ωU

x = ωb
(D + ωL)x = − (ω − 1)D + ωU

x + ωb
(D + ωL)x = (1 − ω)D − ωU

x + ωb
x = (D + ωL)−1
(1 − ω)D − ωU

x
+ ω(D + ωL)−1
b .
MGS = −(D + L)−1
U,
pGS = (D + L)−1
b.
Para el ejemplo 3.10, con ω = 1.4,
xk+1
=




−0.400000 0.280000 −0.560000 0.560000
0.000000 −0.400000 −0.700000 −1.050000
0.210000 0.063000 0.261500 0.607250
−0.044333 0.453367 0.583683 0.852358



 xk
+




7.000000
−3.500000
4.287500
−1.799583



 .
En este caso, ρ(M) = 0.730810, lo que garantiza la convergencia.
La siguiente tabla nos muestra los valores del número de iteraciones y del
radio espectral para diferentes valores de ω. El criterio de parada utilizado
fue max{|δi| : i = 1, ..., n} ≤ 0.000001.
110
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Sobrerrelajación
ω k ρ(M)
0.10 999 0.994
0.20 641 0.987
0.30 415 0.979
0.40 301 0.970
0.50 232 0.961
0.60 185 0.950
0.70 151 0.937
0.80 125 0.923
0.90 105 0.906
1.00 88 0.886
1.10 74 0.862
1.20 61 0.831
1.30 50 0.790
1.40 40 0.731
1.50 29 0.620
1.60 33 0.662
1.70 50 0.765
1.80 92 0.867
1.90 408 0.969
La figura 3.1 muestra la variación del radio espectral ρ(M) al variar ω.
Proviene de un conjunto de datos más amplio que el de la tabla anterior.
El mejor valor de ω es aproximadamente ω ≈ 1.55. Esto coincide, en la
tabla, con el menor número de iteraciones.
El siguiente es el esquema del algoritmo de sobrerrelajación, muy parecido
al de GS. Se supone que no hay elementos diagonales nulos.
Héctor M. Mora E. Métodos Numéricos con Scilab 111
1 2
1
ω
ρ(M)
Figura 3.1. Método SOR: ω y radio espectral
SOR: Sobrerrelajación
datos: A, b, ω, x0, ε, maxit
x = x0
para k = 1, ...,maxit
difX = 0
para i = 1, ..., n
ri = bi − Ai· x
δi =
ri
aii
xi = xi + ωδi
difX = max{difX, |ωδi|}
fin-para i
si difX ≤ ε ent x∗ ≈ x, salir
fin-para k
El método de sobrerrelajación, como el de GS, es útil para sistemas dispersos
en los que la matriz se ha almacenado de manera dispersa. Si la matriz es
dispersa pero se almacena como si fuera densa, el método de Gauss, en la
mayorı́a de los casos, debe resultar mejor.
112
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
3.8. Métodos de minimización
Si A es una matriz simétrica y definida positiva (en esta sección y en las dos
siguientes se supone que A es definida positiva), la solución del sistema
Ax = b (3.16)
es exactamente el mismo punto x∗ que resuelve el siguiente problema de
optimización:
min f(x) =
1
2
xT
Ax − bT
x. (3.17)
Como A es definida positiva, entonces f es convexa (más aún, es estricta-
mente convexa). Para funciones convexas diferenciables, un punto crı́tico,
punto de gradiente nulo, es necesariamente un minimizador global:
∇f(x) = f′
(x) = Ax − b = 0.
Si A es invertible, no necesariamente definida positiva, resolver
Ax = b
es equivalente a resolver
AT
Ax = AT
b
y es equivalente a minimizar
f(x) =
1
2
xT
AT
Ax − (AT
b)T
x. (3.18)
La matriz AT
A es definida positiva, luego siempre se puede pensar en re-
solver un sistema de ecuaciones donde la matriz es definida positiva, proble-
ma equivalente a minimizar una función cuadrática estrictamente convexa
(3.17).
Para minimizar funciones sin restricciones hay muchos métodos. La mayo-
rı́a de los métodos de minimización son iterativos. En casi todos, en cada
iteración, dado un punto xk, hay dos pasos importantes: en el primero se cal-
cula una dirección dk. Normalmente esta dirección cumple con la propiedad
f′
(xk
)T
dk
 0.
Esto garantiza que la dirección sea de descenso, es decir, que para t suficien-
temente pequeño
f(xk
+ tdk
)  f(xk
).
Héctor M. Mora E. Métodos Numéricos con Scilab 113
El segundo paso consiste en encontrar el mejor t posible, o sea, encontrar
tk = argmin f(xk
+ t dk
), t ≥ 0. (3.19)
Con dk y tk se construye el siguiente punto
xk+1
= xk
+ tk dk
.
Para resolver (3.19) hay varios métodos. Si f es cuadrática (en Rn), entonces
ϕ(t) = f(xk+tdk) es cuadrática (en R). Como A es definida positiva, ϕ repre-
senta una parábola que abre hacia arriba y el punto crı́tico, tc, corresponde
a un minimizador.
ϕ(t) =
1
2
(xk
+ tdk
)T
A(xk
+ tdk
) − bT
(xk
+ tdk
)
ϕ(t) =
t2
2
dkT
Adk
+ tdkT
(Axk
− b) + f(xk
)
ϕ′
(t) = tdkT
Adk
+ dkT
(Axk
− b)
entonces
tk = tc = −
dkT
(Axk − b)
dkT
Adk
(3.20)
3.9. Método del descenso más pendiente
Un método muy popular y sencillo, pero no necesariamente muy eficiente,
es el método de Cauchy, también llamado método del gradiente o método
del descenso más pendiente. En este método la dirección es simplemente el
opuesto del gradiente,
dk
= −f′
(xk
)
= −(Axk
− b)
Entonces,
dk
= b − Axk
(3.21)
tk =
dkT
dk
dkT
Adk
(3.22)
xk+1
= xk
+ tkdk
. (3.23)
114
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Ejemplo 3.11. Aplicar el método del descenso más pendiente para resolver
Ax = b, sabiendo que A es definida positiva, donde
A =


4 1 2
1 5 −2
2 −2 10

 , b =


13
−21
50

 , x0
=


1
1
1

 .
k = 0
d : 6.000000 -25.000000 40.000000
t = 0.094488
x1 : 1.566927 -1.362196 4.779514
k = 1
d : -1.464541 -6.196916 -3.653391
t = 0.190401
x2 : 1.288078 -2.542093 4.083907
k = 2
d : 2.221969 -1.409801 1.500593
t = 0.135469
x3 : 1.589087 -2.733078 4.287191
k = 3
d : 0.802349 -0.349316 -1.516240
t = 0.164510
x4 : 1.721081 -2.790544 4.037754
k = 4
d : 0.830711 -0.692854 0.599209
t = 0.135907
x5 : 1.833980 -2.884707 4.119191
k = 5
d : 0.310405 -0.172063 -0.629281
t = 0.164543
x6 : 1.885055 -2.913019 4.015647
x7 : 1.931468 -2.952251 4.049268
x8 : 1.952504 -2.964045 4.006467
x9 : 1.971680 -2.980265 4.020361
x10 : 1.980371 -2.985141 4.002673
Héctor M. Mora E. Métodos Numéricos con Scilab 115
x11 : 1.988296 -2.991844 4.008415
x12 : 1.991888 -2.993859 4.001105
x13 : 1.995163 -2.996629 4.003477
x14 : 1.996648 -2.997462 4.000456
x15 : 1.998001 -2.998607 4.001437
x16 : 1.998615 -2.998951 4.000189
x17 : 1.999174 -2.999424 4.000594
x18 : 1.999427 -2.999567 4.000078
x19 : 1.999659 -2.999762 4.000245
x20 : 1.999763 -2.999821 4.000032
Ejemplo 3.12. Aplicar el método del descenso más pendiente para resolver
Ax = b, sabiendo que A es definida positiva, donde
A =


19 6 8
6 5 2
8 2 4

 , b =


55
22
24

 , x0
=


1
1
1

 .
k = 0
d : 22.000000 9.000000 10.000000
t = 0.040905
x1 : 1.899920 1.368149 1.409055
k = 1
d : -0.579812 0.941625 0.428123
t = 0.531990
x2 : 1.591466 1.869085 1.636812
k = 2
d : 0.453147 -0.167842 0.982857
t = 0.089118
x3 : 1.631849 1.854127 1.724402
k = 3
d : -0.925117 -0.510535 0.339342
t = 0.068514
x4 : 1.568466 1.819148 1.747652
k = 4
d : 0.303036 -0.001843 0.823366
116
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
t = 0.091249
x5 : 1.596118 1.818980 1.822783
k = 5
d : -0.822384 -0.317174 0.301965
t = 0.069496
x6 : 1.538966 1.796938 1.843768
x95 : 1.025125 1.989683 2.952309
x96 : 1.022738 1.989417 2.953040
x97 : 1.023406 1.990389 2.955571
x98 : 1.021183 1.990141 2.956253
x99 : 1.021805 1.991047 2.958611
x100 : 1.019734 1.990816 2.959245
x101 : 1.020313 1.991659 2.961442
La rapidez de convergencia del método del descenso más pendiente, cuando
A es definida positiva, depende del cociente λn/λ1, donde λn es el mayor
valor propio y λ1 el menor. Si el cociente es cercano a uno, hay buena
convergencia. Si el cociente es grande, la convergencia es lenta a causa del
zigzagueo.
primer ejemplo
v =
2.3714059
5.5646277
11.063966
coc = 4.6655726
Segundo ejemplo:
valores propios
0.4250900
3.0722446
24.502665
coc = 57.641129
Héctor M. Mora E. Métodos Numéricos con Scilab 117
3.10. Método del gradiente conjugado
Dentro del grupo de métodos de direcciones conjugadas, está el método del
gradiente conjugado. Este método se adapta muy bien cuando la matriz es
“dispersa”. Tiene una ventaja adicional: aunque es un método iterativo, a
lo más en n iteraciones se obtiene la solución exacta, si no hay errores de
redondeo.
En el método GC, la dirección se construye agregando a −f′(xk) un múltiplo
de la dirección anterior,
dk
= −f′
(xk
) + αk dk−1
. (3.24)
Dos direcciones diferentes, di y dj, se llaman conjugadas con respecto a A,
si
diT
A dj
= 0.
Para el caso de la solución de un sistema lineal por medio del método GC,
es corriente denominar el vector residuo
rk
= Axk
− b. (3.25)
Obviamente, xk = x∗ si y solamente si rk = 0. El vector residuo es exacta-
mente el mismo gradiente de f en el punto xk.
Las fórmulas que completan la definición del método GC son:
α1 = 0, (3.26)
αk =
||rk||2
2
||rk−1||2
2
, k = 2, ..., n, (3.27)
tk =
||rk||2
2
dkT
Adk
, k = 1, ..., n. (3.28)
Suponiendo que A es definida positiva, el método GC tiene las siguientes
propiedades:
dk es dirección de descenso.
f(xk)  f(xk−1).
las direcciones son conjugadas con respecto a A.
Si no hay errores de redondeo, entonces x∗ = xk para algún k ≤ n + 1.
118
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
Cuando se llega a xn+1 y no se obtiene la solución con la precisión deseada,
entonces se vuelve a empezar el proceso utilizando como nuevo x1 el xn+1
obtenido.
Método del gradiente conjugado
datos: A, b, x1, MAXIT, ε
para K = 1, ..., MAXIT
para k = 1, ..., n
rk = Axk − b
si ||rk||  ε ent parar
si k = 1 ent dk = −rk
sino
αk =
||rk||2
2
||rk−1||2
2
dk = −rk + αkdk−1
fin-sino
tk =
||rk||2
2
dkT
Adk
xk+1 = xk + tkdk
fin-para k
x1 = xn+1
fin-para K
Ejemplo 3.13. Resolver el sistema Ax = b por el método GC, partiendo
de x1 = (1, 1, 1), donde
A =


19 6 8
6 5 2
8 2 4

 , b =


55
22
24

 .
r1
= Ax1
− b = (−22, −9, −10),
||r1
||2
2 = 665,
d1
= −r1
= (22, 9, 10),
d1T
Ad1
= 16257,
t1 =
665
16257
= 0.040905,
x2
= x1
+ t1d1
= (1.899920, 1.368149, 1.409055),
Héctor M. Mora E. Métodos Numéricos con Scilab 119
r2
= (0.579812, −0.941625, −0.428123),
||r2
||2
2 = 1.406129,
α2 =
1.406129
665
= 0.002114,
d2
= (−0.533293, 0.960655, 0.449268),
d2T
Ad2
= 2.570462,
t2 = 0.547034,
x3
= (1.608191, 1.893660, 1.654819),
r3
= (0.156138, 0.427083, −0.727877),
||r3
||2
2 = 0.736584,
α3 = 0.523838,
d3
= (−0.435497, 0.076145, 0.963221),
d3T
Ad3
= 0.527433,
t3 = 1.396545,
x4
= (1, 2, 3),
x1
= x4
= (1, 2, 3),
r1
= (0, 0, 0). ✸
Si la matriz A es dispersa y se utiliza una estructura de datos donde so-
lamente se almacenen los elementos no nulos, para poder implementar con
éxito el método GC, se requiere simplemente poder efectuar el producto
de la matriz A por un vector. Hay dos casos, Axk para calcular rk y Adk
para calcular tk. Las otras operaciones necesarias son producto escalar en-
tre vectores, sumas o restas de vectores y multiplicación de un escalar por
un vector. Todo esto hace que sea un método muy útil para matrices muy
grandes pero muy poco densas.
Ejercicios
3.1 En este y en los siguientes ejercicios considere el sistema Ax = b. Dé un
punto inicial. Aplique los métodos de Jacobi y Gauss-Seidel. Observe
120
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
si hay convergencia o no. Compare. Utilice los criterios teóricos de
convergencia.
A =


−3 0 4
−3 3 2
−2 2 3

 , b =


1
2
3


3.2
A =


−3 3 2
2 −4 −3
−4 2 6

 , b =


−19
19
−14


3.3
A =


−2 −5 3
−1 2 −5
−1 −1 1

 , b =


−9
7
1


3.4
A =


−4 2 3
0 5 1
−2 −4 −3

 , b =


18
−1
−4


3.5
A =


4 −6 10
−6 25 9
10 9 62

 , b =


66
−51
241


3.6
A =


8 −3 4
5 −13 −7
8 −9 18

 , b =


41
21
115


3.7 Use los datos de un ejercicio anterior donde el método GS converge.
Aplique el método de sobrerrelajación con varios valores de ω. Trate
de encontrar un ω “óptimo”.
3.8 Use los datos de un ejercicio anterior con matriz definida positiva.
Aplique el método del descenso más pendiente.
3.9 Use los datos de un ejercicio anterior con matriz definida positiva.
Aplique el método del gradiente conjugado.
3.10 Use los datos de un ejercicio anterior con matriz no definida positi-
va. Utilice un método de descenso para obtener la solución mediante
(3.18).
Héctor M. Mora E. Métodos Numéricos con Scilab 121
3.11 Suponga que tiene una matriz dispersa de la que únicamente conoce las
entradas no nulas. Esta información puede estar dada por un conjunto
de valores de la forma i j aij. Por ejemplo una matriz en R3×3:
1 1 10
1 2 2
2 1 3
2 2 11
3 2 5
3 3 12
Busque, averigüe o conciba una forma de guardar estos datos de tal
manera que pueda hacer una función de Scilab para hacer, dados i y
un vector columna x, el producto Ai·x. Haga una función de Scilab
para el método de Gauss-Seidel.
3.12 Análogo al ejercicio anterior pero se trata de una matriz simétrica y
posiblemente definida positiva. En este caso la información necesaria es
la de las entradas no nulas de la parte tringular superior. Por ejemplo,
1 1 10
1 2 2
2 2 11
3 3 12
Haga una función de Scilab para el método del gradiente conjugado.
3.13 Se dice que una matriz A es banda de ancho 2m + 1 si aij = 0 siempre
que |i − j|  m. Si m = 0, se trata de una matriz diagonal. Si m = 1.
se trata de una matriz tridiagonal. Si A es simétrica y posiblemente
definida positiva, toda la información indispensable es: los elementos
diagonales y, para casi todas las filas, m elementos de la parte estric-
tamente superior. Esta información se puede almacenar en una matriz
n × (m + 1). Por ejemplo, la información de una matriz 10 × 10 de
ancho 2 × 2 + 1 puede ser
2.4 -0.36 -0.32
2.88 0.13 -0.28
1.28 0.36 0.42
2.26 -0.07 0.03
122
CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES
1.56 0.38 -0.43
1.38 0.23 -0.4
1.3 0.24 -0.19
2.66 -0.09 -0.41
2.62 0.1 0
2.4 0 0
Demuestre que si A es banda y definida positiva, la matriz U de la
factorización de Cholesky también lo es.
3.14 Elabore una función de Scilab que dada la información de una matriz
banda definida positiva, obtenga la factorización de Cholesky. Elabore
otra función para resolver el sistema triangular inferior banda UT
p =
q. Elabore otra función para resolver el sistema triangular superior
banda Up = q. Utilice las tres funciones para resolver el sistema de
ecuaciones.
Capı́tulo 4
Ecuaciones no lineales
Uno de los problemas más corrientes en matemáticas consiste en resolver
una ecuación, es decir, encontrar un valor x∗ ∈ R que satisfaga
f(x) = 0,
donde f es una función de variable y valor real, o sea,
f : R → R.
Este x∗ se llama solución de la ecuación. A veces también se dice que x∗ es
una raı́z o un cero. Algunos ejemplos sencillos de ecuaciones son:
x5
− 3x4
+ 10x − 8 = 0,
ex
− x3
+ 8 = 0,
x2 + x
cos(x − 1) + 2
− x = 0.
En algunos casos no se tiene una expresión sencilla de f, sino que f(x)
corresponde al resultado de un proceso; por ejemplo:
Z x
−∞
e−t2
dt − 0.2 = 0.
Lo mı́nimo que se le exige a f es que sea continua. Si no es continua en
todo R, por lo menos debe ser continua en un intervalo [a, b] donde se busca
la raı́z. Algunos métodos requieren que f sea derivable. Para la aplicación
de algunos teoremas de convergencia, no para el método en sı́, se requieren
derivadas de orden superior.
123
124 CAPÍTULO 4. ECUACIONES NO LINEALES
Los métodos generales de solución de ecuaciones sirven únicamente para
hallar raı́ces reales. Algunos métodos especı́ficos para polinomios permiten
obtener raı́ces complejas.
Los métodos presuponen que la ecuación f(x) = 0 tiene solución. Es nece-
sario, antes de aplicar mecánicamente los métodos, estudiar la función,
averiguar si tiene raı́ces y ubicarlas aproximadamente. En algunos casos
muy difı́ciles no es posible hacer un análisis previo de la función, entonces
hay que utilizar de manera mecánica uno o varios métodos, pero sabiendo
que podrı́an ser ineficientes o, simplemente, no funcionar.
La mayorı́a de los métodos parten de x0, aproximación inicial de x∗, a partir
del cual se obtiene x1. A partir de x1 se obtiene x2, después x3, y ası́ sucesi-
vamente se construye la sucesión {xk} con el objetivo, no siempre cumplido,
de que
lim
k→∞
xk = x∗
.
El proceso anterior es teóricamente infinito, y obtendrı́a la solución después
de haber hecho un número infinito de cálculos. En la práctica, el proceso se
detiene cuando se obtiene una aproximación suficientemente buena de x∗.
Esto querrı́a decir que el proceso se detendrı́a cuando
|xk − x∗
| ≤ ε,
para un ε dado. El anterior criterio supone el conocimiento de x∗, que es
justamente lo buscado. Entonces, se utiliza el criterio fácilmente aplicable,
|f(xk)| ≤ ε.
En la mayorı́a de los casos, cuanto más cerca esté x0 de x∗, más rápidamente
se obtendrá una buena aproximación de x∗.
Otros métodos, llamados métodos de encajonamiento, bracketing, parten de
un intervalo inicial [a0, b0], con a0  b0, en el cual se sabe que existe una raı́z
x∗. A partir de él, se construye otro intervalo [a1, b1], contenido en el anterior,
en el que también está x∗ y que es de menor tamaño. De manera análoga se
construye [a2, b2]. Se espera que la sucesión formada por los tamaños tienda
a 0. Explı́citamente,
x∗
∈ [a0, b0],
[ak+1, bk+1] ⊂ [ak, bk], k = 1, 2, ...,
x∗
∈ [ak, bk], k = 1, 2, ...,
lim
k→∞
(bk − ak) = 0.
Héctor M. Mora E. Métodos Numéricos con Scilab 125
En este caso, el proceso se detiene cuando se obtiene un intervalo suficien-
temente pequeño,
bk − ak ≤ ε.
Cualquiera de los puntos del último intervalo es una buena aproximación de
x∗.
4.1. En Scilab
Para resolver
f(x) = 0,
donde f es una función de variable y valor real, se utiliza fsolve. Por
ejemplo, para resolver
x − ex
1 + x2
− cos(x) + 0.1 = 0,
es necesario definir una función de Scilab donde esté f y después utilizar
fsolve.
function fx = func156(x)
fx = ( x - exp(x) )/( 1 + x*x ) - cos(x) + 0.1
endfunction
Después de haber cargado esta función, se utiliza fsolve dándole como
parámetros, la aproximación inicial y la función:
r = fsolve(0, func156)
Con otra aproximación inicial podrı́a dar otra raı́z. Un parámetro opcional,
que puede acelerar la obtención de la solución, es otra función de Scilab
donde esté definida la derivada.
function y = f123(x)
y = x*x*x - 4*x*x + 10*x - 20
endfunction
//------------------------------------------------
function d1 = der123(x)
126 CAPÍTULO 4. ECUACIONES NO LINEALES
d1 = 3*x*x - 8*x +10
endfunction
La orden de Scilab puede ser semejante a fsolve(1, f123, der123) . Clara-
mente es más cómodo no definir la derivada, pero no hacerlo puede hacer
menos eficiente el uso de fsolve .
La función fsolve trabaja bien, pero no siempre encuentra una solución.
Por ejemplo,
function y = f13(x)
y = exp(x) - 2.7*x
endfunction
x = fsolve(1, f13)
da como resultado 0.9933076 . Lo anterior hará que el usuario ingenuamente
suponga que ese valor corresponde a una raı́z. Realmente la función no tiene
raı́ces. Es conveniente utilizar fsolve con tres parámetros de salida,
[x, fx, info] = fsolve(1, f13)
fx será el valor de f13 evaluada en x, e info valdrá 1 si se obtuvo la
solución con la precisión deseada. Para nuestro ejemplo los valores serán
info =
4.
fx =
0.0182285
x =
0.9957334
lo cual indica que no se obtuvo una raı́z.
4.2. Método de Newton
También se conoce como el método de Newton-Raphson. Dado x0, se cons-
truye la recta tangente en (x0, f(x0)). El valor de x donde esta recta corta el
Héctor M. Mora E. Métodos Numéricos con Scilab 127
b
x0
(x0, f(x0))
b
x1
(x1, f(x1))
x2
y = f(x)
Figura 4.1. Método de Newton
eje x es el nuevo valor x1. Ahora se construye la recta tangente en el punto
(x1, f(x1)). El punto de corte entre la recta y el eje x determina x2...
En el caso general, dado xk, se construye la recta tangente en el punto
(xk, f(xk)),
y = f′
(xk)(x − xk) + f(xk).
Para y = 0, se tiene x = xk+1,
0 = f′
(xk)(xk+1 − xk) + f(xk).
Entonces,
xk+1 = xk −
f(xk)
f′(xk)
(4.1)
Ejemplo 4.1. Aplicar el método de Newton a la ecuación x5−3x4+10x−8 =
0, partiendo de x0 = 3.
128 CAPÍTULO 4. ECUACIONES NO LINEALES
k xk f(xk) f′(xk)
0 3.000000 2.200000E+01 91.000000
1 2.758242 5.589425E+00 47.587479
2 2.640786 9.381331E-01 32.171792
3 2.611626 4.892142E-02 28.848275
4 2.609930 1.590178E-04 28.660840
5 2.609924 1.698318E-09 28.660228
6 2.609924 -2.838008E-15 28.660227
Las raı́ces reales del polinomio x5 − 3x4 + 10x − 8 son: 2.6099, 1.3566, 1.
Tomando otros valores iniciales el método converge a estas raı́ces. Si se toma
x0 = 2.1, se esperarı́a que el método vaya hacia una de las raı́ces cercanas,
2.6099 o 1.3566 . Sin embargo, hay convergencia hacia 1.
k xk f(xk) f′(xk)
0 2.100000 -4.503290e+00 -3.891500
1 0.942788 -1.974259e-01 3.894306
2 0.993484 -1.988663e-02 3.103997
3 0.999891 -3.272854e-04 3.001745
4 1.000000 -9.509814e-08 3.000001
5 1.000000 -7.993606e-15 3.000000 ✸
El método de Newton es muy popular por sus ventajas:
Sencillez.
Generalmente converge.
En la mayorı́a de los casos, cuando converge, lo hace rápidamente.
También tiene algunas desventajas:
Puede no converger.
Presenta problemas cuando f′(xk) ≈ 0.
Requiere la evaluación de f′(x) en cada iteración.
La implementación del método de Newton debe tener en cuenta varios as-
pectos. Como no es un método totalmente seguro, debe estar previsto un
Héctor M. Mora E. Métodos Numéricos con Scilab 129
número máximo de iteraciones, llamado, por ejemplo, maxit. Para una pre-
cisión εf , la detención deseada para el proceso iterativo se tiene cuando
|f(xk)| ≤ εf . Otra detención posible se da cuando dos valores de x son casi
iguales, es decir, cuando |xk − xk−1| ≤ εx. Se acostumbra a utilizar el cam-
bio relativo, o sea, |xk − xk−1|/|xk| ≤ εx. Para evitar las divisiones por cero,
se usa |xk − xk−1|/(1 + |xk|) ≤ εx. Finalmente, siempre hay que evitar las
divisiones por cero o por valores casi nulos. Entonces, , otra posible parada,
no deseada, corresponde a |f′(xk)| ≤ ε0. El algoritmo para el método de
Newton puede tener el siguiente esquema:
Método de Newton
datos: x0, maxit, εf , εx, ε0
xk = x0
fx = f(xk), fpx = f′(xk)
para k=1,...,maxit
si |fpx| ≤ ε0 ent salir
δ = fx/fpx
xk = xk-δ
fx = f(xk), fpx = f′(xk)
si |fx| ≤ εf ent x∗ ← xk, salir
si |δ|/(1+|xk|) ≤ εx ent salir
fin-para k
Para la implementación en Scilab, es necesario determinar cómo se evalúa f
y f′. Fundamentalmente hay dos posibilidades:
Hacer una función para evaluar f y otra para evaluar f′.
Hacer una función donde se evalúe al mismo tiempo f y f′.
En la siguiente implementación del método de Newton, la función f debe
evaluar al mismo tiempo f(x) y f′(x).
function [fx, dfx] = f321(x)
fx = x^5 - 3*x^4 + 10*x - 8
dfx = 5*x^4 -12*x^3 + 10
endfunction
//----------------------------------------------------------
function [x, ind] = Newton(func, x0, eps, maxit)
130 CAPÍTULO 4. ECUACIONES NO LINEALES
// metodo de Newton
// func debe dar los valores f(x) y f’(x)
// ind valdra 1 si se obtiene la raiz
// 2 si se hicieron muchas iteraciones,  maxit
// 0 si una derivada es nula o casi
//
//*************
eps0 = 1.0e-12
//*************
x = x0
for k=0:maxit
[fx, der] = func(x)
//printf(’%3d %10.6f %10.6f %10.6fn’, k, x, fx, der)
if abs(fx) = eps
ind = 1
return
end
if abs(der) = eps0
ind = 0
return
end
x = x - fx/der
end
ind = 2
endfunction
El llamado puede ser semejante a
[x, result] = Newton(f321, 3, 1.0e-8, 20)
4.2.1. Orden de convergencia
Teorema 4.1. Sean a  b, I = ]a, b[, f : I → R, x∗ ∈ I, f(x∗) = 0, f′ y f′′
existen y son continuas en I, f′(x∗) 6= 0, {xk} la sucesión definida por 4.1.
Héctor M. Mora E. Métodos Numéricos con Scilab 131
Si x0 está suficientemente cerca de x∗, entonces
lim
k→∞
xk = x∗
, (4.2)
lim
k→∞
|xk+1 − x∗|
|xk − x∗|2
=
|f′′(x∗)|
2|f′(x∗)|
(4.3)
El primer resultado dice que la sucesión converge a x∗. El segundo dice que
la convergencia es cuadrática o de orden superior. La frase “x0 está sufi-
cientemente cerca de x∗, entonces...” quiere decir que existe ε  0 tal que si
x0 ∈ [x∗ − ε, x∗ + ε] ⊆ I, entonces...
Demostración.
f(x) = f(xn) + f′
(xn)(x − xn) + f′′
(ξ)
(x − xn)2
2
, ξ ∈ I(x, xn)
tomando x = x∗
f(x∗
) = 0 = f(xn) + f′
(xn)(x∗
− xn) + f′′
(ξ)
(x∗ − xn)2
2
, ξ ∈ I(x∗
, xn)
dividiendo por f′(xn)
0 =
f(xxn)
f′(xxn)
+ (x∗
− xn) + (x∗
− xn)2 f′′(ξ)
2f′(xn)
,
0 = x∗
−

xn −
f(xxn)
f′(xxn)

+ (x∗
− xn)2 f′′(ξ)
2f′(xn)
,
0 = x∗
− xn+1 + (x∗
− xn)2 f′′(ξ)
2f′(xn)
,
x∗
− xn+1 = −(x∗
− xn)2 f′′(ξ)
2f′(xn)
. (4.4)
Sea
I = [x∗
− ε, x + ε]
M =
max
x∈I
|f′′
(x)|
2 min
x∈I
|f′
(x)|
132 CAPÍTULO 4. ECUACIONES NO LINEALES
Como f′(x∗) 6= 0 y f′ es continua, se puede escoger ε que sea suficientemente
pequeño para que min
x∈I
|f′
(x)|  0. A partir de (4.4) se obtiene
|x∗
− xn+1| ≤ M|x∗
− xn|2
. (4.5)
En particular,
|x∗
− x1| = M|x∗
− x0|2
,
M|x∗
− x1| = (M|x∗
− x0|)2
.
Sea x0 tal que
|x∗
− x0|  ε,
M|x∗
− x0|  1 .
Entonces,
M|x∗
− x1|  1 ,
M|x∗
− x1|  (M|x∗
− x0|)2
,
M|x∗
− x1|  M|x∗
− x0|, ya que 0  t  1 ⇒ t2
 t,
|x∗
− x1|  ε,
.
.
.
M|x∗
− xn|  1 ,
|x∗
− xn|  ε .
Luego
|x∗
− xn| ≤ M|x∗
− xn−1|,
M|x∗
− xn| ≤ (M|x∗
− xn−1|)2
,
M|x∗
− xn| ≤ (M|x∗
− x0|)2n
,
|x∗
− xn| ≤
1
M
(M|x∗
− x0|)2n
,
Como |x∗ − x0|  1, entonces
lim
n→∞
|x∗
− xn| = 0,
Héctor M. Mora E. Métodos Numéricos con Scilab 133
es decir
lim
n→∞
xn = x∗
.
Reescribiendo (4.4),
x∗ − xn+1
(x∗ − xn)2
= −
f′′(ξ)
2f′(xn)
, ξ ∈ I(x∗
, xn)
Tomando el lı́mite, como xn tiende a x∗,
lim
n→∞
x∗ − xn+1
(x∗ − xn)2
= −
f′′(x∗)
2f′(x∗)
.
A manera de comprobación, después de que se calculó una raı́z, se puede ver
si la sucesión muestra aproximadamente convergencia cuadrática. Sea ek =
xk − x∗. La sucesión |ek|/|ek−1|2 deberı́a acercarse a |f′′(x∗)|/ (2|f′(x∗)|).
Para el ejemplo anterior |f′′(x∗)/(2|f′(x∗)|) = 16/(2 × 3) = 2.6666 .
k xk |ek| |ek|/|ek−1|2
0 2.1000000000000001 1.100000e+00
1 0.9427881279712185 5.721187e-02 4.728254e-02
2 0.9934841559110774 6.515844e-03 1.990666e+00
3 0.9998909365826297 1.090634e-04 2.568844e+00
4 0.9999999683006239 3.169938e-08 2.664971e+00
5 0.9999999999999973 2.664535e-15 2.651673e+00
4.3. Método de la secante
Uno de los inconvenientes del método de Newton es que necesita evaluar
f′(x) en cada iteración. Algunas veces esto es imposible o muy difı́cil. Si en
el método de Newton se modifica la fórmula 4.1 reemplazando f′(xk) por
una aproximación
f′
(xk) ≈
f(xk) − f(xk−1)
xk − xk−1
,
entonces se obtiene
xk+1 = xk −
f(xk)(xk − xk−1)
f(xk) − f(xk−1)
· (4.6)
134 CAPÍTULO 4. ECUACIONES NO LINEALES
b
x0
(x0, f(x0))
b
x1
(x1, f(x1))
x2
y = f(x)
Figura 4.2. Método de la secante
En el método de Newton se utilizaba la recta tangente a la curva en el punto
(xk, f(xk)). En el método de la secante se utiliza la recta (secante) que pasa
por los puntos (xk, f(xk)) y (xk−1, f(xk−1)).
Ejemplo 4.2. Aplicar el método de la secante a la ecuación x5 − 3x4 +
10x − 8 = 0, partiendo de x0 = 3 y de x1 = x0 + 0.01.
k xk f(xk)
0 3.000000 2.200000e+01
1 3.010000 2.292085e+01
2 2.761091 5.725624e+00
3 2.678210 2.226281e+00
4 2.625482 4.593602e-01
5 2.611773 5.317368e-02
6 2.609979 1.552812e-03
7 2.609925 5.512240e-06
8 2.609924 5.747927e-10
9 2.609924 -2.838008e-15 ✸
Mediante condiciones semejantes a las exigidas en el teorema 4.1 se muestra
(ver [Sch91]), que el método de la secante tiene orden de convergencia
1 +
√
5
2
≈ 1.618 .
Héctor M. Mora E. Métodos Numéricos con Scilab 135
Como el método de la secante es semejante al método de Newton, entonces
tienen aproximadamente las mismas ventajas y las mismas desventajas, salvo
dos aspectos:
La convergencia del método de la secante, en la mayorı́a de los casos,
es menos rápida que en el método de Newton.
El método de la secante obvia la necesidad de evaluar las derivadas.
El esquema del algoritmo es semejante al del método de Newton. Hay varias
posibles salidas, algunas deseables, otras no.
Método de la secante
datos: x0, maxit, εf , εx, ε0
x1 = x0 + 0.1, f0 = f(x0), f1 = f(x1)
para k=1,...,maxit
den = f1-f0
si |den| ≤ ε0 ent salir
δ =f1*(x1-x0)/den
x2 = x1 - δ, f2 = f(x2)
si |f2| ≤ εf ent x∗ ← x2, salir
si |δ|/(1+|x2|) ≤ εx ent salir
x0 = x1, f0 = f1, x1 = x2, f1 = f2
fin-para k
El método de la secante se puede implementar en Scilab ası́:
function [x, ind] = secante(f, x0, epsx, epsf, maxit)
// metodo de la secante
// ind valdra 1 si se obtiene la raiz,
// | f(x2) |  epsf o
// | x2-x1 |  epsx
//
// 2 si se hicieron muchas iteraciones,  maxit
// 0 si un denominador es nulo o casi nulo
//*************
eps0 = 1.0e-12
136 CAPÍTULO 4. ECUACIONES NO LINEALES
//*************
x = x0
h = 0.1
x1 = x0 + h
f0 = f(x0)
f1 = f(x1)
for k=1:maxit
den = f1-f0
if abs(den) = eps0
ind = 0
return
end
d2 = f1*(x1-x0)/den
x2 = x1 - d2
f2 = f(x2)
disp(k,x2,f2)
if abs(f2) = epsf | abs(d2) = epsx
x = x2
ind = 1
return
end
x0 = x1, f0 = f1
x1 = x2, f1 = f2
end
x = x2
ind = 2
endfunction
4.4. Método de la bisección
Es un método de encajonamiento. Si la función f es continua en el intervalo
[ak, bk], ak  bk, y si f(ak) y f(bk) tienen signo diferente,
f(ak)f(bk)  0,
entonces f tiene por lo menos una raı́z en el intervalo ]ak, bk[. Sea mk =
(ak + bk)/2 (el punto medio del intervalo). Tres casos son posibles:
Héctor M. Mora E. Métodos Numéricos con Scilab 137
ak
bk
mk
y = f(x)
Figura 4.3. Método de bisección
x∗ ≈ mk
x∗ ∈ ]ak, mk[
x∗ ∈ ]mk, bk[
Estos tres casos corresponden a
f(mk) ≈ 0
f(ak)f(mk)  0
f(mk)f(bk)  0
Si f(mk) ≈ 0, se tiene una aproximación de una raı́z y el proceso iterativo
se detiene. Si f(mk)f(ak)  0, ak+1 será ak y se toma a mk como bk+1.
En caso contrario, el nuevo ak+1 será mk y bk+1 será bk. En ambos casos
se obtiene un intervalo de tamaño igual a la mitad del anterior. El proceso
acaba cuando se obtiene una buena aproximación de la raı́z o cuando se
tiene un intervalo suficientemente pequeño.
138 CAPÍTULO 4. ECUACIONES NO LINEALES
Método de la bisección
datos: a, b, εf , εx
fa← f(a), fb← f(b)
si fa·fb ≤ 0 ó b ≤ a, parar
mientras b − a  εx
m ← (a + b)/2, fm ← f(m)
si |fm| ≤ εf ent
r ← m, parar
fin-si
si fa·fm  0, ent
b ← m, fb←fm
sino
a ← m, fa←fm
fin-si
fin-mientras
si |fa| ≤ |fb| ent x∗ ← a
sino x∗ ← b
Ejemplo 4.3. Aplicar el método de bisección a la ecuación x5 −3x4 +10x−
8 = 0, partiendo de [a0, b0] = [2, 3], deteniendo el proceso si f(mk)  10−6
o bk − ak ≤ 10−4.
k ak bk f(ak) f(bk) mk f(mk)
0 2.000000 3.000000 -4.000000 22.000000 2.500000 -2.531250
1 2.500000 3.000000 -2.531250 22.000000 2.750000 5.202148
2 2.500000 2.750000 -2.531250 5.202148 2.625000 0.444733
3 2.500000 2.625000 -2.531250 0.444733 2.562500 -1.238990
4 2.562500 2.625000 -1.238990 0.444733 2.593750 -0.449286
5 2.593750 2.625000 -0.449286 0.444733 2.609375 -0.015732
6 2.609375 2.625000 -0.015732 0.444733 2.617188 0.211084
7 2.609375 2.617188 -0.015732 0.211084 2.613281 0.096829
8 2.609375 2.613281 -0.015732 0.096829 2.611328 0.040337
9 2.609375 2.611328 -0.015732 0.040337 2.610352 0.012250
10 2.609375 2.610352 -0.015732 0.012250 2.609863 -0.001754
11 2.609863 2.610352 -0.001754 0.012250 2.610107 0.005245
12 2.609863 2.610107 -0.001754 0.005245 2.609985 0.001745
13 2.609863 2.609985 -0.001754 0.001745 2.609924 -0.000005
14 2.609924 2.609985 -0.000005 0.001745
El proceso acabó al obtener un intervalo suficientemente pequeño. La aproxi-
mación de la raı́z puede ser ak o bk. En este caso ak = 2.609924 es mejor
que bk. ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 139
Usualmente, se define el error asociado a una aproximación como
ek = |xk − x∗
|.
En el método de la bisección, dado el intervalo [ak, bk], ak  bk, no se tiene
un valor de xk. Se sabe que en [ak, bk] hay por lo menos una raı́z. Cualquiera
de los valores en el intervalo podrı́a ser xk. Sea Ek el máximo error que
puede haber en la iteración k,
ek ≤ Ek = bk − ak.
Como el tamaño de un intervalo es exactamente la mitad del anterior
bk − ak =
1
2
(bk−1 − ak−1),
entonces,
bk − ak =

1
2
 
1
2

(bk−2 − ak−2).
Finalmente,
bk − ak =

1
2
k
(b0 − a0).
Obviamente Ek → 0 y
Ek
Ek−1
=
1
2
→
1
2
.
Esto quiere decir que la sucesión de cotas del error tiene convergencia lineal
(orden 1) y tasa de convergencia 1/2.
En el método de la bisección se puede saber por anticipado el número de
iteraciones necesarias para obtener un tamaño deseado,
bk − ak ≤ ε,

1
2
k
(b0 − a0) ≤ ε,

1
2
k
≤
ε
b0 − a0
,
2k
≥
b0 − a0
ε
,
k log 2 ≥ log
b0 − a0
ε
,
k ≥
log b0 − a0
ε
log 2
·
140 CAPÍTULO 4. ECUACIONES NO LINEALES
b
ak
b
bk
ck
y = f(x)
Figura 4.4. Método de regula ralsi
Por ejemplo, si el tamaño del intervalo inicial es 3, si ε = 1.0E − 6, entonces
en k = 22 (≥ 21.52) iteraciones se obtiene un intervalo suficientemente
pequeño.
4.5. Método de regula falsi
Igualmente se conoce con el nombre de falsa posición. Es una modificación
del método de la bisección. También empieza con un intervalo [a0, b0] donde
f es continua y tal que f(a0) y f(b0) tienen signo diferente.
Con el método de bisección, en cada iteración, únicamente se tiene en cuenta
el signo de f(ak) y de f(bk), pero no sus valores: no se está utilizando toda
la información disponible. Además, es de esperar que si f(ak) está más cerca
de 0 que f(bk), entonces puede ser interesante considerar, no el punto medio,
sino un punto más cercano a ak. De manera análoga, si f(bk) está más cerca
de 0 que f(ak), entonces puede ser interesante considerar, no el punto medio,
sino un punto más cercano a bk.
En el método de regula ralsi se considera el punto donde la recta que pasa
por (ak, f(ak)), (bk, f(bk)) corta el eje x. Como f(ak) y f(bk) tienen signo
diferente, entonces el punto de corte ck queda entre ak y bk.
La ecuación de la recta es:
y − f(ak) =
f(bk) − f(ak)
bk − ak
(x − ak) .
Héctor M. Mora E. Métodos Numéricos con Scilab 141
Cuando y = 0, se tiene el punto de corte x = ck,
ck = ak −
f(ak)(bk − ak)
f(bk) − f(ak)
· (4.7)
Esta fórmula es semejante a la de la secante. Como f(ak) y f(bk) tienen signo
diferente, entonces f(bk)−f(ak) tiene signo contrario al de f(ak). Entonces,
−f(ak)/(f(bk)−f(ak))  0. Usando de nuevo que f(ak) y f(bk) tienen signo
diferente, entonces |f(ak)|/|f(bk) − f(ak)|  1. Luego 0  −f(ak)/(f(bk) −
f(ak))  1. Esto muestra que ak  ck  bk.
Partiendo de un intervalo inicial [a0, b0], en la iteración k se tiene el intervalo
[ak, bk] donde f es continua y f(ak), f(bk) tienen diferente signo. Se calcula
ck el punto de corte y se tienen tres posibilidades excluyentes:
f(ck) ≈ 0; en este caso ck es, aproximadamente, una raı́z;
f(ak)f(ck)  0; en este caso hay una raı́z en el intervalo [ak, ck] =
[ak+1, bk+1];
f(ak)f(ck)  0; en este caso hay una raı́z en el intervalo [ck, bk] =
[ak+1, bk+1].
Ejemplo 4.4. Aplicar el método de regula ralsi a la ecuación x5 − 3x4 +
10x − 8 = 0, partiendo de [2, 5].
k ak bk f(ak) f(bk) ck f(ck)
0 2.000000 5 -4.000000 1292 2.009259 -4.054857
1 2.009259 5 -4.054857 1292 2.018616 -4.108820
2 2.018616 5 -4.108820 1292 2.028067 -4.161744
3 2.028067 5 -4.161744 1292 2.037610 -4.213478
4 2.037610 5 -4.213478 1292 2.047239 -4.263862
5 2.047239 5 -4.263862 1292 2.056952 -4.312734
10 2.096539 5 -4.489666 1292 2.106594 -4.528370
20 2.198548 5 -4.739498 1292 2.208787 -4.744664
30 2.298673 5 -4.594020 1292 2.308244 -4.554769
335 2.609924 5 -0.000001 1292 2.609924 -0.000001
Como se ve, la convergencia es muy lenta. El problema radica en que en el
método de regula falsi no se puede garantizar que
lim
k→∞
(bk − ak) = 0.
142 CAPÍTULO 4. ECUACIONES NO LINEALES
Esto quiere decir que el método no es seguro. Entonces, en una imple-
mentación, es necesario trabajar con un número máximo de iteraciones.
4.6. Modificación del método de regula ralsi
Los dos métodos, bisección y regula falsi, se pueden combinar en uno solo
de la siguiente manera. En cada iteración se calcula mk y ck. Esto define
tres subintervalos en [ak, bk]. Por lo menos, en uno de ellos se tiene una raı́z.
Si los tres subintervalos sirven, se puede escoger cualquiera, o mejor aún, el
de menor tamaño. En un caso muy especial, cuando mk y ck coinciden, se
tiene una iteración del método de bisección.
En cualquiera de los casos
bk+1 − ak+1 ≤
1
2
(bk − ak),
entonces
bk − ak ≤

1
2
k
(b0 − a0),
lo que garantiza que
lim
k→∞
(bk − ak) = 0.
Ejemplo 4.5. Aplicar la modificación del método de regula falsi a la ecuación
x5 − 3x4 + 10x − 8 = 0, partiendo de [2, 5].
k a b f(a) f(b) c f(c) m f(m)
0 2.0000 5.0000 -4.00e+0 1.29e+3 2.0093 -4.0e+0 3.5000 1.0e+2
1 2.0093 3.5000 -4.05e+0 1.02e+2 2.0662 -4.4e+0 2.7546 5.4e+0
2 2.0662 2.7546 -4.36e+0 5.42e+0 2.3731 -4.2e+0 2.4104 -3.8e+0
3 2.4104 2.7546 -3.80e+0 5.42e+0 2.5523 -1.5e+0 2.5825 -7.4e-1
4 2.5825 2.7546 -7.44e-1 5.42e+0 2.6033 -1.9e-1 2.6686 1.9e+0
5 2.6033 2.6686 -1.87e-1 1.88e+0 2.6092 -2.0e-2 2.6360 7.8e-1
6 2.6092 2.6360 -2.00e-2 7.84e-1 2.6099 -9.7e-4 2.6226 3.7e-1
7 2.6099 2.6226 -9.73e-4 3.72e-1 2.6099 -2.3e-5 2.6162 1.8e-1
8 2.6099 2.6162 -2.33e-5 1.83e-1 2.6099 -2.8e-7 2.6131 9.1e-2
9 2.6099 2.6131 -2.81e-7 9.10e-2 2.6099 -1.7e-9
La modificación es mucho mejor que el método de regula falsi. Además,
el número de iteraciones de la modificación debe ser menor o igual que el
número de iteraciones del método de bisección. Sin embargo, para comparar
Héctor M. Mora E. Métodos Numéricos con Scilab 143
equitativamente el método de bisección y la modificación de regula falsi, es
necesario tener en cuenta el número de evaluaciones de f(x).
En el método de bisección, en k iteraciones, el número de evaluaciones de f
está dado por:
nbisec = 2 + kbisec ·
En la modificación de regula falsi,
nmodif = 2 + 2 kmodif ·
4.7. Método de punto fijo
Los métodos vistos se aplican a la solución de la ecuación f(x) = 0. El
método de punto fijo sirve para resolver la ecuación
g(x) = x. (4.8)
Se busca un x∗ tal que su imagen, por medio de la función g, sea el mismo
x∗. Por tal motivo se dice que x∗ es un punto fijo de la función g.
La aplicación del método es muy sencilla. A partir de un x0 dado, se aplica
varias veces la fórmula
xk+1 = g(xk). (4.9)
Se espera que la sucesión {xk} construida mediante (4.9) converja hacia x∗.
En algunos casos el método, además de ser muy sencillo, es muy eficiente;
en otros casos la eficiencia es muy baja; finalmente, en otros casos el método
definitivamente no sirve.
Ejemplo 4.6. Resolver x3 +x2 +6x+5 = 0. Esta ecuación se puede escribir
en la forma
x = −
x3 + x2 + 5
6
·
Aplicando el método de punto fijo a partir de x0 = −1 se tiene:
144 CAPÍTULO 4. ECUACIONES NO LINEALES
x0 = -1
x1 = -0.833333
x2 = -0.852623
x3 = -0.851190
x4 = -0.851303
x5 = -0.851294
x6 = -0.851295
x7 = -0.851295
x8 = -0.851295
Entonces, se tiene una aproximación de una raı́z, x∗ ≈ −0.851295. En este
caso el método funcionó muy bien. Utilicemos ahora otra expresión para
x = g(x):
x = −
x3 + 6x + 5
x
·
Aplicando el método de punto fijo a partir de x0 = −0.851, muy buena
aproximación de la raı́z, se tiene:
x0 = -0.8510
x1 = -0.8488
x2 = -0.8294
x3 = -0.6599
x4 = 1.1415
x5 = -11.6832
x6 = -142.0691
x7 = -2.0190e+4
En este caso se observa que, aun partiendo de una muy buena aproximación
de la solución, no hay convergencia. ✸
Antes de ver un resultado sobre convergencia del método de punto fijo, ob-
servemos su interpretación gráfica. La solución de g(x) = x está determinada
por el punto de corte, si lo hay, entre las gráficas y = g(x) y y = x.
Después de dibujar las dos funciones, la construcción de los puntos x1, x2,
x3... se hace de la siguiente manera. Después de situar el valor x0 sobre el
eje x, para obtener el valor x1, se busca verticalmente la curva y = g(x).
El punto obtenido tiene coordenadas (x0, g(x0)), o sea, (x0, x1). Para obte-
ner x2 = g(x1) es necesario inicialmente resituar x1 sobre el eje x, para lo
cual basta con buscar horizontalmente la recta y = x para obtener el punto
Héctor M. Mora E. Métodos Numéricos con Scilab 145
y = x
y = g(x)
x∗
Figura 4.5. Punto fijo
(x1, x1). A partir de este punto se puede obtener x2 buscando verticalmente
la curva y = g(x). Se tiene el punto (x1, g(x1)), o sea, (x1, x2). Con despla-
zamiento horizontal se obtiene (x2, x2). En resumen, se repite varias veces el
siguiente procedimiento: a partir de (xk, xk) buscar verticalmente en la curva
y = g(x) el punto (xk, xk+1), y a partir del punto obtenido buscar horizon-
talmente en la recta y = x el punto (xk+1, xk+1). Si el proceso converge, los
puntos obtenidos tienden hacia el punto (x∗, g(x∗)) = (x∗, x∗).
Las figuras 4.6 a 4.9 muestran la utilización del método; en los dos primeros
casos hay convergencia; en los otros dos no hay, aun cuando la aproximación
inicial es bastante buena.
En seguida, se presentan dos teoremas (demostración en [Atk78]) sobre la
convergencia del método de punto fijo; el primero es más general y más
preciso, el segundo es una simplificación del primero, de más fácil aplicación
para ciertos problemas.
Teorema 4.2. Sea g continuamente diferenciable en el intervalo [a, b], tal
que
g([a, b]) ⊆ [a, b],
|g′
(x)|  1, para todo x ∈ [a, b].
Entonces, existe un único x∗ en [a, b] solución de x = g(x) y la iteración de
punto fijo (4.9) converge a x∗ para todo x0 ∈ [a, b].
146 CAPÍTULO 4. ECUACIONES NO LINEALES
y = x
y = g(x)
x0 x1 x2 x3 x∗
Figura 4.6. Método de punto fijo (a)
y = x
y = g(x)
x0 x1
x2 x3
x∗
Figura 4.7. Método de punto fijo (b)
Héctor M. Mora E. Métodos Numéricos con Scilab 147
y = x
y = g(x)
x0 x2 x3 x4
x∗
Figura 4.8. Método de punto fijo (c)
y = x
y = g(x)
x0
x1 x2
x3 x4
x∗
Figura 4.9. Método de punto fijo (d)
148 CAPÍTULO 4. ECUACIONES NO LINEALES
Teorema 4.3. Sea x∗ solución de x = g(x), g continuamente diferenciable
en un intervalo abierto I tal que x∗ ∈ I, |g′(x∗)|  1. Entonces, la iteración
de punto fijo (4.9) converge a x∗ para todo x0 suficientemente cerca de x∗.
El caso ideal, en el que la convergencia es más rápida, se tiene cuando
g′(x∗) ≈ 0.
En los dos ejemplos numéricos anteriores, para resolver x3 +x2 +6x+5 = 0,
se tiene: x = g(x) = −(x3 + x2 + 5)/6, g′(−0.8513) = −0.0786. Si se
considera x = g(x)−(x3+6x+5)/x, g′(−0.8513) = 8.6020. Estos resultados
numéricos concuerdan con el último teorema.
Dos de los ejemplos gráficos anteriores muestran justamente que cuando
|g′(x∗)|  1 el método converge.
Ejemplo 4.7. Resolver x2 = 3, o sea, calcular
√
3.
x2
= 3,
x2
+ x2
= x2
+ 3,
x =
x2 + 3
2x
,
x =
x + 3/x
2
·
x0 = 3
x1 = 2
x2 = 1.75000000000000
x3 = 1.73214285714286
x4 = 1.73205081001473
x5 = 1.73205080756888
x6 = 1.73205080756888
Se observa que la convergencia es bastante rápida. Este método es muy
utilizado para calcular raı́ces cuadradas en calculadoras de bolsillo y com-
putadores.
Aplicando el teorema 4.3 y teniendo en cuenta que g′(x∗) = g′(
√
3) = 1/2 −
1.5/x∗2
= 0, se concluye rápidamente que si x0 está suficientemente cerca
de
√
3, entonces el método converge.
La aplicación del teorema 4.2 no es tan inmediata, pero se obtiene informa-
ción más detallada. La solución está en el intervalo [2, 3]; consideremos un
Héctor M. Mora E. Métodos Numéricos con Scilab 149
intervalo aún más grande: I = [1 + ε, 4] con 0  ε  1.
g(1) = 2,
g(4) = 2.375,
g′
(x) =
1
2
−
3
2x2
,
g′
(
√
3) = 0,
g′
(1) = −1,
g′
(4) =
13
32
,
g′′
(x) =
3
x3
·
Entonces, g′′(x)  0 para todo x positivo. Luego g′(x) es creciente para
x  0. Como g′(1) = −1, entonces −1  g′(1 + ε). De nuevo por ser g′(x)
creciente, entonces −1  g′(x) ≤ 13/32 para todo x ∈ I. En resumen,
|g′(x)|  1 cuando x ∈ I.
Entre 1 + ε y
√
3 el valor de g′(x) es negativo. Entre
√
3 y 4 el valor de
g′(x) es positivo. Luego g decrece en [1+ε,
√
3] y crece en [
√
3, 4]. Entonces,
g([1 + ε,
√
3]) = [g(1 + ε),
√
3] ⊆ [2,
√
3] y g([
√
3, 4]) = [
√
3, 2.375]. En conse-
cuencia g(I) = [
√
3, 2.375] ⊆ I. Entonces, el método de punto fijo converge
a x∗ =
√
3 para cualquier x0 ∈]1, 4]. Este resultado se puede generalizar al
intervalo [1 + ε, b] con b 
√
3.
Si se empieza con x0 = 1/2, no se cumplen las condiciones del teorema; sin
embargo, el método converge. ✸
4.7.1. Modificación del método de punto fijo
La convergencia del método de punto fijo podrı́a mejorar retomando las ideas
del método de la secante. Consideremos la ecuación x = g(x) y los puntos
(xi, g(xi)), (xj, g(xj)), sobre la gráfica de g. Estos puntos pueden provenir
directamente o no del método de punto fijo, es decir, se puede tener que
xi+1 = g(xi) y que xj+1 = g(xj), pero lo anterior no es obligatorio.
La idea consiste simplemente en obtener la ecuación de la recta que pasa
por esos dos puntos y buscar la intersección con la recta y = x. La abcisa
del punto dará un nuevo valor xk.
150 CAPÍTULO 4. ECUACIONES NO LINEALES
y = mx + b
m =
g(xj) − g(xi)
xj − xi
(4.10)
g(xi) = mxi + b
b = g(xi) − mxi (4.11)
xk = mxk + b
xk =
b
1 − m
. (4.12)
Ahora se usan los puntos (xj, g(xj)), (xk, g(xk)), para obtener un nuevo xm,
y ası́ sucesivamente. Usualmente, j = i + 1 y k = j + 1.
4.7.2. Método de punto fijo y método de Newton
Supongamos que c 6= 0 es una constante y que x∗ es solución de la ecuación
f(x) = 0. Esta se puede reescribir ası́:
0 = cf(x),
x = x + cf(x) = g(x). (4.13)
Si se desea resolver esta ecuación por el método de punto fijo, la convergencia
es más rápida cuando g′(x∗) = 0, o sea,
1 + cf′
(x∗
) = 0,
c = −
1
f′(x∗)
.
Entonces, al aplicar el método de punto fijo a (4.13), se tiene la fórmula
xk+1 = xk −
f(xk)
f′(x∗)
. (4.14)
Para aplicar esta fórmula se necesitarı́a conocer f′(x∗) e implı́citamente el
valor de x∗, que es precisamente lo que se busca. La fórmula del método de
Newton, (4.1), puede ser vista como la utilización de (4.14), reemplazando
f′(x∗) por la mejor aproximación conocida en ese momento: f′(xk).
Héctor M. Mora E. Métodos Numéricos con Scilab 151
4.8. Método de Newton en Rn
Consideremos ahora un sistema de n ecuaciones con n incógnitas; por ejem-
plo,
x2
1 + x1x2 + x3 − 3 = 0
2x1 + 3x2x3 − 5 = 0 (4.15)
(x1 + x2 + x3)2
− 10x3 + 1 = 0.
Este sistema no se puede escribir en la forma matricial Ax = b; entonces
no se puede resolver por los métodos usuales para sistemas de ecuaciones
lineales. Lo que se hace, como en el método de Newton en R, es utilizar
aproximaciones de primer orden, llamadas también aproximaciones lineales.
Es la generalización de la aproximación por una recta.
Un sistema de n ecuaciones con n incógnitas se puede escribir de la forma
F1(x1, x2, ..., xn) = 0
F2(x1, x2, ..., xn) = 0
.
.
.
Fn(x1, x2, ..., xn) = 0,
donde cada Fi es una función de n variables con valor real, o sea, Fi : Rn →
R. Denotemos x = (x1, x2, ..., xn) y
F(x) =





F1(x)
F2(x)
.
.
.
Fn(x)





.
Ası́, F es una función de variable vectorial y valor vectorial, F : Rn → Rn,
y el problema se escribe de manera compacta:
F(x) = 0. (4.16)
Es posible que algunos de los lectores de este libro no conozcan suficiente-
mente el cálculo en varias variables, entonces no habrá una deducción (ni
formal ni intuitiva) del método, simplemente se verá como una generalización
del método en R.
152 CAPÍTULO 4. ECUACIONES NO LINEALES
4.8.1. Matriz jacobiana
La matriz jacobiana de la función F : Rn → Rn, denotada por JF (x̄) o por
F′(x̄), es una matriz de tamaño n × n, en la que en la i-ésima fila están las
n derivadas parciales de Fi,
JF (x) = F′
(x) =
















∂F1
∂x1
(x)
∂F1
∂x2
(x) · · ·
∂F1
∂xn
(x)
∂F2
∂x1
(x)
∂F2
∂x2
(x) · · ·
∂F2
∂xn
(x)
.
.
.
...
∂Fn
∂x1
(x)
∂Fn
∂x2
(x) · · ·
∂Fn
∂xn
(x)
















Para las ecuaciones (4.15), escritas en la forma F(x) = 0,
F′
(x) =





2x1 + x2 x1 1
2 3x3 3x2
2(x1 + x2 + x3) 2(x1 + x2 + x3) 2(x1 + x2 + x3) − 10





F′
(2, −3, 4) =





1 2 1
2 12 −9
6 6 −4





.
4.8.2. Fórmula de Newton en Rn
La fórmula del método de Newton en R,
xk+1 = xk −
f(xk)
f′(xk)
,
se puede reescribir con superı́ndices en lugar de subı́ndices:
xk+1
= xk
−
f(xk)
f′(xk)
.
Héctor M. Mora E. Métodos Numéricos con Scilab 153
De nuevo, es simplemente otra forma de escribir
xk+1
= xk
− f′
(xk
)−1
f(xk
).
Esta expresión se puede generalizar a Rn mediante:
xk+1
= xk
− F′
(xk
)−1
F(xk
). (4.17)
El esquema de la deducción formal de la fórmula anterior es el siguiente. Con
condiciones adecuadas, F(x) se puede aproximar, cerca a xk, por la función
afı́n L : Rn → Rn,
F(x) ≈ L(x) = F(xk
) + F′
(xk
)(x − xk
).
Como se busca F(x) = 0, entonces se busca también L(x) = 0:
F(xk
) + F′
(xk
)(x − xk
) = 0.
Al despejar x, se obtiene (4.17)
La interpretación de todo el método aparece a continuación. Sea x∗, un
vector de n componentes, solución del sistema (4.16). Dependiendo de la
conveniencia se podrá escribir
x∗
= (x∗
1, x∗
2, ..., x∗
n) o x∗
=





x∗
1
x∗
2
.
.
.
x∗
n





.
El método empieza con un vector x0 = (x0
1, x0
2, ..., x0
n), aproximación inicial
de la solución x∗. Mediante (4.17) se construye una sucesión de vectores
{xk = (xk
1, xk
2, ..., xk
n)} con el deseo de que xk → x∗. En palabras, el vector
xk+1 es igual al vector xk menos el producto de la inversa de la matriz
jacobiana F′(xk) y el vector F(xk). Para evitar el cálculo de una inversa, la
fórmula se puede reescribir
dk
= −F′
(xk
)−1
F(xk
)
xk+1
= xk
+ dk
.
Premultiplicando por F′(xk)
F′
(xk
) dk
= −F′
(xk
)F′
(xk
)−1
F(xk
),
F′
(xk
) dk
= −F(xk
).
154 CAPÍTULO 4. ECUACIONES NO LINEALES
Para aplicar lo anterior, se conoce (o se puede calcular) la matriz F′(xk).
También se conoce el vector F(xk). O sea, simplemente se tiene un sistema
de ecuaciones lineales. La solución de este sistema es el vector dk. Entonces,
el método de Newton se resume en los dos pasos siguientes:
1) resolver F′(xk) dk = −F(xk)
2) xk+1 = xk + dk.
(4.18)
Ejemplo 4.8. Resolver el sistema
x2
1 + x1x2 + x3 − 3 = 0
2x1 + 3x2x3 − 5 = 0
(x1 + x2 + x3)2
− 10x3 + 1 = 0
a partir de x0 = (2, −3, 4).
F(x0
) =


−1
−37
−30

 , F′
(x0
) =


1 2 1
2 12 −9
6 6 −4


resolver


1 2 1
2 12 −9
6 6 −4




d0
1
d0
2
d0
3

 = −


−1
−37
−30

 , d0
=


2.5753
0.5890
−2.7534


x1
=


2
−3
4

 +


2.5753
0.5890
−2.7534

 =


4.5753
−2.4110
1.2466


F(x1
) =


8.1494
−4.8656
0.1689

 , F′
(x1
) =


6.7397 4.5753 1.0000
2.0000 3.7397 −7.2329
6.8219 6.8219 −3.1781




6.7397 4.5753 1.0000
2.0000 3.7397 −7.2329
6.8219 6.8219 −3.1781




d1
1
d1
2
d1
3

 =−


8.1494
−4.8656
0.1689

 , d1
=


−4.4433
4.6537
0.5048


x2
=


4.5753
−2.4110
1.2466

 +


−4.4433
4.6537
0.5048

 =


0.1321
2.2428
1.7514


Héctor M. Mora E. Métodos Numéricos con Scilab 155
A continuación, se presentan los resultados de F(xk), F′(xk), dk, xk+1. k = 2


−0.9350
7.0481
0.5116

 ,


2.5069 0.1321 1.0000
2.0000 5.2542 6.7283
8.2524 8.2524 −1.7476

 ,


0.6513
−0.8376
−0.5870

 ,


0.7833
1.4052
1.1644


k = 3


−0.1213
1.4751
0.5981

 ,


2.9718 0.7833 1.0000
2.0000 3.4931 4.2156
6.7057 6.7057 −3.2943

 ,


0.1824
−0.3454
−0.1502

 ,


0.9658
1.0598
1.0141


k = 4


−0.0297
0.1557
0.0981

 ,


2.9913 0.9658 1.0000
2.0000 3.0424 3.1793
6.0793 6.0793 −3.9207

 ,


0.0335
−0.0587
−0.0139

 ,


0.9993
1.0011
1.0002


k = 5


−0.0008
0.0025
0.0015

 ,


2.9997 0.9993 1.0000
2.0000 3.0006 3.0033
6.0012 6.0012 −3.9988

 ,


0.0007
−0.0011
−0.0002

 ,


1.0000
1.0000
1.0000


F(x6
) ≈


0
0
0

 , luego x∗
≈


1
1
1

 . ✸
4.9. Método de Müller
Este método sirve para hallar raı́ces reales o complejas de polinomios. Sea
p(x) un polinomio real (con coeficientes reales), de grado n, es decir,
p(x) = a0 + a1x + a2x2
+ ... + anxn
, ai ∈ R, i = 0, 1, ..., n, an 6= 0.
En general no se puede garantizar que p(x) tenga raı́ces reales. Sin embar-
go, el teorema fundamental del Álgebra garantiza que tiene n raı́ces com-
plejas, algunas de ellas pueden ser reales. De manera más precisa, existen
r1, r2, ..., rn ∈ C, tales que
p(ri) = 0, i = 1, 2, ..., n.
156 CAPÍTULO 4. ECUACIONES NO LINEALES
El polinomio p se puede expresar en función de sus raı́ces:
p(x) = an(x − r1)(x − r2) · · · (x − rn).
Las raı́ces complejas, no reales, siempre vienen por parejas, es decir, si r =
a + ib, b 6= 0, es una raı́z, entonces r̄ = a − ib, el conjugado de r, también
es raı́z. Esto garantiza, para los polinomios de grado impar, la existencia de
por lo menos una raı́z real. Para los polinomios de grado par, el número de
raı́ces reales es par y el número de raı́ces estrictamente complejas también
es par. Ası́, un polinomio de grado par puede tener cero raı́ces reales.
Al considerar la pareja de raı́ces complejas r y r̄, se cumple que (x−r)(x−r̄)
divide a p(x).
(x−r)(x−r̄) = (x−a−ib)(x−a+ib) = (x−a)2
+b2
= x2
−2ax+(a2
+b2
).
O sea, se tiene un polinomio real de grado 2 que divide a p(x).
Si q(x) divide a p(x), entonces existe un polinomio s(x), tal que
p(x) = q(x)s(x),
grado(p) = grado(q) + grado(s).
Entonces, para seguir obteniendo las raı́ces de p(x) basta con obtener las
raı́ces de s(x), polinomio más sencillo.
Si se halla una raı́z real r, entonces q(x) = (x−r) divide a p(x). Si se obtiene
una raı́z compleja r = a + ib, entonces q(x) = x2 − 2ax + (a2 + b2) divide
a p(x). Este proceso de obtener un polinomio de grado menor cuyas raı́ces
sean raı́ces del polinomio inicial se llama deflación.
En el método de la secante, dados dos valores x0 y x1 se busca la recta que
pasa por los puntos (x0, f(x0)), (x1, f(x1)); el siguiente valor x2 está dado
por el punto donde la recta corta el eje x.
En el método de Müller, en lugar de una recta, se utiliza una parábola.
Dados tres valores x0, x1 y x2, se construye la parábola P(x), que pasa
por los puntos (x0, f(x0)), (x1, f(x1)) y (x2, f(x2)); el siguiente valor x3
está dado por el (un) punto tal que P(x3) = 0.
La parábola se puede escribir de la forma P(x) = a(x − x2)2 + b(x − x2) + c.
Héctor M. Mora E. Métodos Numéricos con Scilab 157
Entonces, hay tres condiciones que permiten calcular a, b y c:
f(x0) = a(x0 − x2)2
+ b(x0 − x2) + c,
f(x1) = a(x1 − x2)2
+ b(x1 − x2) + c,
f(x2) = c.
Después de algunos cálculos, se obtiene
d = (x0 − x1)(x0 − x2)(x1 − x2),
a =
−(x0 − x2)(f(x1) − f(x2)) + (x1 − x2)(f(x0) − f(x2)
d
,
b =
(x0 − x2)2(f(x1) − f(x2)) − (x1 − x2)2(f(x0) − f(x2)
d
,
c = f(x2).
(4.19)
Entonces,
x3 − x2 =
−b ±
√
b2 − 4ac
2a
Para reducir los errores de redondeo se “racionaliza” el numerador y se
escoge el signo, buscando que el denominador resultante sea grande (en
valor absoluto).
D = b2
− 4ac, (4.20)
R =
√
D (4.21)
x3 − x2 =
−b ± R
2a
−b ∓ R
−b ∓ R
x3 − x2 =
b2 − R2
2a − b ∓ R
 =
b2 − b2 + 4ac
2a − b ∓ R
 =
2c
−b ∓ R
x3 − x2 = −
2c
b ± R
x3 = x2 −
2c
b + signo(b)R
(4.22)
En la siguiente iteración se obtiene la parábola utilizando x1, x2 y x3 para
obtener x4.
Si en una iteración
D = b2
− 4ac  0
158 CAPÍTULO 4. ECUACIONES NO LINEALES
es necesario utilizar, a partir de ahı́, aritmética compleja (Scilab lo hace
automáticamente). Eso hace que los siguientes valores a, b y c no sean nece-
sariamente reales. Muy posiblemente b2 − 4ac tampoco es real. Para utilizar
(4.22) es necesario obtener la raı́z cuadrada de un complejo.
Sean z un complejo, θ el ángulo (en radianes) formado con el eje real (“eje
x”), llamado con frecuencia argumento de z, y ρ, la norma o valor absoluto
de z. La dos raı́ces cuadradas de z son:
√
z = ζ1 =
√
ρ cos(θ/2) + i sen(θ/2)

,
ζ2 = −ζ1.
Ejemplo 4.9. Sea z = 12 + 16i. Entonces,
ρ = 20,
θ = tan−1
(16/12) = 0.927295,
ζ1 =
√
20 cos(0.927295/2) + i sen(0.927295/2)

= 4 + 2i,
ζ2 = −4 − 2i. ✸
Cuando b no es real, es necesario modificar ligeramente (4.22). Se escoge el
signo para que el denominador tenga máxima norma:
D = b2
− 4ac
R =
√
D
δ =
(
b + R si |b + R| ≥ |b − R|
b − R si |b + R|  |b − R|
x3 = x2 −
2c
δ
·
(4.23)
Ejemplo 4.10. Hallar las raı́ces de p(x) = 2x5 +x4 +4x3 +19x2 −18x+40
partiendo de x0 = 0, x1 = 0.5, x2 = 1.
f(x0) = 40 f(x1) = 36.375 f(x2) = 48
d = −0.25 a = 30.5
b = 38.5 c = 48
D = −4373.75
Héctor M. Mora E. Métodos Numéricos con Scilab 159
Hay que utilizar aritmética compleja
R = 66.134333i δ = 38.5 + 66.134333i
x3 = 0.368852 + 1.084169i f(x3) = 12.981325 − 9.579946i
Ahora utilizamos x1, x2 y x3
d = 0.546325 + 0.413228i a = 27.161207 + 11.293018i
b = −21.941945 + 50.286087i c = 12.981325 − 9.579946i
D = −3890.341507 − 1752.330850i R = 13.719321 − 63.863615i
δ = −35.661266 + 114.149702i
x4 = 0.586513 + 1.243614i f(x4) = 3.760763 − 6.548104i
x5 = 0.758640 + 1.246582i f(x5) = −2.013839 − 1.490220i
x6 = 0.748694 + 1.196892i f(x6) = 0.123017 + 0.025843i
x7 = 0.750002 + 1.198942i f(x7) = 0.000535 + 0.000636i
x8 = 0.750000 + 1.198958i f(x8) = 0
En seguida, se construye el polinomio q(x) = (x − r)(x − r̄). Para r =
0.75 + 1.198958i se tiene q(x) = x2 − 1.5x + 2.
2x5 + x4 + 4x3 + 19x2 − 18x + 40
x2 − 1.5x + 2
= 2x3
+ 4x2
+ 6x2
+ 20.
Ahora se trabaja con p(x) = 2x3 + 4x2 + 6x2 + 20. Sean x0 = −3, x1 = −2.5
y x2 = −2. También se hubiera podido volver a utilizar x0 = 0, x1 = 0.5 y
x2 = 1.
f(x0) = −16 f(x1) = −1.25 f(x2) = 8
d = −0.25 a = −11
b = 13 c = 8
D = 521 R = 22.825424
δ = 35.825424
x3 = −2.446610 f(x3) = −0.026391
160 CAPÍTULO 4. ECUACIONES NO LINEALES
Ahora utilizamos x1, x2 y x3
d = 0.011922 a = −9.893220
b = 22.390216 c = −0.026391
D = 500.277428 R = 22.366882
δ = 44.757098
x4 = −2.445431 f(x4) = −0.000057
x5 = −2.445428 f(x5) = 0
Para r = −2.445428 se tiene q(x) = x + 2.445428.
2x3 + 4x2 + 6x2 + 20
x + 2.445428
= 2x2
− 0.890857x + 8.178526.
Ahora se trabaja con p(x) = 2x2 − 0.890857x + 8.178526. Sus raı́ces son
0.2227142 + 2.009891i y 0.2227142 − 2.009891i. En resumen, las 5 raı́ces de
p(x) son:
0.75 + 1.1989579i
0.75 − 1.1989579i
− 2.445428
0.222714 + 2.009891i
0.222714 − 2.009891i. ✸
El método de Müller tiene orden de convergencia no inferior a 1.84... Este
valor proviene de la raı́z mas grande de µ3 − µ2 − µ − 1 = 0. Esto hace que
sea un poco menos rápido que el método de Newton (orden 2) pero más
rápido que el método de la secante (orden 1.68).
El método no tiene sentido si hay valores iguales (o muy parecidos) entre
x0, x1 y x2. Además, esto harı́a que no se pueda calcular a ni b. Tampoco
funciona si los valores f(x0), f(x1) y f(x2) son iguales o muy parecidos. En
este caso, P(x) es una lı́nea recta horizontal y no se puede calcular x3 ya
que a = 0, b = 0 y, principalmente, δ = b ± R = 0.
Héctor M. Mora E. Métodos Numéricos con Scilab 161
Método de Müller para una raı́z
datos: p, x0, x1, x2, εf , ε0, maxit
aritmética = real
f0 = p(x0), f1 = p(x1), f2 = p(x2)
info= 0
para k = 1, ..., maxit
si |f2| ≤ εf ent r = x2, info= 1, parar
d = (x0 − x1)(x0 − x2)(x1 − x2)
si |d| ≤ ε0 ent parar
calcular a, b y c según (4.19)
D = b2 − 4ac
si aritmética=real y D  0 ent aritmética=compleja
R =
√
D
δ1 = b + R, δ2 = b − R
si |δ1| ≥ |δ2| ent δ = δ1, sino δ = δ2
si |δ| ≤ ε0 ent parar
x3 = x2 − 2c/δ
x0 = x1, x1 = x2, x2 = x3, f0 = f1, f1 = f2
f2 = p(x2)
fin-para k
Si el algoritmo anterior acaba normalmente, info valdrá 1 y r será una raı́z,
real o compleja.
Método de Müller
datos: p, x0, εf , ε0, maxit
r = x0, h = 0.5
mientras grado(p) ≥ 3
x0 = r, x1 = x0 + h, x2 = x1 + h
(r, info) = Muller1(p, xo, x1, x2, εf , ε0, maxit)
si info = 0, ent parar
si |imag(r)| ≤ ε0 ent q(x) = (x − r)
sino q(x) = (x − r)(x − r̄)
p(x) = p(x)/q(x)
fin-mientras
calcular raı́ces de p (de grado no superior a 2)
Si se espera que el número de raı́ces reales sea pequeño, comparado con el de
raı́ces complejas, se puede trabajar todo el tiempo con aritmética compleja.
162 CAPÍTULO 4. ECUACIONES NO LINEALES
4.10. Método de Bairstow
Sirve para hallar las raı́ces reales o complejas de un polinomio de grado may-
or o igual a 4, mediante la obtención de los factores cuadráticos “mónicos”
del polinomio. Cuando es de grado 3, se halla una raı́z real por el método
de Newton, y después de la deflación se calculan las dos raı́ces del polinomio
cuadrático resultante.
Sea
p(x) = αnxn
+ αn−1xn−1
+ αn−2xn−2
+ ... + α1x + α0
reescrito como
p(x) = u1xn
+ u2xn−1
+ u3xn−2
+ ... + unx + un+1 (4.24)
Se desea encontrar x2−dx−e divisor de p. Cuando se hace la división entre p
y un polinomio cuadrático cualquiera, se obtiene un residuo r(x) = Rx + S.
Entonces, se buscan valores de d y e, tales que r(x) = 0, es decir, R = 0 y
S = 0. Los valores R y S dependen de d y e, o sea, R = R(d, e) y S = S(d, e)
Tenemos dos ecuaciones con dos incógnitas,
R(d, e) = 0
S(d, e) = 0
Sea
q(x) = βn−2xn−2
+ βn−3xn−3
+ ... + β1x + β0
reescrito como
q(x) = v1xn−2
+ v2xn−3
+ ... + vn−2x + vn−1
el cociente. Entonces,
p(x) = q(x)(x2
− dx − e) + Rx + S.
Es decir,
u1xn
+ u2xn−1
+ ... + unx + un+1 = (v1xn−2
+ v2xn−3
+ ... + vn−2x + vn−1)
(x2
− dx − e) + Rx + S.
Héctor M. Mora E. Métodos Numéricos con Scilab 163
u1 = v1 u2 = v2 − dv1
u3 = v3 − dv2 − ev1 u4 = v4 − dv3 − ev2
ui = vi − dvi−1 − evi−2
un−1 = vn−1 − dvn−2 − evn−3
un = −dvn−1 − evn−2 + R
un+1 = −evn−1 + S
Para facilitar las fórmulas, es útil introducir dos coeficientes adicionales, vn
y vn+1, que no influyen sobre q, definidos por
vn = R
vn+1 = S + dvn
Entonces,
un = vn − dvn−1 − evn−2
un+1 = dvn − dvn − evn−1 + S
o sea, un+1 = vn+1 − dvn − evn−1
Las igualdades quedan:
u1 = v1
u2 = v2 − dv1
ui = vi − dvi−1 − evi−2, i = 3, ..., n + 1.
Las fórmulas para calcular los vi son
v1 = u1
v2 = u2 + dv1 (4.25)
vi = ui + dvi−1 + evi−2, i = 3, ..., n + 1.
Una vez obtenidos los vi,
R = vn
S = vn+1 − dvn
164 CAPÍTULO 4. ECUACIONES NO LINEALES
u1 u2 u3 u4 · · · un+1
d dv1 dv2 dv3 · · · dvn
e ev1 ev2 · · · evn−1
v1 = u1 v2 = Σ v3 = Σ v4 = Σ vn+1 = Σ
R = vn, S = vn+1 − dvn
4 5 1 0 -1 2
2 8 26 30 -18 -128
-3 -12 -39 -45 27
4 13 15 -9 -64 -99
R = −64, S = −99 − 2 × (−64) = 29
El objetivo inicial es buscar R = 0 y S = 0. Esto se obtiene si vn = 0 y
vn+1 = 0. Ahora se desea encontrar d y e tales que
vn(d, e) = 0 ,
vn+1(d, e) = 0 .
Al aplicar el método de Newton se tiene:
resolver el sistema J

∆dk
∆ek

= −

vn(dk, ek)
vn+1(dk, ek)

(4.26)

dk+1
ek+1

=

dk
ek

+

∆dk
∆ek

(4.27)
donde J es la matriz jacobiana
J =






∂vn
∂d
(dk
, ek
)
∂vn
∂e
(dk
, ek
)
∂vn+1
∂d
(dk
, ek
)
∂vn+1
∂e
(dk
, ek
)






.
Cálculo de las derivadas parciales:
Héctor M. Mora E. Métodos Numéricos con Scilab 165
∂v1
∂d
= 0
∂v2
∂d
= v1
∂vi
∂d
= vi−1 + d
∂vi−1
∂d
+ e
∂vi−2
∂d
∂v1
∂e
= 0
∂v2
∂e
= 0
∂vi
∂e
= d
∂vi−1
∂e
+ vi−2 + e
∂vi−2
∂e
∂vi
∂e
= vi−2 + d
∂vi−1
∂e
+ e
∂vi−2
∂e
Explicitando las derivadas parciales con respecto a d se tiene:
∂v1
∂d
= 0
∂v2
∂d
= v1
∂v3
∂d
= v2 + d
∂v2
∂d
+ e
∂v1
∂d
∂v3
∂d
= v2 + d
∂v2
∂d
∂v4
∂d
= v3 + d
∂v3
∂d
+ e
∂v2
∂d
∂vi
∂d
= vi−1 + d
∂vi−1
∂d
+ e
∂vi−2
∂d
Sea
w1 = v1
w2 = v2 + dw1 (4.28)
wi = vi + dwi−1 + ewi−2, i = 3, ..., n.
Es importante observar que estas fórmulas son análogas a las de la división
sintética doble, que permiten obtener, a partir de los valores ui, los valores
vi.
Al derivar se tiene:
∂v1
∂d
= 0
∂v2
∂d
= w1
∂v3
∂d
= w2
∂vi
∂d
= wi−1
Explicitando las derivadas parciales con respecto a e se tiene
166 CAPÍTULO 4. ECUACIONES NO LINEALES
∂v1
∂e
= 0
∂v2
∂e
= 0
∂v3
∂e
= v1
∂v4
∂e
= v2 + dv1
∂v5
∂e
= v3 + d
∂v4
∂e
+ e
∂v3
∂e
Utilizando de nuevo los wi
∂v1
∂e
= 0
∂v2
∂e
= 0
∂v3
∂e
= w1
∂v4
∂e
= w2
∂v5
∂e
= w3
∂vi
∂e
= wi−2
Entonces
∂vn
∂d
= wn−1
∂vn
∂e
= wn−2
∂vn+1
∂d
= wn
∂vn+1
∂e
= wn−1
Es decir, la matriz jacobiana es simplemente
J =

wn−1 wn−2
wn wn−1

. (4.29)
Héctor M. Mora E. Métodos Numéricos con Scilab 167
Método de Bairstow
datos: u1, u2, ..., un+1 (4.24), d0, e0, ε, MAXIT
para k = 0, ...,MAXIT
calcular v1, v2, ..., vn+1 según (4.25)
si || ( vn, vn+1 ) || ≤ ε, ent parar
calcular w1, w2, ..., wn según (4.28)
construir J según (4.29)
resolver el sistema (4.26)
obtener dk+1 y ek+1 según (4.27)
fin-para k
Si el agoritmo acaba de la manera esperada, || ( vn, vn+1 ) || ≤ ε, entonces
los últimos valores d y e hacen que x2 −dx−e divida “exactamente” a p(x).
El cociente será justamente q(x) = v1xn−2 + v2xn−3 + ... + vn−2x + vn−1.
Ası́, las dos raı́ces de x2 − dx − e son también raı́ces de p(x). Si el grado de
q es superior a dos, entonces se puede recomenzar el proceso con q(x).
El método de Bairstow es, en el fondo, el método de Newton en R2, luego,
en condiciones favorables, la convergencia es cuadrática.
Ejemplo 4.11. Aplicar el método de Bairstow para hallar las raı́ces de
p(x) = 4x5
+ 5x4
+ x3
− x + 2 ,
con d0 = 2, e0 = −3 y ε = 10−8.
k = 0
4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000
2.0000 8.0000 26.0000 30.0000 -18.0000 -128.0000
-3.0000 -12.0000 -39.0000 -45.0000 27.0000
------------------------------------------------------------
4.0000 13.0000 15.0000 -9.0000 -64.0000 -99.0000
2.0000 8.0000 42.0000 90.0000 36.0000
-3.0000 -12.0000 -63.0000 -135.0000
--------------------------------------------------
4.0000 21.0000 45.0000 18.0000 -163.0000
J
18.0000 45.0000
-163.0000 18.0000
Delta : -0.4313 1.5947
d, e : 1.5687 -1.4053
======================================================================
k = 1
168 CAPÍTULO 4. ECUACIONES NO LINEALES
4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000
1.5687 6.2750 17.6875 20.4979 7.3000 -18.9220
-1.4053 -5.6211 -15.8444 -18.3619 -6.5393
------------------------------------------------------------
4.0000 11.2750 13.0664 4.6534 -12.0619 -23.4613
1.5687 6.2750 27.5313 54.8694 54.6869
-1.4053 -5.6211 -24.6625 -49.1518
--------------------------------------------------
4.0000 17.5499 34.9767 34.8603 -6.5268
J
34.8603 34.9767
-6.5268 34.8603
Delta : -0.2772 0.6211
d, e : 1.2916 -0.7842
======================================================================
k = 2
4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000
1.2916 5.1662 13.1303 14.1990 8.0426 -2.0383
-0.7842 -3.1366 -7.9720 -8.6208 -4.8830
------------------------------------------------------------
4.0000 10.1662 10.9937 6.2271 -1.5782 -4.9213
1.2916 5.1662 19.8029 35.7245 38.6544
-0.7842 -3.1366 -12.0231 -21.6898
--------------------------------------------------
4.0000 15.3325 27.6599 29.9284 15.3864
J
29.9284 27.6599
15.3864 29.9284
Delta : -0.1891 0.2616
d, e : 1.1025 -0.5225
======================================================================
k = 3
4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000
1.1025 4.4099 10.3743 10.2357 5.8639 0.0141
-0.5225 -2.0901 -4.9168 -4.8511 -2.7792
------------------------------------------------------------
4.0000 9.4099 9.2842 5.3188 0.0128 -0.7651
1.1025 4.4099 15.2361 24.7289 25.1660
-0.5225 -2.0901 -7.2211 -11.7202
--------------------------------------------------
4.0000 13.8198 22.4303 22.8267 13.4586
J
22.8267 22.4303
13.4586 22.8267
Delta : -0.0796 0.0805
d, e : 1.0229 -0.4420
======================================================================
k = 4
4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000
Héctor M. Mora E. Métodos Numéricos con Scilab 169
1.0229 4.0914 9.2992 8.7259 4.8147 0.0445
-0.4420 -1.7682 -4.0189 -3.7711 -2.0808
------------------------------------------------------------
4.0000 9.0914 8.5310 4.7071 0.0435 -0.0362
1.0229 4.0914 13.4841 20.7096 20.0369
-0.4420 -1.7682 -5.8275 -8.9501
--------------------------------------------------
4.0000 13.1828 20.2469 19.5892 11.1303
J
19.5892 20.2469
11.1303 19.5892
Delta : -0.0100 0.0075
d, e : 1.0128 -0.4345
======================================================================
k = 5
4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000
1.0128 4.0513 9.1675 8.5377 4.6639 0.0012
-0.4345 -1.7380 -3.9329 -3.6627 -2.0008
------------------------------------------------------------
4.0000 9.0513 8.4295 4.6048 0.0012 0.0004
1.0128 4.0513 13.2709 20.2186 19.3757
-0.4345 -1.7380 -5.6932 -8.6738
--------------------------------------------------
4.0000 13.1027 19.9623 19.1302 10.7032
J
19.1302 19.9623
10.7032 19.1302
Delta : -0.0001 0.0000
d, e : 1.0127 -0.4345
======================================================================
k = 6
4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000
1.0127 4.0509 9.1662 8.5357 4.6619 0.0000
-0.4345 -1.7379 -3.9324 -3.6619 -2.0000
------------------------------------------------------------
4.0000 9.0509 8.4283 4.6033 0.0000 0.0000
Entonces,
d = 1.0127362 e = −0.4344745
x2
− 1.0127362 x + 0.4344745 divide a p ,
r1 = 0.5063681 + 0.4219784 i es raı́z de p,
r2 = 0.5063681 − 0.4219784 i es raı́z de p,
q(x) = 4 x3
+ 9.0509449 x2
+ 8.4283219 x + 4.6032625 .
170 CAPÍTULO 4. ECUACIONES NO LINEALES
Al aplicar el método de Bairstow a q(x) con d0 = −1 y e0 = −1 se obtiene:
d = −0.9339455 e = −0.8660624
x2
+ 0.9339455 x + 0.8660624 divide a p ,
r3 = −0.4669728 + 0.8049837 i es raı́z de p,
r4 = −0.4669728 − 0.8049837 i es raı́z de p,
q̃(x) = 4 x + 5.3151629 .
La última raı́z es r5 = −1.3287907 .
Ejercicios
Trate de resolver las ecuaciones propuestas, utilice métodos diferentes, com-
pare sus ventajas y desventajas. Emplee varios puntos iniciales. Busque, si
es posible, otras raı́ces.
4.1 x3 + 2x2 + 3x + 4 = 0.
4.2 x3 + 2x2 − 3x − 4 = 0.
4.3 x4 − 4x3 + 6x2 − 4x + 1 = 0.
4.4 x4 − 4x3 + 6x2 − 4x − 1 = 0.
4.5 x4 − 4x3 + 6x2 − 4x + 2 = 0.
4.6
3x − 6
cos(x) + 2
−
x − 2
x2 + 1
x2 + x + 10
ex + x2
+ x3
− 8 = 0.
4.7
1000000 i
(1 + i)12
(1 + i)12 − 1
= 945560.
4.8 x2
1 − x1x2 + 3x1 − 4x2 + 10 = 0,
−2x2
1 + x2
2 + 3x1x2 − 4x1 + 5x2 − 42 = 0.
4.9 x1 + x2 + 2x1x2 − 31 = 0,
6x1 + 5x2 + 3x1x2 − 74 = 0.
Capı́tulo 5
Interpolación y aproximación
En muchas situaciones de la vida real se tiene una tabla de valores corres-
pondientes a dos magnitudes relacionadas, por ejemplo,
Año Población
1930 3425
1940 5243
1950 10538
1960 19123
1970 38765
1980 82468
1985 91963
1990 103646
1995 123425
De manera más general, se tiene una tabla de valores
x1 f(x1)
x2 f(x2)
.
.
.
.
.
.
xn f(xn)
y se desea obtener una función ˜
f, sencilla y fácil de calcular, aproximación
de f, o en otros casos, dado un x̄, se desea obtener ˜
f(x̄) valor aproximado
de f(x̄).
171
172 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
b
b
b
b
b
x
y
Figura 5.1. Puntos o datos iniciales
b
b
b
b
b
Figura 5.2. Interpolación
Los valores f(xi) pueden corresponder a:
Datos o medidas obtenidos experimentalmente.
Valores de una función f que se conoce pero tiene una expresión
analı́tica muy complicada o de evaluación difı́cil o lenta.
Una función de la que no se conoce una expresión analı́tica, pero se
puede conocer f(x) como solución de una ecuación funcional (por ejem-
plo, una ecuación diferencial) o como resultado de un proceso numéri-
co.
Cuando se desea que la función ˜
f pase exactamente por los puntos conocidos,
˜
f(xi) = f(xi) ∀i,
se habla de interpolación o de métodos de colocación, figura 5.2.
En los demás casos se habla de aproximación, figura 5.3. Este capı́tulo pre-
senta la interpolación y la aproximación por mı́nimos cuadrados.
Héctor M. Mora E. Métodos Numéricos con Scilab 173
b
b
b
b
b
Figura 5.3. Aproximación
5.1. Interpolación
5.1.1. En Scilab
Cuando hay m puntos (x1, y1), (x2, y2), ..., (xm, ym) se desea obtener la
función interpolante, una función cuya gráfica pasa por esos m puntos, con
el objetivo de evaluarla en otros valores x intermedios.
La función interpln permite hacer interpolación lineal (la función inter-
polante es continua y afı́n por trozos). Tiene dos parámetros, el primero es
una matriz de dos filas. La primera fila tiene los valores xi. Deben estar en
orden creciente. La segunda fila tiene los valores yi. El segundo parámetro
es un vector donde están los valores x en los que se desea evaluar la función
interpolante (afı́n por trozos).
clear
x = [ 0.5 1 1.5 2.1 3 3.6]’
y = [ 1 2 1.5 2.5 2.1 2.4]’
t = 0.8
ft = interpln( [x’; y’], t)
n = length(x);
xx = ( x(1):0.1:x(n) )’;
y1 = interpln( [x’; y’], xx);
plot2d(xx, y1)
La gráfica resultante es semejante a la de la figura 5.4.
174 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
1 2 3 4
1
2
3
b
b
b
b
b
b
Figura 5.4. Interpolación lineal con interpln
También se puede hacer interpolación utilizando funciones spline o trazadores
cúbicos. Para hacer esto en Scilab, se requieren dos pasos. En el primero,
mediante splin, a partir de un lista de puntos (x1, y1), (x2, y2), ..., (xm, ym)
se calculan las derivadas, en los puntos xi, de la función spline interpolante.
En el segundo paso, mediante interp, se evalúa la función interpolante en
los valores dados por un vector, primer parámetro de interp.
clear, clf
x = [ 0.5 1 1.5 2.1 3 3.6]’
y = [ 1 2 1.5 2.5 2.1 2.4]’
n = length(x);
xx = ( x(1):0.1:x(n) )’;
d = splin(x, y);
ys = interp(xx, x, y, d);
plot2d(xx, ys)
La gráfica resultante es semejante a la de la figura 5.5.
5.1.2. Caso general
En el caso general de interpolación, se tiene un conjunto de n puntos (x1, y1),
(x2, y2), ..., (xn, yn) con la condición de que los xi son todos diferentes.
Este conjunto se llama el soporte. La función ˜
f, que se desea construir,
debe ser combinación lineal de n funciones llamadas funciones de la base.
Héctor M. Mora E. Métodos Numéricos con Scilab 175
1 2 3 4
1
2
3
b
b
b
b
b
b
Figura 5.5. Interpolación con funciones spline
Supongamos que estas funciones son ϕ1, ϕ2, ..., ϕn. Entonces,
˜
f(x) = a1ϕ1(x) + a2ϕ2(x) + · · · + anϕn(x).
Como las funciones de la base son conocidas, para conocer ˜
f basta conocer
los escalares a1, a2, ..., an.
Las funciones de la base deben ser linealmente independientes. Si n ≥ 2,
la independencia lineal significa que no es posible que una de las funciones
sea combinación lineal de las otras. Por ejemplo, las funciones ϕ1(x) = 4,
ϕ2(x) = 6x2 − 20 y ϕ3(x) = 2x2 no son linealmente independientes.
Los escalares a1, a2, ..., an se escogen de tal manera que ˜
f(xi) = yi, para
i = 1, 2, ..., n. Entonces
a1ϕ1(x1) + a2ϕ2(x1) + · · · + anϕn(x1) = y1
a1ϕ1(x2) + a2ϕ2(x2) + · · · + anϕn(x2) = y2
.
.
.
a1ϕ1(xn) + a2ϕ2(xn) + · · · + anϕn(xn) = yn
Las m igualdades anteriores se pueden escribir matricialmente:





ϕ1(x1) ϕ2(x1) · · · ϕn(x1)
ϕ1(x2) ϕ2(x2) · · · ϕn(x2)
.
.
.
ϕ1(xn) ϕ2(xn) · · · ϕn(xn)










a1
a2
.
.
.
an





=





y1
y2
.
.
.
yn





De manera compacta se tiene
Φ a = y. (5.1)
176 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
La matriz Φ es una matriz cuadrada n × n y, a y y son vectores columna
n × 1. Son conocidos la matriz Φ y el vector columna y. El vector columna
a es el vector de incógnitas. Como las funciones de la base son linealmente
independientes, entonces las columnas de Φ son linealmente independientes.
En consecuencia, Φ es invertible y (5.1) se puede resolver (numéricamente).
Ejemplo 5.1. Dados los puntos (−1, 1), (2, −2), (3, 5) y la base formada
por las funciones ϕ1(x) = 1, ϕ2(x) = x, ϕ3(x) = x2, encontrar la función de
interpolación.
Al plantear Φa = y, se tiene


1 −1 1
1 2 4
1 3 9




a1
a2
a3

 =


1
−2
5


Entonces
a =


−4
−3
2

 , ˜
f(x) = −4 − 3x + 2x2
,
que efectivamente pasa por los puntos dados. ✸
La interpolación polinomial (las funciones utilizadas son 1, x, x2, ...) para
problemas pequeños con matrices “sin problemas”, se puede realizar en
Scilab, mediante órdenes semejantes a:
x = [ 0.5 1 1.5 2.1 3 3.6]’
y = [ 1 2 1.5 2.5 2.1 2.4]’
x = x(:);
y = y(:);
n = size(x,1);
n1 = n - 1;
F = ones(n,n);
for i=1:n1
F(:,i+1) = x.^i;
end
a = Fy
p = poly(a, ’x’, ’c’)
Héctor M. Mora E. Métodos Numéricos con Scilab 177
xx = (x(1):0.05:x(n))’;
yp = horner(p, xx);
Hay ejemplos clásicos de los problemas que se pueden presentar con valores
relativamente pequeños, n = 20.
Ejemplo 5.2. Dados los puntos mismos (−1, 1), (2, −2), (3, 5) y la base
formada por las funciones ϕ1(x) = 1, ϕ2(x) = ex, ϕ3(x) = e2x, encontrar la
función de interpolación.
Al plantear Φa = y, se tiene


1 0.3679 0.1353
1 7.3891 54.5982
1 20.0855 403.4288




a1
a2
a3

 =


1
−2
5


Entonces
a =


−1.2921
−0.8123
0.0496

 , ˜
f(x) = 1.2921 − 0.8123ex
+ 0.0496e2x
,
que efectivamente pasa por los puntos dados. ✸
5.2. Interpolación polinomial de Lagrange
En la interpolación de Lagrange, la función ˜
f que pasa por los puntos es
un polinomio, pero el polinomio se calcula utilizando polinomios de La-
grange, sin resolver explı́citamente un sistema de ecuaciones. Teóricamente,
el polinomio obtenido por interpolación polinomial (solución de un sistema
de ecuaciones) es exactamente el mismo obtenido por interpolación de La-
grange.
Dados n puntos
(x1, y1), (x2, y2), . . . , (xn, yn),
donde yi = f(xi) = fi, se desea encontrar un polinomio p ∈ Pn−1 (el con-
junto de polinomios de grado menor o igual a n − 1), que pase exactamente
por esos puntos, es decir,
p(xi) = yi , i = 1, 2, ..., n. (5.2)
178 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
Por ejemplo, se desea encontrar un polinomio de grado menor o igual a 2
que pase por los puntos
(−1, 1), (2, −2), (3, 5).
Los valores xi deben ser todos diferentes entre sı́. Sin perder generalidad, se
puede suponer que x1  x2  · · ·  xn.
El problema 5.2 se puede resolver planteando n ecuaciones con n incógnitas
(los coeficientes del polinomio). Este sistema lineal, teóricamente, siempre
tiene solución. Una manera adecuada, en muchos casos más eficiente numéri-
camente, de encontrar p es por medio de los polinomios de Lagrange.
5.2.1. Polinomios de Lagrange
Dados n valores diferentes x1, x2, ..., xn, se definen n polinomios de Lagrange
L1, L2, ..., Ln de la siguiente manera:
Lk(x) =
n
Y
i=1,i6=k
(x − xi)
n
Y
i=1,i6=k
(xk − xi)
· (5.3)
La construcción de los polinomios de Lagrange, para los datos del último
ejemplo x1 = −1, x2 = 2, x3 = 3, da:
L1(x) =
(x − 2)(x − 3)
(−1 − 2)(−1 − 3)
=
x2 − 5x + 6
12
,
L2(x) =
(x − −1)(x − 3)
(2 − −1)(2 − 3)
=
x2 − 2x − 3
−3
,
L3(x) =
(x − −1)(x − 2)
(3 − −1)(3 − 2)
=
x2 − x − 2
4
.
Es claro que el numerador de (5.3) es el producto de n − 1 polinomios de
grado 1; entonces el numerador es un polinomio de grado, exactamente, n−1.
El denominador es el producto de n − 1 números, ninguno de los cuales es
nulo, luego el denominador es un número no nulo. En resumen, Lk es un
polinomio de grado n − 1.
Héctor M. Mora E. Métodos Numéricos con Scilab 179
Reemplazando, se verifica que Lk se anula en todos los xi, salvo en xk,
Lk(xi) =

0 si i 6= k,
1 si i = k.
(5.4)
En el ejemplo, L3(−1) = 0, L3(2) = 0, L3(3) = 1.
Con los polinomios de Lagrange se construye inmediatamente p,
p(x) =
n
X
k=1
ykLk(x). (5.5)
Por construcción p es un polinomio en Pn−1. Reemplazando, fácilmente se
verifica 5.2.
Para el ejemplo,
p(x) = 1L1(x) − 2L2(x) + 5L3(x) = 2x2
− 3x − 4.
Ejemplo 5.3. Encontrar el polinomio, de grado menor o igual a 3, que pasa
por los puntos
(−1, 1), (1, −5), (2, −2), (3, 5).
L1(x) =
(x − 1)(x − 2)(x − 3)
(−1 − 1)(−1 − 2)(−1 − 3)
=
x3 − 6x2 + 11x − 6
−24
,
L2(x) =
x3 − 4x2 + x + 6
4
,
L3(x) =
x3 − 3x2 − x + 3
−3
,
L4(x) =
x3 − 2x2 − x + 2
8
,
p(x) = 2x2
− 3x − 4. ✸
En la práctica se usa la interpolación de Lagrange de grado 2 o 3, máximo
4. Si hay muchos puntos, estos se utilizan por grupos de 3 o 4, máximo 5
puntos.
Ejemplo 5.4. Considere los puntos
(1, 3.8), (2, 3.95), (3, 4), (4, 3.95), (4.2, 3.43), (4.5, 3.89).
180 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
0 1 2 3 4
0
1
2
3
4
5
6
7
b
b b b
b
b
Figura 5.6. Un ejemplo de interpolación polinomial
El polinomio de interpolación es
p(x) = −102.68595 + 245.23493x − 204.16498x2
+ 78.696263x3
− 14.264007x4
+ 0.9837509x5
Obviamente p(1) = 3.8 y p(2) = 3.95. Sin embargo, p(1.35) = 6.946. Ver
figura (5.6). ✸
Si x es un vector, un polinomio de Lagrange se puede costruir en Scilab por
órdenes semejantes a
x = [-1 1 2 3]’;
n = length(x)
k = 2
Lk = poly([1], ’x’, ’c’);
deno = 1;
for i=1:n
if i ~= k
Lk = Lk*poly([x(i)], ’x’);
Héctor M. Mora E. Métodos Numéricos con Scilab 181
deno = deno*(x(k) - x(i));
end
end
Lk = Lk/deno
5.2.2. Existencia, unicidad y error
El polinomio p ∈ Pn−1 existe, puesto que se puede construir. Sea q ∈ Pn−1
otro polinomio tal que
q(xi) = yi , i = 1, 2, ..., n.
Sea r(x) = p(x) − q(x). Por construcción, r ∈ Pn, además r(xi) = 0, i =
1, 2, n, es decir, r se anula en n valores diferentes, luego r(x) = 0, de donde
q(x) = p(x).
Teorema 5.1. Sean x1, x2, ..., xn reales distintos; t un real; It el menor
intervalo que contiene a x1, x2, ..., xn, t; f ∈ Cn
It
(f tiene derivadas
continuas de orden 0, 1, 2, ..., n); pn−1 el polinomio de grado menor o igual
a n − 1 que pasa por los n puntos (x1, f(x1)), ..., (xn, f(xn)). Entonces
E(t), el error en t, está dado por:
E(t) = f(t) − pn−1(t) = (t − x1)(t − x2) · · · (t − xn)f(n)
(ξ)/n! (5.6)
para algún ξ ∈ It.
Demostración. Si t = xi para algún i, entonces se tiene trivialmente el re-
sultado. Supongamos ahora que t /
∈ {x1, x2, ..., xn}. Sean
Φ(x) = (x − x1)(x − x2) · · · (x − xn),
G(x) = E(x) −
Φ(x)
Φ(t)
E(t).
Entonces
G ∈ Cn
It
,
G(xi) = E(xi) −
Φ(xi)
Φ(t)
E(t) = 0, i = 1, ..., n
G(t) = E(t) −
Φ(t)
Φ(t)
E(t) = 0.
182 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
Como G tiene por lo menos n + 1 ceros en It, aplicando el corolario del
teorema del valor medio, se deduce que G′ tiene por lo menos n+1−1 ceros
en It. Ası́ sucesivamente se concluye que G(n) tiene por lo menos un cero en
It. Sea ξ tal que
G(n)
(ξ) = 0.
De acuerdo con las definiciones
E(n)
(x) = f(n)
(x) − p(n)
n (x) = f(n)
(x),
Φ(n)
(x) = n!,
G(n)
(x) = E(n)
(x) −
Φ(n)(x)
Φ(t)
E(t),
G(n)
(x) = f(n)
(x) −
n!
Φ(t)
E(t),
G(n)
(ξ) = f(n)
(ξ) −
n!
Φ(t)
E(t) = 0.
Entonces
E(t) =
Φ(t)
n!
f(n)
(ξ). ✷
Frecuentemente no se tiene la información necesaria para aplicar (5.6). Al-
gunas veces se tiene información necesaria para obtener una cota superior
del valor absoluto del error.
|E(t)| ≤
|Φ(t)|
n!
max
z∈It
|f(n)
(z)| (5.7)
Ejemplo 5.5. Considere los valores de la función seno en los puntos 5, 5.2,
5.5 y 6. Sea p el polinomio de interpolación. Obtenga una cota para error
cometido al aproximar sen(5.8) por p(5.8). Compare con el valor real del
error.
y = (−0.9589243, −0.8834547, −0.7055403, −0.2794155).
El polinomio p se puede obtener mediante la solución de un sistema de
Héctor M. Mora E. Métodos Numéricos con Scilab 183
ecuaciones o por polinomios de Lagrange.
p(x) = 23.728487 − 12.840218 x + 2.117532 x2
− 0.1073970 x3
p(5.8) = −0.4654393
f(4)
(x) = sen(x)
It = [5, 6]
max
z∈It
|f(n)
(z)| = 0.9589243
|Φ(5.8)| = 0.0288
|E(5.8)| ≤ 0.0011507
El error cometido es:
E(5.8) = sen(5.8) − p(5.8) = 0.0008371 . ✸
5.3. Diferencias divididas de Newton
Esta es una manera diferente de hacer los cálculos para la interpolación
polinómica. En la interpolación de Lagrange se construye explı́citamente p,
es decir, se conocen sus coeficientes. Por medio de las diferencias divididas
no se tiene explı́citamente el polinomio, pero se puede obtener fácilmente el
valor p(x) para cualquier x.
Supongamos de nuevo que tenemos los mismos n puntos,
(x1, f1), (x2, f2), . . . , (xn−1, fn−1), (xn, fn).
Con ellos se obtiene p = pn−1 ∈ Pn−1. Si se consideran únicamente los
primeros n − 1 puntos
(x1, f1), (x2, f2), . . . , (xn−1, fn−1),
se puede construir pn−2 ∈ Pn−2. Sea c(x) la corrección que permite pasar
de pn−2 a pn−1,
pn−1(x) = pn−2(x) + c(x), es decir, c(x) = pn−1(x) − pn−2(x).
Por construcción, c es un polinomio en Pn−1. Además,
c(xi) = pn−1(xi) − pn−2(xi) = 0, i = 1, 2, ..., n − 1.
184 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
La fórmula anterior dice que c tiene n − 1 raı́ces diferentes x1, x2, ..., xn−1,
entonces
c(x) = αn−1(x − x1)(x − x2) · · · (x − xn−1).
f(xn) = pn−1(xn) = pn−2(xn) + c(xn),
f(xn) = pn−2(xn) + αn−1(xn − x1)(xn − x2)(xn − x3) · · · (xn − xn−1).
De la última igualdad se puede despejar αn−1. Este valor se define como
la diferencia dividida de orden n − 1 de f en los puntos x1, x2, ..., xn. Se
denota
αn−1 = f[x1, x2, ..., xn] :=
f(xn) − pn−2(xn)
(xn − x1)(xn − x2) · · · (xn − xn−1)
·
El nombre de diferencia dividida no tiene, por el momento, un significado
muy claro; este se verá más adelante. Una de las igualdades anteriores se
reescribe
pn−1(x) = pn−2(x) + f[x1, ..., xn](x − x1) · · · (x − xn−1). (5.8)
Esta fórmula es la que se utiliza para calcular pn−1(x), una vez que se sepa
calcular, de manera sencilla, f[x1, x2, ..., xn].
Para calcular p(x), se empieza calculando p0(x).
A partir de p0(x), con el valor f[x1, x2], se calcula p1(x).
A partir de p1(x), con el valor f[x1, x2, x3], se calcula p2(x).
A partir de p2(x), con el valor f[x1, x2, x3, x4], se calcula p3(x).
.
.
.
A partir de pn−2(x), con el valor f[x1, x2, ..., xn], se calcula pn−1(x).
Obviamente,
p0(x) = f(x1). (5.9)
Por definición, consistente con lo visto antes,
f[x1] := f(x1),
que se generaliza a
f[xi] := f(xi), ∀i. (5.10)
Héctor M. Mora E. Métodos Numéricos con Scilab 185
Las demás diferencias divididas se deducen de (5.8),
p1(x) = p0(x) + f[x1, x2](x − x1),
f[x1, x2] =
p1(x) − po(x)
x − x1
·
Para x = x2,
f[x1, x2] =
p1(x2) − po(x2)
x2 − x1
,
f[x1, x2] =
f(x2) − f(x2)
x2 − x1
,
f[x1, x2] =
f[x2] − f[x1]
x2 − x1
.
La anterior igualdad se generaliza a
f[xi, xi+1] =
f[xi+1] − f[xi]
xi+1 − xi
· (5.11)
Deducción de f[x1, x2, x3] :
p2(x) = p1(x) + f[x1, x2, x3](x − x1)(x − x2),
f[x1, x2, x3] =
p2(x) − p1(x)
(x − x1)(x − x2)
,
x = x3,
f[x1, x2, x3] =
p2(x3) − p1(x3)
(x3 − x1)(x3 − x2)
,
= . . .
f[x1, x2, x3] =
f1(x3 − x2) − f2(x3 − x1) + f3(x2 − x1)
(x3 − x2)(x3 − x1)(x2 − x1)
·
Por otro lado,
f[x2, x1] − f[x1, x2]
x3 − x1
=
f3 − f2
x3 − x2
−
f2 − f1
x2 − x1
x3 − x1
,
= . . .
f[x2, x3] − f[x1, x2]
x3 − x1
=
f1(x3 − x2) − f2(x3 − x1) + f3(x2 − x1)
(x3 − x2)(x3 − x1)(x2 − x1)
·
Luego
f[x1, x2, x3] =
f[x2, x3] − f[x1, x2]
x3 − x1
·
186 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
Generalizando,
f[xi, xi+1, xi+2] =
f[xi+1, xi+2] − f[xi, xi+1]
xi+2 − xi
· (5.12)
La generalización para diferencias divididas de orden j es:
f[xi, xi+1, ..., xi+j] =
f[xi+1, ..., xi+j] − f[xi, ..., xi+j−1]
xi+j − xi
· (5.13)
Las fórmulas anteriores dan sentido al nombre diferencias divididas. Cuando
no se preste a confusión, se puede utilizar la siguiente notación:
Dj
f[xi] := f[xi, xi+1, ..., xi+j]· (5.14)
Entonces
D0
f[xi] := f(xi), (5.15)
Df[xi] = D1
f[xi] =
D0f[xi+1] − D0f[xi]
xi+1 − xi
, (5.16)
D2
f[xi] =
D1f[xi+1] − D1f[xi]
xi+2 − xi
, (5.17)
Dj
f[xi] =
Dj−1f[xi+1] − Dj−1f[xi]
xi+j − xi
· (5.18)
5.3.1. Tabla de diferencias divididas
Para ejemplos pequeños, hechos a mano, se acostumbra construir la tabla
de diferencias divididas, la cual tiene el siguiente aspecto:
xi fi f[xi, xi+1] f[xi, xi+1, xi+2] f[xi, xi+1, xi+2, xi+3]
x1 f1
f[x1, x2]
x2 f2 f[x1, x2, x3]
f[x2, x3] f[x1, x2, x3, x4]
x3 f3 f[x2, x3, x4]
f[x3, x4] f[x2, x3, x4, x5]
x4 f4 f[x3, x4, x5]
f[x4, x5]
x5 f5
Héctor M. Mora E. Métodos Numéricos con Scilab 187
En la tabla anterior, dados 5 puntos, están las diferencias divididas hasta de
orden 3. Claro está, se hubiera podido calcular también la diferencia dividida
de orden 4, que estarı́a colocada en una columna adicional a la derecha.
La elaboración de la tabla es relativamente sencilla. Las dos primeras colum-
nas corresponden a los datos. La tercera columna, la de las diferencias divi-
didas de primer orden, f[xi, xi+1], se obtiene mediante la resta de dos ele-
mentos consecutivos de la columna anterior dividida por la resta de los dos
elementos correspondientes de la primera columna. Por ejemplo, f[x3, x4] =
(f4 − f3)/(x4 − x3). Obsérvese que este valor se coloca en medio de la fila
de f3 y de la fila de f4.
Para el cálculo de una diferencia dividida de segundo orden, cuarta columna,
se divide la resta de dos elementos consecutivos de la columna anterior por la
resta de dos elementos de la primera columna, pero dejando uno intercalado.
Por ejemplo, f[x1, x2, x3] = (f[x2, x3] − f[x1, x2])/(x3 − x1).
Para el cálculo de una diferencia dividida de tercer orden, quinta columna,
se divide la resta de dos elementos consecutivos de la columna anterior por la
resta de dos elementos de la primera columna, pero dejando dos intercalados.
Por ejemplo, f[x1, x2, x3, x4] = (f[x2, x3, x4] − f[x1, x2, x3])/(x4 − x1).
Ejemplo 5.6. Construir la tabla de diferencias divididas, hasta el orden 3,
a partir de los seis puntos siguientes:
(0, 0), (0.5, 0.7071), (1, 1), (2, 1.4142), (3, 1.7321), (4, 2).
xi fi Df[xi] D2f[xi] D3f[xi]
0 0.0000
1.4142
.5 0.7071 −0.8284
0.5858 0.3570
1 1.0000 −0.1144
0.4142 0.0265
2 1.4142 −0.0482
0.3179 0.0077
3 1.7321 −0.0250
0.2679
4 2.0000
El valor 1.4142 es simplemente (0.7071 − 0)/(0.5 − 0). El valor 0.2679 es
(2 − 1.7321)/(4 − 3). El valor −0.1144 es (0.4142 − .5858)/(2 − .5). El valor
0.0077 es (−0.0250 − −0.0482)/(4 − 1). ✸
188 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
El esquema algorı́tmico para calcular la tabla de diferencias divididas hasta
el orden m es el siguiente:
para i = 1, ..., n
D0f[xi] = f(xi)
fin-para i
para j = 1, ..., m
para i = 1, ..., n − j
calcular Djf[xi] según (5.18)
fin-para i
fin-para j
Suponiendo que x, y son vectores y que se conoce m, la tabla de diferencias di-
vididas, hasta el orden m, se puede costruir en Scilab por órdenes semejantes
a:
x = x(:)
y = y(:)
n = size(x,1)
DD = zeros(n,m+1);
DD(:,1) = y;
for j=1:m
for i=1:n-j
Djfi = ( DD(i+1,j) - DD(i,j) )/( x(i+j) - x(i) );
DD(i,j+1) = Djfi;
end
end
disp(DD)
Si los datos f(xi) corresponden a un polinomio, esto se puede deducir me-
diante las siguientes observaciones:
Si para algún m todos los valores f[xk, xk+1, ..., xk+m] son iguales (o
aproximadamente iguales), entonces f es (aproximadamente) un poli-
nomio de grado m.
Si para algún r todos los valores f[xk, xk+1, ..., xk+r] son nulos (o
aproximadamente nulos), entonces f es (aproximadamente) un poli-
nomio de grado r − 1.
Héctor M. Mora E. Métodos Numéricos con Scilab 189
5.3.2. Cálculo del valor interpolado
La fórmula (5.8) se puede reescribir a partir de un punto xk, pues no siempre
se debe tomar como valor de referencia x1,
pm(x) = pm−1(x) + Dm
f[xk](x − xk)(x − xk+1) · · · (x − xk+m−1). (5.19)
Si se calcula pm−1(x) de manera análoga, queda en función de pm−2(x) y
ası́ sucesivamente se obtiene:
pm(x) =
m
X
i=0

Di
f[xk]
i−1
Y
j=0
(x − xk+j)

 . (5.20)
El proceso para el cálculo es el siguiente:
p0(x) = fk
p1(x) = p0(x) + D1f[xk](x − xk)
p2(x) = p1(x) + D2f[xk](x − xk)(x − xk+1)
p3(x) = p2(x) + D3f[xk](x − xk)(x − xk+1)(x − xk+2)
p4(x) = p3(x) + D4f[xk](x − xk)(x − xk+1)(x − xk+2)(x − xk+3)
.
.
.
Se observa que para calcular pj(x) hay multiplicaciones que ya se hicieron
para obtener pj−1(x); entonces, no es necesario repetirlas sino organizar el
proceso de manera más eficiente.
γ0 = 1, p0(x) = fk
γ1 = γ0(x − xk), p1(x) = p0(x) + D1f[xk] γ1
γ2 = γ1(x − xk+1), p2(x) = p1(x) + D2f[xk] γ2
γ3 = γ2(x − xk+2), p3(x) = p2(x) + D3f[xk] γ3
γ4 = γ3(x − xk+3), p4(x) = p3(x) + D4f[xk] γ4
.
.
.
Únicamente queda por precisar la escogencia del punto inicial o de referencia
xk. Si se desea evaluar pm(x̄), ¿cuál debe ser xk? Recordemos que se supone
que los puntos x1, x2, ..., xn están ordenados y que m, orden del polinomio
de interpolación, es menor o igual que n − 1. Obviamente, aunque no es
absolutamente indispensable, también se supone que x̄ /
∈ {x1, x2, ..., xn}.
Naturalmente se desea que x̄ ∈ [xk, xk+m], pero no siempre se cumple; esto
sucede cuando x̄ /
∈ [x1, xn]. En estos casos se habla de extrapolación y se
190 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
debe escoger xk = x1 si x̄  x1. En el caso opuesto, x̄  xn, se toma
xk = xn−m.
En los demás casos, se desea que x̄ esté lo “más cerca” posible del intervalo
[xk, xk+m] o del conjunto de puntos xk, xk+1, xk+2, ..., xk+m.
Ejemplo 5.7. Considere los datos del ejemplo anterior para calcular por
interpolación cuadrática y por interpolación cúbica una aproximación de
f(1.69).
El primer paso consiste en determinar el xk. Para ello únicamente se tienen
en cuenta los valores xi.
xi
0
.5
1
2
3
4
Para el caso de la interpolación cuadrática, una simple inspección visual de-
termina que hay dos posibilidades para xk. La primera es xk = 0.5, intervalo
[0.5, 2]. La segunda es xk = 1, intervalo [1, 3]. ¿Cuál es mejor?
Para medir la cercanı́a se puede usar la distancia de x̄ al promedio de los
extremos del intervalo (xi + xi+2)/2 (el centro del intervalo) o la distancia
de x̄ al promedio de todos los puntos (xi + xi+1 + xi+2)/3. En general
ui =
xi + xi+m
2
, (5.21)
vi =
xi + xi+1 + xi+2 + · · · + xi+m
m + 1
, (5.22)
|x̄ − uk| = min
i
{|x̄ − ui| : x̄ ∈ [xi, xi+m]}, (5.23)
|x̄ − vk| = min
i
{|x̄ − vi| : x̄ ∈ [xi, xi+m]}. (5.24)
Los valores ui y vi son, de alguna forma, indicadores del centro de masa del
intervalo [xi, xi+m]. Con frecuencia, los dos criterios, (5.23) y (5.24), definen
el mismo xk, pero en algunos casos no es ası́. De todas formas son criterios
razonables y para trabajar se escoge un solo criterio, lo cual da buenos
resultados. Se puede preferir la utilización de vi que, aunque requiere más
operaciones, tiene en cuenta todos los xj pertenecientes a [xi, xi+m].
Héctor M. Mora E. Métodos Numéricos con Scilab 191
Los resultados numéricos para la interpolación cuadrática dan:
xi ui |x̄ − ui| vi |x̄ − vi|
0
.5 1.25 0.44 1.1667 0.5233
1 2.00 0.31
√
2.0000 0.3100
√
2
3
4
Para la interpolación cúbica hay tres posibilidades para xk: 0 , 0.5 y 1.
xi ui |x̄ − ui| vi |x̄ − vi|
0 1.00 0.69 0.875 0.815
.5 1.75 0.06
√
1.625 0.065
√
1 2.50 0.81 2.500 0.810
2
3
4
Una vez escogido xk = 1 para obtener la aproximación cuadrática de f(1.69),
los cálculos dan:
γ0 = 1, p0(x) = 1,
γ1 = 1(1.69 − 1) = 0.69, p1(x) = 1 + 0.4142(0.69) = 1.285798
γ2 = 0.69(1.69 − 2) = −0.2139, p2(x) = 1.285798 − 0.0482(−0.2139)
p2(x) = 1.296097
Para la interpolación cúbica, xk = 0.5:
γ0 =1, p0(x)=0.7071,
γ1 =1(1.69−0.5)=1.19, p1(x)=0.7071+0.5858(1.19)
p1(x)=1.404202
γ2 =1.19(1.69−1)=0.8211, p2(x)=1.404202−0.1144(0.8211)
p2(x)=1.310268
γ3 =0.8211(1.69−2)=−0.254541, p3(x)=1.310268+0.0265(−0.254541)
p3(x)=1.303523. ✸
192 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
El esquema del algoritmo para calcular pm(x̄), a partir de la tabla de dife-
rencia divididas, es el siguiente:
determinar k
px = f(xk)
gi = 1.0
para j = 1, ..., m
gi = gi ∗ (x̄ − xk+j−1)
px = px + gi ∗ Djf[xk]
fin-para j
Si x es un vector ordenado de manera creciente, m el grado del polinomio
interpolante y t el valor en el que se desea interpolar, el ı́ndice k se puede
obtener en Scilab por órdenes semejantes a:
n = length(x);
if t = x(1)
k = 1
else if t = x(n)
k = n-m;
else
distmin = 1.0e10;
k = -1;
for i=1:n-m
if ( x(i) = t  t = x(i+m) ) | m == 0
vi = mean(x(i:i+m));
di = abs( t - vi );
if di  distmin
distmin = di;
k = i;
end
end // if
end // for i
end // else
end // else
Dados el vector x (ordenado), el vector y , el valor m (grado del polinomio),
si ya se construyó la tabla de diferencias divididas DD y se conoce k , en-
tonces el valor p(t) se puede calcular en Scilab ası́:
Héctor M. Mora E. Métodos Numéricos con Scilab 193
pt = DD(k,1)
gi = 1
for j=1:m
gi = gi*(t-x(k+j-1))
pt = pt + gi*DD(k,j+1)
end
La escogencia del “mejor” xk para calcular pm(x̄), con m  n − 1, es útil
cuando se va a evaluar una aproximación de f en pocos puntos, suficiente-
mente separados entre sı́. Cuando hay muchos valores x̄ para obtener una
aproximación de f, puede suceder que dos de los x̄ sean cercanos pero al
obtener el “mejor” xk , resulten dos xk diferentes con dos aproximaciones
bastante diferentes, cuando se esperaban dos aproximaciones parecidas. En
la sección de splines hay un ejemplo detallado.
5.4. Diferencias finitas
Cuando los puntos (x1, f(x1)), (x2, f(x2)), (x3, f(x3)), ..., (xn, f(xn)), están
igualmente espaciados en x, es decir, existe un h  0 tal que
xi = xi−1 + h, i = 2, ..., n
xi = x1 + (i − 1)h, i = 1, ..., n
entonces se pueden utilizar las diferencias finitas, definidas por
∆0
fi = fi (5.25)
∆fi = fi+1 − fi (5.26)
∆k+1
fi = ∆k
(∆fi) = ∆k
fi+1 − ∆k
fi (5.27)
Algunas de las propiedades interesantes de las diferencias finitas son:
∆k
fi =
k
X
j=0
(−1)j

k
j

fi+k−j , (5.28)
fi+k =
k
X
j=0

k
j

∆j
fi . (5.29)
Las demostraciones se pueden hacer por inducción. La primera igualdad per-
mite calcular ∆kfi sin tener explı́citamente los valores ∆k−1fj. La segunda
194 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
igualdad permite el proceso inverso al cálculo de las diferencias finitas (se
obtienen a partir de los valores iniciales fp), es decir, obtener un valor fm a
partir de las diferencias finitas.
Para valores igualmente espaciados, las diferencias finitas y las divididas
están estrechamente relacionadas.
D0
f[xi] = f[xi] = fi = ∆0
fi
D1
f[xi] = f[xi, xi+1] =
fi+1 − fi
xi+1 − xi
=
∆1fi
h
D2
f[xi] = f[xi, xi+1, xi+2] =
f[xi+1, xi+2] − f[xi, xi+1]
xi+2 − xi
= · · · =
∆2fi
2h2
Dm
f[xi] = f[xi, ..., xi+m] =
∆mfi
m! hm
(5.30)
5.4.1. Tabla de diferencias finitas
La tabla de diferencias finitas tiene una estructura análoga a la tabla de
diferencias divididas. Se usa para ejemplos pequeños hechos a mano.
xi fi ∆fi ∆2fi ∆3fi
x1 f1
∆f1
x2 f2 ∆2f1
∆f2 ∆3f1
x3 f3 ∆2f2
∆f3 ∆3f2
x4 f4 ∆2f3
∆f4
x5 f5
La elaboración de la tabla es muy sencilla. Las dos primeras columnas corres-
ponden a los datos. A partir de la tercera columna, para calcular cada ele-
mento se hace la resta de dos elementos consecutivos de la columna anterior.
Por ejemplo, ∆f3 = f4 − f3. Obsérvese que este valor se coloca en medio de
la fila de f3 y de la fila de f4. Por ejemplo, ∆2f1 = ∆f2 − ∆f1. De manera
semejante, ∆3f2 = ∆2f3 − ∆2f2.
Ejemplo 5.8. Construir la tabla de diferencias finitas, hasta el orden 3, a
partir de los seis puntos siguientes: (0, 0), (0.5, 0.7071), (1, 1), (1.5, 1.2247),
(2, 1.4142), (2.5, 1.5811).
Héctor M. Mora E. Métodos Numéricos con Scilab 195
xi fi ∆fi ∆2fi ∆3fi
0 0.0000
0.7071
.5 0.7071 −0.4142
0.2929 0.3460
1 1.0000 −0.0682
0.2247 0.0330
1.5 1.2247 −0.0352
0.1895 0.0126
2 1.4142 −0.0226
0.1669
2.5 1.5811
El valor 0.1895 es simplemente 1.4142−1.2247. El valor 0.0330 es −0.0352−
−0.0682. ✸
El esquema algorı́tmico para calcular la tabla de diferencias finitas hasta el
orden m es el siguiente:
para i = 1, ..., n
∆0fi = f(xi)
fin-para i
para j = 1, ..., m
para i = 1, ..., n − j
∆jfi = ∆j−1fi+1 − ∆j−1fi
fin-para i
fin-para j
5.4.2. Cálculo del valor interpolado
Teniendo en cuenta la relación entre diferencias divididas y finitas (5.30), la
igualdad (5.20) se puede escribir
pm(x) =
m
X
i=0

∆ifk
i! hi
i−1
Y
j=0
(x − xk+j)

 .
196 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
El valor i! se puede escribir
Qi−1
j=0(j + 1). Además, sea s = (x − xk)/h, es
decir, x = xk + sh. Entonces, x − xk+j = xk + sh − xk − jh = (s − j)h.
pm(x) =
m
X
i=0

∆ifk
i! hi
i−1
Y
j=0
(s − j)h


=
m
X
i=0

∆ifk
i!
i−1
Y
j=0
(s − j)


=
m
X
i=0
∆i
fk
i−1
Y
j=0
s − j
j + 1
Si a y b son enteros no negativos, a ≥ b, el coeficiente binomial está definido
por 
a
b

=
a!
(a − b)! b!
.
Desarrollando los factoriales y simplificando se tiene

a
b

=
a(a − 1)(a − 2) · · · (a − b + 1)
1 × 2 × 3 × · · · × b
=
a(a − 1)(a − 2) · · · (a − b + 1)
b!
Esta última expresión sirve para cualquier valor real a y cualquier entero no
negativo b, con la convención de que

a
0

= 1. Entonces,
i−1
Y
j=0
s − j
j + 1
se puede denotar simplemente por

s
i

y ası́,
pm(x) =
m
X
i=0
∆i
fk

s
i

. (5.31)
Este coeficiente

s
i

guarda propiedades semejantes a las del coeficiente
binomial, en particular

s
i

=

s
i − 1

s − i + 1
i
.
Héctor M. Mora E. Métodos Numéricos con Scilab 197
Esto permite su cálculo de manera recurrente

s
0

= 1,

s
1

=

s
0

s

s
2

=

s
1

s − 1
2

s
3

=

s
2

s − 2
3

s
4

=

s
3

s − 3
4
.
.
.
Escoger el xk para interpolar por un polinomio de grado m, se hace como en
las diferencias divididas. Como los valores xi están igualmente espaciados
los valores, ui y vi coinciden.
ui =
xi + xi+m
2
, i = 1, ..., n − m,
|x − uk| = min{|x − ui| : i = 1, ..., n − m}.
Definido el xk, es necesario calcular s:
s =
x − xk
h
.
El esquema de los cálculos es:
γ0 = 1, p0(x) = fk
γ1 = γ0 s, p1(x) = p0(x) + ∆1fk γ1
γ2 = γ1(s − 1)/2, p2(x) = p1(x) + ∆2fk γ2
γ3 = γ2(s − 2)/3, p3(x) = p2(x) + ∆3fk γ3
γ4 = γ3(s − 3)/4, p4(x) = p3(x) + ∆4fk γ4
.
.
.
Ejemplo 5.9. Calcular p3(1.96) y p2(1.96) a partir de los puntos (0, 0),
(0.5, 0.7071), (1, 1), (1.5, 1.2247), (2, 1.4142), (2.5, 1.5811).
La tabla de diferencias finitas es la misma del ejemplo anterior. Para calcular
198 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
p3(1.96) se tiene xk = x2 = 1. Entonces s = (1.96 − 1)/0.5 = 1.92 .
γ0 = 1, p0(x) = f2 = 1
γ1 = 1(1.92) = 1.92, p1(x) = 1 + .2247(1.92) = 1.431424
γ2 = 1.92(1.92 − 1)/2 = .8832, p2(x) = 1.431424 − .0352(.8832)
p2(x) = 1.400335
γ3 = γ2(1.92 − 2)/3 = −.023552, p3(x) = 1.400335 + .0126(−.023552)
p3(x) = 1.400039
Para calcular p2(1.96) se tiene xk = x3 = 1.5. Entonces s = (1.96 −
1.5)/0.5 = 0.92 .
γ0 =1, p0(x)=f3 =1.2247
γ1 =1(0.92)=0.92, p1(x)=1.2247 + .1895(.92)=1.39904
γ2 =0.92(0.92 − 1)/2=−.0368, p2(x)=1.39904 − .0226(−0.0368)
p2(x)=1.399872
5.5. Trazadores cúbicos, interpolación polinomial
por trozos, splines
Dados n + 1 puntos, al utilizar diferencias divididas o diferencias finitas,
cuando se desea interpolar por un polinomio de grado m en un valor t, se
escoge el mejor conjunto de puntos (xk, yk), (xk+1, yk+1), ..., (xk+m, yk+m),
para obtener el valor pm(t). Sin embargo, este método presenta un gran
inconveniente cuando hay que interpolar en muchos valores t. Consideremos
los siguientes puntos:
(1, 2), (2, 2), (3, 2), (4, 3), (5, 2).
Para interpolar por polinomios de orden 2, si t  2.5 se utilizan los puntos
(1, 2), (2, 2) y (3, 2). Entonces, por ejemplo, p2(2.49) = 2. Si 2.5  t  3.5,
se utilizan los puntos (2, 2), (3, 2) y (4, 3). Después de algunos cálculos se ob-
tiene p2(2.51) = 1.87505. Para t = 2.501 se obtiene p2(2.501) = 1.8750005.
El lı́mite de p2(t), cuando t → 2.5+, es 1.875. Esto nos muestra una discon-
tinuidad. En t = 3.5 también se presenta una discontinuidad.
Estas discontinuidades se pueden evitar utilizando en el intervalo [1, 3] un
polinomio p2(t) y en el intervalo [3, 5] otro polinomio p2(t).
Obviamente ya no hay discontinuidades pero la gráfica no es suave, es decir,
la función interpolante no es diferenciable.
Héctor M. Mora E. Métodos Numéricos con Scilab 199
• • •
•
•
0 1 2 3 4 5
0
1
2
3
Figura 5.7. Puntos o datos iniciales
• • •
•
•
0 1 2 3 4 5
0
1
2
3
Figura 5.8. Interpolación cuadrática por trozos no continua
200 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
• • •
•
•
0 1 2 3 4 5
0
1
2
3
Figura 5.9. Interpolación cuadrática por trozos continua
Los trazadores cúbicos (splines cúbicos), remedian este inconveniente. En
cada intervalo [xi, xi+1] se utiliza un polinomio cúbico y los coeficientes
de cada polinomio se escogen para que en los puntos xi haya continuidad,
diferenciabilidad y doble diferenciabilidad.
Dados n puntos (x1, y1), (x2, y2), ... (xn, yn), con
x1  x2  x3  · · ·  xn,
el trazador cúbico se define ası́:
S(x) =











S1(x) si x ∈ [x1, x2]
S2(x) si x ∈ [x2, x3]
.
.
.
Sn−1(x) si x ∈ [xn−1, xn]
(5.32)
En cada uno de los n − 1 intervalos, Si(x) es un polinomio cúbico.
Si(x) = ai(x − xi)3
+ bi(x − xi)2
+ ci(x − xi) + di, i = 1, 2, ..., n − 1.
(5.33)
Héctor M. Mora E. Métodos Numéricos con Scilab 201
Conocer S(x) quiere decir conocer 4(n − 1) coeficientes: ai, bi, ci, di, para
i = 1, 2, ..., n − 1.
Se requiere que S(x) pase por los puntos (xi, yi), y que sea doblemente
diferenciable. Además, es necesario tratar algunos detalles adicionales en los
extremos de los intervalos. Entonces,
S(xi) = yi, i = 1, ..., n,
Si(xi+1) = Si+1(xi+1), i = 1, ..., n − 2,
S′
i(xi+1) = S′
i+1(xi+1), i = 1, ..., n − 2,
S′′
i (xi+1) = S′′
i+1(xi+1), i = 1, ..., n − 2.
Sea hj = xj+1 − xj, el tamaño del intervalo [xj, xj+1], j = 1, ..., n − 1. Las
condiciones anteriores se convierten en:
Si(xi) = di = yi i = 1, ..., n − 1,
Sn−1(xn) = an−1h3
n−1 + bn−1h2
n−1 + cn−1hn−1 + dn−1 = yn
aih3
i + bih2
i + cihi + di = di+1 i = 1, ..., n − 2,
3aih2
i + 2bihi + ci = ci+1 i = 1, ..., n − 2,
6aihi + 2bi = 2bi+1 i = 1, ..., n − 2.
Sea dn := yn una variable adicional. Esta variable se utilizará únicamente
en las fórmulas intermedias, pero no aparece en las fórmulas finales.
di = yi i = 1, ..., n, (5.34)
aih3
i + bih2
i + cihi + di = di+1 i = 1, ..., n − 1, (5.35)
3aih2
i + 2bihi + ci = ci+1 i = 1, ..., n − 2, (5.36)
3aihi + bi = bi+1 i = 1, ..., n − 2. (5.37)
De (5.37):
ai =
bi+1 − bi
3hi
(5.38)
Reemplazando (5.38) en (5.35):
h2
i
3
(bi+1 − bi) + bih2
i + cihi + di = di+1
h2
i
3
(bi+1 + 2bi) + cihi + di = di+1 (5.39)
202 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
Reemplazando (5.38) en (5.36):
(bi+1 − bi)hi + 2bihi + ci = ci+1
(bi+1 + bi)hi + ci = ci+1 (5.40)
Despejando ci de (5.39):
ci =
1
hi
(di+1 − di) −
hi
3
(2bi + bi+1) (5.41)
Cambiando i por i − 1:
ci−1 =
1
hi−1
(di − di−1) −
hi−1
3
(2bi−1 + bi) (5.42)
Cambiando i por i − 1 en (5.40):
(bi + bi−1)hi−1 + ci−1 = ci (5.43)
Reemplazando (5.41) y (5.42) en (5.43):
(bi + bi−1)hi−1 +
1
hi−1
(di − di−1) −
hi−1
3
(2bi−1 + bi) =
1
hi
(di+1 − di) −
hi
3
(2bi + bi+1)
Las variables di son en realidad constantes (di = yi). Dejando al lado izquier-
do las variables bj y al lado derecho los términos independientes, se tiene:
hi−1
3
bi−1 +

2hi−1
3
+
2hi
3

bi +
hi
3
bi+1 =
1
hi−1
(di−1 − di) +
1
hi
(di+1 − di).
Multiplicando por 3:
hi−1bi−1 + 2(hi−1 + hi)bi + hibi+1 =
3
hi−1
(di−1 − di) +
3
hi
(−di + di+1).
(5.44)
La igualdad anterior es válida para i = 1, ..., n − 2. Es decir, hay n − 2
ecuaciones con n incógnitas. El sistema se completa según las condiciones
de frontera. Hay dos clases de condiciones sobre S(x). La primera clase se
conoce con el nombre de condiciones de frontera libre o natural: en los
extremos la curvatura es nula, o sea, S′′(x1) = 0 y S′′(xn) = 0,
S′′
1 (x1) = 0,
S′′
n−1(xn) = 0.
(5.45)
Héctor M. Mora E. Métodos Numéricos con Scilab 203
En la segunda clase de condiciones de frontera, frontera sujeta, se supone
conocida la pendiente de S(x) en los extremos:
S′
1(x1) = f′
(x1),
S′
n−1(xn) = f′
(xn).
(5.46)
Al explicitar las condiciones de frontera libre se tiene:
S′′
1 (x) = 6a1(x − x1) + 2b1
S′′
n−1(x) = 6an−1(x − xn−1) + 2bn−1
S′′
1 (x1) = 2b1 = 0 (5.47)
S′′
n−1(xn) = 3an−1hn−1 + bn−1 = 0. (5.48)
Además del resultado anterior (b1 = 0), se puede introducir una variable
adicional bn = 0. Esto permite que la ecuación (5.44) se pueda aplicar para
i = n−1. Recuérdese que ya se introdujo dn = yn y que para todo i se tiene
di = yi. Entonces, se tiene un sistema de n ecuaciones con n incógnitas,
escrito de la forma
Ab = ζ, (5.49)
donde
A =
















1 0 0 0
h1 2(h1 + h2) h2 0
0 h2 2(h2 + h3) h3
0 0 h3 2(h3 + h4) h4
0 0 hn−2 2(hn−2 + hn−1) hn−1
0 0 0 1
















204 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
b =





















b1
b2
b3
.
.
.
bn−1
bn





















, ζ =





















0
3
h1
(y1 − y2) +
3
h2
(−y2 + y3)
3
h2
(y2 − y3) +
3
h3
(−y3 + y4)
.
.
.
3
hn−2
(yn−2 − yn−1) +
3
hn−1
(−yn−1 + yn)
0





















.
El sistema (5.49) tiene dos caracterı́sticas importantes: es tridiagonal, lo cual
facilita su solución; la matriz A es de diagonal estrictamente dominante, lo
cual garantiza que A es invertible y que la solución existe y es única.
Una vez conocidos los valores b1, b2, ..., bn−1, bn, se puede aplicar (5.41)
para calcular los ci:
ci =
1
hi
(yi+1 − yi) −
hi
3
(2bi + bi+1), i = 1, ..., n − 1. (5.50)
Como bn existe y vale 0, la ecuación (5.38) se puede aplicar aún para i =
n − 1.
ai =
bi+1 − bi
3hi
, i = 1, ..., n − 1. (5.51)
Obsérvese que para i = n−1, la igualdad an−1 = (0−bn−1)/(3hn−1) coincide
con la segunda condición de frontera (5.48). El orden de aplicación de las
fórmulas es el siguiente:
di = yi, i = 1, ..., n − 1.
Obtener b1, b2, ..., bn resolviendo (5.49).
En particular b1 = 0 y, de acá en adelante, se considera bn = 0.
Para i = 1, ..., n − 1 calcular ci según (5.50).
Para i = 1, ..., n − 1 calcular ai según (5.51).
Ejemplo 5.10. Construir el trazador cúbico para los puntos (1, 2), (2, 2),
(3, 2), (4, 3) y (5, 2).
Héctor M. Mora E. Métodos Numéricos con Scilab 205
De manera inmediata d1 = 2, d2 = 2, d3 = 2 y d4 = 3. En este ejemplo
h1 = h2 = h3 = h4 = 1. El sistema que permite obtener los bi es:






1 0 0 0 0
1 4 1 0 0
0 1 4 1 0
0 0 1 4 1
0 0 0 0 1












b1
b2
b3
b4
b5






=






0
0
3
−6
0






.
Al resolver el sistema se obtiene b1 = 0 (obvio), b2 = −0.321429, b3 =
1.285714, b4 = −1.821429 y b5 = 0 (también obvio). El cálculo de los otros
coeficientes da:
c1 = 0.107143
c2 = −0.214286
c3 = 0.75
c4 = 0.214286
a1 = −0.107143
a2 = 0.535714
a3 = −1.035714
a4 = 0.607143.
Entonces
S1(x) = −0.107143(x − 1)3
+ 0(x − 1)2
+ 0.107143(x − 1) + 2
S2(x) = 0.535714(x − 2)3
− 0.321429(x − 2)2
− 0.214286(x − 2) + 2
S3(x) = −1.035714(x − 3)3
+ 1.285714(x − 3)2
+ 0.75(x − 3) + 2
S4(x) = 0.607143(x − 4)3
− 1.821429(x − 4)2
+ 0.214286(x − 4) + 3 .
5.6. Aproximación por mı́nimos cuadrados
Cuando hay muchos puntos no es conveniente buscar un único polinomio
o una función que pase exactamente por todos los puntos. Entonces hay
dos soluciones: la primera, vista anteriormente, es hacer interpolación por
grupos pequeños de puntos. En muchos casos es una solución muy buena.
Sin embargo, en algunas ocasiones se desea una función que sirva para todos
206 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
• • •
•
•
0 1 2 3 4 5
0
1
2
3
Figura 5.10. Interpolación con trazadores cúbicos o splines
los puntos. La segunda solución consiste en obtener una sola función ˜
f que,
aunque no pase por todos los puntos, pase relativamente cerca de todos.
Este es el enfoque de la aproximación por mı́nimos cuadrados.
Se supone que hay m puntos (x1, y1), (x2, y2), ..., (xm, ym) y que los xi son
todos diferentes. La función ˜
f, que se desea construir, debe ser combinación
lineal de n funciones llamadas funciones de la base. Supongamos que estas
funciones son ϕ1, ϕ2, ..., ϕn. Entonces,
˜
f(x) = a1ϕ1(x) + a2ϕ2(x) + · · · + anϕn(x).
Como las funciones de la base son conocidas, para conocer ˜
f basta conocer
los escalares a1, a2, ..., an.
Como se supone que hay muchos puntos (m grande) y como se desea que
˜
f sea sencilla, es decir, n es relativamente pequeño, entonces se debe tener
que m ≥ n.
Las funciones de la base deben ser linealmente independientes. Los escalares
a1, a2, ..., an se escogen de tal manera que ˜
f(xi) ≈ yi, para i = 1, 2, ..., m.
Héctor M. Mora E. Métodos Numéricos con Scilab 207
Entonces,
a1ϕ1(x1) + a2ϕ2(x1) + · · · + anϕn(x1) ≈ y1
a1ϕ1(x2) + a2ϕ2(x2) + · · · + anϕn(x2) ≈ y2
a1ϕ1(x3) + a2ϕ2(x3) + · · · + anϕn(x3) ≈ y3
.
.
.
a1ϕ1(xm) + a2ϕ2(xm) + · · · + anϕn(xm) ≈ ym.
Las m igualdades (aproximadas) anteriores se pueden escribir de manera
matricial:









ϕ1(x1) ϕ2(x1) · · · ϕn(x1)
ϕ1(x2) ϕ2(x2) · · · ϕn(x2)
ϕ1(x3) ϕ2(x3) · · · ϕn(x3)
.
.
.
ϕ1(xm) ϕ2(xm) · · · ϕn(xm)














a1
a2
.
.
.
an





≈









y1
y2
y3
.
.
.
ym









De manera compacta se tiene
Φ a ≈ y. (5.52)
La matriz Φ es una matriz m × n rectangular alta (m ≥ n), a es un vector
columna n × 1, y es un vector columna m × 1. Son conocidos la matriz
Φ y el vector columna y. El vector columna a es el vector de incógnitas.
Como las funciones de la base son linealmente independientes, entonces las
columnas de Φ son linealmente independientes. En consecuencia, (5.52) se
puede resolver por mı́nimos cuadrados:
(ΦT
Φ) a = ΦT
y . (5.53)
Recordemos del capı́tulo 2 que para resolver por mı́nimos cuadrados el sis-
tema Ax = b, se minimiza ||Ax − b||2
2. Traduciendo esto al problema de
aproximación por mı́nimos cuadrados, se tiene
min
m
X
i=1


n
X
j=1
ajϕj(xi) − yi


2
.
es decir,
min
m
X
i=1

˜
f(xi) − yi
2
.
208 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
Esto significa que se está buscando una función ˜
f, combinación lineal de
las funciones de la base, tal que minimiza la suma de los cuadrados de las
distancias entre los puntos (xi, ˜
f(xi)) y (xi, yi).
Ejemplo 5.11. Dadas las funciones ϕ1(x) = 1, ϕ2(x) = x, ϕ3(x) = x2,
encontrar la función ˜
f que aproxima por mı́nimos cuadrados la función dada
por los puntos (0, 0.55), (1, 0.65), (1.5, 0.725), (2, 0.85), (3, 1.35).
Como las funciones de la base son 1, x, x2, en realidad se está buscando
aproximar por mı́nimos cuadrados por medio de un parábola. El sistema
inicial es 





1 0 0
1 1 1
1 1.5 2.25
1 2 4
1 3 9








a1
a2
a3

 ≈






0.55
0.65
0.725
0.85
1.35






Las ecuaciones normales dan:


5 7.5 16.25
7.5 16.25 39.375
16.25 39.375 103.0625




a1
a2
a3

 =


4.1250
7.4875
17.8313


La solución es:
a =


0.56
−0.04
0.10

 , ˜
f(x) = 0.56 − 0.04x + 0.1x2
.







˜
f(x1)
˜
f(x2)
˜
f(x3)
˜
f(x4)
˜
f(x5)







= Φ a =






0.56
0.62
0.725
0.88
1.34






, y =






0.55
0.65
0.725
0.85
1.35






✸
Ejercicios
5.1 Halle, resolviendo el sistema de ecuaciones, el polinomio de interpo-
lación que pasa por los puntos
(1, −5),
(2, −4),
(4, 4).
Héctor M. Mora E. Métodos Numéricos con Scilab 209
5.2 Halle, por medio de los polinomios de Lagrange, el polinomio de inter-
polación que pasa por los puntos del ejercicio anterior.
5.3 Halle el polinomio de interpolación que pasa por los puntos
(−1, −5),
(1, −5),
(2, −2),
(4, 40).
5.4 Halle el polinomio de interpolación que pasa por los puntos
(−1, 10),
(1, 8),
(2, 4),
(4, −10).
5.5 Considere los puntos
(0.10, 11.0000),
(0.13, 8.6923),
(0.16, 7.2500),
(0.20, 6.0000),
(0.26, 4.8462),
(0.40, 3.5000),
(0.32, 4.1250),
(0.50, 3.0000).
Construya la tabla de diferencias dividas hasta el orden 3. Obtenga
p2(0.11), p2(0.08), p2(0.25), p2(0.12), p2(0.33), p2(0.6), p3(0.25),
p3(0.33), p3(0.6).
5.6 Considere los puntos
(0.05, 21.0000),
(0.10, 11.0000),
(0.15, 7.6667),
(0.20, 6.0000),
(0.25, 5.0000),
(0.30, 4.3333),
(0.35, 3.8571),
(0.40, 3.5000).
Construya la tabla de diferencias divididas hasta el orden 3. Cal-
cule p2(0.11), p2(0.08), p2(0.25), p2(0.12), p2(0.33), p2(0.6), p3(0.25),
p3(0.33), p3(0.6).
210 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN
5.7 Considere los mismos puntos del ejercicio anterior. Construya la tabla
de diferencias finitas hasta el orden 3. Halle p2(0.11), p2(0.08), p2(0.25),
p2(0.12), p2(0.33), p2(0.6), p3(0.25), p3(0.33), p3(0.6).
5.8 Considere los puntos
(0.05, 2.0513),
(0.10, 2.1052),
(0.15, 2.1618),
(0.20, 2.2214),
(0.25, 2.2840),
(0.30, 2.3499),
(0.35, 2.4191),
(0.40, 2.4918).
Obtenga la recta de aproximación por mı́nimos cuadrados.
5.9 Considere los mismos puntos del ejercicio anterior. Obtenga la parábo-
la de aproximación por mı́nimos cuadrados.
5.10 Considere los mismos puntos de los dos ejercicios anteriores. Use otra
base y obtenga la correspondiente función de aproximación por mı́ni-
mos cuadrados.
5.11 Para diferentes valores de n, empezando con n = 5, construya en Scilab
dos vectores columna x y y, con las coordenadas de n puntos:
( 0, (−1)n−1(n − 1)! ), (1, 0), (2, 0), (3, 0), ..., (n − 1, 0) .
Obtenga p, el polinomio de interpolación, a partir de la solución de
(5.1).
Construya un vector columna yse con los valores del polinomio p eva-
luado en los valores del vector columna x. Teóricamente los dos vec-
tores, y, yse, son iguales. Obtenga la norma de y-yse.
Obtenga q, el polinomio de interpolación usando polinomios de La-
grange. Construya un vector columna ylg con los valores del polinomio
q evaluado en los valores del vector columna x. Teóricamente los dos
vectores, y, ylg, son iguales. Obtenga la norma de y-ylg.
Repita el proceso con n = 10, 15, 20. Observe e interprete.
Capı́tulo 6
Integración y diferenciación
6.1. Integración numérica
Esta técnica sirve para calcular el valor numérico de una integral definida,
es decir, parar obtener el valor
I =
Z b
a
f(x)dx.
En la mayorı́a de los casos no se puede calcular el valor exacto I; simplemente
se calcula ˜
I, aproximación de I.
De todas maneras primero se debe tratar de hallar la antiderivada. Cuando
esto sea imposible o muy difı́cil, entonces se recurre a la integración numéri-
ca. Por ejemplo, calcular una aproximación de
Z 0.5
0.1
ex2
dx.
En este capı́tulo hay ejemplos de integración numérica con funciones cuya
antiderivada es muy fácil de obtener y para los que no se debe utilizar la inte-
gración numérica; se usan solamente para comparar el resultado aproximado
con el valor exacto.
211
212 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
a b
y = f(x)
Figura 6.1. Integral definida
6.2. En Scilab
Para obtener una aproximación del valor de una integral definida, por ejem-
plo,
Z 0.5
0.1
e−x2
dx
se utiliza intg . Para eso es necesario definir en Scilab la función que se va
a integrar. Puede ser, directamente en el ambiente Scilab:
deff(’[y] = f53(x)’, ’y = exp(-x*x)’)
I = intg(0.1, 0.5, f53)
También se puede definir una función en un archivo .sci
function fx = f57(x)
fx = exp(-x*x)
endfunction
y después de cargarla, dar la orden
I = intg(0.1, 0.5, f57)
También se puede utilizar la función integrate :
I = integrate(’exp(-x*x)’, ’x’, 0.1, 0.5)
Héctor M. Mora E. Métodos Numéricos con Scilab 213
Aunque Scilab es muy bueno, no es perfecto. La utilización de intg o
integrate no funciona bien (versión 5.1) para
Z 2π
0
sen(x) dx .
Algunas veces no se conoce una expresión de la función f, pero se conoce
una tabla de valores (xi, f(xi)), o simplemente una tabla de valores (xi, yi).
Supongamos, ası́ lo requiere Scilab, que la lista de valores (x1, y1), ..., (xn, yn)
está ordenada de manera creciente de acuerdo con los xi, o sea, x1  x2 
· · ·  xn.
Para obtener el valor aproximado de la integral, entre x1 y xn, de la función
f (representada por los valores (xi, yi)), es necesario tener dos vectores con
los valor xi y yi, y utilizar la función inttrap , que utiliza la fórmula del
trapecio en cada subintervalo.
x = [0.1 0.15 0.2 0.25 0.3 0.4 0.5]’
y = [ 0.9900 0.9778 0.9608 0.9394 0.9139 0.8521 0.7788]’
I = inttrap(x, y)
Para los mismos parámetros x, y , se puede utilizar la función intsplin
que utiliza trazadores cúbicos (splines).
x = [0.1 0.15 0.2 0.25 0.3 0.4 0.5]’
y = [ 0.9900 0.9778 0.9608 0.9394 0.9139 0.8521 0.7788]’
I = intsplin(x, y)
6.3. Fórmula del trapecio
La fórmula del trapecio, como también la fórmula de Simpson, hace parte
de las fórmulas de Newton-Cotes. Sean n + 1 valores igualmente espaciados
a = x0, x1, x2, ..., xn = b, donde
xi = a + ih , i = 0, 1, 2, ..., n , h =
b − a
n
,
y supongamos conocidos yi = f(xi). Supongamos además que n es un múlti-
plo de m, n = km. La integral
R xn
x0
f(x)dx se puede separar en intervalos
214 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
x0
a
x1 x2 xm x2m xn−m xn
b
Figura 6.2. División en subintervalos
más pequeños:
Z xn
x0
f(x)dx =
Z xm
x0
f(x)dx +
Z x2m
xm
f(x)dx + · · · +
Z xn
xn−m
f(x)dx.
En el intervalo [x0, xm] se conocen los puntos (x0, y0), (x1, y1), ..., (xm,
ym) y se puede construir el polinomio de interpolación de Lagrange pm(x).
Entonces, la integral
R xm
x0
f(x)dx se aproxima por la integral de pm,
Z xm
x0
f(x)dx ≈
Z xm
x0
pm(x)dx.
Para m = 1 se tiene la fórmula del trapecio. Su deducción es mucho más
sencilla si se supone que x0 = 0. Esto equivale a hacer el cambio de variable
x′ = x − x0.
p1(x) = y0
x − x1
x0 − x1
+ y1
x − x0
x1 − x0
,
p1(x) = y0
x − h
−h
+ y1
x
h
,
p1(x) = y0 + x
y1 − y0
h
.
Héctor M. Mora E. Métodos Numéricos con Scilab 215
x0 x1
y0 y1
h
Figura 6.3. Fórmula del trapecio
Entonces,
Z x1
x0
p1(x)dx =
Z h
0
(y0 + x
y1 − y0
h
)dx
= y0h +
h2
2
y1 − y0
h
,
= h(
y0
2
+
y1
2
),
Z x1
x0
f(x)dx ≈ h
y0 + y1
2
· (6.1)
De la fórmula (6.1) o de la gráfica se deduce naturalmente el nombre de
fórmula del trapecio.
Ejemplo 6.1.
Z 0.2
0
ex
dx ≈ 0.2(
1
2
e0
+
1
2
e0.2
) = 0.22214028 . ✸
Aplicando la fórmula del trapecio a cada uno de los intervalos [xi−1, xi] se
tiene:
Z x1
x0
f(x)dx ≈ h(
y0
2
+
y1
2
),
Z x2
x1
f(x)dx ≈ h(
y1
2
+
y2
2
),
Z xn
xn−1
f(x)dx ≈ h(
yn−1
2
+
yn
2
).
216 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
Z xn
x0
f(x)dx ≈ h(
y0
2
+
y1
2
+
y1
2
+
y2
2
+ · · ·
yn−1
2
+
yn
2
),
Z xn
x0
f(x)dx ≈ h(
y0
2
+ y1 + y2 + · · · + yn−2 + yn−1 +
yn
2
),
Z xn
x0
f(x)dx ≈ h(
y0
2
+
n−1
X
i=1
yi +
yn
2
). (6.2)
Ejemplo 6.2.
Z 0.8
0
ex
dx ≈ 0.2(
1
2
e0
+ e0.2
+ e0.4
+ e0.6
+
1
2
e0.8
) = 1.22962334 . ✸
6.3.1. Errores local y global
El error local de la fórmula del trapecio es el error proveniente de la fórmula
(6.1).
eloc = Iloc − ˜
Iloc,
eloc =
Z x1
x0
f(x)dx − h(
y0
2
+
y1
2
)
=
Z x1
x0
f(x)dx −
Z x1
x0
p1(x)dx
=
Z x1
x0
(f(x) − p1(x))dx .
Utilizando la fórmula del error para la interpolación polinómica 5.6,
eloc =
Z x1
x0
(x − x0)(x − x1)
2
f′′
(ξx)dx , ξx ∈ [x0, x1].
El teorema del valor medio para integrales dice: Sean f continua en [a, b], g
integrable en [a, b], g no cambia de signo en [a, b], entonces
Z b
a
f(x)g(x)dx = f(c)
Z b
a
g(x)dx
para algún c en [a, b].
Héctor M. Mora E. Métodos Numéricos con Scilab 217
Teniendo en cuenta que (x − x0)(x − x1) ≤ 0 en el intervalo [x0, x1] y
aplicando el teorema del valor medio para integrales, existe z ∈ [x0, x1] tal
que
eloc =
f′′(z)
2
Z x1
x0
(x − x0)(x − x1)dx , z ∈ [x0, x1].
Mediante el cambio de variable t = x − x0, dt = dx,
eloc =
f′′(z)
2
Z h
0
t(t − h)dt , z ∈ [x0, x1],
=
f′′(z)
2
(−
h3
6
) , z ∈ [x0, x1],
eloc = −h3 f′′(z)
12
, z ∈ [x0, x1]. (6.3)
La fórmula anterior, como muchas de las fórmulas de error, sirve principal-
mente para obtener cotas del error cometido.
|eloc| ≤
h3
12
M , M = max{|f′′
(z)| : z ∈ [x0, x1]}. (6.4)
En el ejemplo 6.1, f′′(x) = ex, max{|f′′(z)| : z ∈ [0, 0.2]} = 1.22140276,
luego el máximo error que se puede cometer, en valor absoluto, es (0.2)3 ×
1.22140276/12 = 8.1427 · 10−4. En este ejemplo, se conoce el valor exacto
I = e0.2 − 1 = 0.22140276, luego |e| = 7.3752 · 10−4.
En algunos casos, la fórmula del error permite afinar un poco más. Si f′′(x) 
0 (f estrictamente convexa) en [x0, x1] y como I = ˜
I + eloc, entonces la
fórmula del trapecio da un valor aproximado pero superior al exacto.
En el mismo ejemplo, f′′(x) varı́a en el intervalo [1, 1.22140276] cuando
x ∈ [0, 0.2]. Luego
eloc ∈ [−0.00081427, −0.00066667],
entonces,
I ∈ [0.22132601, 0.22147361].
El error global resulta de la aproximación de la integral sobre todo el inter-
218 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
valo [x0, xn], o sea, el error en la fórmula (6.2),
eglob =
Z xn
x0
f(x)dx − h(
y0
2
+ y1 + y2 + · · · + yn−2 + yn−1 +
yn
2
)
=
n
X
i=1
(−
f′′(zi) h3
12
) , zi ∈ [xi−1, xi]
= −
h3
12
n
X
i=1
f′′
(zi) , zi ∈ [xi−1, xi]
Sean
M1 = min{f′′
(x) : x ∈ [a, b]} , M2 = max{f′′
(x) : x ∈ [a, b]}.
Entonces,
M1 ≤ f′′(zi) ≤ M2 , ∀i
nM1 ≤
n
X
i=1
f′′
(zi) ≤ nM2 ,
M1 ≤
1
n
n
X
i=1
f′′
(zi) ≤ M2 .
Si f ∈ C2
[a,b], entonces, aplicando el teorema del valor intermedio a f′′, existe
ξ ∈ [a, b] tal que
f′′
(ξ) =
1
n
n
X
i=1
f′′
(zi) .
Entonces,
eglob = −
h3
12
nf′′
(ξ) , ξ ∈ [a, b].
Como h = (b − a)/n, entonces n = (b − a)/h.
eglob = −h2 (b − a)f′′(ξ)
12
, ξ ∈ [a, b]. (6.5)
6.4. Fórmula de Simpson
Es la fórmula de Newton-Cotes para m = 2,
Z x2
x0
f(x)dx ≈
Z x2
x0
p2(x)dx.
Héctor M. Mora E. Métodos Numéricos con Scilab 219
El polinomio de interpolación p2(x) se construye a partir de los puntos
(x0, y0), (x1, y1), (x2, y2). Para facilitar la deducción de la fórmula, supon-
gamos que p2 es el polinomio de interpolación que pasa por los puntos (0, y0),
(h, y1), (2h, y2). Entonces,
p2(x) = y0
(x − h)(x − 2h)
(0 − h)(0 − 2h)
+ y1
(x − 0)(x − 2h)
(h − 0)(h − 2h)
+ y2
(x − 0)(x − h)
(2h − 0)(2h − h)
,
=
1
2h2
y0(x − h)(x − 2h) − 2y1 x(x − 2h) + y2 x(x − h)

,
=
1
2h2
x2
(y0 − 2y1 + y2) + hx(−3y0 + 4y1 − y2) + 2h2
y0

,
Z 2h
0
p2(x)dx =
1
2h2
8h3
3
(y0 − 2y1 + y2) + h
4h2
2
(−3y0 + 4y1 − y2)
+ 2h2
(2h)y0

,
Z 2h
0
p2(x)dx = h(
1
3
y0 +
4
3
y1 +
1
3
y2).
Entonces,
Z x2
x0
f(x)dx ≈
h
3
(y0 + 4y1 + y2) (6.6)
Suponiendo que n es par, n = 2k, al aplicar la fórmula anterior a cada uno de
los intervalos [x0, x2], [x2, x4], [x4, x6], ..., [xn−4, xn−2], [xn−2, xn], se tiene:
Z xn
x0
f(x)dx ≈
h
3
(y0 + 4y1 + 2y2 + 4y3 + · · · + 4yn−1 + yn)
Z xn
x0
f(x)dx ≈
h
3
( y0 + 4
k
X
j=1
y2j−1 + 2
k−1
X
j=1
y2j + yn ) (6.7)
Ejemplo 6.3.
Z 0.8
0
ex
dx ≈
0.2
3
(e0
+ 4(e0.2
+ e0.6
) + 2 e0.4
+ e0.8
) = 1.22555177 .
El valor exacto con cifras decimales, es 1.22554093, entonces el error es
−0.00001084 . ✸
220 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
6.4.1. Errores local y global
Para facilitar la deducción del error local, consideremos la integral entre −h
y h. Sea f ∈ C4
[−h,h].
e(h) = eloc(h) =
Z h
−h
f(x) dx −
Z h
−h
p2(x) dx,
=
Z h
−h
f(x) dx −
h
3
f(−h) + 4f(0) + f(h)

.
Sea F tal que F′(x) = f(x), entonces
R h
−h f(x) dx = F(h) − F(−h). Al
derivar con respecto a h se tiene f(h) + f(−h).
e′
(h) = f(h) + f(−h) −
1
3
f(−h) + 4f(0) + f(h)

−
h
3
− f′
(−h) + f′
(h)

,
3e′
(h) = 2f(h) + 2f(−h) − 4f(0) − h(f′
(h) − f′
(−h)).
3e′′
(h) = 2f′
(h) − 2f′
(−h) − f′
(h) + f′
(−h) − h(f′′
(h) + f′′
(−h)),
= f′
(h) − f′
(−h) − h(f′′
(h) + f′′
(−h)).
3e′′′
(h) = f′′
(h) + f′′
(−h) − (f′′
(h) + f′′
(−h)) − h(f′′′
(h) − f′′′
(−h)),
= −h(f′′′
(h) − f′′′
(−h)),
e′′′
(h) = −
h
3
( f′′′
(h) − f′′′
(−h) ),
e′′′
(h) = −
2h2
3
f′′′(h) − f′′′(−h)
2h
.
De los resultados anteriores se ve claramente que e(0) = e′(0) = e′′(0) =
e′′′(0) = 0. Además, como f ∈ C4, entonces f′′′ ∈ C1. Por el teorema del
valor medio, existe β ∈ [−h, h], β = αh, α ∈ [−1, 1], tal que
f′′′(h) − f′′′(−h)
2h
= f(4)
(αh) , α ∈ [−1, 1].
Entonces,
e′′′
(h) = −
2h2
3
f(4)
(αh) , α ∈ [−1, 1].
Héctor M. Mora E. Métodos Numéricos con Scilab 221
Sea
g4(h) = f(4)
(αh).
e′′′
(h) = −
2h2
3
g4(h).
e′′
(h) =
Z h
0
e′′′
(t) dt + e′′
(0),
e′′
(h) = −
2
3
Z h
0
t2
g4(t) dt.
Como g4 es continua, t2 es integrable y no cambia de signo en [0, h], se puede
aplicar el teorema del valor medio para integrales,
e′′
(h) = −
2
3
g4(ξ4)
Z h
0
t2
dt , ξ4 ∈ [0, h],
e′′
(h) = −
2
9
h3
g4(ξ4).
Sea
g3(h) = g4(ξ4) = f(4)
(θ3h) , −1 ≤ θ3 ≤ 1,
entonces
e′′
(h) = −
2
9
h3
g3(h).
De manera semejante,
e′
(h) =
Z h
0
e′′
(t) dt + e′
(0), e′
(h) = −
2
9
Z h
0
t3
g3(t) dt,
e′
(h) = −
2
9
g3(ξ3)
Z h
0
t3
dt , ξ3 ∈ [0, h], e′
(h) = −
1
18
h4
g3(ξ3).
Sea
g2(h) = g3(ξ3) = f(4)
(θ2h) , −1 ≤ θ2 ≤ 1,
e′
(h) = −
1
18
h4
g2(h).
222 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
e(h) =
Z h
0
e′
(t) dt + e(0),
e(h) = −
1
18
Z h
0
t4
g2(t) dt,
e(h) = −
1
18
g2(ξ2)
Z h
0
t4
dt , ξ2 ∈ [0, h],
e(h) = −
1
90
h5
g2(ξ2),
e(h) = −
h5
90
f(4)
(θ1h) , −1 ≤ θ1 ≤ 1,
e(h) = −
h5
90
f(4)
(z) , −h ≤ z ≤ h.
Volviendo al intervalo [x0, x2],
eloc = −h5 f(4)(z)
90
, z ∈ [x0, x2]. (6.8)
La deducción del error global se hace de manera semejante al error global
en la fórmula del trapecio. Sean n = 2k, M1 = min{f(4)(x) : x ∈ [a, b]},
M2 = max{f(4)(x) : x ∈ [a, b]}.
eglob =
Z b
a
f(x) dx −
 h
3
( y0 + 4
k
X
j=1
y2j−1 + 2
k−1
X
j=1
y2j + yn )

,
=
k
X
j=1

− h5 f(4)(zj)
90

, zj ∈ [x2j−2, x2j],
= −
h5
90
k
X
j=1
f(4)
(zj)
M1 ≤ f(4)(zj) ≤ M2 , ∀j
kM1 ≤
k
X
j=1
f(4)
(zj) ≤ kM2 ,
M1 ≤
1
k
k
X
j=1
f(4)
(zj) ≤ M2 ,
Héctor M. Mora E. Métodos Numéricos con Scilab 223
Entonces, existe ξ ∈ [a, b], tal que
1
k
k
X
j=1
f(4)
(zj) = f(4)
(ξ),
k
X
j=1
f(4)
(zj) = k f(4)
(ξ),
k
X
j=1
f(4)
(zj) =
n
2
f(4)
(ξ),
k
X
j=1
f(4)
(zj) =
b − a
2h
f(4)
(ξ).
Entonces,
eglob = −h4 (b − a)f(4)(ξ)
180
, ξ ∈ [a, b]. (6.9)
La fórmula de Simpson es exacta para polinomios de grado inferior o igual
a 3. El error global es del orden de h4.
Pasando de una interpolación lineal (fórmula del trapecio) a una interpo-
lación cuadrática (fórmula de Simpson), el error global pasa de O(h2) a
O(h4), es decir, hay una mejora notable. Se puede ver que al utilizar inter-
polación cúbica se obtiene
Z x3
x0
f(x)dx =
h
8
(3y0 + 9y1 + 9y2 + 3y3) −
3
80
h5
f(4)
(z) , z ∈ [x0, x3],
llamada segunda fórmula de Simpson. Entonces, el error local es O(h5) y
el error global es O(h4). La fórmula anterior es exacta para polinomios de
grado inferior o igual a 3. En resumen, la interpolación cúbica no mejora la
calidad de la aproximación numérica, luego es preferible utilizar la fórmula
(6.7), más sencilla y de calidad semejante.
Sin embargo, cuando se tiene una tabla fija con un número impar de subin-
tervalos (n impar, número par de puntos), se puede aplicar la (primera)
fórmula de Simpson sobre el intervalo [x0, xn−3] y la segunda fórmula sobre
el intervalo [xn−3, xn].
224 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
6.5. Otras fórmulas de Newton-Cotes
Las fórmulas de Newton-Cotes se pueden clasificar en abiertas y cerradas.
Las fórmulas del trapecio y de Simpson son casos particulares de las fórmulas
cerradas. En ellas se aproxima la integral en el intervalo [x0, xm] usando
el polinomio de interpolación, de grado menor o igual a m, construido a
partir de los puntos (x0, y0), (x1, y1), ..., (xm−1, ym−1), (xm, ym), igualmente
espaciados en x.
Z xm
x0
f(x)dx ≈
Z xm
x0
pm(x)dx.
La siguiente tabla muestra las más importantes.
m
Z xm
x0
pm(x)dx error
1
h
2
(y0 + y1) −
f′′(z)
12
h3
2
h
3
(y0 + 4y1 + y2) −
f(4)(z)
90
h5
3
3h
8
(y0 + 3y1 + 3y2 + y3) −
3 f(4)(z)
80
h5
4
2h
45
(7y0 + 32y1 + 12y2 + 32y3 + 7y4) −
8 f(6)(z)
945
h7
En todos los casos, z ∈ [x0, xm].
6.5.1. Fórmulas de Newton-Cotes abiertas
En estas fórmulas el polinomio de interpolación se calcula sin utilizar los
extremos del intervalo de integración,
Z xm+2
x0
f(x)dx ≈
Z xm+2
x0
pm(x)dx,
donde pm, polinomio de grado menor o igual a m, se construye utilizando los
puntos (x1, y1), (x2, y2), ..., (xm, ym), (xm+1, ym+1), igualmente espaciados
Héctor M. Mora E. Métodos Numéricos con Scilab 225
en x.
m
Z xm+2
x0
pm(x)dx error
0 2h y1 +
f′′(z)
3
h3
1
3h
2
(y1 + y2) +
3 f′′(z)
4
h3
2
4h
3
(2y1 − y2 + 2y3) +
14 f(4)(z)
45
h5
3
5h
24
(11y1 + y2 + y3 + 11y4) +
95 f(4)(z)
144
h5
En todos los casos z ∈ [x0, xm+2].
Ejemplo 6.4.
Z 0.8
0
ex
dx ≈
4 × 0.2
3
(2 e0.2
− e0.4
+ 2 e0.6
) = 1.22539158 .
El valor exacto, con 8 cifras decimales, es 1.22554093, entonces el error es
0.00014935 . ✸
En general, las fórmulas cerradas son más precisas que las abiertas, en-
tonces, siempre que se pueda, es preferible utilizar las fórmulas cerradas.
Las fórmulas abiertas se usan cuando no se conoce el valor de la función
f en los extremos del intervalo de integración; por ejemplo, en la solución
numérica de algunas ecuaciones diferenciales ordinarias.
6.6. Cuadratura adaptativa
Sea I =
R b
a f(x)dx e In la aproximación de I por un método fijo de Newton-
Cotes (trapecio, Simpson,...) utilizando n subintervalos. La fórmula que rela-
ciona I, In y el error global se puede expresar ası́:
I = In + F(b − a)hp
f(q)
(ξ), para algún ξ ∈ [a, b],
donde F, p y q dependen del método escogido; ξ depende del método, de la
función f, de n y del intervalo. Entonces,
226 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
I = In + F(b − a)(
b − a
n
)p
f(q)
(ξ),
= In + F
(b − a)p+1
np
f(q)
(ξ).
Sea m = 2n,
I = Im + F
(b − a)p+1
np2p
f(q)
(ζ),
Supongamos que
f(q)
(ξ) ≈ f(q)
(ζ).
Entonces,
I ≈ In + 2p
G ≈ In + en,
I ≈ Im + G ≈ In + em,
donde G = F (b−a)p+1
np2p f(q)(ζ), en y em son los errores. Se puede despejar G:
em ≈ G =
Im − In
2p − 1
(6.10)
=
Im − In
3
trapecio
=
Im − In
15
Simpson
Con G se obtiene, supuestamente, una mejor aproximación de I:
I ≈ Im + G. (6.11)
Los datos para el proceso iterativo para cuadratura adaptativa son: el méto-
do, f, a, b, n0, ε, nmax.
Héctor M. Mora E. Métodos Numéricos con Scilab 227
Se empieza con un n = n0 (debe ser adecuado) y se obtiene In. A partir
de ahı́ se empieza a duplicar el número de subintervalos. El cálculo de la
nueva aproximación Im se hace sin repetir evaluaciones de la función f,
ya que al duplicar el número de subintervalos los valores f(xi) de la etapa
anterior hacen parte de los valores f(xj) de la etapa actual. Se calcula G
aproximación de em, usando (6.10). Si |G| ≤ ε, entonces se supone que el
error es suficientemente pequeño y se toma como valor final Im + G. En
caso contrario, se continua duplicando el número de subintervalos. De todas
maneras está previsto un múmero máximo de subintervalos nmax, ya que
es posible que no se obtenga una aproximación del error suficientemente
pequeña.
Ejemplo 6.5.
I =
Z π
0
sen(x)dx,
utilizando el método del trapecio (n0 = 1) y el de Simpson, (n0 = 2),
ε = 10−8
Método del trapecio:
n In G
1 0.0000000000000002
2 1.5707963267948966 0.5235987755982988
4 1.8961188979370398 0.1084408570473811
8 1.9742316019455508 0.0260375680028370
16 1.9935703437723395 0.0064462472755962
32 1.9983933609701441 0.0016076723992682
64 1.9995983886400375 0.0004016758899645
128 1.9998996001842038 0.0001004038480554
256 1.9999749002350531 0.0000251000169498
512 1.9999937250705768 0.0000062749451746
1024 1.9999984312683834 0.0000015687326022
2048 1.9999996078171378 0.0000003921829181
4096 1.9999999019542845 0.0000000980457155
8192 1.9999999754885744 0.0000000245114300
16384 1.9999999938721373 0.0000000061278543
I ≈ 1.9999999938721373 + 0.0000000061278543
= 1.9999999999999916 .
228 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
Método de Simpson:
n In G
2 2.0943951023931953
4 2.0045597549844207 -0.0059890231605850
8 2.0002691699483881 -0.0002860390024022
16 2.0000165910479355 -0.0000168385933635
32 2.0000010333694127 -0.0000010371785682
64 2.0000000645300013 -0.0000000645892941
128 2.0000000040322572 -0.0000000040331829
I ≈ 2.0000000040322572 - 0.0000000040331829
= 1.9999999999990743 .
6.7. Cuadratura de Gauss-Legendre
En las diferentes fórmulas de Newton-Cotes, los valores xi deben estar igual-
mente espaciados. Esto se presenta con frecuencia cuando se dispone de una
tabla de valores (xi, f(xi)). En la cuadratura de Gauss se calcula la integral
en un intervalo fijo [−1, 1] mediante valores precisos pero no igualmente es-
paciados. Es decir, no se debe disponer de una tabla de valores, sino que
debe ser posible evaluar la función en valores especı́ficos.
La fórmula de cuadratura de Gauss tiene la forma
Z 1
−1
f(x) dx ≈
n
X
i=1
wi f(xi). (6.12)
Los valores wi se llaman los pesos o ponderaciones y los xi son las abscisas.
Si se desea integrar en otro intervalo,
Z b
a
ϕ(ξ) dξ
es necesario hacer un cambio de variable,
t =
2
b − a
(ξ − a) − 1 , ξ =
b − a
2
(t + 1) + a , dξ =
b − a
2
dt
Héctor M. Mora E. Métodos Numéricos con Scilab 229
Z b
a
ϕ(ξ) dξ =
b − a
2
Z 1
−1
ϕ(
b − a
2
(t + 1) + a) dt,
Z b
a
ϕ(ξ) dξ ≈
b − a
2
n
X
i=1
wi ϕ(
b − a
2
(xi + 1) + a),
Z b
a
ϕ(ξ) dξ ≈
b − a
2
n
X
i=1
wi ϕ(ξi), (6.13)
ξi =
b − a
2
(xi + 1) + a. (6.14)
En la cuadratura de Gauss se desea que la fórmula (6.12) sea exacta para los
polinomios de grado menor o igual que m = mn, y se desea que este valor
mn sea lo más grande posible. En particular,
Z 1
−1
f(x) dx =
n
X
i=1
wi f(xi) , si f(x) = 1, x, x2
, ..., xmn
.
La anterior igualdad da lugar a mn + 1 ecuaciones con 2n incógnitas (los wi
y los xi). De donde mn = 2n − 1, es decir, la fórmula (6.12) debe ser exacta
para polinomios de grado menor o igual a 2n − 1.
Recordemos que
Z 1
−1
xk
dx =





0 si k es impar,
2
k + 1
si k es par.
Para n = 1, se debe cumplir
w1 =
Z 1
−1
1 dx = 2,
w1x1 =
Z 1
−1
x dx = 0.
Se deduce inmediatamente que
w1 = 2 , x1 = 0.
Z 1
−1
f(x) dx ≈ 2f(0). (6.15)
230 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
Para n ≥ 2, se puede suponer, sin perder generalidad, que hay simetrı́a en
los valores xi y en los pesos wi. Más especı́ficamente, se puede suponer que:
x1  x2  ...  xn ,
xi = −xn+1−i ,
wi = wn+1−i .
Para n = 2,
w1 + w2 =
Z 1
−1
1 dx = 2,
w1x1 + w2x2 =
Z 1
−1
x dx = 0,
w1x2
1 + w2x2
2 =
Z 1
−1
x2
dx =
2
3
,
w1x3
1 + w2x3
2 =
Z 1
−1
x3
dx = 0.
Por suposiciones de simetrı́a,
x1  0  x2 ,
x1 = −x2 ,
w1 = w2.
Entonces,
2w1 = 2,
2w1x2
1 =
2
3
.
Finalmente,
w1 = 1, x1 = −
r
1
3
,
w2 = 1, x2 =
r
1
3
.
Z 1
−1
f(x) dx ≈ f

−
p
1/3

+ f
p
1/3

. (6.16)
Héctor M. Mora E. Métodos Numéricos con Scilab 231
Para n = 3,
w1 + w2 + w3 = 2,
w1x1 + w2x2 + w3x3 = 0,
w1x2
1 + w2x2
2 + w3x2
3 =
2
3
,
w1x3
1 + w2x3
2 + w3x3
3 = 0,
w1x4
1 + w2x4
2 + w3x4
3 =
2
5
,
w1x5
1 + w2x5
2 + w3x5
3 = 0.
Por suposiciones de simetrı́a,
x1  0 = x2  x3 ,
x1 = −x3 ,
w1 = w3.
Entonces,
2w1 + w2 = 2,
2w1x2
1 =
2
3
,
2w1x4
1 =
2
5
.
Finalmente,
w1 =
5
9
, x1 = −
r
3
5
,
w2 =
8
9
, x2 = 0,
w3 =
5
9
, x3 =
r
3
5
.
Z 1
−1
f(x) dx ≈
5
9
f

−
p
3/5

+
8
9
f(0) +
5
9
f
p
3/5

. (6.17)
La siguiente tabla contiene los valores wi, xi, para valores de n menores o
iguales a 6.
232 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
n wi xi
1 2 0
2 1 ±0.577350269189626
3 0.888888888888889 0
0.555555555555556 ±0.774596669241483
4 0.339981043584856 ±0.652145154862546
0.861136311594053 ±0.347854845137454
5 0.568888888888889 0
0.478628670499366 ±0.538469310105683
0.236926885056189 ±0.906179845938664
6 0.467913934572691 ±0.238619186083197
0.360761573048139 ±0.661209386466265
0.171324492379170 ±0.932469514203152
Se pueden encontrar tablas más completas en [Fro70] o en [AbS65].
Ejemplo 6.6. Calcular una aproximación de
Z 0.8
0.2
ex
dx
por cuadratura de Gauss con n = 3.
ξ1 =
0.8 − 0.2
2
(−0.774596669241483 + 1) + 0.2 = 0.26762099922756
ξ2 =
0.8 − 0.2
2
(0 + 1) + 0.2 = 0.5
ξ3 =
0.8 − 0.2
2
(0.774596669241483 + 1) + 0.2 = 0.73237900077244
Z 0.8
0.2
ex
dx ≈
0.8 − 0.2
2

5
9
eξ1
+
8
9
eξ2
+
5
9
eξ3

≈ 1.00413814737559
El valor exacto es e0.8 − e0.2 = 1.00413817033230, entonces el error es
0.00000002295671 ≈ 2.3 · 10−8. Si se emplea la fórmula de Simpson, que
también utiliza tres evaluaciones de la función, se tiene
Z 0.8
0.2
ex
dx ≈
0.3
3
e0.2
+ 4 e0.5
+ e0.8

= 1.00418287694532
El error es −0.00004470661302 ≈ 4.5 · 10−5 . ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 233
La fórmula del error para (6.12) es:
en =
22n+1(n!)4
(2n + 1)((2n)!)3
f(2n)
(ξ) , −1  ξ  1 . (6.18)
Para (6.13), el error está dado por:
en =
(b − a)2n+1(n!)4
(2n + 1)((2n)!)3
f(2n)
(ξ) , a  ξ  b . (6.19)
Comparemos el método de Simpson y la fórmula de cuadratura de Gauss
con n = 3, para integrar en el intervalo [a, b], con h = (b − a)/2. En los dos
casos es necesario evaluar tres veces la función.
eSimpson = −
h5
90
f(4)
(z) ,
eGauss3 =
(2h)7(3!)4
7(6!)3
f(6)
(ξ) =
h7
15750
f(6)
(ξ).
Se observa que mientras que la fórmula de Simpson es exacta para poli-
nomios de grado menor o igual a 3, la fórmula de Gauss es exacta hasta
para polinomios de grado 5. Sea 0  h  1. No solamente h7  h5, sino que
el coeficiente 1/15750 es mucho menor que 1/90.
En el ejemplo anterior, h = 0.3, y tanto f(4) como f(6) varı́an en el intervalo
[1.22, 2.23 ].
eSimpson = −2.7 · 10−5
f(4)
(z) ,
eGauss3 = 1.39 · 10−8
f(6)
(ξ) .
6.7.1. Polinomios de Legendre
Las fórmulas de cuadratura vistas son las fórmulas de Gauss-Legendre. En el-
las están involucrados los polinomios ortogonales de Legendre. También hay
cuadratura de Gauss-Laguerre, de Gauss-Hermite y de Gauss-Chebyshev,
relacionadas con los polinomios de Laguerre, de Hermite y de Chebyshev.
Hay varias maneras de definir los polinomios de Legendre; una de ellas es:
P0(x) = 1, (6.20)
Pn(x) =
1
2n n!
dn
dxn
(x2
− 1)n
. (6.21)
234 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
Por ejemplo,
P0(x) = 1, P1(x) = x,
P2(x) =
1
2
(3x2
− 1), P3(x) =
1
2
(5x3
− x),
P4(x) =
1
8
(35x4
− 30x2
+ 3).
También existe una expresión recursiva:
P0(x) = 1, (6.22)
P1(x) = x, (6.23)
Pn+1(x) =
2n + 1
n + 1
x Pn(x) −
n
n + 1
Pn−1(x) . (6.24)
Algunas de las propiedades de los polinomios de Legendre son:
•
Z 1
−1
xk
Pn(x) dx = 0 , k = 0, 1, 2, ..., n − 1, (6.25)
•
Z 1
−1
Pm(x)Pn(x) dx = 0 , m 6= n, (6.26)
•
Z 1
−1
(Pn(x))2
dx =
2
2n + 1
· (6.27)
Las abscisas de las fórmulas de cuadratura de Gauss-Legendre son exacta-
mente las raı́ces de Pn(x). Además,
• wi =
1
P′
n(xi)
Z 1
−1
Pn(x)
x − xi
dx, (6.28)
• wi =
1
(P′
n(xi))2
2
1 − x2
i
· (6.29)
6.7.2. Cuadratura de Gauss-Laguerre y Gauss-Hermite
La cuadratura de Gauss-Laguerre usa los polinomios de Laguerre para cal-
cular una aproximación de Z ∞
0
f(x) dx.
Héctor M. Mora E. Métodos Numéricos con Scilab 235
Las abcisas son las raı́ces de los polinomios de Laguerre. Las ponderaciones
están relacionadas con estos polinomios. Las fórmulas se pueden presentar
de dos maneras:
Z ∞
0
f(x) dx ≈
n
X
i=1
wiexi
f(xi), (6.30)
Z ∞
0
e−x
g(x) dx ≈
n
X
i=1
wig(xi). (6.31)
En [AbS65] hay tablas con valores de xi y wi para valores de n ≤ 15. Por
ejemplo, para n = 8:
xi wi
0.170279632305 3.69188589342e-1
0.903701776799 4.18786780814e-1
2.251086629866 1.75794986637e-1
4.266700170288 3.33434922612e-2
7.045905402393 2.79453623523e-3
10.758516010181 9.07650877336e-5
15.740678641278 8.48574671627e-7
22.863131736889 1.04800117487e-9
La cuadratura de Gauss-Hermite usa los polinomios de Hermite para calcular
una aproximación de Z ∞
−∞
f(x) dx.
Las abcisas son las raı́ces de los polinomios de Hermite. Las ponderaciones
están relacionadas con estos polinomios. Las fórmulas se pueden presentar
de dos maneras:
Z ∞
−∞
f(x) dx ≈
n
X
i=1
wiex2
i f(xi), (6.32)
Z ∞
−∞
e−x2
g(x) dx ≈
n
X
i=1
wig(xi). (6.33)
En [AbS65] hay tablas con valores de xi y wi para valores de n ≤ 20.
236 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
6.8. Derivación numérica
Dados los puntos (x0, y0), (x1, y1), ..., (xn, yn) igualmente espaciados en x,
o sea, xi = x0 + ih, se desea tener aproximaciones de f′(xi) y f′′(xi).
Como se vio anteriormente, (5.6),
f(x) = pn(x) + (x − x0)(x − x1) · · · (x − xn)f(n+1)
(ξ)/(n + 1)!.
Sea Φ(x) = (x − x0)(x − x1) · · · (x − xn). Como ξ depende de x, se puede
considerar F(x) = f(n+1)(ξ(x))/(n + 1)!. Entonces,
f(x) = pn(x) + Φ(x)F(x)
f′
(x) = p′
n(x) + Φ′
(x)F(x) + Φ(x)F′
(x),
f′
(xi) = p′
n(xi) + Φ′
(xi)F(xi) + Φ(xi)F′
(xi),
f′
(xi) = p′
n(xi) + Φ′
(xi)F(xi).
Para n = 1
p1(x) = y0 +
(y1 − y0)
h
(x − x0) , p′
1(x) =
(y1 − y0)
h
·
Φ(x) = (x − x0)(x − x1) , Φ′
(x) = 2x − 2x0 − h
Entonces,
f′
(x0) =
(y1 − y0)
h
+ (2x0 − 2x0 − h)F(x0) =
(y1 − y0)
h
−
h
2
f′′
(ξ(x0)),
f′
(x1) =
(y1 − y0)
h
+ (2x1 − 2x0 − h)F(x1) =
(y1 − y0)
h
+
h
2
f′′
(ξ(x1)).
En general,
f′
(xi) =
(yi+1 − yi)
h
−
h
2
f′′
(ξ), ξ ∈ [xi, xi+1] (6.34)
f′
(xi) =
(yi − yi−1)
h
+
h
2
f′′
(ζ), ζ ∈ [xi−1, xi] (6.35)
El primer término después del signo igual corresponde al valor aproximado.
El segundo término es el error. Se acostumbra decir simplemente que el error
es del orden de h. Esto se escribe
f′
(xi) =
(yi+1 − yi)
h
+ O(h),
f′
(xi) =
(yi − yi−1)
h
+ O(h).
Héctor M. Mora E. Métodos Numéricos con Scilab 237
Para n = 2, sea s = (x − x0)/h,
p2(x) = y0 + s∆f0 +
s(s − 1)
2
∆2f0
2
,
p2(x) = y0 +
x − x0
h
∆f0 +
x − x0
h
x − x0 − h
h
∆2f0
2
,
p′
2(x) =
∆f0
h
+
2x − 2x0 − h
h2
∆2f0
2
,
p′
2(x1) =
∆f0
h
+
∆2f0
2h
= · · ·
p′
2(x1) =
y2 − y0
2h
·
Φ(x) = (x − x0)(x − x0 − h)(x − x0 − 2h),
Φ(x) = (x − x0)3
− 3h(x − x0)2
+ 2h2
(x − x0),
Φ′
(x) = 3(x − x0)2
− 6h(x − x0) + 2h2
,
Φ′
(x1) = 3h2
− 6h2
+ 2h2
= −h2
.
Entonces,
f′
(x1) =
y2 − y0
2h
−
h2
6
f′′′
(ξ) , ξ ∈ [x0, x2].
De manera general,
f′
(xi) =
yi+1 − yi−1
2h
−
h2
6
f′′′
(ξ) , ξ ∈ [xi−1, xi+1]. (6.36)
O también,
f′
(xi) =
yi+1 − yi−1
2h
+ O(h2
). (6.37)
En [YoG72], pág. 357, hay una tabla con varias fórmulas para diferenciación
numérica. Para la segunda derivada, una fórmula empleada con frecuencia
es:
f′′
(xi) =
yi+1 − 2yi + yi−1
h2
−
h2
12
f(4)
(ξ) , ξ ∈ [xi−1, xi+1]. (6.38)
O también,
f′′
(xi) =
yi+1 − 2yi + yi−1
h2
+ O(h2
). (6.39)
238 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
La deducción de las fórmulas de derivación numérica se hizo a partir de
una tabla de valores (xi, yi), pero para el uso de estas solamente se requiere
conocer o poder evaluar f en los puntos necesarios. Por esta razón, algunas
veces las fórmulas aparecen directamente en función de h:
f′
(x) =
f(x + h) − f(x)
h
+ O(h), (6.40)
f′
(x) =
f(x) − f(x − h)
h
+ O(h), (6.41)
f′
(x) =
f(x + h) − f(x − h)
2h
+ O(h2
), (6.42)
f′′
(x) =
f(x + h) − 2f(x) + f(x − h)
h2
+ O(h2
). (6.43)
Ejemplo 6.7. Dada f(x) =
√
x, evaluar aproximadamente f′(4) y f′′(4),
utilizando h = 0.2.
f′
(4) ≈
2.0494 − 2
0.2
= 0.2470
f′
(4) ≈
2 − 1.9494
0.2
= 0.2532
f′
(4) ≈
2.0494 − 1.9494
2 × 0.2
= 0.2501
f′′
(4) ≈
2.0494 − 2 × 2 + 1.9494
0.22
= −0.0313 . ✸
El error de las dos primeras aproximaciones no es el mismo, pero es del
mismo orden de magnitud O(h). La tercera aproximación es mejor que las
anteriores; su error es del orden de O(h2). Los valores exactos son f′(4) =
0.25, f′′(4) = −0.03125.
6.8.1. Derivadas parciales
Sea f : Rn → R con derivadas dobles continuas. La fórmula (6.42) se puede
generalizar a
∂f
∂xi
(x̄) =
1
2h

f(x̄1, ..., x̄i−1, x̄i + h, x̄i+1, ..., x̄n)
− f(x̄1, ..., x̄i−1, x̄i − h, x̄i+1, ..., x̄n)

+ O(h2
) (6.44)
Héctor M. Mora E. Métodos Numéricos con Scilab 239
También se puede escribir de manera más compacta
∂f
∂xi
(x̄) =
f(x̄ + hei) − f(x̄ − hei)
2h
+ O(h2
) (6.45)
donde
ei
= (0, ..., 0,1, 0, ..., 0) ∈ Rn
.
La fórmula (6.43) se puede generalizar a
∂2f
∂x2
i
(x̄) =
f(x̄ + hei) − 2f(x̄) + f(x̄ − hei)
h2
+ O(h2
) (6.46)
Ejemplo 6.8. Sean f(x1, x2) = ex1 sen(x2). Obtenga una aproximación de
∂f
∂x2
(2, 3) y de
∂2f
∂x2
1
(2, 3) con h = 0.2 .
∂f
∂x2
(2, 3) ≈
f(2, 3.2) − f(2, 2.8)
0.4
= −7.2664401
∂2f
∂x2
1
(2, 3) ≈
f(2.2, 3) − 2f(2, 3) + f(1.8, 3)
0.04
= 1.0462241
6.8.2. En Scilab
Sea f : R → R derivable. La aproximación de la derivada se obtiene por
medio de derivative(f, x). Si en un archivo se define la función
function y = func246(x)
y = sqrt(x)
endfunction
y se carga este archivo en Scilab, entonces la derivada en x = 4 se obtiene
mediante
der = derivative(func246, 4)
240 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
Si se quiere obtener también la segunda derivada:
[der, der2] = derivative(func246, 4)
Sea f : Rn → R, por ejemplo, la definida en la siguiente función
function y = func245( x )
y = exp(x(1)) * sin(x(2))
endfunction
Si se carga en Scilab el archivo donde está esta función, entonces para un
vector columna x, la función derivative produce un vector fila con el gra-
diente.
x = [2 3]’
g = derivative(func245, x)
Para obtener, adicionalmente, la matriz hessiana:
x = [2 3]’
[g, A] = derivative(func245, x, H_form =’blockmat’)
Sea f : Rn → Rm, por ejemplo, la definida en la siguiente función
function fx = func247( x )
fx = zeros(3,1)
fx(1) = exp(x(1)) * sin(x(2))
fx(2) = 3*x(1) + 4*x(2)
fx(3) = x(1)*x(1) + 5*x(1)*x(2) + 3*x(2)*x(2)
endfunction
Si se carga en Scilab el archivo donde está esta función, entonces para un
vector columna x, la función derivative produce una matriz m × n, la
matriz jacobiana.
x = [2 3]’
J = derivative(func247, x)
Héctor M. Mora E. Métodos Numéricos con Scilab 241
Ejercicios
6.1 Calcule Z 1
0.2
ex
dx
utilizando la fórmula del trapecio y de Simpson, variando el número de
subintervalos; también por medio de la cuadratura de Gauss variando
el número de puntos. Calcule los errores. Compare.
6.2 Calcule Z 1
0
e−x2
dx
utilizando la fórmula de Simpson. Utilice seis cifras decimales. Tome
los valores n = 2, 4, 8, 16, 32... hasta que no haya variación.
6.3 Haga un programa para calcular
R b
a f(x)dx, siguiendo el esquema del
ejercicio anterior.
6.4 Observe, por ejemplo, que para n = 2 se evalúa la función en a, (a +
b)/2, b. Para n = 4 se evalúa la función en a, a + (b − a)/4, (a + b)/2,
a + 3(b − a)/4, b. Haga el programa eficiente para que no evalúe la
función dos veces en el mismo punto.
6.5 Haga un programa para calcular
R b
a f(x)dx , partiendo [a, b] en subin-
tervalos y utilizando en cada subintervalo cuadratura de Gauss.
6.6 Considere los puntos
(0.05, 2.0513),
(0.10, 2.1052),
(0.15, 2.1618),
(0.20, 2.2214),
(0.25, 2.2840),
(0.30, 2.3499),
(0.35, 2.4191),
(0.40, 2.4918).
Calcule de la mejor manera posible
Z 0.35
0.05
f(x)dx,
Z 0.40
0.05
f(x)dx,
Z 0.45
0.05
f(x)dx.
242 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN
6.7 Considere los mismos puntos del ejercicio anterior. Calcule una aprox-
imación de f′(0.25), f′(0.225), f′′(0.30).
6.8 Combine integración numérica y solución de ecuaciones para resolver
Z x
0
e−t2
dt = 0.1.
Capı́tulo 7
Ecuaciones diferenciales
ordinarias
Este capı́tulo se refiere únicamente a ecuaciones diferenciales ordinarias. Las
primeras secciones tratan las ecuaciones diferenciales ordinarias de primer
orden con condiciones iniciales:
y′
= f(x, y) para a ≤ x ≤ b,
y(x0) = y0.
(7.1)
Frecuentemente, la condición inicial está dada sobre el extremo izquierdo
del intervalo, o sea, a = x0. Un ejemplo es:
y′
=
xy
1 + x2 + y2
+ 3x2
, x ∈ [2, 4],
y(2) = 5.
Ciertos temas que revisten gran importancia como la existencia de la solu-
ción, unicidad, estabilidad, no serán tratados en este texto. El lector de-
berá remitirse a un libro de ecuaciones diferenciales. Aquı́ se supondrá que
las funciones satisfacen todas las condiciones necesarias (continuidad, difer-
enciabilidad, condición de Lipschitz... ) para que la solución exista, sea única
...
Como en todos los otros casos de métodos numéricos, la primera opción para
resolver una ecuación diferencial es buscar la solución analı́tica. Si esto no se
logra, entonces se busca la solución numérica, que consiste en definir puntos
en el intervalo [a, b], x0 = a  x1  x2  · · ·  xn−1  xn = b y encontrar
243
244 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
valores aproximados y1, y2, ..., yn tales que
yi ≈ y(xi), i = 1, ..., n,
En muchos casos los valores xi están igualmente espaciados, o sea,
xi = a + ih, i = 0, 1, ..., n, con h =
b − a
n
.
En varios de los ejemplos siguientes se aplicarán los métodos numéricos
para ecuaciones diferenciales con solución analı́tica conocida. Esto se hace
simplemente para comparar la solución numérica con la solución exacta.
7.0.3. En Scilab
Consideremos la siguiente ecuación diferencial:
y′
=
x + y
x2 + y2
+ 4 + cos(x) ,
y(2) = 3.
Antes de utilizar la función ode, es necesario crear en Scilab la función f y
cargarla. La función ode evalúa aproximaciones del valor de y en valores del
tercer parámetro, un vector fila o columna. El resultado es un vector fila con
las aproximaciones de la solución en los valores deseados (tercer parámetro).
Después de definir y cargar
function Dy = func158(x, y)
Dy = ( x + y )/( x*x + y*y ) + 4 + cos(x)
endfunction
se obtiene la solución aproximada mediante
x0 = 2
y0 = 3
t = 2:0.05:3;
yt = ode(y0, x0, t, func158)
Ahora es posible graficar el resultado mediante
plot2d(t, yt)
Héctor M. Mora E. Métodos Numéricos con Scilab 245
7.1. Método de Euler
Se aplica a una ecuación diferencial como en (7.1), utilizando puntos igual-
mente espaciados. Su deducción es muy sencilla.
y′
(x0) ≈
y(x0 + h) − y(x0)
h
.
Por otro lado
, y′
(x0) = f(x0, y0).
Entonces,
y(x0 + h) ≈ y0 + hf(x0, y0).
Si denotamos por y1 la aproximación de y(x0 + h), entonces la fórmula del
método de Euler es justamente
y1 = y0 + hf(x0, y0).
Aplicando varias veces el mismo tipo de aproximaciones, se tiene la fórmula
general:
yi+1 = yi + hf(xi, yi). (7.2)
Gráficamente, esto significa que y(xi +h) = y(xi+1) se aproxima por el valor
obtenido a partir de la recta tangente a la curva en el punto (xi, yi).
El valor y1 es una aproximación de y(x1). A partir de y1, no de y(x1), se
hace una aproximación de y′(x1). Es decir, al suponer que y2 es una apro-
ximación de y(x2), se han hecho dos aproximaciones consecutivas y el error
pudo haberse acumulado. De manera análoga, para decir que y3 es una
aproximación de y(x3), se han hecho tres aproximaciones, una sobre otra.
Sea ϕ(t, h) definida para t1 ≤ t ≤ t2 y para valores pequeños de h. Se dice
que
ϕ(t, h) = O(hp
)
si para valores pequeños de h existe una constante c tal que
|ϕ(t, h)| ≤ chp
, ∀t ∈ [t1, t2].
246 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
y0 = y(x0)
x0 x0 + h
y(x0 + h)
(x1, y1)
b
b
Figura 7.1. Método de Euler
También se acostumbra decir que
ϕ(t, h) ≈ chp
.
El error local tiene que ver con el error cometido para calcular y(xi+1)
suponiendo que yi es un valor exacto, es decir, yi = y(xi). El error global es
el erro resultante al considerar yn como aproximación de y(xn) (n indica el
número de intervalos).
Los resultados sobre el error en el método de Euler son:
y1 = y(x1) + O(h2
) (7.3)
yn = y(xn) + O(h). (7.4)
Ejemplo 7.1. Resolver, por el método de Euler, la ecuación diferencial
y′
= 2x2
− 4x + y
y(1) = 0.7182818
en el intervalo [1, 3], con h = 0.25.
La primera observación es que esta ecuación diferencial se puede resolver
analı́ticamente. Su solución es y = ex − 2x2. Luego no deberı́a ser resuelta
numéricamente. Sin embargo, el hecho de conocer su solución exacta permite
Héctor M. Mora E. Métodos Numéricos con Scilab 247
1 2 3
−1
0
1
2
b
b
b
b
b
b
b
b
b
Figura 7.2. Ejemplo del método de Euler
ver el error cometido en el método numérico.
y1 = y0 + hf(x0, y0)
= 0.7182818 + 0.25f(1, 0.7182818)
= 0.7182818 + 0.25(0.7182818 + 2 × 12
− 4 × 1)
= 0.3978523
y2 = y1 + hf(x1, y1)
= 0.3978523 + 0.25f(1.25, 0.3978523)
= 0.3978523 + 0.25(0.3978523 + 2 × 1.252
− 4 × 1.25)
= 0.0285654
y3 = ...
xi ỹ(xi) y(xi)
1.00 0.7182818 0.7182818
1.25 0.3978523 0.3653430
1.50 0.0285654 -0.0183109
1.75 -0.3392933 -0.3703973
2.00 -0.6428666 -0.6109439
2.25 -0.8035833 -0.6372642
2.50 -0.7232291 -0.3175060
2.75 -0.2790364 0.5176319
3.00 0.6824545 2.0855369
En los primeros valores se observa que el error es muy pequeño. A partir de
x = 2 se empiezan a distanciar los valores ỹ(x) y y(x). Si se trabaja con h =
248 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
0.1 se obtiene ỹ(3) = 1.4327409; con h = 0.01 se obtiene ỹ(3) = 2.0133187;
con h = 0.001 se obtiene ỹ(3) = 2.0782381. ✸
El método de Euler se puede escribir en Scilab mediante:
function [Y, X] = Euler(f, x0, y0, xf, n)
// Metodo de Euler para la ecuacion diferencial
//
// y’ = f(x,y)
// y(x0) = y0
// en intervalo [x0, xf]
//
// n = numero de subintervalos
// Y, X seran vectores fila de n+1 elementos
// Y contendra las aproximaciones de
// y(x0) y(x0+h) y(x0+2h) ... y(xf)
// con h = (xf-x0)/n
// X contendra los valores x0 x0+h x0+2h ... xf
h = (xf-x0)/n
X = zeros(1,n+1)
Y = X
X(1) = x0
Y(1) = y0
xi = x0
yi = y0
for i=1:n
yi = yi + h*f(xi,yi)
xi = xi+h
Y(i+1) = yi
X(i+1) = xi
end
endfunction
7.2. Método de Heun
Este método es una modificación o mejora del método de Euler y se utiliza
para el mismo tipo de problemas. También se conoce con el nombre de
Héctor M. Mora E. Métodos Numéricos con Scilab 249
y0 = y(x0)
x0 x0 + h
y(x0 + h)
b
b
(x1, y1)
Figura 7.3. Método de Heun
método del trapecio. En el método de Euler se utiliza la aproximación
y(x + h) = y(x) + hy′
(x).
En el método de Heun se busca cambiar, en la aproximación anterior, la
derivada en x por un promedio de la derivada en x y en x + h.
y(x + h) ≈ y(x) + h
y′(x) + y′(x + h)
2
o sea,
y(x + h) ≈ y(x) + h
f(x, y(x)) + f(x + h, y(x + h))
2
·
La fórmula anterior no se puede aplicar. Sirve para aproximar y(x + h) pero
utiliza y(x + h). Entonces, en el lado derecho, se reemplaza y(x + h) por la
aproximación dada por el método de Euler
y(x + h) ≈ y(x) + h
f(x, y(x)) + f(x + h, y(x) + hf(x, y(x)))
2
·
La anterior aproximación suele escribirse de la siguiente manera:
K1 = hf(xi, yi)
K2 = hf(xi + h, yi + K1)
yi+1 = yi +
1
2
(K1 + K2).
(7.5)
250 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Ejemplo 7.2. Resolver, por el método de Heun, la ecuación diferencial
y′
= 2x2
− 4x + y
y(1) = 0.7182818
en el intervalo [1, 3], con h = 0.25.
K1 = hf(x0, y0)
= 0.25f(1, 0.7182818)
= −0.320430
K2 = hf(x0 + h, y0 + K1)
= 0.25f(1.25, 0.397852)
= −0.369287
y1 = y0 + (K1 + K2)/2
= 0.3734236
K1 = hf(x1, y1)
= 0.25f(1.25, 0.3734236)
= −0.375394
K2 = hf(x1 + h, y1 + K1)
= 0.25f(1.500000, −0.001971)
= −0.375493
y2 = y1 + (K1 + K2)/2
= −0.0020198
K1 = ...
Héctor M. Mora E. Métodos Numéricos con Scilab 251
1 2 3
−1
0
1
2
b
b
b
b
b b
b
b
b
Figura 7.4. Ejemplo del método de Heun
xi ỹ(xi) y(xi)
1.00 0.7182818 0.7182818
1.25 0.3734236 0.3653430
1.50 -0.0020198 -0.0183109
1.75 -0.3463378 -0.3703973
2.00 -0.5804641 -0.6109439
2.25 -0.6030946 -0.6372642
2.50 -0.2844337 -0.3175060
2.75 0.5418193 0.5176319
3.00 2.0887372 2.0855369
En este ejemplo los resultados son mucho mejores. Por un lado, el método
es mejor, pero, por otro, dichos resultados son apenas naturales pues hubo
que evaluar 16 veces la función f(x, y), dos veces en cada iteración. En el
ejemplo del método de Euler hubo simplemente 8 evaluaciones de la función
f(x, y). Al aplicar el método de Heun con h = 0.5, es necesario evaluar 8
veces la función, se obtiene ỹ(3) = 2.1488885, resultado no tan bueno como
2.0887372, pero netamente mejor que el obtenido por el método de Euler.
Si se trabaja con h = 0.1, se obtiene ỹ(3) = 2.0841331; con h = 0.01, se
obtiene ỹ(3) = 2.0855081; con h = 0.001, se obtiene ỹ(3) = 2.0855366. ✸
7.3. Método del punto medio
Este método es también una modificación o mejora del método de Euler y
se utiliza para el mismo tipo de problemas. En el método de Euler se utiliza
252 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
y0 = y(x0)
x0 x0 + h
y(x0 + h)
x0 + h/2
b
b
(x1, y1)
Figura 7.5. Método del punto medio
la aproximación
y(x + h) = y(x) + hy′
(x).
En el método del punto medio se busca cambiar, en la aproximación anterior,
la derivada en x por la derivada en el punto medio entre x y x + h, o sea,
por la derivada en x + h/2.
y(x + h) ≈ y(x) + h y′
(x + h/2)
o sea,
y(x + h) ≈ y(x) + h f( x + h/2, y(x + h/2) )·
Como no se conoce y(x + h/2), se reemplaza por la aproximación que darı́a
el método de Euler con un paso de h/2.
y(x + h/2) ≈ y(x) +
h
2
f(x, y)
y(x + h) ≈ y(x) + h f(x + h/2, y(x) +
h
2
f(x, y))·
La anterior aproximación suele escribirse de la siguiente manera:
K1 = hf(xi, yi)
K2 = hf(xi + h/2, yi + K1/2)
yi+1 = yi + K2.
(7.6)
Héctor M. Mora E. Métodos Numéricos con Scilab 253
Ejemplo 7.3. Resolver, por el método del punto medio, la ecuación difer-
encial
y′
= 2x2
− 4x + y
y(1) = 0.7182818
en el intervalo [1, 3], con h = 0.25.
K1 = hf(x0, y0)
= 0.25f(1, 0.7182818)
= −0.320430
K2 = hf(x0 + h/2, y0 + K1/2)
= 0.25f(1.125, 0.558067)
= −0.352671
y1 = y0 + K2
= 0.3656111
K1 = hf(x1, y1)
= 0.25f(1.25, 0.3656111)
= −0.377347
K2 = hf(x1 + h/2, y1 + K1/2)
= 0.25f(1.375, 0.176937)
= −0.385453
y2 = y1 + K2
= −0.0198420
K1 = ...
254 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
1 2 3
−1
0
1
2
b
b
b
b
b b
b
b
b
Figura 7.6. Ejemplo del método del punto medio
xi ỹ(xi) y(xi)
1.00 0.7182818 0.7182818
1.25 0.3656111 0.3653430
1.50 -0.0198420 -0.0183109
1.75 -0.3769851 -0.3703973
2.00 -0.6275434 -0.6109439
2.25 -0.6712275 -0.6372642
2.50 -0.3795415 -0.3175060
2.75 0.4121500 0.5176319
3.00 1.9147859 2.0855369
También, en este ejemplo, los resultados son mucho mejores. De nuevo hubo
que evaluar 16 veces la función f(x, y), dos veces en cada iteración. Al aplicar
el método del punto medio con h = 0.5, es necesario evaluar 8 veces la fun-
ción, se obtiene ỹ(3) = 1.5515985, resultado no tan bueno como 2.0887372,
pero netamente mejor que el obtenido por el método de Euler. Si se tra-
baja con h = 0.1 se obtiene ỹ(3) = 2.0538177; con h = 0.01 se obtiene
ỹ(3) = 2.0851903; con h = 0.001 se obtiene ỹ(3) = 2.0855334. ✸
7.4. Método de Runge-Kutta
El método de Runge-Kutta RK, o, más bien, los métodos de Runge-Kutta
se aplican a (7.1) utilizando puntos igualmente espaciados. La forma general
Héctor M. Mora E. Métodos Numéricos con Scilab 255
del método RK de orden n es la siguiente:
K1 = hf(xi, yi)
K2 = hf(xi + α2h, yi + β21K1)
K3 = hf(xi + α3h, yi + β31K1 + β32K2)
.
.
.
Kn = hf(xi + αnh, yi + βn1K1 + βn2K2 + · · · + βn,n−1Kn−1)
yi+1 = yi + R1K1 + R2K2 + ... + RnKn.
(7.7)
Se ve claramente que los métodos vistos son de RK: el método de Euler es
uno de RK de orden 1, el método de Heun y el del punto medio son métodos
de RK de orden 2.
Método de Euler:
K1 = hf(xi, yi) (7.8)
yi+1 = yi + K1.
Método de Heun:
K1 = hf(xi, yi)
K2 = hf(xi + h, yi + K1) (7.9)
yi+1 = yi +
1
2
K1 +
1
2
K2.
Método del punto medio:
K1 = hf(xi, yi)
K2 = hf(xi +
1
2
h, yi +
1
2
K1) (7.10)
yi+1 = yi + 0K1 + K2.
Un método muy popular es el siguiente método RK de orden 4:
K1 = hf(xi, yi)
K2 = hf(xi + h/2, yi + K1/2)
K3 = hf(xi + h/2, yi + K2/2)
K4 = hf(xi + h, yi + K3)
yi+1 = yi + (K1 + 2K2 + 2K3 + K4)/6.
(7.11)
256 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Ejemplo 7.4. Resolver, por el método RK4 anterior, la ecuación diferencial
y′
= 2x2
− 4x + y
y(1) = 0.7182818
en el intervalo [1, 3], con h = 0.25.
K1 = hf(x0, y0)
= 0.25f(1, 0.7182818)
= −0.320430
K2 = hf(x0 + h/2, y0 + K1/2)
= 0.25f(1.125, 0.558067)
= −0.352671
K3 = hf(x0 + h/2, y0 + K2/2)
= 0.25f(1.125, 0.541946)
= −0.356701
K4 = hf(x0 + h, y0 + K3)
= 0.25f(1.25, 0.361581)
= −0.378355
y1 = y0 + (K1 + 2K2 + 2K3 + K4)/6
= 0.3653606
K1 = hf(x1, y1)
= 0.25f(1.25, 0.3653606)
= −0.377410
K2 = hf(x1 + h/2, y1 + K1/2)
= 0.25f(1.375, 0.176656)
= −0.385524
Héctor M. Mora E. Métodos Numéricos con Scilab 257
1 2 3
−1
0
1
2
b
b
b
b
b b
b
b
b
Figura 7.7. Ejemplo del método Runge-Kutta 4
K3 = hf(x1 + h/2, y1 + K2/2)
= 0.25f(1.375, 0.172599)
= −0.386538
K4 = hf(x1 + h, y1 + K3)
= 0.25f(1.5, −0.02117)
= −0.380294
y2 = y1 + (K1 + 2K2 + 2K3 + K4)/6
= −0.0182773
xi ỹ(xi) y(xi)
1.00 0.7182818 0.7182818
1.25 0.3653606 0.3653430
1.50 -0.0182773 -0.0183109
1.75 -0.3703514 -0.3703973
2.00 -0.6108932 -0.6109439
2.25 -0.6372210 -0.6372642
2.50 -0.3174905 -0.3175060
2.75 0.5175891 0.5176319
3.00 2.0853898 2.0855369
En este ejemplo, los resultados son aún mejores. Hubo que evaluar 32 veces
la función f(x, y), 4 veces en cada iteración. Si se trabaja con h = 0.1 se
obtiene ỹ(3) = 2.0855314; con h = 0.01 se obtiene ỹ(3) = 2.0855369; con
h = 0.001 se obtiene ỹ(3) = 2.0855369. ✸
258 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
El método RK4 se puede escribir en Scilab de la siguiente manera:
function [Y, X] = RK4(f, x0, y0, xf, n)
// Metodo Runge-Kutta 4 para la ecuacion diferencial
//
// y’ = f(x,y)
// y(x0) = y0
// en intervalo [x0, xf]
//
// n = numero de subintervalos
//
// Y, X seran vectores fila de n+1 elementos
// Y contendra las aproximaciones de
// y(x0) y(x0+h) y(x0+2h) ... y(xf)
// con h = (xf-x0)/n
// X contendra los valores x0 x0+h x0+2h ... xf
h = (xf-x0)/n
X = zeros(1,n+1)
Y = X
X(1) = x0
Y(1) = y0
xi = x0
yi = y0
for i=1:n
K1 = h*f(xi, yi)
K2 = h*f(xi+h/2, yi+K1/2);
K3 = h*f(xi+h/2, yi+K2/2);
K4 = h*f(xi+h, yi+K3);
xi = xi+h
yi = yi + (K1 + 2*K2 + 2*K3 + K4)/6
Y(i+1) = yi
X(i+1) = xi
end
endfunction
Héctor M. Mora E. Métodos Numéricos con Scilab 259
7.5. Deducción de RK2
En secciones anteriores se hizo la deducción, de manera más o menos intuiti-
va, de los métodos de Heun y del punto medio. Los dos resultan ser métodos
de RK de orden 2. En esta sección veremos una deducción diferente y general
de RK2.
El método RK2 tiene el siguiente esquema:
K1 = hf(xi, yi)
K2 = hf(xi + α2h, yi + β21K1)
yi+1 = yi + R1K1 + R2K2.
Como hay un solo coeficiente α y un solo coeficiente β, utilicémoslos sin
subı́ndices:
K1 = hf(xi, yi)
K2 = hf(xi + αh, yi + βK1)
yi+1 = yi + R1K1 + R2K2.
Sea g una función de dos variables. Si g es diferenciable en el punto (ū, v̄),
entonces se puede utilizar la siguiente aproximación de primer orden:
g(ū + ∆u, v̄ + ∆v) ≈ g(ū, v̄) + ∆u
∂g
∂u
(ū, v̄) + ∆v
∂g
∂v
(ū, v̄). (7.12)
La aproximación de segundo orden para y(xi + h) es:
y(xi + h) = y(xi) + hy′
(xi) +
h2
2
y′′
(xi) + O(h3
) (7.13)
y(xi + h) ≈ y(xi) + hy′
(xi) +
h2
2
y′′
(xi). (7.14)
En la aproximación anterior, podemos tener en cuenta que y(xi) = yi, y
que y′(xi) = f(xi, yi). Además,
y′′
(xi) =
d
dx
y′
(xi)
=
d
dx
f(xi, yi)
=
∂f
∂x
f(xi, yi) +
∂f
∂y
f(xi, yi)
∂y
∂x
(xi)
=
∂f
∂x
f(xi, yi) + y′
(xi)
∂f
∂y
f(xi, yi).
260 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Para acortar la escritura, utilizaremos la siguiente notación:
f := f(xi, yi)
fx :=
∂f
∂x
f(xi, yi)
fy :=
∂f
∂y
f(xi, yi)
y := y(xi)
y′
:= y′
(xi) = f(xi, yi) = f
y′′
:= y′′
(xi).
Entonces,
y′′
= fx + ffy
y(xi + h) ≈ y + hf +
h2
2
fx +
h2
2
ffy. (7.15)
Por otro lado, el método RK2 se puede reescribir:
yi+1 = yi + R1hf(xi, yi) + R2hf(xi + αh, yi + βK1).
Utilizando (7.12):
yi+1 = yi + R1hf(xi, yi)
+ R2h

f(xi, yi) + αh
∂f
∂x
(xi, yi) + βK1
∂f
∂y
(xi, yi)

.
Utilizando la notación se obtiene:
yi+1 = y + R1hf + R2h (f + αhfx + βK1fy)
yi+1 = y + (R1 + R2)hf + R2h2
αfx + R2hβK1fy.
Como K1 = hf, entonces
yi+1 = y + (R1 + R2)hf + R2αh2
fx + R2βh2
ffy. (7.16)
Al hacer la igualdad y(xi + h) = yi+1, en las ecuaciones (7.15) y (7.16) se
comparan los coeficientes de hf, de h2fx y de h2ffy y se deduce:
R1 + R2 = 1,
R2α =
1
2
,
R2β =
1
2
.
Héctor M. Mora E. Métodos Numéricos con Scilab 261
Entonces,
β = α, (7.17)
R2 =
1
2α
· (7.18)
R1 = 1 − R2. (7.19)
Si α = 1, entonces β = 1, R2 = 1/2 y R1 = 1/2, es decir, el método de
Heun. Si α = 1/2, entonces β = 1/2, R2 = 1 y R1 = 0, es decir, el método
del punto medio. Para otros valores de α se tienen otros métodos de RK de
orden 2.
7.6. Control del paso
Hasta ahora, se ha supuesto que para hallar la solución numérica de una
ecuación diferencial, los puntos están igualmente espaciados, es decir, xi −
xi−1 = h para i = 1, 2, ..., n. Esta polı́tica no es, en general, adecuada.
Es preferible utilizar valores de h pequeños cuando es indispensable para
mantener errores relativamente pequeños, y utilizar valores grandes de h
cuando se pueda.
Hay varios métodos para el control de h. En uno de ellos, se supone conocido
yi, una muy buena aproximación de y(xi), y se aplica un método con un paso
h para obtener ỹ aproximación de y(xi + h). También se aplica el mismo
método dos veces con el paso h/2 para obtener ˜
ỹ, otra aproximación de
y(xi + h). Con estos dos valores se puede acotar el error y ası́ saber si es
necesario trabajar con un paso más pequeño.
En otro enfoque, el que veremos en esta sección, se aplican dos métodos
diferentes, con el mismo h y con estas dos aproximaciones se acota el error.
Ası́ se determina la buena o mala calidad de las aproximaciones.
Supongamos que tenemos dos métodos: el método A con error local O(hp)
y el método B con error local O(hp+1) (o con error local O(hq), q ≥ p +
1). Partimos de yi, muy buena aproximación de y(xi). Aplicando los dos
métodos calculamos yA y yB, aproximaciones de y(xi + h). El control de
paso tiene dos partes: en la primera se obtiene una aproximación del posible
error obtenido.
|error| ≈ e = Φ1(yA, yB, h, p).
Si e es menor o igual que un valor ε dado, entonces se acepta yB como buena
aproximación de y(x + h). En caso contrario, es necesario utilizar un valor
262 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
de h más pequeño. En ambos casos el valor de h se puede modificar, bien sea
por necesidad (e  ε), bien sea porque, siendo h aceptable, es conveniente
modificarlo para el siguiente paso. Para ello, se calcula un coeficiente C0 que
sirve para obtener C coeficiente de h
C0 = Φ2(yA, yB, h, p)
C = ϕ(C0, ...)
h′
= Ch.
Los diferentes algoritmos difieren en la manera de calcular e, C0 y C (las
funciones Φ1, Φ2 y ϕ). Más aún, para el mismo método A y el mismo método
B hay diferentes algoritmos.
Un método muy popular es el de Runge-Kutta-Fehlberg, RKF, construido
a partir de un método de RK de orden 5 (el método A) y de un método de
RK de orden 6 (el método B). Una de sus ventajas está dada por el siguiente
hecho: los valores K1, K2, K3, K4 y K5 son los mismos para los dos métodos.
Teniendo en cuenta la forma general (7.7) del método RK, basta con dar los
valores αi y βij. Recuérdese que siempre K1 = hf(xi, yi).
En la siguiente tabla están los valores αi y βij:
i αi βi1 βi2 ...
2
1
4
1
4
3
3
8
3
32
9
32
4
12
13
1932
2197
−
7200
2197
7296
2197
5 1
439
216
−8
3680
513
−
845
4104
6
1
2
−
8
27
2 −
3544
2565
1859
4104
−
11
40
(7.20)
Ası́, por ejemplo,
K4 = f(xi +
12
13
h, yi +
1932
2197
K1 −
7200
2197
K2 +
7296
2197
K3 )
Héctor M. Mora E. Métodos Numéricos con Scilab 263
Para el cálculo final de yi+1 por los dos métodos:
yA = yi +
25
216
K1 + 0K2 +
1408
2565
K3 +
2197
4104
K4 −
1
5
K5
yB = yi +
16
135
K1 + 0K2 +
6656
12825
K3 +
28561
56430
K4 −
9
50
K5 +
2
55
K6
(7.21)
Los errores locales son respectivamente O(h5) y O(h6). Realmente hay varias
fórmulas RK5 y RK6; las anteriores están en [BuF85] y [EnU96]. Hay otras
fórmulas diferentes en [ChC99].
La aproximación del error está dada por
|error| ≈ e =
|yA − yB|
h
. (7.22)
El coeficiente para la modificación del valor de h está dado por:
C0 = 0.84
ε
e
1/4
,
C = min{C0, 4},
C = max{C, 0.1}.
(7.23)
Las fórmulas anteriores buscan que C no sea muy grande ni muy pequeño.
Más especı́ficamente, C debe estar en el intervalo [0.1, 4].
En la descripción del algoritmo usaremos la siguiente notación de Matlab y
de Scilab. La orden
u = [u; t]
significa que al vector columna u se le agrega al final el valor t y el resultado
se llama de nuevo u.
264 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Método de Runge-Kutta-Fehlberg
datos: x0, y0, b, h0, ε, hmin
x = x0, y = y0, h = h0
X = [x0], Y = [y0]
mientras x  b
h = min{h, b − x}
hbien = 0
mientras hbien = 0
calcular yA, yB según (7.21)
e = |yA − yB|/h
si e ≤ ε
x = x + h, y = yB
hbien = 1
X = [X; x], Y = [Y ; y]
fin-si
C0 = 0.84(ε/e)1/4
C = max{C0, 0.1}, C = min{C, 4}
h = Ch
si h  hmin ent parar
fin-mientras
fin-mientras
La salida no deseada del algoritmo anterior se produce cuando h se vuelve
demasiado pequeño. Esto se produce en problemas muy difı́ciles cuando,
para mantener el posible error dentro de lo establecido, ha sido necesario
disminuir mucho el valor de h, por debajo del lı́mite deseado.
En una versión ligeramente más eficiente, inicialmente no se calcula yA ni
yB. Se calcula directamente
e =
1
360
K1 −
128
4275
K3 −
2197
75240
K4 +
1
50
K5 +
2
55
K6 .
Cuando el valor de h es adecuado, entonces se calcula yB para poder hacer
la asignación y = yB.
Ejemplo 7.5. Resolver, por el método RKF con control de paso, la ecuación
diferencial
y′
= 2x2
− 4x + y
y(1) = 0.7182818
Héctor M. Mora E. Métodos Numéricos con Scilab 265
en el intervalo [1, 3], con h0 = 0.5 y ε = 10−6.
K1 = −0.64085910
K2 = −0.70534149
K3 = −0.73493177
K4 = −0.77416434
K5 = −0.77705018
K6 = −0.74953282
yA = −0.01834063
yB = −0.01830704
e = 0.00006717
h = 0.5 no sirve.
C0 = 0.29341805
C = 0.29341805
h = 0.14670902
K1 = −0.18803962
K2 = −0.19454169
K3 = −0.19776497
K4 = −0.20973557
K5 = −0.21125979
K6 = −0.20069577
yA = 0.51793321
yB = 0.51793329
e = 0.00000057
266 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
h = 0.14670902 sirve.
x = 1.14670902
y = 0.51793329
C0 = 0.96535578
C = 0.96535578
h = 0.14162640
yA = 0.30712817
yB = 0.30712821
e = 0.00000029
h = 0.14162640 sirve.
x = 1.28833543
y = 0.30712821
.
.
.
x h ỹ(x) y(x)
1.0000000 0.1467090 0.7182818 0.7182818
1.1467090 0.1416264 0.5179333 0.5179333
1.2883354 0.1622270 0.3071282 0.3071282
1.4505624 0.1686867 0.0572501 0.0572501
1.6192491 0.1333497 -0.1946380 -0.1946380
1.7525988 0.1329359 -0.3736279 -0.3736279
1.8855347 0.1191306 -0.5206051 -0.5206051
2.0046653 0.1092950 -0.6137572 -0.6137571
2.1139603 0.1024064 -0.6566848 -0.6566847
2.2163666 0.0971218 -0.6506243 -0.6506241
2.3134884 0.0928111 -0.5948276 -0.5948275
2.4062996 0.0891591 -0.4877186 -0.4877184
2.4954587 0.0859853 -0.3273334 -0.3273332
2.5814440 0.0831757 -0.1114979 -0.1114977
2.6646196 0.0806534 0.1620898 0.1620900
2.7452730 0.0783639 0.4958158 0.4958160
2.8236369 0.0762674 0.8921268 0.8921270
2.8999043 0.0743333 1.3535162 1.3535164
2.9742376 0.0257624 1.8825153 1.8825156
3.0000000 2.0855366 2.0855369
Héctor M. Mora E. Métodos Numéricos con Scilab 267
1 2 3
−1
0
1
2
b
b
b
b
b
b
b
b b b
b
b
b
b
b
b
b
b
b
b
Figura 7.8. Ejemplo del método Runge-Kutta-Fehlberg
7.7. Orden del método y orden del error
Para algunos de los métodos hasta ahora vistos, todos son métodos de RK,
se ha hablado del orden del método, del orden del error local y del orden del
error global.
El orden del método se refiere al número de evaluaciones de la función f en
cada iteración. Ası́ por ejemplo, el método de Euler es un método de orden
1 y el método de Heun es un método de orden 2.
El orden del error local se refiere al exponente de h en el error teórico
cometido en cada iteración. Si la fórmula es
y(x + h) = y(x) + R1k1 + R2K2 + · · · + RnKn + O(hp
),
se dice que el error local es del orden de hp, o simplemente, el error local es
de orden p.
El orden del error global se refiere al exponente de h en el error obtenido al
aproximar y(b) después de hacer (b − x0)/h iteraciones.
Hemos visto seis métodos: Euler, Heun, punto medio, un RK4, un RK5 y
un RK6. La siguiente tabla presenta los órdenes de los errores.
268 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Método Fórmula Orden del Error
método local
Euler (7.2) 1 O(h2)
Heun (7.5) 2 O(h3)
Punto medio (7.6) 2 O(h3)
RK4 (7.11) 4 O(h5)
RK5 (7.21) 5 O(h5)
RK6 (7.21) 6 O(h6)
El orden del error global es generalmente igual al orden del error local menos
una unidad. Por ejemplo, el error global en el método de Euler es O(h).
A medida que aumenta el orden del método, aumenta el orden del error, es
decir, el error disminuye. Pero al pasar de RK4 a RK5 el orden del error no
mejora. Por eso es más interesante usar el RK4 que el RK5, ya que se hacen
solamente 4 evaluaciones y se tiene un error semejante. Con RK6 se obtiene
un error más pequeño, pero se requieren dos evaluaciones más.
7.7.1. Verificación numérica del orden del error
Cuando se conoce la solución exacta de una ecuación diferencial, en muchos
casos, se puede verificar el orden del error de un método especı́fico. Más aún,
se podrı́a obtener el orden del error si este no se conociera.
Sea O(hp) el error local del método. Se puede hacer la siguiente aproxi-
mación:
error = e ≈ chp
.
Al tomar logaritmo en la aproximación anterior se obtiene:
log(e) ≈ log(c) + p log(h) , (7.24)
Para diferentes valores de h se evalúa el error cometido y se obtienen ası́ var-
ios puntos de la forma (log(hi), log(ei) ). Estos puntos deben estar, aproxi-
madamente, sobre una recta. La pendiente de esta recta es precisamente p.
El valor de p se puede obtener gráficamente o por mı́nimos cuadrados.
Ejemplo 7.6. Obtener numéricamente el orden del error local del método
Héctor M. Mora E. Métodos Numéricos con Scilab 269
−2.5 −2.0 −1.5
−8
−7
−6
−5
b
b
b
b
b
b
Figura 7.9. Orden local
de Heun usando la ecuación diferencial
y′
= 2x2
− 4x + y
y(1) = 0.7182818,
con h = 0.1, 0.12, 0.14, 0.16, 0.18 y 0.2.
h x0 + h ỹ(x0 + h) y(x0 + h) e log(h) log(e)
0.10 1.10 0.584701 0.584166 0.000535 -2.302585 -7.532503
0.12 1.12 0.556975 0.556054 0.000921 -2.120264 -6.989970
0.14 1.14 0.529024 0.527568 0.001456 -1.966113 -6.532007
0.16 1.16 0.500897 0.498733 0.002164 -1.832581 -6.135958
0.18 1.18 0.472641 0.469574 0.003067 -1.714798 -5.787212
0.20 1.20 0.444304 0.440117 0.004187 -1.609438 -5.475793
En la siguiente gráfica, log(h) en las abscisas y log(e) en las ordenadas, los
puntos están aproximadamente en una recta.
Al calcular numéricamente los coeficientes de la recta de aproximación por
mı́nimos cuadrados, se obtiene:
log(e) ≈ 2.967325 log(h) − 0.698893
e ≈ 0.497135h2.97
.
Estos resultados numéricos concuerdan con el resultado teórico. ✸
7.8. Métodos multipaso explı́citos
Los métodos RK son considerados como métodos monopaso (unipaso) por
la siguiente razón. El valor yi+1 se calcula únicamente a partir del punto
270 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
(xi, yi). En los métodos multipaso se utilizan otros puntos anteriores, por
ejemplo, para calcular yi+1 se utilizan los puntos (xi−2, yi−2), (xi−1, yi−1) y
(xi, yi).
Veamos un caso particular. Supongamos que se conocen los valores y0 =
y(x0), y1 = y(x1) y y2 = y(x2). Para facilitat la deducción, supongamos que
x0 = 0, x1 = h y x2 = 2h.
Sea p2(x) el polinomio de grado menor o igual a 2 que interpola a f en los
valores 0, h y 2h, es decir, el polinomio pasa por los puntos (0, f0), (h, f1)
y (2h, f2), donde fi = f(xi, yi). Este polinomio se puede obtener utilizando
polinomios de Lagrange:
p2(x) = f0
(x − h)(x − 2h)
(0 − h)(0 − 2h)
+ f1
(x − 0)(x − 2h)
(h − 0)(h − 2h)
+ f2
(x − 0)(x − h)
(2h − 0)(2h − h)
.
Después de algunas factorizaciones se obtiene:
p2(x) =
1
2h2
(f0 − 2f1 + f2)x2
+ (−3f0 + 4f1 − f2)hx + 2h2
f0

.
Por otro lado, por el teorema fundamental del cálculo integral
Z x3
x2
y′
(x)dx = y(x3) − y(x2)
y(x3) = y(x2) +
Z x3
x2
y′
(x)dx
y(x3) = y(x2) +
Z 3h
2h
f(x, y)dx.
Si se reemplaza f(x, y) por el polinomio de interpolación, se tiene:
y(x3) ≈ y(x2) +
Z 3h
2h
p2(x)dx
y(x3) ≈ y(x2) +
Z 3h
2h
1
2h2

(f0 − 2f1 + f2)x2
+
(−3f0 + 4f1 − f2)hx + 2h2
f0

dx
y3 = y2 +
1
2h2

(f0 − 2f1 + f2)
19
3
h3
+
(−3f0 + 4f1 − f2)
5
2
h3
+ 2h3
f0

y3 = y2 +
h
12
(5f0 − 16f1 + 23f2) (7.25)
Héctor M. Mora E. Métodos Numéricos con Scilab 271
La anterior igualdad se conoce con el nombre de fórmula de Adams-Bash-
forth de orden 2, se utiliza un polinomio de orden 2. También recibe el
nombre de método multipaso explı́cito o método multipaso abierto de orden
2.
Si los valores y0, y1 y y2 son exactos, o sea, si y0 = y(x0), y1 = y(x1) y
y2 = y(x2), entonces los valores fi son exactos, o sea, f(xi, yi) = f(xi, y(xi))
y el error está dado por
y(x3) = y(x2) +
h
12
(5f0 − 16f1 + 23f2) +
3
8
y(3)
(z)h4
, z ∈ [x0, x3].
(7.26)
La fórmula (7.25) se escribe en el caso general
yi+1 = yi +
h
12
(5fi−2 − 16fi−1 + 23fi). (7.27)
Para empezar a aplicar esta fórmula se requiere conocer los valores fj ante-
riores. Entonces, es indispensable utilizar un método RK el número de veces
necesario. El método RK escogido debe ser de mejor calidad que el méto-
do de Adams-Bashforth que estamos utilizando. Para nuestro caso podemos
utilizar RK4.
Ejemplo 7.7. Resolver, por el método de Adams-Bashforth de orden 2, la
ecuación diferencial
y′
= 2x2
− 4x + y
y(1) = 0.7182818
en el intervalo [1, 3], con h = 0.25.
Al aplicar el método RK4 dos veces se obtiene:
y1 = 0.3653606
y2 = −0.0182773.
272 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
1 2 3
−1
0
1
2
b
b
b
b
b b
b
b
b
Figura 7.10. Ejemplo del método de Adams-Bashforth 2
Entonces,
f0 = f(x0, y0) = −1.2817182
f1 = f(x1, y1) = −1.5096394
f2 = −1.5182773
y3 = y2 + h(5f0 − 16f1 + 23f2)/12
= −0.3760843
f3 = f(x3, y3) = −1.2510843
y4 = −0.6267238
.
.
.
xi ỹ(xi) y(xi)
1.00 0.7182818 0.7182818
1.25 0.3653606 0.3653430
1.50 -0.0182773 -0.0183109
1.75 -0.3760843 -0.3703973
2.00 -0.6267238 -0.6109439
2.25 -0.6681548 -0.6372642
2.50 -0.3706632 -0.3175060
2.75 0.4320786 0.5176319
3.00 1.9534879 2.0855369
En este caso hubo que evaluar 8 veces la función para los dos valores de RK4
y en seguida 6 evaluaciones para un total de 14 evaluaciones de la función
f. ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 273
Multipaso explı́cito: Adams-Bashforth
n error
0 yi+1 = yi + hfi
1
2y′′(ξ)h2
1 yi+1 = yi +
h
2
(−fi−1 + 3fi) 5
12 y′′′(ξ)h3
2 yi+1 = yi +
h
12
(5fi−2 − 16fi−1 + 23fi) 3
8y(4)(ξ)h4
3 yi+1 = yi +
h
24
(−9fi−3 + 37fi−2 − 59fi−1 + 55fi) 251
720 y(5)(ξ)h5
4 yi+1 = yi +
h
720
(251fi−4 − 1274fi−3 + 2616fi−2
95
288 y(6)(ξ)h6
−2774fi−1 + 1901fi)
En la anterior tabla se muestran las principales fórmulas. Allı́ n indica el
grado del polinomio de interpolación usado. En algunos libros, n está aso-
ciado con número de puntos utilizados para la interpolación (igual al grado
del polinomio más uno). Obsérvese que la primera fórmula es simplemente
el método de Euler.
7.9. Métodos multipaso implı́citos
En estos métodos se utiliza un polinomio de interpolación, el mismo de los
métodos explı́citos, pero el intervalo de integración varı́a.
Veamos un caso particular. Supongamos que se conocen los valores y0 =
y(x0), y1 = y(x1) y y2 = y(x2). Por facilidad para la deducción, supongamos
que x0 = 0, x1 = h y x2 = 2h.
Sea p2(x) el polinomio de grado menor o igual a 2 que interpola a f en los
valores 0, h y 2h, es decir, el polinomio pasa por los puntos (0, f0), (h, f1) y
274 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
(2h, f2), donde fi = f(xi, yi). Como se vio en la sección anterior,
p2(x) =
1
2h2
(f0 − 2f1 + f2)x2
+ (−3f0 + 4f1 − f2)hx + 2h2
f0

.
El teorema fundamental del cálculo integral se usa de la siguiente manera:
Z x2
x1
y′
(x)dx = y(x2) − y(x1)
y(x2) = y(x1) +
Z x2
x1
y′
(x)dx
y(x2) = y(x1) +
Z 2h
h
f(x, y)dx.
Si se reemplaza f(x, y) por el polinomio de interpolación se tiene:
y(x2) ≈ y(x1) +
Z 2h
h
p2(x)dx
y(x2) ≈ y(x1) +
Z 2h
h
1
2h2

(f0 − 2f1 + f2)x2
+
(−3f0 + 4f1 − f2)hx + 2h2
f0

dx
y2 = y1 +
1
2h2

(f0 − 2f1 + f2)
7
3
h3
+
(−3f0 + 4f1 − f2)
3
2
h3
+ 2h3
f0

y2 = y1 +
h
12
(−f0 + 8f1 + 5f2). (7.28)
La anterior igualdad se conoce con el nombre de fórmula de Adams-Moulton
de orden 2, se utiliza un polinomio de orden 2. También recibe el nombre de
método multipaso implı́cito o método multipaso cerrado de orden 2.
Si los valores y0, y1 y y2 son exactos, o sea, si y0 = y(x0), y1 = y(x1) y
y2 = y(x2), entonces los valores fi son exactos, o sea, f(xi, yi) = f(xi, y(xi))
Héctor M. Mora E. Métodos Numéricos con Scilab 275
y el error está dado por:
y(x2) = y(x1) +
h
12
(−f0 + 8f1 + 5f2) −
1
24
y(3)
(z)h4
, z ∈ [x0, x2].
(7.29)
La fórmula (7.28) se escribe en el caso general
yi+1 = yi +
h
12
(−fi−1 + 8fi + 5fi+1). (7.30)
Para empezar a aplicar esta fórmula es indispensable conocer los valores fj
anteriores. Se requiere utilizar un método RK el número de veces necesario.
El método RK escogido debe ser de mejor calidad que el método de Adams-
Moulton que estamos utilizando. Para nuestro caso podemos utilizar RK4.
Una dificultad más grande, y especı́fica de los métodos implı́citos, está dada
por el siguiente hecho: para calcular yi+1 se utiliza fi+1, pero este valor es
justamente f(xi+1, yi+1). ¿Cómo salir de este cı́rculo vicioso? Inicialmente
se calcula y0
i+1, una primera aproximación, por el método de Euler. Con
este valor se puede calcular f0
i+1 = f(xi+1, y0
i+1) y en seguida y1
i+1. De nuevo
se calcula f1
i+1 = f(xi+1, y1
i+1) y en seguida y2
i+1. Este proceso iterativo
acaba cuando dos valores consecutivos, yk
i+1 y yk+1
i+1 , son muy parecidos.
Este método recibe también el nombre de método predictor-corrector. La
fórmula queda entonces ası́:
yk+1
i+1 = yi +
h
12
(−fi−1 + 8fi + 5fk
i+1). (7.31)
El criterio de parada puede ser:
|yk+1
i − yk
i |
max{1, |yk+1
i |}
≤ ε.
Ejemplo 7.8. Resolver, por el método de Adams-Moulton de orden 2, la
ecuación diferencial
y′
= 2x2
− 4x + y
y(1) = 0.7182818
en el intervalo [1, 3], con h = 0.25 y ε = 0.0001.
Al aplicar el método RK4 una vez, se obtiene:
y1 = 0.3653606
276 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Entonces,
f0 = f(x0, y0) = −1.2817182
f1 = f(x1, y1) = −1.5096394
Aplicando Euler se obtiene una primera aproximación de y2:
y0
2 = −0.0120493
f0
2 = −1.5120493
Empiezan las iteraciones:
y1
2 = −0.0170487
f1
2 = −1.5170487
y2
2 = −0.0175694
f2
2 = −1.5175694
y3
2 = −0.0176237 = y2
Para calcular y2, se utilizan los valores:
f1 = −1.5096394
f2 = −1.5176237.
Aplicando Euler se obtiene una primera aproximación de y3:
y0
3 = −0.3970296
f0
3 = −1.2720296
Empiezan las iteraciones:
y1
3 = −0.3716132
f1
3 = −1.2466132
y2
3 = −0.3689657
f2
3 = −1.2439657
y3
3 = −0.3686899
f3
3 = −1.2436899
y4
3 = −0.3686612 = y3
.
.
.
Héctor M. Mora E. Métodos Numéricos con Scilab 277
1 2 3
−1
0
1
2
b
b
b
b
b b
b
b
b
Figura 7.11. Ejemplo del método de Adams-Moulton 2
xi ỹ(xi) y(xi)
1.00 0.7182818 0.7182818
1.25 0.3653606 0.3653430
1.50 -0.0176237 -0.0183109
1.75 -0.3686612 -0.3703973
2.00 -0.6076225 -0.6109439
2.25 -0.6315876 -0.6372642
2.50 -0.3084043 -0.3175060
2.75 0.5316463 0.5176319
3.00 2.1065205 2.0855369
En este caso hubo que evaluar 4 veces la función para el valor de RK4 y
en seguida, en cada uno de los otros 7 intervalos, una evaluación fija más
las requeridas al iterar. En este ejemplo hubo, en promedio, 4 por intervalo,
para un total de 32 evaluaciones de f. El valor final y8 es más exacto que el
obtenido por Adams-Bashforth, pero a costa de más evaluaciones. ✸
Teóricamente, los dos métodos multipaso de orden 2 tienen un error local
del mismo orden, O(h4), pero el coeficiente en el método multipaso explı́cito,
3/8, es nueve veces el coeficiente en el error del método implı́cito, 1/24.
278 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Multipaso implı́cito: Adams-Moulton
n error
1 yi+1 = yi +
h
2
(fi + fi+1) − 1
12y′′(ξ)h3
2 yi+1 = yi +
h
12
(−fi−1 + 8fi + 5fi+1) − 1
24y(3)(ξ)h4
3 yi+1 = yi +
h
24
(fi−2 − 5fi−1 + 19fi + 9fi+1) − 19
720 y(4)(ξ)h5
4 yi+1 = yi +
h
720
(−19fi−3 + 106fi−2 − 264fi−1 − 27
1440 y(5)(ξ)h6
+646fi + 251fi+1)
La tabla anterior contiene las principales fórmulas. En ella, n indica el grado
del polinomio de interpolación usado. Obsérvese que el método de Heun
corresponde a una iteración (una sola) del método multipaso implı́cito de
orden 1.
7.10. Sistemas de ecuaciones diferenciales
Un sistema de m ecuaciones diferenciales de primer orden se puede escribir
de la siguiente forma:
dy1
dx
= f1(x, y1, y2, ..., ym)
dy2
dx
= f2(x, y1, y2, ..., ym)
.
.
.
dym
dx
= fm(x, y1, y2, ..., ym)
Héctor M. Mora E. Métodos Numéricos con Scilab 279
para x0 ≤ x ≤ b, con las condiciones iniciales
y1(x0) = y0
1
y2(x0) = y0
2
.
.
.
ym(x0) = y0
m.
Utilicemos la siguiente notación:
y = (y1, y2, ..., ym)
y0
= (y0
1, y0
2, ..., y0
m)
f(x, y) = f(x, y1, y2, ..., ym)
= ( f1(x, y1, ..., ym), f2(x, y1, ..., ym), ..., fm(x, y1, ..., ym) ).
De esta manera, el sistema se puede escribir ası́:
y′
= f(x, y), x0 ≤ x ≤ b
y(x0) = y0
.
La solución numérica del sistema de ecuaciones consiste en un conjunto de
vectores y0, y1, y2, ..., yn,
yi
= (yi
1, yi
2, ..., yi
m),
donde cada yi
j es una aproximación:
yi
j ≈ yj(xk).
Los métodos vistos anteriormente se pueden generalizar de manera inme-
diata. Si se trata de los método RK, entonces los Ki dejan de ser números
y pasan a ser vectores Ki. En el caso de y se utiliza un superı́ndice para
indicar el intervalo, ya que los subı́ndices se usan para las componentes del
vector. Por ejemplo, las fórmulas de RK4 se convierten en:
K1
= hf(xi, yi
)
K2
= hf(xi + h/2, yi
+ K1
/2)
K3
= hf(xi + h/2, yi
+ K2
/2)
K4
= hf(xi + h, yi
+ K3
)
yi+1
= yi
+ (K1
+ 2K2
+ 2K3
+ K4
)/6.
(7.32)
280 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Ejemplo 7.9. Resolver el siguiente sistema de ecuaciones por RK4:
y′
1 =
2y1
x
+ x3
y2, 1 ≤ x ≤ 2
y′
2 = −
3
x
y2
y1(1) = −1
y2(1) = 1
con h = 0.2.
La solución (exacta) de este sencillo sistema de ecuaciones es:
y1(x) = −x
y2(x) = x−3
.
Para la solución numérica:
K1
= (−0.2, −0.6)
K2
= (−0.2136600, −0.3818182)
K3
= (−0.1871036, −0.4413223)
K4
= (−0.2026222, −0.2793388)
y1
= (−1.2006916, 0.5790634)
K1
= (−0.2001062, −0.2895317)
K2
= (−0.2093988, −0.2004450)
K3
= (−0.1912561, −0.2210035)
K4
= (−0.2011961, −0.1534542)
y2
= (−1.4011269, 0.3647495)
.
.
.
xi ỹ1(xi) ỹ2(xi) y1(xi) y2(xi)
1.0 -1.0 1.0 -1.0 1.0
1.2 -1.2006916 0.5790634 -1.2 0.5787037
1.4 -1.4011269 0.3647495 -1.4 0.3644315
1.6 -1.6014497 0.2443822 -1.6 0.2441406
1.8 -1.8017156 0.1716477 -1.8 0.1714678
2.0 -2.0019491 0.1251354 -2.0 0.125
✸
Héctor M. Mora E. Métodos Numéricos con Scilab 281
7.10.1. En Scilab
Consideremos el siguiente sistema de ecuaciones diferenciales:
y′
1 =
2y1
x
+ x3
y2,
y′
2 = −
3
x
y2
y1(1) = −1
y2(1) = 1.
Después de definir y cargar
function fxy = func43(x, y)
fxy = zeros(2,1)
fxy(1) = 2*y(1)/x + x^3*y(2)
fxy(2) = -3*y(2)/x
endfunction
se utiliza la misma función ode pero con los parámetros de dimensión ade-
cuada.
x0 = 1
y0 = [-1 1]’
t = (1:0.2:2)’
yt = ode(y0, x0, t, func43)
En este caso, yt es un matriz de dos filas. En la fila i están las aproxima-
ciones de los valores de yi(tj).
Escribir una función en Scilab para un sistema de ecuaciones diferenciales
es casi igual a la función para una ecuación diferencial. A continuación una
versión del método RK4 para sistemas.
function [Y, X] = RK4Sist(f, x0, y0, xf, n)
// Metodo Runge-Kutta 4 para sistema de ecuaciones diferenciales
//
// y’ = f(x,y)
282 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
// y(x0) = y0
// en intervalo [x0, xf]
//
// x0 es un numero
// y0 es un vector columna, digamos p x 1.
// La funcion f tiene dos parametros,
// x un numero, y un vector columna,
// su resultado es un vector columna.
// n = numero de subintervalos.
//
// Y sera una matriz con p filas, n+1 columnas.
// X sera un vector fila de n+1 elementos.
// Cada columna de Y contendra las aproximaciones de
// y(x0) y(x0+h) y(x0+2h) ... y(xf)
// con h = (xf-x0)/n
// X contendra los valores x0 x0+h x0+2h ... xf
h = (xf-x0)/n
p = size(y0,1)
disp(p, ’p’)
X = zeros(1,n+1)
Y = zeros(p,n+1)
X(1) = x0
Y(:,1) = y0
xi = x0
yi = y0
for i=1:n
K1 = h*f(xi, yi)
K2 = h*f(xi+h/2, yi+K1/2);
K3 = h*f(xi+h/2, yi+K2/2);
K4 = h*f(xi+h, yi+K3);
xi = xi+h
yi = yi + (K1 + 2*K2 + 2*K3 + K4)/6
Y(:,i+1) = yi
X(i+1) = xi
end
endfunction
Héctor M. Mora E. Métodos Numéricos con Scilab 283
7.11. Ecuaciones diferenciales de orden
superior
Una ecuación diferencial ordinaria, de orden m, con condiciones iniciales, se
puede escribir de la siguiente manera:
y(m)
= f(x, y, y′
, y′′
, ..., y(m−1)
), x0 ≤ x ≤ b
y(x0) = y0
y′
(x0) = y′
0
y′′
(x0) = y′′
0
.
.
.
y(m−1)
(x0) = y
(m−1)
0 .
Esta ecuación diferencial se puede convertir en un sistema de ecuaciones
diferenciales de primer orden, mediante el siguiente cambio de variables:
u1 = y
u2 = y′
u3 = y′′
.
.
.
um = y(m−1)
284 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Entonces, la ecuación diferencial se convierte en el siguiente sistema:
u′
1 = u2
u′
2 = u3
u′
3 = u4
.
.
.
u′
m−1 = um
u′
m = f(x, u1, u2, ..., um)
u1(x0) = y0
u2(x0) = y′
0
u3(x0) = y′′
0
.
.
.
um(x0) = y
(m−1)
0 .
De forma más compacta,
u′
= F(x, u), x0 ≤ x ≤ b
u(x0) = κ0,
donde κ0 = [y0 y′
0 y′′
0 ... y
(m−1)
0 ]T
. Este sistema se puede resolver por los
métodos para sistemas de ecuaciones diferenciales de primer orden.
Ejemplo 7.10. Resolver la ecuación diferencial
y′′
=
4y − xy′
x2
, 1 ≤ x ≤ 2,
y(1) = 3
y′
(1) = 10,
por el método RK4, con h = 0.2.
Sean u1 = y, u2 = y′.
u′
1 = u2
u′
2 =
4u1 − xu2
x2
, 1 ≤ x ≤ 2,
u1(1) = 3
u2(1) = 10.
Héctor M. Mora E. Métodos Numéricos con Scilab 285
La solución exacta es y = 4x2 − x−2. Al aplicar el método RK4 se obtiene:
K1
= (2, 0.4)
K2
= (2.04, 0.7900826)
K3
= (2.0790083, 0.7678437)
K4
= (2.1535687, 1.0270306)
u1
= (5.0652642, 10.7571472)
.
.
.
xi ũ1(xi) ũ2(xi) y(xi)
1.0 3.0 10.0 3.0
1.2 5.0652642 10.757147 5.0655556
1.4 7.3293797 11.928367 7.3297959
1.6 9.8488422 13.287616 9.849375
1.8 12.65069 14.742141 12.651358
2.0 15.749173 16.249097 15.75
✸
7.12. Ecuaciones diferenciales con condiciones de
frontera
Una ecuación diferencial de segundo orden con condiciones de frontera se
puede escribir de la forma
y′′
= f(x, y, y′
), a ≤ x ≤ b,
y(a) = ya (7.33)
y(b) = yb.
Esta ecuación diferencial se puede convertir en un sistema de dos ecuaciones
diferenciales, pero para obtener su solución numérica se presenta un incon-
veniente: se deberı́a conocer el valor y′
a = y′(a). Esta dificultad se supera
mediante el método del disparo (shooting).
Como no se conoce y′
a, se le asigna un valor aproximado inicial. Puede ser
y′
a ≈
yb − ya
b − a
.
286 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Con este valor inicial se busca la solución numérica, hasta obtener
ỹ(b) = ỹ(b, y′
a).
Este valor deberı́a ser el valor conocido yb. Si no coinciden, es necesario
modificar la suposición de y′
a hasta obtener el resultado deseado. Si ỹ(b, y′
a) 
yb, entonces se debe aumentar la pendiente inicial del disparo. De manera
análoga, si ỹ(b, y′
a)  yb, se debe disminuir la pendiente inicial del disparo.
Lo anterior se puede presentar como la solución de una ecuación:
ϕ(y′
a) = yb − ỹ(b, y′
a) = 0.
Esta ecuación se puede resolver, entre otros métodos, por el de la secante o
el de bisección.
Para facilitar la presentación del método se considera el problema P(v),
donde:
v = aproximación de y′
a,
n = número de intervalos para la solución numérica,
ỹ = (ỹ0, ỹ1, ..., ỹn) = solución numérica del siguiente problema:
y′
= f(x, y), a ≤ x ≤ b
y(a) = ya P(v)
y′
(a) = v,
ϕ(v) = yb − ỹn = yb − ỹ(b, v). (7.34)
Se desea encontrar v∗ tal que ϕ(v∗) = 0. Entonces, la solución numérica de
P(v∗) es la solución numérica de (7.33). Si se aplica el método de la secante
para resolver la ecuación ϕ(v) = 0, el algoritmo es el siguiente:
Héctor M. Mora E. Métodos Numéricos con Scilab 287
Método del disparo
datos: f, a, b, ya, yb, ε, maxit, ε0
εr = max{1, |yb|} ε
v0 = (yb − ya)/(b − a)
ỹ = solución numérica de P(v0)
ϕ0 = yb − ỹn
si |ϕ0| ≤ εr ent parar
v1 = v0 + ϕ0/(b − a)
ỹ = solución numérica de P(v1)
ϕ1 = yb − ỹn
si |ϕ1| ≤ εr ent parar
para k = 1, ...,maxit
δ = ϕ1 − ϕ0
si |δ| ≤ ε0 ent parar
v2 = v1 − ϕ1(v1 − v0)/δ
ỹ = solución numérica de P(v2)
ϕ2 = yb − ỹn
si |ϕ2| ≤ εr ent parar
v0 = v1, v1 = v2, ϕ0 = ϕ1, ϕ1 = ϕ2
fin-para
OJO: no hubo convergencia.
Ejemplo 7.11. Resolver la ecuación diferencial
y′′
=
2 cos(2x) − y′ − 4x2y
x2
, 0.2 ≤ x ≤ 0.7
y(0.2) = 0.3894183
y(0.7) = 0.9854497,
con h = 0.1 y utilizando RK4 para la solución del sistema de ecuaciones
diferenciales asociado.
La primera aproximación de y′(a) es
v0 = (0.9854497 − 0.3894183)/(0.7 − 0.2) = 1.19206278
Al resolver numéricamente el problema P(1.19206278) se obtiene:
ỹ5 = 0.94935663.
El disparo resultó muy bajo.
ϕ0 = 0.03609310
v1 = 1.19206278 + 0.03609310/(0.7 − 0.5) = 1.26424897
288 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Al resolver numéricamente el problema P(1.26424897) se obtiene:
ỹ5 = 0.95337713
ϕ1 = 0.03207260
Primera iteración del método de la secante:
v2 = 1.84009748
Al resolver numéricamente el problema P(1.84009748) se obtiene:
ỹ5 = 0.98544973
Este disparo fue preciso (no siempre se obtiene la solución con una sola
iteración de la secante). El último vector ỹ es la solución. La solución exacta
es y = sen(2x).
xi ỹ(xi) y(xi)
0.2 0.3894183 0.3894183
0.3 0.5647741 0.5646425
0.4 0.7174439 0.7173561
0.5 0.8415217 0.8414710
0.6 0.9320614 0.9320391
0.7 0.9854497 0.9854497
✸
7.13. Ecuaciones diferenciales lineales con
condiciones de frontera
Una ecuación diferencial lineal de segundo orden con condiciones de frontera
se puede escribir de la forma
p(x)y′′
+ q(x)y′
+ r(x)y = s(x), a ≤ x ≤ b,
y(a) = ya (7.35)
y(b) = yb.
Obviamente para esta ecuación se puede utilizar el método del disparo, pero,
dada la linealidad, fácilmente se puede buscar una solución aproximada us-
ando diferencias finitas para y′ y y′′.
Héctor M. Mora E. Métodos Numéricos con Scilab 289
El intervalo [a, b] se divide en n ≥ 2 subintervalos de tamaño h = (b − a)/n.
Los puntos xi están igualmente espaciados (xi = a + ih). Se utilizan las
siguientes aproximaciones y la siguiente notación:
y′′
i ≈
yi−1 − 2yi + yi+1
h2
y′
i ≈
−yi−1 + yi+1
2h
pi := p(xi)
qi := q(xi)
ri := r(xi)
si := s(xi).
Entonces,:
pi
yi−1 − 2yi + yi+1
h2
+ qi
−yi−1 + yi+1
2h
+ riyi = si, i = 1, ..., n − 1.
Es decir, se tiene un sistema de n − 1 ecuaciones con n − 1 incógnitas, y1,
y2, ..., yn−1.
2pi
yi−1 − 2yi + yi+1
2h2
+ hqi
−yi−1 + yi+1
2h2
+
2h2riyi
2h2
=
2h2si
2h2
(2pi − hqi)yi−1 + (−4pi + 2h2
ri)yi + (2pi + hqi)yi+1 = 2h2
si
Este sistema es tridiagonal.








d1 u1
l1 d2 u2
l2 d3 u3
ln−3 dn−2 un−2
ln−2 dn−1
















y1
y2
y3
yn−2
yn−1








=








β1
β2
β3
βn−2
βn−1








, (7.36)
donde
di = −4pi + 2h2
ri, i = 1, ..., n − 1,
ui = 2pi + hqi, i = 1, ..., n − 2,
li = 2pi+1 − hqi+1, i = 1, ..., n − 2,
β1 = 2h2
s1 − (2p1 − hq1)ya,
βi = 2h2
si, i = 2, ..., n − 2,
βn−1 = 2h2
sn−1 − (2pn−1 + hqn−1)yb.
290 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
Ejemplo 7.12. Resolver por diferencias finitas la ecuación diferencial
x2
y′′
+ y′
+ 4x2
y = 2 cos(2x), 0.2 ≤ x ≤ 0.7
y(0.2) = 0.3894183
y(0.7) = 0.9854497,
con n = 5, es decir, h = 0.1.
Al calcular los coeficientes del sistema tridiagonal se obtiene:
d1 = −4p1 + 2h2
r1
d1 = −4(0.3)2
+ 2(0.1)2
4(0.3)2
= −0.3528
u1 = 2p1 + hq1
u1 = 2(0.3)2
+ 0.1(1) = 0.28
l1 = 2p2 − hq2
l1 = 2(0.4)2
− 0.1(1) = 0.22
d = (−0.3528, −0.6272, −0.98, −1.4112),
u = (0.28, 0.42, 0.6),
l = (0.22, 0.4, 0.62),
β = (0.00186, 0.0278683, 0.0216121, −0.7935745).
Su solución es
(y1, y2, y3, y4) = (0.5628333, 0.7158127, 0.8404825, 0.9315998).
xi ỹ(xi) y(xi)
0.2 0.3894183 0.3894183
0.3 0.5628333 0.5646425
0.4 0.7158127 0.7173561
0.5 0.8404825 0.8414710
0.6 0.9315998 0.9320391
0.7 0.9854497 0.9854497
✸
Ejercicios
Escoja varias ecuaciones diferenciales (o sistemas de ecuaciones dife-
renciales) de las que conozca la solución exacta. Fije el intervalo de tra-
bajo. Determine qué métodos puede utilizar. Aplique varios de ellos.
Héctor M. Mora E. Métodos Numéricos con Scilab 291
Compare los resultados. Cambie el tamaño del paso. Compare de nue-
vo.
Un procedimiento adecuado para obtener las ecuaciones diferenciales
consiste en partir de la solución (una función cualquiera) y construir
la ecuación diferencial.
La aplicación de los métodos se puede hacer de varias maneras: a
mano con ayuda de una calculadora; en parte a mano y en parte con
ayuda de software para matemáticas como Scilab o Matlab; haciendo
un programa, no necesariamente muy sofisticado, para cada método.
A continuación se presentan algunos ejemplos sencillos.
7.1
y′
= ex
−
y
x
y(1) = 0.
Su solución es y = ex −
ex
x
·
7.2
y′
1 = 2y1 + y2 + 3
y′
2 = 4y1 − y2 + 9
y1(0) = −3
y2(0) = 5.
Su solución es y1(t) = −e−2t − 2, y2(t) = 4e−2t + 1.
7.3
y′′
=
2
x(2 − x)
y′
y(1) = −2
y′
(1) = 1.
Su solución es y = −2 ln(2 − x) − x − 1. Tenga especial cuidado con el
intervalo de trabajo.
292 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS
7.4
y′′′
+ y′′
+ y′
+ y = 4ex
y(0) = 1
y′
(0) = 2
y′′
(0) = 1
y′′′
(0) = 0.
Su solución es y = ex + sen(x).
7.5
y′′
y = e2x
− sen2
(x)
y(0) = 1
y(π) = eπ
.
Su solución es y = ex + sen(x).
7.6
y′′
+ e−x
y′
+ y = 2ex
+ 1 + e−x
cos(x)
y(0) = 1
y(π) = eπ
.
Su solución es y = ex + sen(x).
Capı́tulo 8
Ecuaciones diferenciales
parciales
8.1. Generalidades
Sea u = u(x, y) una función de dos variables con derivadas parciales de orden
dos. Una ecuación diferencial se llama cuasi-lineal si es de la forma
Auxx + Buxy + Cuyy = ϕ(x, y, u, ux, uy),
donde A, B y C son constantes. Hay tres tipos de ecuaciones cuasilineales:
elı́ptica : si B2
− 4AC  0,
parabólica : si B2
− 4AC = 0,
hiperbólica : si B2
− 4AC  0.
Un ejemplo tı́pico de una ecuación elı́ptica es la ecuación de Poisson
∇2
u = uxx + uyy = f(x, y).
Un caso particular es la ecuación de Laplace
uxx + uyy = 0.
Un ejemplo tı́pico de una ecuación parabólica es la ecuación unidimensional
del calor
ut = c2
uxx.
293
294 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
Un ejemplo tı́pico de una ecuación hiperbólica es la ecuación de onda
utt = c2
uxx.
Este libro presenta únicamente el método de diferencias finitas para EDP,
pues las derivadas parciales se aproximan por diferencia finitas. Hay otros
métodos muy importantes y posiblemente más usados para EDP que no son
tratados aquı́, ya que su complejidad queda fuera del alcance de este libro.
Algunos de ellos son: el método de elementos finitos, el de volúmenes finitos,
el de elementos de contorno y los métodos espectrales.
8.2. Elı́pticas: ecuación de Poisson
Consideraremos un caso particular cuando el dominio es un rectángulo,
Ω = {(x, y) : a  x  b, c  y  d},
∂Ω = frontera de Ω.
La ecuación de Poisson con condiciones de frontera de Dirichlet es la siguien-
te:
△u(x, y) = f(x, y) en Ω,
u(x, y) = g(x, y) en ∂Ω.
(8.1)
Hay condiciones de frontera que utilizan derivadas con respecto al vector
normal en la frontera. Estas reciben el nombre de condiciones de Neumann.
Resolver numéricamente la ecuación diferencial consiste en obtener aproxi-
maciones de u(xi, yj), donde los puntos (xi, yj) están en Ω. De manera más
precisa, sean
nx ∈ Z, nx ≥ 1,
ny ∈ Z, ny ≥ 1,
hx =
b − a
nx + 1
,
hy =
d − c
ny + 1
,
xi = a + ihx, i = 1, ..., nx,
yj = c + jhy, j = 1, ..., ny,
uij ≈ u(xi, yj), i = 1, ...nx, j = 1, ..., ny.
Héctor M. Mora E. Métodos Numéricos con Scilab 295
hx
a x1 x2 xi xnx b
c
y1
yj
yny
d
hy
b
b
b b
b
uij ui+1,j
ui−1,j
ui,j+1
ui,j−1
Figura 8.1. División del rectángulo
Usando la aproximación
ϕ′′
(t) ≈
ϕ(t + h) − 2ϕ(t) + ϕ(t − h)
h2
se obtiene
△u(xi, yj) ≈
ui+1,j − 2uij + ui−1,j
h2
x
+
ui,j+1 − 2uij + ui,j−1
h2
y
. (8.2)
Sea η = hx/hy.
△u(xi, yj) ≈
ui+1,j − 2uij + ui−1,j
h2
x
+ η2 ui,j+1 − 2uij + ui,j−1
h2
x
△u(xi, yj) ≈
ui+1,j + ui−1,j + η2ui,j+1 + η2ui,j−1 − (2 + 2η2)uij
h2
x
. (8.3)
En el caso particular cuando h = hx = hy
△u(xi, yj) ≈
ui+1,j + ui−1,j + ui,j+1ui,j−1 − 4uij
h2
. (8.4)
Al aplicar la aproximación (8.3) en (8.1), y cambiando el signo de aproxi-
mación por el signo de igualdad, se obtiene
−ui+1,j − ui−1,j − η2
ui,j+1 − η2
ui,j−1 + (2 + 2η2
)uij = −h2
xfij, (8.5)
296 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
donde fij = f(xi, yj) son valores conocidos. Al considerar los nxny puntos
de la malla se obtiene un sistema de nxny ecuaciones con nxny incógnitas.
Para simplificar la notación, sean
n = nx
m = ny
N = nm
h = hx
η =
h
hy
ρ = η2
σ = 2 + 2η2
αj = g(a, yj)
βj = g(b, yj)
γi = g(xi, c)
δi = g(xi, d)
Entonces
−ui+1,j − ui−1,j − ρui,j+1 − ρui,j−1 + σuij = −h2
fij (8.6)
Utilizaremos el siguiente orden para los puntos: primero, los puntos de la
primera fila (la fila horizontal inferior), en seguida los puntos de la segunda
fila, ..., y, finalmente, los puntos de la fila superior. En cada fila el orden es
el usual, de izquierda a derecha.
En este orden se plantean la ecuaciones: la ecuación en (x1, y1), en (x2, y1),
Héctor M. Mora E. Métodos Numéricos con Scilab 297
..., en (xn, y1), en (x1, y2), ... Para las variables utilizaremos el mismo orden
ξ1 = u11
ξ2 = u21
.
.
.
ξn = un1
ξn+1 = u12
ξn+2 = u22
.
.
.
ξ2n = un2
.
.
.
ξN = unm
Con el anterior orden para las variables la igualdad (8.6) se reescribe ası́:
−ρui,j−1 − ui−1,j + σuij − ui+1,j − ρui,j+1 = −h2
fij
El sistema de N ecuaciones con N incógnitas se escribe simplemente:
Aξ = v. (8.7)
En alguno de los siguientes cuatro casos: i = 1, i = n, j = 1 y j = m,
alguno(s) de los valores ukl corresponde al valor de u en la frontera. En este
caso se utilizan las condiciones de frontera, es decir, los valores de g en el
punto de frontera especı́fico. Como son valores conocidos, entonces pasan al
lado derecho de la igualdad. A continuación están algunas de las igualdades.
Al plantear la ecuación en el punto (x1, y1) se obtiene:
−ρu10 − u01 + σu11 − u21 − ρu12 = −h2
f11.
Es necesario cambiar u10 por el valor conocido γ1 y cambiar u01 por el valor
conocido α1. Utilizando la notación ξk se obtiene:
σξ1 − ξ2 − ρξn+1 = −h2
f11 + ργ1 + α1.
En el punto (x2, y1) se obtiene:
−ρu20 − u11 + σu21 − u31 − ρu22 = h2
− f21
−ξ1 + σξ2 − ξ3 − ρξn+2 = −h2
f21 + ργ2.
298 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
En el punto (x3, y1) se obtiene:
−ρu30 − u21 + σu31 − u41 − ρu32 = −h2
f31
−ξ2 + σξ3 − ξ4 − ρξn+3 = −h2
f31 + ργ3.
En el punto (xn, y1) se obtiene:
−ρun0 − un−1,1 + σun1 − un+1,1 − ρun2 = −h2
fn1
−ξn−1 + σξn − ρξ2n = −h2
fn1 + ργn + β1.
En el punto (x1, y2) se obtiene:
−ρu11 − u02 + σu12 − u22 − ρu13 = −h2
f12
−ρξ1 + σξn+1 − ξn+2 − ρξ2n+1 = −h2
f12 + α2.
En el punto (x3, y2) se obtiene:
−ρu31 − u22 + σu32 − u42 − ρu33 = −h2
f32
−ρξ3 − ξn+2 + σξn+3 − ξn+4 − ρξ2n+3 = −h2
f32.
Si n = nx = 3 y m = ny = 4, la matriz A tiene la siguiente forma:
A =





















σ −1 0 −ρ 0 0 0 0 0 0 0 0
−1 σ −1 0 −ρ 0 0 0 0 0 0 0
0 −1 σ 0 0 −ρ 0 0 0 0 0 0
−ρ 0 0 σ −1 0 −ρ 0 0 0 0 0
0 −ρ 0 −1 σ −1 0 −ρ 0 0 0 0
0 0 −ρ 0 −1 σ 0 0 −ρ 0 0 0
0 0 0 −ρ 0 0 σ −1 0 −ρ 0 0
0 0 0 0 −ρ 0 −1 σ −1 0 −ρ 0
0 0 0 0 0 −ρ 0 −1 σ 0 0 −ρ
0 0 0 0 0 0 −ρ 0 0 σ −1 0
0 0 0 0 0 0 0 −ρ 0 −1 σ −1
0 0 0 0 0 0 0 0 −ρ 0 −1 σ





















Se puede observar que A es una matriz simétrica, tridiagonal por bloques,
de tamaño m × m bloques, donde cada bloque es de tamaño n × n.
A =








D −ρIn 0
−ρIn D −ρIn
0 −ρIn D
D −ρIn
−ρIn D








.
Héctor M. Mora E. Métodos Numéricos con Scilab 299
D es una matriz simétrica tridiagonal de tamaño n × n.
D =








σ −1 0
−1 σ −1
0 −1 σ
σ −1
−1 σ








.
A es de diagonal positiva dominante. En la mayorı́a de las filas
n
X
j=1
j6=i
|aij| = 2 + 2ρ = aii.
En algunas filas
n
X
j=1
j6=i
|aij|  aii.
Para resolver Aξ = v se puede utilizar el método de Gauss si m y n son
pequeños. Si N es muy grande, no se puede almacenar completamente A
como matriz densa y, además, el tiempo de cálculo se vuelve muy grande.
Hay varios métodos que pueden ser más eficientes para N grande, algunos
son especı́ficos para la ecuación de Poisson en un rectángulo. Por ejemplo, se
puede utilizar el método de Gauss-Seidel o el de sobrerrelajación. Estos dos
métodos se pueden implementar sin almacenar los elementos no nulos de A.
Conociendo m, n, σ y ρ se tiene toda la información sobre A. También se
pueden utilizar métodos basados en la FFT, Fast Fourier Transform. Otros
métodos son: el de reducción cı́clica, el método FACR, Fourier Analysis
Cyclic Reduction, y el método de doble barrido de Cholesky.
Ejemplo 8.1. Resolver la ecuación diferencial
△u = 6x + 12y, 1  x  13, 2  y  7
u(a, y) = 1 + 2y3
u(b, y) = 2197 + 2y3
u(x, c) = 16 + x3
u(x, d) = 686 + x3
con nx = 3 y ny = 4.
300 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
Entonces hx = 3, hy = 1, ρ = 9, σ = 20,
v = [235 2529 10531 −519 −810 1353 −505 −918 1367 6319 8235 16615]T
.
Al resolver el sistema 12 × 12 se obtiene:
u = [118 397 1054 192 471 1128 314 593 1250 496 775 1432]T
.
La ecuación diferencial es muy sencilla, su solución es u(x, y) = x3 + 2y3.
En este caso, la solución numérica obtenida es exacta. ✸
8.3. Parabólicas: ecuación del calor
La ecuación unidimensional del calor es:
∂u
∂t
(x, t) = c2 ∂2u
∂x2
(x, t), 0  x  L, 0  t , (8.8)
con las condiciones
u(0, t) = v(t), t ≥ 0 (8.9)
u(L, t) = w(t), t ≥ 0 (8.10)
u(x, 0) = f(x), 0 ≤ x ≤ L. (8.11)
La función u(x, t) indica la temperatura de una barra uniforme, en la posi-
ción x y en el tiempo t. Generalmente las funciones v(t) y w(t) son con-
stantes, es decir, se supone que la temperatura en los extremos de la barra
es constante para todo tiempo t.
De manera análoga a las ecuaciones elı́pticas, se sitúa en la región
Ω =]0, L[×]0, +∞[
una malla determinada por los valores
xi = i hx, i = 0, 1, 2, ..., m
tj = j ht, j = 0, 1, 2, ...
donde
hx =
L
m
·
Héctor M. Mora E. Métodos Numéricos con Scilab 301
0 x1 x2 xm−1 L
0
t1
t2
t3
b b b b
b b b b
b b b b
b b b b
u11 u21 um−1,1
u12
u13
Figura 8.2. Malla para la ecuación del calor
El objetivo es encontrar valores uij, aproximaciones de los valores u(xi, tj).
Como se conoce la función u en la frontera de Ω, entonces se conocen los
valores:
u00, u10, ..., um0, t = 0,
u01, u02, ..., u0j, ... x = 0,
um1, um2, ..., umj, ... x = L.
Los valores buscados son:
u11, u21, ..., um−1,1, t = t1
u12, u22, ..., um−1,2, t = t2
u13, u23, ..., um−1,3, t = t3
.
.
.
Cada uno de los paquetes anteriores tiene m − 1 valores correspondientes a
un tiempo fijo tj.
Aunque el problema está plantedao para 0  t  +∞, obviamente no se
302 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
puede ir hasta el infinito. Entonces se toma un valor T adecuado y
0 ≤ t ≤ T (8.12)
ht =
T
n
(8.13)
tj = j ht, j = 0, 1, 2, ..., n. (8.14)
8.3.1. Método explı́cito
La segunda derivada ∂2u/∂x2 se aproxima como en el caso elı́ptico, la deriva-
da ∂u/∂t se aproxima hacia adelante:
∂2u
∂x2
(xi, tj) ≈
ui+1,j − 2uij + ui−1,j
h2
x
(8.15)
∂u
∂t
(xi, tj) ≈
ui,j+1 − uij
ht
(8.16)
Remplazando en (8.8) se obtiene:
ui,j+1 − uij
ht
= c2 ui+1,j − 2uij + ui−1,j
h2
x
ui,j+1 =
c2ht
h2
x
ui−1,j +

1 −
2c2ht
h2
x

uij +
c2ht
h2
x
ui+1,j
ui,j+1 = α ui−1,j + β uij + α ui+1,j (8.17)
α =
c2ht
h2
x
(8.18)
β = 1 − 2α. (8.19)
En la fórmula (8.15) el error es del orden de O(h2
x), en (8.16) el error es del
orden de O(ht). El error en (8.17) es del orden de (ht + h2
x).
Los valores usados en (8.17) forman la “molécula”:
b b b
bc
ui,j+1
ui−1,j uij ui+1,j
Héctor M. Mora E. Métodos Numéricos con Scilab 303
El valor ui,j+1 aproximación de u(xi, tj+1), representado por una cı́rculo
hueco ◦ , se calcula utilizando los valores para tj, representados por cı́rculos
rellenos • .
Para calcular los valores u11, u21, ..., um−1,1 se necesitan valores uk0, pero
estos son conocidos por corresponder a la condición (8.11). Entonces los
valores u11, u21, ..., um−1,1, se calculan sin ningún problema.
Para calcular los valores u12, u22, ..., um−1,2 se necesitan los valores u01, u11,
u21, ..., um−1,1, um1. El primero y el último están dados por las condiciones
(8.9) y (8.10); los otros se acaban de calcular. Después, de manera semejante,
se calculan los valores ui3 y ası́ sucesivamente.
Ejemplo 8.2. Aplicar las fórmulas anteriores a la ecuación diferencial
∂u
∂t
(x, t) =
2
9
∂2u
∂x2
(x, t), 0  x 
π
3
, 0  t ≤ 2
con las condiciones
u(0, t) = 5, t ≥ 0
u(
π
3
, t) = 5, t ≥ 0
u(x, 0) = sen(3x) + 5, 0 ≤ x ≤
π
3
.
con m = 10 y n = 50.
La solución exacta de la ecuación diferencial es
u(x, t) = e−2t
sen(3x) + 5 .
Al aplicar las fórmulas se obtiene:
hx = π/30 = 0.1047198
ht = 0.04
α = 0.8105695
β = −0.6211389
Para empezar, los valores u00, u10, u20, ..., u10,0 son: 5, 5.309017, 5.5877853,
5.809017, 5.9510565, 6, 5.9510565, 5.809017, 5.5877853, 5.309017, 5.
304 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
Para t = t1 = 0.04 son datos: u01 = 5, u10,0 = 5.
u11 = αu00 + βu10 + αu20
u11 = 5.2844983
u21 = αu10 + βu20 + αu30
u21 = 5.5411479
u91 = αu80 + βu90 + αu10,0
u91 = 5.2844983
Para t = t2 = 0.08
u12 = αu01 + βu11 + αu21
u12 = 5.261925
En la tabla siguiente aparecen los valores exactos u(xi, 2) y los valores
obtenidos ui,50.
xi u(xi, 2) ui,50
0.000000 5.000000 5.000000
0.104720 5.005660 9.269937
0.209440 5.010766 -3.103062
0.314159 5.014818 16.178842
0.418879 5.017419 -8.111031
0.523599 5.018316 18.817809
0.628319 5.017419 -8.111031
0.733038 5.014818 16.178842
0.837758 5.010766 -3.103062
0.942478 5.005660 9.269937
1.047198 5.000000 5.000000
Se observa que los resultados obtenidos por las fórmulas no son buenos.
Como aparece en la siguiente tabla, si se utiliza n = 100 los resultados son
buenos.
Héctor M. Mora E. Métodos Numéricos con Scilab 305
xi u(xi, 2) ui,100 error
0.000000 5.000000 5.000000 0.000000
0.104720 5.005660 5.005394 0.000266
0.209440 5.010766 5.010261 0.000505
0.314159 5.014818 5.014123 0.000695
0.418879 5.017419 5.016602 0.000817
0.523599 5.018316 5.017456 0.000859
0.628319 5.017419 5.016602 0.000817
0.733038 5.014818 5.014123 0.000695
0.837758 5.010766 5.010261 0.000505
0.942478 5.005660 5.005394 0.000266
1.047198 5.000000 5.000000 0.000000
El ejemplo anterior muestra resultados malos con n = 50 y bastante buenos
con n = 100. Esto tiene una razón: el método con las fórmulas (8.17) es a
veces estable, a veces inestable, dado que los errores de redondeo o trun-
camiento se pueden propagar exponencialmente. Puede decirse entonces que
este método es condicionalmente estable (ver [BuF85]). Si
c2 ht
h2
x
≤
1
2
· (8.20)
el método es estable.
Fácilmente se comprueba que, en el ejemplo anterior,
c2 ht
h2
x
= 0.8105695 si n = 50
c2 ht
h2
x
= 0.4052847 si n = 100
8.3.2. Método implı́cito
La derivada ∂u/∂t se aproxima hacia atrás:
∂u
∂t
(xi, tj) ≈
ui,j − ui,j−1
ht
(8.21)
∂2u
∂x2
(xi, tj) ≈
ui+1,j − 2uij + ui−1,j
h2
x
(8.22)
306 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
Remplazando en (8.8) se obtiene
ui,j − ui,j−1
ht
= c2 ui+1,j − 2uij + ui−1,j
h2
x
Si queremos calcular los valores ukj, para t = tj, y conocemos los valores
para t = tj−1, entonces agrupamos ası́:
−
c2ht
h2
x
ui−1,j +

1 +
c2ht
h2
x

uij −
c2ht
h2
x
ui+1,j = ui,j−1 .
De manera más compacta:
−α ui−1,j + γuij − αui+1,j = ui,j−1 (8.23)
α =
c2ht
h2
x
(8.24)
γ = 1 + 2α. (8.25)
La fórmula (8.23), al igual que en el método explı́cito, tiene un error de
orden O(ht + h2
x).
Los valores usados en (8.23) forman la “molécula”:
b
bc
bc bc
ui,j
ui−1,j
ui,j−1
ui+1,j
Al utilizar (8.23) para los m − 1 puntos (x1, tj), (x2, tj), ..., (xm−1, tj), se
obtiene el siguiente sistema de ecuaciones:








γ −α 0 0 ... 0
−α γ −α 0 ... 0
0 −α γ −α ... 0
0 0 −α γ
















u1j
u2j
u3j
um−1,j








=








u1,j−1 + αu0j
u2,j−1
u3,j−1
um−1,j−1 + αumj








(8.26)
Este sistema tridiagonal se puede resolver por cualquier método, pero es más
eficiente resolverlo por un método especı́fico para sistemas tridiagonales, ver
Héctor M. Mora E. Métodos Numéricos con Scilab 307
sección (2.13). Además, como la matriz del sistema es la misma para todas
las iteraciones, entonces la factorización LU tridiagonal es la misma para
todas las iteraciones y se calcula únicamente una vez. Ası́, en cada iteración
se resuelve el sistema conociendo ya la factorización LU.
Los valores u0j y umj están dados por los valores v(tj) y w(tj) provenientes
de las condiciones de frontera.
Ejemplo 8.3. Aplicar este método a la misma ecuación diferencial
∂u
∂t
(x, t) =
2
9
∂2u
∂x2
(x, t), 0  x 
π
3
, 0  t ≤ 2
con las condiciones
u(0, t) = 5, t ≥ 0
u(
π
3
, t) = 5, t ≥ 0
u(x, 0) = sen(3x) + 5, 0 ≤ x ≤
π
3
.
con m = 10 y n = 50.
Al aplicar las fórmulas se obtiene:
hx = π/30 = 0.1047198
ht = 0.04
α = 0.8105695
γ = 2.6211389
Para empezar, los valores u00, u10, u20, ..., u10,0 son: 5, 5.309017, 5.5877853,
5.809017, 5.9510565, 6, 5.9510565, 5.809017, 5.5877853, 5.309017, 5.
Los valores α y γ definen la matriz del sistema (8.26) para todas las ite-
raciones. Para t = t1 = 0.04, los términos independientes son: 9.3618643,
5.5877853, 5.809017, 5.9510565, 6, 5.9510565, 5.809017, 5.5877853, 9.3618643 .
La solución del sistema es: 5.2863007, 5.5445763, 5.749545, 5.8811429, 5.9264885,
5.8811429 5.749545, 5.5445763, 5.2863007 . Estos valores corresponden a u11,
u21, ..., u91.
La siguiente tabla muestra los valores teóricos, los valores obtenidos por el
método y las diferencias , para t = 2:
308 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
xi u(xi, 2) ui,50 error
0.000000 5.000000 5.000000 0.000000
0.104720 5.005660 5.006792 -0.001132
0.209440 5.010766 5.012919 -0.002153
0.314159 5.014818 5.017781 -0.002963
0.418879 5.017419 5.020903 -0.003484
0.523599 5.018316 5.021979 -0.003663
0.628319 5.017419 5.020903 -0.003484
0.733038 5.014818 5.017781 -0.002963
0.837758 5.010766 5.012919 -0.002153
0.942478 5.005660 5.006792 -0.001132
1.047198 5.000000 5.000000 0.000000
Si se considera n = 100, los valores para t = 2 son:
xi u(xi, 2) ui,100 error
0.000000 5.000000 5.000000 0.000000
0.104720 5.005660 5.006315 -0.000655
0.209440 5.010766 5.012011 -0.001245
0.314159 5.014818 5.016532 -0.001714
0.418879 5.017419 5.019434 -0.002015
0.523599 5.018316 5.020434 -0.002119
0.628319 5.017419 5.019434 -0.002015
0.733038 5.014818 5.016532 -0.001714
0.837758 5.010766 5.012011 -0.001245
0.942478 5.005660 5.006315 -0.000655
1.047198 5.000000 5.000000 0.000000
✸
8.3.3. Método de Crank-Nicolson
De acuerdo con las fórmulas (6.34) y (6.35) el valor
δ =
uij − ui,j−1
ht
Héctor M. Mora E. Métodos Numéricos con Scilab 309
se puede considerar como la aproximación de
∂u
∂t
(xi, tj) o bien como la
aproximación de
∂u
∂t
(xi, tj−1). Es decir,
∂u
∂t
(xi, tj−1) =
uij − ui,j−1
ht
−
ht
2
∂2u
∂t2
(xi, ξ), ξ ∈ [tj−1, tj],
∂u
∂t
(xi, tj) =
uij − ui,j−1
ht
+
ht
2
∂2u
∂t2
(xi, ζ), ζ ∈ [tj−1, tj].
En ambos casos el error es del orden de O(ht). El mismo valor δ puede ser
interpretado de una tercera manera usando (6.38):
∂u
∂t
(xi, tj−1 + ht/2) =
uij − ui,j−1
ht
−
h2
t
24
∂3u
∂t3
(xi, τ), τ ∈ [tj−1, tj],
El valor tj−1 + ht/2, que será denotado por tj−1/2, es el punto medio entre
tj−1 y tj. Al plantear la ecuación diferencial en el punto (xi, tj−1/2) tenemos:
∂u
∂t
(xi, tj−1/2) = c2 ∂2u
∂x2
(xi, tj−1/2)
Ahora reemplazaremos
∂u
∂t
por δ y
∂2u
∂x2
(xi, tj−1/2) por el promedio de apro-
ximaciones de
∂2u
∂x2
en dos puntos vecinos:
uij − ui,j−1
ht
=
c2
2

∂2u
∂x2
(xi, tj−1) +
∂2u
∂x2
(xi, tj)

uij − ui,j−1
ht
=
c2
2

ui−1,j−1 − 2ui,j−1 + ui+1,j−1
h2
x
+
ui−1,j − 2uij + ui+1,j
h2
x

Esta fórmula tiene un error de orden O(h2
t +h2
x). Ahora agruparemos dejan-
do, a izquierda, los valores buscados, t = tj, y, a derecha, los que se suponen
conocidos, t = tj−1:
−ρ ui−1,j + µ uij − ρ ui+1,j = ρ ui−1,j−1 + ϕ ui,j−1 + ρ ui+1,j−1 (8.27)
α =
c2ht
h2
x
(8.28)
ρ =
α
2
(8.29)
µ = 1 + α (8.30)
ϕ = 1 − α (8.31)
310 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
La “molécula” correspondiente a (8.27) es:
b
b b
bc
bc bc
ui,j
ui−1,j
ui,j−1
ui−1,j−1 ui+1,j−1
ui+1,j
Al utilizar (8.27) para i = 1, 2, ..., m − 1 se obtiene el sistema tridiagonal,
que se puede resolver de manera eficiente:








µ −ρ 0 0 ... 0
−ρ µ −ρ 0 ... 0
0 −ρ µ −ρ ... 0
0 0 −ρ µ
















u1j
u2j
u3j
um−1,j








=








ρu0,j−1 + ϕu1,j−1 + ρu2,j−1 + ρu0j
ρu1,j−1 + ϕu2,j−1 + ρu3,j−1
ρu2,j−1 + ϕu3,j−1 + ρu4,j−1
ρum−2,j−1 + ϕum−1,j−1 + ρum,j−1 + ρumj








(8.32)
Ejemplo 8.4. Resolver la misma ecuación diferencial de los dos ejemplos
anteriores por el método de Crank-Nicolson, con m = 10, T = 2, n = 50.
hx = 0.1047198
ht = 0.04
α = 0.8105695
ρ = 0.405284
µ = 1.8105695
ϕ = 0.1894305
Para empezar, los valores u00, u10, u20, ..., u10,0 son: 5, 5.309017, 5.5877853,
5.809017, 5.9510565, 6, 5.9510565, 5.809017, 5.5877853, 5.309017, 5.
Los valores µ y ρ definen la matriz del sistema (8.32) para todas las ite-
raciones. Para t = t1 = 0.04, los términos independientes son: 7.3231813,
Héctor M. Mora E. Métodos Numéricos con Scilab 311
5.5644666, 5.7769216, 5.9133261, 5.9603279, 5.9133261, 5.7769216, 5.5644666,
7.3231813.
La solución del sistema es : 5.2854339, 5.5429275, 5.7472756, 5.8784752,
5.9236835, 5.8784752, 5.7472756, 5.5429275, 5.2854339.
Estos valores corresponden a u11, u21, ..., u91.
La siguiente tabla muestra, los valores teóricos, los valores obtenidos por el
método y las diferencias, para t = 2,:
xi u(xi, 2) ui,50 error
0.000000 5.000000 5.000000 0.000000
0.104720 5.005660 5.005836 -0.000176
0.209440 5.010766 5.011101 -0.000336
0.314159 5.014818 5.015280 -0.000462
0.418879 5.017419 5.017962 -0.000543
0.523599 5.018316 5.018887 -0.000571
0.628319 5.017419 5.017962 -0.000543
0.733038 5.014818 5.015280 -0.000462
0.837758 5.010766 5.011101 -0.000336
0.942478 5.005660 5.005836 -0.000176
1.047198 5.000000 5.000000 0.000000
Si se considera n = 100, los valores para t = 2 son:
xi u(xi, 2) ui,100 error
0.000000 5.000000 5.000000 0.000000
0.104720 5.005660 5.005845 -0.000186
0.209440 5.010766 5.011119 -0.000353
0.314159 5.014818 5.015304 -0.000486
0.418879 5.017419 5.017990 -0.000571
0.523599 5.018316 5.018916 -0.000601
0.628319 5.017419 5.017990 -0.000571
0.733038 5.014818 5.015304 -0.000486
0.837758 5.010766 5.011119 -0.000353
0.942478 5.005660 5.005845 -0.000186
1.047198 5.000000 5.000000 0.000000
✸
312 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
Los resultados obtenidos por el método de Crank-Nicolson con n = 50 son
mejores que los obtenidos con el método implı́cito. Los resultados obtenidos
con el método de Crank-Nicolson con n = 100 (h2
t = 0.0004, h2
x = 0.0109662,
h2
t + h2
x = 0.0113662), no mejoran, sino que empeoran ligeramente los
obtenidos con n = 50 (h2
t = 0.0016, h2
x = 0.0109662, h2
t + h2
x = 0.0125662).
En este caso el orden del error depende fundamentalmente de hx. Si se uti-
liza el método de Crank-Nicolson con m = 20 y n = 50 (h2
t = 0.0016,
h2
x = 0.0027416, h2
t + h2
x = 0.0043416) los resultados mejoran notablemente:
xi u(xi, 2) ui,50 error
0.000000 5.000000 5.000000 0.000000
0.052360 5.002865 5.002883 -0.000018
0.104720 5.005660 5.005694 -0.000035
0.157080 5.008315 5.008366 -0.000051
0.209440 5.010766 5.010831 -0.000066
0.261799 5.012951 5.013030 -0.000079
0.314159 5.014818 5.014908 -0.000091
0.366519 5.016319 5.016419 -0.000100
0.418879 5.017419 5.017526 -0.000107
0.471239 5.018090 5.018201 -0.000111
0.523599 5.018316 5.018428 -0.000112
0.575959 5.018090 5.018201 -0.000111
0.628319 5.017419 5.017526 -0.000107
0.680678 5.016319 5.016419 -0.000100
0.733038 5.014818 5.014908 -0.000091
0.785398 5.012951 5.013030 -0.000079
0.837758 5.010766 5.010831 -0.000066
0.890118 5.008315 5.008366 -0.000051
0.942478 5.005660 5.005694 -0.000035
0.994838 5.002865 5.002883 -0.000018
1.047198 5.000000 5.000000 0.000000
✸
8.4. Hiperbólicas: ecuación de onda
Consideramos la siguiente ecuación
Héctor M. Mora E. Métodos Numéricos con Scilab 313
∂2u
∂t2
(x, t) = c2 ∂2u
∂x2
(x, t), 0  x  L, 0  t , (8.33)
con las condiciones
u(0, t) = a, t ≥ 0, (8.34)
u(L, t) = b, t ≥ 0, (8.35)
u(x, 0) = f(x), 0 ≤ x ≤ L, (8.36)
∂u
∂t
(x, 0) = g(x), 0 ≤ x ≤ L. (8.37)
Esta ecuación describe el movimiento en el tiempo de una cuerda vibrante,
de longitud L, fija en los extremos y de la que se conoce la posición inicial
y la velocidad inicial. Generalmente, los valores constantes a y b son iguales
y nulos.
8.4.1. Método explı́cito
La región es la misma de la ecuación del calor y se divide exactamente de
la misma forma. Sea T un tiempo adecuado:
hx =
L
m
ht =
T
n
xi = i hx, i = 0, 1, 2, ..., m
tj = j ht, j = 0, 1, 2, ..., n.
Se desea conocer los valores uij, buenas aproximaciones de u(xi, tj). Se uti-
liza la ecuación diferencial en el punto (xi, tj):
∂2u
∂t2
(xi, tj) = c2 ∂2u
∂x2
(xi, tj) (8.38)
Aproximando las segundas derivadas por diferencias finitas en el punto
(xi, tj) se obtiene:
ui,j−1 − 2uij + ui,j+1
h2
t
= c2 ui−1,j − 2uij + ui+1,j
h2
x
.
314 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
Si se suponen conocidos los valores para t = tj y para t = tj−1, entonces se
puede obtener ui,j+1:
ui,j+1 = βuij + α(ui−1,j + ui+1,j) − ui,j−1 (8.39)
α =
c2 h2
t
h2
x
(8.40)
β = 2 − 2α (8.41)
La molécula es:
b
b
b b
bc
uij
ui−1,j ui+1,j
ui,j−1
ui,j+1
La fórmula (8.39), con error de orden O(h2
x+h2
t ), se puede aplicar fácilmente,
salvo en la obtención de los valores ui1, ya que serı́a necesario conocer los
valores ui,−1. Aproximaciones de estos valores se obtienen utilizando las
condiciones (8.37) sobre la velocidad inicial, mediante la siguiente aproxi-
mación cuyo error es del orden de O(h2
t ),
gi = g(xi) ≈
ui1 − ui,−1
2ht
,
ui,−1 = ui1 − 2ht gi , (8.42)
Reemplazando en (8.39) para j = 0 y teniendo en cuenta que uk0 = fk =
f(xk),
ui1 = βfi + α(fi−1 + fi+1) − (ui1 − 2htgi)
2ui1 = βfi + α(fi−1 + fi+1) + 2htgi
ui1 =
β
2
fi +
α
2
(fi−1 + fi+1) + htgi, i = 1, 2, ..., m − 1 (8.43)
Una vez calculados los valores ui1 por medio de (8.43), se utiliza (8.39) para
j = 1, 2, ..., n − 1, teniendo en cuenta que u0j = a y umj = b.
Ejemplo 8.5. Resolver la ecuación diferencial
Héctor M. Mora E. Métodos Numéricos con Scilab 315
∂2u
∂t2
(x, t) = 2.25
∂2u
∂x2
(x, t), 0  x  π/2, 0  t ,
con las condiciones
u(0, t) = 0, t ≥ 0,
u(π/2, t) = 0, t ≥ 0,
u(x, 0) = sen(2x), 0 ≤ x ≤ π/2,
∂u
∂t
(x, 0) = 3 sen(2x), 0 ≤ x ≤ π/2,
utilizando T = 8, m = 10, n = 80.
Se puede comprobar que la solución exacta de esta ecuación diferencial es
u(x, t) = sen(2x)( sen(3t) + cos(3t) )
Para la solución numérica
hx = 0.1571
ht = 0.1
α = 0.911891
β = 0.176219
Los valores iniciales ui0 son: 0, 0.3090170, 0.5877853, 0.8090170, 0.9510565,
1, 0.9510565, 0.8090170, 0.5877853, 0.3090170, 0.
Para calcular los valores ui1 se utiliza (8.43) y se obtiene: 0, 0.3879303,
0.7378873, 1.0156148, 1.1939268, 1.2553689, 1.1939268, 1.0156148, 0.7378873,
0.3879303, 0.
Los demás valores uik se calculan usando (8.39). Ası́ los valores ui2 son: 0,
0.4322161, 0.8221239, 1.1315565, 1.3302245, 1.3986808, 1.3302245, 1.1315565,
0.8221239, 0.4322161, 0.
A continuación aparecen: los valores xi , los valores u(xi, 8) exactos y los
valores aproximados obtenidos por el método:
316 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
xi u(xi, 8) ui,80
0.0000 0.0000 0.0000
0.1571 -0.1488 -0.1567
0.3142 -0.2830 -0.2981
0.4712 -0.3895 -0.4103
0.6283 -0.4578 -0.4823
0.7854 -0.4814 -0.5072
0.9425 -0.4578 -0.4823
1.0996 -0.3895 -0.4103
1.2566 -0.2830 -0.2981
1.4137 -0.1488 -0.1567
1.5708 0.0000 0.0000
Este método presenta problemas de inestabilidad. Se puede garantizar la
estabilidad, mas no la exactitud, si
c
ht
hx
≤ 1. (8.44)
En el ejemplo anterior cht/hx = 0.955. Si se hubiera aplicado el método con
n = 70, cht/hx = 1.091, los resultados serı́an:
xi u(xi, 8) ui,70
0.0000 0.0000 0.0000
0.1571 -0.1488 6409754.0604
0.3142 -0.2830 -12192077.0562
0.4712 -0.3895 16780953.1666
0.6283 -0.4578 -19727193.7389
0.7854 -0.4814 20742397.1952
0.9425 -0.4578 -19727192.0929
1.0996 -0.3895 16780950.5034
1.2566 -0.2830 -12192074.3931
1.4137 -0.1488 6409752.4144
1.5708 0.0000 0.0000
✸
Héctor M. Mora E. Métodos Numéricos con Scilab 317
8.4.2. Método implı́cito
Consideremos la ecuación diferencial en el punto (xi, tj),
∂2u
∂t2
(xi, tj) = c2 ∂2u
∂x2
(xi, tj) ,
pero cambiando la doble derivada parcial con respecto a x, en el punto
(xi, tj), por el promedio de la derivada en los puntos vecinos (xi, tj−1) y
(xi, tj+1) :
∂2u
∂t2
(xi, tj) =
c2
2

∂2u
∂x2
(xi, tj−1) +
∂2u
∂x2
(xi, tj+1)

Ahora utilizamos aproximación por diferencias finitas:
ui,j−1 − 2uij + ui,j+1
h2
t
=
c2
2
ui−1,j−1 − 2ui,j−1 + ui+1,j−1
h2
x
+
ui−1,j+1 − 2ui,j+1 + ui+1,j+1
h2
x

Ahora dejamos a la izquierda los valores desconocidos y a la derecha los que
son conocidos:
2ui,j−1 − 4uij + 2ui,j+1 = α(ui−1,j−1 − 2ui,j−1 + ui+1,j−1
+ ui−1,j+1 − 2ui,j+1 + ui+1,j+1)
−αui−1,j+1 + γui,j+1 − αui+1,j+1 = 4uij − γui,j−1 + α(ui−1,j−1 + ui+1,j−1)
(8.45)
α =
c2h2
t
h2
x
(8.46)
γ = 2 + 2α (8.47)
Aplicando la igualdad (8.45) en los puntos (x1, tj), (x2, tj), ..., (xm−1, tj), se
obtiene el siguiente sistema tridiagonal, de tamaño (m − 1) × (m − 1):
318 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES








γ −α
−α γ −α
0 −α γ −α
0 0 0 −α γ















u1,j+1
u2,j+1
.
.
.
um−2,j+1
um−1,j+1







=







4u1j − γu1,j−1 + α(a + u2,j−1)
4u2j − γu2,j−1 + α(u1,j−1 + u3,j−1)
.
.
.
4um−2,j − γum−2,j−1 + α(um−3,j−1 + um−1,j−1)
4um−1,j − γum−1,j−1 + α(um−2,j−1 + b)







(8.48)
Este sistema tridiagonal se puede resolver eficientemente. Para empezar,
también es necesario calcular los valores ui1 por medio de (8.43). Después
es necesario resolver n − 1 veces el sistema (8.48). Este método implı́cito no
es inestable.
Ejemplo 8.6. Resolver la ecuación diferencial
∂2u
∂t2
(x, t) = 2.25
∂2u
∂x2
(x, t), 0  x  π/2, 0  t ,
con las condiciones
u(0, t) = 0, t ≥ 0,
u(π/2, t) = 0, t ≥ 0,
u(x, 0) = sen(2x), 0 ≤ x ≤ π/2,
∂u
∂t
(x, 0) = 3 sen(2x), 0 ≤ x ≤ π/2,
utilizando el método implı́cito con T = 2, m = 10, n = 100.
La solución exacta de esta ecuación diferencial es
u(x, t) = sen(2x)( sen(3t) + cos(3t) )
Héctor M. Mora E. Métodos Numéricos con Scilab 319
Para la solución numérica
hx = 0.1571
ht = 0.02
α = 0.036476
β = 1.927049
γ = 2.072951
Los valores inciales ui0 son: 0, 0.3090170, 0.5877853, 0.8090170, 0.9510565,
1, 0.9510565, 0.8090170, 0.5877853, 0.3090170, 0.
Para calcular los valores ui1 se utiliza (8.43) y se obtiene: 0, 0.3270063,
0.6220030, 0.8561137, 1.006422, 1.0582148, 1.006422, 0.8561137, 0.6220030,
0.3270063, 0.
A continuación aparecen: los valores xi , los valores u(xi, 2) exactos y los
valores aproximados obtenidos por el método:
xi u(xi, 2) ui,100
0.0000 0.0000 0.0000
0.1571 0.2104 0.1986
0.3142 0.4001 0.3778
0.4712 0.5507 0.5200
0.6283 0.6474 0.6113
0.7854 0.6808 0.6428
0.9425 0.6474 0.6113
1.0996 0.5507 0.5200
1.2566 0.4001 0.3778
1.4137 0.2104 0.1986
1.5708 0.0000 0.0000
Ejercicios
8.1 Considere la ecuación diferencial
∂2u
∂x2
(x, y)+
∂2u
∂y2
(x, y) = −2 sen(x) sen(y),
en el rectángulo [0, π] × [0, π] con la condición u(x, y) = 0 en la fron-
tera. La solución exacta es u(x, y) = sen(x) sen(y). Obtenga la solución
320 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES
aproximada para diferentes valores de nx y ny. Compare con la solu-
ción exacta.
8.2 Considere la ecuación diferencial
∂2u
∂x2
(x, y)+
∂2u
∂y2
(x, y) = −2 sen(x) sen(y),
en un rectángulo diferente del anterior. Suponga que la solución exacta
es u(x, y) = sen(x) sen(y) y dé las condiciones de frontera adecuadas
en el rectángulo utilizado. Obtenga la solución aproximada para difer-
entes valores de nx y ny. Compare con la solución exacta.
8.3 Considere la ecuación diferencial
∂u
∂t
(x, t) =
∂2u
∂x2
(x, t), para 0  x  π
y 0  t con las condiciones u(0, t) = u(π, t) = 2, u(x, 0) = sen(x).
La solución exacta es u(x, t) = sen(x)e−t + 2. Obtenga la solución
aproximada por el método explı́cito, por el implı́cito y por el de Crank-
Nicolson para t = 2. Use diferentes valores de m y de n. Compare con
la solución exacta.
8.4 Considere la ecuación diferencial
∂2u
∂t2
(x, t) =
∂2u
∂x2
(x, t), para 0  x  1
y 0  t con las condiciones u(0, t) = u(1, t) = 0, u(x, 0) = sen(πx),
∂u
∂t
(x, 0) = 0. La solución exacta es u(x, t) = sen(πx) cos(πt). Obtenga
la solución aproximada por el método explı́cito y por el implı́cito para
t = 3 con m = 10, n = 60 y con n = 20. Utilice otros valores de m y
n. Compare con la solución exacta.
Capı́tulo 9
Valores propios
9.1. Preliminares
Sea A ∈ Rn×n una matriz cuadrada real. Un número λ, real o complejo, es
un valor propio de A si existe un vector columna real o complejo no nulo
v ∈ Cn×1 tal que
Av = λv.
En ese caso, se dice que v es un vector propio asociado al valor propio λ.
Fácilmente se comprueba que si α 6= 0, entonces también αv es un vector
propio asociado a λ. Generalmente se usan más los vectores propios normal-
izados, es decir, ||v||2 = 1.
Mientras no se diga lo contrario, en este documento únicamente se consideran
matrices reales y los métodos serán para matrices reales.
Ejemplo 9.1. Sea
A =


8 2 1
1 7 3
1 1 6

 .
Como 

8 2 1
1 7 3
1 1 6




9
7
4

 =


90
70
40

 ,
entonces 10 es un valor propio de A y [9 7 4]T
es un vector propio de A
asociado a 10. El vector columna [0.7448453 0.5793241 0.3310424]T
es un
vector propio normalizado asociado a 10. ✸
321
322 CAPÍTULO 9. VALORES PROPIOS
Con frecuencia se utiliza otra caracterización de los valores propios.
Av = λv
Av − λv = 0
Av − λIv = 0
(A − λI)v = 0
Como v 6= 0 es solución de un sistema homogéneo, entonces A no puede ser
invertible, es decir
det(A − λI) = 0. (9.1)
Como A es real, se puede demostrar que p(λ) = det(A−λI) es un polinomio
real de grado n:
p(λ) = pA(λ) = α0 + α1λ + α2λ2
+ · · · + αnλn
. (9.2)
Este polinomio se llama el polinomio caracterı́stico de A (algunas veces se
considera que el polinomio caracterı́stico es det(λI − A)). Entonces, para
matrices pequeñas, se pueden calcular los valores propios, obteniendo las
raı́ces del polinomio caracterı́stico de A.
Ejemplo 9.2.
A =

1 −2
3 4

det(A − λI) = det

1 − λ −2
3 4 − λ

= (1 − λ)(4 − λ) + 8
= λ2
− 5λ + 10
λ1 = 2.5 + i
√
15/2
λ2 = 2.5 − i
√
15/2 . ✸
Denotaremos con espec(A) el conjunto de valores propios de A y λ o λi
será un valor propio cualquiera. Para el complejo z = a + ib, el módulo,
norma o tamaño será
|z| =
p
a2 + b2,
que coincide con el valor absoluto para números reales.
Héctor M. Mora E. Métodos Numéricos con Scilab 323
A continuación algunas definiciones y resultados sobre valores propios. Es-
tos resultados se no presetan necesariamente en el orden conceptual ni en
orden para una posible demostración. Además un resultado puede ser coro-
lario de otro o puede corresponder al mismo concepto dicho de otra forma.
Hay también algunos resultados para matrices complejas, simplemente para
que sean coherente con los resultados de unos libros de Álgebra Lineal que
presentan resultados de manera general para matrices complejas.
a. Dos matrices A y B son semejantes si existe una matriz C tal que
A = C−1
BC.
b. A es ortogonal si A−1 = AT
.
c. Si A ∈ Cn×n, se denota con A∗ o AH la matriz transjugada de A, es decir,
A∗
= (Ā)T
= AT
.
d. Si A ∈ Cn×n, se dice que A es hermitiana (o hermı́tica) si A = A∗.
e. Si A ∈ Cn×n, se dice que A es unitaria si A−1 = A∗.
f. Una matriz A es diagonalizable si es semejante una matriz diagonal, es
decir, existe B invertible y D diagonal tales que
D = B−1
AB.
Resultados:
1. Los coeficientes del polinomio caracterı́stico satisfacen:
αn = (−1)n
αn−1 = (−1)n−1
traza(A)
α0 = det(A).
2.
n
X
i=1
λi = traza(A)
3.
n
Y
i=1
λi = det(A)
324 CAPÍTULO 9. VALORES PROPIOS
4. Hay n valores propios, reales o complejos, y pueden estar repetidos.
5. Si n es impar, hay por lo menos un valor propio real.
6. El número de valores propios estrictamente complejos (no reales) es
par.
7. Sean λ1, λ2, ..., λk valores propios distintos de A y v1, v2, ..., vk
vectores propios asociados correspondientes, entonces estos vectores
propios son linealmente independientes.
8. Teorema de Cayley-Hamilton. Si p es el polinomio caracterı́stico de A,
entonces p(A) = 0, es decir,
α0I + α1A + α2A2
+ · · · + αnAn
= 0.
9. Si A y B son semejantes, A = C−1BC, entonces espec(A) = espec(B).
10. Teorema de Schur. Toda matriz A es semejante a una matriz triangu-
lar superior, cuyos elementos diagonales son los valores propios de A.
Dicho de otra forma, existe U invertible y T triangular superior tales
que T = U−1AU. Esta matriz U es unitaria.
11. Si U es ortogonal, ||Ux||2 = ||x||2. Ası́, se dice que las matrices ortog-
onales conservan la norma euclidiana.
12. Si A es simétrica, todos los valores propios son reales.
13. Si A es diagonal, triangular superior o triangular inferior, entonces los
valores propios son los elementos diagonales.
14. Teorema espectral. Si A es simétrica, entonces existen vectores propios
v1, v2, ..., vn ortonormales. Si Q =

v1 v2 ... vn

, entonces Q es
ortogonal y QT
AQ es una matriz diagonal (con los valores propios de
A en la diagonal).
15. Sea A simétrica. La matriz es definida positiva si y solamente si los
valores propios son positivos.
16. Sea A simétrica. La matriz es semidefinida positiva si y solamente si
los valores propios son no negativos.
17. Si A no es invertible, λ = 0 es un valor propio.
18. Si A es invertible, λ ∈ espec(A) sssi 1/λ ∈ espec(A−1).
Héctor M. Mora E. Métodos Numéricos con Scilab 325
19. λ ∈ espec(A) sssi λ − t ∈ espec(A − tI).
20. Para cualquier norma matricial generada || ||,
|λ| ≤ ||A||.
21. Si A es ortogonal, |λ| = 1, para cualquier valor propio real o complejo.
9.1.1. En Scilab
Los valores propios se calculan por medio de la función spec 1. Si se ha
definido una matriz cuadrada a , entonces la orden
spec(a)
da como resultado un vector columna con los n valores propios. La orden
[V, L] = spec(a)
produce una matriz L diagonal, cuyos elementos diagonales son los valores
propios y una matriz V, cuyas columnas son vectores propios normalizados
asociados correspondientes.
9.2. Método de la potencia
Este método se puede aplicar para hallar λ1, el valor propio dominante de
una matriz diagonalizable A, cuando este existe, o sea, si
|λ1|  |λ2| ≥ |λ3| ≥ · · · ≥ |λn|.
Una primera versión del método de la potencia es muy sencilla. Dado un x0
inicial
xk+1
= Axk
, k = 0, 1, 2, ... (9.3)
Sea {v1, v2, ..., vn} una base formada por vectores propios asociados a los
valores propios λ1, λ2, ..., λn, respectivamente. Entonces, x0 6= 0 se puede
1
En Matlab se usa eig.
326 CAPÍTULO 9. VALORES PROPIOS
expresar como combinación de los vectores propios
x0
= α1v1
+ α2v2
+ ... + αnvn
x1
= Ax0
x1
= A(α1v1
+ α2v2
+ ... + αnvn
)
x1
= α1Av1
+ α2Av2
+ ... + αnAvn
x1
= α1λ1v1
+ α2λ2v2
+ ... + αnλnvn
x2
= Ax1
= A(α1λ1v1
+ α2λ2v2
+ ... + αnλnvn
)
x2
= α1λ1Av1
+ α2λ2Av2
+ ... + αnλnAvn
x2
= α1λ2
1v1
+ α2λ2
2v2
+ ... + αnλ2
nvn
.
.
.
xk
= α1λk
1v1
+ α2λk
2v2
+ ... + αnλk
nvn
xk
= α1λk
1 v1
+
n
X
i=2
αi
α1

λi
λ1
k
vi
!
Esta última factorización está bien definida si α1 6= 0, o sea, si x0 no es
ortogonal a v1. Como |λi/λ1|  1, entonces para valores grandes de k
xk
≈ α1λk
1v1
.
De manera análoga,
xk+1
≈ α1λk+1
1 v1
.
Entonces,
xk+1
≈ λ1xk
.
Al tomar xk
j , una componente no nula de xk,
xk+1
j
xk
j
≈ λ1.
Héctor M. Mora E. Métodos Numéricos con Scilab 327
Ejemplo 9.3. Partiendo de x0 = (1, 1, 1), hallar el valor propio dominante
de
A =


−1 −2 −3
−4 −5 −6
−7 −8 −8

 .
k xk
1 xk
2 xk
3 xk
1/xk−1
1
1 -6.000000 -15.000000 -23.000000 -6.00000000
2 105.000000 237.000000 346.000000 -17.50000000
3 -1617.000000 -3681.000000 -5399.000000 -15.40000000
4 25176.000000 57267.000000 83959.000000 -15.56957328
5 -3.915870e+05 -8.907930e+05 -1.306040e+06 -15.55397998
6 6.091293e+06 1.385655e+07 2.031577e+07 -15.55540148
7 -9.475172e+07 -2.155426e+08 -3.160177e+08 -15.55527176
8 1.473890e+09 3.352826e+09 4.915744e+09 -15.55528360
9 -2.292677e+10 -5.215415e+10 -7.646579e+10 -15.55528252
10 3.566324e+11 8.112726e+11 1.189447e+12 -15.55528262
11 -5.547518e+12 -1.261957e+13 -1.850218e+13 -15.55528261
12 8.629321e+13 1.963010e+14 2.878067e+14 -15.55528261
✸
El mecanismo anterior puede conducir hasta una buena aproximación de
λ1, pero tiene un inconveniente: ||xk|| → ∞. La solución es normalizar. Sea
z0 = x0.
zk
= Axk−1
, k = 1, 2, 3, ... (9.4)
xk
=
zk
||zk||2
. (9.5)
Ejemplo 9.4. Usar las fórmulas anteriores, partiendo de x0 = (1, 1, 1), para
hallar el valor propio dominante de
A =


−1 −2 −3
−4 −5 −6
−7 −8 −8

 .
328 CAPÍTULO 9. VALORES PROPIOS
k xk
1 xk
2 xk
3 zk
1 /xk−1
1
1 -0.213470 -0.533676 -0.818303 -6.00000000
2 0.242870 0.548191 0.800313 -17.50000000
3 -0.240212 -0.546829 -0.802045 -15.40000000
4 0.240454 0.546954 0.801887 -15.56957328
5 -0.240432 -0.546942 -0.801902 -15.55397998
6 0.240434 0.546943 0.801900 -15.55540148
7 -0.240434 -0.546943 -0.801901 -15.55527176
8 0.240434 0.546943 0.801901 -15.55528360
9 -0.240434 -0.546943 -0.801901 -15.55528252
10 0.240434 0.546943 0.801901 -15.55528262
11 -0.240434 -0.546943 -0.801901 -15.55528261
12 0.240434 0.546943 0.801901 -15.55528261
✸
El siguiente esquema, además de incluir la normalización, tiene una manera
más eficiente de aproximar λ.
Algoritmo de la potencia
para k = 1, ...,maxit
zk = Axk−1
xk =
zk
||zk||2
λk
1 = xkT
zk
si |λk
1 − λk−1
1 | ≤ ε, parar
fin-para
El proceso se detiene satisfactoriamente cuando dos aproximaciones, λk
1 y
λk−1
1 , son muy parecidas. La salida no deseada se tiene cuando se llega al
número máximo de iteraciones.
La rapidez de la convergencia está ligada al valor |λ1/λ2|. Si este valor
es cercano a 1 , la convergencia es lenta. Si es mucho mayor que 1 , la
convergencia es rápida.
Ejemplo 9.5. Hallar el valor propio dominante de
A =


−1 −2 −3
−4 −5 −6
−7 −8 −8


partiendo de x0 = (1, 1, 1).
Héctor M. Mora E. Métodos Numéricos con Scilab 329
k zk
1 zk
2 zk
3
xk
1 xk
2 xk
3 λk
1
1 -6.000000 -15.000000 -23.000000
-0.213470 -0.533676 -0.818303 28.10693865
2 3.735732 8.432082 12.310128
0.242870 0.548191 0.800313 15.38164285
3 -3.740191 -8.514312 -12.488120
-0.240212 -0.546829 -0.802045 15.57034584
4 3.740005 8.507264 12.472478
0.240454 0.546954 0.801887 15.55390218
5 -3.740024 -8.507910 -12.473909
-0.240432 -0.546942 -0.801902 15.55540852
6 3.740022 8.507851 12.473779
0.240434 0.546943 0.801900 15.55527112
7 -3.740022 -8.507857 -12.473791
-0.240434 -0.546943 -0.801901 15.55528366
8 3.740022 8.507856 12.473790
0.240434 0.546943 0.801901 15.55528251
9 -3.740022 -8.507856 -12.473790
-0.240434 -0.546943 -0.801901 15.55528262
10 3.740022 8.507856 12.473790
0.240434 0.546943 0.801901 15.55528261
11 -3.740022 -8.507856 -12.473790
-0.240434 -0.546943 -0.801901 15.55528261
El último xk obtenido es una buena aproximación de un vector propio norma-
lizado asociado a λ1. ✸
9.3. Método de la potencia inversa
Este método se puede aplicar para hallar λn, el valor propio menos domi-
nante de una matriz diagonalizable e invertible A, cuando este existe, o sea,
si
|λ1| ≥ |λ2| ≥ |λ3| ≥ · · ·  |λn|  0.
Si A es invertible y tiene valores propios λ1, λ2,..., λn, entonces los valores
propios de A−1 son
1
λ1
,
1
λ2
, ...,
1
λn
.
330 CAPÍTULO 9. VALORES PROPIOS
El valor propio dominante de A−1 es justamente 1/λn. Entonces, se puede
aplicar el método de la potencia a A−1. En lugar de escribir explı́citamente
zk = A−1xk−1 es preferible presentarlo como la solución del sistema Azk =
xk−1.
Potencia inversa
para k = 1, ...,maxit
resolver Azk = xk−1
xk =
zk
||zk||2
σk
1 = xkT
zk
si |σk
1 − σk−1
1 | ≤ ε, parar
fin-para
Cuando se obtenga la convergencia, λn ≈ 1/σk
1 .
Ejemplo 9.6. Aplicar, partiendo de x0 = (1, 1, 1), el método de la potencia
inversa para obtener el valor propio λn de la matriz
A =


−1 −2 −3
−4 −5 −6
−7 −8 −8

 .
Héctor M. Mora E. Métodos Numéricos con Scilab 331
k zk
1 zk
2 zk
3
xk
1 xk
2 xk
3 σk
1
1 1.000000 -1.000000 0.000000
0.707107 -0.707107 0.000000 1.41421356
2 3.771236 -5.421152 2.121320
0.543702 -0.781572 0.305832 6.93621735
3 3.839896 -5.810817 2.412678
0.520948 -0.788337 0.327321 7.37098425
4 3.818745 -5.807259 2.424942
0.518766 -0.788900 0.329422 7.36121039
5 3.816531 -5.806630 2.425988
0.518557 -0.788954 0.329622 7.35991006
6 3.816317 -5.806567 2.426087
0.518537 -0.788959 0.329641 7.35978177
7 3.816297 -5.806561 2.426096
0.518535 -0.788960 0.329643 7.35976946
8 3.816295 -5.806560 2.426097
0.518535 -0.788960 0.329643 7.35976828
9 3.816294 -5.806560 2.426097
0.518535 -0.788960 0.329643 7.35976817
10 3.816294 -5.806560 2.426097
0.518535 -0.788960 0.329643 7.35976816
11 3.816294 -5.806560 2.426097
0.518535 -0.788960 0.329643 7.35976815
12 3.816294 -5.806560 2.426097
0.518535 -0.788960 0.329643 7.35976815
Entonces, λn ≈ 1/7.35976815 = 0.135873845 . ✸
9.4. Factorización QR
Sea A ∈ Rm×n. Una factorización QR de A consiste en encontrar matrices
Q y R tales que
A = QR.
Q ∈ Rm×m es ortogonal.
R ∈ Rm×n es triangular superior ( rij = 0 si i  j ).
332 CAPÍTULO 9. VALORES PROPIOS
El proceso de factorización QR, por medio de diferentes clases de matrices
ortogonales, va obteniendo ceros en lugares adecuados. Supongamos que por
medio de Q1 ortogonal, la matriz Q1A tiene ceros en sitios adecuados. Ahora,
con Q2 ortogonal, se busca que al hacer el producto Q2Q1A haya ceros en
otros sitios, sin perder los que ya tenı́a Q1A. Finalmente, se obtiene:
QrQr−1 · · · Q2Q1A = R triangular superior.
Como las matrices Q son ortogonales, entonces
QT
1 QT
2 · · · QT
r−1QT
r QrQr−1 · · · Q2Q1A = QT
1 QT
2 · · · QT
r−1QT
r R
A = QT
1 QT
2 · · · QT
r−1QT
r
| {z }
R
A = QR
En los programas, generalmente se empieza con A y sobre ella se va rees-
cribiendo el producto Q1A, después Q2Q1A. Al final se tendrá, en donde
estaba A, la matriz R. Por otro lado, se puede empezar con Q = I, y encima
se va reescribiendo el producto IQT
1 , después QT
1 QT
2 . Finalmente, en Q se
tendrá el producto QT
1 QT
2 · · · QT
r−1QT
r .
9.4.1. Matrices de Householder
Sea v ∈ Rn×1, v 6= 0, u = v/||v|| (vector columna de norma 1). Una matriz
de Householder es una matriz de la forma
H = Hv = H(v) = In −
2
vT
v
v vT
= In − 2uuT
.
A veces, al mismo tiempo que se obtiene el vector v deseado, se calcula el
número
β =
2
vT
v
,
entonces es común expresar H en función de v y de β, aunque β no es
necesario. Simplemente, desde el punto de vista de eficiencia, si se conoce β
no es interesante volverlo a calcular (son 2n − 1 flops.
H = H(v, β) = In − βv vT
.
La matriz H tiene dos caracterı́sticas importantes, es simétrica y ortogonal.
Héctor M. Mora E. Métodos Numéricos con Scilab 333
Además, si x ∈ Rn×1 se puede escoger v para que
Hvx ∈  e1
 .
En Álgebra Lineal, dados x1, x2, ... xk vectores del espacio vectorial en
consideración,  x1, x2, ..., xk  denota el subespacio generado por estos
vectores, es decir, el conjunto de todas las combinaciones lineales de estos
vectores:
 x1
, x2
, ..., xk
= {λ1x1
+ λ2x2
+ · · · + λkxk
: λi ∈ R}.
Entonces,
Hvx = αe1
.
Sea U = {ξ ∈ Rn×1 : vT
ξ = 0}, o sea, el hiperplano perpendicular a v y que
pasa por el origen. Dicho de otra forma, U es el complemento ortogonal del
subespacio generado por v, U =  v ⊥.
Sea x ∈ Rn×1, y = Hx, p = (x + y)/2, o sea, el punto medio del segmento
que une a x con y. Se puede verificar que
vT
p = 0 , o sea, p ∈ U .
Si
z = x − p
se puede verificar que
pT
z = 0.
Como p + z = x, entonces se deduce que p es la proyección de x sobre U, y
como p es el punto medio entre x y y, entonces y es el punto simétrico de x
con respecto al hiperplano U o la reflexión de x con respecto a U.
Como H es ortogonal, entonces ||Hx|| = ||x||, es decir, ||y|| = ||x||. Si se
desea que y = αe1, entonces
y = ±||x|| e1
.
Sea ξ ∈ U, o sea, vT
ξ = 0. Fácilmente se comprueba que
(x − y)T
ξ = 0 .
Si x = y, entonces x = ±||x|| e1. Basta con tomar H = I, y ası́, Hx = λe1.
Si x 6= y, se puede tomar
v = x ∓ ||x||e1
334 CAPÍTULO 9. VALORES PROPIOS
Ejemplo 9.7.
x =


−2
−1
2

 , y =


3
0
0

 , v =


−5
−1
2

 , H =


−2/3 −1/3 2/3
−1/3 14/15 2/15
2/3 2/15 11/15


O también,
x =


−2
−1
2

 , y =


−3
0
0

 , v =


1
−1
2

 , H =


2/3 1/3 −2/3
1/3 2/3 2/3
−2/3 2/3 −1/3


Es usual escoger v tal que v1 = 1, ası́ solo se requiere almacenar los valores
v2, v3, ..., vn. Generalmente estos valores se pueden almacenar donde estaban
x2, x3, xn. Además, no es necesario construir explı́citamente H, basta con
conocer v y β.
Denotaremos por H(x) la matriz que proyecta x sobre el subespacio  e1 .
La siguiente función, ver [Par80] y [GoV96], presenta una manera eficiente de
calcular v y β a partir de un vector columna x. Fue escrita en seudocódigo,
utilizando parcialmente la notación de Matlab o Scilab.
[v, β] = vHouse(x)
n = dim (x)
t = x(2:n)T
x(2:n)
v = [ 1 ; x(2:n) ]
si t = 0
β = 0
sino
ν =
p
x2
1 + t
si x1 ≤ 0
v1 = x1 − ν
sino
v1 = −t/(x1 + ν)
fin-si
β = 2v2
1/(t + v2
1)
v = v/v1
fin-si
fin vHouse
En resumen, dado x =∈ Rn,
Héctor M. Mora E. Métodos Numéricos con Scilab 335
[v, β] = vHouse(x)
H(x) = H(v, β) = I − βvvT
.
Ejemplo 9.8. Encontrar v y β para x =

−2 −1 2
T
.
v =


1
1/5
−2/5

 , β =
5
3
·
9.4.2. Matrices de Givens
Esta es otra clase de matrices ortogonales. Sea θ un ángulo y
c = cos(θ)
s = sen(θ),
La matriz de Givens, en Rn×n, es una rotación definida en el plano de las
variables i y k:
G = G(i, k, c, s, n) =















1 0 · · · 0 · · · 0 · · · 0
0 1 · · · 0 · · · 0 · · · 0
.
.
.
...
0 0 · · · c s 0
.
.
.
...
0 0 · · · −s c 0
.
.
.
...
0 0 · · · 0 · · · 0 · · · 1















i
k
El producto y = GT
x se calcula muy fácilmente:
yj =





cxi − sxk si j = i,
sxi + cxk si j = k,
xj en los demás casos.
336 CAPÍTULO 9. VALORES PROPIOS
Si se desea que yk = 0, basta con tomar
c =
xi
q
x2
i + x2
k
,
s =
−xk
q
x2
i + x2
k
.
En la práctica, es mejor utilizar la siguiente versión para el cálculo de c y s
(ver [GoV96]),
[c, s] = csGivens(a, b)
si b = 0
c = 1
s = 0
sino
si |b|  |a|
t = −a/b
s = 1/
√
1 + t2
c = st
sino
t = −b/a
c = 1/
√
1 + t2
s = ct
fin-si
fin-si
fin csGivens
Por medio de esta función

c s
−s c
T 
a
b

=

r
0

.
Ejemplo 9.9. Calcular c y s para el vector

2 −3
T
.
Al aplicar la función csGivens se obtiene:
c = 0.5547002
s = 0.8320503
y ası́ 
c s
−s c
T 
2
−3

=

3.6055513
0

✸
Héctor M. Mora E. Métodos Numéricos con Scilab 337
9.4.3. Factorización QR con matrices de Householder
Para facilitar la presentación del algoritmo, usaremos la siguiente notación.
Si H ∈ Rp×p es una matriz de Householder, con p ≤ n,
b
H = b
H(n, H) =





H si p = n

In−p 0
0 H
#
si p  n
La matriz b
H ∈ Rn×n también es ortogonal.
En lo que sigue se supondrá que A siempre indica la matriz obtenida al hacer
los productos efectuados hasta este momento, o sea, Qk · · · Q2Q1Ainicial .
Inicialmente se supone que Q = Im y se buscan ceros por debajo de a11, o
sea, se construye Q1 = H1 ∈ Rm×m tal que H1A( : , 1) = α1e1 ∈ Rm×1 :
[v, β] = vHouse(A(1:m, 1))
H1 = H(v, β)
A = H1A
Q = QHT
1 = QH1.
En seguida, se trabaja únicamente con las filas 2,..., m de A. Se construye
H2 ∈ R(m−1)×(m−1) tal que H2 A(2:m, 2) = α2e1 ∈ R(m−1)×1, o sea,
[v, β] = vHouse(A(2:m, 2))
H2 = H(v, β)
b
H2 = b
H(m, H2)
A = b
H2A
Q = Q b
H2
338 CAPÍTULO 9. VALORES PROPIOS
En general,
[v, β] = vHouse(A(k:m, k))
Hk = H(v, β)
b
Hk = b
H(m, Hk)
A = b
HkA
Q = Q b
Hk
Como se supone que en la iteración k, las columnas 1, ..., k−1 de A son nulas
debajo de la diagonal, entonces no es necesario recalcularlas. La presentación
formal anterior es exacta pero ineficiente, es mejor
[v, β] = vHouse(A(k:m, k))
Hk = H(v, β)
A(k:m, : ) = HkA(k:m, : )
Q( : , k:m) = Q( : , k:m)Hk
A continuación hay dos presentaciones de la factorización QR por medio de
matrices de Householder, la primera versión es más fácil de presentar.
[Q, R] = QR_House (A)
[m, n] = tamaño(A)
Q = Im
para k = 1 : min(m, n)
[v, β] = vHouse(A(k:m, k)
H = H(v, β)
b
H = b
H(m, H)
A = b
H A
Q = Q b
H
fin-para
R = A
fin QR_House
Esta segunda versión es mucho más eficiente.
Héctor M. Mora E. Métodos Numéricos con Scilab 339
[Q, R] = QR_House (A)
[m, n] = tamaño(A)
Q = Im
para k = 1 : min(m, n)
[v, β] = vHouse(A(k:m, k)
H = H(v, β)
A(k:m, k:n) = H A(k:m, k:n)
Q( : , k:m) = Q( : , k:m) H
fin-para
R = A
fin QR_House
Ejemplo 9.10. Obtener la factorización QR de
A =






2 3 4
5 4 3
2 1 0
−1 −2 −3
−4 −5 −4






utilizando matrices de Householder.
k = 1
beta = 0.717157
v : 1 -0.98598563 -0.39439425 0.19719713 0.78878851
H =
0.2828427 0.7071068 0.2828427 -0.1414214 -0.5656854
0.7071068 0.3028029 -0.2788789 0.1394394 0.5577577
0.2828427 -0.2788789 0.8884485 0.0557758 0.2231031
-0.1414214 0.1394394 0.0557758 0.9721121 -0.1115515
-0.5656854 0.5577577 0.2231031 -0.1115515 0.5537938
A =
7.0710678 7.0710678 5.939697
0 -0.0140144 1.0874867
0 -0.6056057 -0.7650053
0 -1.1971971 -2.6174973
0 -1.7887885 -2.4699893
Q =
340 CAPÍTULO 9. VALORES PROPIOS
0.2828427 0.7071068 0.2828427 -0.1414214 -0.5656854
0.7071068 0.3028029 -0.2788789 0.1394394 0.5577577
0.2828427 -0.2788789 0.8884485 0.0557758 0.2231031
-0.1414214 0.1394394 0.0557758 0.9721121 -0.1115515
-0.5656854 0.5577577 0.2231031 -0.1115515 0.5537938
-----------------------------------------------------------------
k = 2
beta = 1.006267
v : 1 0.26914826 0.53206814 0.79498802
H =
-0.0062674 -0.2708351 -0.5354028 -0.7999705
-0.2708351 0.9271052 -0.1441027 -0.2153107
-0.5354028 -0.1441027 0.7151292 -0.4256388
-0.7999705 -0.2153107 -0.4256388 0.3640330
A =
7.0710678 7.0710678 5.939697
0 2.236068 3.5777088
0 0 -0.0947664
0 0 -1.2925295
0 0 -0.4902926
Q =
0.2828427 0.4472136 0.2128929 -0.2797022 -0.7722974
0.7071068 -0.4472136 -0.4807445 -0.2596204 -0.0384964
0.2828427 -0.4472136 0.8431415 -0.0337898 0.0892790
-0.1414214 -0.4472136 -0.1021209 0.6599727 -0.5779337
-0.5656854 -0.4472136 -0.0473832 -0.6462647 -0.2451463
-----------------------------------------------------------------
k=3
beta = 1.068392
v : 1 0.87309062 0.33118770
H =
-0.0683918 -0.9328028 -0.3538382
-0.9328028 0.1855786 -0.3089328
-0.3538382 -0.3089328 0.8828131
A =
Héctor M. Mora E. Métodos Numéricos con Scilab 341
7.0710678 7.0710678 5.939697
0 2.236068 3.5777088
0 0 1.3856406
0 0 0
0 0 0
Q =
0.2828427 0.4472136 0.5196152 -0.0119059 -0.6707147
0.7071068 -0.4472136 0.2886751 0.4121526 0.2163259
0.2828427 -0.4472136 -0.0577350 -0.8203366 -0.2090802
-0.1414214 -0.4472136 -0.4041452 0.3962781 -0.6779604
-0.5656854 -0.4472136 0.6928203 0 0
Observaciones:
No es necesario calcular explı́citamente las matrices H (en el ejemplo
anterior aparecen, pero simplemente de manera ilustrativa). Basta con
conocer β y v.
Es necesario implementar eficientemente el producto HkA(k : m, : ) a
partir de la información: A(k:m, : ), β y v.
De manera análoga, es necesario implementar eficientemente el pro-
ducto Q( : , k:m)Hk a partir de la información: Q( : , k:m), β y v.
9.4.4. Factorización QR con matrices de Givens
Al utilizar matrices ortogonales de Givens, también se busca, columna por
columna, anular los elementos debajo de la diagonal. Con matrices de House-
holder, se usa una matriz para cada columna. Con matrices de Givens, en
la columna k, se utiliza una matriz para anular am,k , después otra matriz
para anular am−1,k , después otra matriz para anular am−2,k y , finalmente,
otra matriz para anular ak+1,k .
342 CAPÍTULO 9. VALORES PROPIOS
[Q, R] = QR_Givens(A)
[m, n] = tamaño(A)
Q = Im
para k = 1 : min(m, n)
para i = m : −1 : k + 1
[c, s] = csGivens(ai−1,k , aik)
G = G(i − 1, i, c, s, m)
A = GT
A
Q = QG
fin-para
fin-para
R = A
fin QR_Givens
Ejemplo 9.11. Obtener la factorización QR de
A =






2 3 4
5 4 3
2 1 0
−1 −2 −3
−4 −5 −4






utizando matrices de Givens.
k = 1
i = 5
c = -0.242536 s = 0.970143
G =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 -0.2425356 0.9701425
0 0 0 -0.9701425 -0.2425356
A =
2 3 4
5 4 3
2 1 0
4.1231056 5.3357838 4.6081769
0 -0.7276069 -1.940285
Q =
1 0 0 0 0
Héctor M. Mora E. Métodos Numéricos con Scilab 343
0 1 0 0 0
0 0 1 0 0
0 0 0 -0.2425356 0.9701425
0 0 0 -0.9701425 -0.2425356
i = 4
c = -0.436436 s = 0.899735
G =
1 0 0 0 0
0 1 0 0 0
0 0 -0.4364358 0.8997354 0
0 0 -0.8997354 -0.4364358 0
0 0 0 0 1
A =
2 3 4
5 4 3
-4.5825757 -5.2372294 -4.1461399
0 -1.4289915 -2.0111733
0 -0.7276069 -1.940285
Q =
1 0 0 0 0
0 1 0 0 0
0 0 -0.4364358 0.8997354 0
0 0 0.2182179 0.1058512 0.9701425
0 0 0.8728716 0.4234049 -0.2425356
...
k = 3
...
i = 4
c = -0.612372 s = 0.790569
A =
-7.0710678 -7.0710678 -5.939697
0 -2.236068 -3.5777088
0 0 -1.3856406
0 0 0
0 0 0
Q =
-0.2828427 -0.4472136 -0.5196152 0.6708204 0
-0.7071068 0.4472136 -0.2886751 -0.2236068 0.4082483
-0.2828427 0.4472136 0.0577350 0.2236068 -0.8164966
344 CAPÍTULO 9. VALORES PROPIOS
0.1414214 0.4472136 0.4041452 0.6708204 0.4082483
0.5656854 0.4472136 -0.6928203 0 0
Para que una factorización QR de A sea eficiente hay que tener en cuenta,
entre otros, los siguietes detalles:
No es necesario calcular explı́citamente las matrices G (en el ejemplo
anterior aparecen, pero simplemente de manera ilustrativa). Basta con
conocer c, s, e i. Obsérvese que siempre se trata de las filas i − 1 e i.
Es necesario implementar eficientemente el producto GT
A a partir de
la información: A, c y s.
De manera análoga, es necesario implementar eficientemente el pro-
ducto QG a partir de la información: Q, c y s.
En general, para efectuar sobre B, el producto G(i, j, c, s, m)T
B, basta con
hacer:
x = B(i, : )
B(i, : ) = c B(i, : ) − s B(j, : )
B(j, : ) = s x + c B(j, : )
En el proceso de factorización QR, si se está buscando un cero en la posición
(i, k) de la matriz A, se modifican únicamente, la filas i − 1 e i, pero se debe
tener en cuenta que las columnas 1, ..., k − 1 son nulas por debajo de la
diagonal, lo cual reduce el número de operaciones.
ai−1,k = c ai−1,k − s aik
aik = 0
t = A(i − 1, k + 1 : n)
A(i − 1, k + 1 : n) = c t − s A(i, k + 1 : n)
A(i, k + 1 : n) = s t + c A(i, k + 1 : n)
En general, para efectuar sobre B el producto B G(i, j, c, s, m), basta con
hacer:
x = B( : , i)
B( : , i) = c B( : , i) + s B( : , j)
B( : , j) = −s x + c B( : , j)
Héctor M. Mora E. Métodos Numéricos con Scilab 345
9.4.5. Solución por mı́nimos cuadrados
Una de las aplicaciones importantes de la factorización QR es la solución
de sistemas de ecuaciones lineales por mı́nimos cuadrados. El método más
popular para mı́nimos cuadrados es el de las ecuaciones normales. Sin em-
bargo, cuando el condicionamiento de A es muy grande comparado con el
residuo mı́nimo [GoV96], el método QR resulta más preciso y estable.
Una propiedad importantı́sima de las matrices ortogonales es que preservan
la norma euclidiana. Si Q es ortogonal, entonces
||Qx|| = ||x||.
Esto quiere decir que obtener el mı́nimo de ||Ax−b||2
2 es equivalente a buscar
el mı́nimo de ||PAx − Pb||2
2 para cualquier matriz ortogonal P. Si QR = A
es la factorización QR de A, entonces, se desea minimizar
||QT
Ax − QT
b||2
2 = ||QT
QRx − QT
b||2
2 = ||Rx − QT
b||2
2.
Sea A ∈ Rm×n, c = QT
b,
R =

U
0qn

, c =

d
r

,
con U ∈ Rp×n “triangular” superior, cuya última fila no es nula, d ∈ Rp×1,
r ∈ Rq×1, p + q = m. Entonces,
Rx − c =

Ux − d
−r

||Ax − b||2
2 = ||Ux − d||2
2 + ||r||2
2.
Basta con buscar x solución de Ux = d. Si el sistema anterior tiene solución,
entonces
min
x∈Rn
||Ax − b||2
2 = ||r||2
2.
Si U es cuadrada (∈ Rn×n) e invertible, la solución es única.
Ejemplo 9.12. Resolver por mı́nimos cuadrados el sistema Ax = b, donde
A =






2 3 4
5 4 3
2 1 0
−1 −2 −3
−4 −5 −4






, b =






29.1
33.9
7.0
−20.1
−38.9






346 CAPÍTULO 9. VALORES PROPIOS
Q =
-0.2828427 -0.4472136 -0.5196152 0.6708204 0
-0.7071068 0.4472136 -0.2886751 -0.2236068 0.4082483
-0.2828427 0.4472136 0.0577350 0.2236068 -0.8164966
0.1414214 0.4472136 0.4041452 0.6708204 0.4082483
0.5656854 0.4472136 -0.6928203 0 0
R =
-7.0710678 -7.0710678 -5.939697
0 -2.236068 -3.5777088
0 0 -1.3856406
0 0 0
0 0 0
c : -59.029274 -21.108482 -5.6753531 0.0223607 -0.0816497
U =
-7.0710678 -7.0710678 -5.939697
0 -2.236068 -3.5777088
0 0 -1.3856406
d : -59.029274 -21.108482 -5.6753531
r : 0.0223607 -0.0816497
x : 2.0208333 2.8866667 4.0958333
Ası́, ||r||2
2 = 0.0071667 . ✸
9.5. Método QR para valores propios de matrices
simétricas
El método más popular para obtener los valores propios de una matriz
simétrica (todos reales) es el método QR. Es posiblemente el más eficiente
para casos generales. El proceso tiene dos pasos:
1. Obtener, por matrices ortogonales, una matriz T tridiagonal simétrica
semejante a A, o sea, encontrar Q ortogonal tal que
Héctor M. Mora E. Métodos Numéricos con Scilab 347
QAQT
= T tridiagonal simétrica.
2. Obtener los valores propios de T.
9.5.1. Tridiagonalización por matrices de Householder para
matrices simétricas
Sea A ∈ Rn×n simétrica, b
H = b
H(n, H(A(2 : n, 1)). Es claro que b
HA es
nula, en la columna 1, por debajo de la subdiagonal. Se puede observar, y
también demostrar, que b
HA b
H, además de ser nula en la primera columna
por debajo de la subdiagonal, también es nula en la primera fila a la derecha
de la superdiagonal, y obviamente también es simétrica....
Ejemplo 9.13.
A =
2 3 4 5
3 -1 0 1
4 0 -2 8
5 1 8 10
H =
1 0 0 0
0 0.4242641 0.5656854 0.7071068
0 0.5656854 0.4441896 -0.6947630
0 0.7071068 -0.6947630 0.1315463
H A =
2 3 4 5
7.0710678 0.2828427 4.5254834 12.020815
0 -1.2604484 -6.4464829 -2.8284271
0 -0.5755605 2.4418963 -3.5355339
H A H =
2 7.0710678 0 0
7.0710678 11.18 -6.1814444 -1.3628445
0 -6.1814444 -1.6113918 3.2154369
0 -1.3628445 3.2154369 -2.5686082
✸
348 CAPÍTULO 9. VALORES PROPIOS
Este proceso se realiza en las otras columnas y filas, y se obtiene una matriz
tridiagonal, simétrica, semejante a A. Como es costumbre, los productos
realizados se reescriben sobre A.
A = triHouse(A)
n = dim (A)
para k = 1 : n − 2
x = A(k + 1 : n, k)
H = H(x)
b
H = b
H(n, H)
A = b
HA b
H
fin-para
fin triHouse
Ejemplo 9.14.
A =
2. 3. 4. 5.
3. - 1. 0. 1.
4. 0. - 2. 8.
5. 1. 8. 10.
k = 1
H =
0.4242641 0.5656854 0.7071068
0.5656854 0.4441896 - 0.6947630
0.7071068 - 0.6947630 0.1315463
A =
2. 7.0710678 0. 0.
7.0710678 11.18 - 6.1814444 - 1.3628445
0. - 6.1814444 - 1.6113918 3.2154369
0. - 1.3628445 3.2154369 - 2.5686082
k = 2
H =
- 0.9765473 - 0.2153028
- 0.2153028 0.9765473
Héctor M. Mora E. Métodos Numéricos con Scilab 349
A =
2. 7.0710678 0. 0.
7.0710678 11.18 6.3298973 0.
0. 6.3298973 - 0.3036510 - 2.7160739
0. 0. - 2.7160739 - 3.876349
✸
Tal como está descrito el algoritmo, se supone que se hace explı́citamente
el producto b
HA b
H. En realidad, se puede hacer de manera más eficiente,
teniendo en cuenta que una parte de b
H es la identidad, que se conoce el
nuevo valor de ak+1,k, que debajo habrá ceros, y que b
HA b
H también es
simétrica.
A = triHouse(A)
n = dim (A)
para k = 1 : n − 2
x = A(k + 1 : n, k)
[v, β] = vHouse(x)
p = β A(k + 1 : n, k + 1 : n) v
w = p − (β/2) (pT
v) v
ak+1,k = ak,k+1 = ||x||
A(k + 2 : n, k) = 0
A(k, k + 2 : n) = 0
A(k + 1 : n, k + 1 : n) = A(k + 1 : n, k + 1 : n) − v wT
− w vT
fin-para
fin triHouse
9.5.2. Tridiagonalización por matrices de Givens para matri-
ces simétricas
Con los conceptos e ideas de la factorización QR por medio de matrices
de Givens y de la tridiagonalización con matrices de Householder, resulta
naturalmente el proceso de tridiagonalización con matrices de Givens.
Primero, se busca “tridiagonalizar” la primera columna y la primera fila,
o sea, se buscan ceros por debajo de la subdiagonal y a la derecha de la
superdiagonal. Para ello se busca un cero en la posición (n, 1), después en
la posición (n − 1, 1), ası́ sucesivamente hasta la posición (3, 1). Al mismo
tiempo se hace lo análogo con la primera fila.
350 CAPÍTULO 9. VALORES PROPIOS
Después se trabaja con la segunda columna y la segunda fila, y ası́ sucesi-
vamente, hasta la columna y fila n − 2.
A = triGivens(A)
n = dim (A)
para k = 1 : n − 2
para i = n : −1 : k + 2
[c, s] = csGivens(ai−1,k , aik)
G = G(i − 1, i, c, s, n)
A = GT
AG
fin-para
fin-para
fin triHouse
Ejemplo 9.15.
A =
2 3 4 5
3 -1 0 1
4 0 -2 8
5 1 8 10
k = 1
i = 4
c = -0.624695 s = 0.780869
A =
2 3 -6.4031242 0
3 -1 -0.7808688 -0.6246950
-6.4031242 -0.7808688 13.121951 4.097561
0 -0.6246950 4.097561 -5.1219512
i = 3
c = 0.424264 s = 0.905539
A =
2 7.0710678 0 0
7.0710678 11.18 -4.9257204 -3.9755349
0 -4.9257204 0.9419512 1.1727625
0 -3.9755349 1.1727625 -5.1219512
Héctor M. Mora E. Métodos Numéricos con Scilab 351
k = 2
i = 4
c = 0.778168 s = -0.628057
A =
2 7.0710678 0 0
7.0710678 11.18 -6.3298973 0
0 -6.3298973 -0.3036510 -2.7160739
0 0 -2. -3.876349
✸
No sobra recordar que el producto GT
AG debe ser hecho de manera eficiente,
realizando únicamente las operaciones necesarias.
9.5.3. Valores propios de matrices tridiagonales simétricas
Sea T una matriz tridiagonal simétrica. En lo que sigue en esta sección, se
supone que T es tridiagonal simétrica.
La matriz T puede ser el resultado del proceso de tridiagonalización de
Householder o de Givens.
La matriz T se llama no reducida, [GoV96] p. 416, si todos lo elementos
subdiagonales (y los superdiagonales) son no nulos. Una matriz es reducida
si algún elemento subdiagonal o (superdiagonal) es nulo.
Ejemplo 9.16. Una matriz no reducida y dos reducidas:








2 3 0 0 0 0
3 4 5 0 0 0
0 5 6 7 0 0
0 0 7 8 9 0
0 0 0 9 10 11
0 0 0 0 11 12








,








2 3 0 0 0 0
3 4 5 0 0 0
0 5 6 7 0 0
0 0 7 8 0 0
0 0 0 0 10 11
0 0 0 0 11 12








,








2 3 0 0 0 0
3 4 5 0 0 0
0 5 6 0 0 0
0 0 0 8 0 0
0 0 0 0 10 11
0 0 0 0 11 12








T siempre se puede expresar como una matriz diagonal por bloques, donde
cada bloque es de tamaño 1 × 1 o de mayor tamaño pero tridiagonal no
reducido.
En el primer caso del ejemplo anterior hay un solo bloque, en el segundo
hay dos. En el tercer caso hay tres bloques, uno de ellos es 1 × 1.
352 CAPÍTULO 9. VALORES PROPIOS
Para encontrar los valores propios de T basta con encontrar los de cada
bloque tridiagonal simétrico no reducido, agregando los bloques 1 × 1 que
son valores propios de T.
El objetivo, a partir de ahora, es encontar los valores propios de T no re-
ducida. Sea T = QR la factorización QR de A y sea T+ = RQ
QT
QR = QT
T
R = QT
T
T+
= RQ = QT
TQ.
Luego T+ es simétrica y semejante a T. Además, se puede demostrar que
también es tridiagonal.
Ejemplo 9.17.
T =
2 3 0 0
3 4 5 0
0 5 6 7
0 0 7 8
R =
-3.6055513 -4.9923018 -4.1602515 0
0 -5.0076864 -5.8371805 -6.9892556
0 0 -7.6563459 -7.4712474
0 0 0 2.8863072
Q =
-0.5547002 -0.0460830 0.3365427 0.7595545
-0.8320503 0.0307220 -0.2243618 -0.5063697
0 -0.9984651 -0.0224362 -0.0506370
0 0 -0.9142743 0.4050957
T+ =
6.1538462 4.1666469 0 0
4.1666469 5.6743747 7.644594 0
0 7.644594 7.0025484 -2.6388764
0 0 -2.6388764 1.1692308
✸
Héctor M. Mora E. Métodos Numéricos con Scilab 353
Un proceso, un poco lento, para hallar los valores propios de T, consiste
en hacer T = T+ y repetir varias veces. Se puede demostrar que la matriz
que se va obteniendo tiende a ser reducida. Dicho en palabras populares, la
tridiagonal se va adelgazando en alguna parte.
repetir
QR = T factorización QR de T
T = RQ
fin-repetir
Ejemplo 9.18. Aplicar el proceso anterior hasta que T sea reducida. En
este ejemplo se supone que T es reducida cuando para algún elemento sub-
diagonal |ti+1,i| ≤ 10−10.
T =
2 3 0 0
3 4 5 0
0 5 6 7
0 0 7 8
k = 1
T+ =
9.8718663 -4.486006 0 0
-4.486006 10.134151 -4.5625729 0
0 -4.5625729 -1.1770851 -0.7764250
0 0 -0.7764250 1.1710681
k = 2
T+ =
13.296028 -3.5861468 0 0
-3.5861468 8.2428763 1.7266634 0
0 1.7266634 -2.7961816 0.3062809
0 0 0.3062809 1.2572771
k = 10
354 CAPÍTULO 9. VALORES PROPIOS
T+ =
15.191934 -0.0059687 0 0
-0.0059687 6.6303783 0.0035727 0
0 0.0035727 -3.100073 0.0002528
0 0 0.0002528 1.2777606
k = 20
T+ =
15.191938 -0.0000015 0 0
-0.0000015 6.6303755 0.0000018 0
0 0.0000018 -3.1000743 3.577E-08
0 0 3.577E-08 1.2777606
k = 27; matriz reducida:
T+ =
15.191938 -4.514E-09 0 0
-4.514E-09 6.6303755 -8.713E-09 0
0 -8.713E-09 -3.1000743 -7.230E-11
0 0 -7.229E-11 1.2777606
✸
Denotemos por espec(A) el conjunto de valores propios de A. Cuando se hace
un desplazamiento en los elementos diagonales de una matriz, los valores
propios quedan desplazados igualmente, o sea,
λ ∈ espec(A) sssi λ − s ∈ espec(A − sI).
Hacer un desplazamiento adecuado en T puede acelerar notablemente la
convergencia.
Ejemplo 9.19. Aplicar el mismo proceso a T − sI, con s = 1, hasta que
para algún elemento |ti+1,i| ≤ 10−10.
T =
2 3 0 0
3 4 5 0
0 5 6 7
Héctor M. Mora E. Métodos Numéricos con Scilab 355
0 0 7 8
T - s I =
1 3 0 0
3 3 5 0
0 5 5 7
0 0 7 7
k = 9, matriz reducida:
T+ =
14.191935 -0.0052796 0 0
-0.0052796 5.5882374 0.6389663 0
0 0.6389663 -4.057933 -8.844E-12
0 0 -8.844E-12 0.2777606
T + s I
15.191935 -0.0052796 0 0
-0.0052796 6.5882374 0.6389663 0
0 0.6389663 -3.057933 -8.844E-12
0 0 -8.844E-12 1.2777606
✸
Aunque hay varias maneras de calcular desplazamientos, uno de los más
utilizados es el desplazamiento de Wilkinson:
d = tn−1,n−1 − tnn
µ = tnn + d − signo(d)
q
d2 + t2
n,n−1
= tnn −
t2
n,n−1
d + signo(d)
q
d2 + t2
n,n−1
Para una matriz T ∈ Rn×n tridiagonal, simétrica y no reducida, el proceso
que se aplica es el siguiente:
356 CAPÍTULO 9. VALORES PROPIOS
mientras T sea no reducida
cálculo de µ
T = T − µI
QR = T factorización QR de T
T = RQ
T = T + µI
para i = 1 : n − 1
si |ai+1,i| ≤ ε ( |aii| + |ai+1,i+1| )
ai+1,i = 0
ai,i+1 = 0
fin-si
fin-para
fin-mientras
En [GoV96], p. 420, se encuentra una descripción eficiente de la parte prin-
cipal de este proceso, desde el cálculo de µ hasta T = T + µI.
Ejemplo 9.20. Hallar, por el proceso descrito anteriormente, una matriz
tridiagonal reducida semejante a la siguiente matriz tridiagonal:
T =




8 3 0 0
3 6 −4 0
0 −4 −10 −6
0 0 −6 0




Con un propósito meramente informativo, se presentan los valores propios
obtenidos por la función spec :
−13.50417 , 1.9698954 , 5.0194039 , 10.51487
k = 1
mu = 2.8102497
T -mu I
5.1897503 3 0 0
3 3.1897503 -4 0
0 -4 -12.81025 -6
0 0 -6 -2.8102497
T+ = RQ
7.2885019 2.0988427 0 0
Héctor M. Mora E. Métodos Numéricos con Scilab 357
2.0988427 -9.5701241 8.9042431 0
0 8.9042431 -4.1976395 -0.6390185
0 0 -0.6390185 -0.7617370
T + mu I
10.098752 2.0988427 0 0
2.0988427 -6.7598744 8.9042431 0
0 8.9042431 -1.3873898 -0.6390185
0 0 -0.6390185 2.0485127
k = 2
mu = 2.1635102
T -mu I
7.9352413 2.0988427 0 0
2.0988427 -8.9233846 8.9042431 0
0 8.9042431 -3.5509 -0.6390185
0 0 -0.6390185 -0.1149975
T+ = RQ
7.8706324 -3.26714 0 0
-3.26714 -14.885642 -2.4468061 0
0 -2.4468061 2.5541744 0.0357613
0 0 0.0357613 -0.1932052
T + mu I
10.034143 -3.26714 0 0
-3.26714 -12.722132 -2.4468061 0
0 -2.4468061 4.7176845 0.0357613
0 0 0.0357613 1.970305
k = 3
mu = 1.9698396
T -mu I
8.064303 -3.26714 0 0
-3.26714 -14.691972 -2.4468061 0
0 -2.4468061 2.7478449 0.0357613
358 CAPÍTULO 9. VALORES PROPIOS
0 0 0.0357613 0.0004654
T+ = RQ
7.1298463 5.6488809 0 0
5.6488809 -14.048752 0.5009906 0
0 0.5009906 3.0394919 0.0000006
0 0 0.0000006 0.0000557
T + mu I
9.0996859 5.6488809 0 0
5.6488809 -12.078913 0.5009906 0
0 0.5009906 5.0093315 0.0000006
0 0 0.0000006 1.9698954
k = 4
mu = 1.9698954
T -mu I
7.1297905 5.6488809 0 0
5.6488809 -14.048808 0.5009906 0
0 0.5009906 3.0394362 0.0000006
0 0 0.0000006 1.379E-13
T+ = RQ
4.4614948 -9.0220625 0 0
-9.0220625 -11.390431 -0.1052167 0
0 -0.1052167 3.049355 -2.585E-17
0 0 1.656E-22 7.811E-16
T + mu I
6.4313901 -9.0220625 0 0
-9.0220625 -9.4205358 -0.1052167 0
0 -0.1052167 5.0192503 -2.585E-17
0 0 1.656E-22 1.9698954
T reducida
6.4313901 -9.0220625 0 0
-9.0220625 -9.4205358 -0.1052167 0
0 0.1052167 5.0192503 0
0 0 0 1.9698954
Héctor M. Mora E. Métodos Numéricos con Scilab 359
✸
En una matriz simétrica tridiagonal se busca desde la esquina SE hacia la
esquina NO, el primer bloque de tamaño superior a uno que sea no reducido.
A este bloque se le aplica el procedimiento anterior (hasta que el bloque sea
reducido). El proceso general acaba cuando la matriz resultante es diagonal.
Ejemplo 9.21. Obtener los valores propios de la siguiente matriz tridiago-
nal simétrica:
A =








−2 8 0 0 0 0
8 −2 0 0 0 0
0 0 8 3 0 0
0 0 3 6 −4 0
0 0 0 −4 −10 −6
0 0 0 0 −6 0








i1 i2 : 3 6
T inicial
8 3 0 0
3 6 -4 0
0 -4 -10 -6
0 0 -6 0
mu = 2.810250
T final
10.098752 2.0988427 0 0
2.0988427 -6.7598744 8.9042431 0
0 8.9042431 -1.3873898 -0.6390185
0 0 -0.6390185 2.0485127
i1 i2 : 3 6
T inicial
10.098752 2.0988427 0 0
2.0988427 -6.7598744 8.9042431 0
0 8.9042431 -1.3873898 -0.6390185
0 0 -0.6390185 2.0485127
mu = 2.163510
360 CAPÍTULO 9. VALORES PROPIOS
T final
10.034143 -3.26714 0 0
-3.26714 -12.722132 -2.4468061 0
0 -2.4468061 4.7176845 0.0357613
0 0 0.0357613 1.970305
i1 i2 : 3 6
T inicial
10.034143 -3.26714 0 0
-3.26714 -12.722132 -2.4468061 0
0 -2.4468061 4.7176845 0.0357613
0 0 0.0357613 1.970305
mu = 1.969840
T final
9.0996859 5.6488809 0 0
5.6488809 -12.078913 0.5009906 0
0 0.5009906 5.0093315 0.0000006
0 0 0.0000006 1.9698954
i1 i2 : 3 6
T inicial
9.0996859 5.6488809 0 0
5.6488809 -12.078913 0.5009906 0
0 0.5009906 5.0093315 0.0000006
0 0 0.0000006 1.9698954
mu = 1.969895
T final
6.4313901 -9.0220625 0 0
-9.0220625 -9.4205358 -0.1052167 0
0 -0.1052167 5.0192503 8.383E-17
0 0 -1.058E-22 1.9698954
A =
-2 8 0 0 0 0
8 -2 0 0 0 0
Héctor M. Mora E. Métodos Numéricos con Scilab 361
0 0 6.4313901 -9.0220625 0 0
0 0 -9.0220625 -9.4205358 -0.1052167 0
0 0 0 -0.1052167 5.0192503 0
0 0 0 0 0 1.9698954
i1 i2 : 3 5
T inicial
6.4313901 -9.0220625 0
-9.0220625 -9.4205358 -0.1052167
0 -0.1052167 5.0192503
mu = 5.020017
T final
-6.2865541 11.012094 0
11.012094 3.2972548 -0.0000058
0 -0.0000058 5.0194039
i1 i2 : 3 5
T inicial
-6.2865541 11.012094 0
11.012094 3.2972548 -0.0000058
0 -0.0000058 5.0194039
mu = 5.019404
T final
-12.629095 -4.5002992 0
-4.5002992 9.6397959 2.575E-17
0 2.079E-17 5.0194039
A =
-2 8 0 0 0 0
8 -2 0 0 0 0
0 0 -12.629095 -4.5002992 0 0
0 0 -4.5002992 9.6397959 0 0
0 0 0 0 5.0194039 0
0 0 0 0 0 1.9698954
i1 i2 : 3 4
362 CAPÍTULO 9. VALORES PROPIOS
T inicial
-12.629095 -4.5002992
-4.5002992 9.6397959
mu = 10.514870
T final
-13.50417 -2.914E-16
3.384E-16 10.51487
A =
-2 8 0 0 0 0
8 -2 0 0 0 0
0 0 -13.50417 0 0 0
0 0 0 10.51487 0 0
0 0 0 0 5.0194039 0
0 0 0 0 0 1.9698954
i1 i2 : 1 2
T inicial
-2 8
8 -2
mu = -10.000000
T final
6 -8.782E-17
-1.735E-18 -10
A =
6 0 0 0 0 0
0 -10 0 0 0 0
0 0 -13.50417 0 0 0
0 0 0 10.51487 0 0
0 0 0 0 5.0194039 0
0 0 0 0 0 1.9698954
En los resultados anteriores, i1 e i2 indican la fila inicial y final de
la primera submatriz no reducida que se encuentra y con la que se va a
trabajar. ✸
Héctor M. Mora E. Métodos Numéricos con Scilab 363
Ejercicios
9.1 Aplique el método de la potencia para encontrar el valor propio dom-
inante de
A =




−2 0 −6 0
−6 1 −9 −6
0 0 −5 0
−2 0 −9 2



 .
9.2 Aplique el método de la potencia a
A =




5 0 2 0
−5 2 4 0
0 0 5 0
−4 −4 1 1



 .
9.3 Aplique el método de la potencia inversa para hallar el valor propio
menos dominante de
A =




8 5 −8 0
0 9 8 0
0 0 10 0
−6 −5 −4 2



 .
9.4 Aplique el método de la potencia inversa a
A =




8 0 1 0
−1 2 5 6
0 0 9 0
−7 0 −7 2



 .
9.5 Obtenga, usando matrices de Householder, la factorización QR de
A =




4 2 1
1 −1 1
1 1 1
16 4 1



 .
364 CAPÍTULO 9. VALORES PROPIOS
9.6 Obtenga, usando matrices de Givens, la factorización QR de
A =




4 2 1
1 −1 1
1 1 1
16 4 1



 .
9.7 Utilice la factorización QR de A para resolver por mı́nimos cuadrados




4 2 1
1 −1 1
1 1 1
16 4 1






x1
x2
x3

 =




3.01
5.99
1.99
11.01



 .
Compare con la solución obtenida por medio de ecuaciones normales.
9.8 Tridiagonalice, por medio de matrices de Householder, la matriz
A =




2 3 4 5
3 0 −1 −2
4 −1 −3 −4
5 −2 −4 1




Puede verificar, usando Scilab, que los valores propios de A y de la
matriz obtenida son exactamente los mismos.
9.9 Tridiagonalice, por medio de matrices de Givens, la matriz
A =




2 3 4 5
3 0 −1 −2
4 −1 −3 −4
5 −2 −4 1




9.10 Obtenga los valores propios, sin desplazamiento o con desplazamiento,
de la matriz tridiagonal obtenida.
9.11 Obtenga los valores propios, sin desplazamiento o con desplazamiento,
de la matriz
A =






2 −1 0 0 0
−1 3 −2 0 0
0 −2 4 0 0
0 0 0 5 −3
0 0 0 −3 1






.
Héctor M. Mora E. Métodos Numéricos con Scilab 365
Bibliografı́a
[AbS65] Abramowitz M. y Stegun I., Handbook of Mathematical Functions:
with Formulas, Graphs, and Mathematical Tables, Dover, New York, 1965.
[AlK02] Allaire G. y Kaber S.M., Algèbre linéaire numérique, Ellipses, Paris,
2002.
[Atk78] Atkinson Kendall E., An Introduction to Numerical Analysis, Wiley,
New York, 1978.
[Apo79] Apostol Tom M., Análisis matemático, 2 ed., Reverté, Barcelona,
1979.
[BuF85] Burden R.L. y Faires J.D., Numerical Analysis, 3a. ed., Prindle-
Weber-Schmidt, Boston, 1985.
[ChC99] Chapra S.C. y Canale R.P., Métodos Numéricos para Ingenieros,
McGrawHill, México, 1999.
[Dem97] Demmel J.W., Applied Numerical Linear Algebra, SIAM, Philadel-
phia, 1997.
[EnU96] Engel-Mullges G. y Uhlig F. Numerical Algorithms with C, Springer,
Berlin, 1996.
[Fro70] Fröberg C.E., Introduction to Numerical Analysis, 2nd ed., Addison-
Wesley, Reading, 1970.
[GoV96] Golub G.H. y Van Loan C.H., Matrix Computations, 3rd ed., Johns
Hopkins University Press, Baltimore, 1996.
[KiC94] Kincaid D. y Cheney W., Análisis numérico, Addison-Wesley Iberoa-
mericana, Wilmington, 1994.
[Man04] Mantilla I., Análisis Numérico, Universidad Nacional, Fac. de Cien-
cias, Bogotá, 2004.
[Mor01] Mora H., Optimización no lineal y dinámica, Universidad Nacional,
Fac. de Ciencias, Bogotá, 2001.
[NoD88] Noble B. y Daniel J.W,, Applied Linear Algebra, 3rd ed., Prentice-
Hall, Englewood Cliffs, 1988.
[Par80] Parlett B.N., The Symmetric Eigenvalue Problem, Prentice-Hall, En-
glewood Cliffs, 1980.
[Sch91] Schatzman M., Analyse Numérique, InterEditions, Paris, 1991.
366 CAPÍTULO 9. VALORES PROPIOS
[Ste98] Stewart G.W., Matrix Algorithms, Volume I: Basic Decompositions,
Siam, Philadelphia, 1998.
[Str86] Strang G., Álgebra Lineal y sus Aplicaciones, Addison-Wesley, Wilm-
ington, 1986.
[YoG72] Young D.M. y Gregory R.T., A Survey of Numerical Mathematics,
vol I y II, Addison-Wesley, Reading, 1972.
Índice alfabético
Adams-Bashforth
fórmula de, 271
Adams-Moulton
fórmula de, 274
aproximación, 171
aproximación por mı́nimos cuadrados,
205
base, 174, 206
condicionamiento
de un problema, 21
condiciones de frontera
ecuaciones diferenciales con, 285
ecuaciones diferenciales lineales con,
288
continuidad, 1
control del paso, 261
convergencia
cuadrática, 13, 131
lineal, 12, 13
sublineal, 13
superlineal, 13
cuadratura
de Gauss-Hermite, 234
de Gauss-Laguerre, 234
de Gauss-Legendre, 228, véase cuadratu-
ra de Gauss
def, 212
deflación, 156
derivabilidad, 2
derivación
numérica, 236
derivada
parcial, 10
determinante, 53
diagonal estrictamente dominante por
filas, 83
diferencias
divididas de Newton, 183
finitas, 193
diferencias finitas, 288, 294
ecuaciones diferenciales
con condiciones de frontera, 285
de orden superior, 283
lineales con condiciones de fron-
tera, 288
sistemas de, 278
ecuaciones diferenciales ordinarias, 243
ecuaciones diferenciales parciales, 293
ecuaciones normales, 65
encajonamiento, 124, 136
épsilon de la máquina, 16
error, 233
absoluto, 18
exponencial, 19
global, 216, 217, 220, 222, 246
orden del, 267
lineal, 19
local, 216, 220, 246
método de Euler, 268
método de Heun, 268
367
368 ÍNDICE ALFABÉTICO
método del punto medio, 268
método RK4, 268
método RK5, 268
método RK6, 268
orden del, 267
método de Euler, 246
orden del, 267
relativo, 18
Euler
método de, 245, 255
orden del método de, 268
extrapolación, 189
factorización
de Cholesky, 54, 61
LU, 41
PA=LU, 48
QR, 331
fórmula
de Adams-Bashforth, 271
de Adams-Moulton, 274
de Newton-Cotes, 213, 218, 224
abierta, 224
cerrada, 224
de Simpson, 218
del trapecio, 213
frontera libre, 202
frontera natural, 202
frontera sujeta, 203
funciones de la base, 174, 206
Gauss, véase método de Gauss
Gauss-Seidel, véase método de Gauss-
Seidel
Givens, matriz de, 335
Heun
método de, 248, 255
orden del método de, 268
integración numérica, 211
interpl, 173
interpolación, 171–173
de Lagrange, 177
lineal, 173
polinomial, 176
polinomial por trozos, 198
por diferencias divididas, 189
por diferencias finitas, 195
intg, 212
inv, 25
inversa
de una matriz, 25
Lagrange, véase interpolación de La-
grange
lı́mite
de una función, 1
de una sucesión, 4
LU, factorización, 41
Matlab, 26
matrices
ortogonales, 69
matriz
de diagonal estrictamente domi-
nante por filas, 83
de Givens, 69, 335
de Householder, 69
definida positiva, 51, 54, 84
jacobiana, 152
positivamente definida, véase ma-
triz definida positiva
método
de Cholesky, 51, 61
de colocación, 172
de Euler, 245, 255
de Gauss, 32
de Gauss con pivoteo parcial, 43,
48
de Gauss-Seidel, 81
Héctor M. Mora E. Métodos Numéricos con Scilab 369
de Heun, 248, 255
de la bisección, 136
de la secante, 133
de Newton, 126, 150
de Newton en Rn, 151, 152
de punto fijo, 143, 150
de regula falsi, 140
de regula falsi modificado, 142
de Runge-Kutta (RK), 254
de Runge-Kutta-Fehlberg, 262, 264
del disparo (shooting), 285, 287
del punto medio, 251, 255
del trapecio, 248
indirecto, 80
iterativo, 80
multipaso abierto, 271
multipaso cerrado, 274
multipaso explı́cito, 269, 271
multipaso implı́cito, 273, 274
orden del, 267
predictor-corrector, 275
RK2, 259
deducción del, 259
RK4, 255
RK5, 262
RK6, 262
RKF, 262
mı́nimos cuadrados, véase solución por...
notación
de Matlab, 26
de Scilab, 26
número
de operaciones, 31, 39, 60
números de Fibonacci, 4
O grande, 12
ode, 244
orden
de convergencia, 12
del error, 267
verificación numérica, 268
del error global, 267
del error local, 267
del método, 267
de Euler, 268
de Heun, 268
del punto medio, 268
RK4, 268
RK5, 268
RK6, 268
orden de convergencia, 130, 131, 134
pivote, 43
pivoteo
parcial, 43
total, 43
polinomio
de Lagrange, 178
de Legendre, 233
de Taylor, 6
problema
bien condicionado, 21
mal condicionado, 21
punto medio
método del, 251, 255
orden del método de, 268
QR, factorización, 331
Raphson, véase método de Newton-
Raphson
redondeo, 17
RK, véase método de Runge-Kutta
RK4, véase método RK4
RKF, véase Runge-Kutta-Fehlberg
Runge-Kutta
método de, 254
Runge-Kutta-Fehlberg
método de, 262, 264
370 ÍNDICE ALFABÉTICO
Seidel, véase método de Gauss-Seidel
seudosolución, 66
sistema
diagonal, 27
triangular inferior, 31
triangular superior, 28
sistemas
de ecuaciones diferenciales, 278
sobrerrelajación, 105
solución
de ecuaciones, 123
de sistemas de ecuaciones lineales,
24
de un sistema
diagonal, 27
triangular inferior, 31
triangular superior, 28
por mı́nimos cuadrados, 63
SOR, 105
spline, 174, 198
sucesión
convergente, 4
sucesiones, 4
tabla
de diferencias divididas, 186
de diferencias finitas, 194
tasa de convergencia, 13
teorema
de Rolle, 3
de valores extremos, 2
del valor intermedio, 2
del valor medio, 3
espectral, 11
trazador cúbico, 174, 198
triangularización, 32, 35, 39
truncamiento, 17
valor propio, 53, 321

Más contenido relacionado

PDF
Apunte matematica-aplicada-edp (1)
PDF
notas de análisis numerico
PDF
Apunte matematica-aplicada-edp
PDF
MATEMÁTICAS II PARA CIENCIAS EMPRESARIALES
PDF
Algebra_Lineal (3) GABRIELA GERONIMO.pdf
PDF
Probabilidad y estadistica elementales
PDF
Metodosnumerics
Apunte matematica-aplicada-edp (1)
notas de análisis numerico
Apunte matematica-aplicada-edp
MATEMÁTICAS II PARA CIENCIAS EMPRESARIALES
Algebra_Lineal (3) GABRIELA GERONIMO.pdf
Probabilidad y estadistica elementales
Metodosnumerics

Similar a 284023562-metodos-numericos-scilab.pdf (20)

PDF
PDF
Matemáticas Avanzadas_ Variable Compleja, Series y Ecuaciones Diferenciales O...
PDF
METODOS M. DE LA FÍSICA. OSCAR REULA.pdf
PDF
Metodos de la fisica matematica
PDF
Problemas de calculo
PDF
guia de ejercicios de analisis del cbc
PDF
guia de ejercicios de analisis del cbc
PDF
Calculo tensorial bueno
PDF
Callen thermodynamics and an introduction to thermostatistics, 2 ed.
PDF
Documento completo _---matematica basica para agronomia
PDF
Electro
PDF
Antologia calculo ii
PDF
Perez, calculo1
PDF
Perez calculo1
PDF
Perez calculo1
PDF
Perez calculo1
PDF
notas de calculo
PDF
Teoria mef
PDF
Teoria mef
Matemáticas Avanzadas_ Variable Compleja, Series y Ecuaciones Diferenciales O...
METODOS M. DE LA FÍSICA. OSCAR REULA.pdf
Metodos de la fisica matematica
Problemas de calculo
guia de ejercicios de analisis del cbc
guia de ejercicios de analisis del cbc
Calculo tensorial bueno
Callen thermodynamics and an introduction to thermostatistics, 2 ed.
Documento completo _---matematica basica para agronomia
Electro
Antologia calculo ii
Perez, calculo1
Perez calculo1
Perez calculo1
Perez calculo1
notas de calculo
Teoria mef
Teoria mef
Publicidad

Último (20)

PPTX
Introducción al Diseño de Máquinas Metodos.pptx
PDF
Supervisión del PROC. 228_Osinergmin.pdf
PDF
Curso Introductorio de Cristales Liquidos
PPTX
leyes de los gases Ideales. combustible refinación
PDF
TESTAMENTO DE DESCRIPTIVA ..............
PPTX
Seminario de telecomunicaciones para ingeniería
PPTX
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
PDF
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
PDF
HISTORIA DE LA GRÚAA LO LARGO DE LOS TIEMPOSpdf
PPTX
Notificacion e investigación de incidentes y accidentes de trabajo.pptx
DOCX
Cumplimiento normativo y realidad laboral
PPT
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
PDF
prg2_t01_p01_Fundamentos POO - parte1.pdf
PPTX
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
PPTX
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
PPT
357161027-seguridad-industrial-diapositivas-ppt.ppt
PDF
presentacion sobre los polimeros, como se conforman
PDF
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
PDF
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
Introducción al Diseño de Máquinas Metodos.pptx
Supervisión del PROC. 228_Osinergmin.pdf
Curso Introductorio de Cristales Liquidos
leyes de los gases Ideales. combustible refinación
TESTAMENTO DE DESCRIPTIVA ..............
Seminario de telecomunicaciones para ingeniería
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
Manual ISO9001_2015_IATF_16949_2016.pptx
HISTORIA DE LA GRÚAA LO LARGO DE LOS TIEMPOSpdf
Notificacion e investigación de incidentes y accidentes de trabajo.pptx
Cumplimiento normativo y realidad laboral
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
prg2_t01_p01_Fundamentos POO - parte1.pdf
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
357161027-seguridad-industrial-diapositivas-ppt.ppt
presentacion sobre los polimeros, como se conforman
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
Publicidad

284023562-metodos-numericos-scilab.pdf

  • 1. MÉTODOS NUMÉRICOS CON SCILAB Héctor Manuel Mora Escobar hectormora@yahoo.com hmmorae@unal.edu.co www.hectormora.info 22 de abril de 2014
  • 2. 2
  • 3. Prólogo Este libro presenta los principales temas de Métodos Numéricos: solución de sistemas de ecuaciones lineales (capı́tulos 2 y 3), ecuaciones no lineales (capı́tulo 4), interpolación y aproximación (capı́tulo 5), integración y dife- renciación (capı́tulo 6), ecuaciones diferenciales ordinarias (capı́tulo 7), ecua- ciones diferenciales parciales (capı́tulo 8) y valores propios (capı́tulo 9). Para cada tema hay varios métodos, obviamente no están todos. Los temas y los métodos que aparecen fueron escogidos teniendo en cuenta y haciendo un balance entre popularidad, eficiencia, aplicabilidad y facilidad de pre- sentación. Por ejemplo, el método de elementos finitos, aunque es impor- tantı́simo para ecuaciones diferenciales parciales, su presentación es volu- minosa y está fuera del alcance de este libro. Los métodos numéricos para optimización requieren uno o más libros y tampoco están en este libro. Scilab es un software para cáculos numéricos. Se puede usar de manera in- teractiva o se puede programar por medio de su lenguaje de alto nivel. Es de libre uso y está disponible para varias plataformas: Linux, Mac OS X y Windows. Se puede descargar en la página www.scilab.org, donde además hay bastante información, manuales en varios idiomas y otras herramientas. Fue desarrollado por el INRIA (Institut National de Recherche en Informa- tique et Automatique) de Francia y la ENPC (École Nationale des Ponts et Chaussées). Actualmente está manejado por Scilab Enterprises. El lengua- je de programación de Scilab y los nombres de muchas funciones son muy parecidos o idénticos a los de Matlab y Octave. De hecho, hay traductores de Matlab a Scilab. Se supone que el lector tiene nociones de Scilab o que las puede ir adquiriendo poco a poco. En este libro no está incluı́do un manual de Scilab. En la página de Scilab o, en general, en internet hay varios manuales y tutoriales disponibles. Por ejemplo, en www.hectormora.info . i
  • 4. En cada capı́tulo hay una sección sobre cómo se utiliza Scilab o qué función se puede usar para resolver el problema del capı́tulo. Además para algunos de los métodos hay una implementación sencilla del método en Scilab. Esta implementación no es de ninguna manera una competidora con la función especı́fica de Scilab. La implementación aparece simplemente para ayudar a entender el método y para dar ideas sobre su posible adaptación para una caso especı́fico. Por ejemplo, si se desea resolver numéricamente una ecuación diferencial ordinaria, en la gran mayorı́a de los casos prácticos y reales, la mejor opción es utilizar la función ode de Scilab. En un caso muy especı́fico o de estructura muy particular y que no esté previsto en Scilab, serı́a útil hacer una implementación personal. Las implementaciones hechas en Scilab siguen directamente el algoritmo sin buscar atajos ni utilización eficiente de las caracterı́sticas matriciales de Scilab. En las lı́neas de comentario de los programas de Scilab no habrá tildes ni sı́mbolos especiales como la letra ñ. Esto busca simplemente evitar lo que algunas veces sucede: estos sı́mbolos especiales desaparecen o quedan modi- ficados al cambiar de tipo de codificación, de editor o de sistema operativo. El punto de partida de este libro es Introducción a C y a métodos numéricos, del mismo autor, publicado en la Universidad Nacional de Colombia y tiene varias partes iguales. Obviamente no tiene la parte de C pero tiene dos grandes temas nuevos, ecuaciones diferenciales parciales y valores propios. El libro o la mayorı́a de él puede ser usado para cursos de un semestre de Métodos Numéricos para estudiantes de Ingenierı́a o de Ciencias. El autor estará muy agradecido por correcciones, sugerencias o comentarios enviados a hectormora@yahoo.com Quiero agradecer a todas las personas, estudiantes, colegas, correctores de estilo y otros lectores, por sus opiniones y correcciones, en especial a los profesores Humberto Sarria de la Universidad Nacional y Manuel Mejı́a de la Universidad Central. También deseo manifestar mis agradecimientos a la Universidad Central y a la Directora del Departamento de Matemáticas, profesora Edel Serrano. ii
  • 5. Índice general Notación IX 1. Preliminares 1 1.1. Repaso de algunos conceptos de cálculo . . . . . . . . . . . . 1 1.2. Sucesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3. Polinomio de Taylor . . . . . . . . . . . . . . . . . . . . . . . 6 1.4. Derivadas parciales . . . . . . . . . . . . . . . . . . . . . . . . 10 1.5. Teorema espectral para matrices simétricas . . . . . . . . . . 11 1.6. Notación O grande . . . . . . . . . . . . . . . . . . . . . . . . 12 1.7. Orden de convergencia . . . . . . . . . . . . . . . . . . . . . . 12 1.8. Números en un computador . . . . . . . . . . . . . . . . . . . 15 1.9. Truncamiento y redondeo . . . . . . . . . . . . . . . . . . . . 17 1.10. Errores absoluto y relativo . . . . . . . . . . . . . . . . . . . . 18 1.11. Errores lineal y exponencial . . . . . . . . . . . . . . . . . . . 19 1.12. Condicionamiento de un problema . . . . . . . . . . . . . . . 21 1.13. Teorema de punto fijo de Banach . . . . . . . . . . . . . . . . 22 2. Sistemas de ecuaciones lineales 24 2.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.2. Notación para submatrices en Scilab . . . . . . . . . . . . . . 26 2.3. Métodos ingenuos . . . . . . . . . . . . . . . . . . . . . . . . . 26 iii
  • 6. ÍNDICE GENERAL ÍNDICE GENERAL 2.4. Sistema diagonal . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.5. Sistema triangular superior . . . . . . . . . . . . . . . . . . . 28 2.5.1. Número de operaciones . . . . . . . . . . . . . . . . . 31 2.6. Sistema triangular inferior . . . . . . . . . . . . . . . . . . . . 31 2.7. Método de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.7.1. Número de operaciones . . . . . . . . . . . . . . . . . 39 2.8. Factorización LU . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.9. Método de Gauss con pivoteo parcial . . . . . . . . . . . . . . 43 2.10. Factorización LU=PA . . . . . . . . . . . . . . . . . . . . . . 48 2.11. Método de Cholesky . . . . . . . . . . . . . . . . . . . . . . 51 2.11.1. Matrices definidas positivas . . . . . . . . . . . . . . 52 2.11.2. Factorización de Cholesky . . . . . . . . . . . . . . . 54 2.11.3. Número de operaciones de la factorización . . . . . . 60 2.11.4. Solución del sistema . . . . . . . . . . . . . . . . . . 61 2.12. Solución por mı́nimos cuadrados . . . . . . . . . . . . . . . . 63 2.12.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 64 2.12.2. Ecuaciones normales . . . . . . . . . . . . . . . . . . . 65 2.13. Sistemas tridiagonales . . . . . . . . . . . . . . . . . . . . . . 69 2.14. Cálculo de la inversa . . . . . . . . . . . . . . . . . . . . . . 73 3. Métodos iterativos para sistemas de ecuaciones lineales 80 3.1. Método de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . 81 3.2. Normas vectoriales . . . . . . . . . . . . . . . . . . . . . . . . 86 3.2.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 87 3.3. Normas matriciales . . . . . . . . . . . . . . . . . . . . . . . . 87 3.3.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 98 3.4. Condicionamiento de una matriz . . . . . . . . . . . . . . . . 98 3.5. Método de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . 102 iv
  • 7. ÍNDICE GENERAL ÍNDICE GENERAL 3.6. Método iterativo general . . . . . . . . . . . . . . . . . . . . . 104 3.7. Método de sobrerrelajación . . . . . . . . . . . . . . . . . . . 105 3.8. Métodos de minimización . . . . . . . . . . . . . . . . . . . . 112 3.9. Método del descenso más pendiente . . . . . . . . . . . . . . . 113 3.10. Método del gradiente conjugado . . . . . . . . . . . . . . . . . 117 4. Ecuaciones no lineales 123 4.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 4.2. Método de Newton . . . . . . . . . . . . . . . . . . . . . . . . 126 4.2.1. Orden de convergencia . . . . . . . . . . . . . . . . . . 130 4.3. Método de la secante . . . . . . . . . . . . . . . . . . . . . . . 133 4.4. Método de la bisección . . . . . . . . . . . . . . . . . . . . . . 136 4.5. Método de regula falsi . . . . . . . . . . . . . . . . . . . . . . 140 4.6. Modificación del método de regula ralsi . . . . . . . . . . . . 142 4.7. Método de punto fijo . . . . . . . . . . . . . . . . . . . . . . . 143 4.7.1. Modificación del método de punto fijo . . . . . . . . . 149 4.7.2. Método de punto fijo y método de Newton . . . . . . 150 4.8. Método de Newton en Rn . . . . . . . . . . . . . . . . . . . . 151 4.8.1. Matriz jacobiana . . . . . . . . . . . . . . . . . . . . . 152 4.8.2. Fórmula de Newton en Rn . . . . . . . . . . . . . . . . 152 4.9. Método de Müller . . . . . . . . . . . . . . . . . . . . . . . . . 155 4.10. Método de Bairstow . . . . . . . . . . . . . . . . . . . . . . . 162 5. Interpolación y aproximación 171 5.1. Interpolación . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 5.1.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 173 5.1.2. Caso general . . . . . . . . . . . . . . . . . . . . . . . 174 5.2. Interpolación polinomial de Lagrange . . . . . . . . . . . . . . 177 5.2.1. Polinomios de Lagrange . . . . . . . . . . . . . . . . . 178 v
  • 8. ÍNDICE GENERAL ÍNDICE GENERAL 5.2.2. Existencia, unicidad y error . . . . . . . . . . . . . . . 181 5.3. Diferencias divididas de Newton . . . . . . . . . . . . . . . . . 183 5.3.1. Tabla de diferencias divididas . . . . . . . . . . . . . . 186 5.3.2. Cálculo del valor interpolado . . . . . . . . . . . . . . 189 5.4. Diferencias finitas . . . . . . . . . . . . . . . . . . . . . . . . . 193 5.4.1. Tabla de diferencias finitas . . . . . . . . . . . . . . . 194 5.4.2. Cálculo del valor interpolado . . . . . . . . . . . . . . 195 5.5. Trazadores cúbicos, interpolación polinomial por trozos, splines198 5.6. Aproximación por mı́nimos cuadrados . . . . . . . . . . . . . 205 6. Integración y diferenciación 211 6.1. Integración numérica . . . . . . . . . . . . . . . . . . . . . . . 211 6.2. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 6.3. Fórmula del trapecio . . . . . . . . . . . . . . . . . . . . . . . 213 6.3.1. Errores local y global . . . . . . . . . . . . . . . . . . 216 6.4. Fórmula de Simpson . . . . . . . . . . . . . . . . . . . . . . . 218 6.4.1. Errores local y global . . . . . . . . . . . . . . . . . . 220 6.5. Otras fórmulas de Newton-Cotes . . . . . . . . . . . . . . . . 224 6.5.1. Fórmulas de Newton-Cotes abiertas . . . . . . . . . . 224 6.6. Cuadratura adaptativa . . . . . . . . . . . . . . . . . . . . . . 225 6.7. Cuadratura de Gauss-Legendre . . . . . . . . . . . . . . . . . 228 6.7.1. Polinomios de Legendre . . . . . . . . . . . . . . . . . 233 6.7.2. Cuadratura de Gauss-Laguerre y Gauss-Hermite . . . 234 6.8. Derivación numérica . . . . . . . . . . . . . . . . . . . . . . . 236 6.8.1. Derivadas parciales . . . . . . . . . . . . . . . . . . . . 238 6.8.2. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 239 7. Ecuaciones diferenciales ordinarias 243 7.0.3. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 244 vi
  • 9. ÍNDICE GENERAL ÍNDICE GENERAL 7.1. Método de Euler . . . . . . . . . . . . . . . . . . . . . . . . . 245 7.2. Método de Heun . . . . . . . . . . . . . . . . . . . . . . . . . 248 7.3. Método del punto medio . . . . . . . . . . . . . . . . . . . . . 251 7.4. Método de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . 254 7.5. Deducción de RK2 . . . . . . . . . . . . . . . . . . . . . . . . 259 7.6. Control del paso . . . . . . . . . . . . . . . . . . . . . . . . . 261 7.7. Orden del método y orden del error . . . . . . . . . . . . . . . 267 7.7.1. Verificación numérica del orden del error . . . . . . . . 268 7.8. Métodos multipaso explı́citos . . . . . . . . . . . . . . . . . . 269 7.9. Métodos multipaso implı́citos . . . . . . . . . . . . . . . . . . 273 7.10. Sistemas de ecuaciones diferenciales . . . . . . . . . . . . . . 278 7.10.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 281 7.11. Ecuaciones diferenciales de orden superior . . . . . . . . . . 283 7.12. Ecuaciones diferenciales con condiciones de frontera . . . . . 285 7.13. Ecuaciones lineales con condiciones de frontera . . . . . . . . 288 8. Ecuaciones diferenciales parciales 293 8.1. Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 8.2. Elı́pticas: ecuación de Poisson . . . . . . . . . . . . . . . . . . 294 8.3. Parabólicas: ecuación del calor . . . . . . . . . . . . . . . . . 300 8.3.1. Método explı́cito . . . . . . . . . . . . . . . . . . . . . 302 8.3.2. Método implı́cito . . . . . . . . . . . . . . . . . . . . . 305 8.3.3. Método de Crank-Nicolson . . . . . . . . . . . . . . . 308 8.4. Hiperbólicas: ecuación de onda . . . . . . . . . . . . . . . . . 312 8.4.1. Método explı́cito . . . . . . . . . . . . . . . . . . . . . 313 8.4.2. Método implı́cito . . . . . . . . . . . . . . . . . . . . . 317 9. Valores propios 321 9.1. Preliminares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 vii
  • 10. ÍNDICE GENERAL ÍNDICE GENERAL 9.1.1. En Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 325 9.2. Método de la potencia . . . . . . . . . . . . . . . . . . . . . . 325 9.3. Método de la potencia inversa . . . . . . . . . . . . . . . . . . 329 9.4. Factorización QR . . . . . . . . . . . . . . . . . . . . . . . . . 331 9.4.1. Matrices de Householder . . . . . . . . . . . . . . . . . 332 9.4.2. Matrices de Givens . . . . . . . . . . . . . . . . . . . . 335 9.4.3. Factorización QR con matrices de Householder . . . . 337 9.4.4. Factorización QR con matrices de Givens . . . . . . . 341 9.4.5. Solución por mı́nimos cuadrados . . . . . . . . . . . . 345 9.5. Método QR para valores propios de matrices simétricas . . . 346 9.5.1. Tridiagonalización por matrices de Householder para matrices simétricas . . . . . . . . . . . . . . . . . . . . 347 9.5.2. Tridiagonalización por matrices de Givens para ma- trices simétricas . . . . . . . . . . . . . . . . . . . . . 349 9.5.3. Valores propios de matrices tridiagonales simétricas . 351 viii
  • 11. Notación [a, b] = {x ∈ R : a ≤ x ≤ b}, intervalo cerrado. ]a, b[ = {x ∈ R : a < x < b}, intervalo abierto. También es usual denotar el intervalo abierto por (a, b) pero puede confundirse con la pareja ordenada (a, b). [[i, j]] = {n ∈ Z : i ≤ n ≤ j}, intervalo de enteros (i y j son enteros). Si A es un conjunto de números reales acotado superiormente, el supremo de A es el mı́nimo del conjunto de cotas superiores de A: sup A = min{M : M es cota superior de A} . C[a, b] es el conjunto de funciones continuas que van del intervalo [a, b] en los reales. C1[a, b] es el conjunto de funciones definidas sobre [a, b] cuya primera deriva- da existe y es continua. Cn[a, b] es el conjunto de funciones con n derivadas continuas sobre [a, b]. Con esta notación C[a, b] = C0[a, b]. Algunas veces, por brevedad, se dice que f es de clase Cn. C∞[a, b] es el conjunto de funciones que se pueden derivar tantas veces como se desee. Por ejemplo: f(x) = ex, g(x) = 3x5 − 8x2 + 12, h(x) = sen(2x). Pn es el conjunto de todos los polinomios de grado menor o igual a n. I(c, d) es el intervalo cerrado más pequeño contiene a c y a d. Por ejemplo I(3, 5) = [3, 5], I(2, 1.8) = [1.8, 2]. Rn = {(x1, x2, . . . , xn) : xj ∈ R, ∀j}. ix
  • 12. Rm×n = conjunto de matrices reales de tamaño m×n. Si A ∈ Rm×n, entonces A =      a11 a12 . . . a1n a21 a22 . . . a2n . . . . . . ... . . . am1 am2 . . . amn      aij es la entrada (“elemento” o componente) de A en la fila i y en la columna j. Rn×1 = conjunto de matrices columna de n componentes. R1×n = conjunto de matrices fila de n componentes. R1×1 = R. AT = la transpuesta de la matriz A. Rn := Rn×1, es decir, x = (x1, x2, . . . , xn) :=      x1 x2 . . . xn      xT = x1 x2 . . . xn Ai· = ai1 ai2 . . . ain , fila i-ésima de la matriz A. A·j =      a1j a2j . . . amj      , columna j-ésima de la matriz A. kxk1 = n X i=1 |xi| kxk2 = n X i=1 x2 i 1/2 kxk∞ = max 1≤i≤n |xi|
  • 13. f′(x̄) = ∇f(x̄) = gradf (x̄) = gradiente de f calculado en x̄, f′ (x̄) =              ∂f ∂x1 (x̄) ∂f ∂x2 (x̄) . . . ∂f ∂xn (x̄)              f′′(x̄) = ∇2f(x̄) = Hf (x̄) = H(x̄) = Hessiano o matriz hessiana de f en x̄, f′′ (x̄) =              ∂2f ∂x2 1 (x̄) ∂2f ∂x2∂x1 (x̄) . . . ∂2f ∂xn∂x1 (x̄) ∂2f ∂x1∂x2 (x̄) ∂2f ∂x2 2 (x̄) . . . ∂2f ∂xn∂x2 (x̄) . . . . . . ... . . . ∂2f ∂x1∂xn (x̄) ∂2f ∂x2∂xn (x̄) . . . ∂2f ∂x2 n (x̄)              Rn + = {(x1, x2, ..., xn) : xi ≥ 0, ∀i}, el ortante no negativo de Rn. ej = j-ésima columna de la matriz identidad ρ(A) = max{|λi|C : λi es valor propio de A}, radio espectral de A. ♦ : fin del ejemplo. : fin de demostración. ⌊x⌋ = max{n ∈ Z : n ≤ x}, parte entera o parte entera inferior o piso de x. ⌈x⌉ = min{n ∈ Z : n ≥ x}, parte entera superior o techo de x. espec(A) = espectro de A = conjunto de valores propios de A. sssi = si y solamente si Mı́nimo o valor mı́nimo y argumento que minimiza. Sea f : Rn → R una
  • 14. función. Cuando existen, min f(x) = min{f(x) : x ∈ Rn } argmin f(x) = x̄ si f(x̄) = min f(x) Por ejemplo, si f(x1, x2) = (x1 − 2)2 + (x2 − 3)2 + 4, min f(x) = 4 argmin f(x) = (2, 3). En la escritura de números decimales, las cifras enteras están separadas de las decimales por medio de un punto, en lugar de una coma como es la convención del español. No se utiliza el punto para separar las unidades de mil de las centenas. Por ejemplo, en este libro se escribe 12345.67 en lugar de 12.345, 67.
  • 15. Capı́tulo 1 Preliminares El siguiente resultado sobre polinomios se usará en la sección de polinomios de Lagrange. Teorema 1.1. Sea p ∈ Pn, es decir, p es un polinomio de grado menor o igual a n. Si existen n + 1 valores diferentes x1, x2, ..., xn, xn+1 tales que p(xi) = 0 ∀i, entonces p(x) = 0 ∀x, es decir, p es el polinomio nulo. 1.1. Repaso de algunos conceptos de cálculo En lo que sigue, mientras no se diga lo contrario, se considera una función f : R → R y un número real c. Se dice que el número real L es el lı́mite de f cuando x tiende a c, denotado por, lim x→c f(x) = L , si dado ε 0, existe δ 0 tal que si 0 |x − c| ≤ δ, entonces |f(x) − L| ≤ ε. La función f es continua en c, si lim x→c f(x) existe y lim x→c f(x) = f(c) . 1
  • 16. 2 CAPÍTULO 1. PRELIMINARES a b x̃ f(x̃) x̄ f(x̄) Figura 1.1. Teorema de valores extremos Se dice que f es continua en el intervalo [a, b], si es continua en todos los puntos de [a, b]. Se dice que f es derivable en c, si existe el lı́mite lim h→0 f(c + h) − f(c) h = lim ξ→c f(ξ) − f(c) ξ − c . En este caso, el lı́mite es la derivada de f en c y se denota por f′(c). Teorema 1.2. Teorema de valores extremos. Ver figura 1.1. Sea f continua en el intervalo [a, b] (recordemos que se puede denotar f ∈ C[a, b] ), entonces existe por lo menos un x̄ ∈ [a, b] tal que f(x̄) ≤ f(x) para todo x ∈ [a, b] . Este punto x̄ se llama minimizador absoluto o global, o punto de mı́nimo global de f en [a, b]. De manera análoga, existe por lo menos un punto x̃, maximizador global o punto de máximo global, tal que f(x̃) ≥ f(x) para todo x ∈ [a, b] . Teorema 1.3. Teorema del valor intermedio. Ver figura 1.2. Sea f continua en [a, b], m = min{f(a), f(b)}, M = max{f(a), f(b)}. Si t es un valor intermedio, m ≤ t ≤ M, entonces existe por lo menos un c ∈ [a, b] tal que f(c) = t.
  • 17. Héctor M. Mora E. Métodos Numéricos con Scilab 3 a b M m t c c̃ Figura 1.2. Teorema del valor intermedio a b c Figura 1.3. Teorema de Rolle Teorema 1.4. Teorema de Rolle. Ver figura 1.3. Si f es una función continua en [a, b], derivable en ]a, b[ y f(a) = f(b), entonces existe c ∈]a, b[ tal que f′ (c) = 0. Teorema 1.5. Teorema del valor medio. Ver figura 1.4. Si f es una función continua en [a, b] y derivable en ]a, b[, entonces existe c ∈]a, b[ tal que f′ (c) = f(b) − f(a) b − a .
  • 18. 4 CAPÍTULO 1. PRELIMINARES a b c Figura 1.4. Teorema del valor medio 1.2. Sucesiones Una sucesión es simplemente una función que va del conjunto de los números naturales en los reales: u :N → R n 7→ un En algunos casos las sucesiones están definidas para los naturales positivos (no para el 0). Como se observa, habitualmente se escribe un en lugar de u(n). Es frecuente denotar la sucesión ası́: {un}n∈N o {un}∞ n=0 o, si no hay confusión, de manera aún más simple, {un} o un. Ejemplo 1.1. un = 1/n2, vn = 5 + (−1)n n3 , wm = m3 − 2m 100m2 + 20m . ✸ Una sucesión se puede definir de manera recurrente a partir del primer término o de los primeros términos. Por ejemplo, la sucesión de números de Fibonacci (Leonardo de Pisa) se define por: u0 = 0 u1 = 1 un = un−2 + un−1, para n ≥ 2. Ası́, u0 = 0, u1 = 1, u2 = 1, u3 = 2, u4 = 3, u5 = 5, u6 = 8, u7 = 13, ... Se dice que la sucesión xn converge al número L, o que L es el lı́mite de la sucesión, si dado cualquier ε 0 (generalmente pequeño), existe un natural N tal que |xn − L| ≤ ε para n N.
  • 19. Héctor M. Mora E. Métodos Numéricos con Scilab 5 Es usual escribir lim n→∞ xn = L , o xn −→ n→∞ L , o simplemente, si no hay confusión, xn −→ L . Ejemplo 1.2. Sea xn = 5 + 1 n2 . Veamos que el lı́mite es 5. Si ε = 0.01, se requiere que 5 + 1 n2 − 5 ≤ 0.01 1 n2 ≤ 0.01 1 0.01 ≤ n2 100 ≤ n2 10 ≤ n. Es decir, para ε = 0.01 basta con tomar N ≥ 10. En general, para un ε cualquiera, basta con tomar N ≥ r 1 ε . ✸ Se dice que la sucesión xn tiende a +∞ y se escribe: lim n→∞ xn = +∞ o simplemente xn −→ +∞
  • 20. 6 CAPÍTULO 1. PRELIMINARES si dado cualquier real M 0 (generalmente grande), existe un natural N tal que xn M para n N. En este caso, la sucesión no es convergente, pero, como se observa, se utiliza la misma notación. Se define y se denota de manera análoga cuando la sucesión tiende a −∞. Ejemplo 1.3. La sucesión geométrica an converge o diverge dependiendo de a: lim n→∞ an = 0, si |a| 1, lim n→∞ an = 1, si a = 1, lim n→∞ an = +∞, si a 1, lim n→∞ an no existe, si a ≤ −1. ✸ 1.3. Polinomio de Taylor Sea la función f : R → R continua y derivable cuantas veces sea necesario y sea x̄ un valor fijo. Se desea encontrar p ∈ P1 tal que p(x̄) = f(x̄) y p′ (x̄) = f′ (x̄). Este polinomio es p(x) = f(x̄) + f′ (x̄)(x − x̄). Ahora se desea encontrar p ∈ P2 tal que p(x̄) = f(x̄), p′ (x̄) = f′ (x̄), p′′ (x̄) = f′′ (x̄). Entonces p(x) = f(x̄) + f′ (x̄)(x − x̄) + f′′(x̄) 2 (x − x̄)2 .
  • 21. Héctor M. Mora E. Métodos Numéricos con Scilab 7 De manera general, sea p ∈ Pn tal que p(x̄) = f(x̄), p′ (x̄) = f′ (x̄), p′′ (x̄) = f′′ (x̄), . . . p(n) (x̄) = f(n) (x̄). Este polinomio es p(x) = f(x̄) + f′ (x̄)(x − x̄) + f′′(x̄) 2 (x − x̄)2 + · · · + f(n)(x̄) n! (x − x̄)n = n X k=0 f(k)(x̄) k! (x − x̄)k (1.1) llamado polinomio de Taylor de orden n alrededor de x̄. Teorema 1.6. Sea f ∈ Cn[a, b], tal que f(n+1) existe en [a, b] y x̄ ∈ [a, b]. Entonces, para todo x ∈ [a, b] f(x) = pn(x) + Rn(x), donde pn(x) es el polinomio de Taylor de orden n y Rn(x) = f(n+1)(ξ(x)) (n + 1)! (x − x̄)n+1 (1.2) es el residuo, con ξ(x) entre x̄ y x (es decir, ξ(x) ∈ I(x̄, x) ). Si f es de clase C∞, entonces f(x) = ∞ X k=0 f(k)(x̄) k! (x − x̄)k . La anterior expresión es el desarrollo en serie de Taylor de f alrededor de x̄. El teorema anterior no permite evaluar exactamente el residuo, pero sı́ per- mite acotarlo: |Rn(x)| ≤ |x − x̄|n+1 (n + 1)! max t∈I(x,x̄) f(n+1) (t) (1.3)
  • 22. 8 CAPÍTULO 1. PRELIMINARES Ejemplo 1.4. Obtener la serie de Taylor de f(x) = ex alrededor de x̄ = 0. f′ (x) = ex f′′ (x) = ex f(n) (x) = ex f(0) = 1 f′ (0) = 1 f′′ (0) = 1 f(n) (0) = 1 ex = 1 + x + x2 2 + x3 3! + x4 4! + · · · ex = ∞ X n=0 xn n! . ✸ Ejemplo 1.5. Obtener la serie de Taylor de f(x) = sen(x) alrededor de x̄ = 0. f′ (x) = cos(x) f′′ (x) = − sen(x) f′′′ (x) = − cos(x) f(4) (x) = sen(x) f(5) (x) = cos(x) f(0) = 0 f′ (0) = 1 f′′ (0) = 0 f′′′ (0) = −1 f(4) (0) = 0 f(5) (0) = 1 sen(x) = x − x3 3! + x5 5! − x7 7! + · · · ✸ Ejemplo 1.6. Obtener la serie de Taylor de f(x) = cos(x) alrededor de x̄ = 0.
  • 23. Héctor M. Mora E. Métodos Numéricos con Scilab 9 f′ (x) = − sen(x) f′′ (x) = − cos(x) f′′′ (x) = sen(x) f(4) (x) = cos(x) f(5) (x) = − sen(x) f(0) = 1 f′ (0) = 0 f′′ (x) = −1 f′′′ (x) = 0 f(4) (0) = 1 f(5) (0) = 0 cos(x) = 1 − x2 2! + x4 4! − x6 6! + · · · ✸ Ejemplo 1.7. Obtener el polinomio de Taylor de orden 2 de cos(x) alrede- dor de π, acotar el error para x = 3 y calcular el error. p2(x) = cos(π) − sen(π)(x − π) − cos(π) 2 (x − π)2 p2(x) = −1 + 1 2 (x − π)2 |error| ≤ |3 − π|3 6 max t∈[3,π] | sen(t)| |error| ≤ 0.0004731 × sen(3) |error| ≤ 0.0004731 × 0.1411 = 0.0000668 |error| ≤ 0.0000668 En este caso sencillo, se puede evaluar explı́citamente el error: |error| = | cos(3) − p2(3)| = | − 0.9899925 − −0.9899758| = 0.0000167 ✸
  • 24. 10 CAPÍTULO 1. PRELIMINARES Algunas veces se expresa x = x̄ + h, entonces el polinomio de Taylor, el residuo y la serie de Taylor quedan: pn(x̄ + h) = n X k=0 f(k)(x̄) k! hk (1.4) Rn(x̄ + h) = f(n+1)(ξ(h)) (n + 1)! hn+1 , ξ(h) ∈ I(0, h), (1.5) f(x̄ + h) = ∞ X k=0 f(k)(x̄) k! hk . (1.6) 1.4. Derivadas parciales Sea f : Rn → R y x̄ ∈ Rn. Si se dejan fijas todas las variables salvo la primera, se obtiene una función de una sola variable. Se puede entonces pensar en buscar (puede existir o no) la derivada de esta nueva función. Se obtiene ası́ la derivada parcial de f con respecto a x1. De manera más precisa, si el siguiente lı́mite existe, este es la derivada parcial de f con respecto a x1 evaluada en x̄, denotada como aparece a continuación: ∂f ∂x1 (x̄) = lim h→0 f(x̄1 + h, x̄2, ..., x̄n) − f(x̄1, x̄2, ..., x̄n) h . De manera análoga, ∂f ∂x2 (x̄) = lim h→0 f(x̄1, x̄2 + h, x̄3, ..., x̄n) − f(x̄1, x̄2, x̄3, ..., x̄n) h . Con frecuencia se utilizan las derivadas parciales, no en un punto especı́fi- co como x̄ = (2, −2, 4, 1/3), sino en un punto variable. Para obtener las derivadas parciales se utilizan las mismas reglas de la derivación en una variable, considerando las otras variables como constantes.
  • 25. Héctor M. Mora E. Métodos Numéricos con Scilab 11 Por ejemplo, si f(x1, x2, x3, x4) = (4x3 1 + 6x4)9 + 5x1x2 + 8x4, ∂f ∂x1 = 9(4x3 1 + 6x4)8 (12x2 1) + 5x2, ∂f ∂x2 = 5x1, ∂f ∂x3 = 0, ∂f ∂x4 = 54(4x3 1 + 6x4)8 + 8. 1.5. Teorema espectral para matrices simétricas Este teorema de gran importancia, algunas veces no aparece en los libros introductorios de Álgebra Lineal, razón por la cual está en este capı́tulo. Teorema 1.7. Si A es una matriz real simétrica, existe una matriz Q orto- gonal (Q−1 = QT o QQT = I) tal que D = QT AQ , donde D es una matriz diagonal. Otra manera de decirlo es: A es diagona- lizable por medio de una matriz ortogonal. Estas dos matrices Q y D, en general, no son únicas, sin embargo hay car- caterı́sticas comunes. Los elementos diagonales de D son los valores propios de A, siempre reales por ser A simétrica. Las columnas de la matriz Q son vectores propios normalizados de A. Ejemplo 1.8. A = 1 2 2 3 D = 2 − √ 5 0 0 2 + √ 5 Q =     − q 1+ √ 5 2 √ 5 q −1+ √ 5 2 √ 5 q −1+ √ 5 2 √ 5 q 1+ √ 5 2 √ 5    
  • 26. 12 CAPÍTULO 1. PRELIMINARES 1.6. Notación O grande Algunas veces es útil comparar aproximadamente el comportamiento de dos funciones en las cercanı́as de 0. Se dice que, cuando x → 0, f(x) es O grande de g(x), f(x) = O(g(x)) si existen dos constantes positivas C y δ (pequeña) tales que |f(x)| ≤ C|g(x)| para |x| ≤ δ. Ejemplo 1.9. Sea f(x) = 4x3+5x6. Recordemos que, si 0 y 1, entonces y y2 y3 · · · . Ası́, si |x| 1, |x3 | ≤ |x| |4x3 | ≤ 4|x| |x6 | ≤ |x| |5x6 | ≤ 5|x| |4x3 + 5x6 | ≤ 9|x| 4x3 + 5x6 = O(x). Aunque lo anterior es cierto, es preferible buscar el mayor exponente posible. Mediante pasos semejantes a los anteriores llegamos a 4x3 + 5x6 = O(x3 ). Obviamente, no es cierto que 4x3 + 5x6 = O(x4). ✸ Según la notación O grande, el residuo para el polinomio de Taylor (1.5) se puede expresar Rn(x̄ + h) = O(hn+1 ). 1.7. Orden de convergencia Sea {xk} una sucesión de números reales con lı́mite L, tal que xk 6= L para todo k. Se dice que la convergencia tiene convergencia lineal, si el siguiente lı́mite existe: lim k→∞ |xk+1 − L| |xk − L| = β ∈]0, 1[.
  • 27. Héctor M. Mora E. Métodos Numéricos con Scilab 13 Se dice que la convergencia tiene orden de convergencia p 1, si el siguiente lı́mite existe. lim k→∞ |xk+1 − L| |xk − L|p = β 0 . En este caso se dice que β es la tasa de convergencia. Obsérvese que cuando p = 1 (convergencia lineal), se exige además que β 1. La convergencia se llama superlineal si: lim k→∞ |xk+1 − L| |xk − L| = 0. La convergencia se llama sublineal si: lim k→∞ |xk+1 − L| |xk − L| = 1. Cuando el orden es 2, se dice que la convergencia es cuadrática. Si lim k→∞ |xk+1 − L| |xk − L|p = 0 , el orden de convergencia es superior a p. Lo ideal es tener órdenes de convergencia altos con tasas pequeñas. Una convergencia sublineal es una convergencia muy lenta. Una convergencia cuadrática es muy buena, por ejemplo, el método de Newton, que se verá en el capı́tulo 4, tiene convergencia cuadrática. Ejemplo 1.10. xk = π + 1 k . Esta sucesión converge a π. Veamos qué pasa con p = 1. lim k→∞ |xk+1 − L| |xk − L| = lim k→∞ |π + 1 k + 1 − π| |π + 1 k − π| = lim k→∞ 1 k + 1 1 k = lim k→∞ k k + 1 = 1.
  • 28. 14 CAPÍTULO 1. PRELIMINARES Entonces, podemos decir que la convergencia es sublineal. ✸ Ejemplo 1.11. xk = 1 2k . Esta sucesión converge a 0. Directamente veamos qué pasa con p = 1 lim k→∞ |xk+1 − L| |xk − L|1 = lim k→∞ 1 2k+1 1 2k = lim k→∞ 2k 2k+1 = lim k→∞ 1 2 = 1 2 Entonces, la sucesión tiene convergencia lineal con tasa 1/2. ✸ Ejemplo 1.12. x1 = 69 10 xn = 6 + (xn−1 − 6)2 , n ≥ 2. Los primeros valores son los siguientes: n xn 1 6.900000000000000 2 6.810000000000000 3 6.656100000000000 4 6.430467210000001 5 6.185302018885185 6 6.034336838202925 7 6.001179018457774 8 6.000001390084524 9 6.000000000001933 10 6.000000000000000
  • 29. Héctor M. Mora E. Métodos Numéricos con Scilab 15 Se puede mostrar que xn = 6 + yn , n = 1, 2, ... y1 = 9 10 yn = y2 n−1 , n = 2, 3, ... yn = 9 10 2n−1 , n = 1, 2, ... Como yn → 0, entonces xn → 6. lim k→∞ |xk+1 − L| |xk − L|p = lim k→∞ yk+1 yp k = lim k→∞ y2 k yp k = lim k→∞ y2−p k Si p = 1, el lı́mite es 0, es decir, la convergencia es superlineal. Si p = 2, el lı́mite es 1, luego la convergencia es cuadrática. Cuando la convergencia es cuadrática, el número de dı́gitos decimales exactos se va duplicando (aproximadamente) en cada iteración. En el ejemplo, para los valores de n = 6, 7, 8, 9, el número de dı́gitos decimales exactos (ceros en este caso) es 1, 2, 5, 11. ✸ 1.8. Números en un computador Sea x un número real positivo. La representación decimal normalizada de x en un computador, con k cifras significativas, es x̃ = 0.d1d2 · · · dk × 10n donde di es un entero en el intervalo [0, 9] y d1 ≥ 1. El valor k, los valores mı́nimo y máximo permitidos para n, dependen del computador, del sistema operativo o del lenguaje. Una manera aproximada de obtener estos valores en Scilab es la siguiente:
  • 30. 16 CAPÍTULO 1. PRELIMINARES format(30) x = 1/3 El resultado es 0.3333333333333333148296 Únicamente hay 16 dı́gitos correctos, los demás son “basura” producida por Scilab para satisfacer el formato deseado. Esto nos indica que en Scilab, no hay más de 16 cifras significativas, en la representación interna de un número. En relación con el concepto anterior, está el épsilon de la máquina, que se define ası́: εmaq = min{t 0 : 1 + t 6= 1} La anterior definición usa los números utilizados en el computador. Este conjunto de números es finito y la definición tiene sentido. Obviamente, si los valores t se tomaran en R, el valor épsilon de la máquina estarı́a mal definido. Una manera aproximada de obtener el épsilon de la máquina consiste en buscar, por ensayo y error, un valor x tal que 1 + x 1 y 1 + x/10 = 1. La orden x = 1.0e-10; x1 = 1+x; x2 = 1+x/10; (x1 1) (x2 == 1) produce F, false, en cambio, x = 1.0e-15; x1 = 1+x; x2 = 1+x/10; (x1 1) (x2 == 1) produce T true. Esto nos indica que un valor aproximado es justamente 10−15. Scilab tiene un valor predefinido %eps = 2.220E-16 Para averiguar si un número positivo y pequeño es considerado como nulo, se puede ensayar con diferentes valores de la potencia de 10, por ejemplo: x = 1.0e-20; x == 0.0 produce como resultado F, lo que indica que x no es nulo. Al ensayar x = 1.0e-100; x == 0.0 el resultado de nuevo es F. Después de varios ensayos x = 1.0e-323; x == 0.0
  • 31. Héctor M. Mora E. Métodos Numéricos con Scilab 17 produce F y x = 1.0e-324; x == 0.0 produce T, es decir, 10−324 es considerado como nulo. Para no recurrir al método de ensayo y error, se puede utilizar la siguiente secuencia de órdenes: x = 1; while x/10 0.0 x0 = x; x = x/10; end x_final = x0 El resultado obtenido es 9.881-323 . Obsérvese que x toma los valores 1, 1/10, 1/100, ... Sin embargo, el resultado obtenido no es exactamente una potencia de 10. Ahora queremos averiguar qué tan grandes pueden ser los números en Scilab. Ası́, la orden x = 1.0e308 muestra en la pantalla 1.000+308, resultado esperado. La orden x = 1.0e309 muestra en la pantalla Inf , lo que da cuenta de que Scilab considera 10309 como “infinito” y no lo puede manejar adecuadamente. 1.9. Truncamiento y redondeo Sea x un real (supuesto positivo por facilidad de presentación), x̃ = 0.d1d2 · · · dk × 10n su representación normalizada y t, un entero positivo menor que k. El número obtenido por truncamiento con t cifras significativas es x̃′ = 0.d1d2 · · · dt × 10n .
  • 32. 18 CAPÍTULO 1. PRELIMINARES Dicho de otra forma, se quitan los últimos k − t dı́gitos. El redondeo con t cifras significativas se puede presentar de varias maneras equivalentes. Una de ellas es la siguiente: redondeo(x, t) = truncamiento(x̃ + 0. 00 · · · 0 | {z } t−1 5 × 10n ) , t) truncamiento(1234.56789, 2) = 1200 truncamiento(1234.56789, 6) = 1234.56 redondeo(1234.56789, 2) = 1200 redondeo(1234.56789, 6) = 1234.57 Una manera sencilla, que funciona cuando dt ≤ 8, es la siguiente: los primeros t − 1 dı́gitos son los mismos y el dı́gito en la posición t es: δt = ( dt si dt+1 ≤ 4 dt + 1 si dt+1 ≥ 5. Si dt = 9 y dt+1 ≤ 4, entonces δt = dt. Ahora bien, el caso especial se tiene si dt = 9 y dt+1 ≥ 5, entonces se suma 1 a dt = 9, volviéndose 10 y se escribe δt = 0, pero hay que agregar (“llevar”) 1 al dı́gito dt−1, etc. 1.10. Errores absoluto y relativo Si x es un número real y x̃ es una aproximación, se definen el error absoluto (siempre no negativo) y el error relativo cuando x 6= 0, de la siguiente forma: error absoluto = |x − x̃| , error relativo = |x − x̃| |x| . Ejemplo 1.13. Sean x y y números reales, x̃ el redondeo de x con n = 5 cifras significativas, ỹ el redondeo de y con n cifras significativas, z = x − y, z̃ el redondeo de x̃ − ỹ con n cifras significativas, ea el error absoluto entre z y z̃, er el error relativo.
  • 33. Héctor M. Mora E. Métodos Numéricos con Scilab 19 x y x̃ ỹ z z̃ ea er 1/7 2/3 0.14286 0.66667 −11/21 −0.52381 4.8e-7 9.1e-7 1/7 0.14284 0.14286 0.14284 0.00001714... 0.00002 2.9e-6 1.7e-1 En el segundo caso, el error relativo es grande, aproximadamente del 17 %. ✸ Los principales casos en los que los errores pueden ser grandes o que pueden inducir errores grandes, son: 1. Suma de cantidades de tamaños muy diferentes. 2. Resta de cantidades muy parecidas. 3. División por un número cercano a cero. Estos casos, en cuanto sea posible, deben evitarse y, si no es posible, los resultados deben ser interpretados de manera muy cuidadosa. 1.11. Errores lineal y exponencial En los procesos numéricos, muy frecuentemente, es necesario realizar muchas operaciones aritméticas. Sea e0 el error inicial en los datos o en la primera operación y en , el error después de n operaciones. El error inicial incide en las operaciones siguientes y los errores, en la gran mayorı́a de los casos, van aumentando progresivamente. Usualmente se dice que los errores se propagan de dos maneras: Error lineal: en ≈ nce0 Error exponencial: en ≈ cne0, con c 1. Es claro que un error exponencial (propagación exponencial del error) es muy peligroso y no es conveniente utilizar un algoritmo con esta clase de error. Con base en el tipo de error, se habla de algoritmos estables cuando el error es lineal y, de algoritmos inestables cuando el error es exponencial. Ejemplo 1.14. Consideremos la sucesión definida ası́ (ver [KiC94]): x0 = 1 x1 = 1/3 (∗) xn = 13 3 xn−1 − 4 3 xn−2, n ≥ 2.
  • 34. 20 CAPÍTULO 1. PRELIMINARES Se puede demostrar que (∗∗) xn = 1 3n , n = 0, 1, 2, ... La siguiente tabla muestra los valores de x̄n obtenidos en Scilab aplicando la fórmula explı́cita (**), x̃n obtenido por la fórmula de recurrencia (*) con todas las cifras que utiliza Scilab, x̃′ n obtenido por la fórmula de recurrencia (*) pero trabajando con 8 cifras significativas y x̃′′ n obtenido por la fórmula de recurrencia (*) pero usando 4 cifras significativas. n x̄n (**) x̃n (*) x̃′ n 8 cifras x̃′′ n 4 cifras 0 1.00000000 1.00000000 1.00000000 1.00000000 1 0.33333333 0.33333333 0.33333333 0.33330000 2 0.11111111 0.11111111 0.11111110 0.11100000 3 0.03703704 0.03703704 0.03703700 0.03670000 4 0.01234568 0.01234568 0.01234554 0.01100000 5 0.00411523 0.00411523 0.00411468 -0.00126000 6 0.00137174 0.00137174 0.00136954 -0.02012000 7 0.00045725 0.00045725 0.00044843 -0.08550000 8 0.00015242 0.00015242 0.00011715 -0.34370000 9 0.00005081 0.00005081 -0.00009025 -1.37500000 10 0.00001694 0.00001694 -0.00054728 -5.50000000 11 0.00000565 0.00000564 -0.00225123 -22.0000000 12 0.00000188 0.00000188 -0.00902562 -88.0000000 13 0.00000063 0.00000063 -0.03610937 -352.000000 14 0.00000021 0.00000021 -0.14443977 -1408.00000 15 0.00000007 0.00000006 -0.57775985 -5632.00000 16 0.00000002 -0.00000003 -2.31103960 -22520.0000 17 0.00000001 -0.00000020 -9.24415860 -90070.0000 18 0.00000000 -0.00000085 -36.9766340 -360300.000 19 0.00000000 -0.00000340 -147.906540 -1441000.00 20 0.00000000 -0.00001361 -591.626160 -5764000.00 21 0.00000000 -0.00005445 -2366.50460 -23060000.0 25 0.00000000 -0.01393856 -605825.110 -5.904E+09 Se observa que la fórmula de recurrencia es un proceso inestable. La inesta- bilidad se nota más cuando hay menos cifras significativas. ✸
  • 35. Héctor M. Mora E. Métodos Numéricos con Scilab 21 1.12. Condicionamiento de un problema Supongamos que un problema se puede resolver de manera exacta. Se dice que un problema es bien condicionado, si al hacer cambios pequeños en los datos, se obtienen cambios pequeños en la solución. Un problema es mal condicionado, si al hacer cambios pequeños en los datos, puede haber cambios grandes en la solución. Cuando no hay un método exacto de solución, se dice que un problema es mal condicionado si, al hacer cambios pequeños en los datos puede haber cambios grandes en la solución, con todos los métodos utilizados. Ejemplo 1.15. Consideremos el sistema de ecuaciones Ax = b, donde A = 10.01 10.00 10.00 9.99 , b = 20.01 19.99 . La solución exacta de este problema es x = [1 1]T , Consideremos ahora un sistema de ecuaciones muy parecido, Ax′ = b′, única- mente hay cambios pequeños en b, b′ = 20.02 19.98 . La solución exacta de este problema es x′ = [−1998 2002]T , Este problema es mal condicionado, ya que estos cambios pequeños en b produjeron cambios grandes en la solución. ✸ En un problema puede darse el siguiente caso: unos cambios pequeños en los datos producen cambios pequeños en los resultados, pero, otros cambios pequeños en los datos producen cambios grandes en los resultados. De todas maneras el problema es mal condicionado. Más adelante se verá cómo determinar el buen o mal condicionamiento de un sistema de ecuaciones.
  • 36. 22 CAPÍTULO 1. PRELIMINARES 1.13. Teorema de punto fijo de Banach Es un resultado muy importante del análisis matemático. Se aplica en espa- cios métricos. A continuación, están las definiciones previas y su enunciado para el caso particular de un espacio vectorial con norma, más especı́fica- mente para Rn. En el capı́tulo 3 está la definición de norma, denotada por || · ||. Sea f : Rn → Rn una función. Un punto x̄ ∈ Rn es un punto fijo de f si f(x̄) = x̄. Se dice que f es una contracción si existe 0 ≤ k 1, tal que, ||f(x) − f(y)|| ≤ k ||x − y||, ∀ x, y ∈ Rn . Teorema 1.8. Si f : Rn → Rn es una contracción, entonces tiene un único punto fijo x̄. Ver detalles y demostración en [Apo79]. Ejercicios 1.1 Obtenga p2(x), el polinomio de Taylor de orden 2, para f(x) = ex alrededor de x̄ = 0.5. Utilice 6 cifras decimales. Calcule p2(0.7). Por medio de (1.3) obtenga una cota para el error. Compare con el error realmente cometido. 1.2 Como el ejercicio 1, para f(x) = ex, x̄ = 0.5 y p3(0.7). 1.3 Como el ejercicio 1, para f(x) = √ x, x̄ = 1 y p2(1.1). 1.4 Como el ejercicio 1, para f(x) = ln x, x̄ = 1 y p2(0.9). 1.5 Como el ejercicio 1, para f(x) = seng (x) (la función seno para el ángulo en grados), x̄ = 90 y p3(80). 1.6 Sea f(x) = cos(x), x̄ = 0. ¿Cuál es el mı́nimo valor de n para el cual la cota del error según (1.3) es menor o igual a 10−6 para pn(0.1)? 1.7 Sea f(x) = cos(x), x̄ = 0. ¿Cuál es el mayor valor de t para el cual la cota del error según (1.3) es menor o igual a 10−6 para p2(t)?
  • 37. Héctor M. Mora E. Métodos Numéricos con Scilab 23 1.8 Sea x = 0.6. Obtenga su expresión binaria. Sea x̄ la expresión truncada a cuatro dı́gitos binarios (después del punto). ¿Cuáles son los errores absoluto y relativo? Sea x̃ la expresión redondeada a cuatro dı́gitos. ¿Cuáles son los errores absoluto y relativo? Responda las mismas pre- guntas utilizando esta vez 8 dı́gitos.
  • 38. Capı́tulo 2 Sistemas de ecuaciones lineales Uno de los problemas numéricos más frecuentes, o tal vez el más frecuente, consiste en resolver un sistema de ecuaciones de la forma Ax = b (2.1) donde A es una matriz cuadrada, de tamaño n × n, invertible. Esto implica que el sistema tiene una única solución. Se trata de resolver un sistema de ecuaciones de orden mucho mayor que 2. En la práctica se pueden encontrar sistemas de tamaño 20, 100, 1000 o mucho más grandes. Puesto que se trata de resolver el sistema con la ayuda de un computador, entonces las operaciones realizadas involucran errores de redondeo o truncamiento. La solución obtenida no es absolutamente exacta, pero se desea que la acumulación de los errores sea relativamente pequeña o casi despreciable. 2.1. En Scilab Para resolver (2.1) es necesario haber definido una matriz cuadrada a y un vector columna b. La orden es simplemente x = ab Por ejemplo, 24
  • 39. Héctor M. Mora E. Métodos Numéricos con Scilab 25 a = [ 2 3; 4 5], b = [-5; -7], x = ab da como resultado x = 2. - 3. Una manera que también permite obtener la solución es x = inv(a)*b, pero requiere más operaciones y el resultado final es menos preciso puesto que se calcula explı́citamente la inversa de la matriz. Ejemplo 2.1. Las siguientes órdenes de Scilab n = 500; a = rand(n,n); x = rand(n,1); b = a*x; tic() x1 = ab; t_sol = toc(); tic() x2 = inv(a)*b; t_inv = toc(); error1 = norm(x1-x); error2 = norm(x2-x); printf(’t_sol = %f t_inv = %fn’, t_sol, t_inv) printf(’error_sol = %e error_inv = %en’, error1, error2) producen un resultado análogo a t_sol = 0.622000 t_inv = 1.737000 error_sol = 7.990870e-12 error_inv = 1.687945e-11
  • 40. 26 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Estos resultados dependen del computador, del sistema operacional y aún en el mismo computador no son siempre iguales, pero sı́ parecidos. Las funciones tic y toc permiten obtener una medida del tiempo de un proceso. ✸ 2.2. Notación para submatrices en Scilab Sean A una matriz m × n, con elementos aij, i = 1, ...m, j = 1, ..., n y x = (x1, x2, ..., xn). Para denotar filas o columnas, o partes de ellas, se usará la notación de Matlab y Scilab. parte de un vector: x(5 : 7) = (x5, x6, x7), fila i-ésima: Ai· = A(i, :), columna j-ésima: A·j = A(:, j), parte de la fila i-ésima: A(i, 1 : 4) = [ ai1 ai2 ai3 ai4 ] parte de la columna j-ésima: A(2 : 4, j) = [ a2j a3j a4j ]T submatriz: A(3 : 6, 2 : 5) . 2.3. Métodos ingenuos Teóricamente, resolver el sistema Ax = b es equivalente a la expresión x = A−1 b. Es claro que calcular la inversa de una matriz es mucho más dispendioso que resolver un sistema de ecuaciones; entonces, este camino solamente se utiliza en deducciones teóricas o, en muy raros casos, cuando A−1 puede calcularse muy fácilmente. Otro método que podrı́a utilizarse para resolver Ax = b es la regla de Cramer. Para un sistema de orden tres las fórmulas son: x1 = det   b1 a12 a13 b2 a22 a23 b3 a32 a33   det(A) , x2 = det   a11 b1 a13 a21 b2 a23 a31 b3 a33   det(A) , x3 = det   a11 a12 b1 a21 a22 b2 a31 a32 b3   det(A) ·
  • 41. Héctor M. Mora E. Métodos Numéricos con Scilab 27 Supongamos ahora que cada determinante se calcula por medio de cofac- tores. Este cálculo se puede hacer utilizando cualquier fila o cualquier colum- na; por ejemplo, si A es 3 × 3, se puede usar la primera fila, det(A) = a11 det a22 a23 a32 a33 − a12 det a21 a23 a31 a33 + a13 det a21 a22 a31 a32 . En general, sea Aij la matriz (n − 1) × (n − 1), obtenida al suprimir de A la fila i y la columna j. Si se calcula det(A) utilizando la primera fila, det(A) = a11 det(A11) − a12 det(A12) + · · · + (−1)(1+n) a1n det(A1n). Sea µn el número de multiplicaciones necesarias para calcular, por cofactores, el determinante de una matriz de orden n. La fórmula anterior nos indica que µn nµn−1. Como a su vez µn−1 (n − 1)µn−2 y µn−2 (n − 2)µn−3, ..., entonces µn n(n − 1)(n − 2) · · · µ2 = n(n − 1)(n − 2) · · · 2, µn n! . Para resolver un sistema de ecuaciones por la regla de Cramer, hay que calcu- lar n+1 determinantes, luego el número total de multiplicaciones necesarias para resolver un sistema de ecuaciones por la regla de Cramer, calculando los determinantes por cofactores, es superior a (n + 1)!. Tomemos un sistema relativamente pequeño, n = 20, 21! = 5.1091E19. Siendo muy optimistas (sin tener en cuenta las sumas y otras operaciones concomitantes), supongamos que un computador hace 1000 millones de mul- tiplicaciones por segundo. Entonces, el tiempo necesario para resolver un sistema de ecuaciones de orden 20 por la regla de Cramer y el método de cofactores es francamente inmanejable: tiempo 5.1091E10 segundos = 16.2 siglos. 2.4. Sistema diagonal El caso más sencillo de (2.1) corresponde a una matriz diagonal. Para ma- trices triangulares, en particular para las diagonales, el determinante es el
  • 42. 28 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES producto de los n elementos diagonales. Entonces, una matriz triangular es invertible si y solamente si todos los elementos diagonales son diferentes de cero. La solución de un sistema diagonal se obtiene mediante xi = bi aii , i = 1, ..., n. (2.2) Como los elementos diagonales son no nulos, las divisiones pueden efecturase sin problema. 2.5. Sistema triangular superior Resolver un sistema triangular superior, A es triangular superior, es muy sencillo. Antes de ver el algoritmo en el caso general, veamos, por medio de un ejemplo, cómo se resuelve un sistema de orden 4. Ejemplo 2.2. Resolver el siguiente sistema: 4x1 + 3x2 − 2x3 + x4 = 4 −0.25x2 + 2.5x3 + 4.25x4 = −11 45x3 + 79x4 = −203 2.8x4 = −5.6 De la cuarta ecuación, se deduce que x4 = −5.6/2.8 = −2. A partir de la tercera ecuación 45x3 = −203 − (79x4) x3 = −203 − (79x4) 45 · Reemplazando x4 por su valor, se obtiene x3 = −1. A partir de la segunda ecuación −0.25x2 = −11 − (2.5x3 + 4.25x4) x2 = −11 − (2.5x3 + 4.25x4) −0.25 · Reemplazando x3 y x4 por sus valores, se obtiene x2 = 0. Finalmente, uti- lizando la primera ecuación, 4x1 = 4 − (3x2 − 2x3 + x4) x1 = 4 − (3x2 − 2x3 + x4) 4 ·
  • 43. Héctor M. Mora E. Métodos Numéricos con Scilab 29 Reemplazando x2, x3 y x4 por sus valores, se obtiene x1 = 1. ✸ En general, para resolver un sistema triangular, primero se calcula xn = bn/ann. Con este valor se puede calcular xn−1, y ası́ sucesivamente. Conoci- dos los valores xi+1, xi+2, ..., xn, la ecuación i-ésima es aiixi + ai,i+1xi+1 + ai,i+2xi+2 + ... + ainxn = bi, aiixi + A(i, i + 1 : n) x(i + 1 : n) = bi, xi = bi − A(i, i + 1 : n) x(i + 1 : n) aii . Como se supone que A es regular (invertible o no singular), los elementos diagonales son no nulos y no se presentan problemas al efectuar la división. El esquema del algoritmo es el siguiente: Solución de un sistema triangular xn = bn/ann para i = n − 1, ..., 1 xi = (bi − A(i, i + 1 : n) x(i + 1 : n))/aii fin-para Esto se puede escribir en Scilab x(n) = b(n)/a(n,n) for i = n-1:-1:1 x(i) = ( b(i) - a(i,i+1:n)*x(i+1:n) )/a(i,i) end La función completa podrı́a ser ası́: function [x, res] = solTriSup(a, b, eps) // // Solucion del sistema triangular superior a x = b. // // a es una matriz triangular superior // b es un vector columna // eps es una valor positivo pequeno // (parametro opcional).
  • 44. 30 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES // res valdra 0 si el valor absoluto de un elemento // diagonal de a es menor o igual a eps // 1 si todo funciono bien. // x sera un vector columna con la solucion, si res = 1. // // Esta funcion trabaja unicamente con la parte triangular // superior de a y no verifica si realmente es triangular // superior. if argn(2) 3, eps = 1.0e-10, end x = [] res = 0 if min(abs(diag(a))) = eps, return, end res = 1 n = size(a,1) x = zeros(n,1) x(n) = b(n)/a(n,n) for k = n-1:-1:1 x(k) = (b(k) - a(k,k+1:n)*x(k+1:n) )/a(k,k) end endfunction Teniendo en cuenta las buenas caracterı́sticas de Scilab, la función anterior se puede escribir de manera más abreviada. Sea u = [ 2 3 5 7 11 13]’. La orden v = u(4:2) produce un vector “vacı́o”, es decir, [ ]. Además, s = 3.1 - u(4:2)*u(6:5) asignará a s el valor 3.1. Entonces, el cálculo de x(n) se puede hacer dentro del for : for k = n:-1:1 x(k) = (b(k) - a(k,k+1:n)*x(k+1:n) )/a(k,k) end
  • 45. Héctor M. Mora E. Métodos Numéricos con Scilab 31 2.5.1. Número de operaciones Una de las maneras de medir la rapidez o lentitud de un método es medi- ante el conteo del número de operaciones. Usualmente se tienen en cuen- ta las sumas, restas, multiplicaciones y divisiones entre números de punto flotante, aunque hay más operaciones fuera de las anteriores, por ejemplo, las comparaciones y las operaciones entre enteros. Las cuatro operaciones se conocen con el nombre genérico de operaciones de punto flotante flops (floating point operations). Algunas veces se hacen dos grupos: por un lado, sumas y restas, y por otro, multiplicaciones y divisiones. Si se supone que el tiempo necesario para efectuar una multiplicación es bastante mayor que el tiempo de una suma, entonces se acostumbra a dar el número de mul- tiplicaciones (o divisiones). El diseño de los procesadores actuales muestra tendencia al hecho de que los dos tiempos sean comparables. Entonces, se acostumbra a evaluar el número de flops. Sumas y restas Multiplicaciones y divisiones cálculo de xn 0 1 cálculo de xn−1 1 2 cálculo de xn−2 2 3 ... cálculo de x2 n − 2 n − 1 cálculo de x1 n − 1 n Total n2/2 − n/2 n2/2 + n/2 Número total de operaciones de punto flotante: n2. 2.6. Sistema triangular inferior La solución de un sistema triangular inferior Ax = b, A triangular inferior, es análoga al caso de un sistema triangular superior. Primero se calcula x1, después x2, enseguida x3 y ası́ sucesivamente hasta xn. xi = bi − i−1 X j=1 aijxj aii · (2.3)
  • 46. 32 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES El esquema del algoritmo es el siguiente: para i = 1, ..., n xi = (bi − A(i, 1 : i − 1) x(1 : i − 1))/aii fin-para El número de operaciones es exactamente el mismo del caso triangular su- perior. 2.7. Método de Gauss El método de Gauss para resolver el sistema Ax = b tiene dos partes; la primera es la triangularización del sistema, es decir, por medio de opera- ciones elementales, se construye un sistema A′ x = b′ , (2.4) equivalente al primero, tal que A′ sea triangular superior. Que los sistemas sean equivalentes quiere decir que la solución de Ax = b es exactamente la misma solución de A′x = b′. La segunda parte es simplemente la solución del sistema triangular superior. Para una matriz, con ı́ndices entre 1 y n, el esquema de triangularización se puede escribir ası́: para k = 1, ..., n − 1 buscar ceros en la columna k, por debajo de la diagonal. fin-para k Afinando un poco más: para k = 1, ..., n − 1 para i = k + 1, ..., n buscar ceros en la posición de aik. fin-para i fin-para k
  • 47. Héctor M. Mora E. Métodos Numéricos con Scilab 33 Ejemplo 2.3. Consideremos el siguiente sistema de ecuaciones: 4x1 + 3x2 − 2x3 + x4 = 4 3x1 + 2x2 + x3 + 5x4 = −8 −2x1 + 3x2 + x3 + 2x4 = −7 −5x1 + x3 + x4 = −8 En forma matricial se puede escribir:     4 3 −2 1 3 2 1 5 −2 3 1 2 −5 0 1 1         x1 x2 x3 x4     =     4 −8 −7 −8     Es usual trabajar únicamente con los números, olvidando temporalmente los xi. Más aún, se acostumbra trabajar con una matriz ampliada, resultado de pegar a la derecha de A el vector b.     4 3 −2 1 3 2 1 5 −2 3 1 2 −5 0 1 1 4 −8 −7 −8     Inicialmente, hay que buscar ceros en la primera columna. Para buscar cero en la posición (2,1), fila 2 y columna 1, se hace la siguiente operación: fila2nueva ← fila2vieja − (3/4)∗fila1 Para hacer más sencilla la escritura, la expresión anterior se escribirá sim- plemente: fila2 ← fila2 − (3/4)∗fila1     4 3 -2 1 4 0 -0.25 2.5 4.25 -11 -2 3 1 2 -7 -5 0 1 1 -8     Para buscar cero en la posición (3,1), se hace la siguiente operación: fila3 ← fila3 − (−2/4)∗fila1     4 3 -2 1 4 0 -0.25 2.5 4.25 -11 0 4.5 0 2.5 -5 -5 0 1 1 -8    
  • 48. 34 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Para buscar cero en la posición (4,1) se hace la siguiente operación: fila4 ← fila4 − (−5/4)∗fila1     4 3 -2 1 4 0 -0.25 2.5 4.25 -11 0 4.5 0 2.5 -5 0 3.75 -1.5 2.25 -3     Ahora hay que buscar ceros en la segunda columna. Para buscar cero en la posición (3,2) se hace la siguiente operación: fila3 ← fila3 − (4.5/(−0.25))∗fila2     4 3 -2 1 4 0 -0.25 2.5 4.25 -11 0 0 45 79 -203 0 3 -1.5 2.25 -3     Para buscar cero en la posición (4,2), se hace siguiente operación: fila4 ← fila4 − (3.75/(−0.25))∗fila2     4 3 -2 1 4 0 -0.25 2.5 4.25 -11 0 0 45 79 -203 0 0 36 66 -168     Para buscar cero en la posición (4,3) se hace la siguiente operación: fila4 ← fila4 − (36/45)∗fila3     4 3 -2 1 4 0 -0.25 2.5 4.25 -11 0 0 45 79 -203 0 0 0 2.8 -5.6     El sistema resultante ya es triangular superior. Entonces, se calcula primero x4 = −5.6/2.8 = −2. Con este valor, utilizando la tercera ecuación resul- tante, se calcula x3, después x2 y x1. x = (1, 0, −1, −2). ✸
  • 49. Héctor M. Mora E. Métodos Numéricos con Scilab 35 De manera general, cuando ya hay ceros por debajo de la diagonal, en las columnas 1, 2, ..., k − 1, para obtener cero en la posición (i, k) se hace la operación filai ← filai − (aik/akk)∗filak Lo anterior se puede reescribir ası́: lik = aik/akk A(i, :) = A(i, :) − lik ∗ A(k, :) bi = bi − lik ∗ bk Como en las columnas 1, 2, ..., k − 1 hay ceros, tanto en la fila k como en la fila i, entonces ai1, ai2, ..., ai,k−1 seguirán siendo cero. Además, las operaciones se hacen de tal manera que aik se vuelva cero. Entonces, aik no se calcula puesto que dará 0. Luego, los cálculos se hacen en la fila i a partir de la columna k + 1. lik = aik/akk aik = 0 A(i, k + 1 : n) = A(i, k + 1 : n) − lik ∗ A(k, k + 1 : n) bi = bi − lik ∗ bk En resumen, el esquema de la triangularización es: Triangularización del sistema para k = 1, ..., n − 1 para i = k + 1, ..., n lik = aik/akk, aik = 0 A(i, k + 1 : n) = A(i, k + 1 : n)−lik∗A(k, k + 1 : n) bi = bi−lik∗bk fin-para i fin-para k Este esquema funciona, siempre y cuando no aparezca un pivote, akk, nulo o casi nulo. Cuando aparezca es necesario buscar un elemento no nulo en el resto de la columna. Si, en el proceso de triangularización, toda la columna A(k : n, k) es nula o casi nula, entonces A es singular.
  • 50. 36 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES para k = 1, ..., n − 1 si |akk| ≤ ε ent buscar m, k + 1 ≤ m ≤ n, tal que |amk| ε si no fue posible ent salir intercambiar(A(k, k : n), A(m, k : n)) intercambiar(bk, bm) fin-si para i = k + 1, ..., n lik = aik/akk, aik = 0 A(i, k + 1 : n) = A(i, k + 1 : n)−lik∗A(k, k + 1 : n) bi = bi−lik∗bk fin-para i fin-para k si |ann| ≤ ε ent salir Cuando en un proceso una variable toma valores enteros desde un lı́mite inferior hasta un lı́mite superior, y el lı́mite inferior es mayor que el lı́mite superior, el proceso no se efectúa. Ası́, en el algoritmo anterior se puede hacer variar k, en el bucle externo, entre 1 y n, y entonces no es necesario controlar si ann ≈ 0 ya que, cuando k = n, no es posible buscar m entre n + 1 y n. Triangularización con control de pivote para k = 1, ..., n si |akk| ≤ ε ent buscar m, k + 1 ≤ m ≤ n, tal que |amk| ε si no fue posible ent salir intercambiar(A(k, k : n), A(m, k : n)) intercambiar(bk, bm) fin-si para i = k + 1, ..., n lik = aik/akk, aik = 0 A(i, k + 1 : n) = A(i, k + 1 : n)−lik∗A(k, k + 1 : n) bi = bi−lik∗bk fin-para i fin-para k function [a, b, indic] = triangulariza(a, b, eps) // Triangulariza un sistema de ecuaciones
  • 51. Héctor M. Mora E. Métodos Numéricos con Scilab 37 // con matriz invertible. // // indic valdra 1 si todo funciono bien, // 0 si la matriz es singular o casi. // n = size(a,1) if argn(2) 3, eps = 1.0e-10, end for k=1:n if abs(a(k,k)) = eps m = posNoNulo(a, k) if m == 0 indic = 0 return end t = a(k,k:n) a(k,k:n) = a(m,k:n) a(m,k:n) = t t = b(k) b(k) = b(m) b(m) = t end for i=k+1:n lik = a(i,k)/a(k,k) a(i,k) = 0 a(i,k+1:n) = a(i,k+1:n) - lik*a(k,k+1:n) b(i) = b(i) - lik*b(k) end end indic = 1 endfunction //---------------------------------------------------------- function m = posNoNulo(a, k, eps) // Busca la posicion del primer elemento no nulo en la // columna k, debajo de la diagonal. // // Si no es posible encontrarlo, m valdra 0. // if argn(2) 3, eps = 1.0e-10, end n = size(a,1) for i = k+1:n
  • 52. 38 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES if abs(a(i,k)) = eps m = i return end end m = 0 endfunction //---------------------------------------------------------- function [x, indic] = Gauss(a, b, eps) // Solucion de un sistema de ecuaciones // por el metodode Gauss. // // indic valdra 1 si todo funciono bien, // en este caso el vector columna x // sera la solucion. // 0 si la matriz es singular o casi // -1 los tamanos son incompatibles. // indic = -1 x = [] n = verifTamanoAb(a, b) if n == 0, return, end if argn(2) 3, eps = 1.0e-10, end indic = 0 x = [] [a, b, res] = triangulariza(a, b, eps) if res == 0, return, end indic = 1 x = solTriSup(a, b, eps) endfunction //---------------------------------------------------------- function n = verifTamanoAb(a, b) // Esta funcion verifica si los tamanos de a, b // corresponden a un sistema cuadrado a x = b. // Devuelve n (num. de filas) si todo esta bien, // devuelve 0 si hay errores.
  • 53. Héctor M. Mora E. Métodos Numéricos con Scilab 39 [n1, n2] = size(a) [n3, n4] = size(b) if n1 n2 | n1 n3 | n4 1 | n1 1 printf(’nTamanos inadecuados.nn’) n = 0 else n = n1 end endfunction 2.7.1. Número de operaciones En el método de Gauss hay que tener en cuenta el número de operaciones de cada uno de los dos procesos: triangularización y solución del sistema triangular. Triangularización Consideremos inicialmente la búsqueda de cero en la posición (2, 1). Para efectuar A(2, 2 : n) = A(2, 2 : n) − lik ∗ A(1, 2 : n) es necesario hacer n − 1 sumas y restas. Para b2 = b2−lik∗b1 es necesario una resta. En resumen, n sumas (o restas). Multiplicaciones y divisiones: una división para calcular lik; n − 1 multiplicaciones para lik ∗ A(1, 2 : n) y una para lik∗b1. En resumen, n + 1 multiplicaciones (o divisiones). Para obtener un cero en la posición (3, 1) se necesita exactamente el mis- mo número de operaciones. Entonces, para la obtener ceros en la primera columna: Sumas y restas Multiplicaciones y divisiones cero en la posición de a21 n n + 1 cero en la posición de a31 n n + 1 ... cero en la posición de an1 n n + 1 Total para la columna 1 (n − 1)n (n − 1)(n + 1) Un conteo semejante permite ver que se requieren n − 1 sumas y n multipli- caciones para obtener un cero en la posición de a32. Para buscar ceros en la columna 2 se van a necesitar (n−2)(n−1) sumas y (n−2)n multiplicaciones.
  • 54. 40 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Sumas y restas Multiplicaciones y divisiones ceros en la columna 1 (n − 1)n (n − 1)(n + 1) ceros en la columna 2 (n − 2)(n − 1) (n − 2)n ceros en la columna 3 (n − 3)(n − 2) (n − 3)(n − 1) ... ceros en la columna n − 2 2(3) 2(4) ceros en la columna n − 1 1(2) 1(3) Es necesario utilizar el resultado m X i=1 i2 = m(m + 1)(2m + 1) 6 · Número de sumas y restas: n−1 X i=1 i(i + 1) = n−1 X i=1 (i2 + i) = n3 3 − n 3 ≈ n3 3 · Número de multiplicaciones y divisiones: n−1 X i=1 i(i + 2) = n−1 X i=1 (i2 + 2i) = n3 3 + n2 2 − 5n 6 ≈ n3 3 · Número de operaciones: n3 3 − n 3 + n3 3 + n2 2 − 5n 6 = 2n3 3 + n2 2 − 7n 6 ≈ 2n3 3 · Proceso completo El número de operaciones para las dos partes, triangularización y solución del sistema triangular, es 2n3 3 + 3n2 2 − 7n 6 ≈ 2n3 3 · Para valores grandes de n el número de operaciones de la solución del sis- tema triangular es despreciable con respecto al número de operaciones de la triangularización.
  • 55. Héctor M. Mora E. Métodos Numéricos con Scilab 41 2.8. Factorización LU Si durante el proceso del método de Gauss no fue necesario intercambiar filas, entonces se puede demostrar que se obtiene fácilmente la factorización A = LU, donde L es una matriz triangular inferior con unos en la diagonal y U es una matriz triangular superior. La matriz U es simplemente la matriz triangular superior obtenida al final del proceso. Para el ejemplo anterior: U =     4 3 -2 1 0 -0.25 2.5 4.25 0 0 45 79 0 0 0 2.8     La matriz L, con unos en la diagonal, va a estar formada simplemente por los coeficientes lik= lik = aik/akk. L =        1 0 0 · · · 0 l21 1 0 · · · 0 l31 l32 1 · · · 0 . . . ... . . . ln1 ln2 ln3 · · · 1        Siguiendo con el ejemplo: L =     1 0 0 0 0.75 1 0 0 -0.5 -18 1 0 -1.25 -15 0.8 1     En este ejemplo, fácilmente se comprueba que LU = A. Esta factorización es útil para resolver otro sistema Ax = b̃, exactamente con la misma matriz de coeficientes, pero con diferentes términos independientes. Ax = b̃, LUx = b̃, Ly = b̃, donde Ux = y. En resumen:
  • 56. 42 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Resolver Ly = b̃ para obtener y. Resolver Ux = y para obtener x. Ejemplo 2.4. Resolver 4x1 + 3x2 − 2x3 + x4 = 8 3x1 + 2x2 + x3 + 5x4 = 30 −2x1 + 3x2 + x3 + 2x4 = 15 −5x1 + x3 + x4 = 2 Al resolver     1 0 0 0 0.75 1 0 0 -0.5 -18 1 0 -1.25 -15 0.8 1         y1 y2 y3 y4     =     8 30 15 2     se obtiene y = 8 24 451 11.2 T . Al resolver     4 3 -2 1 0 -0.25 2.5 4.25 0 0 45 79 0 0 0 2.8         x1 x2 x3 x4     =     8.0 24.0 451.0 11.2     se obtiene la solución final x = 1 2 3 4 T . ✸ Resolver un sistema triangular, con unos en la diagonal, requiere n2 −n ≈ n2 operaciones. Entonces, para resolver un sistema adicional, con la misma matriz A, se requiere efectuar aproximadamente 2n2 operaciones, en lugar de 2n3/3 operaciones, las cuales se requerirı́an si se volviera a empezar el proceso. La factorización A = LU es un subproducto gratuito del método de Gauss; gratuito en tiempo y en requerimientos de memoria. No se requiere tiempo adicional, puesto que el cálculo de los lik se hace dentro del método de Gauss. Tampoco se requiere memoria adicional ya que los valores lik se pueden ir almacenando en A en el sitio de aik que justamente vale cero. En el algoritmo hay únicamente un pequeño cambio:
  • 57. Héctor M. Mora E. Métodos Numéricos con Scilab 43 . . . lik = aik/akk aik = lik A(i, k + 1 : n − 1) = A(i, k + 1 : n − 1)−lik∗A(k, k + 1 : n − 1) bi = bi−lik∗bk . . . En la matriz final A estará la información indispensable de L y de U. L =        u11 u12 u13 · · · u1n l21 u22 u23 · · · u2n l31 l32 u31 · · · u3n . . . ... . . . ln1 ln2 ln3 · · · unn        En el ejemplo anterior, la matriz final con información de L y de U es:     4 3 -2 1 0.75 -0.25 2.5 4.25 -0.5 -18 45 79 -1.25 -15 0.8 2.8     2.9. Método de Gauss con pivoteo parcial En el método de Gauss clásico, únicamente se intercambian filas cuando el pivote, akk, es nulo o casi nulo. Como el pivote (el elemento akk en la iteración k) será divisor para el cálculo de lik, y como el error de redondeo o de truncamiento se hace mayor cuando el divisor es cercano a cero, entonces es muy conveniente buscar que el pivote sea grande en valor absoluto. Es decir, hay que evitar los pivotes que sin ser nulos son cercanos a cero. En el método de Gauss con pivoteo parcial se busca el elemento dominante, o sea, el de mayor valor absoluto en la columna k de la diagonal hacia abajo, es decir, entre los valores |akk|, |ak+1,k|, |ak+2,k|, ..., |akn|, y se intercambian la fila k y la fila del valor dominante. Esto mejora notablemente, en muchos casos, la precisión de la solución final obtenida. Se dice que el pivoteo es total si en la iteración k se busca el mayor valor de {|aij| : k ≤ i, j ≤ n}. En este caso, es necesario intercambiar dos filas y dos columnas. Ası́ se consigue mejorar un poco la precisión con respecto al
  • 58. 44 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES método de pivoteo parcial, pero a un costo nada despreciable. En el método de pivoteo parcial se busca el mayor valor entre n−k+1 valores. En el pivoteo total se busca entre (n−k+1)2 valores. Si se busca, de manera secuencial, el máximo entre p elementos, entonces hay que hacer, además de operaciones de asignación, por lo menos p − 1 comparaciones. Estas operaciones no son de punto flotante y son más rápidas que ellas, pero para n grande, el tiempo utilizado no es despreciable. En el método de pivoteo parcial hay aproximadamente n2/2 comparaciones; en el pivoteo total, aproximadamente n3/6. En resumen, con el pivoteo total se gana un poco de precisión, pero se gasta mucho más tiempo. El balance aconseja preferir el pivoteo parcial. Triangularización con pivoteo parcial para k = 1, ..., n buscar m, tal que |amk| = max{|akk|, |ak+1,k|, ..., |ank|} si |amk| ≤ ε ent salir si m k ent intercambiar(A(k, k : n), A(m, k : n)) intercambiar(bk, bm) fin-si para i = k + 1, ..., n lik = aik/akk, aik = 0 A(i, k + 1 : n) = A(i, k + 1 : n)−lik∗A(k, k + 1 : n) bi = bi−lik∗bk fin-para i fin-para k Ejemplo 2.5. Resolver por el método de Gauss con pivoteo parcial el si- guiente sistema de ecuaciones. 4x1 + 3x2 − 2x3 + x4 = 4 3x1 + 2x2 + x3 + 5x4 = −8 −2x1 + 3x2 + x3 + 2x4 = −7 −5x1 + x3 + x4 = −8 La matriz aumentada es:     4 3 -2 1 4 3 2 1 5 -8 -2 3 1 2 -7 -5 0 1 1 -8    
  • 59. Héctor M. Mora E. Métodos Numéricos con Scilab 45 El valor dominante de A(1 : 4, 1) es −5 y está en la fila 4. Entonces, se intercambian las filas 1 y 4.     -5 0 1 1 -8 3 2 1 5 -8 -2 3 1 2 -7 4 3 -2 1 4     Buscar ceros en las posiciones de a21, a31, a41 se hace de la manera habitual usando los valores de lik= 3/(−5) = −0.6, 0.4 y −0.8. Se obtiene     -5 0 1 1 -8 0 2 1.6 5.6 -12.8 0 3 0.6 1.6 -3.8 0 3 -1.2 1.8 -2.4     El valor dominante de A(2 : 4, 2) es 3 y está en la fila 3 (o en la fila 4). Entonces, se intercambian las filas 2 y 3.     -5 0 1 1 -8 0 3 0.6 1.6 -3.8 0 2 1.6 5.6 -12.8 0 3 -1.2 1.8 -2.4     Buscar ceros en las posiciones de a32 y de a42 se hace usando los valores de lik= 2/3 = 0.6666 y 1. Se obtiene     -5 0 1 1 -8 0 3 0.6 1.6 -3.8 0 0 1.2 4.5333 -10.2667 0 0 -1.8 0.2 1.4     Hay que intercambiar las filas 3 y 4.     -5 0 1 1 -8 0 3 0.6 1.6 -3.8 0 0 -1.8 0.2 1.4 0 0 1.2 4.5333 -10.2667     El valor de lik es 1.2/(−1.8) = −0.6667. Se obtiene     -5 0 1 1 -8 0 3 0.6 1.6 -3.8 0 0 -1.8 0.2 1.4 0 0 0 4.6667 -9.3333    
  • 60. 46 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Al resolver el sistema triangular superior, se encuentra la solución: x = (1, 0, −1, −2) . ✸ En Scilab, la búsqueda del valor dominante y su fila se puede hacer mediante: [vmax, posMax] = max(abs(a(k:n,k))) m = k - 1 + posMax if vmax = eps, indic = 0, return, end El ejemplo anterior sirve simplemente para mostrar el desarrollo del método de Gauss con pivoteo parcial, pero no muestra sus ventajas. El ejemplo si- guiente, tomado de [Atk78], se resuelve inicialmente por el método de Gauss sin pivoteo y después con pivoteo parcial. Los cálculos se hacen con cuatro cifras decimales. 0.729x1 + 0.81x2 + 0.9x3 = 0.6867 x1 + x2 + x3 = 0.8338 1.331x1 + 1.21x2 + 1.1x3 = 1 Tomando cuatro cifras decimales de la solución exacta: x = ( 0.2245, 0.2814, 0.3279 ). Al resolver el sistema por el método de Gauss, con cuatro cifras decimales y sin pivoteo, resultan los siguientes pasos:   0.7290 0.8100 0.9000 0.6867 1.0000 1.0000 1.0000 0.8338 1.3310 1.2100 1.1000 1.0000   Con lik = 1.3717 y con lik = 1.8258 se obtiene   0.7290 0.8100 0.9000 0.6867 0.0000 -0.1111 -0.2345 -0.1081 0.0000 -0.2689 -0.5432 -0.2538   Con lik = 2.4203 se obtiene   0.7290 0.8100 0.9000 0.6867 0.0000 -0.1111 -0.2345 -0.1081 0.0000 0.0000 0.0244 0.0078  
  • 61. Héctor M. Mora E. Métodos Numéricos con Scilab 47 La solución del sistema triangular es: x = ( 0.2163, 0.2979, 0.3197 ). Sea x∗ la solución exacta del sistema Ax = b. Para comparar x1 y x2, dos aproximaciones de la solución, se calculan sus distancias a x∗: kx1 − x∗ k , kx2 − x∗ k. Si kx1 − x∗k kx2 − x∗k, entonces x1 aproxima mejor a x∗ que x2. Cuando no se conoce x∗, se utiliza la norma del vector residuo o resto, r = Ax−b. Si x es la solución exacta, entonces la norma de su resto vale cero. Entonces, hay que comparar kAx1 − bk , kAx2 − bk. Para la solución obtenida por el método de Gauss, sin pivoteo, kAx − bk = 1.0357e-004 , kx − x∗ k = 0.0202 . En seguida está el método de Gauss con pivoteo parcial, haciendo cálculos con 4 cifras decimales.   0.7290 0.8100 0.9000 0.6867 1.0000 1.0000 1.0000 0.8338 1.3310 1.2100 1.1000 1.0000   Intercambio de las filas 1 y 3:   1.3310 1.2100 1.1000 1.0000 1.0000 1.0000 1.0000 0.8338 0.7290 0.8100 0.9000 0.6867   Con lik = 0.7513 y con lik = 0.5477 se obtiene   1.3310 1.2100 1.1000 1.0000 0.0000 0.0909 0.1736 0.0825 0.0000 0.1473 0.2975 0.1390   Intercambio de las filas 2 y 3.   1.3310 1.2100 1.1000 1.0000 0.0000 0.1473 0.2975 0.1390 0.0000 0.0909 0.1736 0.0825  
  • 62. 48 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Con lik = 0.6171 se obtiene   1.3310 1.2100 1.1000 1.0000 0.0000 0.1473 0.2975 0.1390 0.0000 0.0000 -0.0100 -0.0033   La solución del sistema triangular da: x = ( 0.2267, 0.2770, 0.3300 ). El cálculo del residuo y la comparación con la solución exacta da: kAx − bk = 1.5112e-004 , kx − x∗ k = 0.0053 . En este ejemplo, se observa que la norma del residuo es del mismo orden de magnitud que la norma del residuo correspondiente a la solución obtenida sin pivoteo, aunque algo mayor. La comparación directa con la solución exacta favorece notablemente al método de pivoteo parcial: 0.0053 y 0.0202, relación de 1 a 4, aproximadamente. Además, “visualmente” se observa la mejor calidad de la solución obtenida con pivoteo. 2.10. Factorización LU=PA Si se aplica el método de Gauss con pivoteo parcial muy probablemente se hace, por lo menos, un intercambio de filas y no se puede obtener la factorización A = LU, pero sı́ se puede obtener la factorización LU = PA. Las matrices L y U tienen el mismo significado de la factorización LU. P es una matriz de permutación, es decir, se obtiene mediante permutación de filas de la matriz identidad, I. Si P y Q son matrices de permutación, entonces: PQ es una matriz de permutación. P−1 = PT (P es ortogonal). PA es una permutación de las filas de A. AP es una permutación de las columnas de A.
  • 63. Héctor M. Mora E. Métodos Numéricos con Scilab 49 Una matriz de permutación P se puede representar de manera más compacta por medio de un vector p ∈ Rn con la siguiente convención: Pi· = Ipi· En palabras, la fila i de P es simplemente la fila pi de I. Obviamente, p debe cumplir: pi ∈ {1, 2, 3, ..., n} ∀i pi 6= pj ∀i 6= j. Por ejemplo, p = (2, 4, 3, 1) representa la matriz P =     0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0     . De la misma forma que en la factorización LU, los valores lik se almacenan en el sitio donde se anula el valor aik. El vector p inicialmente es (1, 2, 3, ..., n). A medida que se intercambian las filas de la matriz, se intercambian las componentes de p. Ejemplo 2.6. Obtener la factorización LU = PA, donde A =     4 3 -2 1 3 2 1 5 -2 3 1 2 -5 0 1 1     . Inicialmente p = (1, 2, 3, 4). Para buscar el mejor pivote, se intercambian las filas 1 y 4. p = (4, 2, 3, 1),     -5 0 1 1 3 2 1 5 -2 3 1 2 4 3 -2 1     . Buscando ceros en la primera columna y almacenando allı́ los valores lik se obtiene:     -5 0 1 1 -0.6 2 1.6 5.6 0.4 3 0.6 1.6 -0.8 3 -1.2 1.8     .
  • 64. 50 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Para buscar el mejor pivote, se intercambian las filas 2 y 3. p = (4, 3, 2, 1),     -5 0 1 1 0.4 3 0.6 1.6 -0.6 2 1.6 5.6 -0.8 3 -1.2 1.8     . Buscando ceros en la segunda columna y almacenando allı́ los valores lik se obtiene:     -5 0 1 1 0.4 3 0.6 1.6 -0.6 0.6667 1.2 4.5333 -0.8 1 -1.8 0.2     . Para buscar el mejor pivote, se intercambian las filas 3 y 4. p = (4, 3, 1, 2),     -5 0 1 1 0.4 3 0.6 1.6 -0.8 1 -1.8 0.2 -0.6 0.6667 1.2 4.5333     . Buscando ceros en la tercera columna y almacenando allı́ los valores lik se obtiene:     -5 0 1 1 0.4 3 0.6 1.6 -0.8 1 -1.8 0.2 -0.6 0.6667 -0.6667 4.6667     . En esta última matriz y en el arreglo p está toda la información necesaria para obtener L, U, P. Entonces: L =     1 0 0 0 0.4 1 0 0 -0.8 1 1 0 -0.6 0.6667 -0.6667 1     , U =     -5 0 1 1 0 3 0.6 1.6 0 0 -1.8 0.2 0 0 0 4.6667     , P =     0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0     . ✸
  • 65. Héctor M. Mora E. Métodos Numéricos con Scilab 51 Si se desea resolver el sistema Ax = b a partir de la descomposición PA = LU, se obtiene P−1LUx = b, o sea, PT LUx = b. Sean z = LUx y y = Ux. La solución de Ax = b tiene tres pasos: Resolver PT z = b, o sea, z = Pb. Resolver Ly = z. Resolver Ux = y. Ejemplo 2.7. Para la matriz A del ejemplo anterior, resolver Ax = b con b = [4 − 8 − 7 − 8]T . z = Pb =     -8 -7 4 -8     Ly = z , entonces y =     -8 -3.8 1.4 -9.3333     Ux = y , entonces x =     1 0 -1 -2     ✸ En Scilab, la factorización se puede obtener mediante la orden [L, U, P] = lu(A) 2.11. Método de Cholesky Este método sirve para resolver el sistema Ax = b cuando la matriz A es definida positiva (también llamada positivamente definida). Este tipo de matrices se presenta en problemas especı́ficos de ingenierı́a y fı́sica, princi- palmente.
  • 66. 52 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES 2.11.1. Matrices definidas positivas Una matriz simétrica es definida positiva si xT Ax 0, ∀ x ∈ Rn , x 6= 0. (2.5) Para una matriz cuadrada cualquiera, xT Ax = x1 x2 . . . xn     a11 a12 . . . a1n a21 a22 . . . a2n an1 an2 . . . ann         x1 x2 . . . xn     = x1 x2 . . . xn     a11x1 + a12x2 + · · · + a1nxn a21x1 + a22x2 + · · · + a2nxn an1x1 + an2x2 + · · · + annxn     = n X i=1 n X j=i aijxixj. Si A es simétrica, xT Ax = n X i=1 aiix2 i + 2 n−1 X i=1 n X j=i+1 aijxixj. Ejemplo 2.8. Sea I la matriz identidad de orden n. Entonces, xT Ix = xT x = kxk2. Luego, la matriz I es definida positiva. ✸ Ejemplo 2.9. Sea A la matriz nula de orden n. Entonces, xT 0 x = 0. Luego, la matriz nula no es definida positiva. ✸ Ejemplo 2.10. Sea A = 1 2 2 5 . xT Ax = x2 1 + 5x2 2 + 4x1x2 = x2 1 + 4x1x2 + 4x2 2 + x2 2 = (x1 + 2x2)2 + x2 2. Obviamente xT Ax ≥ 0. Además xT Ax = 0 si y solamente si los dos sumandos son nulos, es decir, si y solamente si x2 = 0 y x1 = 0, o sea, cuando x = 0. Luego, A es definida positiva. ✸
  • 67. Héctor M. Mora E. Métodos Numéricos con Scilab 53 Ejemplo 2.11. Sea A = 1 2 2 4 . xT Ax = x2 1 + 4x2 2 + 4x1x2 = (x1 + 2x2)2 . Obviamente xT Ax ≥ 0. Pero si x = (6, −3), entonces xT Ax = 0. Luego, A no es definida positiva. ✸ Ejemplo 2.12. Sea A = 1 2 2 3 . xT Ax = x2 1 + 3x2 2 + 4x1x2 = (x1 + 2x2)2 − x2 2. Si x = (6, −3), entonces xT Ax = −9. Luego, A no es definida positiva. ✸ Ejemplo 2.13. Sea A = 1 2 3 4 . Como A no es simétrica, entonces no es definida positiva. ✸ Sean λ1, λ2, . . . , λn los valores propios de A. Si A es simétrica, entonces todos sus valores propios son reales. Sea δi el determinante de la submatriz de A, de tamaño i × i, obtenida al quitar de A las filas i + 1, i + 2, ..., n y las columnas i + 1, i + 2, ..., n. O sea, δ1 = det([a11]) = a11, δ2 = det a11 a12 a21 a22 , δ3 = det   a11 a12 a13 a21 a22 a13 a31 a32 a33   , . . . δn = det(A).
  • 68. 54 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES La definición 2.5 tiene relación directa con el nombre matriz definida posi- tiva. Sin embargo, no es una manera fácil o práctica de saber cuándo una matriz simétrica es definida positiva, sobre todo si A es grande. El teorema siguiente presenta algunas de las caracterizaciones de las matrices definidas positivas. Para matrices pequeñas (n ≤ 4), la caracterización por medio de los δi puede ser la de aplicación más sencilla. La última caracterización, lla- mada factorización de Cholesky, es la más adecuada para matrices grandes. En [Str86], [NoD88] y [Mor01] hay demostraciones y ejemplos. Proposición 2.1. Sea A simétrica. Las siguientes afirmaciones son equiv- alentes. A es definida positiva. λi 0, ∀i. δi 0, ∀i. Existe U matriz triangular superior e invertible tal que A = UT U. Un resultado relacionado con la factorización de Cholesky, pero un poco más general, agrega dos equivalencias adicionales. Permite garantizar cuándo una matriz es definida positiva. Teorema 2.1. Sea A simétrica. Las siguientes afirmaciones son equiva- lentes. A es definida positiva. Existe una matriz B invertible, tal que A = BT B. Existe una matriz C con columnas linealmente independientes, tal que A = CT C. Existe una matriz F con filas linealmente independientes, tal que A = FFT . 2.11.2. Factorización de Cholesky Scilab tiene la función chol para obtener la factorización de Cholesky. Cuando no es posible aparecerá un mensaje de error.
  • 69. Héctor M. Mora E. Métodos Numéricos con Scilab 55 a = [ 4 -6; -6 25] u = chol(a) Antes de estudiar el caso general, veamos la posible factorización para los ejemplos de la sección anterior. La matriz identidad se puede escribir como I = IT I, siendo I triangular superior invertible. Luego, existe la factorización de Cholesky para la matriz identidad. Si existe la factorización de Cholesky de una matriz, al ser U y UT invertibles, entonces A debe ser invertible. Luego, la matriz nula no tiene factorización de Cholesky. Sea A = 1 2 2 5 . Entonces, u11 0 u12 u22 u11 u12 0 u22 = 1 2 2 5 u2 11 = 1 u11u12 = 2, u2 12 + u2 22 = 5 Se deduce que u11 = 1 u12 = 2, u22 = 1, U = 1 2 0 1 . En consecuencia, existe la factorización de Cholesky de A. Cuando se calculó u11 se hubiera podido tomar u11 = −1 y se hubiera podido obtener otra matriz U. Se puede demostrar que si se escogen los elementos diagonales uii positivos, entonces la factorización, cuando existe, es única. Sea A = 1 2 2 4 .
  • 70. 56 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Entonces, u11 0 u12 u22 u11 u12 0 u22 = 1 2 2 4 u2 11 = 1 u11u12 = 2, u2 12 + u2 22 = 4 Se deduce que u11 = 1 u12 = 2, u22 = 0, U = 1 2 0 0 . Por lo tanto, aunque existe U tal que A = UT U, sin embargo no existe la factorización de Cholesky de A, ya que U no es invertible. Sea A = 1 2 2 3 . Entonces, u11 0 u12 u22 u11 u12 0 u22 = 1 2 2 3 u2 11 = 1 u11u12 = 2, u2 12 + u2 22 = 3 Se deduce que u11 = 1 u12 = 2, u2 22 = −1. Entonces, no existe la factorización de Cholesky de A.
  • 71. Héctor M. Mora E. Métodos Numéricos con Scilab 57 En el caso general,              u11 . . . u1k · · · ukk . . . u1j · · · ukj · · · ujj . . . u1n · · · ukn · · · ujn · · · unn                           u11 · · · u1k · · · u1j · · · u1n . . . ukk · · · ukj · · · ukn . . . ujj · · · ujn . . . unn              El producto de la fila 1 de UT por la columna 1 de U da: u2 11 = a11. Luego, u11 = √ a11. (2.6) El producto de la fila 1 de UT por la columna j de U da: u11u1j = a1j. Luego, u1j = a1j u11 , j = 2, ..., n. (2.7) Al hacer el producto de la fila 2 de UT por la columna 2 de U, se puede calcular u22. Al obtener el producto de la fila 2 de UT por la columna j de U, se puede calcular u2j. Se observa que el cálculo de los elementos de U se hace fila por fila. Supongamos ahora que se conocen los elementos de las filas 1, 2, ..., k − 1 de U y se desea calcular los elementos de la fila k de U. El producto de la fila k de UT por la columna k de U da: k X i=1 u2 ik = akk k−1 X i=1 u2 ik + u2 kk = akk. Luego, ukk = v u u takk − k−1 X i=1 u2 ik , k = 2, ..., n. (2.8)
  • 72. 58 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES El producto de la fila k de UT por la columna j de U da: k X i=1 uikuij = akj. Luego, ukj = akj − k−1 X i=1 uikuij ukk , k = 2, ..., n, j = k + 1, ..., n. (2.9) Si consideramos que el valor de la sumatoria es 0 cuando el lı́mite inferior es más grande que el lı́mite superior, entonces las fórmulas 2.8 y 2.9 pueden ser usadas para k = 1, ..., n. Ejemplo 2.14. Sea A =     16 −12 8 −16 −12 18 −6 9 8 −6 5 −10 −16 9 −10 46     . u11 = √ 16 = 4 u12 = −12 4 = −3 u13 = 8 4 = 2 u14 = −16 4 = −4 u22 = p 18 − (−3)2 = 3 u23 = −6 − (−3)(2) 3 = 0 u24 = 9 − (−3)(−4) 3 = −1 u33 = p 5 − (22 + 02) = 1 u34 = −10 − ( 2(−4) + 0(−1) ) 1 = −2
  • 73. Héctor M. Mora E. Métodos Numéricos con Scilab 59 u44 = p 46 − ( (−4)2 + (−1)2 + (−2)2 ) = 5 . Entonces, U =     4 −3 2 −4 0 3 0 −1 0 0 1 −2 0 0 0 5     . ✸ La factorización de Cholesky no existe cuando en la fórmula 2.8 la cantidad dentro del radical es negativa o nula. Utilizando el producto entre matrices, las fórmulas 2.8 y 2.9 se pueden reescribir ası́: t = akk − U(1 : k − 1, k)T U(1 : k − 1, k), ukk = √ t, ukj = akj − U(1 : k − 1, k)T U(1 : k − 1, j) ukk Para ahorrar espacio de memoria, los valores ukk y ukj se pueden almacenar sobre los antiguos valores de akk y akj. O sea, al empezar el algoritmo se tiene la matriz A. Al finalizar, en la parte triangular superior del espacio ocupado por A estará U. t = akk − U(1 : k − 1, k)T U(1 : k − 1, k), (2.10) akk = √ t, (2.11) akj = akj − U(1 : k − 1, k)T U(1 : k − 1, j) akk (2.12) El siguiente es el esquema del algoritmo para la factorización de Cholesky. Si acaba normalmente, la matriz A es definida positiva. Si en algún momento t ≤ ε, entonces A no es definida positiva. Factorización de Cholesky datos: A, ε para k = 1, ..., n cálculo de t según (2.10) si t ≤ ε ent salir akk = √ t para j = k + 1, ..., n cálculo de akj según (2.12) fin-para j fin-para k
  • 74. 60 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES La siguiente es la implementación en Scilab, utilizando las operaciones ma- triciales de Scilab: function [U, ind] = Cholesky(A) // // Factorizacion de Cholesky. // // Trabaja unicamente con la parte triangular superior. // // ind = 1 si se obtuvo la factorizacion de Choleky // = 0 si A no es definida positiva // //************ eps = 1.0e-8 //************ n = size(A,1) U = zeros(n,n) for k = 1:n t = A(k,k) - U(1:k-1,k)’*U(1:k-1,k) if t = eps printf(’Matriz no definida positiva.n’) ind = 0 return end U(k,k)= sqrt(t) for j = k+1:n U(k,j) = ( A(k,j) - U(1:k-1,k)’*U(1:k-1,j) )/U(k,k) end end ind = 1 endfunction 2.11.3. Número de operaciones de la factorización Para el cálculo del número de operaciones, supongamos que el tiempo nece- sario para calcular una raı́z cuadrada es del mismo orden de magnitud que el tiempo de una multiplicación.
  • 75. Héctor M. Mora E. Métodos Numéricos con Scilab 61 Sumas y restas Multiplicaciones, divisiones y raı́ces cálculo de u11 0 1 cálculo de u12 0 1 cálculo de u1n 0 1 cálculo de u22 1 2 cálculo de u23 1 2 cálculo de u2n 1 2 ... cálculo de unn n − 1 n Agrupando por filas: Sumas y restas Multiplicaciones, divisiones y raı́ces cálculo de U1· n(0) n(1) cálculo de U2· (n − 1)1 (n − 1)2 cálculo de U3· (n − 2)2 (n − 2)3 . . . cálculo de Un· 1(n − 1) 1(n) Número de sumas y restas: n−1 X i=1 (n − i)i = n3 − n 6 ≈ n3 6 . Número de multiplicaciones, divisiones y raı́ces: n X i=1 (n + 1 − i)i = n3 6 + n2 2 + n 3 ≈ n3 6 . Número total de operaciones: n3 3 + n2 2 + n 6 ≈ n3 3 . 2.11.4. Solución del sistema Una vez obtenida la factorización de Cholesky, resolver Ax = b es lo mismo que resolver UT Ux = b. Al hacer el cambio de variable Ux = y, se tiene
  • 76. 62 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES UT y = b. La solución del sistema Ax = b se calcula en dos pasos: resolver UT y = b, (2.13) resolver Ux = y. (2.14) Resolver cada uno de los dos sistemas es muy fácil. El primero es triangular inferior, el segundo, triangular superior. El número total de operaciones para resolver el sistema está dado por la factorización más la solución de dos sistemas triangulares. Número de operaciones ≈ n3 3 + 2 n2 ≈ n3 3 · Esto quiere decir que para valores grandes de n, resolver un sistema, con A definida positiva, por el método de Cholesky, gasta la mitad del tiempo requerido por el método de Gauss. El método de Cholesky se utiliza para matrices definidas positivas. Pero no es necesario tratar de averiguar por medio de otro criterio si la matriz es definida positiva. Simplemente se trata de obtener la factorización de Cholesky de A simétrica. Si fue posible, entonces A es definida positiva y se continúa con la solución de los dos sistemas triangulares. Si no fue posible obtener la factorización de Cholesky, entonces A no es definida positiva y no se puede aplicar el método de Cholesky para resolver Ax = b. Ejemplo 2.15. Resolver   16 −12 8 −12 18 −6 8 −6 8     x1 x2 x3   =   76 −66 46   . La factorización de Cholesky es posible (A es definida positiva): U =   4 −3 2 0 3 0 0 0 2   . Al resolver UT y = b se obtiene y = (19, −3, 4). Finalmente, al resolver Ux = y se obtiene x = (3, −1, 2). ✸
  • 77. Héctor M. Mora E. Métodos Numéricos con Scilab 63 La implementación en Scilab de la solución de un sistema con matriz simétri- ca y definida positiva se puede hacer por medio de una función que llama tres funciones: function [x, info] = solCholesky(a, b) // Solucion de un sistema de ecuaciones por // el método de Cholesky // // Se supone que a es simetrica y se utiliza // unicamente la parte triangular superior de a. // // info valdra 1 si a es definida positiva, // asi x sera un vector columna // con la solucion, // 0 si a no es definida positiva. // [a, info] = Cholesky(a) if info == 0, return, end y = sol_UT_y_b(a, b) x = solTriSup(a, y) endfunction La segunda función, y = sol_UT_y_b(U, b) resuelve el sistema UT y = b , pero se tiene la información de U. Si se sabe con certeza que la matriz es definida positiva, en lugar de Cholesky, es preferible usar la función de Scilab chol, que es más eficiente. 2.12. Solución por mı́nimos cuadrados Consideremos ahora un sistema de ecuaciones Ax = b, no necesariamente cuadrado, donde A es una matriz m × n cuyas columnas son linealmente independientes. Esto implica que hay más filas que columnas, m ≥ n, y que además el rango de A es n. Es muy probable que este sistema no tenga solu- ción, es decir, tal vez no existe x que cumpla exactamente las m igualdades.
  • 78. 64 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Se desea que Ax = b, Ax − b = 0, kAx − bk = 0, kAx − bk2 = 0, kAx − bk2 2 = 0. Es posible que lo deseado no se cumpla, entonces se quiere que el incumplim- iento (el error) sea lo más pequeño posible. Se desea minimizar esa cantidad, min kAx − bk2 2 . (2.15) El vector x que minimice kAx−bk2 2 se llama solución por mı́nimos cuadrados. Como se verá más adelante, tal x existe y es único (suponiendo que las columnas de A son linealmente independientes). 2.12.1. En Scilab La orden para hallar la solución por mı́nimos cuadrados es la misma que se usa para resolver sistemas de ecuaciones cuadrados, a saber, ab . Por ejemplo, para resolver el sistema   2 3 4 5 6 7   x1 x2 “=”   43 77 109   basta con a = [ 2 3; 4 5; 7 6 ], b = [ 43 77 109 ]’ x = ab El resultado obtenido es x = 7.6019417 9.3009709
  • 79. Héctor M. Mora E. Métodos Numéricos con Scilab 65 2.12.2. Ecuaciones normales Con el ánimo de hacer más clara la deducción, supongamos que A es una matriz 4 × 3. Sea f(x) = kAx − bk2 2, f(x) =(a11x1 + a12x2 + a13x3 − b1)2 + (a21x1 + a22x2 + a23x3 − b2)2 + (a31x1 + a32x2 + a33x3 − b3)2 + (a41x1 + a42x2 + a43x3 − b4)2 . Para obtener el mı́nimo de f se requiere que las tres derivadas parciales, ∂f/∂x1, ∂f/∂x2 y ∂f/∂x3, sean nulas. ∂f ∂x1 =2(a11x1 + a12x2 + a13x3 − b1)a11 + 2(a21x1 + a22x2 + a23x3 − b2)a21 + 2(a31x1 + a32x2 + a33x3 − b3)a31 + 2(a41x1 + a42x2 + a43x3 − b4)a41. Escribiendo de manera matricial, ∂f ∂x1 =2(A1·x − b1)a11 + 2(A2·x − b2)a21 + 2(A3·x − b3)a31 + 2(A4·x − b4)a41. Si B es una matriz y u un vector columna, entonces (Bu)i = Bi·u. ∂f ∂x1 = 2 ((Ax)1 − b1)a11 + ((Ax)2 − b2)a21 + ((Ax)3 − b3)a31 +((Ax)4 − b4a41 , = 2 4 X i=1 (Ax − b)i ai1, = 2 4 X i=1 (A·1)i(Ax − b)i, = 2 4 X i=1 (AT 1·)i(Ax − b)i, = 2AT 1·(Ax − b), = 2 AT (Ax − b) 1
  • 80. 66 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES De manera semejante, ∂f ∂x2 = 2 AT (Ax − b) 2 , ∂f ∂x3 = 2 AT (Ax − b) 3 Igualando a cero las tres derivadas parciales y quitando el 2, se tiene AT (Ax − b) 1 = 0, AT (Ax − b) 2 = 0, AT (Ax − b) 3 = 0 Es decir, AT (Ax − b) = 0, AT A x = AT b . (2.16) Las ecuaciones (2.16) se llaman ecuaciones normales para la solución (o seudosolución) de un sistema de ecuaciones por mı́nimos cuadrados. La matriz AT A es simétrica, de tamaño n×n. En general, si A es una matriz m × n de rango r, entonces AT A también es de rango r (ver [Str86]). Como se supuso que el rango de A es n, entonces AT A es invertible. Más aún, AT A es definida positiva. Por ser AT A invertible, hay una única solución de (2.16), o sea, hay un solo vector x que hace que las derivadas parciales sean nulas. En general, las derivadas parciales nulas son simplemente una condición necesaria para obtener el mı́nimo de una función (también lo es para máximos o para puntos de silla), pero en este caso, como AT A es definida positiva, f es convexa, y entonces anular las derivadas parciales se convierte en condición necesaria y suficiente para el mı́nimo. En resumen, si las columnas de A son linealmente independientes, entonces la solución por mı́nimos cuadrados existe y es única. Para obtener la solución por mı́nimos cuadrados se resuelven las ecuaciones normales. Como AT A es definida positiva, (2.16) se puede resolver por el método de Cholesky. Si m ≥ n y al hacer la factorización de Cholesky resulta que AT A no es definida positiva, entonces las columnas de A son linealmente dependientes. Si el sistema Ax = b tiene solución exacta, ésta coincide con la solución por mı́nimos cuadrados.
  • 81. Héctor M. Mora E. Métodos Numéricos con Scilab 67 Ejemplo 2.16. Resolver por mı́nimos cuadrados:     2 1 0 −1 −2 3 −2 2 1 5 4 −2       x1 x2 x3   =     3.1 8.9 −3.1 0.1     . Las ecuaciones normales dan:   34 20 −15 20 25 −12 −15 −12 14     x1 x2 x3   =   4.0 −20.5 23.4   La solución por mı́nimos cuadrados es: x = (2.0252, −1.0132, 2.9728) . El error, Ax − b, es:     −0.0628 0.0196 −0.0039 0.0275     . ✸ Ejemplo 2.17. Resolver por mı́nimos cuadrados:     2 1 3 −1 −2 0 −2 2 −6 5 4 6       x1 x2 x3   =     3 9 −3 0     . Las ecuaciones normales dan:   34 20 48 20 25 15 48 15 81     x1 x2 x3   =   3 −21 27   Al tratar de resolver este sistema de ecuaciones por el método de Cholesky; no se puede obtener la factorización de Cholesky, luego AT A no es definida positiva, es decir, las columnas de A son linealmente dependientes. Si se aplica el método de Gauss, se obtiene que AT A es singular y se concluye que las columnas de A son linealmente dependientes. ✸
  • 82. 68 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Ejemplo 2.18. Resolver por mı́nimos cuadrados:     2 1 −1 −2 −2 2 5 4     x1 x2 =     3 0 −6 6     . Las ecuaciones normales dan: 34 20 20 25 x1 x2 = 48 15 La solución por mı́nimos cuadrados es: x = (2, −1) . El error, Ax − b, es:     0 0 0 0     . En este caso, el sistema inicial tenı́a solución exacta y la solución por mı́ni- mos cuadrados coincide con ella. ✸ La solución por mı́nimos cuadrados de un sistema sobredeterminado tam- bién se puede hacer en Scilab mediante (a’*a)(a’*b) o por medio de pinv(a)*b , pero ambas son menos eficientes que ab . La implementación eficiente de la solución por mı́nimos cuadrados, vı́a ecua- ciones normales, debe tener en cuenta algunos detalles. No es necesario cons- truir toda la matriz simétrica AT A (n2 elementos). Basta con almacenar en un arreglo de tamaño n(n + 1)/2 la parte triangular superior de AT A. Este almacenamiento puede ser por filas, es decir, primero los n elementos de la primera fila, enseguida los n − 1 elementos de la segunda fila a par- tir del elemento diagonal, después los n − 2 de la tercera fila a partir del elemento diagonal y ası́ sucesivamente, hasta almacenar un solo elemento de la fila n. Si se almacena la parte triangular superior de AT A por colum- nas, se almacena primero un elemento de la primera columna, enseguida dos elementos de la segunda columna y ası́ sucesivamente. Cada una de estas dos formas tiene sus ventajas y desventajas. La solución por el método de Cholesky debe tener en cuenta este tipo de estructura de almacenamiento de la información.
  • 83. Héctor M. Mora E. Métodos Numéricos con Scilab 69 Otros métodos eficientes para resolver sistemas de ecuaciones por mı́nimos cuadrados utilizan matrices ortogonales de Givens o de Householder. 2.13. Sistemas tridiagonales Un sistema Ax = b se llama tridiagonal si la matriz A es tridiagonal, o sea, si aij = 0 cuando |i − j| 1, es decir, A es de la forma A =          a11 a12 0 0 · · · 0 a21 a22 a23 0 0 0 a32 a33 a34 0 0 0 a43 a44 0 . . . 0 0 0 0 · · · ann          . Estos sistemas se presentan en algunos problemas particulares, por ejemplo, al resolver, mediante diferencias finitas, una ecuación diferencial lineal de segundo orden con condiciones de frontera o en el cálculo de los coeficientes de un trazador cúbico (spline). Obviamente este sistema se puede resolver mediante el método de Gauss. No obstante, dadas las caracterı́sticas especiales de la matriz, es mucho más eficiente sacar provecho de ellas. Se puede mostrar que, si A admite descom- posición LU, entonces estas dos matrices también guardan la estructura de A, es decir, L, además de ser triangular inferior, tiene ceros por debajo de la “subdiagonal” y U, además de ser triangular superior, tiene ceros por encima de la “superdiagonal”. Para simplificar, denotemos con fi los elementos de la subdiagonal de L, di los elementos de la diagonal de U y ui los elementos de la superdiagonal de
  • 84. 70 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES U. Se conoce A y se desea conocer L y U a partir de la siguiente igualdad:            1 0 0 0 · · · 0 0 f1 1 0 0 0 0 0 f2 1 0 0 0 0 0 f3 1 0 0 ... 0 0 0 0 1 0 0 0 0 0 fn−1 1                       d1 u1 0 0 · · · 0 0 0 d2 u2 0 0 0 0 0 d3 u3 0 0 0 0 0 d4 0 0 ... 0 0 0 0 dn−1 un−1 0 0 0 0 0 dn            = A . Sean Fi la fila i de L y Cj la columna j de U. Entonces, los productos de las filas de L por las columnas de U producen las siguientes igualdades: F1C1 : d1 = a11 F1C2 : u1 = a12 F2C1 : f1d1 = a21 F2C2 : f1u1 + d2 = a22 F2C3 : u2 = a23 F3C2 : f2d2 = a32 F3C3 : f2u2 + d3 = a33 F3C4 : u3 = a34 . . . FiCi−1 : fi−1di−1 = ai,i−1 FiCi : fi−1ui−1 + di = aii FiCi+1 : ui = ai,i+1 A partir de las igualdades anteriores se obtienen los valores ui, fi y di: d1 = a11, ui = ai,i+1 , i = 1, ..., n − 1, fi = ai+1,i di , di+1 = ai+1,i+1 − fiui (2.17) Resolver Ax = b es equivalente a resolver LUx = b. Entonces, si Ux = y, se resuelve Ly = b y después Ux = y. Al explicitar las anteriores igualdades se
  • 85. Héctor M. Mora E. Métodos Numéricos con Scilab 71 tiene: y1 = b1, fi−1yi−1 + yi = bi, dnxn = yn, dixi + uixi+1 = yi . Las fórmulas explı́citas son: y1 = b1, yi = bi − fi−1yi−1, i = 2, ..., n, xn = yn dn , xi = yi − uixi+1 di , i = n − 1, n − 2, ..., 1. (2.18) Ejemplo 2.19. Resolver el sistema Ax = b, con A =     2 4 0 0 3 5 6 0 0 −4 −5 1 0 0 −1 −2     , b =     −8 1 −2 −10     . Entonces, d1 = 2 , u1 = 4 , f1 = 3 2 = 1.5 , d2 = 5 − 1.5 × 4 = −1 , u2 = 6 , f2 = −4 −1 = 4 , d3 = −5 − 4 × 6 = −29 , u3 = 1, f3 = −1 −29 = 0.034483 , d4 = −2 − 0.034483 × 1 = −2.034483 ,
  • 86. 72 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES Ahora, la solución de los sistemas Ly = b, Ux = y : y1 = −8, y2 = 1 − 1.5 × (−8) = 13 , y3 = −2 − 4 × 13 = −54 , y4 = −10 − 0.034483 × −54 = −8.137931 , x4 = −8.137931 −2.034483 = 4 , x3 = −54 − 1 × 4 −29 = 2 , x2 = 13 − 6 × 2 −1 = −1 , x1 = −8 − 4 × (−1) 2 = −2 . ✸ Las fórmulas (2.17) y (2.18) se pueden utilizar sin ningún problema si todos los di son no nulos. Algún elemento diagonal de U resulta nulo si la matriz A no es invertible o si simplemente A no tiene factorización LU. Ejemplo 2.20. Consideremos las dos matrices siguientes: A = 2 −3 −8 12 , A′ = 0 2 3 4 . La matriz A no es invertible y d2 resulta nulo. La matriz A′ es invertible pero no tiene factorización LU. En este último caso, se obtiene d1 = 0 . ✸ Si la matriz A es grande no se justifica almacenar todos los n2 elementos. Basta con almacenar la diagonal, la subdiagonal y la superdiagonal, es decir 3n − 2 números. Mejor aún, en el mismo sitio donde inicialmente se al- macenan los elementos diagonales de A se pueden almacenar los elementos diagonales de U a medida que se van calculando, donde se almacenan los elementos subdiagonales de A se pueden almacenar los elementos subdiag- onales de L, los elementos superdiagonales de A son los mismos elementos superdiagonales de U, donde se almacena b se puede almacenar y y, poste- riormente, x. En resumen, una implementación eficiente utiliza 4 vectores d, f, u y b. El primero y el cuarto están en Rn, los otros dos están en Rn−1. Al comienzo
  • 87. Héctor M. Mora E. Métodos Numéricos con Scilab 73 d, f, u contienen datos de A y los términos independientes están en b. Al final d, f, u contienen datos de L, U y la solución final (los xi) estará en b. Solución de sistema tridiagonal datos: d, f, u, b, ε si |d1| ≤ ε ent parar para i = 1, ..., n − 1 fi = fi di di+1 = di+1 − fi ∗ ui si |di+1| ≤ ε ent parar fin-para para i = 2, ..., n bi = bi − fi−1bi−1 fin-para bn = bn dn para i = n − 1, n − 2, ..., 1 bi = bi − uibi+1 di fin-para 2.14. Cálculo de la inversa En la mayorı́a de los casos no es necesario calcular explı́citamente la inversa de una matriz, pues basta con resolver un sistema de ecuaciones. De todas formas, algunas veces es indispensable obtener la inversa. A continuación se presenta el algoritmo para el cálculo de la inversa, tomado y adaptado de [Ste98], basado en la factorización LU = PA (con pivoteo parcial). Se utiliza un vector p en Zn−1 que tiene toda la información in- dispensable para obtener la matriz P, pero no representa directamente la permutación. Al principio p es simplemente (1, 2, ..., n − 1). Solamente se utiliza memoria para una matriz. Al principio está A; al final del algoritmo, si indic = 1, está la inversa. Cuando indic = 0, la matriz es singular o casi singular. Se utiliza la notación de Matlab y Scilab para las submatrices de A. Para los elementos de A y p se utiliza la notación usual con subı́ndices.
  • 88. 74 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES datos: A, ε resultados: la inversa almacenada en A, indic Parte 1: factorización p = (1, 2, ..., n − 1) para k = 1 : n − 1 determinar m tal que |amk| = max{ |aik| : i = k, ..., n} si |amk| ≤ ε indic = 0, parar fin-si pk = m si m k A(k, : ) ↔ A(m, : ) fin-si A(k + 1 : n, k) = A(k + 1 : n, k)/akk A(k + 1 : n, k + 1 : n) = A(k + 1 : n, k + 1 : n) − A(k + 1 : n, k)A(k, k + 1 : n) fin-para si |ann| ≤ ε indic = 0, parar fin-si indic = 1 Parte 2: cálculo de U−1 para k = 1 : n akk = 1/akk para i = 1 : k − 1 aik = −akkA(i, i : k − 1)A(i : k − 1, k) fin-para fin-para Parte 3: cálculo de U−1L−1 para k = n − 1 : −1 : 1 t = A(k + 1 : n, k) A(k + 1 : n, k) = 0 A( : , k) = A( : , k) − A( : , k + 1 : n) t fin-para
  • 89. Héctor M. Mora E. Métodos Numéricos con Scilab 75 Parte 4: reordenamiento de columnas para k = n − 1 : −1 : 1 si pk 6= k A( : , k) ↔ A( : , pk) fin-si fin-para Ejemplo 2.21. A inicial -2.0000 -4.0000 4.0000 -2.0000 -5.0000 1.0000 2.0000 1.0000 4.0000 -3.0000 0.0000 -4.0000 -2.0000 -3.0000 1.0000 -1.0000 p inicial : 1 2 3 Factorización k = 1 m = 2 p : 2 2 3 intercambio de filas : 1 2 A después de intercambio -5.0000 1.0000 2.0000 1.0000 -2.0000 -4.0000 4.0000 -2.0000 4.0000 -3.0000 0.0000 -4.0000 -2.0000 -3.0000 1.0000 -1.0000 A después de operaciones -5.0000 1.0000 2.0000 1.0000 0.4000 -4.4000 3.2000 -2.4000 -0.8000 -2.2000 1.6000 -3.2000 0.4000 -3.4000 0.2000 -1.4000 k = 2 m = 2 p : 2 2 3 A después de operaciones
  • 90. 76 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES -5.0000 1.0000 2.0000 1.0000 0.4000 -4.4000 3.2000 -2.4000 -0.8000 0.5000 0.0000 -2.0000 0.4000 0.7727 -2.2727 0.4545 k = 3 m = 4 p : 2 2 4 intercambio de filas : 3 4 A después de intercambio -5.0000 1.0000 2.0000 1.0000 0.4000 -4.4000 3.2000 -2.4000 0.4000 0.7727 -2.2727 0.4545 -0.8000 0.5000 0.0000 -2.0000 A después de operaciones -5.0000 1.0000 2.0000 1.0000 0.4000 -4.4000 3.2000 -2.4000 0.4000 0.7727 -2.2727 0.4545 -0.8000 0.5000 -0.0000 -2.0000 A después de calcular inv. de U -0.2000 -0.0455 -0.2400 -0.1000 0.4000 -0.2273 -0.3200 0.2000 0.4000 0.7727 -0.4400 -0.1000 -0.8000 0.5000 -0.0000 -0.5000 A después de calcular U1*L1 -0.2600 0.1900 -0.2400 -0.1000 0.3200 -0.0800 -0.3200 0.2000 -0.0600 0.3900 -0.4400 -0.1000 -0.5000 0.2500 0.0000 -0.5000 inversa: después de reordenamiento 0.1900 -0.2600 -0.1000 -0.2400 -0.0800 0.3200 0.2000 -0.3200 0.3900 -0.0600 -0.1000 -0.4400 0.2500 -0.5000 -0.5000 0.0000 Expresiones explı́citas de L, U, P
  • 91. Héctor M. Mora E. Métodos Numéricos con Scilab 77 L 1.0000 0.0000 0.0000 0.0000 0.4000 1.0000 0.0000 0.0000 0.4000 0.7727 1.0000 0.0000 -0.8000 0.5000 -0.0000 1.0000 U -5.0000 1.0000 2.0000 1.0000 0.0000 -4.4000 3.2000 -2.4000 0.0000 0.0000 -2.2727 0.4545 0.0000 0.0000 0.0000 -2.0000 P : 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 Ejercicios 2.1 Considere los sistemas de ecuaciones x = b con los siguientes datos. Trate de obtener la solución por varios métodos. Algunos métodos no se pueden aplicar. A =     3 1 −2 −2 0 −3 5 0 0 0 1 1 0 0 0 −5     , b =     4 5 −2 15     2.2 A =     4 0 0 0 1 −3 0 0 −3 −3 4 0 3 0 5 −1     , b =     12 −3 −23 0     2.3 A =     5 −4 5 0 4 0 1 2 −2 0 5 −5 4 4 3 −1     , b =     −17 −23 18 −24    
  • 92. 78 CAPÍTULO 2. SISTEMAS DE ECUACIONES LINEALES 2.4 A =     −1 −2 4 1 4 2 −3 −3 3 2 3 −3 24 0 46 −20     , b =     −2 −6 −16 −140     2.5 A =     16 −8 −16 −16 −8 29 28 −12 −16 28 48 −12 −16 −12 −12 66     , b =     −32 146 184 −208     2.6 A =   40 −8 −52 −8 3 9 −52 9 69   , b =   120 −17 −163   2.7 A =     16 4 0 16 4 10 12 −8 0 12 41 −1 16 −8 −1 21     , b =     80 −16 −83 87     2.8 A =       −15 −12 0 0 0 15 4 −16 0 0 0 4 7 −4 0 0 0 3 20 2 0 0 0 0 5       , b =       87 −15 −44 46 −5       2.9 A =       25 5 0 0 0 10 2 0 0 0 0 0 −5 4 0 0 0 −4 12 −10 0 0 0 2 −2       , b =       115 46 16 48 8       2.10 A =         9 15 −15 0 0 0 15 26 −23 4 0 0 −15 −23 38 2 −12 0 0 4 2 45 −12 0 0 0 −12 −12 36 4 0 0 0 0 4 29         , b =         39 73 −31 20 −8 116        
  • 93. Héctor M. Mora E. Métodos Numéricos con Scilab 79 Utilice el método de Cholesky. Compare la forma de U con la forma de A. Obtenga información sobre las matrices banda 2.11 Resuelva el sistema Ax = b obteniendo la factorización PA = LU. Usándola, resuelva Ax = d. A =   4 −5 5 2 −1 −5 4 4 −3   , b =   −38 2 14   , d =   3 −9 14   2.12 En Scilab construya G, una matriz aleatoria grande, por ejemplo, n = 2000 o 3000, con entradas en ]0, 1[. Si es necesario, modifique stacksize. Construya S = G + GT (simétrica). Construya A = S + 2nIn. Averigüe sobre matrices de diagonal dominante. Demuestre que A lo es. ¿Es definida positiva? Construya aleatoriamente un vector columna b. Mida el tiempo de ab. Mida el tiempo de chola(a). ¿Co- incide más o menos con lo esperado?
  • 94. Capı́tulo 3 Métodos iterativos para sistemas de ecuaciones lineales Los métodos de Gauss y Cholesky hacen parte de los métodos directos o finitos. Al cabo de un número finito de operaciones, en ausencia de errores de redondeo, se obtiene x∗ solución del sistema Ax = b. Los métodos de Jacobi, Gauss-Seidel, sobrerrelajación (SOR), hacen parte de los métodos llamados indirectos o iterativos. En ellos se comienza con x0 = (x0 1, x0 2, ..., x0 n), una aproximación inicial de la solución. A partir de x0 se construye una nueva aproximación de la solución, x1 = (x1 1, x1 2, ..., x1 n). A partir de x1 se construye x2 (aquı́ el superı́ndice indica la iteración y no indica una potencia). Ası́ sucesivamente se construye una sucesión de vectores {xk}, con el objetivo, no siempre garantizado, de que lim k→∞ xk = x∗ . Generalmente los métodos indirectos son una buena opción cuando la matriz es muy grande y dispersa o rala (sparse), es decir, cuando el número de elementos no nulos es pequeño en comparación con n2, número total de elementos de A. En estos casos se debe utilizar una estructura de datos adecuada que permita almacenar únicamente los elementos no nulos. 80
  • 95. Héctor M. Mora E. Métodos Numéricos con Scilab 81 3.1. Método de Gauss-Seidel En cada iteración del método de Gauss-Seidel, hay n subiteraciones. En la primera subiteración se modifica únicamente x1. Las demás coordenadas x2, x3, ..., xn no se modifican. El cálculo de x1 se hace de tal manera que se satisfaga la primera ecuación. x1 1 = b1 − (a12x0 2 + a13x0 3 + · · · + a1nx0 n) a11 , x1 i = x0 i , i = 2, ..., n. En la segunda subiteración se modifica únicamente x2. Las demás coorde- nadas x1, x3, ..., xn no se modifican. El cálculo de x2 se hace de tal manera que se satisfaga la segunda ecuación. x2 2 = b2 − (a21x1 1 + a23x1 3 + · · · + a2nx1 n) a22 , x2 i = x1 i , i = 1, 3, ..., n. Ası́ sucesivamente, en la n-ésima subiteración se modifica únicamente xn. Las demás coordenadas x1, x2, ..., xn−1 no se modifican. El cálculo de xn se hace de tal manera que se satisfaga la n-ésima ecuación. xn n = bn − (an1xn−1 1 + an3xn−1 3 + · · · + annxn−1 n ) ann , xn i = xn−1 i , i = 1, 2, ..., n − 1. Ejemplo 3.1. Resolver     10 2 −1 0 1 20 −2 3 −2 1 30 0 1 2 3 20         x1 x2 x3 x4     =     26 −15 53 47    
  • 96. 82 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES partiendo de x0 = (1, 2, 3, 4). x1 1 = 26 − (2 × 2 + (−1) × 3 + 0 × 4) 10 = 2.5, x1 = (2.5, 2, 3, 4). x2 2 = −15 − (1 × 2.5 + (−2) × 3 + 3 × 4) 20 = −1.175, x2 = (2.5, −1.175, 3, 4). x3 3 = 53 − (−2 × 2.5 + 1 × (−1.175) + 0 × 4) 30 = 1.9725, x3 = (2.5, −1.175, 1.9725, 4). x4 4 = 47 − (1 × 2.5 + 2 × (−1.175) + 3 × 1.9725) 20 = 2.0466, x4 = (2.5, −1.175, 1.9725, 2.0466). Una vez que se ha hecho una iteración completa (n subiteraciones), se utiliza el último x obtenido como aproximación inicial y se vuelve a empezar; se calcula x1 de tal manera que se satisfaga la primera ecuación, luego se calcula x2... A continuación están las iteraciones siguientes para el ejemplo anterior. 3.0323 −1.1750 1.9725 2.0466 3.0323 −1.0114 1.9725 2.0466 3.0323 −1.0114 2.0025 2.0466 3.0323 −1.0114 2.0025 1.9991 3.0025 −1.0114 2.0025 1.9991 3.0025 −0.9997 2.0025 1.9991 3.0025 −0.9997 2.0002 1.9991 3.0025 −0.9997 2.0002 1.9998 3.0000 −0.9997 2.0002 1.9998 3.0000 −1.0000 2.0002 1.9998 3.0000 −1.0000 2.0000 1.9998 3.0000 −1.0000 2.0000 2.0000 3.0000 −1.0000 2.0000 2.0000 3.0000 −1.0000 2.0000 2.0000 3.0000 −1.0000 2.0000 2.0000 3.0000 −1.0000 2.0000 2.0000
  • 97. Héctor M. Mora E. Métodos Numéricos con Scilab 83 Teóricamente, el método de Gauss-Seidel puede ser un proceso infinito. En la práctica, el proceso se acaba cuando de xk a xk+n los cambios son muy pequeños. Esto quiere decir que el x actual es casi la solución x∗. Como el método no siempre converge, entonces otra detención del proceso, no deseada pero posible, está determinada cuando el número de iteraciones realizadas es igual a un número máximo de iteraciones previsto. El siguiente ejemplo no es convergente, ni siquiera empezando de con una aproximación inicial muy cercana a la solución. La solución exacta es x = (1, 1, 1). Ejemplo 3.2. Resolver   −1 2 10 11 −1 2 1 5 2     x1 x2 x3   =   11 12 8   partiendo de x0 = (1.0001, 1.0001, 1.0001). 1.0012 1.0001 1.0001 1.0012 1.0134 1.0001 1.0012 1.0134 0.9660 0.6863 1.0134 0.9660 0.6863 −2.5189 0.9660 0.6863 −2.5189 9.9541 83.5031 −2.5189 9.9541 83.5031 926.4428 9.9541 83.5031 926.4428 −2353.8586 Algunos criterios garantizan la convergencia del método de Gauss-Seidel. Por ser condiciones suficientes para la convergencia son criterios demasiado fuertes, es decir, la matriz A puede no cumplir estos requisitos y, sin embargo, el método puede ser convergente. En la práctica, con frecuencia, es muy dispendioso poder aplicar estos criterios. Una matriz cuadrada es de diagonal estrictamente dominante por filas si en cada fila el valor absoluto del elemento diagonal es mayor que la suma de los valores absolutos de los otros elementos de la fila, |aii| n X j=1,j6=i |aij| , ∀i.
  • 98. 84 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Teorema 3.1. Si A es de diagonal estrictamente dominante por filas, en- tonces el método de Gauss-Seidel converge para cualquier x0 inicial. Teorema 3.2. Si A es definida positiva, entonces el método de Gauss-Seidel converge para cualquier x0 inicial. Teóricamente el método de Gauss-Seidel se deberı́a detener cuando kxk − x∗k ε. Sin embargo, la condición anterior necesita conocer x∗, que es pre- cisamente lo que se está buscando. Entonces, de manera práctica el método de GS se detiene cuando kxk − xk+nk ε. Dejando de lado los superı́ndices, las fórmulas del método de Gauss-Seidel se pueden reescribir para facilitar el algoritmo y para mostrar que kxk −x∗k y kxk − xk+nk están relacionadas. xi ← bi − n X j=1,j6=i aijxj aii , xi ← bi − n X j=1 aijxj + aiixi aii , xi ← xi + bi − Ai· x aii . Sean ri = bi − Ai· x, δi = ri aii · El valor ri es el error, residuo o resto que se comete en la i-ésima ecuación al utilizar el x actual. Si ri = 0, entonces la ecuación i-ésima se satisface. El valor δi es la modificación que sufre xi en una iteración. Sean r = (r1, r2, ..., rn), δ = (δ1, δ2, ..., δn). Entonces xk+n = xk +δ. Además, xk es solución si y solamente si r = 0, o sea, si y solamente si δ = 0. Lo anterior justifica que el método de GS se detenga cuando kδk ≤ ε. La norma kδk puede ser la norma euclidiana o cualquier otra norma. Si en el criterio de parada del algoritmo se desea enfatizar sobre los errores o residuos, entonces se puede comparar kδk con ε/k(a11, ..., ann)k; por ejemplo, kδk ≤ ε max |aii| ·
  • 99. Héctor M. Mora E. Métodos Numéricos con Scilab 85 El esquema del algoritmo para resolver un sistema de ecuaciones por el método de Gauss-Seidel es: Método de Gauss-Seidel datos: A, b, x0, ε, maxit x = x0 para k = 1, ...,maxit nrmD← 0 para i = 1, ..., n δi = (bi − Ai· x)/aii xi ← xi + δi nrmD←nrmD+|δi| fin-para i si nrmD ≤ ε ent x∗ ≈ x, salir fin-para k A continuación hay una versión, no muy eficiente, que permite mostrar los resultados intermedios function [x, ind, k] = GS(A, b, x0, eps, maxit) // // metodo de Gauss Seidel para resolver A x = b // // A matriz cuadrada, // b vector columna de terminos independientes, // x0 vector columna inicial // // ind valdra -1 si hay un elemento diagonal nulo o casi, // // 1 si se obtuvo un aproximacion // de la solucion, con la precision deseada, // // 0 si no se obtuvo una buena aproximacion. // // k indicara el numero de iteraciones if min( abs(diag(A)) ) = %eps ind = -1 x = []
  • 100. 86 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES return end x = x0 n = size(x,1) ind = 1 for k = 1:maxit //printf(’n k = %dn’, k) D = 0 for i = 1:n di = ( b(i) - A(i,:)*x )/A(i,i) x(i) = x(i) + di D = max(D, abs(di)) end disp(x’) if D eps, return, end end ind = 0 endfunction En una implementación eficiente para matrices dispersas, se requiere una estructura en la que se almacenan únicamente los elementos no nulos y que permita efectuar el producto de una fila de A por un vector, es decir, que permita reemplazar eficientemente la orden A(i,:)*x. 3.2. Normas vectoriales El concepto de norma corresponde simplemente a la abstracción del con- cepto de tamaño de un vector. Consideremos el vector que va de (0, 0, 0) a (2, 3, −4). Su tamaño o magnitud es simplemente p 22 + 32 + (−4)2 = √ 29 . Sea V un espacio vectorial real. Una norma es una función µ : V → R tal que µ(x) ≥ 0, ∀x ∈ V, µ(x) = 0 sssi x = 0, µ(αx) = |α| µ(x), ∀α ∈ R, ∀x ∈ V, µ(x + y) ≤ µ(x) + µ(y), ∀x, y ∈ V. (desigualdad triangular)
  • 101. Héctor M. Mora E. Métodos Numéricos con Scilab 87 Algunos ejemplos clásicos de normas en Rn son: 1. ||x||2 = ||x|| = Pn i=1 x2 i 1/2 norma euclidiana, 2. ||x||p = ( Pn i=1 |xi|p)1/p norma de Holder de orden p ≥ 1, 3. ||x||∞ = ||x||max = max1≤i≤n |xi|, 4. k||x|| con k 0 y || || una norma, 5. ||x||A = √ xT Ax con A definida positiva. Se puede mostrar que lim p→∞ ||x||p = ||x||∞ = ||x||max. Sea x = (3, 0, −4), entonces ||x||1 = 7, ||x||2 = 5, ||x||∞ = 4. 3.2.1. En Scilab Si x es un vector fila o columna, entonces norm(x) calcula ||x||2 , norm(x, 2) calcula ||x||2 , norm(x, 1) calcula ||x||1 , norm(x, 4) calcula ||x||4 , norm(x, ’inf’) calcula ||x||∞ . 3.3. Normas matriciales En el conjunto de matrices cuadradas de orden n se puede utilizar cualquier norma definida sobre Rn2 . Dado que en el conjunto de matrices cuadradas está definido el producto, es interesante contar con normas que tengan carac- terı́sticas especiales relativas al producto entre matrices y al producto entre
  • 102. 88 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES una matriz y un vector. En algunos casos, es conveniente que se tengan estas dos propiedades: i) ||AB|| ≤ ||A|| ||B||, ii) ||Ax|| ≤ ||A|| ||x||. Ejemplo 3.3. Sean A = 1 2 3 4 , B = 5 6 7 8 , x = 5 6 , entonces AB = 19 22 43 50 , Ax = 17 39 , pero ||AB||∞ = 50, ||A||∞||B||∞ = 4 × 8 = 32 ||Ax||∞ = 39, ||A||∞||x||∞ = 4 × 6 = 24. ✸ Una norma || || definida sobre el Rn×n (conjunto de matrices n × n) se llama matricial o submultiplicativa si, además de las propiedades usuales de una norma, para cualquier par de matrices A y B ||AB|| ≤ ||A|| ||B||. Sean || ||m una norma matricial sobre Rn×n y || ||v una norma sobre Rn. Estas dos normas se llaman compatibles o consistentes si, para toda matriz A ∈ Rn×n y para todo x ∈ Rn ||Ax||v ≤ ||A||m||x||v . Una manera común de construir una norma que sean matricial y compatible consiste en generarla a partir de un norma sobre Rn. Sea || || una norma sobre Rn. La norma generado o inducida por esta norma se define de varias
  • 103. Héctor M. Mora E. Métodos Numéricos con Scilab 89 maneras, todas ellas equivalentes: |||A||| = sup x6=0 ||Ax|| ||x|| (3.1) |||A||| = max x6=0 ||Ax|| ||x|| (3.2) |||A||| = sup ||x||=1 ||Ax|| (3.3) |||A||| = max ||x||=1 ||Ax||. (3.4) Proposición 3.1. La definición anterior está bien hecha, es decir, ||| ||| es una norma, es matricial y es compatible con || ||. Demostración. Sea µ(A) = sup x6=0 ||Ax|| ||x|| Ante todo es necesario mostrar que la función µ está bien definida, o sea, para toda matriz A, µ(A) = sup x6=0 ||Ax|| ||x|| ∞. µ(A) = sup x6=0 A ||x|| x ||x|| ||x|| = sup x6=0 ||x||A x ||x|| ||x|| = sup x6=0 ||x|| A x ||x|| ||x|| = sup x6=0 A x ||x|| = sup ||ξ||=1 ||Aξ|| La función ξ 7→ ϕ(ξ) = ||Aξ|| es continua y el conjunto S = {ξ ∈ Rn : ||ξ|| = 1} es compacto (cerrado y acotado), luego ϕ(S) es compacto, en particular acotado, es decir, µ(A) = sup ϕ(S) ∞. Además, el sup se alcanza en un punto de S. Luego las cuatro definiciones, (3.1) y siguientes, coinciden. Claramente µ(A) ≥ 0. Veamos que µ(A) = 0 sssi A = 0. Si A = 0, entonces µ(A) = 0. Sea A 6= 0. Entonces A tiene por lo menos una columna no nula.
  • 104. 90 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Sea A·j 6= 0 y v = ej/||ej|| . Por definición ||v|| = 1. µ(A) ≥ ||Av|| = A ej ||ej|| = A·j ||ej|| = ||A·j|| ||ej|| 0. µ(λA) = max ||x||=1 ||λAx|| = max ||x||=1 |λ| ||Ax|| = |λ| max ||x||=1 ||Ax|| = |λ|µ(A). Para mostrar que µ(A + B) ≤ µ(A) + µ(B) se usa la siguiente propiedad: sup x∈X ( f(x) + g(x) ) ≤ sup x∈X f(x) + sup x∈X g(x) µ(A + B) = sup ||x||=1 ||(A + B)x|| = sup ||x||=1 ||Ax + Bx|| ≤ sup ||x||=1 (||Ax|| + ||Bx||) ≤ sup ||x||=1 ||Ax|| + sup ||x||=1 ||Bx|| = µ(A) + µ(B) Hasta ahora se ha mostrado que µ es una norma sobre Rn×n. Si se uti- lizó la norma || ||△ en Rn, la norma generada o subordinada sobre Rn×n se denotarı́a por ||| |||△. Sin embargo, cuando no hay ambigüedad, es la notación más usual, ||A||△ indica la norma generada evaluada en la matriz A y ||x||△ indica la norma original evaluada en el vector columna x. Veamos ahora que la norma original y la generada son compatibles. Obvi- amente si x = 0, entonces ||Ax|| ≤ ||A|| ||x||. Sea x 6= 0 y ξ = x/||x|| de norma uno. ||A|| ≥ ||Aξ|| = A x ||x|| = ||Ax|| ||x|| , luego ||A|| ||x|| ≥ ||Ax||.
  • 105. Héctor M. Mora E. Métodos Numéricos con Scilab 91 Queda por mostrar que esta norma generada es matricial. ||AB|| = max ||x||=1 ||ABx|| = max ||x||=1 ||A(Bx)|| ≤ max ||x||=1 ||A|| ||Bx|| = ||A|| max ||x||=1 ||Bx|| = ||A|| ||B||. △ Para las tres normas vectoriales más usadas, las normas matriciales gener- adas son: ||A||1 = max 1≤j≤n n X i=1 |aij|, (3.5) ||A||2 = p ρ(AT A) (norma espectral), (3.6) ||A||∞ = max 1≤i≤n n X j=1 |aij|. (3.7) Si la matriz A se considera como un vector, entonces se puede aplicar la norma euclidiana. Esta norma resulta ser matricial. Esta norma se conoce con el nombre de norma de Frobenius o también de Schur. ||A||F =   X i,j (aij)2   1/2 . (3.8) Para cualquier norma generada ||I|| = 1. Como ||I||F = √ n, entonces esta norma no puede ser generada por ninguna norma vectorial Ejemplo 3.4. Sea A = 1 2 3 −4 Entonces, AT A = 10 −10 −10 20 Sus valores propios son 3.8196601 y 26.18034. Luego ||A||1 = 6, ||A||2 = 5.1166727, ||A||∞ = 7.
  • 106. 92 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Proposición 3.2. ||A||1 = max j n X i=1 |aij| Demostración. ||A||1 = max ||x||1 =1 ||Ax||1 = max ||x||1 =1 n X i=1 |(Ax)i| = max ||x||1 =1 n X i=1 |Ai·x| = max ||x||1 =1 n X i=1 n X j=1 aijxj ≤ max ||x||1 =1 n X i=1 n X j=1 |aijxj| = max ||x||1 =1 n X i=1 n X j=1 |aij| |xj| = max ||x||1 =1 n X j=1 |xj| n X i=1 |aij| = max ||x||1 =1 n X j=1 |xj|sj donde sj = Pn i=1 |aij|. Si αj, βj ≥ 0 para todo j, entonces n X j=1 αjβj ≤ max j βj   n X j=1 αj   . Luego ||A||1 ≤ max ||x||1 =1   max j sj   n X j=1 |xj|     = max ||x||1 =1 max j sj = max j sj = max j n X i=1 |aij| En resumen, ||A||1 ≤ max j n X i=1 |aij|. Sea k tal que
  • 107. Héctor M. Mora E. Métodos Numéricos con Scilab 93 n X i=1 |aik| = max j n X i=1 |aij| ||A||1 = max ||x||1 =1 ||Ax||1 ≥ ||Ax||1 para todo x con ||x||1 = 1 ||A||1 ≥ ||Aek ||1 = ||A·k||1 = n X i=1 |aik| = max j n X i=1 |aij| es decir, ||A||1 ≥ max j n X i=1 |aij|. Proposición 3.3. ||A||2 = p ρ(AT A). Demostración. ||A||2 = max ||x||2=1 ||Ax||2 ||A||2 2 = max ||x||2=1 ||Ax||2 2 = max ||x||2=1 xT AT Ax La matriz AT A es simétrica y semidefinida positiva, todos sus valores propios λ1, ..., λn son reales y no negativos. Se puede suponer que están ordenados: ρ(AT A) = λ1 ≥ λ2 ≥ ... ≥ λn ≥ 0. Por el teorema espectral, AT A es semejante, ortogonalmente, a la matriz diagonal de sus valores propios. Las matrices se pueden reordenar para que V T (AT A)V = diag(λ1, ..., λn) , con V ortogonal. Sean v1, v2, ..., vn las columnas de V . Entonces v1, v2, ..., vn forman un conjunto ortonormal de vectores propios, es decir, (AT A)vi = λivi , viT vj = δij .
  • 108. 94 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Sea x tal que ||x||2 = 1, α = V T x. Entonces ||α||2 = 1 y V α = V V T x = x, es decir, x = n X i=1 αivi . Entonces, AT Ax = AT A n X i=1 αivi = n X i=1 αiAT Avi = n X i=1 αiλivi xT AT Ax =   n X j=1 αjvj   T n X i=1 αiλivi ! = n X i=1 α2 i λi ≤ λ1 n X i=1 α2 i = λ1 En resumen, ||A||2 2 ≤ λ1 ||A||2 ≤ p λ1 Por otro lado, ||A||2 ≥ √ xT AT Ax para todo x con ||x||2 = 1 ||A||2 ≥ p v1T AT Av1 = p v1T λ1v1 = p λ1v1T v1 ||A||2 ≥ p λ1. Proposición 3.4. ||A||∞ = max i n X j=1 |aij|
  • 109. Héctor M. Mora E. Métodos Numéricos con Scilab 95 Demostración ||A||∞ = max ||x||∞ =1 ||Ax||∞ = max ||x||∞ =1 max i |(Ax)i| = max ||x||∞ =1 max i |Ai·x| = max ||x||∞ =1 max i | n X j=1 aijxj| ≤ max ||x||∞ =1 max i n X j=1 |aij| |xj| Como |xj| ≤ ||x||∞ ||A||∞ ≤ max ||x||∞ =1 max i n X j=1 |aij| ||x||∞ = max ||x||∞ =1 ||x||∞ max i n X j=1 |aij| = max i n X j=1 |aij| Veamos ahora la otra desigualdad. Si A = 0, se cumple la igualdad. Sea k tal que n X j=1 |akj| = max i n X j=1 |aij| y sea x̄ definido por x̄j =    0 si akj = 0 signo(akj) = |akj| akj si akj 6= 0.
  • 110. 96 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES ||A||∞ ≥ ||Ax||∞ si ||x||∞ = 1, ||A||∞ ≥ ||Ax̄||∞ = max i |(Ax̄)i| = max i |Ai·x̄| = |Ai·x̄| para todo i, ||A||∞ ≥ |Ak·x̄| = n X j=1 akj |akj| akj = n X j=1 |akj| = n X j=1 |akj| = max i n X j=1 |aij|. En las sumas de las desigualdades anteriores, los términos donde akj = 0 no se consideran. Proposición 3.5. Si || ||α es una norma matricial, entonces existe por lo menos una norma vectorial compatible con ella. Demostración. Sean X = [x 0 0 · · · 0] ∈ Rn×n y ||x|| = ||X||α. Se puede comprobar que || || es una norma en Rn y que es compatible con || ||α. Resumen de resultados || || definida en (3.4), es una norma. || || definida en (3.4), es matricial. || || (para matrices) es compatible con || || (para vectores columna). ||I|| = 1. ||A||1 = max j n X i=1 |aij| ||A||∞ = max i n X j=1 |aij|
  • 111. Héctor M. Mora E. Métodos Numéricos con Scilab 97 ||A||2 = p ρ(AT A) ||A||2 = max{σ1, σ2, ..., σn} = max{valores singulares de A} (ver [AlK02]). ||A||2 = ρ(A) si A 0. ||A||F = p tr(AT A) = v u u t n X i=1 σ2 i Si Q es ortogonal ||QA||F = ||AQ||F = ||A||F . ||A||2 ≤ ||A||F ≤ √ n||A||2 ||A||2 = ||A||F sssi r(A) = 1. 1 √ n ||A||1 ≤ ||A||F ≤ √ n||A||1 1 √ n ||A||∞ ≤ ||A||F ≤ √ n||A||∞ ||A||2 2 ≤ ||A||1||A||∞ ρ(A) ≤ ||A|| para toda norma matricial || ||. Sea ε 0. Entonces existe una norma matricial || || tal que ||A|| ≤ ρ(A) + ε || ||F es multiplicativa (ver [Ste98]). || ||F y || ||2 son compatibles. || ||F no es la norma generada por ninguna norma || ||, ya que ||I||F = √ n 6= 1. n max i,j |aij| es matricial (ver [Man04]). n max i,j |aij| es compatible con || ||1 , || ||2 y || ||∞ .
  • 112. 98 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES 3.3.1. En Scilab Si A es una matriz, entonces norm(A) calcula ||A||2 , norm(A, 2) calcula ||A||2 , norm(A, 1) calcula ||A||1 , norm(A, ’inf’) calcula ||A||∞ , norm(A, ’fro’) calcula ||A||F . 3.4. Condicionamiento de una matriz Cuando se resuelve un sistema de ecuaciones Ax = b se desea conocer cómo son los cambios en la solución cuando se cambia ligeramente el vector de términos independientes b. De manera más precisa, sea x̄ la solución de Ax = b y x̄′ la solución de Ax = b′. Se puede suponer que b′ = b + ∆b, x̄′ = x̄ + ∆x. Se espera que si ||∆b|| es pequeña, entonces también ||∆x|| lo sea. En realidad es mejor considerar cambios relativos. Se espera que si el valor ||∆b||/||b|| es pequeño, entonces ||∆x||/||x̄|| también lo sea. Las deducciones que siguen, relacionan los dos cambios relativos. ∆x = x̄′ − x̄ = A−1 b′ − A−1 b = A−1 (b + ∆b) − A−1 b = A−1 ∆b. Al utilizar una norma y la norma matricial generada por esta se obtiene ||∆x|| ≤ ||A−1 || ||∆b||.
  • 113. Héctor M. Mora E. Métodos Numéricos con Scilab 99 Por otro lado, b = Ax ||b|| ≤ ||A|| ||x̄|| 1 ||x̄|| ≤ ||A|| ||b|| Multiplicando la primera y la última desigualdad ||∆x|| ||x̄|| ≤ ||A|| ||A−1 || ||∆b|| ||b|| . El valor ||A|| ||A−1|| se llama condicionamiento o número de condición de la matriz A (invertible) y se denota κ(A) = ||A|| ||A−1 ||. (3.9) Entonces, ||∆x|| ||x̄|| ≤ κ(A) ||∆b|| ||b|| . (3.10) Ejemplo 3.5. Calcular κ1(A), κ2(A) y κ∞(A) para la matriz A = −10 −7 6 4 . Entonces, A−1 = 2 7/2 −3 −5 AT A = 136 94 94 65 A−1T A−1 = 13 22 22 149/4 espec(AT A) = {0.0199025, 200.9801} espec(A−1T A−1 ) = {0.0049756, 50.245024} ||A||2 = 14.176745 ||A−1 ||2 = 7.0883725 κ2(A) = 100.49005
  • 114. 100 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES ||A||1 = 16 ||A−1 ||1 = 17/2 κ1(A) = 136 ||A||∞ = 17 ||A−1 ||∞ = 8 κ∞(A) = 136. ✸ El condicionamiento, definido para normas matriciales inducidas de normas vectoriales, tiene las siguientes propiedades: κ(A) ≥ 1. κ(αA) = κ(A) si α 6= 0. κ2(A) = 1 si y solamente si A es un múltiplo de una matriz ortogonal (o unitaria). La desigualdad (3.10) indica que si κ(A) es pequeño, entonces un cambio relativo en b pequeño produce un cambio relativo en x pequeño. Una matriz A es bien condicionada si κ(A) es cercano a 1 y es mal condi- cionada si κ(A) es grande. Para el condicionamiento κ2 (definido con la norma espectral), las matrices mejor condicionadas son las matrices ortogo- nales, puesto que κ2(A) = 1. Ejemplo 3.6. Resolver los sistemas Ax = b y Ax′ = b′, donde A = 10 10 10 −9 , b = 20.01 19.99 , b′ = 20.02 19.98 . Entonces, ∆b = [0.01 − 0.01]T , ||∆b|| ||b|| = 0.0005, κ(A) = 1.0752269.
  • 115. Héctor M. Mora E. Métodos Numéricos con Scilab 101 Al resolver los dos sistemas se obtiene: x = [1.9999474 0.0010526]T , x′ = [1.9998947 0.0021053]T , ∆x = [−0.0000526 .0010526]T , ||∆x|| ||x|| = 0.0005270, κ(A) ||∆b|| ||b|| = 0.0005376. La matriz A es muy bien condicionada y entonces cambios pequeños en b producen cambios pequeños en x. ✸ Ejemplo 3.7. Resolver los sistemas Ax = b y Ax′ = b′, donde A = 10.01 10.00 10.00 9.99 , b = 20.01 19.99 , b′ = 20.02 19.98 . Entonces, ∆b = [0.01 − 0.01]T , ||∆b|| ||b|| = 0.0005, A−1 = −99900 100000 100000 −100100 , κ(A) = 4000002. Al resolver los dos sistemas se obtiene: x = [1 1]T , x′ = [−1998 2002]T , ∆x = [−1999 2001]T , ||∆x|| ||x|| = 2000.0002, κ(A) ||∆b|| ||b|| = 2000.0008. La matriz A es muy mal condicionada y entonces cambios pequeños en b pueden producir cambios muy grandes en la solución. ✸
  • 116. 102 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Ejemplo 3.8. Resolver los sistemas Ax = b y Ax′′ = b′′, donde A = 10.01 10.00 10.00 9.99 , b = 20.01 19.99 , b′′ = 20.02 20.00 . Entonces, ∆b = [0.01 0.01]T , ||∆b|| ||b|| = 0.0005, A−1 = −99900 100000 100000 −100100 , κ(A) = 4000002. Al resolver los dos sistemas se obtiene: x = [1 1]T , x′′ = [2 0]T , ∆x = [1 − 1]T , ||∆x|| ||x|| = 1, κ(A) ||∆b|| ||b|| = 2000.0008. La matriz A, la misma del ejemplo anterior, es muy mal condicionada y entonces cambios pequeños en b pueden producir cambios muy grandes en la solución. Sin embargo, los cambios en la solución, aunque no desprecia- bles, no fueron tan grandes como en el ejemplo anterior, o sea, ||∆x||/||x|| está lejos de la cota superior. ✸ En Scilab el condicionamiento para la norma euclidiana se calcula por medio de cond( A ). 3.5. Método de Jacobi Este método se parece al método GS, también se utiliza la ecuación i-ésima para calcular xi y el cálculo de xi se hace de la misma forma. Pero un valor
  • 117. Héctor M. Mora E. Métodos Numéricos con Scilab 103 recién calculado de xi no se utiliza inmediatamente. Los valores nuevos de xi solamente se empiezan a utilizar cuando ya se calcularon todos los n valores xi. Ejemplo 3.9. A =   4 1 −1 2 5 0 −2 3 10   , b =   7 19 45   , x0 =   1.2 1.5 1.6   . Gauss-Seidel Jacobi x1 x2 x3 x1 x2 x3 1.2 1.5 1.6 1.2 1.5 1.6 1.775 1.5 1.6 1.775 1.5 1.6 1.775 3.09 1.6 1.775 3.32 1.6 1.775 3.09 3.928 1.775 3.32 4.29 1.9595 3.09 3.928 1.9925 3.32 4.29 1.9595 3.0162 3.928 1.9925 3.09 4.29 1.9595 3.0162 3.98704 1.9925 3.09 3.859 El primer vector calculado es igual en los dos métodos. Para calcular x2 en el método GS se usa el valor x1 = 1.775 recién calculado: x2 = 19 − 2 × 1.775 − 0 × 1.6 5 = 3.09 . En cambio, en el método de Jacobi: x2 = 19 − 2 × 1.2 − 0 × 1.6 5 = 3.32 . En el método de GS: x3 = 45 + 2 × 1.775 − 3 × 3.09 10 = 3.928 . En el método de Jacobi: x3 = 45 + 2 × 1.2 − 3 × 1.5 10 = 4.29 . Ahora sı́, en el método de Jacobi, los valores calculados de x2 y x3 se utilizan para volver a calcular x1. ✸
  • 118. 104 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES 3.6. Método iterativo general Muchos método iterativos, en particular, los métodos de Jacobi, GS, SOR se pueden expresar de la forma xk+1 = Mxk + p. (3.11) Al aplicar varias veces la fórmula anterior, se está buscando un punto fijo de la función f(x) = Mx + p. Utilizando el teorema de punto fijo de Banach, uno de los resultados más importantes del análisis matemático, se tiene el siguiente resultado. Teorema 3.3. Si existe una norma matricial || || tal que ||M|| 1. entonces existe un único punto fijo x∗, tal que x∗ = Mx∗ + p. Este punto se puede obtener como lı́mite de la iteración (3.11) para cualquier x0 inicial. En algunos casos el criterio anterior se puede aplicar fácilmente al encontrar una norma adecuada. Empero, si después de ensayar con varias normas, no se ha encontrado una que sirva, no se puede concluir que no habrá convergencia. El siguiente criterio es más preciso pero puede ser numéricamente más difı́cil de calcular. Teorema 3.4. La iteración de punto fijo (3.11) converge si y solamente si ρ(M) 1. El radio espectral de una matriz cuadrada M, denotado generalmente ρ(M), es la máxima norma de los valores propios de M (reales o complejos), ρ(M) = max 1≤i≤n {|λi| : λi ∈ esp(M)}, donde esp(M) es el conjunto de valores propios de M. La convergencia es lenta cuando ρ(M) es cercano a 1, es rápida cuando ρ(M) es pequeño (cercano a 0). Cualquier matriz cuadrada A se puede expresar de la forma A = L + D + U,
  • 119. Héctor M. Mora E. Métodos Numéricos con Scilab 105 donde L es la matriz triangular inferior correspondiente a la parte triangular estrictamente inferior de A, D es la matriz diagonal correspondiente a los elementos diagonales de A y U es la matriz triangular superior correspondi- ente a la parte triangular estrictamente superior de A. Para el método de Jacobi: MJ = −D−1 (L + U), (3.12a) pJ = D−1 b. (3.12b) Para el método GS MGS = −(D + L)−1 U, (3.13a) pGS = (D + L)−1 b. (3.13b) 3.7. Método de sobrerrelajación Este método, conocido como SOR, successive over relaxation, se puede con- siderar como una generalización del método GS. Las fórmulas que definen el método GS son: ri = bi − Ai· x , δi = ri aii , xi ← xi + δi . En el método SOR únicamente cambia la última asignación, introduciendo un parámetro ω, ri = bi − Ai·x , δi = ri aii , xi ← xi + ωδi . (3.14) Si 0 ω 1 se tiene una subrrelajación, si 1 ω se tiene la sobrerrela- jación propiamente dicha. Si ω = 1, se tiene el método GS. Una escogencia adecuada de ω mejora la convergencia del método GS. Este método se usa en algunas técnicas de solución de ecuaciones diferenciales parciales. Una condición necesaria para que el método SOR converja, ver [Dem97], es que 0 ω 2 .
  • 120. 106 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Para matrices definidas positivas el método SOR converge para cualquier ω en el intervalo ]0, 2[. Ejemplo 3.10. Resolver el sistema Ax = b por el método SOR con ω = 1.4 partiendo de x0 = (1, 1, 1, 1). A =     5 −1 2 −2 0 4 2 3 3 3 8 −2 −1 4 −1 6     , b =     25 −10 35 −33     . Entonces, r1 = b1 − A1·x = 25 − 4 = 21 δ1 = 21 5 = 4.2 ωδ1 = 5.88 x1 = 1 + 5.88 = 6.88 r2 = −10 − 9 = −19 δ2 = −19 4 = −4.75 ωδ2 = −6.65 x2 = 1 − 6.65 = −5.65 r3 = 35 − 9.69 = 25.31 δ3 = 25.31 8 = 3.163750 ωδ3 = 4.429250 x3 = 1 + 4.429250 = 5.429250 r4 = −33 − −28.909250 = −4.090750 δ4 = −4.090750 6 = −0.681792 ωδ4 = −0.954508 x4 = 1 − 0.954508 = 0.045492
  • 121. Héctor M. Mora E. Métodos Numéricos con Scilab 107 r1 = 25 − 50.817517 = −25.817517 δ1 = −25.817517 5 = −5.163503 ωδ1 = −7.228905 x1 = 6.880000 + −7.228905 = −0.348905 La siguiente tabla muestra las primeras 15 iteraciones completas Sobrerrelajación, ω = 1.4 k x1 x2 x3 x4 0 1.000000 1.000000 1.000000 1.000000 1 6.880000 -5.650000 5.429250 0.045492 2 -0.348905 -5.088241 6.823724 -1.458380 3 1.076876 -4.710011 4.792473 -1.351123 4 1.810033 -3.552048 4.649676 -2.337041 5 1.368852 -2.880061 4.240550 -2.768266 6 1.721105 -2.409681 3.821389 -3.050409 7 1.788640 -2.008170 3.644054 -3.337915 8 1.812353 -1.742759 3.462571 -3.507443 9 1.883878 -1.543881 3.333868 -3.638593 10 1.909584 -1.395632 3.248121 -3.738508 11 1.932877 -1.289998 3.179762 -3.807650 12 1.952699 -1.211802 3.131447 -3.859624 13 1.964616 -1.154687 3.096340 -3.897553 14 1.974261 -1.113133 3.070228 -3.925007 15 1.981287 -1.082649 3.051371 -3.945238 La tabla siguiente muestra los resultados de la solución del mismo sistema por el método GS. La solución exacta es x = (2, −1, 3, −4). Se aprecia que en la iteración 15 se tiene una mejor aproximación de la solución con el método de sobrerrelajación.
  • 122. 108 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Gauss-Seidel k x1 x2 x3 x4 0 1.000000 1.000000 1.000000 1.000000 1 5.200000 -3.750000 4.081250 -1.453125 2 2.036250 -3.450781 4.542168 -2.103076 3 1.651746 -3.193777 4.427492 -2.357609 4 1.647204 -2.945539 4.272474 -2.549694 5 1.682025 -2.723966 4.128304 -2.715634 6 1.717631 -2.527427 3.999765 -2.862150 7 1.749749 -2.353270 3.885783 -2.991898 8 1.778274 -2.198968 3.784786 -3.106845 9 1.803554 -2.062259 3.695303 -3.208684 10 1.825953 -1.941139 3.616023 -3.298912 11 1.845798 -1.833828 3.545783 -3.378851 12 1.863381 -1.738753 3.483552 -3.449676 13 1.878958 -1.654519 3.428416 -3.512425 14 1.892760 -1.579890 3.379568 -3.568019 15 1.904987 -1.513770 3.336289 -3.617274 ✸ El método SOR depende de la escogencia de ω y queda entonces la pre- gunta: ¿cómo escoger ω? La respuesta no es sencilla. Algunas veces se hace simplemente por ensayo y error. Si se desea resolver muchos sistemas de ecuaciones parecidos, por ejemplo, provenientes del mismo tipo de problema pero con datos ligeramente diferentes, se puede pensar que un valor ade- cuado de ω para un problema, puede servir para uno parecido. Entonces, se puede pensar en hacer ensayos con varios valores de ω para “ver” y escoger el ω que se supone sirva para este tipo de problemas. En algunos casos muy particulares se puede hacer un estudio teórico. Tal es el caso de la solución, por diferencias finitas, de la ecuación de Poisson en un rectángulo. Allı́ se demuestra que ωopt = 2 1 + sin π m + 1 · Este resultado y otros teóricos se basan en el radio espectral de la matriz de la iteración de punto fijo. Se puede mostrar que el método SOR se puede expresar como una iteración
  • 123. Héctor M. Mora E. Métodos Numéricos con Scilab 109 de punto fijo con MSOR = (D + ωL)−1 (1 − ω)D − ωU , (3.15a) pSOR = ω(D + ωL)−1 b. (3.15b) La deducción anterior proviene de descomponer A = 1 ω D + L + (1 − 1 ω )D + U = 1 ω D + ωL + 1 ω (ω − 1)D + ωU = D + ωL ω + (ω − 1)D + ωU ω · Entonces, Ax = b D + ωL ω + (ω − 1)D + ωU ω x = b D + ωL + (ω − 1)D + ωU x = ωb (D + ωL)x = − (ω − 1)D + ωU x + ωb (D + ωL)x = (1 − ω)D − ωU x + ωb x = (D + ωL)−1 (1 − ω)D − ωU x + ω(D + ωL)−1 b . MGS = −(D + L)−1 U, pGS = (D + L)−1 b. Para el ejemplo 3.10, con ω = 1.4, xk+1 =     −0.400000 0.280000 −0.560000 0.560000 0.000000 −0.400000 −0.700000 −1.050000 0.210000 0.063000 0.261500 0.607250 −0.044333 0.453367 0.583683 0.852358     xk +     7.000000 −3.500000 4.287500 −1.799583     . En este caso, ρ(M) = 0.730810, lo que garantiza la convergencia. La siguiente tabla nos muestra los valores del número de iteraciones y del radio espectral para diferentes valores de ω. El criterio de parada utilizado fue max{|δi| : i = 1, ..., n} ≤ 0.000001.
  • 124. 110 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Sobrerrelajación ω k ρ(M) 0.10 999 0.994 0.20 641 0.987 0.30 415 0.979 0.40 301 0.970 0.50 232 0.961 0.60 185 0.950 0.70 151 0.937 0.80 125 0.923 0.90 105 0.906 1.00 88 0.886 1.10 74 0.862 1.20 61 0.831 1.30 50 0.790 1.40 40 0.731 1.50 29 0.620 1.60 33 0.662 1.70 50 0.765 1.80 92 0.867 1.90 408 0.969 La figura 3.1 muestra la variación del radio espectral ρ(M) al variar ω. Proviene de un conjunto de datos más amplio que el de la tabla anterior. El mejor valor de ω es aproximadamente ω ≈ 1.55. Esto coincide, en la tabla, con el menor número de iteraciones. El siguiente es el esquema del algoritmo de sobrerrelajación, muy parecido al de GS. Se supone que no hay elementos diagonales nulos.
  • 125. Héctor M. Mora E. Métodos Numéricos con Scilab 111 1 2 1 ω ρ(M) Figura 3.1. Método SOR: ω y radio espectral SOR: Sobrerrelajación datos: A, b, ω, x0, ε, maxit x = x0 para k = 1, ...,maxit difX = 0 para i = 1, ..., n ri = bi − Ai· x δi = ri aii xi = xi + ωδi difX = max{difX, |ωδi|} fin-para i si difX ≤ ε ent x∗ ≈ x, salir fin-para k El método de sobrerrelajación, como el de GS, es útil para sistemas dispersos en los que la matriz se ha almacenado de manera dispersa. Si la matriz es dispersa pero se almacena como si fuera densa, el método de Gauss, en la mayorı́a de los casos, debe resultar mejor.
  • 126. 112 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES 3.8. Métodos de minimización Si A es una matriz simétrica y definida positiva (en esta sección y en las dos siguientes se supone que A es definida positiva), la solución del sistema Ax = b (3.16) es exactamente el mismo punto x∗ que resuelve el siguiente problema de optimización: min f(x) = 1 2 xT Ax − bT x. (3.17) Como A es definida positiva, entonces f es convexa (más aún, es estricta- mente convexa). Para funciones convexas diferenciables, un punto crı́tico, punto de gradiente nulo, es necesariamente un minimizador global: ∇f(x) = f′ (x) = Ax − b = 0. Si A es invertible, no necesariamente definida positiva, resolver Ax = b es equivalente a resolver AT Ax = AT b y es equivalente a minimizar f(x) = 1 2 xT AT Ax − (AT b)T x. (3.18) La matriz AT A es definida positiva, luego siempre se puede pensar en re- solver un sistema de ecuaciones donde la matriz es definida positiva, proble- ma equivalente a minimizar una función cuadrática estrictamente convexa (3.17). Para minimizar funciones sin restricciones hay muchos métodos. La mayo- rı́a de los métodos de minimización son iterativos. En casi todos, en cada iteración, dado un punto xk, hay dos pasos importantes: en el primero se cal- cula una dirección dk. Normalmente esta dirección cumple con la propiedad f′ (xk )T dk 0. Esto garantiza que la dirección sea de descenso, es decir, que para t suficien- temente pequeño f(xk + tdk ) f(xk ).
  • 127. Héctor M. Mora E. Métodos Numéricos con Scilab 113 El segundo paso consiste en encontrar el mejor t posible, o sea, encontrar tk = argmin f(xk + t dk ), t ≥ 0. (3.19) Con dk y tk se construye el siguiente punto xk+1 = xk + tk dk . Para resolver (3.19) hay varios métodos. Si f es cuadrática (en Rn), entonces ϕ(t) = f(xk+tdk) es cuadrática (en R). Como A es definida positiva, ϕ repre- senta una parábola que abre hacia arriba y el punto crı́tico, tc, corresponde a un minimizador. ϕ(t) = 1 2 (xk + tdk )T A(xk + tdk ) − bT (xk + tdk ) ϕ(t) = t2 2 dkT Adk + tdkT (Axk − b) + f(xk ) ϕ′ (t) = tdkT Adk + dkT (Axk − b) entonces tk = tc = − dkT (Axk − b) dkT Adk (3.20) 3.9. Método del descenso más pendiente Un método muy popular y sencillo, pero no necesariamente muy eficiente, es el método de Cauchy, también llamado método del gradiente o método del descenso más pendiente. En este método la dirección es simplemente el opuesto del gradiente, dk = −f′ (xk ) = −(Axk − b) Entonces, dk = b − Axk (3.21) tk = dkT dk dkT Adk (3.22) xk+1 = xk + tkdk . (3.23)
  • 128. 114 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Ejemplo 3.11. Aplicar el método del descenso más pendiente para resolver Ax = b, sabiendo que A es definida positiva, donde A =   4 1 2 1 5 −2 2 −2 10   , b =   13 −21 50   , x0 =   1 1 1   . k = 0 d : 6.000000 -25.000000 40.000000 t = 0.094488 x1 : 1.566927 -1.362196 4.779514 k = 1 d : -1.464541 -6.196916 -3.653391 t = 0.190401 x2 : 1.288078 -2.542093 4.083907 k = 2 d : 2.221969 -1.409801 1.500593 t = 0.135469 x3 : 1.589087 -2.733078 4.287191 k = 3 d : 0.802349 -0.349316 -1.516240 t = 0.164510 x4 : 1.721081 -2.790544 4.037754 k = 4 d : 0.830711 -0.692854 0.599209 t = 0.135907 x5 : 1.833980 -2.884707 4.119191 k = 5 d : 0.310405 -0.172063 -0.629281 t = 0.164543 x6 : 1.885055 -2.913019 4.015647 x7 : 1.931468 -2.952251 4.049268 x8 : 1.952504 -2.964045 4.006467 x9 : 1.971680 -2.980265 4.020361 x10 : 1.980371 -2.985141 4.002673
  • 129. Héctor M. Mora E. Métodos Numéricos con Scilab 115 x11 : 1.988296 -2.991844 4.008415 x12 : 1.991888 -2.993859 4.001105 x13 : 1.995163 -2.996629 4.003477 x14 : 1.996648 -2.997462 4.000456 x15 : 1.998001 -2.998607 4.001437 x16 : 1.998615 -2.998951 4.000189 x17 : 1.999174 -2.999424 4.000594 x18 : 1.999427 -2.999567 4.000078 x19 : 1.999659 -2.999762 4.000245 x20 : 1.999763 -2.999821 4.000032 Ejemplo 3.12. Aplicar el método del descenso más pendiente para resolver Ax = b, sabiendo que A es definida positiva, donde A =   19 6 8 6 5 2 8 2 4   , b =   55 22 24   , x0 =   1 1 1   . k = 0 d : 22.000000 9.000000 10.000000 t = 0.040905 x1 : 1.899920 1.368149 1.409055 k = 1 d : -0.579812 0.941625 0.428123 t = 0.531990 x2 : 1.591466 1.869085 1.636812 k = 2 d : 0.453147 -0.167842 0.982857 t = 0.089118 x3 : 1.631849 1.854127 1.724402 k = 3 d : -0.925117 -0.510535 0.339342 t = 0.068514 x4 : 1.568466 1.819148 1.747652 k = 4 d : 0.303036 -0.001843 0.823366
  • 130. 116 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES t = 0.091249 x5 : 1.596118 1.818980 1.822783 k = 5 d : -0.822384 -0.317174 0.301965 t = 0.069496 x6 : 1.538966 1.796938 1.843768 x95 : 1.025125 1.989683 2.952309 x96 : 1.022738 1.989417 2.953040 x97 : 1.023406 1.990389 2.955571 x98 : 1.021183 1.990141 2.956253 x99 : 1.021805 1.991047 2.958611 x100 : 1.019734 1.990816 2.959245 x101 : 1.020313 1.991659 2.961442 La rapidez de convergencia del método del descenso más pendiente, cuando A es definida positiva, depende del cociente λn/λ1, donde λn es el mayor valor propio y λ1 el menor. Si el cociente es cercano a uno, hay buena convergencia. Si el cociente es grande, la convergencia es lenta a causa del zigzagueo. primer ejemplo v = 2.3714059 5.5646277 11.063966 coc = 4.6655726 Segundo ejemplo: valores propios 0.4250900 3.0722446 24.502665 coc = 57.641129
  • 131. Héctor M. Mora E. Métodos Numéricos con Scilab 117 3.10. Método del gradiente conjugado Dentro del grupo de métodos de direcciones conjugadas, está el método del gradiente conjugado. Este método se adapta muy bien cuando la matriz es “dispersa”. Tiene una ventaja adicional: aunque es un método iterativo, a lo más en n iteraciones se obtiene la solución exacta, si no hay errores de redondeo. En el método GC, la dirección se construye agregando a −f′(xk) un múltiplo de la dirección anterior, dk = −f′ (xk ) + αk dk−1 . (3.24) Dos direcciones diferentes, di y dj, se llaman conjugadas con respecto a A, si diT A dj = 0. Para el caso de la solución de un sistema lineal por medio del método GC, es corriente denominar el vector residuo rk = Axk − b. (3.25) Obviamente, xk = x∗ si y solamente si rk = 0. El vector residuo es exacta- mente el mismo gradiente de f en el punto xk. Las fórmulas que completan la definición del método GC son: α1 = 0, (3.26) αk = ||rk||2 2 ||rk−1||2 2 , k = 2, ..., n, (3.27) tk = ||rk||2 2 dkT Adk , k = 1, ..., n. (3.28) Suponiendo que A es definida positiva, el método GC tiene las siguientes propiedades: dk es dirección de descenso. f(xk) f(xk−1). las direcciones son conjugadas con respecto a A. Si no hay errores de redondeo, entonces x∗ = xk para algún k ≤ n + 1.
  • 132. 118 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES Cuando se llega a xn+1 y no se obtiene la solución con la precisión deseada, entonces se vuelve a empezar el proceso utilizando como nuevo x1 el xn+1 obtenido. Método del gradiente conjugado datos: A, b, x1, MAXIT, ε para K = 1, ..., MAXIT para k = 1, ..., n rk = Axk − b si ||rk|| ε ent parar si k = 1 ent dk = −rk sino αk = ||rk||2 2 ||rk−1||2 2 dk = −rk + αkdk−1 fin-sino tk = ||rk||2 2 dkT Adk xk+1 = xk + tkdk fin-para k x1 = xn+1 fin-para K Ejemplo 3.13. Resolver el sistema Ax = b por el método GC, partiendo de x1 = (1, 1, 1), donde A =   19 6 8 6 5 2 8 2 4   , b =   55 22 24   . r1 = Ax1 − b = (−22, −9, −10), ||r1 ||2 2 = 665, d1 = −r1 = (22, 9, 10), d1T Ad1 = 16257, t1 = 665 16257 = 0.040905, x2 = x1 + t1d1 = (1.899920, 1.368149, 1.409055),
  • 133. Héctor M. Mora E. Métodos Numéricos con Scilab 119 r2 = (0.579812, −0.941625, −0.428123), ||r2 ||2 2 = 1.406129, α2 = 1.406129 665 = 0.002114, d2 = (−0.533293, 0.960655, 0.449268), d2T Ad2 = 2.570462, t2 = 0.547034, x3 = (1.608191, 1.893660, 1.654819), r3 = (0.156138, 0.427083, −0.727877), ||r3 ||2 2 = 0.736584, α3 = 0.523838, d3 = (−0.435497, 0.076145, 0.963221), d3T Ad3 = 0.527433, t3 = 1.396545, x4 = (1, 2, 3), x1 = x4 = (1, 2, 3), r1 = (0, 0, 0). ✸ Si la matriz A es dispersa y se utiliza una estructura de datos donde so- lamente se almacenen los elementos no nulos, para poder implementar con éxito el método GC, se requiere simplemente poder efectuar el producto de la matriz A por un vector. Hay dos casos, Axk para calcular rk y Adk para calcular tk. Las otras operaciones necesarias son producto escalar en- tre vectores, sumas o restas de vectores y multiplicación de un escalar por un vector. Todo esto hace que sea un método muy útil para matrices muy grandes pero muy poco densas. Ejercicios 3.1 En este y en los siguientes ejercicios considere el sistema Ax = b. Dé un punto inicial. Aplique los métodos de Jacobi y Gauss-Seidel. Observe
  • 134. 120 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES si hay convergencia o no. Compare. Utilice los criterios teóricos de convergencia. A =   −3 0 4 −3 3 2 −2 2 3   , b =   1 2 3   3.2 A =   −3 3 2 2 −4 −3 −4 2 6   , b =   −19 19 −14   3.3 A =   −2 −5 3 −1 2 −5 −1 −1 1   , b =   −9 7 1   3.4 A =   −4 2 3 0 5 1 −2 −4 −3   , b =   18 −1 −4   3.5 A =   4 −6 10 −6 25 9 10 9 62   , b =   66 −51 241   3.6 A =   8 −3 4 5 −13 −7 8 −9 18   , b =   41 21 115   3.7 Use los datos de un ejercicio anterior donde el método GS converge. Aplique el método de sobrerrelajación con varios valores de ω. Trate de encontrar un ω “óptimo”. 3.8 Use los datos de un ejercicio anterior con matriz definida positiva. Aplique el método del descenso más pendiente. 3.9 Use los datos de un ejercicio anterior con matriz definida positiva. Aplique el método del gradiente conjugado. 3.10 Use los datos de un ejercicio anterior con matriz no definida positi- va. Utilice un método de descenso para obtener la solución mediante (3.18).
  • 135. Héctor M. Mora E. Métodos Numéricos con Scilab 121 3.11 Suponga que tiene una matriz dispersa de la que únicamente conoce las entradas no nulas. Esta información puede estar dada por un conjunto de valores de la forma i j aij. Por ejemplo una matriz en R3×3: 1 1 10 1 2 2 2 1 3 2 2 11 3 2 5 3 3 12 Busque, averigüe o conciba una forma de guardar estos datos de tal manera que pueda hacer una función de Scilab para hacer, dados i y un vector columna x, el producto Ai·x. Haga una función de Scilab para el método de Gauss-Seidel. 3.12 Análogo al ejercicio anterior pero se trata de una matriz simétrica y posiblemente definida positiva. En este caso la información necesaria es la de las entradas no nulas de la parte tringular superior. Por ejemplo, 1 1 10 1 2 2 2 2 11 3 3 12 Haga una función de Scilab para el método del gradiente conjugado. 3.13 Se dice que una matriz A es banda de ancho 2m + 1 si aij = 0 siempre que |i − j| m. Si m = 0, se trata de una matriz diagonal. Si m = 1. se trata de una matriz tridiagonal. Si A es simétrica y posiblemente definida positiva, toda la información indispensable es: los elementos diagonales y, para casi todas las filas, m elementos de la parte estric- tamente superior. Esta información se puede almacenar en una matriz n × (m + 1). Por ejemplo, la información de una matriz 10 × 10 de ancho 2 × 2 + 1 puede ser 2.4 -0.36 -0.32 2.88 0.13 -0.28 1.28 0.36 0.42 2.26 -0.07 0.03
  • 136. 122 CAPÍTULO 3. MÉTODOS ITERATIVOS PARA SISTEMAS DE ECUACIONES LINEALES 1.56 0.38 -0.43 1.38 0.23 -0.4 1.3 0.24 -0.19 2.66 -0.09 -0.41 2.62 0.1 0 2.4 0 0 Demuestre que si A es banda y definida positiva, la matriz U de la factorización de Cholesky también lo es. 3.14 Elabore una función de Scilab que dada la información de una matriz banda definida positiva, obtenga la factorización de Cholesky. Elabore otra función para resolver el sistema triangular inferior banda UT p = q. Elabore otra función para resolver el sistema triangular superior banda Up = q. Utilice las tres funciones para resolver el sistema de ecuaciones.
  • 137. Capı́tulo 4 Ecuaciones no lineales Uno de los problemas más corrientes en matemáticas consiste en resolver una ecuación, es decir, encontrar un valor x∗ ∈ R que satisfaga f(x) = 0, donde f es una función de variable y valor real, o sea, f : R → R. Este x∗ se llama solución de la ecuación. A veces también se dice que x∗ es una raı́z o un cero. Algunos ejemplos sencillos de ecuaciones son: x5 − 3x4 + 10x − 8 = 0, ex − x3 + 8 = 0, x2 + x cos(x − 1) + 2 − x = 0. En algunos casos no se tiene una expresión sencilla de f, sino que f(x) corresponde al resultado de un proceso; por ejemplo: Z x −∞ e−t2 dt − 0.2 = 0. Lo mı́nimo que se le exige a f es que sea continua. Si no es continua en todo R, por lo menos debe ser continua en un intervalo [a, b] donde se busca la raı́z. Algunos métodos requieren que f sea derivable. Para la aplicación de algunos teoremas de convergencia, no para el método en sı́, se requieren derivadas de orden superior. 123
  • 138. 124 CAPÍTULO 4. ECUACIONES NO LINEALES Los métodos generales de solución de ecuaciones sirven únicamente para hallar raı́ces reales. Algunos métodos especı́ficos para polinomios permiten obtener raı́ces complejas. Los métodos presuponen que la ecuación f(x) = 0 tiene solución. Es nece- sario, antes de aplicar mecánicamente los métodos, estudiar la función, averiguar si tiene raı́ces y ubicarlas aproximadamente. En algunos casos muy difı́ciles no es posible hacer un análisis previo de la función, entonces hay que utilizar de manera mecánica uno o varios métodos, pero sabiendo que podrı́an ser ineficientes o, simplemente, no funcionar. La mayorı́a de los métodos parten de x0, aproximación inicial de x∗, a partir del cual se obtiene x1. A partir de x1 se obtiene x2, después x3, y ası́ sucesi- vamente se construye la sucesión {xk} con el objetivo, no siempre cumplido, de que lim k→∞ xk = x∗ . El proceso anterior es teóricamente infinito, y obtendrı́a la solución después de haber hecho un número infinito de cálculos. En la práctica, el proceso se detiene cuando se obtiene una aproximación suficientemente buena de x∗. Esto querrı́a decir que el proceso se detendrı́a cuando |xk − x∗ | ≤ ε, para un ε dado. El anterior criterio supone el conocimiento de x∗, que es justamente lo buscado. Entonces, se utiliza el criterio fácilmente aplicable, |f(xk)| ≤ ε. En la mayorı́a de los casos, cuanto más cerca esté x0 de x∗, más rápidamente se obtendrá una buena aproximación de x∗. Otros métodos, llamados métodos de encajonamiento, bracketing, parten de un intervalo inicial [a0, b0], con a0 b0, en el cual se sabe que existe una raı́z x∗. A partir de él, se construye otro intervalo [a1, b1], contenido en el anterior, en el que también está x∗ y que es de menor tamaño. De manera análoga se construye [a2, b2]. Se espera que la sucesión formada por los tamaños tienda a 0. Explı́citamente, x∗ ∈ [a0, b0], [ak+1, bk+1] ⊂ [ak, bk], k = 1, 2, ..., x∗ ∈ [ak, bk], k = 1, 2, ..., lim k→∞ (bk − ak) = 0.
  • 139. Héctor M. Mora E. Métodos Numéricos con Scilab 125 En este caso, el proceso se detiene cuando se obtiene un intervalo suficien- temente pequeño, bk − ak ≤ ε. Cualquiera de los puntos del último intervalo es una buena aproximación de x∗. 4.1. En Scilab Para resolver f(x) = 0, donde f es una función de variable y valor real, se utiliza fsolve. Por ejemplo, para resolver x − ex 1 + x2 − cos(x) + 0.1 = 0, es necesario definir una función de Scilab donde esté f y después utilizar fsolve. function fx = func156(x) fx = ( x - exp(x) )/( 1 + x*x ) - cos(x) + 0.1 endfunction Después de haber cargado esta función, se utiliza fsolve dándole como parámetros, la aproximación inicial y la función: r = fsolve(0, func156) Con otra aproximación inicial podrı́a dar otra raı́z. Un parámetro opcional, que puede acelerar la obtención de la solución, es otra función de Scilab donde esté definida la derivada. function y = f123(x) y = x*x*x - 4*x*x + 10*x - 20 endfunction //------------------------------------------------ function d1 = der123(x)
  • 140. 126 CAPÍTULO 4. ECUACIONES NO LINEALES d1 = 3*x*x - 8*x +10 endfunction La orden de Scilab puede ser semejante a fsolve(1, f123, der123) . Clara- mente es más cómodo no definir la derivada, pero no hacerlo puede hacer menos eficiente el uso de fsolve . La función fsolve trabaja bien, pero no siempre encuentra una solución. Por ejemplo, function y = f13(x) y = exp(x) - 2.7*x endfunction x = fsolve(1, f13) da como resultado 0.9933076 . Lo anterior hará que el usuario ingenuamente suponga que ese valor corresponde a una raı́z. Realmente la función no tiene raı́ces. Es conveniente utilizar fsolve con tres parámetros de salida, [x, fx, info] = fsolve(1, f13) fx será el valor de f13 evaluada en x, e info valdrá 1 si se obtuvo la solución con la precisión deseada. Para nuestro ejemplo los valores serán info = 4. fx = 0.0182285 x = 0.9957334 lo cual indica que no se obtuvo una raı́z. 4.2. Método de Newton También se conoce como el método de Newton-Raphson. Dado x0, se cons- truye la recta tangente en (x0, f(x0)). El valor de x donde esta recta corta el
  • 141. Héctor M. Mora E. Métodos Numéricos con Scilab 127 b x0 (x0, f(x0)) b x1 (x1, f(x1)) x2 y = f(x) Figura 4.1. Método de Newton eje x es el nuevo valor x1. Ahora se construye la recta tangente en el punto (x1, f(x1)). El punto de corte entre la recta y el eje x determina x2... En el caso general, dado xk, se construye la recta tangente en el punto (xk, f(xk)), y = f′ (xk)(x − xk) + f(xk). Para y = 0, se tiene x = xk+1, 0 = f′ (xk)(xk+1 − xk) + f(xk). Entonces, xk+1 = xk − f(xk) f′(xk) (4.1) Ejemplo 4.1. Aplicar el método de Newton a la ecuación x5−3x4+10x−8 = 0, partiendo de x0 = 3.
  • 142. 128 CAPÍTULO 4. ECUACIONES NO LINEALES k xk f(xk) f′(xk) 0 3.000000 2.200000E+01 91.000000 1 2.758242 5.589425E+00 47.587479 2 2.640786 9.381331E-01 32.171792 3 2.611626 4.892142E-02 28.848275 4 2.609930 1.590178E-04 28.660840 5 2.609924 1.698318E-09 28.660228 6 2.609924 -2.838008E-15 28.660227 Las raı́ces reales del polinomio x5 − 3x4 + 10x − 8 son: 2.6099, 1.3566, 1. Tomando otros valores iniciales el método converge a estas raı́ces. Si se toma x0 = 2.1, se esperarı́a que el método vaya hacia una de las raı́ces cercanas, 2.6099 o 1.3566 . Sin embargo, hay convergencia hacia 1. k xk f(xk) f′(xk) 0 2.100000 -4.503290e+00 -3.891500 1 0.942788 -1.974259e-01 3.894306 2 0.993484 -1.988663e-02 3.103997 3 0.999891 -3.272854e-04 3.001745 4 1.000000 -9.509814e-08 3.000001 5 1.000000 -7.993606e-15 3.000000 ✸ El método de Newton es muy popular por sus ventajas: Sencillez. Generalmente converge. En la mayorı́a de los casos, cuando converge, lo hace rápidamente. También tiene algunas desventajas: Puede no converger. Presenta problemas cuando f′(xk) ≈ 0. Requiere la evaluación de f′(x) en cada iteración. La implementación del método de Newton debe tener en cuenta varios as- pectos. Como no es un método totalmente seguro, debe estar previsto un
  • 143. Héctor M. Mora E. Métodos Numéricos con Scilab 129 número máximo de iteraciones, llamado, por ejemplo, maxit. Para una pre- cisión εf , la detención deseada para el proceso iterativo se tiene cuando |f(xk)| ≤ εf . Otra detención posible se da cuando dos valores de x son casi iguales, es decir, cuando |xk − xk−1| ≤ εx. Se acostumbra a utilizar el cam- bio relativo, o sea, |xk − xk−1|/|xk| ≤ εx. Para evitar las divisiones por cero, se usa |xk − xk−1|/(1 + |xk|) ≤ εx. Finalmente, siempre hay que evitar las divisiones por cero o por valores casi nulos. Entonces, , otra posible parada, no deseada, corresponde a |f′(xk)| ≤ ε0. El algoritmo para el método de Newton puede tener el siguiente esquema: Método de Newton datos: x0, maxit, εf , εx, ε0 xk = x0 fx = f(xk), fpx = f′(xk) para k=1,...,maxit si |fpx| ≤ ε0 ent salir δ = fx/fpx xk = xk-δ fx = f(xk), fpx = f′(xk) si |fx| ≤ εf ent x∗ ← xk, salir si |δ|/(1+|xk|) ≤ εx ent salir fin-para k Para la implementación en Scilab, es necesario determinar cómo se evalúa f y f′. Fundamentalmente hay dos posibilidades: Hacer una función para evaluar f y otra para evaluar f′. Hacer una función donde se evalúe al mismo tiempo f y f′. En la siguiente implementación del método de Newton, la función f debe evaluar al mismo tiempo f(x) y f′(x). function [fx, dfx] = f321(x) fx = x^5 - 3*x^4 + 10*x - 8 dfx = 5*x^4 -12*x^3 + 10 endfunction //---------------------------------------------------------- function [x, ind] = Newton(func, x0, eps, maxit)
  • 144. 130 CAPÍTULO 4. ECUACIONES NO LINEALES // metodo de Newton // func debe dar los valores f(x) y f’(x) // ind valdra 1 si se obtiene la raiz // 2 si se hicieron muchas iteraciones, maxit // 0 si una derivada es nula o casi // //************* eps0 = 1.0e-12 //************* x = x0 for k=0:maxit [fx, der] = func(x) //printf(’%3d %10.6f %10.6f %10.6fn’, k, x, fx, der) if abs(fx) = eps ind = 1 return end if abs(der) = eps0 ind = 0 return end x = x - fx/der end ind = 2 endfunction El llamado puede ser semejante a [x, result] = Newton(f321, 3, 1.0e-8, 20) 4.2.1. Orden de convergencia Teorema 4.1. Sean a b, I = ]a, b[, f : I → R, x∗ ∈ I, f(x∗) = 0, f′ y f′′ existen y son continuas en I, f′(x∗) 6= 0, {xk} la sucesión definida por 4.1.
  • 145. Héctor M. Mora E. Métodos Numéricos con Scilab 131 Si x0 está suficientemente cerca de x∗, entonces lim k→∞ xk = x∗ , (4.2) lim k→∞ |xk+1 − x∗| |xk − x∗|2 = |f′′(x∗)| 2|f′(x∗)| (4.3) El primer resultado dice que la sucesión converge a x∗. El segundo dice que la convergencia es cuadrática o de orden superior. La frase “x0 está sufi- cientemente cerca de x∗, entonces...” quiere decir que existe ε 0 tal que si x0 ∈ [x∗ − ε, x∗ + ε] ⊆ I, entonces... Demostración. f(x) = f(xn) + f′ (xn)(x − xn) + f′′ (ξ) (x − xn)2 2 , ξ ∈ I(x, xn) tomando x = x∗ f(x∗ ) = 0 = f(xn) + f′ (xn)(x∗ − xn) + f′′ (ξ) (x∗ − xn)2 2 , ξ ∈ I(x∗ , xn) dividiendo por f′(xn) 0 = f(xxn) f′(xxn) + (x∗ − xn) + (x∗ − xn)2 f′′(ξ) 2f′(xn) , 0 = x∗ − xn − f(xxn) f′(xxn) + (x∗ − xn)2 f′′(ξ) 2f′(xn) , 0 = x∗ − xn+1 + (x∗ − xn)2 f′′(ξ) 2f′(xn) , x∗ − xn+1 = −(x∗ − xn)2 f′′(ξ) 2f′(xn) . (4.4) Sea I = [x∗ − ε, x + ε] M = max x∈I |f′′ (x)| 2 min x∈I |f′ (x)|
  • 146. 132 CAPÍTULO 4. ECUACIONES NO LINEALES Como f′(x∗) 6= 0 y f′ es continua, se puede escoger ε que sea suficientemente pequeño para que min x∈I |f′ (x)| 0. A partir de (4.4) se obtiene |x∗ − xn+1| ≤ M|x∗ − xn|2 . (4.5) En particular, |x∗ − x1| = M|x∗ − x0|2 , M|x∗ − x1| = (M|x∗ − x0|)2 . Sea x0 tal que |x∗ − x0| ε, M|x∗ − x0| 1 . Entonces, M|x∗ − x1| 1 , M|x∗ − x1| (M|x∗ − x0|)2 , M|x∗ − x1| M|x∗ − x0|, ya que 0 t 1 ⇒ t2 t, |x∗ − x1| ε, . . . M|x∗ − xn| 1 , |x∗ − xn| ε . Luego |x∗ − xn| ≤ M|x∗ − xn−1|, M|x∗ − xn| ≤ (M|x∗ − xn−1|)2 , M|x∗ − xn| ≤ (M|x∗ − x0|)2n , |x∗ − xn| ≤ 1 M (M|x∗ − x0|)2n , Como |x∗ − x0| 1, entonces lim n→∞ |x∗ − xn| = 0,
  • 147. Héctor M. Mora E. Métodos Numéricos con Scilab 133 es decir lim n→∞ xn = x∗ . Reescribiendo (4.4), x∗ − xn+1 (x∗ − xn)2 = − f′′(ξ) 2f′(xn) , ξ ∈ I(x∗ , xn) Tomando el lı́mite, como xn tiende a x∗, lim n→∞ x∗ − xn+1 (x∗ − xn)2 = − f′′(x∗) 2f′(x∗) . A manera de comprobación, después de que se calculó una raı́z, se puede ver si la sucesión muestra aproximadamente convergencia cuadrática. Sea ek = xk − x∗. La sucesión |ek|/|ek−1|2 deberı́a acercarse a |f′′(x∗)|/ (2|f′(x∗)|). Para el ejemplo anterior |f′′(x∗)/(2|f′(x∗)|) = 16/(2 × 3) = 2.6666 . k xk |ek| |ek|/|ek−1|2 0 2.1000000000000001 1.100000e+00 1 0.9427881279712185 5.721187e-02 4.728254e-02 2 0.9934841559110774 6.515844e-03 1.990666e+00 3 0.9998909365826297 1.090634e-04 2.568844e+00 4 0.9999999683006239 3.169938e-08 2.664971e+00 5 0.9999999999999973 2.664535e-15 2.651673e+00 4.3. Método de la secante Uno de los inconvenientes del método de Newton es que necesita evaluar f′(x) en cada iteración. Algunas veces esto es imposible o muy difı́cil. Si en el método de Newton se modifica la fórmula 4.1 reemplazando f′(xk) por una aproximación f′ (xk) ≈ f(xk) − f(xk−1) xk − xk−1 , entonces se obtiene xk+1 = xk − f(xk)(xk − xk−1) f(xk) − f(xk−1) · (4.6)
  • 148. 134 CAPÍTULO 4. ECUACIONES NO LINEALES b x0 (x0, f(x0)) b x1 (x1, f(x1)) x2 y = f(x) Figura 4.2. Método de la secante En el método de Newton se utilizaba la recta tangente a la curva en el punto (xk, f(xk)). En el método de la secante se utiliza la recta (secante) que pasa por los puntos (xk, f(xk)) y (xk−1, f(xk−1)). Ejemplo 4.2. Aplicar el método de la secante a la ecuación x5 − 3x4 + 10x − 8 = 0, partiendo de x0 = 3 y de x1 = x0 + 0.01. k xk f(xk) 0 3.000000 2.200000e+01 1 3.010000 2.292085e+01 2 2.761091 5.725624e+00 3 2.678210 2.226281e+00 4 2.625482 4.593602e-01 5 2.611773 5.317368e-02 6 2.609979 1.552812e-03 7 2.609925 5.512240e-06 8 2.609924 5.747927e-10 9 2.609924 -2.838008e-15 ✸ Mediante condiciones semejantes a las exigidas en el teorema 4.1 se muestra (ver [Sch91]), que el método de la secante tiene orden de convergencia 1 + √ 5 2 ≈ 1.618 .
  • 149. Héctor M. Mora E. Métodos Numéricos con Scilab 135 Como el método de la secante es semejante al método de Newton, entonces tienen aproximadamente las mismas ventajas y las mismas desventajas, salvo dos aspectos: La convergencia del método de la secante, en la mayorı́a de los casos, es menos rápida que en el método de Newton. El método de la secante obvia la necesidad de evaluar las derivadas. El esquema del algoritmo es semejante al del método de Newton. Hay varias posibles salidas, algunas deseables, otras no. Método de la secante datos: x0, maxit, εf , εx, ε0 x1 = x0 + 0.1, f0 = f(x0), f1 = f(x1) para k=1,...,maxit den = f1-f0 si |den| ≤ ε0 ent salir δ =f1*(x1-x0)/den x2 = x1 - δ, f2 = f(x2) si |f2| ≤ εf ent x∗ ← x2, salir si |δ|/(1+|x2|) ≤ εx ent salir x0 = x1, f0 = f1, x1 = x2, f1 = f2 fin-para k El método de la secante se puede implementar en Scilab ası́: function [x, ind] = secante(f, x0, epsx, epsf, maxit) // metodo de la secante // ind valdra 1 si se obtiene la raiz, // | f(x2) | epsf o // | x2-x1 | epsx // // 2 si se hicieron muchas iteraciones, maxit // 0 si un denominador es nulo o casi nulo //************* eps0 = 1.0e-12
  • 150. 136 CAPÍTULO 4. ECUACIONES NO LINEALES //************* x = x0 h = 0.1 x1 = x0 + h f0 = f(x0) f1 = f(x1) for k=1:maxit den = f1-f0 if abs(den) = eps0 ind = 0 return end d2 = f1*(x1-x0)/den x2 = x1 - d2 f2 = f(x2) disp(k,x2,f2) if abs(f2) = epsf | abs(d2) = epsx x = x2 ind = 1 return end x0 = x1, f0 = f1 x1 = x2, f1 = f2 end x = x2 ind = 2 endfunction 4.4. Método de la bisección Es un método de encajonamiento. Si la función f es continua en el intervalo [ak, bk], ak bk, y si f(ak) y f(bk) tienen signo diferente, f(ak)f(bk) 0, entonces f tiene por lo menos una raı́z en el intervalo ]ak, bk[. Sea mk = (ak + bk)/2 (el punto medio del intervalo). Tres casos son posibles:
  • 151. Héctor M. Mora E. Métodos Numéricos con Scilab 137 ak bk mk y = f(x) Figura 4.3. Método de bisección x∗ ≈ mk x∗ ∈ ]ak, mk[ x∗ ∈ ]mk, bk[ Estos tres casos corresponden a f(mk) ≈ 0 f(ak)f(mk) 0 f(mk)f(bk) 0 Si f(mk) ≈ 0, se tiene una aproximación de una raı́z y el proceso iterativo se detiene. Si f(mk)f(ak) 0, ak+1 será ak y se toma a mk como bk+1. En caso contrario, el nuevo ak+1 será mk y bk+1 será bk. En ambos casos se obtiene un intervalo de tamaño igual a la mitad del anterior. El proceso acaba cuando se obtiene una buena aproximación de la raı́z o cuando se tiene un intervalo suficientemente pequeño.
  • 152. 138 CAPÍTULO 4. ECUACIONES NO LINEALES Método de la bisección datos: a, b, εf , εx fa← f(a), fb← f(b) si fa·fb ≤ 0 ó b ≤ a, parar mientras b − a εx m ← (a + b)/2, fm ← f(m) si |fm| ≤ εf ent r ← m, parar fin-si si fa·fm 0, ent b ← m, fb←fm sino a ← m, fa←fm fin-si fin-mientras si |fa| ≤ |fb| ent x∗ ← a sino x∗ ← b Ejemplo 4.3. Aplicar el método de bisección a la ecuación x5 −3x4 +10x− 8 = 0, partiendo de [a0, b0] = [2, 3], deteniendo el proceso si f(mk) 10−6 o bk − ak ≤ 10−4. k ak bk f(ak) f(bk) mk f(mk) 0 2.000000 3.000000 -4.000000 22.000000 2.500000 -2.531250 1 2.500000 3.000000 -2.531250 22.000000 2.750000 5.202148 2 2.500000 2.750000 -2.531250 5.202148 2.625000 0.444733 3 2.500000 2.625000 -2.531250 0.444733 2.562500 -1.238990 4 2.562500 2.625000 -1.238990 0.444733 2.593750 -0.449286 5 2.593750 2.625000 -0.449286 0.444733 2.609375 -0.015732 6 2.609375 2.625000 -0.015732 0.444733 2.617188 0.211084 7 2.609375 2.617188 -0.015732 0.211084 2.613281 0.096829 8 2.609375 2.613281 -0.015732 0.096829 2.611328 0.040337 9 2.609375 2.611328 -0.015732 0.040337 2.610352 0.012250 10 2.609375 2.610352 -0.015732 0.012250 2.609863 -0.001754 11 2.609863 2.610352 -0.001754 0.012250 2.610107 0.005245 12 2.609863 2.610107 -0.001754 0.005245 2.609985 0.001745 13 2.609863 2.609985 -0.001754 0.001745 2.609924 -0.000005 14 2.609924 2.609985 -0.000005 0.001745 El proceso acabó al obtener un intervalo suficientemente pequeño. La aproxi- mación de la raı́z puede ser ak o bk. En este caso ak = 2.609924 es mejor que bk. ✸
  • 153. Héctor M. Mora E. Métodos Numéricos con Scilab 139 Usualmente, se define el error asociado a una aproximación como ek = |xk − x∗ |. En el método de la bisección, dado el intervalo [ak, bk], ak bk, no se tiene un valor de xk. Se sabe que en [ak, bk] hay por lo menos una raı́z. Cualquiera de los valores en el intervalo podrı́a ser xk. Sea Ek el máximo error que puede haber en la iteración k, ek ≤ Ek = bk − ak. Como el tamaño de un intervalo es exactamente la mitad del anterior bk − ak = 1 2 (bk−1 − ak−1), entonces, bk − ak = 1 2 1 2 (bk−2 − ak−2). Finalmente, bk − ak = 1 2 k (b0 − a0). Obviamente Ek → 0 y Ek Ek−1 = 1 2 → 1 2 . Esto quiere decir que la sucesión de cotas del error tiene convergencia lineal (orden 1) y tasa de convergencia 1/2. En el método de la bisección se puede saber por anticipado el número de iteraciones necesarias para obtener un tamaño deseado, bk − ak ≤ ε, 1 2 k (b0 − a0) ≤ ε, 1 2 k ≤ ε b0 − a0 , 2k ≥ b0 − a0 ε , k log 2 ≥ log b0 − a0 ε , k ≥ log b0 − a0 ε log 2 ·
  • 154. 140 CAPÍTULO 4. ECUACIONES NO LINEALES b ak b bk ck y = f(x) Figura 4.4. Método de regula ralsi Por ejemplo, si el tamaño del intervalo inicial es 3, si ε = 1.0E − 6, entonces en k = 22 (≥ 21.52) iteraciones se obtiene un intervalo suficientemente pequeño. 4.5. Método de regula falsi Igualmente se conoce con el nombre de falsa posición. Es una modificación del método de la bisección. También empieza con un intervalo [a0, b0] donde f es continua y tal que f(a0) y f(b0) tienen signo diferente. Con el método de bisección, en cada iteración, únicamente se tiene en cuenta el signo de f(ak) y de f(bk), pero no sus valores: no se está utilizando toda la información disponible. Además, es de esperar que si f(ak) está más cerca de 0 que f(bk), entonces puede ser interesante considerar, no el punto medio, sino un punto más cercano a ak. De manera análoga, si f(bk) está más cerca de 0 que f(ak), entonces puede ser interesante considerar, no el punto medio, sino un punto más cercano a bk. En el método de regula ralsi se considera el punto donde la recta que pasa por (ak, f(ak)), (bk, f(bk)) corta el eje x. Como f(ak) y f(bk) tienen signo diferente, entonces el punto de corte ck queda entre ak y bk. La ecuación de la recta es: y − f(ak) = f(bk) − f(ak) bk − ak (x − ak) .
  • 155. Héctor M. Mora E. Métodos Numéricos con Scilab 141 Cuando y = 0, se tiene el punto de corte x = ck, ck = ak − f(ak)(bk − ak) f(bk) − f(ak) · (4.7) Esta fórmula es semejante a la de la secante. Como f(ak) y f(bk) tienen signo diferente, entonces f(bk)−f(ak) tiene signo contrario al de f(ak). Entonces, −f(ak)/(f(bk)−f(ak)) 0. Usando de nuevo que f(ak) y f(bk) tienen signo diferente, entonces |f(ak)|/|f(bk) − f(ak)| 1. Luego 0 −f(ak)/(f(bk) − f(ak)) 1. Esto muestra que ak ck bk. Partiendo de un intervalo inicial [a0, b0], en la iteración k se tiene el intervalo [ak, bk] donde f es continua y f(ak), f(bk) tienen diferente signo. Se calcula ck el punto de corte y se tienen tres posibilidades excluyentes: f(ck) ≈ 0; en este caso ck es, aproximadamente, una raı́z; f(ak)f(ck) 0; en este caso hay una raı́z en el intervalo [ak, ck] = [ak+1, bk+1]; f(ak)f(ck) 0; en este caso hay una raı́z en el intervalo [ck, bk] = [ak+1, bk+1]. Ejemplo 4.4. Aplicar el método de regula ralsi a la ecuación x5 − 3x4 + 10x − 8 = 0, partiendo de [2, 5]. k ak bk f(ak) f(bk) ck f(ck) 0 2.000000 5 -4.000000 1292 2.009259 -4.054857 1 2.009259 5 -4.054857 1292 2.018616 -4.108820 2 2.018616 5 -4.108820 1292 2.028067 -4.161744 3 2.028067 5 -4.161744 1292 2.037610 -4.213478 4 2.037610 5 -4.213478 1292 2.047239 -4.263862 5 2.047239 5 -4.263862 1292 2.056952 -4.312734 10 2.096539 5 -4.489666 1292 2.106594 -4.528370 20 2.198548 5 -4.739498 1292 2.208787 -4.744664 30 2.298673 5 -4.594020 1292 2.308244 -4.554769 335 2.609924 5 -0.000001 1292 2.609924 -0.000001 Como se ve, la convergencia es muy lenta. El problema radica en que en el método de regula falsi no se puede garantizar que lim k→∞ (bk − ak) = 0.
  • 156. 142 CAPÍTULO 4. ECUACIONES NO LINEALES Esto quiere decir que el método no es seguro. Entonces, en una imple- mentación, es necesario trabajar con un número máximo de iteraciones. 4.6. Modificación del método de regula ralsi Los dos métodos, bisección y regula falsi, se pueden combinar en uno solo de la siguiente manera. En cada iteración se calcula mk y ck. Esto define tres subintervalos en [ak, bk]. Por lo menos, en uno de ellos se tiene una raı́z. Si los tres subintervalos sirven, se puede escoger cualquiera, o mejor aún, el de menor tamaño. En un caso muy especial, cuando mk y ck coinciden, se tiene una iteración del método de bisección. En cualquiera de los casos bk+1 − ak+1 ≤ 1 2 (bk − ak), entonces bk − ak ≤ 1 2 k (b0 − a0), lo que garantiza que lim k→∞ (bk − ak) = 0. Ejemplo 4.5. Aplicar la modificación del método de regula falsi a la ecuación x5 − 3x4 + 10x − 8 = 0, partiendo de [2, 5]. k a b f(a) f(b) c f(c) m f(m) 0 2.0000 5.0000 -4.00e+0 1.29e+3 2.0093 -4.0e+0 3.5000 1.0e+2 1 2.0093 3.5000 -4.05e+0 1.02e+2 2.0662 -4.4e+0 2.7546 5.4e+0 2 2.0662 2.7546 -4.36e+0 5.42e+0 2.3731 -4.2e+0 2.4104 -3.8e+0 3 2.4104 2.7546 -3.80e+0 5.42e+0 2.5523 -1.5e+0 2.5825 -7.4e-1 4 2.5825 2.7546 -7.44e-1 5.42e+0 2.6033 -1.9e-1 2.6686 1.9e+0 5 2.6033 2.6686 -1.87e-1 1.88e+0 2.6092 -2.0e-2 2.6360 7.8e-1 6 2.6092 2.6360 -2.00e-2 7.84e-1 2.6099 -9.7e-4 2.6226 3.7e-1 7 2.6099 2.6226 -9.73e-4 3.72e-1 2.6099 -2.3e-5 2.6162 1.8e-1 8 2.6099 2.6162 -2.33e-5 1.83e-1 2.6099 -2.8e-7 2.6131 9.1e-2 9 2.6099 2.6131 -2.81e-7 9.10e-2 2.6099 -1.7e-9 La modificación es mucho mejor que el método de regula falsi. Además, el número de iteraciones de la modificación debe ser menor o igual que el número de iteraciones del método de bisección. Sin embargo, para comparar
  • 157. Héctor M. Mora E. Métodos Numéricos con Scilab 143 equitativamente el método de bisección y la modificación de regula falsi, es necesario tener en cuenta el número de evaluaciones de f(x). En el método de bisección, en k iteraciones, el número de evaluaciones de f está dado por: nbisec = 2 + kbisec · En la modificación de regula falsi, nmodif = 2 + 2 kmodif · 4.7. Método de punto fijo Los métodos vistos se aplican a la solución de la ecuación f(x) = 0. El método de punto fijo sirve para resolver la ecuación g(x) = x. (4.8) Se busca un x∗ tal que su imagen, por medio de la función g, sea el mismo x∗. Por tal motivo se dice que x∗ es un punto fijo de la función g. La aplicación del método es muy sencilla. A partir de un x0 dado, se aplica varias veces la fórmula xk+1 = g(xk). (4.9) Se espera que la sucesión {xk} construida mediante (4.9) converja hacia x∗. En algunos casos el método, además de ser muy sencillo, es muy eficiente; en otros casos la eficiencia es muy baja; finalmente, en otros casos el método definitivamente no sirve. Ejemplo 4.6. Resolver x3 +x2 +6x+5 = 0. Esta ecuación se puede escribir en la forma x = − x3 + x2 + 5 6 · Aplicando el método de punto fijo a partir de x0 = −1 se tiene:
  • 158. 144 CAPÍTULO 4. ECUACIONES NO LINEALES x0 = -1 x1 = -0.833333 x2 = -0.852623 x3 = -0.851190 x4 = -0.851303 x5 = -0.851294 x6 = -0.851295 x7 = -0.851295 x8 = -0.851295 Entonces, se tiene una aproximación de una raı́z, x∗ ≈ −0.851295. En este caso el método funcionó muy bien. Utilicemos ahora otra expresión para x = g(x): x = − x3 + 6x + 5 x · Aplicando el método de punto fijo a partir de x0 = −0.851, muy buena aproximación de la raı́z, se tiene: x0 = -0.8510 x1 = -0.8488 x2 = -0.8294 x3 = -0.6599 x4 = 1.1415 x5 = -11.6832 x6 = -142.0691 x7 = -2.0190e+4 En este caso se observa que, aun partiendo de una muy buena aproximación de la solución, no hay convergencia. ✸ Antes de ver un resultado sobre convergencia del método de punto fijo, ob- servemos su interpretación gráfica. La solución de g(x) = x está determinada por el punto de corte, si lo hay, entre las gráficas y = g(x) y y = x. Después de dibujar las dos funciones, la construcción de los puntos x1, x2, x3... se hace de la siguiente manera. Después de situar el valor x0 sobre el eje x, para obtener el valor x1, se busca verticalmente la curva y = g(x). El punto obtenido tiene coordenadas (x0, g(x0)), o sea, (x0, x1). Para obte- ner x2 = g(x1) es necesario inicialmente resituar x1 sobre el eje x, para lo cual basta con buscar horizontalmente la recta y = x para obtener el punto
  • 159. Héctor M. Mora E. Métodos Numéricos con Scilab 145 y = x y = g(x) x∗ Figura 4.5. Punto fijo (x1, x1). A partir de este punto se puede obtener x2 buscando verticalmente la curva y = g(x). Se tiene el punto (x1, g(x1)), o sea, (x1, x2). Con despla- zamiento horizontal se obtiene (x2, x2). En resumen, se repite varias veces el siguiente procedimiento: a partir de (xk, xk) buscar verticalmente en la curva y = g(x) el punto (xk, xk+1), y a partir del punto obtenido buscar horizon- talmente en la recta y = x el punto (xk+1, xk+1). Si el proceso converge, los puntos obtenidos tienden hacia el punto (x∗, g(x∗)) = (x∗, x∗). Las figuras 4.6 a 4.9 muestran la utilización del método; en los dos primeros casos hay convergencia; en los otros dos no hay, aun cuando la aproximación inicial es bastante buena. En seguida, se presentan dos teoremas (demostración en [Atk78]) sobre la convergencia del método de punto fijo; el primero es más general y más preciso, el segundo es una simplificación del primero, de más fácil aplicación para ciertos problemas. Teorema 4.2. Sea g continuamente diferenciable en el intervalo [a, b], tal que g([a, b]) ⊆ [a, b], |g′ (x)| 1, para todo x ∈ [a, b]. Entonces, existe un único x∗ en [a, b] solución de x = g(x) y la iteración de punto fijo (4.9) converge a x∗ para todo x0 ∈ [a, b].
  • 160. 146 CAPÍTULO 4. ECUACIONES NO LINEALES y = x y = g(x) x0 x1 x2 x3 x∗ Figura 4.6. Método de punto fijo (a) y = x y = g(x) x0 x1 x2 x3 x∗ Figura 4.7. Método de punto fijo (b)
  • 161. Héctor M. Mora E. Métodos Numéricos con Scilab 147 y = x y = g(x) x0 x2 x3 x4 x∗ Figura 4.8. Método de punto fijo (c) y = x y = g(x) x0 x1 x2 x3 x4 x∗ Figura 4.9. Método de punto fijo (d)
  • 162. 148 CAPÍTULO 4. ECUACIONES NO LINEALES Teorema 4.3. Sea x∗ solución de x = g(x), g continuamente diferenciable en un intervalo abierto I tal que x∗ ∈ I, |g′(x∗)| 1. Entonces, la iteración de punto fijo (4.9) converge a x∗ para todo x0 suficientemente cerca de x∗. El caso ideal, en el que la convergencia es más rápida, se tiene cuando g′(x∗) ≈ 0. En los dos ejemplos numéricos anteriores, para resolver x3 +x2 +6x+5 = 0, se tiene: x = g(x) = −(x3 + x2 + 5)/6, g′(−0.8513) = −0.0786. Si se considera x = g(x)−(x3+6x+5)/x, g′(−0.8513) = 8.6020. Estos resultados numéricos concuerdan con el último teorema. Dos de los ejemplos gráficos anteriores muestran justamente que cuando |g′(x∗)| 1 el método converge. Ejemplo 4.7. Resolver x2 = 3, o sea, calcular √ 3. x2 = 3, x2 + x2 = x2 + 3, x = x2 + 3 2x , x = x + 3/x 2 · x0 = 3 x1 = 2 x2 = 1.75000000000000 x3 = 1.73214285714286 x4 = 1.73205081001473 x5 = 1.73205080756888 x6 = 1.73205080756888 Se observa que la convergencia es bastante rápida. Este método es muy utilizado para calcular raı́ces cuadradas en calculadoras de bolsillo y com- putadores. Aplicando el teorema 4.3 y teniendo en cuenta que g′(x∗) = g′( √ 3) = 1/2 − 1.5/x∗2 = 0, se concluye rápidamente que si x0 está suficientemente cerca de √ 3, entonces el método converge. La aplicación del teorema 4.2 no es tan inmediata, pero se obtiene informa- ción más detallada. La solución está en el intervalo [2, 3]; consideremos un
  • 163. Héctor M. Mora E. Métodos Numéricos con Scilab 149 intervalo aún más grande: I = [1 + ε, 4] con 0 ε 1. g(1) = 2, g(4) = 2.375, g′ (x) = 1 2 − 3 2x2 , g′ ( √ 3) = 0, g′ (1) = −1, g′ (4) = 13 32 , g′′ (x) = 3 x3 · Entonces, g′′(x) 0 para todo x positivo. Luego g′(x) es creciente para x 0. Como g′(1) = −1, entonces −1 g′(1 + ε). De nuevo por ser g′(x) creciente, entonces −1 g′(x) ≤ 13/32 para todo x ∈ I. En resumen, |g′(x)| 1 cuando x ∈ I. Entre 1 + ε y √ 3 el valor de g′(x) es negativo. Entre √ 3 y 4 el valor de g′(x) es positivo. Luego g decrece en [1+ε, √ 3] y crece en [ √ 3, 4]. Entonces, g([1 + ε, √ 3]) = [g(1 + ε), √ 3] ⊆ [2, √ 3] y g([ √ 3, 4]) = [ √ 3, 2.375]. En conse- cuencia g(I) = [ √ 3, 2.375] ⊆ I. Entonces, el método de punto fijo converge a x∗ = √ 3 para cualquier x0 ∈]1, 4]. Este resultado se puede generalizar al intervalo [1 + ε, b] con b √ 3. Si se empieza con x0 = 1/2, no se cumplen las condiciones del teorema; sin embargo, el método converge. ✸ 4.7.1. Modificación del método de punto fijo La convergencia del método de punto fijo podrı́a mejorar retomando las ideas del método de la secante. Consideremos la ecuación x = g(x) y los puntos (xi, g(xi)), (xj, g(xj)), sobre la gráfica de g. Estos puntos pueden provenir directamente o no del método de punto fijo, es decir, se puede tener que xi+1 = g(xi) y que xj+1 = g(xj), pero lo anterior no es obligatorio. La idea consiste simplemente en obtener la ecuación de la recta que pasa por esos dos puntos y buscar la intersección con la recta y = x. La abcisa del punto dará un nuevo valor xk.
  • 164. 150 CAPÍTULO 4. ECUACIONES NO LINEALES y = mx + b m = g(xj) − g(xi) xj − xi (4.10) g(xi) = mxi + b b = g(xi) − mxi (4.11) xk = mxk + b xk = b 1 − m . (4.12) Ahora se usan los puntos (xj, g(xj)), (xk, g(xk)), para obtener un nuevo xm, y ası́ sucesivamente. Usualmente, j = i + 1 y k = j + 1. 4.7.2. Método de punto fijo y método de Newton Supongamos que c 6= 0 es una constante y que x∗ es solución de la ecuación f(x) = 0. Esta se puede reescribir ası́: 0 = cf(x), x = x + cf(x) = g(x). (4.13) Si se desea resolver esta ecuación por el método de punto fijo, la convergencia es más rápida cuando g′(x∗) = 0, o sea, 1 + cf′ (x∗ ) = 0, c = − 1 f′(x∗) . Entonces, al aplicar el método de punto fijo a (4.13), se tiene la fórmula xk+1 = xk − f(xk) f′(x∗) . (4.14) Para aplicar esta fórmula se necesitarı́a conocer f′(x∗) e implı́citamente el valor de x∗, que es precisamente lo que se busca. La fórmula del método de Newton, (4.1), puede ser vista como la utilización de (4.14), reemplazando f′(x∗) por la mejor aproximación conocida en ese momento: f′(xk).
  • 165. Héctor M. Mora E. Métodos Numéricos con Scilab 151 4.8. Método de Newton en Rn Consideremos ahora un sistema de n ecuaciones con n incógnitas; por ejem- plo, x2 1 + x1x2 + x3 − 3 = 0 2x1 + 3x2x3 − 5 = 0 (4.15) (x1 + x2 + x3)2 − 10x3 + 1 = 0. Este sistema no se puede escribir en la forma matricial Ax = b; entonces no se puede resolver por los métodos usuales para sistemas de ecuaciones lineales. Lo que se hace, como en el método de Newton en R, es utilizar aproximaciones de primer orden, llamadas también aproximaciones lineales. Es la generalización de la aproximación por una recta. Un sistema de n ecuaciones con n incógnitas se puede escribir de la forma F1(x1, x2, ..., xn) = 0 F2(x1, x2, ..., xn) = 0 . . . Fn(x1, x2, ..., xn) = 0, donde cada Fi es una función de n variables con valor real, o sea, Fi : Rn → R. Denotemos x = (x1, x2, ..., xn) y F(x) =      F1(x) F2(x) . . . Fn(x)      . Ası́, F es una función de variable vectorial y valor vectorial, F : Rn → Rn, y el problema se escribe de manera compacta: F(x) = 0. (4.16) Es posible que algunos de los lectores de este libro no conozcan suficiente- mente el cálculo en varias variables, entonces no habrá una deducción (ni formal ni intuitiva) del método, simplemente se verá como una generalización del método en R.
  • 166. 152 CAPÍTULO 4. ECUACIONES NO LINEALES 4.8.1. Matriz jacobiana La matriz jacobiana de la función F : Rn → Rn, denotada por JF (x̄) o por F′(x̄), es una matriz de tamaño n × n, en la que en la i-ésima fila están las n derivadas parciales de Fi, JF (x) = F′ (x) =                 ∂F1 ∂x1 (x) ∂F1 ∂x2 (x) · · · ∂F1 ∂xn (x) ∂F2 ∂x1 (x) ∂F2 ∂x2 (x) · · · ∂F2 ∂xn (x) . . . ... ∂Fn ∂x1 (x) ∂Fn ∂x2 (x) · · · ∂Fn ∂xn (x)                 Para las ecuaciones (4.15), escritas en la forma F(x) = 0, F′ (x) =      2x1 + x2 x1 1 2 3x3 3x2 2(x1 + x2 + x3) 2(x1 + x2 + x3) 2(x1 + x2 + x3) − 10      F′ (2, −3, 4) =      1 2 1 2 12 −9 6 6 −4      . 4.8.2. Fórmula de Newton en Rn La fórmula del método de Newton en R, xk+1 = xk − f(xk) f′(xk) , se puede reescribir con superı́ndices en lugar de subı́ndices: xk+1 = xk − f(xk) f′(xk) .
  • 167. Héctor M. Mora E. Métodos Numéricos con Scilab 153 De nuevo, es simplemente otra forma de escribir xk+1 = xk − f′ (xk )−1 f(xk ). Esta expresión se puede generalizar a Rn mediante: xk+1 = xk − F′ (xk )−1 F(xk ). (4.17) El esquema de la deducción formal de la fórmula anterior es el siguiente. Con condiciones adecuadas, F(x) se puede aproximar, cerca a xk, por la función afı́n L : Rn → Rn, F(x) ≈ L(x) = F(xk ) + F′ (xk )(x − xk ). Como se busca F(x) = 0, entonces se busca también L(x) = 0: F(xk ) + F′ (xk )(x − xk ) = 0. Al despejar x, se obtiene (4.17) La interpretación de todo el método aparece a continuación. Sea x∗, un vector de n componentes, solución del sistema (4.16). Dependiendo de la conveniencia se podrá escribir x∗ = (x∗ 1, x∗ 2, ..., x∗ n) o x∗ =      x∗ 1 x∗ 2 . . . x∗ n      . El método empieza con un vector x0 = (x0 1, x0 2, ..., x0 n), aproximación inicial de la solución x∗. Mediante (4.17) se construye una sucesión de vectores {xk = (xk 1, xk 2, ..., xk n)} con el deseo de que xk → x∗. En palabras, el vector xk+1 es igual al vector xk menos el producto de la inversa de la matriz jacobiana F′(xk) y el vector F(xk). Para evitar el cálculo de una inversa, la fórmula se puede reescribir dk = −F′ (xk )−1 F(xk ) xk+1 = xk + dk . Premultiplicando por F′(xk) F′ (xk ) dk = −F′ (xk )F′ (xk )−1 F(xk ), F′ (xk ) dk = −F(xk ).
  • 168. 154 CAPÍTULO 4. ECUACIONES NO LINEALES Para aplicar lo anterior, se conoce (o se puede calcular) la matriz F′(xk). También se conoce el vector F(xk). O sea, simplemente se tiene un sistema de ecuaciones lineales. La solución de este sistema es el vector dk. Entonces, el método de Newton se resume en los dos pasos siguientes: 1) resolver F′(xk) dk = −F(xk) 2) xk+1 = xk + dk. (4.18) Ejemplo 4.8. Resolver el sistema x2 1 + x1x2 + x3 − 3 = 0 2x1 + 3x2x3 − 5 = 0 (x1 + x2 + x3)2 − 10x3 + 1 = 0 a partir de x0 = (2, −3, 4). F(x0 ) =   −1 −37 −30   , F′ (x0 ) =   1 2 1 2 12 −9 6 6 −4   resolver   1 2 1 2 12 −9 6 6 −4     d0 1 d0 2 d0 3   = −   −1 −37 −30   , d0 =   2.5753 0.5890 −2.7534   x1 =   2 −3 4   +   2.5753 0.5890 −2.7534   =   4.5753 −2.4110 1.2466   F(x1 ) =   8.1494 −4.8656 0.1689   , F′ (x1 ) =   6.7397 4.5753 1.0000 2.0000 3.7397 −7.2329 6.8219 6.8219 −3.1781     6.7397 4.5753 1.0000 2.0000 3.7397 −7.2329 6.8219 6.8219 −3.1781     d1 1 d1 2 d1 3   =−   8.1494 −4.8656 0.1689   , d1 =   −4.4433 4.6537 0.5048   x2 =   4.5753 −2.4110 1.2466   +   −4.4433 4.6537 0.5048   =   0.1321 2.2428 1.7514  
  • 169. Héctor M. Mora E. Métodos Numéricos con Scilab 155 A continuación, se presentan los resultados de F(xk), F′(xk), dk, xk+1. k = 2   −0.9350 7.0481 0.5116   ,   2.5069 0.1321 1.0000 2.0000 5.2542 6.7283 8.2524 8.2524 −1.7476   ,   0.6513 −0.8376 −0.5870   ,   0.7833 1.4052 1.1644   k = 3   −0.1213 1.4751 0.5981   ,   2.9718 0.7833 1.0000 2.0000 3.4931 4.2156 6.7057 6.7057 −3.2943   ,   0.1824 −0.3454 −0.1502   ,   0.9658 1.0598 1.0141   k = 4   −0.0297 0.1557 0.0981   ,   2.9913 0.9658 1.0000 2.0000 3.0424 3.1793 6.0793 6.0793 −3.9207   ,   0.0335 −0.0587 −0.0139   ,   0.9993 1.0011 1.0002   k = 5   −0.0008 0.0025 0.0015   ,   2.9997 0.9993 1.0000 2.0000 3.0006 3.0033 6.0012 6.0012 −3.9988   ,   0.0007 −0.0011 −0.0002   ,   1.0000 1.0000 1.0000   F(x6 ) ≈   0 0 0   , luego x∗ ≈   1 1 1   . ✸ 4.9. Método de Müller Este método sirve para hallar raı́ces reales o complejas de polinomios. Sea p(x) un polinomio real (con coeficientes reales), de grado n, es decir, p(x) = a0 + a1x + a2x2 + ... + anxn , ai ∈ R, i = 0, 1, ..., n, an 6= 0. En general no se puede garantizar que p(x) tenga raı́ces reales. Sin embar- go, el teorema fundamental del Álgebra garantiza que tiene n raı́ces com- plejas, algunas de ellas pueden ser reales. De manera más precisa, existen r1, r2, ..., rn ∈ C, tales que p(ri) = 0, i = 1, 2, ..., n.
  • 170. 156 CAPÍTULO 4. ECUACIONES NO LINEALES El polinomio p se puede expresar en función de sus raı́ces: p(x) = an(x − r1)(x − r2) · · · (x − rn). Las raı́ces complejas, no reales, siempre vienen por parejas, es decir, si r = a + ib, b 6= 0, es una raı́z, entonces r̄ = a − ib, el conjugado de r, también es raı́z. Esto garantiza, para los polinomios de grado impar, la existencia de por lo menos una raı́z real. Para los polinomios de grado par, el número de raı́ces reales es par y el número de raı́ces estrictamente complejas también es par. Ası́, un polinomio de grado par puede tener cero raı́ces reales. Al considerar la pareja de raı́ces complejas r y r̄, se cumple que (x−r)(x−r̄) divide a p(x). (x−r)(x−r̄) = (x−a−ib)(x−a+ib) = (x−a)2 +b2 = x2 −2ax+(a2 +b2 ). O sea, se tiene un polinomio real de grado 2 que divide a p(x). Si q(x) divide a p(x), entonces existe un polinomio s(x), tal que p(x) = q(x)s(x), grado(p) = grado(q) + grado(s). Entonces, para seguir obteniendo las raı́ces de p(x) basta con obtener las raı́ces de s(x), polinomio más sencillo. Si se halla una raı́z real r, entonces q(x) = (x−r) divide a p(x). Si se obtiene una raı́z compleja r = a + ib, entonces q(x) = x2 − 2ax + (a2 + b2) divide a p(x). Este proceso de obtener un polinomio de grado menor cuyas raı́ces sean raı́ces del polinomio inicial se llama deflación. En el método de la secante, dados dos valores x0 y x1 se busca la recta que pasa por los puntos (x0, f(x0)), (x1, f(x1)); el siguiente valor x2 está dado por el punto donde la recta corta el eje x. En el método de Müller, en lugar de una recta, se utiliza una parábola. Dados tres valores x0, x1 y x2, se construye la parábola P(x), que pasa por los puntos (x0, f(x0)), (x1, f(x1)) y (x2, f(x2)); el siguiente valor x3 está dado por el (un) punto tal que P(x3) = 0. La parábola se puede escribir de la forma P(x) = a(x − x2)2 + b(x − x2) + c.
  • 171. Héctor M. Mora E. Métodos Numéricos con Scilab 157 Entonces, hay tres condiciones que permiten calcular a, b y c: f(x0) = a(x0 − x2)2 + b(x0 − x2) + c, f(x1) = a(x1 − x2)2 + b(x1 − x2) + c, f(x2) = c. Después de algunos cálculos, se obtiene d = (x0 − x1)(x0 − x2)(x1 − x2), a = −(x0 − x2)(f(x1) − f(x2)) + (x1 − x2)(f(x0) − f(x2) d , b = (x0 − x2)2(f(x1) − f(x2)) − (x1 − x2)2(f(x0) − f(x2) d , c = f(x2). (4.19) Entonces, x3 − x2 = −b ± √ b2 − 4ac 2a Para reducir los errores de redondeo se “racionaliza” el numerador y se escoge el signo, buscando que el denominador resultante sea grande (en valor absoluto). D = b2 − 4ac, (4.20) R = √ D (4.21) x3 − x2 = −b ± R 2a −b ∓ R −b ∓ R x3 − x2 = b2 − R2 2a − b ∓ R = b2 − b2 + 4ac 2a − b ∓ R = 2c −b ∓ R x3 − x2 = − 2c b ± R x3 = x2 − 2c b + signo(b)R (4.22) En la siguiente iteración se obtiene la parábola utilizando x1, x2 y x3 para obtener x4. Si en una iteración D = b2 − 4ac 0
  • 172. 158 CAPÍTULO 4. ECUACIONES NO LINEALES es necesario utilizar, a partir de ahı́, aritmética compleja (Scilab lo hace automáticamente). Eso hace que los siguientes valores a, b y c no sean nece- sariamente reales. Muy posiblemente b2 − 4ac tampoco es real. Para utilizar (4.22) es necesario obtener la raı́z cuadrada de un complejo. Sean z un complejo, θ el ángulo (en radianes) formado con el eje real (“eje x”), llamado con frecuencia argumento de z, y ρ, la norma o valor absoluto de z. La dos raı́ces cuadradas de z son: √ z = ζ1 = √ ρ cos(θ/2) + i sen(θ/2) , ζ2 = −ζ1. Ejemplo 4.9. Sea z = 12 + 16i. Entonces, ρ = 20, θ = tan−1 (16/12) = 0.927295, ζ1 = √ 20 cos(0.927295/2) + i sen(0.927295/2) = 4 + 2i, ζ2 = −4 − 2i. ✸ Cuando b no es real, es necesario modificar ligeramente (4.22). Se escoge el signo para que el denominador tenga máxima norma: D = b2 − 4ac R = √ D δ = ( b + R si |b + R| ≥ |b − R| b − R si |b + R| |b − R| x3 = x2 − 2c δ · (4.23) Ejemplo 4.10. Hallar las raı́ces de p(x) = 2x5 +x4 +4x3 +19x2 −18x+40 partiendo de x0 = 0, x1 = 0.5, x2 = 1. f(x0) = 40 f(x1) = 36.375 f(x2) = 48 d = −0.25 a = 30.5 b = 38.5 c = 48 D = −4373.75
  • 173. Héctor M. Mora E. Métodos Numéricos con Scilab 159 Hay que utilizar aritmética compleja R = 66.134333i δ = 38.5 + 66.134333i x3 = 0.368852 + 1.084169i f(x3) = 12.981325 − 9.579946i Ahora utilizamos x1, x2 y x3 d = 0.546325 + 0.413228i a = 27.161207 + 11.293018i b = −21.941945 + 50.286087i c = 12.981325 − 9.579946i D = −3890.341507 − 1752.330850i R = 13.719321 − 63.863615i δ = −35.661266 + 114.149702i x4 = 0.586513 + 1.243614i f(x4) = 3.760763 − 6.548104i x5 = 0.758640 + 1.246582i f(x5) = −2.013839 − 1.490220i x6 = 0.748694 + 1.196892i f(x6) = 0.123017 + 0.025843i x7 = 0.750002 + 1.198942i f(x7) = 0.000535 + 0.000636i x8 = 0.750000 + 1.198958i f(x8) = 0 En seguida, se construye el polinomio q(x) = (x − r)(x − r̄). Para r = 0.75 + 1.198958i se tiene q(x) = x2 − 1.5x + 2. 2x5 + x4 + 4x3 + 19x2 − 18x + 40 x2 − 1.5x + 2 = 2x3 + 4x2 + 6x2 + 20. Ahora se trabaja con p(x) = 2x3 + 4x2 + 6x2 + 20. Sean x0 = −3, x1 = −2.5 y x2 = −2. También se hubiera podido volver a utilizar x0 = 0, x1 = 0.5 y x2 = 1. f(x0) = −16 f(x1) = −1.25 f(x2) = 8 d = −0.25 a = −11 b = 13 c = 8 D = 521 R = 22.825424 δ = 35.825424 x3 = −2.446610 f(x3) = −0.026391
  • 174. 160 CAPÍTULO 4. ECUACIONES NO LINEALES Ahora utilizamos x1, x2 y x3 d = 0.011922 a = −9.893220 b = 22.390216 c = −0.026391 D = 500.277428 R = 22.366882 δ = 44.757098 x4 = −2.445431 f(x4) = −0.000057 x5 = −2.445428 f(x5) = 0 Para r = −2.445428 se tiene q(x) = x + 2.445428. 2x3 + 4x2 + 6x2 + 20 x + 2.445428 = 2x2 − 0.890857x + 8.178526. Ahora se trabaja con p(x) = 2x2 − 0.890857x + 8.178526. Sus raı́ces son 0.2227142 + 2.009891i y 0.2227142 − 2.009891i. En resumen, las 5 raı́ces de p(x) son: 0.75 + 1.1989579i 0.75 − 1.1989579i − 2.445428 0.222714 + 2.009891i 0.222714 − 2.009891i. ✸ El método de Müller tiene orden de convergencia no inferior a 1.84... Este valor proviene de la raı́z mas grande de µ3 − µ2 − µ − 1 = 0. Esto hace que sea un poco menos rápido que el método de Newton (orden 2) pero más rápido que el método de la secante (orden 1.68). El método no tiene sentido si hay valores iguales (o muy parecidos) entre x0, x1 y x2. Además, esto harı́a que no se pueda calcular a ni b. Tampoco funciona si los valores f(x0), f(x1) y f(x2) son iguales o muy parecidos. En este caso, P(x) es una lı́nea recta horizontal y no se puede calcular x3 ya que a = 0, b = 0 y, principalmente, δ = b ± R = 0.
  • 175. Héctor M. Mora E. Métodos Numéricos con Scilab 161 Método de Müller para una raı́z datos: p, x0, x1, x2, εf , ε0, maxit aritmética = real f0 = p(x0), f1 = p(x1), f2 = p(x2) info= 0 para k = 1, ..., maxit si |f2| ≤ εf ent r = x2, info= 1, parar d = (x0 − x1)(x0 − x2)(x1 − x2) si |d| ≤ ε0 ent parar calcular a, b y c según (4.19) D = b2 − 4ac si aritmética=real y D 0 ent aritmética=compleja R = √ D δ1 = b + R, δ2 = b − R si |δ1| ≥ |δ2| ent δ = δ1, sino δ = δ2 si |δ| ≤ ε0 ent parar x3 = x2 − 2c/δ x0 = x1, x1 = x2, x2 = x3, f0 = f1, f1 = f2 f2 = p(x2) fin-para k Si el algoritmo anterior acaba normalmente, info valdrá 1 y r será una raı́z, real o compleja. Método de Müller datos: p, x0, εf , ε0, maxit r = x0, h = 0.5 mientras grado(p) ≥ 3 x0 = r, x1 = x0 + h, x2 = x1 + h (r, info) = Muller1(p, xo, x1, x2, εf , ε0, maxit) si info = 0, ent parar si |imag(r)| ≤ ε0 ent q(x) = (x − r) sino q(x) = (x − r)(x − r̄) p(x) = p(x)/q(x) fin-mientras calcular raı́ces de p (de grado no superior a 2) Si se espera que el número de raı́ces reales sea pequeño, comparado con el de raı́ces complejas, se puede trabajar todo el tiempo con aritmética compleja.
  • 176. 162 CAPÍTULO 4. ECUACIONES NO LINEALES 4.10. Método de Bairstow Sirve para hallar las raı́ces reales o complejas de un polinomio de grado may- or o igual a 4, mediante la obtención de los factores cuadráticos “mónicos” del polinomio. Cuando es de grado 3, se halla una raı́z real por el método de Newton, y después de la deflación se calculan las dos raı́ces del polinomio cuadrático resultante. Sea p(x) = αnxn + αn−1xn−1 + αn−2xn−2 + ... + α1x + α0 reescrito como p(x) = u1xn + u2xn−1 + u3xn−2 + ... + unx + un+1 (4.24) Se desea encontrar x2−dx−e divisor de p. Cuando se hace la división entre p y un polinomio cuadrático cualquiera, se obtiene un residuo r(x) = Rx + S. Entonces, se buscan valores de d y e, tales que r(x) = 0, es decir, R = 0 y S = 0. Los valores R y S dependen de d y e, o sea, R = R(d, e) y S = S(d, e) Tenemos dos ecuaciones con dos incógnitas, R(d, e) = 0 S(d, e) = 0 Sea q(x) = βn−2xn−2 + βn−3xn−3 + ... + β1x + β0 reescrito como q(x) = v1xn−2 + v2xn−3 + ... + vn−2x + vn−1 el cociente. Entonces, p(x) = q(x)(x2 − dx − e) + Rx + S. Es decir, u1xn + u2xn−1 + ... + unx + un+1 = (v1xn−2 + v2xn−3 + ... + vn−2x + vn−1) (x2 − dx − e) + Rx + S.
  • 177. Héctor M. Mora E. Métodos Numéricos con Scilab 163 u1 = v1 u2 = v2 − dv1 u3 = v3 − dv2 − ev1 u4 = v4 − dv3 − ev2 ui = vi − dvi−1 − evi−2 un−1 = vn−1 − dvn−2 − evn−3 un = −dvn−1 − evn−2 + R un+1 = −evn−1 + S Para facilitar las fórmulas, es útil introducir dos coeficientes adicionales, vn y vn+1, que no influyen sobre q, definidos por vn = R vn+1 = S + dvn Entonces, un = vn − dvn−1 − evn−2 un+1 = dvn − dvn − evn−1 + S o sea, un+1 = vn+1 − dvn − evn−1 Las igualdades quedan: u1 = v1 u2 = v2 − dv1 ui = vi − dvi−1 − evi−2, i = 3, ..., n + 1. Las fórmulas para calcular los vi son v1 = u1 v2 = u2 + dv1 (4.25) vi = ui + dvi−1 + evi−2, i = 3, ..., n + 1. Una vez obtenidos los vi, R = vn S = vn+1 − dvn
  • 178. 164 CAPÍTULO 4. ECUACIONES NO LINEALES u1 u2 u3 u4 · · · un+1 d dv1 dv2 dv3 · · · dvn e ev1 ev2 · · · evn−1 v1 = u1 v2 = Σ v3 = Σ v4 = Σ vn+1 = Σ R = vn, S = vn+1 − dvn 4 5 1 0 -1 2 2 8 26 30 -18 -128 -3 -12 -39 -45 27 4 13 15 -9 -64 -99 R = −64, S = −99 − 2 × (−64) = 29 El objetivo inicial es buscar R = 0 y S = 0. Esto se obtiene si vn = 0 y vn+1 = 0. Ahora se desea encontrar d y e tales que vn(d, e) = 0 , vn+1(d, e) = 0 . Al aplicar el método de Newton se tiene: resolver el sistema J ∆dk ∆ek = − vn(dk, ek) vn+1(dk, ek) (4.26) dk+1 ek+1 = dk ek + ∆dk ∆ek (4.27) donde J es la matriz jacobiana J =       ∂vn ∂d (dk , ek ) ∂vn ∂e (dk , ek ) ∂vn+1 ∂d (dk , ek ) ∂vn+1 ∂e (dk , ek )       . Cálculo de las derivadas parciales:
  • 179. Héctor M. Mora E. Métodos Numéricos con Scilab 165 ∂v1 ∂d = 0 ∂v2 ∂d = v1 ∂vi ∂d = vi−1 + d ∂vi−1 ∂d + e ∂vi−2 ∂d ∂v1 ∂e = 0 ∂v2 ∂e = 0 ∂vi ∂e = d ∂vi−1 ∂e + vi−2 + e ∂vi−2 ∂e ∂vi ∂e = vi−2 + d ∂vi−1 ∂e + e ∂vi−2 ∂e Explicitando las derivadas parciales con respecto a d se tiene: ∂v1 ∂d = 0 ∂v2 ∂d = v1 ∂v3 ∂d = v2 + d ∂v2 ∂d + e ∂v1 ∂d ∂v3 ∂d = v2 + d ∂v2 ∂d ∂v4 ∂d = v3 + d ∂v3 ∂d + e ∂v2 ∂d ∂vi ∂d = vi−1 + d ∂vi−1 ∂d + e ∂vi−2 ∂d Sea w1 = v1 w2 = v2 + dw1 (4.28) wi = vi + dwi−1 + ewi−2, i = 3, ..., n. Es importante observar que estas fórmulas son análogas a las de la división sintética doble, que permiten obtener, a partir de los valores ui, los valores vi. Al derivar se tiene: ∂v1 ∂d = 0 ∂v2 ∂d = w1 ∂v3 ∂d = w2 ∂vi ∂d = wi−1 Explicitando las derivadas parciales con respecto a e se tiene
  • 180. 166 CAPÍTULO 4. ECUACIONES NO LINEALES ∂v1 ∂e = 0 ∂v2 ∂e = 0 ∂v3 ∂e = v1 ∂v4 ∂e = v2 + dv1 ∂v5 ∂e = v3 + d ∂v4 ∂e + e ∂v3 ∂e Utilizando de nuevo los wi ∂v1 ∂e = 0 ∂v2 ∂e = 0 ∂v3 ∂e = w1 ∂v4 ∂e = w2 ∂v5 ∂e = w3 ∂vi ∂e = wi−2 Entonces ∂vn ∂d = wn−1 ∂vn ∂e = wn−2 ∂vn+1 ∂d = wn ∂vn+1 ∂e = wn−1 Es decir, la matriz jacobiana es simplemente J = wn−1 wn−2 wn wn−1 . (4.29)
  • 181. Héctor M. Mora E. Métodos Numéricos con Scilab 167 Método de Bairstow datos: u1, u2, ..., un+1 (4.24), d0, e0, ε, MAXIT para k = 0, ...,MAXIT calcular v1, v2, ..., vn+1 según (4.25) si || ( vn, vn+1 ) || ≤ ε, ent parar calcular w1, w2, ..., wn según (4.28) construir J según (4.29) resolver el sistema (4.26) obtener dk+1 y ek+1 según (4.27) fin-para k Si el agoritmo acaba de la manera esperada, || ( vn, vn+1 ) || ≤ ε, entonces los últimos valores d y e hacen que x2 −dx−e divida “exactamente” a p(x). El cociente será justamente q(x) = v1xn−2 + v2xn−3 + ... + vn−2x + vn−1. Ası́, las dos raı́ces de x2 − dx − e son también raı́ces de p(x). Si el grado de q es superior a dos, entonces se puede recomenzar el proceso con q(x). El método de Bairstow es, en el fondo, el método de Newton en R2, luego, en condiciones favorables, la convergencia es cuadrática. Ejemplo 4.11. Aplicar el método de Bairstow para hallar las raı́ces de p(x) = 4x5 + 5x4 + x3 − x + 2 , con d0 = 2, e0 = −3 y ε = 10−8. k = 0 4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000 2.0000 8.0000 26.0000 30.0000 -18.0000 -128.0000 -3.0000 -12.0000 -39.0000 -45.0000 27.0000 ------------------------------------------------------------ 4.0000 13.0000 15.0000 -9.0000 -64.0000 -99.0000 2.0000 8.0000 42.0000 90.0000 36.0000 -3.0000 -12.0000 -63.0000 -135.0000 -------------------------------------------------- 4.0000 21.0000 45.0000 18.0000 -163.0000 J 18.0000 45.0000 -163.0000 18.0000 Delta : -0.4313 1.5947 d, e : 1.5687 -1.4053 ====================================================================== k = 1
  • 182. 168 CAPÍTULO 4. ECUACIONES NO LINEALES 4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000 1.5687 6.2750 17.6875 20.4979 7.3000 -18.9220 -1.4053 -5.6211 -15.8444 -18.3619 -6.5393 ------------------------------------------------------------ 4.0000 11.2750 13.0664 4.6534 -12.0619 -23.4613 1.5687 6.2750 27.5313 54.8694 54.6869 -1.4053 -5.6211 -24.6625 -49.1518 -------------------------------------------------- 4.0000 17.5499 34.9767 34.8603 -6.5268 J 34.8603 34.9767 -6.5268 34.8603 Delta : -0.2772 0.6211 d, e : 1.2916 -0.7842 ====================================================================== k = 2 4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000 1.2916 5.1662 13.1303 14.1990 8.0426 -2.0383 -0.7842 -3.1366 -7.9720 -8.6208 -4.8830 ------------------------------------------------------------ 4.0000 10.1662 10.9937 6.2271 -1.5782 -4.9213 1.2916 5.1662 19.8029 35.7245 38.6544 -0.7842 -3.1366 -12.0231 -21.6898 -------------------------------------------------- 4.0000 15.3325 27.6599 29.9284 15.3864 J 29.9284 27.6599 15.3864 29.9284 Delta : -0.1891 0.2616 d, e : 1.1025 -0.5225 ====================================================================== k = 3 4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000 1.1025 4.4099 10.3743 10.2357 5.8639 0.0141 -0.5225 -2.0901 -4.9168 -4.8511 -2.7792 ------------------------------------------------------------ 4.0000 9.4099 9.2842 5.3188 0.0128 -0.7651 1.1025 4.4099 15.2361 24.7289 25.1660 -0.5225 -2.0901 -7.2211 -11.7202 -------------------------------------------------- 4.0000 13.8198 22.4303 22.8267 13.4586 J 22.8267 22.4303 13.4586 22.8267 Delta : -0.0796 0.0805 d, e : 1.0229 -0.4420 ====================================================================== k = 4 4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000
  • 183. Héctor M. Mora E. Métodos Numéricos con Scilab 169 1.0229 4.0914 9.2992 8.7259 4.8147 0.0445 -0.4420 -1.7682 -4.0189 -3.7711 -2.0808 ------------------------------------------------------------ 4.0000 9.0914 8.5310 4.7071 0.0435 -0.0362 1.0229 4.0914 13.4841 20.7096 20.0369 -0.4420 -1.7682 -5.8275 -8.9501 -------------------------------------------------- 4.0000 13.1828 20.2469 19.5892 11.1303 J 19.5892 20.2469 11.1303 19.5892 Delta : -0.0100 0.0075 d, e : 1.0128 -0.4345 ====================================================================== k = 5 4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000 1.0128 4.0513 9.1675 8.5377 4.6639 0.0012 -0.4345 -1.7380 -3.9329 -3.6627 -2.0008 ------------------------------------------------------------ 4.0000 9.0513 8.4295 4.6048 0.0012 0.0004 1.0128 4.0513 13.2709 20.2186 19.3757 -0.4345 -1.7380 -5.6932 -8.6738 -------------------------------------------------- 4.0000 13.1027 19.9623 19.1302 10.7032 J 19.1302 19.9623 10.7032 19.1302 Delta : -0.0001 0.0000 d, e : 1.0127 -0.4345 ====================================================================== k = 6 4.0000 5.0000 1.0000 0.0000 -1.0000 2.0000 1.0127 4.0509 9.1662 8.5357 4.6619 0.0000 -0.4345 -1.7379 -3.9324 -3.6619 -2.0000 ------------------------------------------------------------ 4.0000 9.0509 8.4283 4.6033 0.0000 0.0000 Entonces, d = 1.0127362 e = −0.4344745 x2 − 1.0127362 x + 0.4344745 divide a p , r1 = 0.5063681 + 0.4219784 i es raı́z de p, r2 = 0.5063681 − 0.4219784 i es raı́z de p, q(x) = 4 x3 + 9.0509449 x2 + 8.4283219 x + 4.6032625 .
  • 184. 170 CAPÍTULO 4. ECUACIONES NO LINEALES Al aplicar el método de Bairstow a q(x) con d0 = −1 y e0 = −1 se obtiene: d = −0.9339455 e = −0.8660624 x2 + 0.9339455 x + 0.8660624 divide a p , r3 = −0.4669728 + 0.8049837 i es raı́z de p, r4 = −0.4669728 − 0.8049837 i es raı́z de p, q̃(x) = 4 x + 5.3151629 . La última raı́z es r5 = −1.3287907 . Ejercicios Trate de resolver las ecuaciones propuestas, utilice métodos diferentes, com- pare sus ventajas y desventajas. Emplee varios puntos iniciales. Busque, si es posible, otras raı́ces. 4.1 x3 + 2x2 + 3x + 4 = 0. 4.2 x3 + 2x2 − 3x − 4 = 0. 4.3 x4 − 4x3 + 6x2 − 4x + 1 = 0. 4.4 x4 − 4x3 + 6x2 − 4x − 1 = 0. 4.5 x4 − 4x3 + 6x2 − 4x + 2 = 0. 4.6 3x − 6 cos(x) + 2 − x − 2 x2 + 1 x2 + x + 10 ex + x2 + x3 − 8 = 0. 4.7 1000000 i (1 + i)12 (1 + i)12 − 1 = 945560. 4.8 x2 1 − x1x2 + 3x1 − 4x2 + 10 = 0, −2x2 1 + x2 2 + 3x1x2 − 4x1 + 5x2 − 42 = 0. 4.9 x1 + x2 + 2x1x2 − 31 = 0, 6x1 + 5x2 + 3x1x2 − 74 = 0.
  • 185. Capı́tulo 5 Interpolación y aproximación En muchas situaciones de la vida real se tiene una tabla de valores corres- pondientes a dos magnitudes relacionadas, por ejemplo, Año Población 1930 3425 1940 5243 1950 10538 1960 19123 1970 38765 1980 82468 1985 91963 1990 103646 1995 123425 De manera más general, se tiene una tabla de valores x1 f(x1) x2 f(x2) . . . . . . xn f(xn) y se desea obtener una función ˜ f, sencilla y fácil de calcular, aproximación de f, o en otros casos, dado un x̄, se desea obtener ˜ f(x̄) valor aproximado de f(x̄). 171
  • 186. 172 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN b b b b b x y Figura 5.1. Puntos o datos iniciales b b b b b Figura 5.2. Interpolación Los valores f(xi) pueden corresponder a: Datos o medidas obtenidos experimentalmente. Valores de una función f que se conoce pero tiene una expresión analı́tica muy complicada o de evaluación difı́cil o lenta. Una función de la que no se conoce una expresión analı́tica, pero se puede conocer f(x) como solución de una ecuación funcional (por ejem- plo, una ecuación diferencial) o como resultado de un proceso numéri- co. Cuando se desea que la función ˜ f pase exactamente por los puntos conocidos, ˜ f(xi) = f(xi) ∀i, se habla de interpolación o de métodos de colocación, figura 5.2. En los demás casos se habla de aproximación, figura 5.3. Este capı́tulo pre- senta la interpolación y la aproximación por mı́nimos cuadrados.
  • 187. Héctor M. Mora E. Métodos Numéricos con Scilab 173 b b b b b Figura 5.3. Aproximación 5.1. Interpolación 5.1.1. En Scilab Cuando hay m puntos (x1, y1), (x2, y2), ..., (xm, ym) se desea obtener la función interpolante, una función cuya gráfica pasa por esos m puntos, con el objetivo de evaluarla en otros valores x intermedios. La función interpln permite hacer interpolación lineal (la función inter- polante es continua y afı́n por trozos). Tiene dos parámetros, el primero es una matriz de dos filas. La primera fila tiene los valores xi. Deben estar en orden creciente. La segunda fila tiene los valores yi. El segundo parámetro es un vector donde están los valores x en los que se desea evaluar la función interpolante (afı́n por trozos). clear x = [ 0.5 1 1.5 2.1 3 3.6]’ y = [ 1 2 1.5 2.5 2.1 2.4]’ t = 0.8 ft = interpln( [x’; y’], t) n = length(x); xx = ( x(1):0.1:x(n) )’; y1 = interpln( [x’; y’], xx); plot2d(xx, y1) La gráfica resultante es semejante a la de la figura 5.4.
  • 188. 174 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN 1 2 3 4 1 2 3 b b b b b b Figura 5.4. Interpolación lineal con interpln También se puede hacer interpolación utilizando funciones spline o trazadores cúbicos. Para hacer esto en Scilab, se requieren dos pasos. En el primero, mediante splin, a partir de un lista de puntos (x1, y1), (x2, y2), ..., (xm, ym) se calculan las derivadas, en los puntos xi, de la función spline interpolante. En el segundo paso, mediante interp, se evalúa la función interpolante en los valores dados por un vector, primer parámetro de interp. clear, clf x = [ 0.5 1 1.5 2.1 3 3.6]’ y = [ 1 2 1.5 2.5 2.1 2.4]’ n = length(x); xx = ( x(1):0.1:x(n) )’; d = splin(x, y); ys = interp(xx, x, y, d); plot2d(xx, ys) La gráfica resultante es semejante a la de la figura 5.5. 5.1.2. Caso general En el caso general de interpolación, se tiene un conjunto de n puntos (x1, y1), (x2, y2), ..., (xn, yn) con la condición de que los xi son todos diferentes. Este conjunto se llama el soporte. La función ˜ f, que se desea construir, debe ser combinación lineal de n funciones llamadas funciones de la base.
  • 189. Héctor M. Mora E. Métodos Numéricos con Scilab 175 1 2 3 4 1 2 3 b b b b b b Figura 5.5. Interpolación con funciones spline Supongamos que estas funciones son ϕ1, ϕ2, ..., ϕn. Entonces, ˜ f(x) = a1ϕ1(x) + a2ϕ2(x) + · · · + anϕn(x). Como las funciones de la base son conocidas, para conocer ˜ f basta conocer los escalares a1, a2, ..., an. Las funciones de la base deben ser linealmente independientes. Si n ≥ 2, la independencia lineal significa que no es posible que una de las funciones sea combinación lineal de las otras. Por ejemplo, las funciones ϕ1(x) = 4, ϕ2(x) = 6x2 − 20 y ϕ3(x) = 2x2 no son linealmente independientes. Los escalares a1, a2, ..., an se escogen de tal manera que ˜ f(xi) = yi, para i = 1, 2, ..., n. Entonces a1ϕ1(x1) + a2ϕ2(x1) + · · · + anϕn(x1) = y1 a1ϕ1(x2) + a2ϕ2(x2) + · · · + anϕn(x2) = y2 . . . a1ϕ1(xn) + a2ϕ2(xn) + · · · + anϕn(xn) = yn Las m igualdades anteriores se pueden escribir matricialmente:      ϕ1(x1) ϕ2(x1) · · · ϕn(x1) ϕ1(x2) ϕ2(x2) · · · ϕn(x2) . . . ϕ1(xn) ϕ2(xn) · · · ϕn(xn)           a1 a2 . . . an      =      y1 y2 . . . yn      De manera compacta se tiene Φ a = y. (5.1)
  • 190. 176 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN La matriz Φ es una matriz cuadrada n × n y, a y y son vectores columna n × 1. Son conocidos la matriz Φ y el vector columna y. El vector columna a es el vector de incógnitas. Como las funciones de la base son linealmente independientes, entonces las columnas de Φ son linealmente independientes. En consecuencia, Φ es invertible y (5.1) se puede resolver (numéricamente). Ejemplo 5.1. Dados los puntos (−1, 1), (2, −2), (3, 5) y la base formada por las funciones ϕ1(x) = 1, ϕ2(x) = x, ϕ3(x) = x2, encontrar la función de interpolación. Al plantear Φa = y, se tiene   1 −1 1 1 2 4 1 3 9     a1 a2 a3   =   1 −2 5   Entonces a =   −4 −3 2   , ˜ f(x) = −4 − 3x + 2x2 , que efectivamente pasa por los puntos dados. ✸ La interpolación polinomial (las funciones utilizadas son 1, x, x2, ...) para problemas pequeños con matrices “sin problemas”, se puede realizar en Scilab, mediante órdenes semejantes a: x = [ 0.5 1 1.5 2.1 3 3.6]’ y = [ 1 2 1.5 2.5 2.1 2.4]’ x = x(:); y = y(:); n = size(x,1); n1 = n - 1; F = ones(n,n); for i=1:n1 F(:,i+1) = x.^i; end a = Fy p = poly(a, ’x’, ’c’)
  • 191. Héctor M. Mora E. Métodos Numéricos con Scilab 177 xx = (x(1):0.05:x(n))’; yp = horner(p, xx); Hay ejemplos clásicos de los problemas que se pueden presentar con valores relativamente pequeños, n = 20. Ejemplo 5.2. Dados los puntos mismos (−1, 1), (2, −2), (3, 5) y la base formada por las funciones ϕ1(x) = 1, ϕ2(x) = ex, ϕ3(x) = e2x, encontrar la función de interpolación. Al plantear Φa = y, se tiene   1 0.3679 0.1353 1 7.3891 54.5982 1 20.0855 403.4288     a1 a2 a3   =   1 −2 5   Entonces a =   −1.2921 −0.8123 0.0496   , ˜ f(x) = 1.2921 − 0.8123ex + 0.0496e2x , que efectivamente pasa por los puntos dados. ✸ 5.2. Interpolación polinomial de Lagrange En la interpolación de Lagrange, la función ˜ f que pasa por los puntos es un polinomio, pero el polinomio se calcula utilizando polinomios de La- grange, sin resolver explı́citamente un sistema de ecuaciones. Teóricamente, el polinomio obtenido por interpolación polinomial (solución de un sistema de ecuaciones) es exactamente el mismo obtenido por interpolación de La- grange. Dados n puntos (x1, y1), (x2, y2), . . . , (xn, yn), donde yi = f(xi) = fi, se desea encontrar un polinomio p ∈ Pn−1 (el con- junto de polinomios de grado menor o igual a n − 1), que pase exactamente por esos puntos, es decir, p(xi) = yi , i = 1, 2, ..., n. (5.2)
  • 192. 178 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN Por ejemplo, se desea encontrar un polinomio de grado menor o igual a 2 que pase por los puntos (−1, 1), (2, −2), (3, 5). Los valores xi deben ser todos diferentes entre sı́. Sin perder generalidad, se puede suponer que x1 x2 · · · xn. El problema 5.2 se puede resolver planteando n ecuaciones con n incógnitas (los coeficientes del polinomio). Este sistema lineal, teóricamente, siempre tiene solución. Una manera adecuada, en muchos casos más eficiente numéri- camente, de encontrar p es por medio de los polinomios de Lagrange. 5.2.1. Polinomios de Lagrange Dados n valores diferentes x1, x2, ..., xn, se definen n polinomios de Lagrange L1, L2, ..., Ln de la siguiente manera: Lk(x) = n Y i=1,i6=k (x − xi) n Y i=1,i6=k (xk − xi) · (5.3) La construcción de los polinomios de Lagrange, para los datos del último ejemplo x1 = −1, x2 = 2, x3 = 3, da: L1(x) = (x − 2)(x − 3) (−1 − 2)(−1 − 3) = x2 − 5x + 6 12 , L2(x) = (x − −1)(x − 3) (2 − −1)(2 − 3) = x2 − 2x − 3 −3 , L3(x) = (x − −1)(x − 2) (3 − −1)(3 − 2) = x2 − x − 2 4 . Es claro que el numerador de (5.3) es el producto de n − 1 polinomios de grado 1; entonces el numerador es un polinomio de grado, exactamente, n−1. El denominador es el producto de n − 1 números, ninguno de los cuales es nulo, luego el denominador es un número no nulo. En resumen, Lk es un polinomio de grado n − 1.
  • 193. Héctor M. Mora E. Métodos Numéricos con Scilab 179 Reemplazando, se verifica que Lk se anula en todos los xi, salvo en xk, Lk(xi) = 0 si i 6= k, 1 si i = k. (5.4) En el ejemplo, L3(−1) = 0, L3(2) = 0, L3(3) = 1. Con los polinomios de Lagrange se construye inmediatamente p, p(x) = n X k=1 ykLk(x). (5.5) Por construcción p es un polinomio en Pn−1. Reemplazando, fácilmente se verifica 5.2. Para el ejemplo, p(x) = 1L1(x) − 2L2(x) + 5L3(x) = 2x2 − 3x − 4. Ejemplo 5.3. Encontrar el polinomio, de grado menor o igual a 3, que pasa por los puntos (−1, 1), (1, −5), (2, −2), (3, 5). L1(x) = (x − 1)(x − 2)(x − 3) (−1 − 1)(−1 − 2)(−1 − 3) = x3 − 6x2 + 11x − 6 −24 , L2(x) = x3 − 4x2 + x + 6 4 , L3(x) = x3 − 3x2 − x + 3 −3 , L4(x) = x3 − 2x2 − x + 2 8 , p(x) = 2x2 − 3x − 4. ✸ En la práctica se usa la interpolación de Lagrange de grado 2 o 3, máximo 4. Si hay muchos puntos, estos se utilizan por grupos de 3 o 4, máximo 5 puntos. Ejemplo 5.4. Considere los puntos (1, 3.8), (2, 3.95), (3, 4), (4, 3.95), (4.2, 3.43), (4.5, 3.89).
  • 194. 180 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN 0 1 2 3 4 0 1 2 3 4 5 6 7 b b b b b b Figura 5.6. Un ejemplo de interpolación polinomial El polinomio de interpolación es p(x) = −102.68595 + 245.23493x − 204.16498x2 + 78.696263x3 − 14.264007x4 + 0.9837509x5 Obviamente p(1) = 3.8 y p(2) = 3.95. Sin embargo, p(1.35) = 6.946. Ver figura (5.6). ✸ Si x es un vector, un polinomio de Lagrange se puede costruir en Scilab por órdenes semejantes a x = [-1 1 2 3]’; n = length(x) k = 2 Lk = poly([1], ’x’, ’c’); deno = 1; for i=1:n if i ~= k Lk = Lk*poly([x(i)], ’x’);
  • 195. Héctor M. Mora E. Métodos Numéricos con Scilab 181 deno = deno*(x(k) - x(i)); end end Lk = Lk/deno 5.2.2. Existencia, unicidad y error El polinomio p ∈ Pn−1 existe, puesto que se puede construir. Sea q ∈ Pn−1 otro polinomio tal que q(xi) = yi , i = 1, 2, ..., n. Sea r(x) = p(x) − q(x). Por construcción, r ∈ Pn, además r(xi) = 0, i = 1, 2, n, es decir, r se anula en n valores diferentes, luego r(x) = 0, de donde q(x) = p(x). Teorema 5.1. Sean x1, x2, ..., xn reales distintos; t un real; It el menor intervalo que contiene a x1, x2, ..., xn, t; f ∈ Cn It (f tiene derivadas continuas de orden 0, 1, 2, ..., n); pn−1 el polinomio de grado menor o igual a n − 1 que pasa por los n puntos (x1, f(x1)), ..., (xn, f(xn)). Entonces E(t), el error en t, está dado por: E(t) = f(t) − pn−1(t) = (t − x1)(t − x2) · · · (t − xn)f(n) (ξ)/n! (5.6) para algún ξ ∈ It. Demostración. Si t = xi para algún i, entonces se tiene trivialmente el re- sultado. Supongamos ahora que t / ∈ {x1, x2, ..., xn}. Sean Φ(x) = (x − x1)(x − x2) · · · (x − xn), G(x) = E(x) − Φ(x) Φ(t) E(t). Entonces G ∈ Cn It , G(xi) = E(xi) − Φ(xi) Φ(t) E(t) = 0, i = 1, ..., n G(t) = E(t) − Φ(t) Φ(t) E(t) = 0.
  • 196. 182 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN Como G tiene por lo menos n + 1 ceros en It, aplicando el corolario del teorema del valor medio, se deduce que G′ tiene por lo menos n+1−1 ceros en It. Ası́ sucesivamente se concluye que G(n) tiene por lo menos un cero en It. Sea ξ tal que G(n) (ξ) = 0. De acuerdo con las definiciones E(n) (x) = f(n) (x) − p(n) n (x) = f(n) (x), Φ(n) (x) = n!, G(n) (x) = E(n) (x) − Φ(n)(x) Φ(t) E(t), G(n) (x) = f(n) (x) − n! Φ(t) E(t), G(n) (ξ) = f(n) (ξ) − n! Φ(t) E(t) = 0. Entonces E(t) = Φ(t) n! f(n) (ξ). ✷ Frecuentemente no se tiene la información necesaria para aplicar (5.6). Al- gunas veces se tiene información necesaria para obtener una cota superior del valor absoluto del error. |E(t)| ≤ |Φ(t)| n! max z∈It |f(n) (z)| (5.7) Ejemplo 5.5. Considere los valores de la función seno en los puntos 5, 5.2, 5.5 y 6. Sea p el polinomio de interpolación. Obtenga una cota para error cometido al aproximar sen(5.8) por p(5.8). Compare con el valor real del error. y = (−0.9589243, −0.8834547, −0.7055403, −0.2794155). El polinomio p se puede obtener mediante la solución de un sistema de
  • 197. Héctor M. Mora E. Métodos Numéricos con Scilab 183 ecuaciones o por polinomios de Lagrange. p(x) = 23.728487 − 12.840218 x + 2.117532 x2 − 0.1073970 x3 p(5.8) = −0.4654393 f(4) (x) = sen(x) It = [5, 6] max z∈It |f(n) (z)| = 0.9589243 |Φ(5.8)| = 0.0288 |E(5.8)| ≤ 0.0011507 El error cometido es: E(5.8) = sen(5.8) − p(5.8) = 0.0008371 . ✸ 5.3. Diferencias divididas de Newton Esta es una manera diferente de hacer los cálculos para la interpolación polinómica. En la interpolación de Lagrange se construye explı́citamente p, es decir, se conocen sus coeficientes. Por medio de las diferencias divididas no se tiene explı́citamente el polinomio, pero se puede obtener fácilmente el valor p(x) para cualquier x. Supongamos de nuevo que tenemos los mismos n puntos, (x1, f1), (x2, f2), . . . , (xn−1, fn−1), (xn, fn). Con ellos se obtiene p = pn−1 ∈ Pn−1. Si se consideran únicamente los primeros n − 1 puntos (x1, f1), (x2, f2), . . . , (xn−1, fn−1), se puede construir pn−2 ∈ Pn−2. Sea c(x) la corrección que permite pasar de pn−2 a pn−1, pn−1(x) = pn−2(x) + c(x), es decir, c(x) = pn−1(x) − pn−2(x). Por construcción, c es un polinomio en Pn−1. Además, c(xi) = pn−1(xi) − pn−2(xi) = 0, i = 1, 2, ..., n − 1.
  • 198. 184 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN La fórmula anterior dice que c tiene n − 1 raı́ces diferentes x1, x2, ..., xn−1, entonces c(x) = αn−1(x − x1)(x − x2) · · · (x − xn−1). f(xn) = pn−1(xn) = pn−2(xn) + c(xn), f(xn) = pn−2(xn) + αn−1(xn − x1)(xn − x2)(xn − x3) · · · (xn − xn−1). De la última igualdad se puede despejar αn−1. Este valor se define como la diferencia dividida de orden n − 1 de f en los puntos x1, x2, ..., xn. Se denota αn−1 = f[x1, x2, ..., xn] := f(xn) − pn−2(xn) (xn − x1)(xn − x2) · · · (xn − xn−1) · El nombre de diferencia dividida no tiene, por el momento, un significado muy claro; este se verá más adelante. Una de las igualdades anteriores se reescribe pn−1(x) = pn−2(x) + f[x1, ..., xn](x − x1) · · · (x − xn−1). (5.8) Esta fórmula es la que se utiliza para calcular pn−1(x), una vez que se sepa calcular, de manera sencilla, f[x1, x2, ..., xn]. Para calcular p(x), se empieza calculando p0(x). A partir de p0(x), con el valor f[x1, x2], se calcula p1(x). A partir de p1(x), con el valor f[x1, x2, x3], se calcula p2(x). A partir de p2(x), con el valor f[x1, x2, x3, x4], se calcula p3(x). . . . A partir de pn−2(x), con el valor f[x1, x2, ..., xn], se calcula pn−1(x). Obviamente, p0(x) = f(x1). (5.9) Por definición, consistente con lo visto antes, f[x1] := f(x1), que se generaliza a f[xi] := f(xi), ∀i. (5.10)
  • 199. Héctor M. Mora E. Métodos Numéricos con Scilab 185 Las demás diferencias divididas se deducen de (5.8), p1(x) = p0(x) + f[x1, x2](x − x1), f[x1, x2] = p1(x) − po(x) x − x1 · Para x = x2, f[x1, x2] = p1(x2) − po(x2) x2 − x1 , f[x1, x2] = f(x2) − f(x2) x2 − x1 , f[x1, x2] = f[x2] − f[x1] x2 − x1 . La anterior igualdad se generaliza a f[xi, xi+1] = f[xi+1] − f[xi] xi+1 − xi · (5.11) Deducción de f[x1, x2, x3] : p2(x) = p1(x) + f[x1, x2, x3](x − x1)(x − x2), f[x1, x2, x3] = p2(x) − p1(x) (x − x1)(x − x2) , x = x3, f[x1, x2, x3] = p2(x3) − p1(x3) (x3 − x1)(x3 − x2) , = . . . f[x1, x2, x3] = f1(x3 − x2) − f2(x3 − x1) + f3(x2 − x1) (x3 − x2)(x3 − x1)(x2 − x1) · Por otro lado, f[x2, x1] − f[x1, x2] x3 − x1 = f3 − f2 x3 − x2 − f2 − f1 x2 − x1 x3 − x1 , = . . . f[x2, x3] − f[x1, x2] x3 − x1 = f1(x3 − x2) − f2(x3 − x1) + f3(x2 − x1) (x3 − x2)(x3 − x1)(x2 − x1) · Luego f[x1, x2, x3] = f[x2, x3] − f[x1, x2] x3 − x1 ·
  • 200. 186 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN Generalizando, f[xi, xi+1, xi+2] = f[xi+1, xi+2] − f[xi, xi+1] xi+2 − xi · (5.12) La generalización para diferencias divididas de orden j es: f[xi, xi+1, ..., xi+j] = f[xi+1, ..., xi+j] − f[xi, ..., xi+j−1] xi+j − xi · (5.13) Las fórmulas anteriores dan sentido al nombre diferencias divididas. Cuando no se preste a confusión, se puede utilizar la siguiente notación: Dj f[xi] := f[xi, xi+1, ..., xi+j]· (5.14) Entonces D0 f[xi] := f(xi), (5.15) Df[xi] = D1 f[xi] = D0f[xi+1] − D0f[xi] xi+1 − xi , (5.16) D2 f[xi] = D1f[xi+1] − D1f[xi] xi+2 − xi , (5.17) Dj f[xi] = Dj−1f[xi+1] − Dj−1f[xi] xi+j − xi · (5.18) 5.3.1. Tabla de diferencias divididas Para ejemplos pequeños, hechos a mano, se acostumbra construir la tabla de diferencias divididas, la cual tiene el siguiente aspecto: xi fi f[xi, xi+1] f[xi, xi+1, xi+2] f[xi, xi+1, xi+2, xi+3] x1 f1 f[x1, x2] x2 f2 f[x1, x2, x3] f[x2, x3] f[x1, x2, x3, x4] x3 f3 f[x2, x3, x4] f[x3, x4] f[x2, x3, x4, x5] x4 f4 f[x3, x4, x5] f[x4, x5] x5 f5
  • 201. Héctor M. Mora E. Métodos Numéricos con Scilab 187 En la tabla anterior, dados 5 puntos, están las diferencias divididas hasta de orden 3. Claro está, se hubiera podido calcular también la diferencia dividida de orden 4, que estarı́a colocada en una columna adicional a la derecha. La elaboración de la tabla es relativamente sencilla. Las dos primeras colum- nas corresponden a los datos. La tercera columna, la de las diferencias divi- didas de primer orden, f[xi, xi+1], se obtiene mediante la resta de dos ele- mentos consecutivos de la columna anterior dividida por la resta de los dos elementos correspondientes de la primera columna. Por ejemplo, f[x3, x4] = (f4 − f3)/(x4 − x3). Obsérvese que este valor se coloca en medio de la fila de f3 y de la fila de f4. Para el cálculo de una diferencia dividida de segundo orden, cuarta columna, se divide la resta de dos elementos consecutivos de la columna anterior por la resta de dos elementos de la primera columna, pero dejando uno intercalado. Por ejemplo, f[x1, x2, x3] = (f[x2, x3] − f[x1, x2])/(x3 − x1). Para el cálculo de una diferencia dividida de tercer orden, quinta columna, se divide la resta de dos elementos consecutivos de la columna anterior por la resta de dos elementos de la primera columna, pero dejando dos intercalados. Por ejemplo, f[x1, x2, x3, x4] = (f[x2, x3, x4] − f[x1, x2, x3])/(x4 − x1). Ejemplo 5.6. Construir la tabla de diferencias divididas, hasta el orden 3, a partir de los seis puntos siguientes: (0, 0), (0.5, 0.7071), (1, 1), (2, 1.4142), (3, 1.7321), (4, 2). xi fi Df[xi] D2f[xi] D3f[xi] 0 0.0000 1.4142 .5 0.7071 −0.8284 0.5858 0.3570 1 1.0000 −0.1144 0.4142 0.0265 2 1.4142 −0.0482 0.3179 0.0077 3 1.7321 −0.0250 0.2679 4 2.0000 El valor 1.4142 es simplemente (0.7071 − 0)/(0.5 − 0). El valor 0.2679 es (2 − 1.7321)/(4 − 3). El valor −0.1144 es (0.4142 − .5858)/(2 − .5). El valor 0.0077 es (−0.0250 − −0.0482)/(4 − 1). ✸
  • 202. 188 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN El esquema algorı́tmico para calcular la tabla de diferencias divididas hasta el orden m es el siguiente: para i = 1, ..., n D0f[xi] = f(xi) fin-para i para j = 1, ..., m para i = 1, ..., n − j calcular Djf[xi] según (5.18) fin-para i fin-para j Suponiendo que x, y son vectores y que se conoce m, la tabla de diferencias di- vididas, hasta el orden m, se puede costruir en Scilab por órdenes semejantes a: x = x(:) y = y(:) n = size(x,1) DD = zeros(n,m+1); DD(:,1) = y; for j=1:m for i=1:n-j Djfi = ( DD(i+1,j) - DD(i,j) )/( x(i+j) - x(i) ); DD(i,j+1) = Djfi; end end disp(DD) Si los datos f(xi) corresponden a un polinomio, esto se puede deducir me- diante las siguientes observaciones: Si para algún m todos los valores f[xk, xk+1, ..., xk+m] son iguales (o aproximadamente iguales), entonces f es (aproximadamente) un poli- nomio de grado m. Si para algún r todos los valores f[xk, xk+1, ..., xk+r] son nulos (o aproximadamente nulos), entonces f es (aproximadamente) un poli- nomio de grado r − 1.
  • 203. Héctor M. Mora E. Métodos Numéricos con Scilab 189 5.3.2. Cálculo del valor interpolado La fórmula (5.8) se puede reescribir a partir de un punto xk, pues no siempre se debe tomar como valor de referencia x1, pm(x) = pm−1(x) + Dm f[xk](x − xk)(x − xk+1) · · · (x − xk+m−1). (5.19) Si se calcula pm−1(x) de manera análoga, queda en función de pm−2(x) y ası́ sucesivamente se obtiene: pm(x) = m X i=0  Di f[xk] i−1 Y j=0 (x − xk+j)   . (5.20) El proceso para el cálculo es el siguiente: p0(x) = fk p1(x) = p0(x) + D1f[xk](x − xk) p2(x) = p1(x) + D2f[xk](x − xk)(x − xk+1) p3(x) = p2(x) + D3f[xk](x − xk)(x − xk+1)(x − xk+2) p4(x) = p3(x) + D4f[xk](x − xk)(x − xk+1)(x − xk+2)(x − xk+3) . . . Se observa que para calcular pj(x) hay multiplicaciones que ya se hicieron para obtener pj−1(x); entonces, no es necesario repetirlas sino organizar el proceso de manera más eficiente. γ0 = 1, p0(x) = fk γ1 = γ0(x − xk), p1(x) = p0(x) + D1f[xk] γ1 γ2 = γ1(x − xk+1), p2(x) = p1(x) + D2f[xk] γ2 γ3 = γ2(x − xk+2), p3(x) = p2(x) + D3f[xk] γ3 γ4 = γ3(x − xk+3), p4(x) = p3(x) + D4f[xk] γ4 . . . Únicamente queda por precisar la escogencia del punto inicial o de referencia xk. Si se desea evaluar pm(x̄), ¿cuál debe ser xk? Recordemos que se supone que los puntos x1, x2, ..., xn están ordenados y que m, orden del polinomio de interpolación, es menor o igual que n − 1. Obviamente, aunque no es absolutamente indispensable, también se supone que x̄ / ∈ {x1, x2, ..., xn}. Naturalmente se desea que x̄ ∈ [xk, xk+m], pero no siempre se cumple; esto sucede cuando x̄ / ∈ [x1, xn]. En estos casos se habla de extrapolación y se
  • 204. 190 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN debe escoger xk = x1 si x̄ x1. En el caso opuesto, x̄ xn, se toma xk = xn−m. En los demás casos, se desea que x̄ esté lo “más cerca” posible del intervalo [xk, xk+m] o del conjunto de puntos xk, xk+1, xk+2, ..., xk+m. Ejemplo 5.7. Considere los datos del ejemplo anterior para calcular por interpolación cuadrática y por interpolación cúbica una aproximación de f(1.69). El primer paso consiste en determinar el xk. Para ello únicamente se tienen en cuenta los valores xi. xi 0 .5 1 2 3 4 Para el caso de la interpolación cuadrática, una simple inspección visual de- termina que hay dos posibilidades para xk. La primera es xk = 0.5, intervalo [0.5, 2]. La segunda es xk = 1, intervalo [1, 3]. ¿Cuál es mejor? Para medir la cercanı́a se puede usar la distancia de x̄ al promedio de los extremos del intervalo (xi + xi+2)/2 (el centro del intervalo) o la distancia de x̄ al promedio de todos los puntos (xi + xi+1 + xi+2)/3. En general ui = xi + xi+m 2 , (5.21) vi = xi + xi+1 + xi+2 + · · · + xi+m m + 1 , (5.22) |x̄ − uk| = min i {|x̄ − ui| : x̄ ∈ [xi, xi+m]}, (5.23) |x̄ − vk| = min i {|x̄ − vi| : x̄ ∈ [xi, xi+m]}. (5.24) Los valores ui y vi son, de alguna forma, indicadores del centro de masa del intervalo [xi, xi+m]. Con frecuencia, los dos criterios, (5.23) y (5.24), definen el mismo xk, pero en algunos casos no es ası́. De todas formas son criterios razonables y para trabajar se escoge un solo criterio, lo cual da buenos resultados. Se puede preferir la utilización de vi que, aunque requiere más operaciones, tiene en cuenta todos los xj pertenecientes a [xi, xi+m].
  • 205. Héctor M. Mora E. Métodos Numéricos con Scilab 191 Los resultados numéricos para la interpolación cuadrática dan: xi ui |x̄ − ui| vi |x̄ − vi| 0 .5 1.25 0.44 1.1667 0.5233 1 2.00 0.31 √ 2.0000 0.3100 √ 2 3 4 Para la interpolación cúbica hay tres posibilidades para xk: 0 , 0.5 y 1. xi ui |x̄ − ui| vi |x̄ − vi| 0 1.00 0.69 0.875 0.815 .5 1.75 0.06 √ 1.625 0.065 √ 1 2.50 0.81 2.500 0.810 2 3 4 Una vez escogido xk = 1 para obtener la aproximación cuadrática de f(1.69), los cálculos dan: γ0 = 1, p0(x) = 1, γ1 = 1(1.69 − 1) = 0.69, p1(x) = 1 + 0.4142(0.69) = 1.285798 γ2 = 0.69(1.69 − 2) = −0.2139, p2(x) = 1.285798 − 0.0482(−0.2139) p2(x) = 1.296097 Para la interpolación cúbica, xk = 0.5: γ0 =1, p0(x)=0.7071, γ1 =1(1.69−0.5)=1.19, p1(x)=0.7071+0.5858(1.19) p1(x)=1.404202 γ2 =1.19(1.69−1)=0.8211, p2(x)=1.404202−0.1144(0.8211) p2(x)=1.310268 γ3 =0.8211(1.69−2)=−0.254541, p3(x)=1.310268+0.0265(−0.254541) p3(x)=1.303523. ✸
  • 206. 192 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN El esquema del algoritmo para calcular pm(x̄), a partir de la tabla de dife- rencia divididas, es el siguiente: determinar k px = f(xk) gi = 1.0 para j = 1, ..., m gi = gi ∗ (x̄ − xk+j−1) px = px + gi ∗ Djf[xk] fin-para j Si x es un vector ordenado de manera creciente, m el grado del polinomio interpolante y t el valor en el que se desea interpolar, el ı́ndice k se puede obtener en Scilab por órdenes semejantes a: n = length(x); if t = x(1) k = 1 else if t = x(n) k = n-m; else distmin = 1.0e10; k = -1; for i=1:n-m if ( x(i) = t t = x(i+m) ) | m == 0 vi = mean(x(i:i+m)); di = abs( t - vi ); if di distmin distmin = di; k = i; end end // if end // for i end // else end // else Dados el vector x (ordenado), el vector y , el valor m (grado del polinomio), si ya se construyó la tabla de diferencias divididas DD y se conoce k , en- tonces el valor p(t) se puede calcular en Scilab ası́:
  • 207. Héctor M. Mora E. Métodos Numéricos con Scilab 193 pt = DD(k,1) gi = 1 for j=1:m gi = gi*(t-x(k+j-1)) pt = pt + gi*DD(k,j+1) end La escogencia del “mejor” xk para calcular pm(x̄), con m n − 1, es útil cuando se va a evaluar una aproximación de f en pocos puntos, suficiente- mente separados entre sı́. Cuando hay muchos valores x̄ para obtener una aproximación de f, puede suceder que dos de los x̄ sean cercanos pero al obtener el “mejor” xk , resulten dos xk diferentes con dos aproximaciones bastante diferentes, cuando se esperaban dos aproximaciones parecidas. En la sección de splines hay un ejemplo detallado. 5.4. Diferencias finitas Cuando los puntos (x1, f(x1)), (x2, f(x2)), (x3, f(x3)), ..., (xn, f(xn)), están igualmente espaciados en x, es decir, existe un h 0 tal que xi = xi−1 + h, i = 2, ..., n xi = x1 + (i − 1)h, i = 1, ..., n entonces se pueden utilizar las diferencias finitas, definidas por ∆0 fi = fi (5.25) ∆fi = fi+1 − fi (5.26) ∆k+1 fi = ∆k (∆fi) = ∆k fi+1 − ∆k fi (5.27) Algunas de las propiedades interesantes de las diferencias finitas son: ∆k fi = k X j=0 (−1)j k j fi+k−j , (5.28) fi+k = k X j=0 k j ∆j fi . (5.29) Las demostraciones se pueden hacer por inducción. La primera igualdad per- mite calcular ∆kfi sin tener explı́citamente los valores ∆k−1fj. La segunda
  • 208. 194 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN igualdad permite el proceso inverso al cálculo de las diferencias finitas (se obtienen a partir de los valores iniciales fp), es decir, obtener un valor fm a partir de las diferencias finitas. Para valores igualmente espaciados, las diferencias finitas y las divididas están estrechamente relacionadas. D0 f[xi] = f[xi] = fi = ∆0 fi D1 f[xi] = f[xi, xi+1] = fi+1 − fi xi+1 − xi = ∆1fi h D2 f[xi] = f[xi, xi+1, xi+2] = f[xi+1, xi+2] − f[xi, xi+1] xi+2 − xi = · · · = ∆2fi 2h2 Dm f[xi] = f[xi, ..., xi+m] = ∆mfi m! hm (5.30) 5.4.1. Tabla de diferencias finitas La tabla de diferencias finitas tiene una estructura análoga a la tabla de diferencias divididas. Se usa para ejemplos pequeños hechos a mano. xi fi ∆fi ∆2fi ∆3fi x1 f1 ∆f1 x2 f2 ∆2f1 ∆f2 ∆3f1 x3 f3 ∆2f2 ∆f3 ∆3f2 x4 f4 ∆2f3 ∆f4 x5 f5 La elaboración de la tabla es muy sencilla. Las dos primeras columnas corres- ponden a los datos. A partir de la tercera columna, para calcular cada ele- mento se hace la resta de dos elementos consecutivos de la columna anterior. Por ejemplo, ∆f3 = f4 − f3. Obsérvese que este valor se coloca en medio de la fila de f3 y de la fila de f4. Por ejemplo, ∆2f1 = ∆f2 − ∆f1. De manera semejante, ∆3f2 = ∆2f3 − ∆2f2. Ejemplo 5.8. Construir la tabla de diferencias finitas, hasta el orden 3, a partir de los seis puntos siguientes: (0, 0), (0.5, 0.7071), (1, 1), (1.5, 1.2247), (2, 1.4142), (2.5, 1.5811).
  • 209. Héctor M. Mora E. Métodos Numéricos con Scilab 195 xi fi ∆fi ∆2fi ∆3fi 0 0.0000 0.7071 .5 0.7071 −0.4142 0.2929 0.3460 1 1.0000 −0.0682 0.2247 0.0330 1.5 1.2247 −0.0352 0.1895 0.0126 2 1.4142 −0.0226 0.1669 2.5 1.5811 El valor 0.1895 es simplemente 1.4142−1.2247. El valor 0.0330 es −0.0352− −0.0682. ✸ El esquema algorı́tmico para calcular la tabla de diferencias finitas hasta el orden m es el siguiente: para i = 1, ..., n ∆0fi = f(xi) fin-para i para j = 1, ..., m para i = 1, ..., n − j ∆jfi = ∆j−1fi+1 − ∆j−1fi fin-para i fin-para j 5.4.2. Cálculo del valor interpolado Teniendo en cuenta la relación entre diferencias divididas y finitas (5.30), la igualdad (5.20) se puede escribir pm(x) = m X i=0  ∆ifk i! hi i−1 Y j=0 (x − xk+j)   .
  • 210. 196 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN El valor i! se puede escribir Qi−1 j=0(j + 1). Además, sea s = (x − xk)/h, es decir, x = xk + sh. Entonces, x − xk+j = xk + sh − xk − jh = (s − j)h. pm(x) = m X i=0  ∆ifk i! hi i−1 Y j=0 (s − j)h   = m X i=0  ∆ifk i! i−1 Y j=0 (s − j)   = m X i=0 ∆i fk i−1 Y j=0 s − j j + 1 Si a y b son enteros no negativos, a ≥ b, el coeficiente binomial está definido por a b = a! (a − b)! b! . Desarrollando los factoriales y simplificando se tiene a b = a(a − 1)(a − 2) · · · (a − b + 1) 1 × 2 × 3 × · · · × b = a(a − 1)(a − 2) · · · (a − b + 1) b! Esta última expresión sirve para cualquier valor real a y cualquier entero no negativo b, con la convención de que a 0 = 1. Entonces, i−1 Y j=0 s − j j + 1 se puede denotar simplemente por s i y ası́, pm(x) = m X i=0 ∆i fk s i . (5.31) Este coeficiente s i guarda propiedades semejantes a las del coeficiente binomial, en particular s i = s i − 1 s − i + 1 i .
  • 211. Héctor M. Mora E. Métodos Numéricos con Scilab 197 Esto permite su cálculo de manera recurrente s 0 = 1, s 1 = s 0 s s 2 = s 1 s − 1 2 s 3 = s 2 s − 2 3 s 4 = s 3 s − 3 4 . . . Escoger el xk para interpolar por un polinomio de grado m, se hace como en las diferencias divididas. Como los valores xi están igualmente espaciados los valores, ui y vi coinciden. ui = xi + xi+m 2 , i = 1, ..., n − m, |x − uk| = min{|x − ui| : i = 1, ..., n − m}. Definido el xk, es necesario calcular s: s = x − xk h . El esquema de los cálculos es: γ0 = 1, p0(x) = fk γ1 = γ0 s, p1(x) = p0(x) + ∆1fk γ1 γ2 = γ1(s − 1)/2, p2(x) = p1(x) + ∆2fk γ2 γ3 = γ2(s − 2)/3, p3(x) = p2(x) + ∆3fk γ3 γ4 = γ3(s − 3)/4, p4(x) = p3(x) + ∆4fk γ4 . . . Ejemplo 5.9. Calcular p3(1.96) y p2(1.96) a partir de los puntos (0, 0), (0.5, 0.7071), (1, 1), (1.5, 1.2247), (2, 1.4142), (2.5, 1.5811). La tabla de diferencias finitas es la misma del ejemplo anterior. Para calcular
  • 212. 198 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN p3(1.96) se tiene xk = x2 = 1. Entonces s = (1.96 − 1)/0.5 = 1.92 . γ0 = 1, p0(x) = f2 = 1 γ1 = 1(1.92) = 1.92, p1(x) = 1 + .2247(1.92) = 1.431424 γ2 = 1.92(1.92 − 1)/2 = .8832, p2(x) = 1.431424 − .0352(.8832) p2(x) = 1.400335 γ3 = γ2(1.92 − 2)/3 = −.023552, p3(x) = 1.400335 + .0126(−.023552) p3(x) = 1.400039 Para calcular p2(1.96) se tiene xk = x3 = 1.5. Entonces s = (1.96 − 1.5)/0.5 = 0.92 . γ0 =1, p0(x)=f3 =1.2247 γ1 =1(0.92)=0.92, p1(x)=1.2247 + .1895(.92)=1.39904 γ2 =0.92(0.92 − 1)/2=−.0368, p2(x)=1.39904 − .0226(−0.0368) p2(x)=1.399872 5.5. Trazadores cúbicos, interpolación polinomial por trozos, splines Dados n + 1 puntos, al utilizar diferencias divididas o diferencias finitas, cuando se desea interpolar por un polinomio de grado m en un valor t, se escoge el mejor conjunto de puntos (xk, yk), (xk+1, yk+1), ..., (xk+m, yk+m), para obtener el valor pm(t). Sin embargo, este método presenta un gran inconveniente cuando hay que interpolar en muchos valores t. Consideremos los siguientes puntos: (1, 2), (2, 2), (3, 2), (4, 3), (5, 2). Para interpolar por polinomios de orden 2, si t 2.5 se utilizan los puntos (1, 2), (2, 2) y (3, 2). Entonces, por ejemplo, p2(2.49) = 2. Si 2.5 t 3.5, se utilizan los puntos (2, 2), (3, 2) y (4, 3). Después de algunos cálculos se ob- tiene p2(2.51) = 1.87505. Para t = 2.501 se obtiene p2(2.501) = 1.8750005. El lı́mite de p2(t), cuando t → 2.5+, es 1.875. Esto nos muestra una discon- tinuidad. En t = 3.5 también se presenta una discontinuidad. Estas discontinuidades se pueden evitar utilizando en el intervalo [1, 3] un polinomio p2(t) y en el intervalo [3, 5] otro polinomio p2(t). Obviamente ya no hay discontinuidades pero la gráfica no es suave, es decir, la función interpolante no es diferenciable.
  • 213. Héctor M. Mora E. Métodos Numéricos con Scilab 199 • • • • • 0 1 2 3 4 5 0 1 2 3 Figura 5.7. Puntos o datos iniciales • • • • • 0 1 2 3 4 5 0 1 2 3 Figura 5.8. Interpolación cuadrática por trozos no continua
  • 214. 200 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN • • • • • 0 1 2 3 4 5 0 1 2 3 Figura 5.9. Interpolación cuadrática por trozos continua Los trazadores cúbicos (splines cúbicos), remedian este inconveniente. En cada intervalo [xi, xi+1] se utiliza un polinomio cúbico y los coeficientes de cada polinomio se escogen para que en los puntos xi haya continuidad, diferenciabilidad y doble diferenciabilidad. Dados n puntos (x1, y1), (x2, y2), ... (xn, yn), con x1 x2 x3 · · · xn, el trazador cúbico se define ası́: S(x) =            S1(x) si x ∈ [x1, x2] S2(x) si x ∈ [x2, x3] . . . Sn−1(x) si x ∈ [xn−1, xn] (5.32) En cada uno de los n − 1 intervalos, Si(x) es un polinomio cúbico. Si(x) = ai(x − xi)3 + bi(x − xi)2 + ci(x − xi) + di, i = 1, 2, ..., n − 1. (5.33)
  • 215. Héctor M. Mora E. Métodos Numéricos con Scilab 201 Conocer S(x) quiere decir conocer 4(n − 1) coeficientes: ai, bi, ci, di, para i = 1, 2, ..., n − 1. Se requiere que S(x) pase por los puntos (xi, yi), y que sea doblemente diferenciable. Además, es necesario tratar algunos detalles adicionales en los extremos de los intervalos. Entonces, S(xi) = yi, i = 1, ..., n, Si(xi+1) = Si+1(xi+1), i = 1, ..., n − 2, S′ i(xi+1) = S′ i+1(xi+1), i = 1, ..., n − 2, S′′ i (xi+1) = S′′ i+1(xi+1), i = 1, ..., n − 2. Sea hj = xj+1 − xj, el tamaño del intervalo [xj, xj+1], j = 1, ..., n − 1. Las condiciones anteriores se convierten en: Si(xi) = di = yi i = 1, ..., n − 1, Sn−1(xn) = an−1h3 n−1 + bn−1h2 n−1 + cn−1hn−1 + dn−1 = yn aih3 i + bih2 i + cihi + di = di+1 i = 1, ..., n − 2, 3aih2 i + 2bihi + ci = ci+1 i = 1, ..., n − 2, 6aihi + 2bi = 2bi+1 i = 1, ..., n − 2. Sea dn := yn una variable adicional. Esta variable se utilizará únicamente en las fórmulas intermedias, pero no aparece en las fórmulas finales. di = yi i = 1, ..., n, (5.34) aih3 i + bih2 i + cihi + di = di+1 i = 1, ..., n − 1, (5.35) 3aih2 i + 2bihi + ci = ci+1 i = 1, ..., n − 2, (5.36) 3aihi + bi = bi+1 i = 1, ..., n − 2. (5.37) De (5.37): ai = bi+1 − bi 3hi (5.38) Reemplazando (5.38) en (5.35): h2 i 3 (bi+1 − bi) + bih2 i + cihi + di = di+1 h2 i 3 (bi+1 + 2bi) + cihi + di = di+1 (5.39)
  • 216. 202 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN Reemplazando (5.38) en (5.36): (bi+1 − bi)hi + 2bihi + ci = ci+1 (bi+1 + bi)hi + ci = ci+1 (5.40) Despejando ci de (5.39): ci = 1 hi (di+1 − di) − hi 3 (2bi + bi+1) (5.41) Cambiando i por i − 1: ci−1 = 1 hi−1 (di − di−1) − hi−1 3 (2bi−1 + bi) (5.42) Cambiando i por i − 1 en (5.40): (bi + bi−1)hi−1 + ci−1 = ci (5.43) Reemplazando (5.41) y (5.42) en (5.43): (bi + bi−1)hi−1 + 1 hi−1 (di − di−1) − hi−1 3 (2bi−1 + bi) = 1 hi (di+1 − di) − hi 3 (2bi + bi+1) Las variables di son en realidad constantes (di = yi). Dejando al lado izquier- do las variables bj y al lado derecho los términos independientes, se tiene: hi−1 3 bi−1 + 2hi−1 3 + 2hi 3 bi + hi 3 bi+1 = 1 hi−1 (di−1 − di) + 1 hi (di+1 − di). Multiplicando por 3: hi−1bi−1 + 2(hi−1 + hi)bi + hibi+1 = 3 hi−1 (di−1 − di) + 3 hi (−di + di+1). (5.44) La igualdad anterior es válida para i = 1, ..., n − 2. Es decir, hay n − 2 ecuaciones con n incógnitas. El sistema se completa según las condiciones de frontera. Hay dos clases de condiciones sobre S(x). La primera clase se conoce con el nombre de condiciones de frontera libre o natural: en los extremos la curvatura es nula, o sea, S′′(x1) = 0 y S′′(xn) = 0, S′′ 1 (x1) = 0, S′′ n−1(xn) = 0. (5.45)
  • 217. Héctor M. Mora E. Métodos Numéricos con Scilab 203 En la segunda clase de condiciones de frontera, frontera sujeta, se supone conocida la pendiente de S(x) en los extremos: S′ 1(x1) = f′ (x1), S′ n−1(xn) = f′ (xn). (5.46) Al explicitar las condiciones de frontera libre se tiene: S′′ 1 (x) = 6a1(x − x1) + 2b1 S′′ n−1(x) = 6an−1(x − xn−1) + 2bn−1 S′′ 1 (x1) = 2b1 = 0 (5.47) S′′ n−1(xn) = 3an−1hn−1 + bn−1 = 0. (5.48) Además del resultado anterior (b1 = 0), se puede introducir una variable adicional bn = 0. Esto permite que la ecuación (5.44) se pueda aplicar para i = n−1. Recuérdese que ya se introdujo dn = yn y que para todo i se tiene di = yi. Entonces, se tiene un sistema de n ecuaciones con n incógnitas, escrito de la forma Ab = ζ, (5.49) donde A =                 1 0 0 0 h1 2(h1 + h2) h2 0 0 h2 2(h2 + h3) h3 0 0 h3 2(h3 + h4) h4 0 0 hn−2 2(hn−2 + hn−1) hn−1 0 0 0 1                
  • 218. 204 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN b =                      b1 b2 b3 . . . bn−1 bn                      , ζ =                      0 3 h1 (y1 − y2) + 3 h2 (−y2 + y3) 3 h2 (y2 − y3) + 3 h3 (−y3 + y4) . . . 3 hn−2 (yn−2 − yn−1) + 3 hn−1 (−yn−1 + yn) 0                      . El sistema (5.49) tiene dos caracterı́sticas importantes: es tridiagonal, lo cual facilita su solución; la matriz A es de diagonal estrictamente dominante, lo cual garantiza que A es invertible y que la solución existe y es única. Una vez conocidos los valores b1, b2, ..., bn−1, bn, se puede aplicar (5.41) para calcular los ci: ci = 1 hi (yi+1 − yi) − hi 3 (2bi + bi+1), i = 1, ..., n − 1. (5.50) Como bn existe y vale 0, la ecuación (5.38) se puede aplicar aún para i = n − 1. ai = bi+1 − bi 3hi , i = 1, ..., n − 1. (5.51) Obsérvese que para i = n−1, la igualdad an−1 = (0−bn−1)/(3hn−1) coincide con la segunda condición de frontera (5.48). El orden de aplicación de las fórmulas es el siguiente: di = yi, i = 1, ..., n − 1. Obtener b1, b2, ..., bn resolviendo (5.49). En particular b1 = 0 y, de acá en adelante, se considera bn = 0. Para i = 1, ..., n − 1 calcular ci según (5.50). Para i = 1, ..., n − 1 calcular ai según (5.51). Ejemplo 5.10. Construir el trazador cúbico para los puntos (1, 2), (2, 2), (3, 2), (4, 3) y (5, 2).
  • 219. Héctor M. Mora E. Métodos Numéricos con Scilab 205 De manera inmediata d1 = 2, d2 = 2, d3 = 2 y d4 = 3. En este ejemplo h1 = h2 = h3 = h4 = 1. El sistema que permite obtener los bi es:       1 0 0 0 0 1 4 1 0 0 0 1 4 1 0 0 0 1 4 1 0 0 0 0 1             b1 b2 b3 b4 b5       =       0 0 3 −6 0       . Al resolver el sistema se obtiene b1 = 0 (obvio), b2 = −0.321429, b3 = 1.285714, b4 = −1.821429 y b5 = 0 (también obvio). El cálculo de los otros coeficientes da: c1 = 0.107143 c2 = −0.214286 c3 = 0.75 c4 = 0.214286 a1 = −0.107143 a2 = 0.535714 a3 = −1.035714 a4 = 0.607143. Entonces S1(x) = −0.107143(x − 1)3 + 0(x − 1)2 + 0.107143(x − 1) + 2 S2(x) = 0.535714(x − 2)3 − 0.321429(x − 2)2 − 0.214286(x − 2) + 2 S3(x) = −1.035714(x − 3)3 + 1.285714(x − 3)2 + 0.75(x − 3) + 2 S4(x) = 0.607143(x − 4)3 − 1.821429(x − 4)2 + 0.214286(x − 4) + 3 . 5.6. Aproximación por mı́nimos cuadrados Cuando hay muchos puntos no es conveniente buscar un único polinomio o una función que pase exactamente por todos los puntos. Entonces hay dos soluciones: la primera, vista anteriormente, es hacer interpolación por grupos pequeños de puntos. En muchos casos es una solución muy buena. Sin embargo, en algunas ocasiones se desea una función que sirva para todos
  • 220. 206 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN • • • • • 0 1 2 3 4 5 0 1 2 3 Figura 5.10. Interpolación con trazadores cúbicos o splines los puntos. La segunda solución consiste en obtener una sola función ˜ f que, aunque no pase por todos los puntos, pase relativamente cerca de todos. Este es el enfoque de la aproximación por mı́nimos cuadrados. Se supone que hay m puntos (x1, y1), (x2, y2), ..., (xm, ym) y que los xi son todos diferentes. La función ˜ f, que se desea construir, debe ser combinación lineal de n funciones llamadas funciones de la base. Supongamos que estas funciones son ϕ1, ϕ2, ..., ϕn. Entonces, ˜ f(x) = a1ϕ1(x) + a2ϕ2(x) + · · · + anϕn(x). Como las funciones de la base son conocidas, para conocer ˜ f basta conocer los escalares a1, a2, ..., an. Como se supone que hay muchos puntos (m grande) y como se desea que ˜ f sea sencilla, es decir, n es relativamente pequeño, entonces se debe tener que m ≥ n. Las funciones de la base deben ser linealmente independientes. Los escalares a1, a2, ..., an se escogen de tal manera que ˜ f(xi) ≈ yi, para i = 1, 2, ..., m.
  • 221. Héctor M. Mora E. Métodos Numéricos con Scilab 207 Entonces, a1ϕ1(x1) + a2ϕ2(x1) + · · · + anϕn(x1) ≈ y1 a1ϕ1(x2) + a2ϕ2(x2) + · · · + anϕn(x2) ≈ y2 a1ϕ1(x3) + a2ϕ2(x3) + · · · + anϕn(x3) ≈ y3 . . . a1ϕ1(xm) + a2ϕ2(xm) + · · · + anϕn(xm) ≈ ym. Las m igualdades (aproximadas) anteriores se pueden escribir de manera matricial:          ϕ1(x1) ϕ2(x1) · · · ϕn(x1) ϕ1(x2) ϕ2(x2) · · · ϕn(x2) ϕ1(x3) ϕ2(x3) · · · ϕn(x3) . . . ϕ1(xm) ϕ2(xm) · · · ϕn(xm)               a1 a2 . . . an      ≈          y1 y2 y3 . . . ym          De manera compacta se tiene Φ a ≈ y. (5.52) La matriz Φ es una matriz m × n rectangular alta (m ≥ n), a es un vector columna n × 1, y es un vector columna m × 1. Son conocidos la matriz Φ y el vector columna y. El vector columna a es el vector de incógnitas. Como las funciones de la base son linealmente independientes, entonces las columnas de Φ son linealmente independientes. En consecuencia, (5.52) se puede resolver por mı́nimos cuadrados: (ΦT Φ) a = ΦT y . (5.53) Recordemos del capı́tulo 2 que para resolver por mı́nimos cuadrados el sis- tema Ax = b, se minimiza ||Ax − b||2 2. Traduciendo esto al problema de aproximación por mı́nimos cuadrados, se tiene min m X i=1   n X j=1 ajϕj(xi) − yi   2 . es decir, min m X i=1 ˜ f(xi) − yi 2 .
  • 222. 208 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN Esto significa que se está buscando una función ˜ f, combinación lineal de las funciones de la base, tal que minimiza la suma de los cuadrados de las distancias entre los puntos (xi, ˜ f(xi)) y (xi, yi). Ejemplo 5.11. Dadas las funciones ϕ1(x) = 1, ϕ2(x) = x, ϕ3(x) = x2, encontrar la función ˜ f que aproxima por mı́nimos cuadrados la función dada por los puntos (0, 0.55), (1, 0.65), (1.5, 0.725), (2, 0.85), (3, 1.35). Como las funciones de la base son 1, x, x2, en realidad se está buscando aproximar por mı́nimos cuadrados por medio de un parábola. El sistema inicial es       1 0 0 1 1 1 1 1.5 2.25 1 2 4 1 3 9         a1 a2 a3   ≈       0.55 0.65 0.725 0.85 1.35       Las ecuaciones normales dan:   5 7.5 16.25 7.5 16.25 39.375 16.25 39.375 103.0625     a1 a2 a3   =   4.1250 7.4875 17.8313   La solución es: a =   0.56 −0.04 0.10   , ˜ f(x) = 0.56 − 0.04x + 0.1x2 .        ˜ f(x1) ˜ f(x2) ˜ f(x3) ˜ f(x4) ˜ f(x5)        = Φ a =       0.56 0.62 0.725 0.88 1.34       , y =       0.55 0.65 0.725 0.85 1.35       ✸ Ejercicios 5.1 Halle, resolviendo el sistema de ecuaciones, el polinomio de interpo- lación que pasa por los puntos (1, −5), (2, −4), (4, 4).
  • 223. Héctor M. Mora E. Métodos Numéricos con Scilab 209 5.2 Halle, por medio de los polinomios de Lagrange, el polinomio de inter- polación que pasa por los puntos del ejercicio anterior. 5.3 Halle el polinomio de interpolación que pasa por los puntos (−1, −5), (1, −5), (2, −2), (4, 40). 5.4 Halle el polinomio de interpolación que pasa por los puntos (−1, 10), (1, 8), (2, 4), (4, −10). 5.5 Considere los puntos (0.10, 11.0000), (0.13, 8.6923), (0.16, 7.2500), (0.20, 6.0000), (0.26, 4.8462), (0.40, 3.5000), (0.32, 4.1250), (0.50, 3.0000). Construya la tabla de diferencias dividas hasta el orden 3. Obtenga p2(0.11), p2(0.08), p2(0.25), p2(0.12), p2(0.33), p2(0.6), p3(0.25), p3(0.33), p3(0.6). 5.6 Considere los puntos (0.05, 21.0000), (0.10, 11.0000), (0.15, 7.6667), (0.20, 6.0000), (0.25, 5.0000), (0.30, 4.3333), (0.35, 3.8571), (0.40, 3.5000). Construya la tabla de diferencias divididas hasta el orden 3. Cal- cule p2(0.11), p2(0.08), p2(0.25), p2(0.12), p2(0.33), p2(0.6), p3(0.25), p3(0.33), p3(0.6).
  • 224. 210 CAPÍTULO 5. INTERPOLACIÓN Y APROXIMACIÓN 5.7 Considere los mismos puntos del ejercicio anterior. Construya la tabla de diferencias finitas hasta el orden 3. Halle p2(0.11), p2(0.08), p2(0.25), p2(0.12), p2(0.33), p2(0.6), p3(0.25), p3(0.33), p3(0.6). 5.8 Considere los puntos (0.05, 2.0513), (0.10, 2.1052), (0.15, 2.1618), (0.20, 2.2214), (0.25, 2.2840), (0.30, 2.3499), (0.35, 2.4191), (0.40, 2.4918). Obtenga la recta de aproximación por mı́nimos cuadrados. 5.9 Considere los mismos puntos del ejercicio anterior. Obtenga la parábo- la de aproximación por mı́nimos cuadrados. 5.10 Considere los mismos puntos de los dos ejercicios anteriores. Use otra base y obtenga la correspondiente función de aproximación por mı́ni- mos cuadrados. 5.11 Para diferentes valores de n, empezando con n = 5, construya en Scilab dos vectores columna x y y, con las coordenadas de n puntos: ( 0, (−1)n−1(n − 1)! ), (1, 0), (2, 0), (3, 0), ..., (n − 1, 0) . Obtenga p, el polinomio de interpolación, a partir de la solución de (5.1). Construya un vector columna yse con los valores del polinomio p eva- luado en los valores del vector columna x. Teóricamente los dos vec- tores, y, yse, son iguales. Obtenga la norma de y-yse. Obtenga q, el polinomio de interpolación usando polinomios de La- grange. Construya un vector columna ylg con los valores del polinomio q evaluado en los valores del vector columna x. Teóricamente los dos vectores, y, ylg, son iguales. Obtenga la norma de y-ylg. Repita el proceso con n = 10, 15, 20. Observe e interprete.
  • 225. Capı́tulo 6 Integración y diferenciación 6.1. Integración numérica Esta técnica sirve para calcular el valor numérico de una integral definida, es decir, parar obtener el valor I = Z b a f(x)dx. En la mayorı́a de los casos no se puede calcular el valor exacto I; simplemente se calcula ˜ I, aproximación de I. De todas maneras primero se debe tratar de hallar la antiderivada. Cuando esto sea imposible o muy difı́cil, entonces se recurre a la integración numéri- ca. Por ejemplo, calcular una aproximación de Z 0.5 0.1 ex2 dx. En este capı́tulo hay ejemplos de integración numérica con funciones cuya antiderivada es muy fácil de obtener y para los que no se debe utilizar la inte- gración numérica; se usan solamente para comparar el resultado aproximado con el valor exacto. 211
  • 226. 212 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN a b y = f(x) Figura 6.1. Integral definida 6.2. En Scilab Para obtener una aproximación del valor de una integral definida, por ejem- plo, Z 0.5 0.1 e−x2 dx se utiliza intg . Para eso es necesario definir en Scilab la función que se va a integrar. Puede ser, directamente en el ambiente Scilab: deff(’[y] = f53(x)’, ’y = exp(-x*x)’) I = intg(0.1, 0.5, f53) También se puede definir una función en un archivo .sci function fx = f57(x) fx = exp(-x*x) endfunction y después de cargarla, dar la orden I = intg(0.1, 0.5, f57) También se puede utilizar la función integrate : I = integrate(’exp(-x*x)’, ’x’, 0.1, 0.5)
  • 227. Héctor M. Mora E. Métodos Numéricos con Scilab 213 Aunque Scilab es muy bueno, no es perfecto. La utilización de intg o integrate no funciona bien (versión 5.1) para Z 2π 0 sen(x) dx . Algunas veces no se conoce una expresión de la función f, pero se conoce una tabla de valores (xi, f(xi)), o simplemente una tabla de valores (xi, yi). Supongamos, ası́ lo requiere Scilab, que la lista de valores (x1, y1), ..., (xn, yn) está ordenada de manera creciente de acuerdo con los xi, o sea, x1 x2 · · · xn. Para obtener el valor aproximado de la integral, entre x1 y xn, de la función f (representada por los valores (xi, yi)), es necesario tener dos vectores con los valor xi y yi, y utilizar la función inttrap , que utiliza la fórmula del trapecio en cada subintervalo. x = [0.1 0.15 0.2 0.25 0.3 0.4 0.5]’ y = [ 0.9900 0.9778 0.9608 0.9394 0.9139 0.8521 0.7788]’ I = inttrap(x, y) Para los mismos parámetros x, y , se puede utilizar la función intsplin que utiliza trazadores cúbicos (splines). x = [0.1 0.15 0.2 0.25 0.3 0.4 0.5]’ y = [ 0.9900 0.9778 0.9608 0.9394 0.9139 0.8521 0.7788]’ I = intsplin(x, y) 6.3. Fórmula del trapecio La fórmula del trapecio, como también la fórmula de Simpson, hace parte de las fórmulas de Newton-Cotes. Sean n + 1 valores igualmente espaciados a = x0, x1, x2, ..., xn = b, donde xi = a + ih , i = 0, 1, 2, ..., n , h = b − a n , y supongamos conocidos yi = f(xi). Supongamos además que n es un múlti- plo de m, n = km. La integral R xn x0 f(x)dx se puede separar en intervalos
  • 228. 214 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN x0 a x1 x2 xm x2m xn−m xn b Figura 6.2. División en subintervalos más pequeños: Z xn x0 f(x)dx = Z xm x0 f(x)dx + Z x2m xm f(x)dx + · · · + Z xn xn−m f(x)dx. En el intervalo [x0, xm] se conocen los puntos (x0, y0), (x1, y1), ..., (xm, ym) y se puede construir el polinomio de interpolación de Lagrange pm(x). Entonces, la integral R xm x0 f(x)dx se aproxima por la integral de pm, Z xm x0 f(x)dx ≈ Z xm x0 pm(x)dx. Para m = 1 se tiene la fórmula del trapecio. Su deducción es mucho más sencilla si se supone que x0 = 0. Esto equivale a hacer el cambio de variable x′ = x − x0. p1(x) = y0 x − x1 x0 − x1 + y1 x − x0 x1 − x0 , p1(x) = y0 x − h −h + y1 x h , p1(x) = y0 + x y1 − y0 h .
  • 229. Héctor M. Mora E. Métodos Numéricos con Scilab 215 x0 x1 y0 y1 h Figura 6.3. Fórmula del trapecio Entonces, Z x1 x0 p1(x)dx = Z h 0 (y0 + x y1 − y0 h )dx = y0h + h2 2 y1 − y0 h , = h( y0 2 + y1 2 ), Z x1 x0 f(x)dx ≈ h y0 + y1 2 · (6.1) De la fórmula (6.1) o de la gráfica se deduce naturalmente el nombre de fórmula del trapecio. Ejemplo 6.1. Z 0.2 0 ex dx ≈ 0.2( 1 2 e0 + 1 2 e0.2 ) = 0.22214028 . ✸ Aplicando la fórmula del trapecio a cada uno de los intervalos [xi−1, xi] se tiene: Z x1 x0 f(x)dx ≈ h( y0 2 + y1 2 ), Z x2 x1 f(x)dx ≈ h( y1 2 + y2 2 ), Z xn xn−1 f(x)dx ≈ h( yn−1 2 + yn 2 ).
  • 230. 216 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN Z xn x0 f(x)dx ≈ h( y0 2 + y1 2 + y1 2 + y2 2 + · · · yn−1 2 + yn 2 ), Z xn x0 f(x)dx ≈ h( y0 2 + y1 + y2 + · · · + yn−2 + yn−1 + yn 2 ), Z xn x0 f(x)dx ≈ h( y0 2 + n−1 X i=1 yi + yn 2 ). (6.2) Ejemplo 6.2. Z 0.8 0 ex dx ≈ 0.2( 1 2 e0 + e0.2 + e0.4 + e0.6 + 1 2 e0.8 ) = 1.22962334 . ✸ 6.3.1. Errores local y global El error local de la fórmula del trapecio es el error proveniente de la fórmula (6.1). eloc = Iloc − ˜ Iloc, eloc = Z x1 x0 f(x)dx − h( y0 2 + y1 2 ) = Z x1 x0 f(x)dx − Z x1 x0 p1(x)dx = Z x1 x0 (f(x) − p1(x))dx . Utilizando la fórmula del error para la interpolación polinómica 5.6, eloc = Z x1 x0 (x − x0)(x − x1) 2 f′′ (ξx)dx , ξx ∈ [x0, x1]. El teorema del valor medio para integrales dice: Sean f continua en [a, b], g integrable en [a, b], g no cambia de signo en [a, b], entonces Z b a f(x)g(x)dx = f(c) Z b a g(x)dx para algún c en [a, b].
  • 231. Héctor M. Mora E. Métodos Numéricos con Scilab 217 Teniendo en cuenta que (x − x0)(x − x1) ≤ 0 en el intervalo [x0, x1] y aplicando el teorema del valor medio para integrales, existe z ∈ [x0, x1] tal que eloc = f′′(z) 2 Z x1 x0 (x − x0)(x − x1)dx , z ∈ [x0, x1]. Mediante el cambio de variable t = x − x0, dt = dx, eloc = f′′(z) 2 Z h 0 t(t − h)dt , z ∈ [x0, x1], = f′′(z) 2 (− h3 6 ) , z ∈ [x0, x1], eloc = −h3 f′′(z) 12 , z ∈ [x0, x1]. (6.3) La fórmula anterior, como muchas de las fórmulas de error, sirve principal- mente para obtener cotas del error cometido. |eloc| ≤ h3 12 M , M = max{|f′′ (z)| : z ∈ [x0, x1]}. (6.4) En el ejemplo 6.1, f′′(x) = ex, max{|f′′(z)| : z ∈ [0, 0.2]} = 1.22140276, luego el máximo error que se puede cometer, en valor absoluto, es (0.2)3 × 1.22140276/12 = 8.1427 · 10−4. En este ejemplo, se conoce el valor exacto I = e0.2 − 1 = 0.22140276, luego |e| = 7.3752 · 10−4. En algunos casos, la fórmula del error permite afinar un poco más. Si f′′(x) 0 (f estrictamente convexa) en [x0, x1] y como I = ˜ I + eloc, entonces la fórmula del trapecio da un valor aproximado pero superior al exacto. En el mismo ejemplo, f′′(x) varı́a en el intervalo [1, 1.22140276] cuando x ∈ [0, 0.2]. Luego eloc ∈ [−0.00081427, −0.00066667], entonces, I ∈ [0.22132601, 0.22147361]. El error global resulta de la aproximación de la integral sobre todo el inter-
  • 232. 218 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN valo [x0, xn], o sea, el error en la fórmula (6.2), eglob = Z xn x0 f(x)dx − h( y0 2 + y1 + y2 + · · · + yn−2 + yn−1 + yn 2 ) = n X i=1 (− f′′(zi) h3 12 ) , zi ∈ [xi−1, xi] = − h3 12 n X i=1 f′′ (zi) , zi ∈ [xi−1, xi] Sean M1 = min{f′′ (x) : x ∈ [a, b]} , M2 = max{f′′ (x) : x ∈ [a, b]}. Entonces, M1 ≤ f′′(zi) ≤ M2 , ∀i nM1 ≤ n X i=1 f′′ (zi) ≤ nM2 , M1 ≤ 1 n n X i=1 f′′ (zi) ≤ M2 . Si f ∈ C2 [a,b], entonces, aplicando el teorema del valor intermedio a f′′, existe ξ ∈ [a, b] tal que f′′ (ξ) = 1 n n X i=1 f′′ (zi) . Entonces, eglob = − h3 12 nf′′ (ξ) , ξ ∈ [a, b]. Como h = (b − a)/n, entonces n = (b − a)/h. eglob = −h2 (b − a)f′′(ξ) 12 , ξ ∈ [a, b]. (6.5) 6.4. Fórmula de Simpson Es la fórmula de Newton-Cotes para m = 2, Z x2 x0 f(x)dx ≈ Z x2 x0 p2(x)dx.
  • 233. Héctor M. Mora E. Métodos Numéricos con Scilab 219 El polinomio de interpolación p2(x) se construye a partir de los puntos (x0, y0), (x1, y1), (x2, y2). Para facilitar la deducción de la fórmula, supon- gamos que p2 es el polinomio de interpolación que pasa por los puntos (0, y0), (h, y1), (2h, y2). Entonces, p2(x) = y0 (x − h)(x − 2h) (0 − h)(0 − 2h) + y1 (x − 0)(x − 2h) (h − 0)(h − 2h) + y2 (x − 0)(x − h) (2h − 0)(2h − h) , = 1 2h2 y0(x − h)(x − 2h) − 2y1 x(x − 2h) + y2 x(x − h) , = 1 2h2 x2 (y0 − 2y1 + y2) + hx(−3y0 + 4y1 − y2) + 2h2 y0 , Z 2h 0 p2(x)dx = 1 2h2 8h3 3 (y0 − 2y1 + y2) + h 4h2 2 (−3y0 + 4y1 − y2) + 2h2 (2h)y0 , Z 2h 0 p2(x)dx = h( 1 3 y0 + 4 3 y1 + 1 3 y2). Entonces, Z x2 x0 f(x)dx ≈ h 3 (y0 + 4y1 + y2) (6.6) Suponiendo que n es par, n = 2k, al aplicar la fórmula anterior a cada uno de los intervalos [x0, x2], [x2, x4], [x4, x6], ..., [xn−4, xn−2], [xn−2, xn], se tiene: Z xn x0 f(x)dx ≈ h 3 (y0 + 4y1 + 2y2 + 4y3 + · · · + 4yn−1 + yn) Z xn x0 f(x)dx ≈ h 3 ( y0 + 4 k X j=1 y2j−1 + 2 k−1 X j=1 y2j + yn ) (6.7) Ejemplo 6.3. Z 0.8 0 ex dx ≈ 0.2 3 (e0 + 4(e0.2 + e0.6 ) + 2 e0.4 + e0.8 ) = 1.22555177 . El valor exacto con cifras decimales, es 1.22554093, entonces el error es −0.00001084 . ✸
  • 234. 220 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN 6.4.1. Errores local y global Para facilitar la deducción del error local, consideremos la integral entre −h y h. Sea f ∈ C4 [−h,h]. e(h) = eloc(h) = Z h −h f(x) dx − Z h −h p2(x) dx, = Z h −h f(x) dx − h 3 f(−h) + 4f(0) + f(h) . Sea F tal que F′(x) = f(x), entonces R h −h f(x) dx = F(h) − F(−h). Al derivar con respecto a h se tiene f(h) + f(−h). e′ (h) = f(h) + f(−h) − 1 3 f(−h) + 4f(0) + f(h) − h 3 − f′ (−h) + f′ (h) , 3e′ (h) = 2f(h) + 2f(−h) − 4f(0) − h(f′ (h) − f′ (−h)). 3e′′ (h) = 2f′ (h) − 2f′ (−h) − f′ (h) + f′ (−h) − h(f′′ (h) + f′′ (−h)), = f′ (h) − f′ (−h) − h(f′′ (h) + f′′ (−h)). 3e′′′ (h) = f′′ (h) + f′′ (−h) − (f′′ (h) + f′′ (−h)) − h(f′′′ (h) − f′′′ (−h)), = −h(f′′′ (h) − f′′′ (−h)), e′′′ (h) = − h 3 ( f′′′ (h) − f′′′ (−h) ), e′′′ (h) = − 2h2 3 f′′′(h) − f′′′(−h) 2h . De los resultados anteriores se ve claramente que e(0) = e′(0) = e′′(0) = e′′′(0) = 0. Además, como f ∈ C4, entonces f′′′ ∈ C1. Por el teorema del valor medio, existe β ∈ [−h, h], β = αh, α ∈ [−1, 1], tal que f′′′(h) − f′′′(−h) 2h = f(4) (αh) , α ∈ [−1, 1]. Entonces, e′′′ (h) = − 2h2 3 f(4) (αh) , α ∈ [−1, 1].
  • 235. Héctor M. Mora E. Métodos Numéricos con Scilab 221 Sea g4(h) = f(4) (αh). e′′′ (h) = − 2h2 3 g4(h). e′′ (h) = Z h 0 e′′′ (t) dt + e′′ (0), e′′ (h) = − 2 3 Z h 0 t2 g4(t) dt. Como g4 es continua, t2 es integrable y no cambia de signo en [0, h], se puede aplicar el teorema del valor medio para integrales, e′′ (h) = − 2 3 g4(ξ4) Z h 0 t2 dt , ξ4 ∈ [0, h], e′′ (h) = − 2 9 h3 g4(ξ4). Sea g3(h) = g4(ξ4) = f(4) (θ3h) , −1 ≤ θ3 ≤ 1, entonces e′′ (h) = − 2 9 h3 g3(h). De manera semejante, e′ (h) = Z h 0 e′′ (t) dt + e′ (0), e′ (h) = − 2 9 Z h 0 t3 g3(t) dt, e′ (h) = − 2 9 g3(ξ3) Z h 0 t3 dt , ξ3 ∈ [0, h], e′ (h) = − 1 18 h4 g3(ξ3). Sea g2(h) = g3(ξ3) = f(4) (θ2h) , −1 ≤ θ2 ≤ 1, e′ (h) = − 1 18 h4 g2(h).
  • 236. 222 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN e(h) = Z h 0 e′ (t) dt + e(0), e(h) = − 1 18 Z h 0 t4 g2(t) dt, e(h) = − 1 18 g2(ξ2) Z h 0 t4 dt , ξ2 ∈ [0, h], e(h) = − 1 90 h5 g2(ξ2), e(h) = − h5 90 f(4) (θ1h) , −1 ≤ θ1 ≤ 1, e(h) = − h5 90 f(4) (z) , −h ≤ z ≤ h. Volviendo al intervalo [x0, x2], eloc = −h5 f(4)(z) 90 , z ∈ [x0, x2]. (6.8) La deducción del error global se hace de manera semejante al error global en la fórmula del trapecio. Sean n = 2k, M1 = min{f(4)(x) : x ∈ [a, b]}, M2 = max{f(4)(x) : x ∈ [a, b]}. eglob = Z b a f(x) dx − h 3 ( y0 + 4 k X j=1 y2j−1 + 2 k−1 X j=1 y2j + yn ) , = k X j=1 − h5 f(4)(zj) 90 , zj ∈ [x2j−2, x2j], = − h5 90 k X j=1 f(4) (zj) M1 ≤ f(4)(zj) ≤ M2 , ∀j kM1 ≤ k X j=1 f(4) (zj) ≤ kM2 , M1 ≤ 1 k k X j=1 f(4) (zj) ≤ M2 ,
  • 237. Héctor M. Mora E. Métodos Numéricos con Scilab 223 Entonces, existe ξ ∈ [a, b], tal que 1 k k X j=1 f(4) (zj) = f(4) (ξ), k X j=1 f(4) (zj) = k f(4) (ξ), k X j=1 f(4) (zj) = n 2 f(4) (ξ), k X j=1 f(4) (zj) = b − a 2h f(4) (ξ). Entonces, eglob = −h4 (b − a)f(4)(ξ) 180 , ξ ∈ [a, b]. (6.9) La fórmula de Simpson es exacta para polinomios de grado inferior o igual a 3. El error global es del orden de h4. Pasando de una interpolación lineal (fórmula del trapecio) a una interpo- lación cuadrática (fórmula de Simpson), el error global pasa de O(h2) a O(h4), es decir, hay una mejora notable. Se puede ver que al utilizar inter- polación cúbica se obtiene Z x3 x0 f(x)dx = h 8 (3y0 + 9y1 + 9y2 + 3y3) − 3 80 h5 f(4) (z) , z ∈ [x0, x3], llamada segunda fórmula de Simpson. Entonces, el error local es O(h5) y el error global es O(h4). La fórmula anterior es exacta para polinomios de grado inferior o igual a 3. En resumen, la interpolación cúbica no mejora la calidad de la aproximación numérica, luego es preferible utilizar la fórmula (6.7), más sencilla y de calidad semejante. Sin embargo, cuando se tiene una tabla fija con un número impar de subin- tervalos (n impar, número par de puntos), se puede aplicar la (primera) fórmula de Simpson sobre el intervalo [x0, xn−3] y la segunda fórmula sobre el intervalo [xn−3, xn].
  • 238. 224 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN 6.5. Otras fórmulas de Newton-Cotes Las fórmulas de Newton-Cotes se pueden clasificar en abiertas y cerradas. Las fórmulas del trapecio y de Simpson son casos particulares de las fórmulas cerradas. En ellas se aproxima la integral en el intervalo [x0, xm] usando el polinomio de interpolación, de grado menor o igual a m, construido a partir de los puntos (x0, y0), (x1, y1), ..., (xm−1, ym−1), (xm, ym), igualmente espaciados en x. Z xm x0 f(x)dx ≈ Z xm x0 pm(x)dx. La siguiente tabla muestra las más importantes. m Z xm x0 pm(x)dx error 1 h 2 (y0 + y1) − f′′(z) 12 h3 2 h 3 (y0 + 4y1 + y2) − f(4)(z) 90 h5 3 3h 8 (y0 + 3y1 + 3y2 + y3) − 3 f(4)(z) 80 h5 4 2h 45 (7y0 + 32y1 + 12y2 + 32y3 + 7y4) − 8 f(6)(z) 945 h7 En todos los casos, z ∈ [x0, xm]. 6.5.1. Fórmulas de Newton-Cotes abiertas En estas fórmulas el polinomio de interpolación se calcula sin utilizar los extremos del intervalo de integración, Z xm+2 x0 f(x)dx ≈ Z xm+2 x0 pm(x)dx, donde pm, polinomio de grado menor o igual a m, se construye utilizando los puntos (x1, y1), (x2, y2), ..., (xm, ym), (xm+1, ym+1), igualmente espaciados
  • 239. Héctor M. Mora E. Métodos Numéricos con Scilab 225 en x. m Z xm+2 x0 pm(x)dx error 0 2h y1 + f′′(z) 3 h3 1 3h 2 (y1 + y2) + 3 f′′(z) 4 h3 2 4h 3 (2y1 − y2 + 2y3) + 14 f(4)(z) 45 h5 3 5h 24 (11y1 + y2 + y3 + 11y4) + 95 f(4)(z) 144 h5 En todos los casos z ∈ [x0, xm+2]. Ejemplo 6.4. Z 0.8 0 ex dx ≈ 4 × 0.2 3 (2 e0.2 − e0.4 + 2 e0.6 ) = 1.22539158 . El valor exacto, con 8 cifras decimales, es 1.22554093, entonces el error es 0.00014935 . ✸ En general, las fórmulas cerradas son más precisas que las abiertas, en- tonces, siempre que se pueda, es preferible utilizar las fórmulas cerradas. Las fórmulas abiertas se usan cuando no se conoce el valor de la función f en los extremos del intervalo de integración; por ejemplo, en la solución numérica de algunas ecuaciones diferenciales ordinarias. 6.6. Cuadratura adaptativa Sea I = R b a f(x)dx e In la aproximación de I por un método fijo de Newton- Cotes (trapecio, Simpson,...) utilizando n subintervalos. La fórmula que rela- ciona I, In y el error global se puede expresar ası́: I = In + F(b − a)hp f(q) (ξ), para algún ξ ∈ [a, b], donde F, p y q dependen del método escogido; ξ depende del método, de la función f, de n y del intervalo. Entonces,
  • 240. 226 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN I = In + F(b − a)( b − a n )p f(q) (ξ), = In + F (b − a)p+1 np f(q) (ξ). Sea m = 2n, I = Im + F (b − a)p+1 np2p f(q) (ζ), Supongamos que f(q) (ξ) ≈ f(q) (ζ). Entonces, I ≈ In + 2p G ≈ In + en, I ≈ Im + G ≈ In + em, donde G = F (b−a)p+1 np2p f(q)(ζ), en y em son los errores. Se puede despejar G: em ≈ G = Im − In 2p − 1 (6.10) = Im − In 3 trapecio = Im − In 15 Simpson Con G se obtiene, supuestamente, una mejor aproximación de I: I ≈ Im + G. (6.11) Los datos para el proceso iterativo para cuadratura adaptativa son: el méto- do, f, a, b, n0, ε, nmax.
  • 241. Héctor M. Mora E. Métodos Numéricos con Scilab 227 Se empieza con un n = n0 (debe ser adecuado) y se obtiene In. A partir de ahı́ se empieza a duplicar el número de subintervalos. El cálculo de la nueva aproximación Im se hace sin repetir evaluaciones de la función f, ya que al duplicar el número de subintervalos los valores f(xi) de la etapa anterior hacen parte de los valores f(xj) de la etapa actual. Se calcula G aproximación de em, usando (6.10). Si |G| ≤ ε, entonces se supone que el error es suficientemente pequeño y se toma como valor final Im + G. En caso contrario, se continua duplicando el número de subintervalos. De todas maneras está previsto un múmero máximo de subintervalos nmax, ya que es posible que no se obtenga una aproximación del error suficientemente pequeña. Ejemplo 6.5. I = Z π 0 sen(x)dx, utilizando el método del trapecio (n0 = 1) y el de Simpson, (n0 = 2), ε = 10−8 Método del trapecio: n In G 1 0.0000000000000002 2 1.5707963267948966 0.5235987755982988 4 1.8961188979370398 0.1084408570473811 8 1.9742316019455508 0.0260375680028370 16 1.9935703437723395 0.0064462472755962 32 1.9983933609701441 0.0016076723992682 64 1.9995983886400375 0.0004016758899645 128 1.9998996001842038 0.0001004038480554 256 1.9999749002350531 0.0000251000169498 512 1.9999937250705768 0.0000062749451746 1024 1.9999984312683834 0.0000015687326022 2048 1.9999996078171378 0.0000003921829181 4096 1.9999999019542845 0.0000000980457155 8192 1.9999999754885744 0.0000000245114300 16384 1.9999999938721373 0.0000000061278543 I ≈ 1.9999999938721373 + 0.0000000061278543 = 1.9999999999999916 .
  • 242. 228 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN Método de Simpson: n In G 2 2.0943951023931953 4 2.0045597549844207 -0.0059890231605850 8 2.0002691699483881 -0.0002860390024022 16 2.0000165910479355 -0.0000168385933635 32 2.0000010333694127 -0.0000010371785682 64 2.0000000645300013 -0.0000000645892941 128 2.0000000040322572 -0.0000000040331829 I ≈ 2.0000000040322572 - 0.0000000040331829 = 1.9999999999990743 . 6.7. Cuadratura de Gauss-Legendre En las diferentes fórmulas de Newton-Cotes, los valores xi deben estar igual- mente espaciados. Esto se presenta con frecuencia cuando se dispone de una tabla de valores (xi, f(xi)). En la cuadratura de Gauss se calcula la integral en un intervalo fijo [−1, 1] mediante valores precisos pero no igualmente es- paciados. Es decir, no se debe disponer de una tabla de valores, sino que debe ser posible evaluar la función en valores especı́ficos. La fórmula de cuadratura de Gauss tiene la forma Z 1 −1 f(x) dx ≈ n X i=1 wi f(xi). (6.12) Los valores wi se llaman los pesos o ponderaciones y los xi son las abscisas. Si se desea integrar en otro intervalo, Z b a ϕ(ξ) dξ es necesario hacer un cambio de variable, t = 2 b − a (ξ − a) − 1 , ξ = b − a 2 (t + 1) + a , dξ = b − a 2 dt
  • 243. Héctor M. Mora E. Métodos Numéricos con Scilab 229 Z b a ϕ(ξ) dξ = b − a 2 Z 1 −1 ϕ( b − a 2 (t + 1) + a) dt, Z b a ϕ(ξ) dξ ≈ b − a 2 n X i=1 wi ϕ( b − a 2 (xi + 1) + a), Z b a ϕ(ξ) dξ ≈ b − a 2 n X i=1 wi ϕ(ξi), (6.13) ξi = b − a 2 (xi + 1) + a. (6.14) En la cuadratura de Gauss se desea que la fórmula (6.12) sea exacta para los polinomios de grado menor o igual que m = mn, y se desea que este valor mn sea lo más grande posible. En particular, Z 1 −1 f(x) dx = n X i=1 wi f(xi) , si f(x) = 1, x, x2 , ..., xmn . La anterior igualdad da lugar a mn + 1 ecuaciones con 2n incógnitas (los wi y los xi). De donde mn = 2n − 1, es decir, la fórmula (6.12) debe ser exacta para polinomios de grado menor o igual a 2n − 1. Recordemos que Z 1 −1 xk dx =      0 si k es impar, 2 k + 1 si k es par. Para n = 1, se debe cumplir w1 = Z 1 −1 1 dx = 2, w1x1 = Z 1 −1 x dx = 0. Se deduce inmediatamente que w1 = 2 , x1 = 0. Z 1 −1 f(x) dx ≈ 2f(0). (6.15)
  • 244. 230 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN Para n ≥ 2, se puede suponer, sin perder generalidad, que hay simetrı́a en los valores xi y en los pesos wi. Más especı́ficamente, se puede suponer que: x1 x2 ... xn , xi = −xn+1−i , wi = wn+1−i . Para n = 2, w1 + w2 = Z 1 −1 1 dx = 2, w1x1 + w2x2 = Z 1 −1 x dx = 0, w1x2 1 + w2x2 2 = Z 1 −1 x2 dx = 2 3 , w1x3 1 + w2x3 2 = Z 1 −1 x3 dx = 0. Por suposiciones de simetrı́a, x1 0 x2 , x1 = −x2 , w1 = w2. Entonces, 2w1 = 2, 2w1x2 1 = 2 3 . Finalmente, w1 = 1, x1 = − r 1 3 , w2 = 1, x2 = r 1 3 . Z 1 −1 f(x) dx ≈ f − p 1/3 + f p 1/3 . (6.16)
  • 245. Héctor M. Mora E. Métodos Numéricos con Scilab 231 Para n = 3, w1 + w2 + w3 = 2, w1x1 + w2x2 + w3x3 = 0, w1x2 1 + w2x2 2 + w3x2 3 = 2 3 , w1x3 1 + w2x3 2 + w3x3 3 = 0, w1x4 1 + w2x4 2 + w3x4 3 = 2 5 , w1x5 1 + w2x5 2 + w3x5 3 = 0. Por suposiciones de simetrı́a, x1 0 = x2 x3 , x1 = −x3 , w1 = w3. Entonces, 2w1 + w2 = 2, 2w1x2 1 = 2 3 , 2w1x4 1 = 2 5 . Finalmente, w1 = 5 9 , x1 = − r 3 5 , w2 = 8 9 , x2 = 0, w3 = 5 9 , x3 = r 3 5 . Z 1 −1 f(x) dx ≈ 5 9 f − p 3/5 + 8 9 f(0) + 5 9 f p 3/5 . (6.17) La siguiente tabla contiene los valores wi, xi, para valores de n menores o iguales a 6.
  • 246. 232 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN n wi xi 1 2 0 2 1 ±0.577350269189626 3 0.888888888888889 0 0.555555555555556 ±0.774596669241483 4 0.339981043584856 ±0.652145154862546 0.861136311594053 ±0.347854845137454 5 0.568888888888889 0 0.478628670499366 ±0.538469310105683 0.236926885056189 ±0.906179845938664 6 0.467913934572691 ±0.238619186083197 0.360761573048139 ±0.661209386466265 0.171324492379170 ±0.932469514203152 Se pueden encontrar tablas más completas en [Fro70] o en [AbS65]. Ejemplo 6.6. Calcular una aproximación de Z 0.8 0.2 ex dx por cuadratura de Gauss con n = 3. ξ1 = 0.8 − 0.2 2 (−0.774596669241483 + 1) + 0.2 = 0.26762099922756 ξ2 = 0.8 − 0.2 2 (0 + 1) + 0.2 = 0.5 ξ3 = 0.8 − 0.2 2 (0.774596669241483 + 1) + 0.2 = 0.73237900077244 Z 0.8 0.2 ex dx ≈ 0.8 − 0.2 2 5 9 eξ1 + 8 9 eξ2 + 5 9 eξ3 ≈ 1.00413814737559 El valor exacto es e0.8 − e0.2 = 1.00413817033230, entonces el error es 0.00000002295671 ≈ 2.3 · 10−8. Si se emplea la fórmula de Simpson, que también utiliza tres evaluaciones de la función, se tiene Z 0.8 0.2 ex dx ≈ 0.3 3 e0.2 + 4 e0.5 + e0.8 = 1.00418287694532 El error es −0.00004470661302 ≈ 4.5 · 10−5 . ✸
  • 247. Héctor M. Mora E. Métodos Numéricos con Scilab 233 La fórmula del error para (6.12) es: en = 22n+1(n!)4 (2n + 1)((2n)!)3 f(2n) (ξ) , −1 ξ 1 . (6.18) Para (6.13), el error está dado por: en = (b − a)2n+1(n!)4 (2n + 1)((2n)!)3 f(2n) (ξ) , a ξ b . (6.19) Comparemos el método de Simpson y la fórmula de cuadratura de Gauss con n = 3, para integrar en el intervalo [a, b], con h = (b − a)/2. En los dos casos es necesario evaluar tres veces la función. eSimpson = − h5 90 f(4) (z) , eGauss3 = (2h)7(3!)4 7(6!)3 f(6) (ξ) = h7 15750 f(6) (ξ). Se observa que mientras que la fórmula de Simpson es exacta para poli- nomios de grado menor o igual a 3, la fórmula de Gauss es exacta hasta para polinomios de grado 5. Sea 0 h 1. No solamente h7 h5, sino que el coeficiente 1/15750 es mucho menor que 1/90. En el ejemplo anterior, h = 0.3, y tanto f(4) como f(6) varı́an en el intervalo [1.22, 2.23 ]. eSimpson = −2.7 · 10−5 f(4) (z) , eGauss3 = 1.39 · 10−8 f(6) (ξ) . 6.7.1. Polinomios de Legendre Las fórmulas de cuadratura vistas son las fórmulas de Gauss-Legendre. En el- las están involucrados los polinomios ortogonales de Legendre. También hay cuadratura de Gauss-Laguerre, de Gauss-Hermite y de Gauss-Chebyshev, relacionadas con los polinomios de Laguerre, de Hermite y de Chebyshev. Hay varias maneras de definir los polinomios de Legendre; una de ellas es: P0(x) = 1, (6.20) Pn(x) = 1 2n n! dn dxn (x2 − 1)n . (6.21)
  • 248. 234 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN Por ejemplo, P0(x) = 1, P1(x) = x, P2(x) = 1 2 (3x2 − 1), P3(x) = 1 2 (5x3 − x), P4(x) = 1 8 (35x4 − 30x2 + 3). También existe una expresión recursiva: P0(x) = 1, (6.22) P1(x) = x, (6.23) Pn+1(x) = 2n + 1 n + 1 x Pn(x) − n n + 1 Pn−1(x) . (6.24) Algunas de las propiedades de los polinomios de Legendre son: • Z 1 −1 xk Pn(x) dx = 0 , k = 0, 1, 2, ..., n − 1, (6.25) • Z 1 −1 Pm(x)Pn(x) dx = 0 , m 6= n, (6.26) • Z 1 −1 (Pn(x))2 dx = 2 2n + 1 · (6.27) Las abscisas de las fórmulas de cuadratura de Gauss-Legendre son exacta- mente las raı́ces de Pn(x). Además, • wi = 1 P′ n(xi) Z 1 −1 Pn(x) x − xi dx, (6.28) • wi = 1 (P′ n(xi))2 2 1 − x2 i · (6.29) 6.7.2. Cuadratura de Gauss-Laguerre y Gauss-Hermite La cuadratura de Gauss-Laguerre usa los polinomios de Laguerre para cal- cular una aproximación de Z ∞ 0 f(x) dx.
  • 249. Héctor M. Mora E. Métodos Numéricos con Scilab 235 Las abcisas son las raı́ces de los polinomios de Laguerre. Las ponderaciones están relacionadas con estos polinomios. Las fórmulas se pueden presentar de dos maneras: Z ∞ 0 f(x) dx ≈ n X i=1 wiexi f(xi), (6.30) Z ∞ 0 e−x g(x) dx ≈ n X i=1 wig(xi). (6.31) En [AbS65] hay tablas con valores de xi y wi para valores de n ≤ 15. Por ejemplo, para n = 8: xi wi 0.170279632305 3.69188589342e-1 0.903701776799 4.18786780814e-1 2.251086629866 1.75794986637e-1 4.266700170288 3.33434922612e-2 7.045905402393 2.79453623523e-3 10.758516010181 9.07650877336e-5 15.740678641278 8.48574671627e-7 22.863131736889 1.04800117487e-9 La cuadratura de Gauss-Hermite usa los polinomios de Hermite para calcular una aproximación de Z ∞ −∞ f(x) dx. Las abcisas son las raı́ces de los polinomios de Hermite. Las ponderaciones están relacionadas con estos polinomios. Las fórmulas se pueden presentar de dos maneras: Z ∞ −∞ f(x) dx ≈ n X i=1 wiex2 i f(xi), (6.32) Z ∞ −∞ e−x2 g(x) dx ≈ n X i=1 wig(xi). (6.33) En [AbS65] hay tablas con valores de xi y wi para valores de n ≤ 20.
  • 250. 236 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN 6.8. Derivación numérica Dados los puntos (x0, y0), (x1, y1), ..., (xn, yn) igualmente espaciados en x, o sea, xi = x0 + ih, se desea tener aproximaciones de f′(xi) y f′′(xi). Como se vio anteriormente, (5.6), f(x) = pn(x) + (x − x0)(x − x1) · · · (x − xn)f(n+1) (ξ)/(n + 1)!. Sea Φ(x) = (x − x0)(x − x1) · · · (x − xn). Como ξ depende de x, se puede considerar F(x) = f(n+1)(ξ(x))/(n + 1)!. Entonces, f(x) = pn(x) + Φ(x)F(x) f′ (x) = p′ n(x) + Φ′ (x)F(x) + Φ(x)F′ (x), f′ (xi) = p′ n(xi) + Φ′ (xi)F(xi) + Φ(xi)F′ (xi), f′ (xi) = p′ n(xi) + Φ′ (xi)F(xi). Para n = 1 p1(x) = y0 + (y1 − y0) h (x − x0) , p′ 1(x) = (y1 − y0) h · Φ(x) = (x − x0)(x − x1) , Φ′ (x) = 2x − 2x0 − h Entonces, f′ (x0) = (y1 − y0) h + (2x0 − 2x0 − h)F(x0) = (y1 − y0) h − h 2 f′′ (ξ(x0)), f′ (x1) = (y1 − y0) h + (2x1 − 2x0 − h)F(x1) = (y1 − y0) h + h 2 f′′ (ξ(x1)). En general, f′ (xi) = (yi+1 − yi) h − h 2 f′′ (ξ), ξ ∈ [xi, xi+1] (6.34) f′ (xi) = (yi − yi−1) h + h 2 f′′ (ζ), ζ ∈ [xi−1, xi] (6.35) El primer término después del signo igual corresponde al valor aproximado. El segundo término es el error. Se acostumbra decir simplemente que el error es del orden de h. Esto se escribe f′ (xi) = (yi+1 − yi) h + O(h), f′ (xi) = (yi − yi−1) h + O(h).
  • 251. Héctor M. Mora E. Métodos Numéricos con Scilab 237 Para n = 2, sea s = (x − x0)/h, p2(x) = y0 + s∆f0 + s(s − 1) 2 ∆2f0 2 , p2(x) = y0 + x − x0 h ∆f0 + x − x0 h x − x0 − h h ∆2f0 2 , p′ 2(x) = ∆f0 h + 2x − 2x0 − h h2 ∆2f0 2 , p′ 2(x1) = ∆f0 h + ∆2f0 2h = · · · p′ 2(x1) = y2 − y0 2h · Φ(x) = (x − x0)(x − x0 − h)(x − x0 − 2h), Φ(x) = (x − x0)3 − 3h(x − x0)2 + 2h2 (x − x0), Φ′ (x) = 3(x − x0)2 − 6h(x − x0) + 2h2 , Φ′ (x1) = 3h2 − 6h2 + 2h2 = −h2 . Entonces, f′ (x1) = y2 − y0 2h − h2 6 f′′′ (ξ) , ξ ∈ [x0, x2]. De manera general, f′ (xi) = yi+1 − yi−1 2h − h2 6 f′′′ (ξ) , ξ ∈ [xi−1, xi+1]. (6.36) O también, f′ (xi) = yi+1 − yi−1 2h + O(h2 ). (6.37) En [YoG72], pág. 357, hay una tabla con varias fórmulas para diferenciación numérica. Para la segunda derivada, una fórmula empleada con frecuencia es: f′′ (xi) = yi+1 − 2yi + yi−1 h2 − h2 12 f(4) (ξ) , ξ ∈ [xi−1, xi+1]. (6.38) O también, f′′ (xi) = yi+1 − 2yi + yi−1 h2 + O(h2 ). (6.39)
  • 252. 238 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN La deducción de las fórmulas de derivación numérica se hizo a partir de una tabla de valores (xi, yi), pero para el uso de estas solamente se requiere conocer o poder evaluar f en los puntos necesarios. Por esta razón, algunas veces las fórmulas aparecen directamente en función de h: f′ (x) = f(x + h) − f(x) h + O(h), (6.40) f′ (x) = f(x) − f(x − h) h + O(h), (6.41) f′ (x) = f(x + h) − f(x − h) 2h + O(h2 ), (6.42) f′′ (x) = f(x + h) − 2f(x) + f(x − h) h2 + O(h2 ). (6.43) Ejemplo 6.7. Dada f(x) = √ x, evaluar aproximadamente f′(4) y f′′(4), utilizando h = 0.2. f′ (4) ≈ 2.0494 − 2 0.2 = 0.2470 f′ (4) ≈ 2 − 1.9494 0.2 = 0.2532 f′ (4) ≈ 2.0494 − 1.9494 2 × 0.2 = 0.2501 f′′ (4) ≈ 2.0494 − 2 × 2 + 1.9494 0.22 = −0.0313 . ✸ El error de las dos primeras aproximaciones no es el mismo, pero es del mismo orden de magnitud O(h). La tercera aproximación es mejor que las anteriores; su error es del orden de O(h2). Los valores exactos son f′(4) = 0.25, f′′(4) = −0.03125. 6.8.1. Derivadas parciales Sea f : Rn → R con derivadas dobles continuas. La fórmula (6.42) se puede generalizar a ∂f ∂xi (x̄) = 1 2h f(x̄1, ..., x̄i−1, x̄i + h, x̄i+1, ..., x̄n) − f(x̄1, ..., x̄i−1, x̄i − h, x̄i+1, ..., x̄n) + O(h2 ) (6.44)
  • 253. Héctor M. Mora E. Métodos Numéricos con Scilab 239 También se puede escribir de manera más compacta ∂f ∂xi (x̄) = f(x̄ + hei) − f(x̄ − hei) 2h + O(h2 ) (6.45) donde ei = (0, ..., 0,1, 0, ..., 0) ∈ Rn . La fórmula (6.43) se puede generalizar a ∂2f ∂x2 i (x̄) = f(x̄ + hei) − 2f(x̄) + f(x̄ − hei) h2 + O(h2 ) (6.46) Ejemplo 6.8. Sean f(x1, x2) = ex1 sen(x2). Obtenga una aproximación de ∂f ∂x2 (2, 3) y de ∂2f ∂x2 1 (2, 3) con h = 0.2 . ∂f ∂x2 (2, 3) ≈ f(2, 3.2) − f(2, 2.8) 0.4 = −7.2664401 ∂2f ∂x2 1 (2, 3) ≈ f(2.2, 3) − 2f(2, 3) + f(1.8, 3) 0.04 = 1.0462241 6.8.2. En Scilab Sea f : R → R derivable. La aproximación de la derivada se obtiene por medio de derivative(f, x). Si en un archivo se define la función function y = func246(x) y = sqrt(x) endfunction y se carga este archivo en Scilab, entonces la derivada en x = 4 se obtiene mediante der = derivative(func246, 4)
  • 254. 240 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN Si se quiere obtener también la segunda derivada: [der, der2] = derivative(func246, 4) Sea f : Rn → R, por ejemplo, la definida en la siguiente función function y = func245( x ) y = exp(x(1)) * sin(x(2)) endfunction Si se carga en Scilab el archivo donde está esta función, entonces para un vector columna x, la función derivative produce un vector fila con el gra- diente. x = [2 3]’ g = derivative(func245, x) Para obtener, adicionalmente, la matriz hessiana: x = [2 3]’ [g, A] = derivative(func245, x, H_form =’blockmat’) Sea f : Rn → Rm, por ejemplo, la definida en la siguiente función function fx = func247( x ) fx = zeros(3,1) fx(1) = exp(x(1)) * sin(x(2)) fx(2) = 3*x(1) + 4*x(2) fx(3) = x(1)*x(1) + 5*x(1)*x(2) + 3*x(2)*x(2) endfunction Si se carga en Scilab el archivo donde está esta función, entonces para un vector columna x, la función derivative produce una matriz m × n, la matriz jacobiana. x = [2 3]’ J = derivative(func247, x)
  • 255. Héctor M. Mora E. Métodos Numéricos con Scilab 241 Ejercicios 6.1 Calcule Z 1 0.2 ex dx utilizando la fórmula del trapecio y de Simpson, variando el número de subintervalos; también por medio de la cuadratura de Gauss variando el número de puntos. Calcule los errores. Compare. 6.2 Calcule Z 1 0 e−x2 dx utilizando la fórmula de Simpson. Utilice seis cifras decimales. Tome los valores n = 2, 4, 8, 16, 32... hasta que no haya variación. 6.3 Haga un programa para calcular R b a f(x)dx, siguiendo el esquema del ejercicio anterior. 6.4 Observe, por ejemplo, que para n = 2 se evalúa la función en a, (a + b)/2, b. Para n = 4 se evalúa la función en a, a + (b − a)/4, (a + b)/2, a + 3(b − a)/4, b. Haga el programa eficiente para que no evalúe la función dos veces en el mismo punto. 6.5 Haga un programa para calcular R b a f(x)dx , partiendo [a, b] en subin- tervalos y utilizando en cada subintervalo cuadratura de Gauss. 6.6 Considere los puntos (0.05, 2.0513), (0.10, 2.1052), (0.15, 2.1618), (0.20, 2.2214), (0.25, 2.2840), (0.30, 2.3499), (0.35, 2.4191), (0.40, 2.4918). Calcule de la mejor manera posible Z 0.35 0.05 f(x)dx, Z 0.40 0.05 f(x)dx, Z 0.45 0.05 f(x)dx.
  • 256. 242 CAPÍTULO 6. INTEGRACIÓN Y DIFERENCIACIÓN 6.7 Considere los mismos puntos del ejercicio anterior. Calcule una aprox- imación de f′(0.25), f′(0.225), f′′(0.30). 6.8 Combine integración numérica y solución de ecuaciones para resolver Z x 0 e−t2 dt = 0.1.
  • 257. Capı́tulo 7 Ecuaciones diferenciales ordinarias Este capı́tulo se refiere únicamente a ecuaciones diferenciales ordinarias. Las primeras secciones tratan las ecuaciones diferenciales ordinarias de primer orden con condiciones iniciales: y′ = f(x, y) para a ≤ x ≤ b, y(x0) = y0. (7.1) Frecuentemente, la condición inicial está dada sobre el extremo izquierdo del intervalo, o sea, a = x0. Un ejemplo es: y′ = xy 1 + x2 + y2 + 3x2 , x ∈ [2, 4], y(2) = 5. Ciertos temas que revisten gran importancia como la existencia de la solu- ción, unicidad, estabilidad, no serán tratados en este texto. El lector de- berá remitirse a un libro de ecuaciones diferenciales. Aquı́ se supondrá que las funciones satisfacen todas las condiciones necesarias (continuidad, difer- enciabilidad, condición de Lipschitz... ) para que la solución exista, sea única ... Como en todos los otros casos de métodos numéricos, la primera opción para resolver una ecuación diferencial es buscar la solución analı́tica. Si esto no se logra, entonces se busca la solución numérica, que consiste en definir puntos en el intervalo [a, b], x0 = a x1 x2 · · · xn−1 xn = b y encontrar 243
  • 258. 244 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS valores aproximados y1, y2, ..., yn tales que yi ≈ y(xi), i = 1, ..., n, En muchos casos los valores xi están igualmente espaciados, o sea, xi = a + ih, i = 0, 1, ..., n, con h = b − a n . En varios de los ejemplos siguientes se aplicarán los métodos numéricos para ecuaciones diferenciales con solución analı́tica conocida. Esto se hace simplemente para comparar la solución numérica con la solución exacta. 7.0.3. En Scilab Consideremos la siguiente ecuación diferencial: y′ = x + y x2 + y2 + 4 + cos(x) , y(2) = 3. Antes de utilizar la función ode, es necesario crear en Scilab la función f y cargarla. La función ode evalúa aproximaciones del valor de y en valores del tercer parámetro, un vector fila o columna. El resultado es un vector fila con las aproximaciones de la solución en los valores deseados (tercer parámetro). Después de definir y cargar function Dy = func158(x, y) Dy = ( x + y )/( x*x + y*y ) + 4 + cos(x) endfunction se obtiene la solución aproximada mediante x0 = 2 y0 = 3 t = 2:0.05:3; yt = ode(y0, x0, t, func158) Ahora es posible graficar el resultado mediante plot2d(t, yt)
  • 259. Héctor M. Mora E. Métodos Numéricos con Scilab 245 7.1. Método de Euler Se aplica a una ecuación diferencial como en (7.1), utilizando puntos igual- mente espaciados. Su deducción es muy sencilla. y′ (x0) ≈ y(x0 + h) − y(x0) h . Por otro lado , y′ (x0) = f(x0, y0). Entonces, y(x0 + h) ≈ y0 + hf(x0, y0). Si denotamos por y1 la aproximación de y(x0 + h), entonces la fórmula del método de Euler es justamente y1 = y0 + hf(x0, y0). Aplicando varias veces el mismo tipo de aproximaciones, se tiene la fórmula general: yi+1 = yi + hf(xi, yi). (7.2) Gráficamente, esto significa que y(xi +h) = y(xi+1) se aproxima por el valor obtenido a partir de la recta tangente a la curva en el punto (xi, yi). El valor y1 es una aproximación de y(x1). A partir de y1, no de y(x1), se hace una aproximación de y′(x1). Es decir, al suponer que y2 es una apro- ximación de y(x2), se han hecho dos aproximaciones consecutivas y el error pudo haberse acumulado. De manera análoga, para decir que y3 es una aproximación de y(x3), se han hecho tres aproximaciones, una sobre otra. Sea ϕ(t, h) definida para t1 ≤ t ≤ t2 y para valores pequeños de h. Se dice que ϕ(t, h) = O(hp ) si para valores pequeños de h existe una constante c tal que |ϕ(t, h)| ≤ chp , ∀t ∈ [t1, t2].
  • 260. 246 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS y0 = y(x0) x0 x0 + h y(x0 + h) (x1, y1) b b Figura 7.1. Método de Euler También se acostumbra decir que ϕ(t, h) ≈ chp . El error local tiene que ver con el error cometido para calcular y(xi+1) suponiendo que yi es un valor exacto, es decir, yi = y(xi). El error global es el erro resultante al considerar yn como aproximación de y(xn) (n indica el número de intervalos). Los resultados sobre el error en el método de Euler son: y1 = y(x1) + O(h2 ) (7.3) yn = y(xn) + O(h). (7.4) Ejemplo 7.1. Resolver, por el método de Euler, la ecuación diferencial y′ = 2x2 − 4x + y y(1) = 0.7182818 en el intervalo [1, 3], con h = 0.25. La primera observación es que esta ecuación diferencial se puede resolver analı́ticamente. Su solución es y = ex − 2x2. Luego no deberı́a ser resuelta numéricamente. Sin embargo, el hecho de conocer su solución exacta permite
  • 261. Héctor M. Mora E. Métodos Numéricos con Scilab 247 1 2 3 −1 0 1 2 b b b b b b b b b Figura 7.2. Ejemplo del método de Euler ver el error cometido en el método numérico. y1 = y0 + hf(x0, y0) = 0.7182818 + 0.25f(1, 0.7182818) = 0.7182818 + 0.25(0.7182818 + 2 × 12 − 4 × 1) = 0.3978523 y2 = y1 + hf(x1, y1) = 0.3978523 + 0.25f(1.25, 0.3978523) = 0.3978523 + 0.25(0.3978523 + 2 × 1.252 − 4 × 1.25) = 0.0285654 y3 = ... xi ỹ(xi) y(xi) 1.00 0.7182818 0.7182818 1.25 0.3978523 0.3653430 1.50 0.0285654 -0.0183109 1.75 -0.3392933 -0.3703973 2.00 -0.6428666 -0.6109439 2.25 -0.8035833 -0.6372642 2.50 -0.7232291 -0.3175060 2.75 -0.2790364 0.5176319 3.00 0.6824545 2.0855369 En los primeros valores se observa que el error es muy pequeño. A partir de x = 2 se empiezan a distanciar los valores ỹ(x) y y(x). Si se trabaja con h =
  • 262. 248 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS 0.1 se obtiene ỹ(3) = 1.4327409; con h = 0.01 se obtiene ỹ(3) = 2.0133187; con h = 0.001 se obtiene ỹ(3) = 2.0782381. ✸ El método de Euler se puede escribir en Scilab mediante: function [Y, X] = Euler(f, x0, y0, xf, n) // Metodo de Euler para la ecuacion diferencial // // y’ = f(x,y) // y(x0) = y0 // en intervalo [x0, xf] // // n = numero de subintervalos // Y, X seran vectores fila de n+1 elementos // Y contendra las aproximaciones de // y(x0) y(x0+h) y(x0+2h) ... y(xf) // con h = (xf-x0)/n // X contendra los valores x0 x0+h x0+2h ... xf h = (xf-x0)/n X = zeros(1,n+1) Y = X X(1) = x0 Y(1) = y0 xi = x0 yi = y0 for i=1:n yi = yi + h*f(xi,yi) xi = xi+h Y(i+1) = yi X(i+1) = xi end endfunction 7.2. Método de Heun Este método es una modificación o mejora del método de Euler y se utiliza para el mismo tipo de problemas. También se conoce con el nombre de
  • 263. Héctor M. Mora E. Métodos Numéricos con Scilab 249 y0 = y(x0) x0 x0 + h y(x0 + h) b b (x1, y1) Figura 7.3. Método de Heun método del trapecio. En el método de Euler se utiliza la aproximación y(x + h) = y(x) + hy′ (x). En el método de Heun se busca cambiar, en la aproximación anterior, la derivada en x por un promedio de la derivada en x y en x + h. y(x + h) ≈ y(x) + h y′(x) + y′(x + h) 2 o sea, y(x + h) ≈ y(x) + h f(x, y(x)) + f(x + h, y(x + h)) 2 · La fórmula anterior no se puede aplicar. Sirve para aproximar y(x + h) pero utiliza y(x + h). Entonces, en el lado derecho, se reemplaza y(x + h) por la aproximación dada por el método de Euler y(x + h) ≈ y(x) + h f(x, y(x)) + f(x + h, y(x) + hf(x, y(x))) 2 · La anterior aproximación suele escribirse de la siguiente manera: K1 = hf(xi, yi) K2 = hf(xi + h, yi + K1) yi+1 = yi + 1 2 (K1 + K2). (7.5)
  • 264. 250 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Ejemplo 7.2. Resolver, por el método de Heun, la ecuación diferencial y′ = 2x2 − 4x + y y(1) = 0.7182818 en el intervalo [1, 3], con h = 0.25. K1 = hf(x0, y0) = 0.25f(1, 0.7182818) = −0.320430 K2 = hf(x0 + h, y0 + K1) = 0.25f(1.25, 0.397852) = −0.369287 y1 = y0 + (K1 + K2)/2 = 0.3734236 K1 = hf(x1, y1) = 0.25f(1.25, 0.3734236) = −0.375394 K2 = hf(x1 + h, y1 + K1) = 0.25f(1.500000, −0.001971) = −0.375493 y2 = y1 + (K1 + K2)/2 = −0.0020198 K1 = ...
  • 265. Héctor M. Mora E. Métodos Numéricos con Scilab 251 1 2 3 −1 0 1 2 b b b b b b b b b Figura 7.4. Ejemplo del método de Heun xi ỹ(xi) y(xi) 1.00 0.7182818 0.7182818 1.25 0.3734236 0.3653430 1.50 -0.0020198 -0.0183109 1.75 -0.3463378 -0.3703973 2.00 -0.5804641 -0.6109439 2.25 -0.6030946 -0.6372642 2.50 -0.2844337 -0.3175060 2.75 0.5418193 0.5176319 3.00 2.0887372 2.0855369 En este ejemplo los resultados son mucho mejores. Por un lado, el método es mejor, pero, por otro, dichos resultados son apenas naturales pues hubo que evaluar 16 veces la función f(x, y), dos veces en cada iteración. En el ejemplo del método de Euler hubo simplemente 8 evaluaciones de la función f(x, y). Al aplicar el método de Heun con h = 0.5, es necesario evaluar 8 veces la función, se obtiene ỹ(3) = 2.1488885, resultado no tan bueno como 2.0887372, pero netamente mejor que el obtenido por el método de Euler. Si se trabaja con h = 0.1, se obtiene ỹ(3) = 2.0841331; con h = 0.01, se obtiene ỹ(3) = 2.0855081; con h = 0.001, se obtiene ỹ(3) = 2.0855366. ✸ 7.3. Método del punto medio Este método es también una modificación o mejora del método de Euler y se utiliza para el mismo tipo de problemas. En el método de Euler se utiliza
  • 266. 252 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS y0 = y(x0) x0 x0 + h y(x0 + h) x0 + h/2 b b (x1, y1) Figura 7.5. Método del punto medio la aproximación y(x + h) = y(x) + hy′ (x). En el método del punto medio se busca cambiar, en la aproximación anterior, la derivada en x por la derivada en el punto medio entre x y x + h, o sea, por la derivada en x + h/2. y(x + h) ≈ y(x) + h y′ (x + h/2) o sea, y(x + h) ≈ y(x) + h f( x + h/2, y(x + h/2) )· Como no se conoce y(x + h/2), se reemplaza por la aproximación que darı́a el método de Euler con un paso de h/2. y(x + h/2) ≈ y(x) + h 2 f(x, y) y(x + h) ≈ y(x) + h f(x + h/2, y(x) + h 2 f(x, y))· La anterior aproximación suele escribirse de la siguiente manera: K1 = hf(xi, yi) K2 = hf(xi + h/2, yi + K1/2) yi+1 = yi + K2. (7.6)
  • 267. Héctor M. Mora E. Métodos Numéricos con Scilab 253 Ejemplo 7.3. Resolver, por el método del punto medio, la ecuación difer- encial y′ = 2x2 − 4x + y y(1) = 0.7182818 en el intervalo [1, 3], con h = 0.25. K1 = hf(x0, y0) = 0.25f(1, 0.7182818) = −0.320430 K2 = hf(x0 + h/2, y0 + K1/2) = 0.25f(1.125, 0.558067) = −0.352671 y1 = y0 + K2 = 0.3656111 K1 = hf(x1, y1) = 0.25f(1.25, 0.3656111) = −0.377347 K2 = hf(x1 + h/2, y1 + K1/2) = 0.25f(1.375, 0.176937) = −0.385453 y2 = y1 + K2 = −0.0198420 K1 = ...
  • 268. 254 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS 1 2 3 −1 0 1 2 b b b b b b b b b Figura 7.6. Ejemplo del método del punto medio xi ỹ(xi) y(xi) 1.00 0.7182818 0.7182818 1.25 0.3656111 0.3653430 1.50 -0.0198420 -0.0183109 1.75 -0.3769851 -0.3703973 2.00 -0.6275434 -0.6109439 2.25 -0.6712275 -0.6372642 2.50 -0.3795415 -0.3175060 2.75 0.4121500 0.5176319 3.00 1.9147859 2.0855369 También, en este ejemplo, los resultados son mucho mejores. De nuevo hubo que evaluar 16 veces la función f(x, y), dos veces en cada iteración. Al aplicar el método del punto medio con h = 0.5, es necesario evaluar 8 veces la fun- ción, se obtiene ỹ(3) = 1.5515985, resultado no tan bueno como 2.0887372, pero netamente mejor que el obtenido por el método de Euler. Si se tra- baja con h = 0.1 se obtiene ỹ(3) = 2.0538177; con h = 0.01 se obtiene ỹ(3) = 2.0851903; con h = 0.001 se obtiene ỹ(3) = 2.0855334. ✸ 7.4. Método de Runge-Kutta El método de Runge-Kutta RK, o, más bien, los métodos de Runge-Kutta se aplican a (7.1) utilizando puntos igualmente espaciados. La forma general
  • 269. Héctor M. Mora E. Métodos Numéricos con Scilab 255 del método RK de orden n es la siguiente: K1 = hf(xi, yi) K2 = hf(xi + α2h, yi + β21K1) K3 = hf(xi + α3h, yi + β31K1 + β32K2) . . . Kn = hf(xi + αnh, yi + βn1K1 + βn2K2 + · · · + βn,n−1Kn−1) yi+1 = yi + R1K1 + R2K2 + ... + RnKn. (7.7) Se ve claramente que los métodos vistos son de RK: el método de Euler es uno de RK de orden 1, el método de Heun y el del punto medio son métodos de RK de orden 2. Método de Euler: K1 = hf(xi, yi) (7.8) yi+1 = yi + K1. Método de Heun: K1 = hf(xi, yi) K2 = hf(xi + h, yi + K1) (7.9) yi+1 = yi + 1 2 K1 + 1 2 K2. Método del punto medio: K1 = hf(xi, yi) K2 = hf(xi + 1 2 h, yi + 1 2 K1) (7.10) yi+1 = yi + 0K1 + K2. Un método muy popular es el siguiente método RK de orden 4: K1 = hf(xi, yi) K2 = hf(xi + h/2, yi + K1/2) K3 = hf(xi + h/2, yi + K2/2) K4 = hf(xi + h, yi + K3) yi+1 = yi + (K1 + 2K2 + 2K3 + K4)/6. (7.11)
  • 270. 256 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Ejemplo 7.4. Resolver, por el método RK4 anterior, la ecuación diferencial y′ = 2x2 − 4x + y y(1) = 0.7182818 en el intervalo [1, 3], con h = 0.25. K1 = hf(x0, y0) = 0.25f(1, 0.7182818) = −0.320430 K2 = hf(x0 + h/2, y0 + K1/2) = 0.25f(1.125, 0.558067) = −0.352671 K3 = hf(x0 + h/2, y0 + K2/2) = 0.25f(1.125, 0.541946) = −0.356701 K4 = hf(x0 + h, y0 + K3) = 0.25f(1.25, 0.361581) = −0.378355 y1 = y0 + (K1 + 2K2 + 2K3 + K4)/6 = 0.3653606 K1 = hf(x1, y1) = 0.25f(1.25, 0.3653606) = −0.377410 K2 = hf(x1 + h/2, y1 + K1/2) = 0.25f(1.375, 0.176656) = −0.385524
  • 271. Héctor M. Mora E. Métodos Numéricos con Scilab 257 1 2 3 −1 0 1 2 b b b b b b b b b Figura 7.7. Ejemplo del método Runge-Kutta 4 K3 = hf(x1 + h/2, y1 + K2/2) = 0.25f(1.375, 0.172599) = −0.386538 K4 = hf(x1 + h, y1 + K3) = 0.25f(1.5, −0.02117) = −0.380294 y2 = y1 + (K1 + 2K2 + 2K3 + K4)/6 = −0.0182773 xi ỹ(xi) y(xi) 1.00 0.7182818 0.7182818 1.25 0.3653606 0.3653430 1.50 -0.0182773 -0.0183109 1.75 -0.3703514 -0.3703973 2.00 -0.6108932 -0.6109439 2.25 -0.6372210 -0.6372642 2.50 -0.3174905 -0.3175060 2.75 0.5175891 0.5176319 3.00 2.0853898 2.0855369 En este ejemplo, los resultados son aún mejores. Hubo que evaluar 32 veces la función f(x, y), 4 veces en cada iteración. Si se trabaja con h = 0.1 se obtiene ỹ(3) = 2.0855314; con h = 0.01 se obtiene ỹ(3) = 2.0855369; con h = 0.001 se obtiene ỹ(3) = 2.0855369. ✸
  • 272. 258 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS El método RK4 se puede escribir en Scilab de la siguiente manera: function [Y, X] = RK4(f, x0, y0, xf, n) // Metodo Runge-Kutta 4 para la ecuacion diferencial // // y’ = f(x,y) // y(x0) = y0 // en intervalo [x0, xf] // // n = numero de subintervalos // // Y, X seran vectores fila de n+1 elementos // Y contendra las aproximaciones de // y(x0) y(x0+h) y(x0+2h) ... y(xf) // con h = (xf-x0)/n // X contendra los valores x0 x0+h x0+2h ... xf h = (xf-x0)/n X = zeros(1,n+1) Y = X X(1) = x0 Y(1) = y0 xi = x0 yi = y0 for i=1:n K1 = h*f(xi, yi) K2 = h*f(xi+h/2, yi+K1/2); K3 = h*f(xi+h/2, yi+K2/2); K4 = h*f(xi+h, yi+K3); xi = xi+h yi = yi + (K1 + 2*K2 + 2*K3 + K4)/6 Y(i+1) = yi X(i+1) = xi end endfunction
  • 273. Héctor M. Mora E. Métodos Numéricos con Scilab 259 7.5. Deducción de RK2 En secciones anteriores se hizo la deducción, de manera más o menos intuiti- va, de los métodos de Heun y del punto medio. Los dos resultan ser métodos de RK de orden 2. En esta sección veremos una deducción diferente y general de RK2. El método RK2 tiene el siguiente esquema: K1 = hf(xi, yi) K2 = hf(xi + α2h, yi + β21K1) yi+1 = yi + R1K1 + R2K2. Como hay un solo coeficiente α y un solo coeficiente β, utilicémoslos sin subı́ndices: K1 = hf(xi, yi) K2 = hf(xi + αh, yi + βK1) yi+1 = yi + R1K1 + R2K2. Sea g una función de dos variables. Si g es diferenciable en el punto (ū, v̄), entonces se puede utilizar la siguiente aproximación de primer orden: g(ū + ∆u, v̄ + ∆v) ≈ g(ū, v̄) + ∆u ∂g ∂u (ū, v̄) + ∆v ∂g ∂v (ū, v̄). (7.12) La aproximación de segundo orden para y(xi + h) es: y(xi + h) = y(xi) + hy′ (xi) + h2 2 y′′ (xi) + O(h3 ) (7.13) y(xi + h) ≈ y(xi) + hy′ (xi) + h2 2 y′′ (xi). (7.14) En la aproximación anterior, podemos tener en cuenta que y(xi) = yi, y que y′(xi) = f(xi, yi). Además, y′′ (xi) = d dx y′ (xi) = d dx f(xi, yi) = ∂f ∂x f(xi, yi) + ∂f ∂y f(xi, yi) ∂y ∂x (xi) = ∂f ∂x f(xi, yi) + y′ (xi) ∂f ∂y f(xi, yi).
  • 274. 260 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Para acortar la escritura, utilizaremos la siguiente notación: f := f(xi, yi) fx := ∂f ∂x f(xi, yi) fy := ∂f ∂y f(xi, yi) y := y(xi) y′ := y′ (xi) = f(xi, yi) = f y′′ := y′′ (xi). Entonces, y′′ = fx + ffy y(xi + h) ≈ y + hf + h2 2 fx + h2 2 ffy. (7.15) Por otro lado, el método RK2 se puede reescribir: yi+1 = yi + R1hf(xi, yi) + R2hf(xi + αh, yi + βK1). Utilizando (7.12): yi+1 = yi + R1hf(xi, yi) + R2h f(xi, yi) + αh ∂f ∂x (xi, yi) + βK1 ∂f ∂y (xi, yi) . Utilizando la notación se obtiene: yi+1 = y + R1hf + R2h (f + αhfx + βK1fy) yi+1 = y + (R1 + R2)hf + R2h2 αfx + R2hβK1fy. Como K1 = hf, entonces yi+1 = y + (R1 + R2)hf + R2αh2 fx + R2βh2 ffy. (7.16) Al hacer la igualdad y(xi + h) = yi+1, en las ecuaciones (7.15) y (7.16) se comparan los coeficientes de hf, de h2fx y de h2ffy y se deduce: R1 + R2 = 1, R2α = 1 2 , R2β = 1 2 .
  • 275. Héctor M. Mora E. Métodos Numéricos con Scilab 261 Entonces, β = α, (7.17) R2 = 1 2α · (7.18) R1 = 1 − R2. (7.19) Si α = 1, entonces β = 1, R2 = 1/2 y R1 = 1/2, es decir, el método de Heun. Si α = 1/2, entonces β = 1/2, R2 = 1 y R1 = 0, es decir, el método del punto medio. Para otros valores de α se tienen otros métodos de RK de orden 2. 7.6. Control del paso Hasta ahora, se ha supuesto que para hallar la solución numérica de una ecuación diferencial, los puntos están igualmente espaciados, es decir, xi − xi−1 = h para i = 1, 2, ..., n. Esta polı́tica no es, en general, adecuada. Es preferible utilizar valores de h pequeños cuando es indispensable para mantener errores relativamente pequeños, y utilizar valores grandes de h cuando se pueda. Hay varios métodos para el control de h. En uno de ellos, se supone conocido yi, una muy buena aproximación de y(xi), y se aplica un método con un paso h para obtener ỹ aproximación de y(xi + h). También se aplica el mismo método dos veces con el paso h/2 para obtener ˜ ỹ, otra aproximación de y(xi + h). Con estos dos valores se puede acotar el error y ası́ saber si es necesario trabajar con un paso más pequeño. En otro enfoque, el que veremos en esta sección, se aplican dos métodos diferentes, con el mismo h y con estas dos aproximaciones se acota el error. Ası́ se determina la buena o mala calidad de las aproximaciones. Supongamos que tenemos dos métodos: el método A con error local O(hp) y el método B con error local O(hp+1) (o con error local O(hq), q ≥ p + 1). Partimos de yi, muy buena aproximación de y(xi). Aplicando los dos métodos calculamos yA y yB, aproximaciones de y(xi + h). El control de paso tiene dos partes: en la primera se obtiene una aproximación del posible error obtenido. |error| ≈ e = Φ1(yA, yB, h, p). Si e es menor o igual que un valor ε dado, entonces se acepta yB como buena aproximación de y(x + h). En caso contrario, es necesario utilizar un valor
  • 276. 262 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS de h más pequeño. En ambos casos el valor de h se puede modificar, bien sea por necesidad (e ε), bien sea porque, siendo h aceptable, es conveniente modificarlo para el siguiente paso. Para ello, se calcula un coeficiente C0 que sirve para obtener C coeficiente de h C0 = Φ2(yA, yB, h, p) C = ϕ(C0, ...) h′ = Ch. Los diferentes algoritmos difieren en la manera de calcular e, C0 y C (las funciones Φ1, Φ2 y ϕ). Más aún, para el mismo método A y el mismo método B hay diferentes algoritmos. Un método muy popular es el de Runge-Kutta-Fehlberg, RKF, construido a partir de un método de RK de orden 5 (el método A) y de un método de RK de orden 6 (el método B). Una de sus ventajas está dada por el siguiente hecho: los valores K1, K2, K3, K4 y K5 son los mismos para los dos métodos. Teniendo en cuenta la forma general (7.7) del método RK, basta con dar los valores αi y βij. Recuérdese que siempre K1 = hf(xi, yi). En la siguiente tabla están los valores αi y βij: i αi βi1 βi2 ... 2 1 4 1 4 3 3 8 3 32 9 32 4 12 13 1932 2197 − 7200 2197 7296 2197 5 1 439 216 −8 3680 513 − 845 4104 6 1 2 − 8 27 2 − 3544 2565 1859 4104 − 11 40 (7.20) Ası́, por ejemplo, K4 = f(xi + 12 13 h, yi + 1932 2197 K1 − 7200 2197 K2 + 7296 2197 K3 )
  • 277. Héctor M. Mora E. Métodos Numéricos con Scilab 263 Para el cálculo final de yi+1 por los dos métodos: yA = yi + 25 216 K1 + 0K2 + 1408 2565 K3 + 2197 4104 K4 − 1 5 K5 yB = yi + 16 135 K1 + 0K2 + 6656 12825 K3 + 28561 56430 K4 − 9 50 K5 + 2 55 K6 (7.21) Los errores locales son respectivamente O(h5) y O(h6). Realmente hay varias fórmulas RK5 y RK6; las anteriores están en [BuF85] y [EnU96]. Hay otras fórmulas diferentes en [ChC99]. La aproximación del error está dada por |error| ≈ e = |yA − yB| h . (7.22) El coeficiente para la modificación del valor de h está dado por: C0 = 0.84 ε e 1/4 , C = min{C0, 4}, C = max{C, 0.1}. (7.23) Las fórmulas anteriores buscan que C no sea muy grande ni muy pequeño. Más especı́ficamente, C debe estar en el intervalo [0.1, 4]. En la descripción del algoritmo usaremos la siguiente notación de Matlab y de Scilab. La orden u = [u; t] significa que al vector columna u se le agrega al final el valor t y el resultado se llama de nuevo u.
  • 278. 264 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Método de Runge-Kutta-Fehlberg datos: x0, y0, b, h0, ε, hmin x = x0, y = y0, h = h0 X = [x0], Y = [y0] mientras x b h = min{h, b − x} hbien = 0 mientras hbien = 0 calcular yA, yB según (7.21) e = |yA − yB|/h si e ≤ ε x = x + h, y = yB hbien = 1 X = [X; x], Y = [Y ; y] fin-si C0 = 0.84(ε/e)1/4 C = max{C0, 0.1}, C = min{C, 4} h = Ch si h hmin ent parar fin-mientras fin-mientras La salida no deseada del algoritmo anterior se produce cuando h se vuelve demasiado pequeño. Esto se produce en problemas muy difı́ciles cuando, para mantener el posible error dentro de lo establecido, ha sido necesario disminuir mucho el valor de h, por debajo del lı́mite deseado. En una versión ligeramente más eficiente, inicialmente no se calcula yA ni yB. Se calcula directamente e = 1 360 K1 − 128 4275 K3 − 2197 75240 K4 + 1 50 K5 + 2 55 K6 . Cuando el valor de h es adecuado, entonces se calcula yB para poder hacer la asignación y = yB. Ejemplo 7.5. Resolver, por el método RKF con control de paso, la ecuación diferencial y′ = 2x2 − 4x + y y(1) = 0.7182818
  • 279. Héctor M. Mora E. Métodos Numéricos con Scilab 265 en el intervalo [1, 3], con h0 = 0.5 y ε = 10−6. K1 = −0.64085910 K2 = −0.70534149 K3 = −0.73493177 K4 = −0.77416434 K5 = −0.77705018 K6 = −0.74953282 yA = −0.01834063 yB = −0.01830704 e = 0.00006717 h = 0.5 no sirve. C0 = 0.29341805 C = 0.29341805 h = 0.14670902 K1 = −0.18803962 K2 = −0.19454169 K3 = −0.19776497 K4 = −0.20973557 K5 = −0.21125979 K6 = −0.20069577 yA = 0.51793321 yB = 0.51793329 e = 0.00000057
  • 280. 266 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS h = 0.14670902 sirve. x = 1.14670902 y = 0.51793329 C0 = 0.96535578 C = 0.96535578 h = 0.14162640 yA = 0.30712817 yB = 0.30712821 e = 0.00000029 h = 0.14162640 sirve. x = 1.28833543 y = 0.30712821 . . . x h ỹ(x) y(x) 1.0000000 0.1467090 0.7182818 0.7182818 1.1467090 0.1416264 0.5179333 0.5179333 1.2883354 0.1622270 0.3071282 0.3071282 1.4505624 0.1686867 0.0572501 0.0572501 1.6192491 0.1333497 -0.1946380 -0.1946380 1.7525988 0.1329359 -0.3736279 -0.3736279 1.8855347 0.1191306 -0.5206051 -0.5206051 2.0046653 0.1092950 -0.6137572 -0.6137571 2.1139603 0.1024064 -0.6566848 -0.6566847 2.2163666 0.0971218 -0.6506243 -0.6506241 2.3134884 0.0928111 -0.5948276 -0.5948275 2.4062996 0.0891591 -0.4877186 -0.4877184 2.4954587 0.0859853 -0.3273334 -0.3273332 2.5814440 0.0831757 -0.1114979 -0.1114977 2.6646196 0.0806534 0.1620898 0.1620900 2.7452730 0.0783639 0.4958158 0.4958160 2.8236369 0.0762674 0.8921268 0.8921270 2.8999043 0.0743333 1.3535162 1.3535164 2.9742376 0.0257624 1.8825153 1.8825156 3.0000000 2.0855366 2.0855369
  • 281. Héctor M. Mora E. Métodos Numéricos con Scilab 267 1 2 3 −1 0 1 2 b b b b b b b b b b b b b b b b b b b b Figura 7.8. Ejemplo del método Runge-Kutta-Fehlberg 7.7. Orden del método y orden del error Para algunos de los métodos hasta ahora vistos, todos son métodos de RK, se ha hablado del orden del método, del orden del error local y del orden del error global. El orden del método se refiere al número de evaluaciones de la función f en cada iteración. Ası́ por ejemplo, el método de Euler es un método de orden 1 y el método de Heun es un método de orden 2. El orden del error local se refiere al exponente de h en el error teórico cometido en cada iteración. Si la fórmula es y(x + h) = y(x) + R1k1 + R2K2 + · · · + RnKn + O(hp ), se dice que el error local es del orden de hp, o simplemente, el error local es de orden p. El orden del error global se refiere al exponente de h en el error obtenido al aproximar y(b) después de hacer (b − x0)/h iteraciones. Hemos visto seis métodos: Euler, Heun, punto medio, un RK4, un RK5 y un RK6. La siguiente tabla presenta los órdenes de los errores.
  • 282. 268 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Método Fórmula Orden del Error método local Euler (7.2) 1 O(h2) Heun (7.5) 2 O(h3) Punto medio (7.6) 2 O(h3) RK4 (7.11) 4 O(h5) RK5 (7.21) 5 O(h5) RK6 (7.21) 6 O(h6) El orden del error global es generalmente igual al orden del error local menos una unidad. Por ejemplo, el error global en el método de Euler es O(h). A medida que aumenta el orden del método, aumenta el orden del error, es decir, el error disminuye. Pero al pasar de RK4 a RK5 el orden del error no mejora. Por eso es más interesante usar el RK4 que el RK5, ya que se hacen solamente 4 evaluaciones y se tiene un error semejante. Con RK6 se obtiene un error más pequeño, pero se requieren dos evaluaciones más. 7.7.1. Verificación numérica del orden del error Cuando se conoce la solución exacta de una ecuación diferencial, en muchos casos, se puede verificar el orden del error de un método especı́fico. Más aún, se podrı́a obtener el orden del error si este no se conociera. Sea O(hp) el error local del método. Se puede hacer la siguiente aproxi- mación: error = e ≈ chp . Al tomar logaritmo en la aproximación anterior se obtiene: log(e) ≈ log(c) + p log(h) , (7.24) Para diferentes valores de h se evalúa el error cometido y se obtienen ası́ var- ios puntos de la forma (log(hi), log(ei) ). Estos puntos deben estar, aproxi- madamente, sobre una recta. La pendiente de esta recta es precisamente p. El valor de p se puede obtener gráficamente o por mı́nimos cuadrados. Ejemplo 7.6. Obtener numéricamente el orden del error local del método
  • 283. Héctor M. Mora E. Métodos Numéricos con Scilab 269 −2.5 −2.0 −1.5 −8 −7 −6 −5 b b b b b b Figura 7.9. Orden local de Heun usando la ecuación diferencial y′ = 2x2 − 4x + y y(1) = 0.7182818, con h = 0.1, 0.12, 0.14, 0.16, 0.18 y 0.2. h x0 + h ỹ(x0 + h) y(x0 + h) e log(h) log(e) 0.10 1.10 0.584701 0.584166 0.000535 -2.302585 -7.532503 0.12 1.12 0.556975 0.556054 0.000921 -2.120264 -6.989970 0.14 1.14 0.529024 0.527568 0.001456 -1.966113 -6.532007 0.16 1.16 0.500897 0.498733 0.002164 -1.832581 -6.135958 0.18 1.18 0.472641 0.469574 0.003067 -1.714798 -5.787212 0.20 1.20 0.444304 0.440117 0.004187 -1.609438 -5.475793 En la siguiente gráfica, log(h) en las abscisas y log(e) en las ordenadas, los puntos están aproximadamente en una recta. Al calcular numéricamente los coeficientes de la recta de aproximación por mı́nimos cuadrados, se obtiene: log(e) ≈ 2.967325 log(h) − 0.698893 e ≈ 0.497135h2.97 . Estos resultados numéricos concuerdan con el resultado teórico. ✸ 7.8. Métodos multipaso explı́citos Los métodos RK son considerados como métodos monopaso (unipaso) por la siguiente razón. El valor yi+1 se calcula únicamente a partir del punto
  • 284. 270 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS (xi, yi). En los métodos multipaso se utilizan otros puntos anteriores, por ejemplo, para calcular yi+1 se utilizan los puntos (xi−2, yi−2), (xi−1, yi−1) y (xi, yi). Veamos un caso particular. Supongamos que se conocen los valores y0 = y(x0), y1 = y(x1) y y2 = y(x2). Para facilitat la deducción, supongamos que x0 = 0, x1 = h y x2 = 2h. Sea p2(x) el polinomio de grado menor o igual a 2 que interpola a f en los valores 0, h y 2h, es decir, el polinomio pasa por los puntos (0, f0), (h, f1) y (2h, f2), donde fi = f(xi, yi). Este polinomio se puede obtener utilizando polinomios de Lagrange: p2(x) = f0 (x − h)(x − 2h) (0 − h)(0 − 2h) + f1 (x − 0)(x − 2h) (h − 0)(h − 2h) + f2 (x − 0)(x − h) (2h − 0)(2h − h) . Después de algunas factorizaciones se obtiene: p2(x) = 1 2h2 (f0 − 2f1 + f2)x2 + (−3f0 + 4f1 − f2)hx + 2h2 f0 . Por otro lado, por el teorema fundamental del cálculo integral Z x3 x2 y′ (x)dx = y(x3) − y(x2) y(x3) = y(x2) + Z x3 x2 y′ (x)dx y(x3) = y(x2) + Z 3h 2h f(x, y)dx. Si se reemplaza f(x, y) por el polinomio de interpolación, se tiene: y(x3) ≈ y(x2) + Z 3h 2h p2(x)dx y(x3) ≈ y(x2) + Z 3h 2h 1 2h2 (f0 − 2f1 + f2)x2 + (−3f0 + 4f1 − f2)hx + 2h2 f0 dx y3 = y2 + 1 2h2 (f0 − 2f1 + f2) 19 3 h3 + (−3f0 + 4f1 − f2) 5 2 h3 + 2h3 f0 y3 = y2 + h 12 (5f0 − 16f1 + 23f2) (7.25)
  • 285. Héctor M. Mora E. Métodos Numéricos con Scilab 271 La anterior igualdad se conoce con el nombre de fórmula de Adams-Bash- forth de orden 2, se utiliza un polinomio de orden 2. También recibe el nombre de método multipaso explı́cito o método multipaso abierto de orden 2. Si los valores y0, y1 y y2 son exactos, o sea, si y0 = y(x0), y1 = y(x1) y y2 = y(x2), entonces los valores fi son exactos, o sea, f(xi, yi) = f(xi, y(xi)) y el error está dado por y(x3) = y(x2) + h 12 (5f0 − 16f1 + 23f2) + 3 8 y(3) (z)h4 , z ∈ [x0, x3]. (7.26) La fórmula (7.25) se escribe en el caso general yi+1 = yi + h 12 (5fi−2 − 16fi−1 + 23fi). (7.27) Para empezar a aplicar esta fórmula se requiere conocer los valores fj ante- riores. Entonces, es indispensable utilizar un método RK el número de veces necesario. El método RK escogido debe ser de mejor calidad que el méto- do de Adams-Bashforth que estamos utilizando. Para nuestro caso podemos utilizar RK4. Ejemplo 7.7. Resolver, por el método de Adams-Bashforth de orden 2, la ecuación diferencial y′ = 2x2 − 4x + y y(1) = 0.7182818 en el intervalo [1, 3], con h = 0.25. Al aplicar el método RK4 dos veces se obtiene: y1 = 0.3653606 y2 = −0.0182773.
  • 286. 272 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS 1 2 3 −1 0 1 2 b b b b b b b b b Figura 7.10. Ejemplo del método de Adams-Bashforth 2 Entonces, f0 = f(x0, y0) = −1.2817182 f1 = f(x1, y1) = −1.5096394 f2 = −1.5182773 y3 = y2 + h(5f0 − 16f1 + 23f2)/12 = −0.3760843 f3 = f(x3, y3) = −1.2510843 y4 = −0.6267238 . . . xi ỹ(xi) y(xi) 1.00 0.7182818 0.7182818 1.25 0.3653606 0.3653430 1.50 -0.0182773 -0.0183109 1.75 -0.3760843 -0.3703973 2.00 -0.6267238 -0.6109439 2.25 -0.6681548 -0.6372642 2.50 -0.3706632 -0.3175060 2.75 0.4320786 0.5176319 3.00 1.9534879 2.0855369 En este caso hubo que evaluar 8 veces la función para los dos valores de RK4 y en seguida 6 evaluaciones para un total de 14 evaluaciones de la función f. ✸
  • 287. Héctor M. Mora E. Métodos Numéricos con Scilab 273 Multipaso explı́cito: Adams-Bashforth n error 0 yi+1 = yi + hfi 1 2y′′(ξ)h2 1 yi+1 = yi + h 2 (−fi−1 + 3fi) 5 12 y′′′(ξ)h3 2 yi+1 = yi + h 12 (5fi−2 − 16fi−1 + 23fi) 3 8y(4)(ξ)h4 3 yi+1 = yi + h 24 (−9fi−3 + 37fi−2 − 59fi−1 + 55fi) 251 720 y(5)(ξ)h5 4 yi+1 = yi + h 720 (251fi−4 − 1274fi−3 + 2616fi−2 95 288 y(6)(ξ)h6 −2774fi−1 + 1901fi) En la anterior tabla se muestran las principales fórmulas. Allı́ n indica el grado del polinomio de interpolación usado. En algunos libros, n está aso- ciado con número de puntos utilizados para la interpolación (igual al grado del polinomio más uno). Obsérvese que la primera fórmula es simplemente el método de Euler. 7.9. Métodos multipaso implı́citos En estos métodos se utiliza un polinomio de interpolación, el mismo de los métodos explı́citos, pero el intervalo de integración varı́a. Veamos un caso particular. Supongamos que se conocen los valores y0 = y(x0), y1 = y(x1) y y2 = y(x2). Por facilidad para la deducción, supongamos que x0 = 0, x1 = h y x2 = 2h. Sea p2(x) el polinomio de grado menor o igual a 2 que interpola a f en los valores 0, h y 2h, es decir, el polinomio pasa por los puntos (0, f0), (h, f1) y
  • 288. 274 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS (2h, f2), donde fi = f(xi, yi). Como se vio en la sección anterior, p2(x) = 1 2h2 (f0 − 2f1 + f2)x2 + (−3f0 + 4f1 − f2)hx + 2h2 f0 . El teorema fundamental del cálculo integral se usa de la siguiente manera: Z x2 x1 y′ (x)dx = y(x2) − y(x1) y(x2) = y(x1) + Z x2 x1 y′ (x)dx y(x2) = y(x1) + Z 2h h f(x, y)dx. Si se reemplaza f(x, y) por el polinomio de interpolación se tiene: y(x2) ≈ y(x1) + Z 2h h p2(x)dx y(x2) ≈ y(x1) + Z 2h h 1 2h2 (f0 − 2f1 + f2)x2 + (−3f0 + 4f1 − f2)hx + 2h2 f0 dx y2 = y1 + 1 2h2 (f0 − 2f1 + f2) 7 3 h3 + (−3f0 + 4f1 − f2) 3 2 h3 + 2h3 f0 y2 = y1 + h 12 (−f0 + 8f1 + 5f2). (7.28) La anterior igualdad se conoce con el nombre de fórmula de Adams-Moulton de orden 2, se utiliza un polinomio de orden 2. También recibe el nombre de método multipaso implı́cito o método multipaso cerrado de orden 2. Si los valores y0, y1 y y2 son exactos, o sea, si y0 = y(x0), y1 = y(x1) y y2 = y(x2), entonces los valores fi son exactos, o sea, f(xi, yi) = f(xi, y(xi))
  • 289. Héctor M. Mora E. Métodos Numéricos con Scilab 275 y el error está dado por: y(x2) = y(x1) + h 12 (−f0 + 8f1 + 5f2) − 1 24 y(3) (z)h4 , z ∈ [x0, x2]. (7.29) La fórmula (7.28) se escribe en el caso general yi+1 = yi + h 12 (−fi−1 + 8fi + 5fi+1). (7.30) Para empezar a aplicar esta fórmula es indispensable conocer los valores fj anteriores. Se requiere utilizar un método RK el número de veces necesario. El método RK escogido debe ser de mejor calidad que el método de Adams- Moulton que estamos utilizando. Para nuestro caso podemos utilizar RK4. Una dificultad más grande, y especı́fica de los métodos implı́citos, está dada por el siguiente hecho: para calcular yi+1 se utiliza fi+1, pero este valor es justamente f(xi+1, yi+1). ¿Cómo salir de este cı́rculo vicioso? Inicialmente se calcula y0 i+1, una primera aproximación, por el método de Euler. Con este valor se puede calcular f0 i+1 = f(xi+1, y0 i+1) y en seguida y1 i+1. De nuevo se calcula f1 i+1 = f(xi+1, y1 i+1) y en seguida y2 i+1. Este proceso iterativo acaba cuando dos valores consecutivos, yk i+1 y yk+1 i+1 , son muy parecidos. Este método recibe también el nombre de método predictor-corrector. La fórmula queda entonces ası́: yk+1 i+1 = yi + h 12 (−fi−1 + 8fi + 5fk i+1). (7.31) El criterio de parada puede ser: |yk+1 i − yk i | max{1, |yk+1 i |} ≤ ε. Ejemplo 7.8. Resolver, por el método de Adams-Moulton de orden 2, la ecuación diferencial y′ = 2x2 − 4x + y y(1) = 0.7182818 en el intervalo [1, 3], con h = 0.25 y ε = 0.0001. Al aplicar el método RK4 una vez, se obtiene: y1 = 0.3653606
  • 290. 276 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Entonces, f0 = f(x0, y0) = −1.2817182 f1 = f(x1, y1) = −1.5096394 Aplicando Euler se obtiene una primera aproximación de y2: y0 2 = −0.0120493 f0 2 = −1.5120493 Empiezan las iteraciones: y1 2 = −0.0170487 f1 2 = −1.5170487 y2 2 = −0.0175694 f2 2 = −1.5175694 y3 2 = −0.0176237 = y2 Para calcular y2, se utilizan los valores: f1 = −1.5096394 f2 = −1.5176237. Aplicando Euler se obtiene una primera aproximación de y3: y0 3 = −0.3970296 f0 3 = −1.2720296 Empiezan las iteraciones: y1 3 = −0.3716132 f1 3 = −1.2466132 y2 3 = −0.3689657 f2 3 = −1.2439657 y3 3 = −0.3686899 f3 3 = −1.2436899 y4 3 = −0.3686612 = y3 . . .
  • 291. Héctor M. Mora E. Métodos Numéricos con Scilab 277 1 2 3 −1 0 1 2 b b b b b b b b b Figura 7.11. Ejemplo del método de Adams-Moulton 2 xi ỹ(xi) y(xi) 1.00 0.7182818 0.7182818 1.25 0.3653606 0.3653430 1.50 -0.0176237 -0.0183109 1.75 -0.3686612 -0.3703973 2.00 -0.6076225 -0.6109439 2.25 -0.6315876 -0.6372642 2.50 -0.3084043 -0.3175060 2.75 0.5316463 0.5176319 3.00 2.1065205 2.0855369 En este caso hubo que evaluar 4 veces la función para el valor de RK4 y en seguida, en cada uno de los otros 7 intervalos, una evaluación fija más las requeridas al iterar. En este ejemplo hubo, en promedio, 4 por intervalo, para un total de 32 evaluaciones de f. El valor final y8 es más exacto que el obtenido por Adams-Bashforth, pero a costa de más evaluaciones. ✸ Teóricamente, los dos métodos multipaso de orden 2 tienen un error local del mismo orden, O(h4), pero el coeficiente en el método multipaso explı́cito, 3/8, es nueve veces el coeficiente en el error del método implı́cito, 1/24.
  • 292. 278 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Multipaso implı́cito: Adams-Moulton n error 1 yi+1 = yi + h 2 (fi + fi+1) − 1 12y′′(ξ)h3 2 yi+1 = yi + h 12 (−fi−1 + 8fi + 5fi+1) − 1 24y(3)(ξ)h4 3 yi+1 = yi + h 24 (fi−2 − 5fi−1 + 19fi + 9fi+1) − 19 720 y(4)(ξ)h5 4 yi+1 = yi + h 720 (−19fi−3 + 106fi−2 − 264fi−1 − 27 1440 y(5)(ξ)h6 +646fi + 251fi+1) La tabla anterior contiene las principales fórmulas. En ella, n indica el grado del polinomio de interpolación usado. Obsérvese que el método de Heun corresponde a una iteración (una sola) del método multipaso implı́cito de orden 1. 7.10. Sistemas de ecuaciones diferenciales Un sistema de m ecuaciones diferenciales de primer orden se puede escribir de la siguiente forma: dy1 dx = f1(x, y1, y2, ..., ym) dy2 dx = f2(x, y1, y2, ..., ym) . . . dym dx = fm(x, y1, y2, ..., ym)
  • 293. Héctor M. Mora E. Métodos Numéricos con Scilab 279 para x0 ≤ x ≤ b, con las condiciones iniciales y1(x0) = y0 1 y2(x0) = y0 2 . . . ym(x0) = y0 m. Utilicemos la siguiente notación: y = (y1, y2, ..., ym) y0 = (y0 1, y0 2, ..., y0 m) f(x, y) = f(x, y1, y2, ..., ym) = ( f1(x, y1, ..., ym), f2(x, y1, ..., ym), ..., fm(x, y1, ..., ym) ). De esta manera, el sistema se puede escribir ası́: y′ = f(x, y), x0 ≤ x ≤ b y(x0) = y0 . La solución numérica del sistema de ecuaciones consiste en un conjunto de vectores y0, y1, y2, ..., yn, yi = (yi 1, yi 2, ..., yi m), donde cada yi j es una aproximación: yi j ≈ yj(xk). Los métodos vistos anteriormente se pueden generalizar de manera inme- diata. Si se trata de los método RK, entonces los Ki dejan de ser números y pasan a ser vectores Ki. En el caso de y se utiliza un superı́ndice para indicar el intervalo, ya que los subı́ndices se usan para las componentes del vector. Por ejemplo, las fórmulas de RK4 se convierten en: K1 = hf(xi, yi ) K2 = hf(xi + h/2, yi + K1 /2) K3 = hf(xi + h/2, yi + K2 /2) K4 = hf(xi + h, yi + K3 ) yi+1 = yi + (K1 + 2K2 + 2K3 + K4 )/6. (7.32)
  • 294. 280 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Ejemplo 7.9. Resolver el siguiente sistema de ecuaciones por RK4: y′ 1 = 2y1 x + x3 y2, 1 ≤ x ≤ 2 y′ 2 = − 3 x y2 y1(1) = −1 y2(1) = 1 con h = 0.2. La solución (exacta) de este sencillo sistema de ecuaciones es: y1(x) = −x y2(x) = x−3 . Para la solución numérica: K1 = (−0.2, −0.6) K2 = (−0.2136600, −0.3818182) K3 = (−0.1871036, −0.4413223) K4 = (−0.2026222, −0.2793388) y1 = (−1.2006916, 0.5790634) K1 = (−0.2001062, −0.2895317) K2 = (−0.2093988, −0.2004450) K3 = (−0.1912561, −0.2210035) K4 = (−0.2011961, −0.1534542) y2 = (−1.4011269, 0.3647495) . . . xi ỹ1(xi) ỹ2(xi) y1(xi) y2(xi) 1.0 -1.0 1.0 -1.0 1.0 1.2 -1.2006916 0.5790634 -1.2 0.5787037 1.4 -1.4011269 0.3647495 -1.4 0.3644315 1.6 -1.6014497 0.2443822 -1.6 0.2441406 1.8 -1.8017156 0.1716477 -1.8 0.1714678 2.0 -2.0019491 0.1251354 -2.0 0.125 ✸
  • 295. Héctor M. Mora E. Métodos Numéricos con Scilab 281 7.10.1. En Scilab Consideremos el siguiente sistema de ecuaciones diferenciales: y′ 1 = 2y1 x + x3 y2, y′ 2 = − 3 x y2 y1(1) = −1 y2(1) = 1. Después de definir y cargar function fxy = func43(x, y) fxy = zeros(2,1) fxy(1) = 2*y(1)/x + x^3*y(2) fxy(2) = -3*y(2)/x endfunction se utiliza la misma función ode pero con los parámetros de dimensión ade- cuada. x0 = 1 y0 = [-1 1]’ t = (1:0.2:2)’ yt = ode(y0, x0, t, func43) En este caso, yt es un matriz de dos filas. En la fila i están las aproxima- ciones de los valores de yi(tj). Escribir una función en Scilab para un sistema de ecuaciones diferenciales es casi igual a la función para una ecuación diferencial. A continuación una versión del método RK4 para sistemas. function [Y, X] = RK4Sist(f, x0, y0, xf, n) // Metodo Runge-Kutta 4 para sistema de ecuaciones diferenciales // // y’ = f(x,y)
  • 296. 282 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS // y(x0) = y0 // en intervalo [x0, xf] // // x0 es un numero // y0 es un vector columna, digamos p x 1. // La funcion f tiene dos parametros, // x un numero, y un vector columna, // su resultado es un vector columna. // n = numero de subintervalos. // // Y sera una matriz con p filas, n+1 columnas. // X sera un vector fila de n+1 elementos. // Cada columna de Y contendra las aproximaciones de // y(x0) y(x0+h) y(x0+2h) ... y(xf) // con h = (xf-x0)/n // X contendra los valores x0 x0+h x0+2h ... xf h = (xf-x0)/n p = size(y0,1) disp(p, ’p’) X = zeros(1,n+1) Y = zeros(p,n+1) X(1) = x0 Y(:,1) = y0 xi = x0 yi = y0 for i=1:n K1 = h*f(xi, yi) K2 = h*f(xi+h/2, yi+K1/2); K3 = h*f(xi+h/2, yi+K2/2); K4 = h*f(xi+h, yi+K3); xi = xi+h yi = yi + (K1 + 2*K2 + 2*K3 + K4)/6 Y(:,i+1) = yi X(i+1) = xi end endfunction
  • 297. Héctor M. Mora E. Métodos Numéricos con Scilab 283 7.11. Ecuaciones diferenciales de orden superior Una ecuación diferencial ordinaria, de orden m, con condiciones iniciales, se puede escribir de la siguiente manera: y(m) = f(x, y, y′ , y′′ , ..., y(m−1) ), x0 ≤ x ≤ b y(x0) = y0 y′ (x0) = y′ 0 y′′ (x0) = y′′ 0 . . . y(m−1) (x0) = y (m−1) 0 . Esta ecuación diferencial se puede convertir en un sistema de ecuaciones diferenciales de primer orden, mediante el siguiente cambio de variables: u1 = y u2 = y′ u3 = y′′ . . . um = y(m−1)
  • 298. 284 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Entonces, la ecuación diferencial se convierte en el siguiente sistema: u′ 1 = u2 u′ 2 = u3 u′ 3 = u4 . . . u′ m−1 = um u′ m = f(x, u1, u2, ..., um) u1(x0) = y0 u2(x0) = y′ 0 u3(x0) = y′′ 0 . . . um(x0) = y (m−1) 0 . De forma más compacta, u′ = F(x, u), x0 ≤ x ≤ b u(x0) = κ0, donde κ0 = [y0 y′ 0 y′′ 0 ... y (m−1) 0 ]T . Este sistema se puede resolver por los métodos para sistemas de ecuaciones diferenciales de primer orden. Ejemplo 7.10. Resolver la ecuación diferencial y′′ = 4y − xy′ x2 , 1 ≤ x ≤ 2, y(1) = 3 y′ (1) = 10, por el método RK4, con h = 0.2. Sean u1 = y, u2 = y′. u′ 1 = u2 u′ 2 = 4u1 − xu2 x2 , 1 ≤ x ≤ 2, u1(1) = 3 u2(1) = 10.
  • 299. Héctor M. Mora E. Métodos Numéricos con Scilab 285 La solución exacta es y = 4x2 − x−2. Al aplicar el método RK4 se obtiene: K1 = (2, 0.4) K2 = (2.04, 0.7900826) K3 = (2.0790083, 0.7678437) K4 = (2.1535687, 1.0270306) u1 = (5.0652642, 10.7571472) . . . xi ũ1(xi) ũ2(xi) y(xi) 1.0 3.0 10.0 3.0 1.2 5.0652642 10.757147 5.0655556 1.4 7.3293797 11.928367 7.3297959 1.6 9.8488422 13.287616 9.849375 1.8 12.65069 14.742141 12.651358 2.0 15.749173 16.249097 15.75 ✸ 7.12. Ecuaciones diferenciales con condiciones de frontera Una ecuación diferencial de segundo orden con condiciones de frontera se puede escribir de la forma y′′ = f(x, y, y′ ), a ≤ x ≤ b, y(a) = ya (7.33) y(b) = yb. Esta ecuación diferencial se puede convertir en un sistema de dos ecuaciones diferenciales, pero para obtener su solución numérica se presenta un incon- veniente: se deberı́a conocer el valor y′ a = y′(a). Esta dificultad se supera mediante el método del disparo (shooting). Como no se conoce y′ a, se le asigna un valor aproximado inicial. Puede ser y′ a ≈ yb − ya b − a .
  • 300. 286 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Con este valor inicial se busca la solución numérica, hasta obtener ỹ(b) = ỹ(b, y′ a). Este valor deberı́a ser el valor conocido yb. Si no coinciden, es necesario modificar la suposición de y′ a hasta obtener el resultado deseado. Si ỹ(b, y′ a) yb, entonces se debe aumentar la pendiente inicial del disparo. De manera análoga, si ỹ(b, y′ a) yb, se debe disminuir la pendiente inicial del disparo. Lo anterior se puede presentar como la solución de una ecuación: ϕ(y′ a) = yb − ỹ(b, y′ a) = 0. Esta ecuación se puede resolver, entre otros métodos, por el de la secante o el de bisección. Para facilitar la presentación del método se considera el problema P(v), donde: v = aproximación de y′ a, n = número de intervalos para la solución numérica, ỹ = (ỹ0, ỹ1, ..., ỹn) = solución numérica del siguiente problema: y′ = f(x, y), a ≤ x ≤ b y(a) = ya P(v) y′ (a) = v, ϕ(v) = yb − ỹn = yb − ỹ(b, v). (7.34) Se desea encontrar v∗ tal que ϕ(v∗) = 0. Entonces, la solución numérica de P(v∗) es la solución numérica de (7.33). Si se aplica el método de la secante para resolver la ecuación ϕ(v) = 0, el algoritmo es el siguiente:
  • 301. Héctor M. Mora E. Métodos Numéricos con Scilab 287 Método del disparo datos: f, a, b, ya, yb, ε, maxit, ε0 εr = max{1, |yb|} ε v0 = (yb − ya)/(b − a) ỹ = solución numérica de P(v0) ϕ0 = yb − ỹn si |ϕ0| ≤ εr ent parar v1 = v0 + ϕ0/(b − a) ỹ = solución numérica de P(v1) ϕ1 = yb − ỹn si |ϕ1| ≤ εr ent parar para k = 1, ...,maxit δ = ϕ1 − ϕ0 si |δ| ≤ ε0 ent parar v2 = v1 − ϕ1(v1 − v0)/δ ỹ = solución numérica de P(v2) ϕ2 = yb − ỹn si |ϕ2| ≤ εr ent parar v0 = v1, v1 = v2, ϕ0 = ϕ1, ϕ1 = ϕ2 fin-para OJO: no hubo convergencia. Ejemplo 7.11. Resolver la ecuación diferencial y′′ = 2 cos(2x) − y′ − 4x2y x2 , 0.2 ≤ x ≤ 0.7 y(0.2) = 0.3894183 y(0.7) = 0.9854497, con h = 0.1 y utilizando RK4 para la solución del sistema de ecuaciones diferenciales asociado. La primera aproximación de y′(a) es v0 = (0.9854497 − 0.3894183)/(0.7 − 0.2) = 1.19206278 Al resolver numéricamente el problema P(1.19206278) se obtiene: ỹ5 = 0.94935663. El disparo resultó muy bajo. ϕ0 = 0.03609310 v1 = 1.19206278 + 0.03609310/(0.7 − 0.5) = 1.26424897
  • 302. 288 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Al resolver numéricamente el problema P(1.26424897) se obtiene: ỹ5 = 0.95337713 ϕ1 = 0.03207260 Primera iteración del método de la secante: v2 = 1.84009748 Al resolver numéricamente el problema P(1.84009748) se obtiene: ỹ5 = 0.98544973 Este disparo fue preciso (no siempre se obtiene la solución con una sola iteración de la secante). El último vector ỹ es la solución. La solución exacta es y = sen(2x). xi ỹ(xi) y(xi) 0.2 0.3894183 0.3894183 0.3 0.5647741 0.5646425 0.4 0.7174439 0.7173561 0.5 0.8415217 0.8414710 0.6 0.9320614 0.9320391 0.7 0.9854497 0.9854497 ✸ 7.13. Ecuaciones diferenciales lineales con condiciones de frontera Una ecuación diferencial lineal de segundo orden con condiciones de frontera se puede escribir de la forma p(x)y′′ + q(x)y′ + r(x)y = s(x), a ≤ x ≤ b, y(a) = ya (7.35) y(b) = yb. Obviamente para esta ecuación se puede utilizar el método del disparo, pero, dada la linealidad, fácilmente se puede buscar una solución aproximada us- ando diferencias finitas para y′ y y′′.
  • 303. Héctor M. Mora E. Métodos Numéricos con Scilab 289 El intervalo [a, b] se divide en n ≥ 2 subintervalos de tamaño h = (b − a)/n. Los puntos xi están igualmente espaciados (xi = a + ih). Se utilizan las siguientes aproximaciones y la siguiente notación: y′′ i ≈ yi−1 − 2yi + yi+1 h2 y′ i ≈ −yi−1 + yi+1 2h pi := p(xi) qi := q(xi) ri := r(xi) si := s(xi). Entonces,: pi yi−1 − 2yi + yi+1 h2 + qi −yi−1 + yi+1 2h + riyi = si, i = 1, ..., n − 1. Es decir, se tiene un sistema de n − 1 ecuaciones con n − 1 incógnitas, y1, y2, ..., yn−1. 2pi yi−1 − 2yi + yi+1 2h2 + hqi −yi−1 + yi+1 2h2 + 2h2riyi 2h2 = 2h2si 2h2 (2pi − hqi)yi−1 + (−4pi + 2h2 ri)yi + (2pi + hqi)yi+1 = 2h2 si Este sistema es tridiagonal.         d1 u1 l1 d2 u2 l2 d3 u3 ln−3 dn−2 un−2 ln−2 dn−1                 y1 y2 y3 yn−2 yn−1         =         β1 β2 β3 βn−2 βn−1         , (7.36) donde di = −4pi + 2h2 ri, i = 1, ..., n − 1, ui = 2pi + hqi, i = 1, ..., n − 2, li = 2pi+1 − hqi+1, i = 1, ..., n − 2, β1 = 2h2 s1 − (2p1 − hq1)ya, βi = 2h2 si, i = 2, ..., n − 2, βn−1 = 2h2 sn−1 − (2pn−1 + hqn−1)yb.
  • 304. 290 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS Ejemplo 7.12. Resolver por diferencias finitas la ecuación diferencial x2 y′′ + y′ + 4x2 y = 2 cos(2x), 0.2 ≤ x ≤ 0.7 y(0.2) = 0.3894183 y(0.7) = 0.9854497, con n = 5, es decir, h = 0.1. Al calcular los coeficientes del sistema tridiagonal se obtiene: d1 = −4p1 + 2h2 r1 d1 = −4(0.3)2 + 2(0.1)2 4(0.3)2 = −0.3528 u1 = 2p1 + hq1 u1 = 2(0.3)2 + 0.1(1) = 0.28 l1 = 2p2 − hq2 l1 = 2(0.4)2 − 0.1(1) = 0.22 d = (−0.3528, −0.6272, −0.98, −1.4112), u = (0.28, 0.42, 0.6), l = (0.22, 0.4, 0.62), β = (0.00186, 0.0278683, 0.0216121, −0.7935745). Su solución es (y1, y2, y3, y4) = (0.5628333, 0.7158127, 0.8404825, 0.9315998). xi ỹ(xi) y(xi) 0.2 0.3894183 0.3894183 0.3 0.5628333 0.5646425 0.4 0.7158127 0.7173561 0.5 0.8404825 0.8414710 0.6 0.9315998 0.9320391 0.7 0.9854497 0.9854497 ✸ Ejercicios Escoja varias ecuaciones diferenciales (o sistemas de ecuaciones dife- renciales) de las que conozca la solución exacta. Fije el intervalo de tra- bajo. Determine qué métodos puede utilizar. Aplique varios de ellos.
  • 305. Héctor M. Mora E. Métodos Numéricos con Scilab 291 Compare los resultados. Cambie el tamaño del paso. Compare de nue- vo. Un procedimiento adecuado para obtener las ecuaciones diferenciales consiste en partir de la solución (una función cualquiera) y construir la ecuación diferencial. La aplicación de los métodos se puede hacer de varias maneras: a mano con ayuda de una calculadora; en parte a mano y en parte con ayuda de software para matemáticas como Scilab o Matlab; haciendo un programa, no necesariamente muy sofisticado, para cada método. A continuación se presentan algunos ejemplos sencillos. 7.1 y′ = ex − y x y(1) = 0. Su solución es y = ex − ex x · 7.2 y′ 1 = 2y1 + y2 + 3 y′ 2 = 4y1 − y2 + 9 y1(0) = −3 y2(0) = 5. Su solución es y1(t) = −e−2t − 2, y2(t) = 4e−2t + 1. 7.3 y′′ = 2 x(2 − x) y′ y(1) = −2 y′ (1) = 1. Su solución es y = −2 ln(2 − x) − x − 1. Tenga especial cuidado con el intervalo de trabajo.
  • 306. 292 CAPÍTULO 7. ECUACIONES DIFERENCIALES ORDINARIAS 7.4 y′′′ + y′′ + y′ + y = 4ex y(0) = 1 y′ (0) = 2 y′′ (0) = 1 y′′′ (0) = 0. Su solución es y = ex + sen(x). 7.5 y′′ y = e2x − sen2 (x) y(0) = 1 y(π) = eπ . Su solución es y = ex + sen(x). 7.6 y′′ + e−x y′ + y = 2ex + 1 + e−x cos(x) y(0) = 1 y(π) = eπ . Su solución es y = ex + sen(x).
  • 307. Capı́tulo 8 Ecuaciones diferenciales parciales 8.1. Generalidades Sea u = u(x, y) una función de dos variables con derivadas parciales de orden dos. Una ecuación diferencial se llama cuasi-lineal si es de la forma Auxx + Buxy + Cuyy = ϕ(x, y, u, ux, uy), donde A, B y C son constantes. Hay tres tipos de ecuaciones cuasilineales: elı́ptica : si B2 − 4AC 0, parabólica : si B2 − 4AC = 0, hiperbólica : si B2 − 4AC 0. Un ejemplo tı́pico de una ecuación elı́ptica es la ecuación de Poisson ∇2 u = uxx + uyy = f(x, y). Un caso particular es la ecuación de Laplace uxx + uyy = 0. Un ejemplo tı́pico de una ecuación parabólica es la ecuación unidimensional del calor ut = c2 uxx. 293
  • 308. 294 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES Un ejemplo tı́pico de una ecuación hiperbólica es la ecuación de onda utt = c2 uxx. Este libro presenta únicamente el método de diferencias finitas para EDP, pues las derivadas parciales se aproximan por diferencia finitas. Hay otros métodos muy importantes y posiblemente más usados para EDP que no son tratados aquı́, ya que su complejidad queda fuera del alcance de este libro. Algunos de ellos son: el método de elementos finitos, el de volúmenes finitos, el de elementos de contorno y los métodos espectrales. 8.2. Elı́pticas: ecuación de Poisson Consideraremos un caso particular cuando el dominio es un rectángulo, Ω = {(x, y) : a x b, c y d}, ∂Ω = frontera de Ω. La ecuación de Poisson con condiciones de frontera de Dirichlet es la siguien- te: △u(x, y) = f(x, y) en Ω, u(x, y) = g(x, y) en ∂Ω. (8.1) Hay condiciones de frontera que utilizan derivadas con respecto al vector normal en la frontera. Estas reciben el nombre de condiciones de Neumann. Resolver numéricamente la ecuación diferencial consiste en obtener aproxi- maciones de u(xi, yj), donde los puntos (xi, yj) están en Ω. De manera más precisa, sean nx ∈ Z, nx ≥ 1, ny ∈ Z, ny ≥ 1, hx = b − a nx + 1 , hy = d − c ny + 1 , xi = a + ihx, i = 1, ..., nx, yj = c + jhy, j = 1, ..., ny, uij ≈ u(xi, yj), i = 1, ...nx, j = 1, ..., ny.
  • 309. Héctor M. Mora E. Métodos Numéricos con Scilab 295 hx a x1 x2 xi xnx b c y1 yj yny d hy b b b b b uij ui+1,j ui−1,j ui,j+1 ui,j−1 Figura 8.1. División del rectángulo Usando la aproximación ϕ′′ (t) ≈ ϕ(t + h) − 2ϕ(t) + ϕ(t − h) h2 se obtiene △u(xi, yj) ≈ ui+1,j − 2uij + ui−1,j h2 x + ui,j+1 − 2uij + ui,j−1 h2 y . (8.2) Sea η = hx/hy. △u(xi, yj) ≈ ui+1,j − 2uij + ui−1,j h2 x + η2 ui,j+1 − 2uij + ui,j−1 h2 x △u(xi, yj) ≈ ui+1,j + ui−1,j + η2ui,j+1 + η2ui,j−1 − (2 + 2η2)uij h2 x . (8.3) En el caso particular cuando h = hx = hy △u(xi, yj) ≈ ui+1,j + ui−1,j + ui,j+1ui,j−1 − 4uij h2 . (8.4) Al aplicar la aproximación (8.3) en (8.1), y cambiando el signo de aproxi- mación por el signo de igualdad, se obtiene −ui+1,j − ui−1,j − η2 ui,j+1 − η2 ui,j−1 + (2 + 2η2 )uij = −h2 xfij, (8.5)
  • 310. 296 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES donde fij = f(xi, yj) son valores conocidos. Al considerar los nxny puntos de la malla se obtiene un sistema de nxny ecuaciones con nxny incógnitas. Para simplificar la notación, sean n = nx m = ny N = nm h = hx η = h hy ρ = η2 σ = 2 + 2η2 αj = g(a, yj) βj = g(b, yj) γi = g(xi, c) δi = g(xi, d) Entonces −ui+1,j − ui−1,j − ρui,j+1 − ρui,j−1 + σuij = −h2 fij (8.6) Utilizaremos el siguiente orden para los puntos: primero, los puntos de la primera fila (la fila horizontal inferior), en seguida los puntos de la segunda fila, ..., y, finalmente, los puntos de la fila superior. En cada fila el orden es el usual, de izquierda a derecha. En este orden se plantean la ecuaciones: la ecuación en (x1, y1), en (x2, y1),
  • 311. Héctor M. Mora E. Métodos Numéricos con Scilab 297 ..., en (xn, y1), en (x1, y2), ... Para las variables utilizaremos el mismo orden ξ1 = u11 ξ2 = u21 . . . ξn = un1 ξn+1 = u12 ξn+2 = u22 . . . ξ2n = un2 . . . ξN = unm Con el anterior orden para las variables la igualdad (8.6) se reescribe ası́: −ρui,j−1 − ui−1,j + σuij − ui+1,j − ρui,j+1 = −h2 fij El sistema de N ecuaciones con N incógnitas se escribe simplemente: Aξ = v. (8.7) En alguno de los siguientes cuatro casos: i = 1, i = n, j = 1 y j = m, alguno(s) de los valores ukl corresponde al valor de u en la frontera. En este caso se utilizan las condiciones de frontera, es decir, los valores de g en el punto de frontera especı́fico. Como son valores conocidos, entonces pasan al lado derecho de la igualdad. A continuación están algunas de las igualdades. Al plantear la ecuación en el punto (x1, y1) se obtiene: −ρu10 − u01 + σu11 − u21 − ρu12 = −h2 f11. Es necesario cambiar u10 por el valor conocido γ1 y cambiar u01 por el valor conocido α1. Utilizando la notación ξk se obtiene: σξ1 − ξ2 − ρξn+1 = −h2 f11 + ργ1 + α1. En el punto (x2, y1) se obtiene: −ρu20 − u11 + σu21 − u31 − ρu22 = h2 − f21 −ξ1 + σξ2 − ξ3 − ρξn+2 = −h2 f21 + ργ2.
  • 312. 298 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES En el punto (x3, y1) se obtiene: −ρu30 − u21 + σu31 − u41 − ρu32 = −h2 f31 −ξ2 + σξ3 − ξ4 − ρξn+3 = −h2 f31 + ργ3. En el punto (xn, y1) se obtiene: −ρun0 − un−1,1 + σun1 − un+1,1 − ρun2 = −h2 fn1 −ξn−1 + σξn − ρξ2n = −h2 fn1 + ργn + β1. En el punto (x1, y2) se obtiene: −ρu11 − u02 + σu12 − u22 − ρu13 = −h2 f12 −ρξ1 + σξn+1 − ξn+2 − ρξ2n+1 = −h2 f12 + α2. En el punto (x3, y2) se obtiene: −ρu31 − u22 + σu32 − u42 − ρu33 = −h2 f32 −ρξ3 − ξn+2 + σξn+3 − ξn+4 − ρξ2n+3 = −h2 f32. Si n = nx = 3 y m = ny = 4, la matriz A tiene la siguiente forma: A =                      σ −1 0 −ρ 0 0 0 0 0 0 0 0 −1 σ −1 0 −ρ 0 0 0 0 0 0 0 0 −1 σ 0 0 −ρ 0 0 0 0 0 0 −ρ 0 0 σ −1 0 −ρ 0 0 0 0 0 0 −ρ 0 −1 σ −1 0 −ρ 0 0 0 0 0 0 −ρ 0 −1 σ 0 0 −ρ 0 0 0 0 0 0 −ρ 0 0 σ −1 0 −ρ 0 0 0 0 0 0 −ρ 0 −1 σ −1 0 −ρ 0 0 0 0 0 0 −ρ 0 −1 σ 0 0 −ρ 0 0 0 0 0 0 −ρ 0 0 σ −1 0 0 0 0 0 0 0 0 −ρ 0 −1 σ −1 0 0 0 0 0 0 0 0 −ρ 0 −1 σ                      Se puede observar que A es una matriz simétrica, tridiagonal por bloques, de tamaño m × m bloques, donde cada bloque es de tamaño n × n. A =         D −ρIn 0 −ρIn D −ρIn 0 −ρIn D D −ρIn −ρIn D         .
  • 313. Héctor M. Mora E. Métodos Numéricos con Scilab 299 D es una matriz simétrica tridiagonal de tamaño n × n. D =         σ −1 0 −1 σ −1 0 −1 σ σ −1 −1 σ         . A es de diagonal positiva dominante. En la mayorı́a de las filas n X j=1 j6=i |aij| = 2 + 2ρ = aii. En algunas filas n X j=1 j6=i |aij| aii. Para resolver Aξ = v se puede utilizar el método de Gauss si m y n son pequeños. Si N es muy grande, no se puede almacenar completamente A como matriz densa y, además, el tiempo de cálculo se vuelve muy grande. Hay varios métodos que pueden ser más eficientes para N grande, algunos son especı́ficos para la ecuación de Poisson en un rectángulo. Por ejemplo, se puede utilizar el método de Gauss-Seidel o el de sobrerrelajación. Estos dos métodos se pueden implementar sin almacenar los elementos no nulos de A. Conociendo m, n, σ y ρ se tiene toda la información sobre A. También se pueden utilizar métodos basados en la FFT, Fast Fourier Transform. Otros métodos son: el de reducción cı́clica, el método FACR, Fourier Analysis Cyclic Reduction, y el método de doble barrido de Cholesky. Ejemplo 8.1. Resolver la ecuación diferencial △u = 6x + 12y, 1 x 13, 2 y 7 u(a, y) = 1 + 2y3 u(b, y) = 2197 + 2y3 u(x, c) = 16 + x3 u(x, d) = 686 + x3 con nx = 3 y ny = 4.
  • 314. 300 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES Entonces hx = 3, hy = 1, ρ = 9, σ = 20, v = [235 2529 10531 −519 −810 1353 −505 −918 1367 6319 8235 16615]T . Al resolver el sistema 12 × 12 se obtiene: u = [118 397 1054 192 471 1128 314 593 1250 496 775 1432]T . La ecuación diferencial es muy sencilla, su solución es u(x, y) = x3 + 2y3. En este caso, la solución numérica obtenida es exacta. ✸ 8.3. Parabólicas: ecuación del calor La ecuación unidimensional del calor es: ∂u ∂t (x, t) = c2 ∂2u ∂x2 (x, t), 0 x L, 0 t , (8.8) con las condiciones u(0, t) = v(t), t ≥ 0 (8.9) u(L, t) = w(t), t ≥ 0 (8.10) u(x, 0) = f(x), 0 ≤ x ≤ L. (8.11) La función u(x, t) indica la temperatura de una barra uniforme, en la posi- ción x y en el tiempo t. Generalmente las funciones v(t) y w(t) son con- stantes, es decir, se supone que la temperatura en los extremos de la barra es constante para todo tiempo t. De manera análoga a las ecuaciones elı́pticas, se sitúa en la región Ω =]0, L[×]0, +∞[ una malla determinada por los valores xi = i hx, i = 0, 1, 2, ..., m tj = j ht, j = 0, 1, 2, ... donde hx = L m ·
  • 315. Héctor M. Mora E. Métodos Numéricos con Scilab 301 0 x1 x2 xm−1 L 0 t1 t2 t3 b b b b b b b b b b b b b b b b u11 u21 um−1,1 u12 u13 Figura 8.2. Malla para la ecuación del calor El objetivo es encontrar valores uij, aproximaciones de los valores u(xi, tj). Como se conoce la función u en la frontera de Ω, entonces se conocen los valores: u00, u10, ..., um0, t = 0, u01, u02, ..., u0j, ... x = 0, um1, um2, ..., umj, ... x = L. Los valores buscados son: u11, u21, ..., um−1,1, t = t1 u12, u22, ..., um−1,2, t = t2 u13, u23, ..., um−1,3, t = t3 . . . Cada uno de los paquetes anteriores tiene m − 1 valores correspondientes a un tiempo fijo tj. Aunque el problema está plantedao para 0 t +∞, obviamente no se
  • 316. 302 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES puede ir hasta el infinito. Entonces se toma un valor T adecuado y 0 ≤ t ≤ T (8.12) ht = T n (8.13) tj = j ht, j = 0, 1, 2, ..., n. (8.14) 8.3.1. Método explı́cito La segunda derivada ∂2u/∂x2 se aproxima como en el caso elı́ptico, la deriva- da ∂u/∂t se aproxima hacia adelante: ∂2u ∂x2 (xi, tj) ≈ ui+1,j − 2uij + ui−1,j h2 x (8.15) ∂u ∂t (xi, tj) ≈ ui,j+1 − uij ht (8.16) Remplazando en (8.8) se obtiene: ui,j+1 − uij ht = c2 ui+1,j − 2uij + ui−1,j h2 x ui,j+1 = c2ht h2 x ui−1,j + 1 − 2c2ht h2 x uij + c2ht h2 x ui+1,j ui,j+1 = α ui−1,j + β uij + α ui+1,j (8.17) α = c2ht h2 x (8.18) β = 1 − 2α. (8.19) En la fórmula (8.15) el error es del orden de O(h2 x), en (8.16) el error es del orden de O(ht). El error en (8.17) es del orden de (ht + h2 x). Los valores usados en (8.17) forman la “molécula”: b b b bc ui,j+1 ui−1,j uij ui+1,j
  • 317. Héctor M. Mora E. Métodos Numéricos con Scilab 303 El valor ui,j+1 aproximación de u(xi, tj+1), representado por una cı́rculo hueco ◦ , se calcula utilizando los valores para tj, representados por cı́rculos rellenos • . Para calcular los valores u11, u21, ..., um−1,1 se necesitan valores uk0, pero estos son conocidos por corresponder a la condición (8.11). Entonces los valores u11, u21, ..., um−1,1, se calculan sin ningún problema. Para calcular los valores u12, u22, ..., um−1,2 se necesitan los valores u01, u11, u21, ..., um−1,1, um1. El primero y el último están dados por las condiciones (8.9) y (8.10); los otros se acaban de calcular. Después, de manera semejante, se calculan los valores ui3 y ası́ sucesivamente. Ejemplo 8.2. Aplicar las fórmulas anteriores a la ecuación diferencial ∂u ∂t (x, t) = 2 9 ∂2u ∂x2 (x, t), 0 x π 3 , 0 t ≤ 2 con las condiciones u(0, t) = 5, t ≥ 0 u( π 3 , t) = 5, t ≥ 0 u(x, 0) = sen(3x) + 5, 0 ≤ x ≤ π 3 . con m = 10 y n = 50. La solución exacta de la ecuación diferencial es u(x, t) = e−2t sen(3x) + 5 . Al aplicar las fórmulas se obtiene: hx = π/30 = 0.1047198 ht = 0.04 α = 0.8105695 β = −0.6211389 Para empezar, los valores u00, u10, u20, ..., u10,0 son: 5, 5.309017, 5.5877853, 5.809017, 5.9510565, 6, 5.9510565, 5.809017, 5.5877853, 5.309017, 5.
  • 318. 304 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES Para t = t1 = 0.04 son datos: u01 = 5, u10,0 = 5. u11 = αu00 + βu10 + αu20 u11 = 5.2844983 u21 = αu10 + βu20 + αu30 u21 = 5.5411479 u91 = αu80 + βu90 + αu10,0 u91 = 5.2844983 Para t = t2 = 0.08 u12 = αu01 + βu11 + αu21 u12 = 5.261925 En la tabla siguiente aparecen los valores exactos u(xi, 2) y los valores obtenidos ui,50. xi u(xi, 2) ui,50 0.000000 5.000000 5.000000 0.104720 5.005660 9.269937 0.209440 5.010766 -3.103062 0.314159 5.014818 16.178842 0.418879 5.017419 -8.111031 0.523599 5.018316 18.817809 0.628319 5.017419 -8.111031 0.733038 5.014818 16.178842 0.837758 5.010766 -3.103062 0.942478 5.005660 9.269937 1.047198 5.000000 5.000000 Se observa que los resultados obtenidos por las fórmulas no son buenos. Como aparece en la siguiente tabla, si se utiliza n = 100 los resultados son buenos.
  • 319. Héctor M. Mora E. Métodos Numéricos con Scilab 305 xi u(xi, 2) ui,100 error 0.000000 5.000000 5.000000 0.000000 0.104720 5.005660 5.005394 0.000266 0.209440 5.010766 5.010261 0.000505 0.314159 5.014818 5.014123 0.000695 0.418879 5.017419 5.016602 0.000817 0.523599 5.018316 5.017456 0.000859 0.628319 5.017419 5.016602 0.000817 0.733038 5.014818 5.014123 0.000695 0.837758 5.010766 5.010261 0.000505 0.942478 5.005660 5.005394 0.000266 1.047198 5.000000 5.000000 0.000000 El ejemplo anterior muestra resultados malos con n = 50 y bastante buenos con n = 100. Esto tiene una razón: el método con las fórmulas (8.17) es a veces estable, a veces inestable, dado que los errores de redondeo o trun- camiento se pueden propagar exponencialmente. Puede decirse entonces que este método es condicionalmente estable (ver [BuF85]). Si c2 ht h2 x ≤ 1 2 · (8.20) el método es estable. Fácilmente se comprueba que, en el ejemplo anterior, c2 ht h2 x = 0.8105695 si n = 50 c2 ht h2 x = 0.4052847 si n = 100 8.3.2. Método implı́cito La derivada ∂u/∂t se aproxima hacia atrás: ∂u ∂t (xi, tj) ≈ ui,j − ui,j−1 ht (8.21) ∂2u ∂x2 (xi, tj) ≈ ui+1,j − 2uij + ui−1,j h2 x (8.22)
  • 320. 306 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES Remplazando en (8.8) se obtiene ui,j − ui,j−1 ht = c2 ui+1,j − 2uij + ui−1,j h2 x Si queremos calcular los valores ukj, para t = tj, y conocemos los valores para t = tj−1, entonces agrupamos ası́: − c2ht h2 x ui−1,j + 1 + c2ht h2 x uij − c2ht h2 x ui+1,j = ui,j−1 . De manera más compacta: −α ui−1,j + γuij − αui+1,j = ui,j−1 (8.23) α = c2ht h2 x (8.24) γ = 1 + 2α. (8.25) La fórmula (8.23), al igual que en el método explı́cito, tiene un error de orden O(ht + h2 x). Los valores usados en (8.23) forman la “molécula”: b bc bc bc ui,j ui−1,j ui,j−1 ui+1,j Al utilizar (8.23) para los m − 1 puntos (x1, tj), (x2, tj), ..., (xm−1, tj), se obtiene el siguiente sistema de ecuaciones:         γ −α 0 0 ... 0 −α γ −α 0 ... 0 0 −α γ −α ... 0 0 0 −α γ                 u1j u2j u3j um−1,j         =         u1,j−1 + αu0j u2,j−1 u3,j−1 um−1,j−1 + αumj         (8.26) Este sistema tridiagonal se puede resolver por cualquier método, pero es más eficiente resolverlo por un método especı́fico para sistemas tridiagonales, ver
  • 321. Héctor M. Mora E. Métodos Numéricos con Scilab 307 sección (2.13). Además, como la matriz del sistema es la misma para todas las iteraciones, entonces la factorización LU tridiagonal es la misma para todas las iteraciones y se calcula únicamente una vez. Ası́, en cada iteración se resuelve el sistema conociendo ya la factorización LU. Los valores u0j y umj están dados por los valores v(tj) y w(tj) provenientes de las condiciones de frontera. Ejemplo 8.3. Aplicar este método a la misma ecuación diferencial ∂u ∂t (x, t) = 2 9 ∂2u ∂x2 (x, t), 0 x π 3 , 0 t ≤ 2 con las condiciones u(0, t) = 5, t ≥ 0 u( π 3 , t) = 5, t ≥ 0 u(x, 0) = sen(3x) + 5, 0 ≤ x ≤ π 3 . con m = 10 y n = 50. Al aplicar las fórmulas se obtiene: hx = π/30 = 0.1047198 ht = 0.04 α = 0.8105695 γ = 2.6211389 Para empezar, los valores u00, u10, u20, ..., u10,0 son: 5, 5.309017, 5.5877853, 5.809017, 5.9510565, 6, 5.9510565, 5.809017, 5.5877853, 5.309017, 5. Los valores α y γ definen la matriz del sistema (8.26) para todas las ite- raciones. Para t = t1 = 0.04, los términos independientes son: 9.3618643, 5.5877853, 5.809017, 5.9510565, 6, 5.9510565, 5.809017, 5.5877853, 9.3618643 . La solución del sistema es: 5.2863007, 5.5445763, 5.749545, 5.8811429, 5.9264885, 5.8811429 5.749545, 5.5445763, 5.2863007 . Estos valores corresponden a u11, u21, ..., u91. La siguiente tabla muestra los valores teóricos, los valores obtenidos por el método y las diferencias , para t = 2:
  • 322. 308 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES xi u(xi, 2) ui,50 error 0.000000 5.000000 5.000000 0.000000 0.104720 5.005660 5.006792 -0.001132 0.209440 5.010766 5.012919 -0.002153 0.314159 5.014818 5.017781 -0.002963 0.418879 5.017419 5.020903 -0.003484 0.523599 5.018316 5.021979 -0.003663 0.628319 5.017419 5.020903 -0.003484 0.733038 5.014818 5.017781 -0.002963 0.837758 5.010766 5.012919 -0.002153 0.942478 5.005660 5.006792 -0.001132 1.047198 5.000000 5.000000 0.000000 Si se considera n = 100, los valores para t = 2 son: xi u(xi, 2) ui,100 error 0.000000 5.000000 5.000000 0.000000 0.104720 5.005660 5.006315 -0.000655 0.209440 5.010766 5.012011 -0.001245 0.314159 5.014818 5.016532 -0.001714 0.418879 5.017419 5.019434 -0.002015 0.523599 5.018316 5.020434 -0.002119 0.628319 5.017419 5.019434 -0.002015 0.733038 5.014818 5.016532 -0.001714 0.837758 5.010766 5.012011 -0.001245 0.942478 5.005660 5.006315 -0.000655 1.047198 5.000000 5.000000 0.000000 ✸ 8.3.3. Método de Crank-Nicolson De acuerdo con las fórmulas (6.34) y (6.35) el valor δ = uij − ui,j−1 ht
  • 323. Héctor M. Mora E. Métodos Numéricos con Scilab 309 se puede considerar como la aproximación de ∂u ∂t (xi, tj) o bien como la aproximación de ∂u ∂t (xi, tj−1). Es decir, ∂u ∂t (xi, tj−1) = uij − ui,j−1 ht − ht 2 ∂2u ∂t2 (xi, ξ), ξ ∈ [tj−1, tj], ∂u ∂t (xi, tj) = uij − ui,j−1 ht + ht 2 ∂2u ∂t2 (xi, ζ), ζ ∈ [tj−1, tj]. En ambos casos el error es del orden de O(ht). El mismo valor δ puede ser interpretado de una tercera manera usando (6.38): ∂u ∂t (xi, tj−1 + ht/2) = uij − ui,j−1 ht − h2 t 24 ∂3u ∂t3 (xi, τ), τ ∈ [tj−1, tj], El valor tj−1 + ht/2, que será denotado por tj−1/2, es el punto medio entre tj−1 y tj. Al plantear la ecuación diferencial en el punto (xi, tj−1/2) tenemos: ∂u ∂t (xi, tj−1/2) = c2 ∂2u ∂x2 (xi, tj−1/2) Ahora reemplazaremos ∂u ∂t por δ y ∂2u ∂x2 (xi, tj−1/2) por el promedio de apro- ximaciones de ∂2u ∂x2 en dos puntos vecinos: uij − ui,j−1 ht = c2 2 ∂2u ∂x2 (xi, tj−1) + ∂2u ∂x2 (xi, tj) uij − ui,j−1 ht = c2 2 ui−1,j−1 − 2ui,j−1 + ui+1,j−1 h2 x + ui−1,j − 2uij + ui+1,j h2 x Esta fórmula tiene un error de orden O(h2 t +h2 x). Ahora agruparemos dejan- do, a izquierda, los valores buscados, t = tj, y, a derecha, los que se suponen conocidos, t = tj−1: −ρ ui−1,j + µ uij − ρ ui+1,j = ρ ui−1,j−1 + ϕ ui,j−1 + ρ ui+1,j−1 (8.27) α = c2ht h2 x (8.28) ρ = α 2 (8.29) µ = 1 + α (8.30) ϕ = 1 − α (8.31)
  • 324. 310 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES La “molécula” correspondiente a (8.27) es: b b b bc bc bc ui,j ui−1,j ui,j−1 ui−1,j−1 ui+1,j−1 ui+1,j Al utilizar (8.27) para i = 1, 2, ..., m − 1 se obtiene el sistema tridiagonal, que se puede resolver de manera eficiente:         µ −ρ 0 0 ... 0 −ρ µ −ρ 0 ... 0 0 −ρ µ −ρ ... 0 0 0 −ρ µ                 u1j u2j u3j um−1,j         =         ρu0,j−1 + ϕu1,j−1 + ρu2,j−1 + ρu0j ρu1,j−1 + ϕu2,j−1 + ρu3,j−1 ρu2,j−1 + ϕu3,j−1 + ρu4,j−1 ρum−2,j−1 + ϕum−1,j−1 + ρum,j−1 + ρumj         (8.32) Ejemplo 8.4. Resolver la misma ecuación diferencial de los dos ejemplos anteriores por el método de Crank-Nicolson, con m = 10, T = 2, n = 50. hx = 0.1047198 ht = 0.04 α = 0.8105695 ρ = 0.405284 µ = 1.8105695 ϕ = 0.1894305 Para empezar, los valores u00, u10, u20, ..., u10,0 son: 5, 5.309017, 5.5877853, 5.809017, 5.9510565, 6, 5.9510565, 5.809017, 5.5877853, 5.309017, 5. Los valores µ y ρ definen la matriz del sistema (8.32) para todas las ite- raciones. Para t = t1 = 0.04, los términos independientes son: 7.3231813,
  • 325. Héctor M. Mora E. Métodos Numéricos con Scilab 311 5.5644666, 5.7769216, 5.9133261, 5.9603279, 5.9133261, 5.7769216, 5.5644666, 7.3231813. La solución del sistema es : 5.2854339, 5.5429275, 5.7472756, 5.8784752, 5.9236835, 5.8784752, 5.7472756, 5.5429275, 5.2854339. Estos valores corresponden a u11, u21, ..., u91. La siguiente tabla muestra, los valores teóricos, los valores obtenidos por el método y las diferencias, para t = 2,: xi u(xi, 2) ui,50 error 0.000000 5.000000 5.000000 0.000000 0.104720 5.005660 5.005836 -0.000176 0.209440 5.010766 5.011101 -0.000336 0.314159 5.014818 5.015280 -0.000462 0.418879 5.017419 5.017962 -0.000543 0.523599 5.018316 5.018887 -0.000571 0.628319 5.017419 5.017962 -0.000543 0.733038 5.014818 5.015280 -0.000462 0.837758 5.010766 5.011101 -0.000336 0.942478 5.005660 5.005836 -0.000176 1.047198 5.000000 5.000000 0.000000 Si se considera n = 100, los valores para t = 2 son: xi u(xi, 2) ui,100 error 0.000000 5.000000 5.000000 0.000000 0.104720 5.005660 5.005845 -0.000186 0.209440 5.010766 5.011119 -0.000353 0.314159 5.014818 5.015304 -0.000486 0.418879 5.017419 5.017990 -0.000571 0.523599 5.018316 5.018916 -0.000601 0.628319 5.017419 5.017990 -0.000571 0.733038 5.014818 5.015304 -0.000486 0.837758 5.010766 5.011119 -0.000353 0.942478 5.005660 5.005845 -0.000186 1.047198 5.000000 5.000000 0.000000 ✸
  • 326. 312 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES Los resultados obtenidos por el método de Crank-Nicolson con n = 50 son mejores que los obtenidos con el método implı́cito. Los resultados obtenidos con el método de Crank-Nicolson con n = 100 (h2 t = 0.0004, h2 x = 0.0109662, h2 t + h2 x = 0.0113662), no mejoran, sino que empeoran ligeramente los obtenidos con n = 50 (h2 t = 0.0016, h2 x = 0.0109662, h2 t + h2 x = 0.0125662). En este caso el orden del error depende fundamentalmente de hx. Si se uti- liza el método de Crank-Nicolson con m = 20 y n = 50 (h2 t = 0.0016, h2 x = 0.0027416, h2 t + h2 x = 0.0043416) los resultados mejoran notablemente: xi u(xi, 2) ui,50 error 0.000000 5.000000 5.000000 0.000000 0.052360 5.002865 5.002883 -0.000018 0.104720 5.005660 5.005694 -0.000035 0.157080 5.008315 5.008366 -0.000051 0.209440 5.010766 5.010831 -0.000066 0.261799 5.012951 5.013030 -0.000079 0.314159 5.014818 5.014908 -0.000091 0.366519 5.016319 5.016419 -0.000100 0.418879 5.017419 5.017526 -0.000107 0.471239 5.018090 5.018201 -0.000111 0.523599 5.018316 5.018428 -0.000112 0.575959 5.018090 5.018201 -0.000111 0.628319 5.017419 5.017526 -0.000107 0.680678 5.016319 5.016419 -0.000100 0.733038 5.014818 5.014908 -0.000091 0.785398 5.012951 5.013030 -0.000079 0.837758 5.010766 5.010831 -0.000066 0.890118 5.008315 5.008366 -0.000051 0.942478 5.005660 5.005694 -0.000035 0.994838 5.002865 5.002883 -0.000018 1.047198 5.000000 5.000000 0.000000 ✸ 8.4. Hiperbólicas: ecuación de onda Consideramos la siguiente ecuación
  • 327. Héctor M. Mora E. Métodos Numéricos con Scilab 313 ∂2u ∂t2 (x, t) = c2 ∂2u ∂x2 (x, t), 0 x L, 0 t , (8.33) con las condiciones u(0, t) = a, t ≥ 0, (8.34) u(L, t) = b, t ≥ 0, (8.35) u(x, 0) = f(x), 0 ≤ x ≤ L, (8.36) ∂u ∂t (x, 0) = g(x), 0 ≤ x ≤ L. (8.37) Esta ecuación describe el movimiento en el tiempo de una cuerda vibrante, de longitud L, fija en los extremos y de la que se conoce la posición inicial y la velocidad inicial. Generalmente, los valores constantes a y b son iguales y nulos. 8.4.1. Método explı́cito La región es la misma de la ecuación del calor y se divide exactamente de la misma forma. Sea T un tiempo adecuado: hx = L m ht = T n xi = i hx, i = 0, 1, 2, ..., m tj = j ht, j = 0, 1, 2, ..., n. Se desea conocer los valores uij, buenas aproximaciones de u(xi, tj). Se uti- liza la ecuación diferencial en el punto (xi, tj): ∂2u ∂t2 (xi, tj) = c2 ∂2u ∂x2 (xi, tj) (8.38) Aproximando las segundas derivadas por diferencias finitas en el punto (xi, tj) se obtiene: ui,j−1 − 2uij + ui,j+1 h2 t = c2 ui−1,j − 2uij + ui+1,j h2 x .
  • 328. 314 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES Si se suponen conocidos los valores para t = tj y para t = tj−1, entonces se puede obtener ui,j+1: ui,j+1 = βuij + α(ui−1,j + ui+1,j) − ui,j−1 (8.39) α = c2 h2 t h2 x (8.40) β = 2 − 2α (8.41) La molécula es: b b b b bc uij ui−1,j ui+1,j ui,j−1 ui,j+1 La fórmula (8.39), con error de orden O(h2 x+h2 t ), se puede aplicar fácilmente, salvo en la obtención de los valores ui1, ya que serı́a necesario conocer los valores ui,−1. Aproximaciones de estos valores se obtienen utilizando las condiciones (8.37) sobre la velocidad inicial, mediante la siguiente aproxi- mación cuyo error es del orden de O(h2 t ), gi = g(xi) ≈ ui1 − ui,−1 2ht , ui,−1 = ui1 − 2ht gi , (8.42) Reemplazando en (8.39) para j = 0 y teniendo en cuenta que uk0 = fk = f(xk), ui1 = βfi + α(fi−1 + fi+1) − (ui1 − 2htgi) 2ui1 = βfi + α(fi−1 + fi+1) + 2htgi ui1 = β 2 fi + α 2 (fi−1 + fi+1) + htgi, i = 1, 2, ..., m − 1 (8.43) Una vez calculados los valores ui1 por medio de (8.43), se utiliza (8.39) para j = 1, 2, ..., n − 1, teniendo en cuenta que u0j = a y umj = b. Ejemplo 8.5. Resolver la ecuación diferencial
  • 329. Héctor M. Mora E. Métodos Numéricos con Scilab 315 ∂2u ∂t2 (x, t) = 2.25 ∂2u ∂x2 (x, t), 0 x π/2, 0 t , con las condiciones u(0, t) = 0, t ≥ 0, u(π/2, t) = 0, t ≥ 0, u(x, 0) = sen(2x), 0 ≤ x ≤ π/2, ∂u ∂t (x, 0) = 3 sen(2x), 0 ≤ x ≤ π/2, utilizando T = 8, m = 10, n = 80. Se puede comprobar que la solución exacta de esta ecuación diferencial es u(x, t) = sen(2x)( sen(3t) + cos(3t) ) Para la solución numérica hx = 0.1571 ht = 0.1 α = 0.911891 β = 0.176219 Los valores iniciales ui0 son: 0, 0.3090170, 0.5877853, 0.8090170, 0.9510565, 1, 0.9510565, 0.8090170, 0.5877853, 0.3090170, 0. Para calcular los valores ui1 se utiliza (8.43) y se obtiene: 0, 0.3879303, 0.7378873, 1.0156148, 1.1939268, 1.2553689, 1.1939268, 1.0156148, 0.7378873, 0.3879303, 0. Los demás valores uik se calculan usando (8.39). Ası́ los valores ui2 son: 0, 0.4322161, 0.8221239, 1.1315565, 1.3302245, 1.3986808, 1.3302245, 1.1315565, 0.8221239, 0.4322161, 0. A continuación aparecen: los valores xi , los valores u(xi, 8) exactos y los valores aproximados obtenidos por el método:
  • 330. 316 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES xi u(xi, 8) ui,80 0.0000 0.0000 0.0000 0.1571 -0.1488 -0.1567 0.3142 -0.2830 -0.2981 0.4712 -0.3895 -0.4103 0.6283 -0.4578 -0.4823 0.7854 -0.4814 -0.5072 0.9425 -0.4578 -0.4823 1.0996 -0.3895 -0.4103 1.2566 -0.2830 -0.2981 1.4137 -0.1488 -0.1567 1.5708 0.0000 0.0000 Este método presenta problemas de inestabilidad. Se puede garantizar la estabilidad, mas no la exactitud, si c ht hx ≤ 1. (8.44) En el ejemplo anterior cht/hx = 0.955. Si se hubiera aplicado el método con n = 70, cht/hx = 1.091, los resultados serı́an: xi u(xi, 8) ui,70 0.0000 0.0000 0.0000 0.1571 -0.1488 6409754.0604 0.3142 -0.2830 -12192077.0562 0.4712 -0.3895 16780953.1666 0.6283 -0.4578 -19727193.7389 0.7854 -0.4814 20742397.1952 0.9425 -0.4578 -19727192.0929 1.0996 -0.3895 16780950.5034 1.2566 -0.2830 -12192074.3931 1.4137 -0.1488 6409752.4144 1.5708 0.0000 0.0000 ✸
  • 331. Héctor M. Mora E. Métodos Numéricos con Scilab 317 8.4.2. Método implı́cito Consideremos la ecuación diferencial en el punto (xi, tj), ∂2u ∂t2 (xi, tj) = c2 ∂2u ∂x2 (xi, tj) , pero cambiando la doble derivada parcial con respecto a x, en el punto (xi, tj), por el promedio de la derivada en los puntos vecinos (xi, tj−1) y (xi, tj+1) : ∂2u ∂t2 (xi, tj) = c2 2 ∂2u ∂x2 (xi, tj−1) + ∂2u ∂x2 (xi, tj+1) Ahora utilizamos aproximación por diferencias finitas: ui,j−1 − 2uij + ui,j+1 h2 t = c2 2 ui−1,j−1 − 2ui,j−1 + ui+1,j−1 h2 x + ui−1,j+1 − 2ui,j+1 + ui+1,j+1 h2 x Ahora dejamos a la izquierda los valores desconocidos y a la derecha los que son conocidos: 2ui,j−1 − 4uij + 2ui,j+1 = α(ui−1,j−1 − 2ui,j−1 + ui+1,j−1 + ui−1,j+1 − 2ui,j+1 + ui+1,j+1) −αui−1,j+1 + γui,j+1 − αui+1,j+1 = 4uij − γui,j−1 + α(ui−1,j−1 + ui+1,j−1) (8.45) α = c2h2 t h2 x (8.46) γ = 2 + 2α (8.47) Aplicando la igualdad (8.45) en los puntos (x1, tj), (x2, tj), ..., (xm−1, tj), se obtiene el siguiente sistema tridiagonal, de tamaño (m − 1) × (m − 1):
  • 332. 318 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES         γ −α −α γ −α 0 −α γ −α 0 0 0 −α γ                u1,j+1 u2,j+1 . . . um−2,j+1 um−1,j+1        =        4u1j − γu1,j−1 + α(a + u2,j−1) 4u2j − γu2,j−1 + α(u1,j−1 + u3,j−1) . . . 4um−2,j − γum−2,j−1 + α(um−3,j−1 + um−1,j−1) 4um−1,j − γum−1,j−1 + α(um−2,j−1 + b)        (8.48) Este sistema tridiagonal se puede resolver eficientemente. Para empezar, también es necesario calcular los valores ui1 por medio de (8.43). Después es necesario resolver n − 1 veces el sistema (8.48). Este método implı́cito no es inestable. Ejemplo 8.6. Resolver la ecuación diferencial ∂2u ∂t2 (x, t) = 2.25 ∂2u ∂x2 (x, t), 0 x π/2, 0 t , con las condiciones u(0, t) = 0, t ≥ 0, u(π/2, t) = 0, t ≥ 0, u(x, 0) = sen(2x), 0 ≤ x ≤ π/2, ∂u ∂t (x, 0) = 3 sen(2x), 0 ≤ x ≤ π/2, utilizando el método implı́cito con T = 2, m = 10, n = 100. La solución exacta de esta ecuación diferencial es u(x, t) = sen(2x)( sen(3t) + cos(3t) )
  • 333. Héctor M. Mora E. Métodos Numéricos con Scilab 319 Para la solución numérica hx = 0.1571 ht = 0.02 α = 0.036476 β = 1.927049 γ = 2.072951 Los valores inciales ui0 son: 0, 0.3090170, 0.5877853, 0.8090170, 0.9510565, 1, 0.9510565, 0.8090170, 0.5877853, 0.3090170, 0. Para calcular los valores ui1 se utiliza (8.43) y se obtiene: 0, 0.3270063, 0.6220030, 0.8561137, 1.006422, 1.0582148, 1.006422, 0.8561137, 0.6220030, 0.3270063, 0. A continuación aparecen: los valores xi , los valores u(xi, 2) exactos y los valores aproximados obtenidos por el método: xi u(xi, 2) ui,100 0.0000 0.0000 0.0000 0.1571 0.2104 0.1986 0.3142 0.4001 0.3778 0.4712 0.5507 0.5200 0.6283 0.6474 0.6113 0.7854 0.6808 0.6428 0.9425 0.6474 0.6113 1.0996 0.5507 0.5200 1.2566 0.4001 0.3778 1.4137 0.2104 0.1986 1.5708 0.0000 0.0000 Ejercicios 8.1 Considere la ecuación diferencial ∂2u ∂x2 (x, y)+ ∂2u ∂y2 (x, y) = −2 sen(x) sen(y), en el rectángulo [0, π] × [0, π] con la condición u(x, y) = 0 en la fron- tera. La solución exacta es u(x, y) = sen(x) sen(y). Obtenga la solución
  • 334. 320 CAPÍTULO 8. ECUACIONES DIFERENCIALES PARCIALES aproximada para diferentes valores de nx y ny. Compare con la solu- ción exacta. 8.2 Considere la ecuación diferencial ∂2u ∂x2 (x, y)+ ∂2u ∂y2 (x, y) = −2 sen(x) sen(y), en un rectángulo diferente del anterior. Suponga que la solución exacta es u(x, y) = sen(x) sen(y) y dé las condiciones de frontera adecuadas en el rectángulo utilizado. Obtenga la solución aproximada para difer- entes valores de nx y ny. Compare con la solución exacta. 8.3 Considere la ecuación diferencial ∂u ∂t (x, t) = ∂2u ∂x2 (x, t), para 0 x π y 0 t con las condiciones u(0, t) = u(π, t) = 2, u(x, 0) = sen(x). La solución exacta es u(x, t) = sen(x)e−t + 2. Obtenga la solución aproximada por el método explı́cito, por el implı́cito y por el de Crank- Nicolson para t = 2. Use diferentes valores de m y de n. Compare con la solución exacta. 8.4 Considere la ecuación diferencial ∂2u ∂t2 (x, t) = ∂2u ∂x2 (x, t), para 0 x 1 y 0 t con las condiciones u(0, t) = u(1, t) = 0, u(x, 0) = sen(πx), ∂u ∂t (x, 0) = 0. La solución exacta es u(x, t) = sen(πx) cos(πt). Obtenga la solución aproximada por el método explı́cito y por el implı́cito para t = 3 con m = 10, n = 60 y con n = 20. Utilice otros valores de m y n. Compare con la solución exacta.
  • 335. Capı́tulo 9 Valores propios 9.1. Preliminares Sea A ∈ Rn×n una matriz cuadrada real. Un número λ, real o complejo, es un valor propio de A si existe un vector columna real o complejo no nulo v ∈ Cn×1 tal que Av = λv. En ese caso, se dice que v es un vector propio asociado al valor propio λ. Fácilmente se comprueba que si α 6= 0, entonces también αv es un vector propio asociado a λ. Generalmente se usan más los vectores propios normal- izados, es decir, ||v||2 = 1. Mientras no se diga lo contrario, en este documento únicamente se consideran matrices reales y los métodos serán para matrices reales. Ejemplo 9.1. Sea A =   8 2 1 1 7 3 1 1 6   . Como   8 2 1 1 7 3 1 1 6     9 7 4   =   90 70 40   , entonces 10 es un valor propio de A y [9 7 4]T es un vector propio de A asociado a 10. El vector columna [0.7448453 0.5793241 0.3310424]T es un vector propio normalizado asociado a 10. ✸ 321
  • 336. 322 CAPÍTULO 9. VALORES PROPIOS Con frecuencia se utiliza otra caracterización de los valores propios. Av = λv Av − λv = 0 Av − λIv = 0 (A − λI)v = 0 Como v 6= 0 es solución de un sistema homogéneo, entonces A no puede ser invertible, es decir det(A − λI) = 0. (9.1) Como A es real, se puede demostrar que p(λ) = det(A−λI) es un polinomio real de grado n: p(λ) = pA(λ) = α0 + α1λ + α2λ2 + · · · + αnλn . (9.2) Este polinomio se llama el polinomio caracterı́stico de A (algunas veces se considera que el polinomio caracterı́stico es det(λI − A)). Entonces, para matrices pequeñas, se pueden calcular los valores propios, obteniendo las raı́ces del polinomio caracterı́stico de A. Ejemplo 9.2. A = 1 −2 3 4 det(A − λI) = det 1 − λ −2 3 4 − λ = (1 − λ)(4 − λ) + 8 = λ2 − 5λ + 10 λ1 = 2.5 + i √ 15/2 λ2 = 2.5 − i √ 15/2 . ✸ Denotaremos con espec(A) el conjunto de valores propios de A y λ o λi será un valor propio cualquiera. Para el complejo z = a + ib, el módulo, norma o tamaño será |z| = p a2 + b2, que coincide con el valor absoluto para números reales.
  • 337. Héctor M. Mora E. Métodos Numéricos con Scilab 323 A continuación algunas definiciones y resultados sobre valores propios. Es- tos resultados se no presetan necesariamente en el orden conceptual ni en orden para una posible demostración. Además un resultado puede ser coro- lario de otro o puede corresponder al mismo concepto dicho de otra forma. Hay también algunos resultados para matrices complejas, simplemente para que sean coherente con los resultados de unos libros de Álgebra Lineal que presentan resultados de manera general para matrices complejas. a. Dos matrices A y B son semejantes si existe una matriz C tal que A = C−1 BC. b. A es ortogonal si A−1 = AT . c. Si A ∈ Cn×n, se denota con A∗ o AH la matriz transjugada de A, es decir, A∗ = (Ā)T = AT . d. Si A ∈ Cn×n, se dice que A es hermitiana (o hermı́tica) si A = A∗. e. Si A ∈ Cn×n, se dice que A es unitaria si A−1 = A∗. f. Una matriz A es diagonalizable si es semejante una matriz diagonal, es decir, existe B invertible y D diagonal tales que D = B−1 AB. Resultados: 1. Los coeficientes del polinomio caracterı́stico satisfacen: αn = (−1)n αn−1 = (−1)n−1 traza(A) α0 = det(A). 2. n X i=1 λi = traza(A) 3. n Y i=1 λi = det(A)
  • 338. 324 CAPÍTULO 9. VALORES PROPIOS 4. Hay n valores propios, reales o complejos, y pueden estar repetidos. 5. Si n es impar, hay por lo menos un valor propio real. 6. El número de valores propios estrictamente complejos (no reales) es par. 7. Sean λ1, λ2, ..., λk valores propios distintos de A y v1, v2, ..., vk vectores propios asociados correspondientes, entonces estos vectores propios son linealmente independientes. 8. Teorema de Cayley-Hamilton. Si p es el polinomio caracterı́stico de A, entonces p(A) = 0, es decir, α0I + α1A + α2A2 + · · · + αnAn = 0. 9. Si A y B son semejantes, A = C−1BC, entonces espec(A) = espec(B). 10. Teorema de Schur. Toda matriz A es semejante a una matriz triangu- lar superior, cuyos elementos diagonales son los valores propios de A. Dicho de otra forma, existe U invertible y T triangular superior tales que T = U−1AU. Esta matriz U es unitaria. 11. Si U es ortogonal, ||Ux||2 = ||x||2. Ası́, se dice que las matrices ortog- onales conservan la norma euclidiana. 12. Si A es simétrica, todos los valores propios son reales. 13. Si A es diagonal, triangular superior o triangular inferior, entonces los valores propios son los elementos diagonales. 14. Teorema espectral. Si A es simétrica, entonces existen vectores propios v1, v2, ..., vn ortonormales. Si Q = v1 v2 ... vn , entonces Q es ortogonal y QT AQ es una matriz diagonal (con los valores propios de A en la diagonal). 15. Sea A simétrica. La matriz es definida positiva si y solamente si los valores propios son positivos. 16. Sea A simétrica. La matriz es semidefinida positiva si y solamente si los valores propios son no negativos. 17. Si A no es invertible, λ = 0 es un valor propio. 18. Si A es invertible, λ ∈ espec(A) sssi 1/λ ∈ espec(A−1).
  • 339. Héctor M. Mora E. Métodos Numéricos con Scilab 325 19. λ ∈ espec(A) sssi λ − t ∈ espec(A − tI). 20. Para cualquier norma matricial generada || ||, |λ| ≤ ||A||. 21. Si A es ortogonal, |λ| = 1, para cualquier valor propio real o complejo. 9.1.1. En Scilab Los valores propios se calculan por medio de la función spec 1. Si se ha definido una matriz cuadrada a , entonces la orden spec(a) da como resultado un vector columna con los n valores propios. La orden [V, L] = spec(a) produce una matriz L diagonal, cuyos elementos diagonales son los valores propios y una matriz V, cuyas columnas son vectores propios normalizados asociados correspondientes. 9.2. Método de la potencia Este método se puede aplicar para hallar λ1, el valor propio dominante de una matriz diagonalizable A, cuando este existe, o sea, si |λ1| |λ2| ≥ |λ3| ≥ · · · ≥ |λn|. Una primera versión del método de la potencia es muy sencilla. Dado un x0 inicial xk+1 = Axk , k = 0, 1, 2, ... (9.3) Sea {v1, v2, ..., vn} una base formada por vectores propios asociados a los valores propios λ1, λ2, ..., λn, respectivamente. Entonces, x0 6= 0 se puede 1 En Matlab se usa eig.
  • 340. 326 CAPÍTULO 9. VALORES PROPIOS expresar como combinación de los vectores propios x0 = α1v1 + α2v2 + ... + αnvn x1 = Ax0 x1 = A(α1v1 + α2v2 + ... + αnvn ) x1 = α1Av1 + α2Av2 + ... + αnAvn x1 = α1λ1v1 + α2λ2v2 + ... + αnλnvn x2 = Ax1 = A(α1λ1v1 + α2λ2v2 + ... + αnλnvn ) x2 = α1λ1Av1 + α2λ2Av2 + ... + αnλnAvn x2 = α1λ2 1v1 + α2λ2 2v2 + ... + αnλ2 nvn . . . xk = α1λk 1v1 + α2λk 2v2 + ... + αnλk nvn xk = α1λk 1 v1 + n X i=2 αi α1 λi λ1 k vi ! Esta última factorización está bien definida si α1 6= 0, o sea, si x0 no es ortogonal a v1. Como |λi/λ1| 1, entonces para valores grandes de k xk ≈ α1λk 1v1 . De manera análoga, xk+1 ≈ α1λk+1 1 v1 . Entonces, xk+1 ≈ λ1xk . Al tomar xk j , una componente no nula de xk, xk+1 j xk j ≈ λ1.
  • 341. Héctor M. Mora E. Métodos Numéricos con Scilab 327 Ejemplo 9.3. Partiendo de x0 = (1, 1, 1), hallar el valor propio dominante de A =   −1 −2 −3 −4 −5 −6 −7 −8 −8   . k xk 1 xk 2 xk 3 xk 1/xk−1 1 1 -6.000000 -15.000000 -23.000000 -6.00000000 2 105.000000 237.000000 346.000000 -17.50000000 3 -1617.000000 -3681.000000 -5399.000000 -15.40000000 4 25176.000000 57267.000000 83959.000000 -15.56957328 5 -3.915870e+05 -8.907930e+05 -1.306040e+06 -15.55397998 6 6.091293e+06 1.385655e+07 2.031577e+07 -15.55540148 7 -9.475172e+07 -2.155426e+08 -3.160177e+08 -15.55527176 8 1.473890e+09 3.352826e+09 4.915744e+09 -15.55528360 9 -2.292677e+10 -5.215415e+10 -7.646579e+10 -15.55528252 10 3.566324e+11 8.112726e+11 1.189447e+12 -15.55528262 11 -5.547518e+12 -1.261957e+13 -1.850218e+13 -15.55528261 12 8.629321e+13 1.963010e+14 2.878067e+14 -15.55528261 ✸ El mecanismo anterior puede conducir hasta una buena aproximación de λ1, pero tiene un inconveniente: ||xk|| → ∞. La solución es normalizar. Sea z0 = x0. zk = Axk−1 , k = 1, 2, 3, ... (9.4) xk = zk ||zk||2 . (9.5) Ejemplo 9.4. Usar las fórmulas anteriores, partiendo de x0 = (1, 1, 1), para hallar el valor propio dominante de A =   −1 −2 −3 −4 −5 −6 −7 −8 −8   .
  • 342. 328 CAPÍTULO 9. VALORES PROPIOS k xk 1 xk 2 xk 3 zk 1 /xk−1 1 1 -0.213470 -0.533676 -0.818303 -6.00000000 2 0.242870 0.548191 0.800313 -17.50000000 3 -0.240212 -0.546829 -0.802045 -15.40000000 4 0.240454 0.546954 0.801887 -15.56957328 5 -0.240432 -0.546942 -0.801902 -15.55397998 6 0.240434 0.546943 0.801900 -15.55540148 7 -0.240434 -0.546943 -0.801901 -15.55527176 8 0.240434 0.546943 0.801901 -15.55528360 9 -0.240434 -0.546943 -0.801901 -15.55528252 10 0.240434 0.546943 0.801901 -15.55528262 11 -0.240434 -0.546943 -0.801901 -15.55528261 12 0.240434 0.546943 0.801901 -15.55528261 ✸ El siguiente esquema, además de incluir la normalización, tiene una manera más eficiente de aproximar λ. Algoritmo de la potencia para k = 1, ...,maxit zk = Axk−1 xk = zk ||zk||2 λk 1 = xkT zk si |λk 1 − λk−1 1 | ≤ ε, parar fin-para El proceso se detiene satisfactoriamente cuando dos aproximaciones, λk 1 y λk−1 1 , son muy parecidas. La salida no deseada se tiene cuando se llega al número máximo de iteraciones. La rapidez de la convergencia está ligada al valor |λ1/λ2|. Si este valor es cercano a 1 , la convergencia es lenta. Si es mucho mayor que 1 , la convergencia es rápida. Ejemplo 9.5. Hallar el valor propio dominante de A =   −1 −2 −3 −4 −5 −6 −7 −8 −8   partiendo de x0 = (1, 1, 1).
  • 343. Héctor M. Mora E. Métodos Numéricos con Scilab 329 k zk 1 zk 2 zk 3 xk 1 xk 2 xk 3 λk 1 1 -6.000000 -15.000000 -23.000000 -0.213470 -0.533676 -0.818303 28.10693865 2 3.735732 8.432082 12.310128 0.242870 0.548191 0.800313 15.38164285 3 -3.740191 -8.514312 -12.488120 -0.240212 -0.546829 -0.802045 15.57034584 4 3.740005 8.507264 12.472478 0.240454 0.546954 0.801887 15.55390218 5 -3.740024 -8.507910 -12.473909 -0.240432 -0.546942 -0.801902 15.55540852 6 3.740022 8.507851 12.473779 0.240434 0.546943 0.801900 15.55527112 7 -3.740022 -8.507857 -12.473791 -0.240434 -0.546943 -0.801901 15.55528366 8 3.740022 8.507856 12.473790 0.240434 0.546943 0.801901 15.55528251 9 -3.740022 -8.507856 -12.473790 -0.240434 -0.546943 -0.801901 15.55528262 10 3.740022 8.507856 12.473790 0.240434 0.546943 0.801901 15.55528261 11 -3.740022 -8.507856 -12.473790 -0.240434 -0.546943 -0.801901 15.55528261 El último xk obtenido es una buena aproximación de un vector propio norma- lizado asociado a λ1. ✸ 9.3. Método de la potencia inversa Este método se puede aplicar para hallar λn, el valor propio menos domi- nante de una matriz diagonalizable e invertible A, cuando este existe, o sea, si |λ1| ≥ |λ2| ≥ |λ3| ≥ · · · |λn| 0. Si A es invertible y tiene valores propios λ1, λ2,..., λn, entonces los valores propios de A−1 son 1 λ1 , 1 λ2 , ..., 1 λn .
  • 344. 330 CAPÍTULO 9. VALORES PROPIOS El valor propio dominante de A−1 es justamente 1/λn. Entonces, se puede aplicar el método de la potencia a A−1. En lugar de escribir explı́citamente zk = A−1xk−1 es preferible presentarlo como la solución del sistema Azk = xk−1. Potencia inversa para k = 1, ...,maxit resolver Azk = xk−1 xk = zk ||zk||2 σk 1 = xkT zk si |σk 1 − σk−1 1 | ≤ ε, parar fin-para Cuando se obtenga la convergencia, λn ≈ 1/σk 1 . Ejemplo 9.6. Aplicar, partiendo de x0 = (1, 1, 1), el método de la potencia inversa para obtener el valor propio λn de la matriz A =   −1 −2 −3 −4 −5 −6 −7 −8 −8   .
  • 345. Héctor M. Mora E. Métodos Numéricos con Scilab 331 k zk 1 zk 2 zk 3 xk 1 xk 2 xk 3 σk 1 1 1.000000 -1.000000 0.000000 0.707107 -0.707107 0.000000 1.41421356 2 3.771236 -5.421152 2.121320 0.543702 -0.781572 0.305832 6.93621735 3 3.839896 -5.810817 2.412678 0.520948 -0.788337 0.327321 7.37098425 4 3.818745 -5.807259 2.424942 0.518766 -0.788900 0.329422 7.36121039 5 3.816531 -5.806630 2.425988 0.518557 -0.788954 0.329622 7.35991006 6 3.816317 -5.806567 2.426087 0.518537 -0.788959 0.329641 7.35978177 7 3.816297 -5.806561 2.426096 0.518535 -0.788960 0.329643 7.35976946 8 3.816295 -5.806560 2.426097 0.518535 -0.788960 0.329643 7.35976828 9 3.816294 -5.806560 2.426097 0.518535 -0.788960 0.329643 7.35976817 10 3.816294 -5.806560 2.426097 0.518535 -0.788960 0.329643 7.35976816 11 3.816294 -5.806560 2.426097 0.518535 -0.788960 0.329643 7.35976815 12 3.816294 -5.806560 2.426097 0.518535 -0.788960 0.329643 7.35976815 Entonces, λn ≈ 1/7.35976815 = 0.135873845 . ✸ 9.4. Factorización QR Sea A ∈ Rm×n. Una factorización QR de A consiste en encontrar matrices Q y R tales que A = QR. Q ∈ Rm×m es ortogonal. R ∈ Rm×n es triangular superior ( rij = 0 si i j ).
  • 346. 332 CAPÍTULO 9. VALORES PROPIOS El proceso de factorización QR, por medio de diferentes clases de matrices ortogonales, va obteniendo ceros en lugares adecuados. Supongamos que por medio de Q1 ortogonal, la matriz Q1A tiene ceros en sitios adecuados. Ahora, con Q2 ortogonal, se busca que al hacer el producto Q2Q1A haya ceros en otros sitios, sin perder los que ya tenı́a Q1A. Finalmente, se obtiene: QrQr−1 · · · Q2Q1A = R triangular superior. Como las matrices Q son ortogonales, entonces QT 1 QT 2 · · · QT r−1QT r QrQr−1 · · · Q2Q1A = QT 1 QT 2 · · · QT r−1QT r R A = QT 1 QT 2 · · · QT r−1QT r | {z } R A = QR En los programas, generalmente se empieza con A y sobre ella se va rees- cribiendo el producto Q1A, después Q2Q1A. Al final se tendrá, en donde estaba A, la matriz R. Por otro lado, se puede empezar con Q = I, y encima se va reescribiendo el producto IQT 1 , después QT 1 QT 2 . Finalmente, en Q se tendrá el producto QT 1 QT 2 · · · QT r−1QT r . 9.4.1. Matrices de Householder Sea v ∈ Rn×1, v 6= 0, u = v/||v|| (vector columna de norma 1). Una matriz de Householder es una matriz de la forma H = Hv = H(v) = In − 2 vT v v vT = In − 2uuT . A veces, al mismo tiempo que se obtiene el vector v deseado, se calcula el número β = 2 vT v , entonces es común expresar H en función de v y de β, aunque β no es necesario. Simplemente, desde el punto de vista de eficiencia, si se conoce β no es interesante volverlo a calcular (son 2n − 1 flops. H = H(v, β) = In − βv vT . La matriz H tiene dos caracterı́sticas importantes, es simétrica y ortogonal.
  • 347. Héctor M. Mora E. Métodos Numéricos con Scilab 333 Además, si x ∈ Rn×1 se puede escoger v para que Hvx ∈ e1 . En Álgebra Lineal, dados x1, x2, ... xk vectores del espacio vectorial en consideración, x1, x2, ..., xk denota el subespacio generado por estos vectores, es decir, el conjunto de todas las combinaciones lineales de estos vectores: x1 , x2 , ..., xk = {λ1x1 + λ2x2 + · · · + λkxk : λi ∈ R}. Entonces, Hvx = αe1 . Sea U = {ξ ∈ Rn×1 : vT ξ = 0}, o sea, el hiperplano perpendicular a v y que pasa por el origen. Dicho de otra forma, U es el complemento ortogonal del subespacio generado por v, U = v ⊥. Sea x ∈ Rn×1, y = Hx, p = (x + y)/2, o sea, el punto medio del segmento que une a x con y. Se puede verificar que vT p = 0 , o sea, p ∈ U . Si z = x − p se puede verificar que pT z = 0. Como p + z = x, entonces se deduce que p es la proyección de x sobre U, y como p es el punto medio entre x y y, entonces y es el punto simétrico de x con respecto al hiperplano U o la reflexión de x con respecto a U. Como H es ortogonal, entonces ||Hx|| = ||x||, es decir, ||y|| = ||x||. Si se desea que y = αe1, entonces y = ±||x|| e1 . Sea ξ ∈ U, o sea, vT ξ = 0. Fácilmente se comprueba que (x − y)T ξ = 0 . Si x = y, entonces x = ±||x|| e1. Basta con tomar H = I, y ası́, Hx = λe1. Si x 6= y, se puede tomar v = x ∓ ||x||e1
  • 348. 334 CAPÍTULO 9. VALORES PROPIOS Ejemplo 9.7. x =   −2 −1 2   , y =   3 0 0   , v =   −5 −1 2   , H =   −2/3 −1/3 2/3 −1/3 14/15 2/15 2/3 2/15 11/15   O también, x =   −2 −1 2   , y =   −3 0 0   , v =   1 −1 2   , H =   2/3 1/3 −2/3 1/3 2/3 2/3 −2/3 2/3 −1/3   Es usual escoger v tal que v1 = 1, ası́ solo se requiere almacenar los valores v2, v3, ..., vn. Generalmente estos valores se pueden almacenar donde estaban x2, x3, xn. Además, no es necesario construir explı́citamente H, basta con conocer v y β. Denotaremos por H(x) la matriz que proyecta x sobre el subespacio e1 . La siguiente función, ver [Par80] y [GoV96], presenta una manera eficiente de calcular v y β a partir de un vector columna x. Fue escrita en seudocódigo, utilizando parcialmente la notación de Matlab o Scilab. [v, β] = vHouse(x) n = dim (x) t = x(2:n)T x(2:n) v = [ 1 ; x(2:n) ] si t = 0 β = 0 sino ν = p x2 1 + t si x1 ≤ 0 v1 = x1 − ν sino v1 = −t/(x1 + ν) fin-si β = 2v2 1/(t + v2 1) v = v/v1 fin-si fin vHouse En resumen, dado x =∈ Rn,
  • 349. Héctor M. Mora E. Métodos Numéricos con Scilab 335 [v, β] = vHouse(x) H(x) = H(v, β) = I − βvvT . Ejemplo 9.8. Encontrar v y β para x = −2 −1 2 T . v =   1 1/5 −2/5   , β = 5 3 · 9.4.2. Matrices de Givens Esta es otra clase de matrices ortogonales. Sea θ un ángulo y c = cos(θ) s = sen(θ), La matriz de Givens, en Rn×n, es una rotación definida en el plano de las variables i y k: G = G(i, k, c, s, n) =                1 0 · · · 0 · · · 0 · · · 0 0 1 · · · 0 · · · 0 · · · 0 . . . ... 0 0 · · · c s 0 . . . ... 0 0 · · · −s c 0 . . . ... 0 0 · · · 0 · · · 0 · · · 1                i k El producto y = GT x se calcula muy fácilmente: yj =      cxi − sxk si j = i, sxi + cxk si j = k, xj en los demás casos.
  • 350. 336 CAPÍTULO 9. VALORES PROPIOS Si se desea que yk = 0, basta con tomar c = xi q x2 i + x2 k , s = −xk q x2 i + x2 k . En la práctica, es mejor utilizar la siguiente versión para el cálculo de c y s (ver [GoV96]), [c, s] = csGivens(a, b) si b = 0 c = 1 s = 0 sino si |b| |a| t = −a/b s = 1/ √ 1 + t2 c = st sino t = −b/a c = 1/ √ 1 + t2 s = ct fin-si fin-si fin csGivens Por medio de esta función c s −s c T a b = r 0 . Ejemplo 9.9. Calcular c y s para el vector 2 −3 T . Al aplicar la función csGivens se obtiene: c = 0.5547002 s = 0.8320503 y ası́ c s −s c T 2 −3 = 3.6055513 0 ✸
  • 351. Héctor M. Mora E. Métodos Numéricos con Scilab 337 9.4.3. Factorización QR con matrices de Householder Para facilitar la presentación del algoritmo, usaremos la siguiente notación. Si H ∈ Rp×p es una matriz de Householder, con p ≤ n, b H = b H(n, H) =      H si p = n In−p 0 0 H # si p n La matriz b H ∈ Rn×n también es ortogonal. En lo que sigue se supondrá que A siempre indica la matriz obtenida al hacer los productos efectuados hasta este momento, o sea, Qk · · · Q2Q1Ainicial . Inicialmente se supone que Q = Im y se buscan ceros por debajo de a11, o sea, se construye Q1 = H1 ∈ Rm×m tal que H1A( : , 1) = α1e1 ∈ Rm×1 : [v, β] = vHouse(A(1:m, 1)) H1 = H(v, β) A = H1A Q = QHT 1 = QH1. En seguida, se trabaja únicamente con las filas 2,..., m de A. Se construye H2 ∈ R(m−1)×(m−1) tal que H2 A(2:m, 2) = α2e1 ∈ R(m−1)×1, o sea, [v, β] = vHouse(A(2:m, 2)) H2 = H(v, β) b H2 = b H(m, H2) A = b H2A Q = Q b H2
  • 352. 338 CAPÍTULO 9. VALORES PROPIOS En general, [v, β] = vHouse(A(k:m, k)) Hk = H(v, β) b Hk = b H(m, Hk) A = b HkA Q = Q b Hk Como se supone que en la iteración k, las columnas 1, ..., k−1 de A son nulas debajo de la diagonal, entonces no es necesario recalcularlas. La presentación formal anterior es exacta pero ineficiente, es mejor [v, β] = vHouse(A(k:m, k)) Hk = H(v, β) A(k:m, : ) = HkA(k:m, : ) Q( : , k:m) = Q( : , k:m)Hk A continuación hay dos presentaciones de la factorización QR por medio de matrices de Householder, la primera versión es más fácil de presentar. [Q, R] = QR_House (A) [m, n] = tamaño(A) Q = Im para k = 1 : min(m, n) [v, β] = vHouse(A(k:m, k) H = H(v, β) b H = b H(m, H) A = b H A Q = Q b H fin-para R = A fin QR_House Esta segunda versión es mucho más eficiente.
  • 353. Héctor M. Mora E. Métodos Numéricos con Scilab 339 [Q, R] = QR_House (A) [m, n] = tamaño(A) Q = Im para k = 1 : min(m, n) [v, β] = vHouse(A(k:m, k) H = H(v, β) A(k:m, k:n) = H A(k:m, k:n) Q( : , k:m) = Q( : , k:m) H fin-para R = A fin QR_House Ejemplo 9.10. Obtener la factorización QR de A =       2 3 4 5 4 3 2 1 0 −1 −2 −3 −4 −5 −4       utilizando matrices de Householder. k = 1 beta = 0.717157 v : 1 -0.98598563 -0.39439425 0.19719713 0.78878851 H = 0.2828427 0.7071068 0.2828427 -0.1414214 -0.5656854 0.7071068 0.3028029 -0.2788789 0.1394394 0.5577577 0.2828427 -0.2788789 0.8884485 0.0557758 0.2231031 -0.1414214 0.1394394 0.0557758 0.9721121 -0.1115515 -0.5656854 0.5577577 0.2231031 -0.1115515 0.5537938 A = 7.0710678 7.0710678 5.939697 0 -0.0140144 1.0874867 0 -0.6056057 -0.7650053 0 -1.1971971 -2.6174973 0 -1.7887885 -2.4699893 Q =
  • 354. 340 CAPÍTULO 9. VALORES PROPIOS 0.2828427 0.7071068 0.2828427 -0.1414214 -0.5656854 0.7071068 0.3028029 -0.2788789 0.1394394 0.5577577 0.2828427 -0.2788789 0.8884485 0.0557758 0.2231031 -0.1414214 0.1394394 0.0557758 0.9721121 -0.1115515 -0.5656854 0.5577577 0.2231031 -0.1115515 0.5537938 ----------------------------------------------------------------- k = 2 beta = 1.006267 v : 1 0.26914826 0.53206814 0.79498802 H = -0.0062674 -0.2708351 -0.5354028 -0.7999705 -0.2708351 0.9271052 -0.1441027 -0.2153107 -0.5354028 -0.1441027 0.7151292 -0.4256388 -0.7999705 -0.2153107 -0.4256388 0.3640330 A = 7.0710678 7.0710678 5.939697 0 2.236068 3.5777088 0 0 -0.0947664 0 0 -1.2925295 0 0 -0.4902926 Q = 0.2828427 0.4472136 0.2128929 -0.2797022 -0.7722974 0.7071068 -0.4472136 -0.4807445 -0.2596204 -0.0384964 0.2828427 -0.4472136 0.8431415 -0.0337898 0.0892790 -0.1414214 -0.4472136 -0.1021209 0.6599727 -0.5779337 -0.5656854 -0.4472136 -0.0473832 -0.6462647 -0.2451463 ----------------------------------------------------------------- k=3 beta = 1.068392 v : 1 0.87309062 0.33118770 H = -0.0683918 -0.9328028 -0.3538382 -0.9328028 0.1855786 -0.3089328 -0.3538382 -0.3089328 0.8828131 A =
  • 355. Héctor M. Mora E. Métodos Numéricos con Scilab 341 7.0710678 7.0710678 5.939697 0 2.236068 3.5777088 0 0 1.3856406 0 0 0 0 0 0 Q = 0.2828427 0.4472136 0.5196152 -0.0119059 -0.6707147 0.7071068 -0.4472136 0.2886751 0.4121526 0.2163259 0.2828427 -0.4472136 -0.0577350 -0.8203366 -0.2090802 -0.1414214 -0.4472136 -0.4041452 0.3962781 -0.6779604 -0.5656854 -0.4472136 0.6928203 0 0 Observaciones: No es necesario calcular explı́citamente las matrices H (en el ejemplo anterior aparecen, pero simplemente de manera ilustrativa). Basta con conocer β y v. Es necesario implementar eficientemente el producto HkA(k : m, : ) a partir de la información: A(k:m, : ), β y v. De manera análoga, es necesario implementar eficientemente el pro- ducto Q( : , k:m)Hk a partir de la información: Q( : , k:m), β y v. 9.4.4. Factorización QR con matrices de Givens Al utilizar matrices ortogonales de Givens, también se busca, columna por columna, anular los elementos debajo de la diagonal. Con matrices de House- holder, se usa una matriz para cada columna. Con matrices de Givens, en la columna k, se utiliza una matriz para anular am,k , después otra matriz para anular am−1,k , después otra matriz para anular am−2,k y , finalmente, otra matriz para anular ak+1,k .
  • 356. 342 CAPÍTULO 9. VALORES PROPIOS [Q, R] = QR_Givens(A) [m, n] = tamaño(A) Q = Im para k = 1 : min(m, n) para i = m : −1 : k + 1 [c, s] = csGivens(ai−1,k , aik) G = G(i − 1, i, c, s, m) A = GT A Q = QG fin-para fin-para R = A fin QR_Givens Ejemplo 9.11. Obtener la factorización QR de A =       2 3 4 5 4 3 2 1 0 −1 −2 −3 −4 −5 −4       utizando matrices de Givens. k = 1 i = 5 c = -0.242536 s = 0.970143 G = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -0.2425356 0.9701425 0 0 0 -0.9701425 -0.2425356 A = 2 3 4 5 4 3 2 1 0 4.1231056 5.3357838 4.6081769 0 -0.7276069 -1.940285 Q = 1 0 0 0 0
  • 357. Héctor M. Mora E. Métodos Numéricos con Scilab 343 0 1 0 0 0 0 0 1 0 0 0 0 0 -0.2425356 0.9701425 0 0 0 -0.9701425 -0.2425356 i = 4 c = -0.436436 s = 0.899735 G = 1 0 0 0 0 0 1 0 0 0 0 0 -0.4364358 0.8997354 0 0 0 -0.8997354 -0.4364358 0 0 0 0 0 1 A = 2 3 4 5 4 3 -4.5825757 -5.2372294 -4.1461399 0 -1.4289915 -2.0111733 0 -0.7276069 -1.940285 Q = 1 0 0 0 0 0 1 0 0 0 0 0 -0.4364358 0.8997354 0 0 0 0.2182179 0.1058512 0.9701425 0 0 0.8728716 0.4234049 -0.2425356 ... k = 3 ... i = 4 c = -0.612372 s = 0.790569 A = -7.0710678 -7.0710678 -5.939697 0 -2.236068 -3.5777088 0 0 -1.3856406 0 0 0 0 0 0 Q = -0.2828427 -0.4472136 -0.5196152 0.6708204 0 -0.7071068 0.4472136 -0.2886751 -0.2236068 0.4082483 -0.2828427 0.4472136 0.0577350 0.2236068 -0.8164966
  • 358. 344 CAPÍTULO 9. VALORES PROPIOS 0.1414214 0.4472136 0.4041452 0.6708204 0.4082483 0.5656854 0.4472136 -0.6928203 0 0 Para que una factorización QR de A sea eficiente hay que tener en cuenta, entre otros, los siguietes detalles: No es necesario calcular explı́citamente las matrices G (en el ejemplo anterior aparecen, pero simplemente de manera ilustrativa). Basta con conocer c, s, e i. Obsérvese que siempre se trata de las filas i − 1 e i. Es necesario implementar eficientemente el producto GT A a partir de la información: A, c y s. De manera análoga, es necesario implementar eficientemente el pro- ducto QG a partir de la información: Q, c y s. En general, para efectuar sobre B, el producto G(i, j, c, s, m)T B, basta con hacer: x = B(i, : ) B(i, : ) = c B(i, : ) − s B(j, : ) B(j, : ) = s x + c B(j, : ) En el proceso de factorización QR, si se está buscando un cero en la posición (i, k) de la matriz A, se modifican únicamente, la filas i − 1 e i, pero se debe tener en cuenta que las columnas 1, ..., k − 1 son nulas por debajo de la diagonal, lo cual reduce el número de operaciones. ai−1,k = c ai−1,k − s aik aik = 0 t = A(i − 1, k + 1 : n) A(i − 1, k + 1 : n) = c t − s A(i, k + 1 : n) A(i, k + 1 : n) = s t + c A(i, k + 1 : n) En general, para efectuar sobre B el producto B G(i, j, c, s, m), basta con hacer: x = B( : , i) B( : , i) = c B( : , i) + s B( : , j) B( : , j) = −s x + c B( : , j)
  • 359. Héctor M. Mora E. Métodos Numéricos con Scilab 345 9.4.5. Solución por mı́nimos cuadrados Una de las aplicaciones importantes de la factorización QR es la solución de sistemas de ecuaciones lineales por mı́nimos cuadrados. El método más popular para mı́nimos cuadrados es el de las ecuaciones normales. Sin em- bargo, cuando el condicionamiento de A es muy grande comparado con el residuo mı́nimo [GoV96], el método QR resulta más preciso y estable. Una propiedad importantı́sima de las matrices ortogonales es que preservan la norma euclidiana. Si Q es ortogonal, entonces ||Qx|| = ||x||. Esto quiere decir que obtener el mı́nimo de ||Ax−b||2 2 es equivalente a buscar el mı́nimo de ||PAx − Pb||2 2 para cualquier matriz ortogonal P. Si QR = A es la factorización QR de A, entonces, se desea minimizar ||QT Ax − QT b||2 2 = ||QT QRx − QT b||2 2 = ||Rx − QT b||2 2. Sea A ∈ Rm×n, c = QT b, R = U 0qn , c = d r , con U ∈ Rp×n “triangular” superior, cuya última fila no es nula, d ∈ Rp×1, r ∈ Rq×1, p + q = m. Entonces, Rx − c = Ux − d −r ||Ax − b||2 2 = ||Ux − d||2 2 + ||r||2 2. Basta con buscar x solución de Ux = d. Si el sistema anterior tiene solución, entonces min x∈Rn ||Ax − b||2 2 = ||r||2 2. Si U es cuadrada (∈ Rn×n) e invertible, la solución es única. Ejemplo 9.12. Resolver por mı́nimos cuadrados el sistema Ax = b, donde A =       2 3 4 5 4 3 2 1 0 −1 −2 −3 −4 −5 −4       , b =       29.1 33.9 7.0 −20.1 −38.9      
  • 360. 346 CAPÍTULO 9. VALORES PROPIOS Q = -0.2828427 -0.4472136 -0.5196152 0.6708204 0 -0.7071068 0.4472136 -0.2886751 -0.2236068 0.4082483 -0.2828427 0.4472136 0.0577350 0.2236068 -0.8164966 0.1414214 0.4472136 0.4041452 0.6708204 0.4082483 0.5656854 0.4472136 -0.6928203 0 0 R = -7.0710678 -7.0710678 -5.939697 0 -2.236068 -3.5777088 0 0 -1.3856406 0 0 0 0 0 0 c : -59.029274 -21.108482 -5.6753531 0.0223607 -0.0816497 U = -7.0710678 -7.0710678 -5.939697 0 -2.236068 -3.5777088 0 0 -1.3856406 d : -59.029274 -21.108482 -5.6753531 r : 0.0223607 -0.0816497 x : 2.0208333 2.8866667 4.0958333 Ası́, ||r||2 2 = 0.0071667 . ✸ 9.5. Método QR para valores propios de matrices simétricas El método más popular para obtener los valores propios de una matriz simétrica (todos reales) es el método QR. Es posiblemente el más eficiente para casos generales. El proceso tiene dos pasos: 1. Obtener, por matrices ortogonales, una matriz T tridiagonal simétrica semejante a A, o sea, encontrar Q ortogonal tal que
  • 361. Héctor M. Mora E. Métodos Numéricos con Scilab 347 QAQT = T tridiagonal simétrica. 2. Obtener los valores propios de T. 9.5.1. Tridiagonalización por matrices de Householder para matrices simétricas Sea A ∈ Rn×n simétrica, b H = b H(n, H(A(2 : n, 1)). Es claro que b HA es nula, en la columna 1, por debajo de la subdiagonal. Se puede observar, y también demostrar, que b HA b H, además de ser nula en la primera columna por debajo de la subdiagonal, también es nula en la primera fila a la derecha de la superdiagonal, y obviamente también es simétrica.... Ejemplo 9.13. A = 2 3 4 5 3 -1 0 1 4 0 -2 8 5 1 8 10 H = 1 0 0 0 0 0.4242641 0.5656854 0.7071068 0 0.5656854 0.4441896 -0.6947630 0 0.7071068 -0.6947630 0.1315463 H A = 2 3 4 5 7.0710678 0.2828427 4.5254834 12.020815 0 -1.2604484 -6.4464829 -2.8284271 0 -0.5755605 2.4418963 -3.5355339 H A H = 2 7.0710678 0 0 7.0710678 11.18 -6.1814444 -1.3628445 0 -6.1814444 -1.6113918 3.2154369 0 -1.3628445 3.2154369 -2.5686082 ✸
  • 362. 348 CAPÍTULO 9. VALORES PROPIOS Este proceso se realiza en las otras columnas y filas, y se obtiene una matriz tridiagonal, simétrica, semejante a A. Como es costumbre, los productos realizados se reescriben sobre A. A = triHouse(A) n = dim (A) para k = 1 : n − 2 x = A(k + 1 : n, k) H = H(x) b H = b H(n, H) A = b HA b H fin-para fin triHouse Ejemplo 9.14. A = 2. 3. 4. 5. 3. - 1. 0. 1. 4. 0. - 2. 8. 5. 1. 8. 10. k = 1 H = 0.4242641 0.5656854 0.7071068 0.5656854 0.4441896 - 0.6947630 0.7071068 - 0.6947630 0.1315463 A = 2. 7.0710678 0. 0. 7.0710678 11.18 - 6.1814444 - 1.3628445 0. - 6.1814444 - 1.6113918 3.2154369 0. - 1.3628445 3.2154369 - 2.5686082 k = 2 H = - 0.9765473 - 0.2153028 - 0.2153028 0.9765473
  • 363. Héctor M. Mora E. Métodos Numéricos con Scilab 349 A = 2. 7.0710678 0. 0. 7.0710678 11.18 6.3298973 0. 0. 6.3298973 - 0.3036510 - 2.7160739 0. 0. - 2.7160739 - 3.876349 ✸ Tal como está descrito el algoritmo, se supone que se hace explı́citamente el producto b HA b H. En realidad, se puede hacer de manera más eficiente, teniendo en cuenta que una parte de b H es la identidad, que se conoce el nuevo valor de ak+1,k, que debajo habrá ceros, y que b HA b H también es simétrica. A = triHouse(A) n = dim (A) para k = 1 : n − 2 x = A(k + 1 : n, k) [v, β] = vHouse(x) p = β A(k + 1 : n, k + 1 : n) v w = p − (β/2) (pT v) v ak+1,k = ak,k+1 = ||x|| A(k + 2 : n, k) = 0 A(k, k + 2 : n) = 0 A(k + 1 : n, k + 1 : n) = A(k + 1 : n, k + 1 : n) − v wT − w vT fin-para fin triHouse 9.5.2. Tridiagonalización por matrices de Givens para matri- ces simétricas Con los conceptos e ideas de la factorización QR por medio de matrices de Givens y de la tridiagonalización con matrices de Householder, resulta naturalmente el proceso de tridiagonalización con matrices de Givens. Primero, se busca “tridiagonalizar” la primera columna y la primera fila, o sea, se buscan ceros por debajo de la subdiagonal y a la derecha de la superdiagonal. Para ello se busca un cero en la posición (n, 1), después en la posición (n − 1, 1), ası́ sucesivamente hasta la posición (3, 1). Al mismo tiempo se hace lo análogo con la primera fila.
  • 364. 350 CAPÍTULO 9. VALORES PROPIOS Después se trabaja con la segunda columna y la segunda fila, y ası́ sucesi- vamente, hasta la columna y fila n − 2. A = triGivens(A) n = dim (A) para k = 1 : n − 2 para i = n : −1 : k + 2 [c, s] = csGivens(ai−1,k , aik) G = G(i − 1, i, c, s, n) A = GT AG fin-para fin-para fin triHouse Ejemplo 9.15. A = 2 3 4 5 3 -1 0 1 4 0 -2 8 5 1 8 10 k = 1 i = 4 c = -0.624695 s = 0.780869 A = 2 3 -6.4031242 0 3 -1 -0.7808688 -0.6246950 -6.4031242 -0.7808688 13.121951 4.097561 0 -0.6246950 4.097561 -5.1219512 i = 3 c = 0.424264 s = 0.905539 A = 2 7.0710678 0 0 7.0710678 11.18 -4.9257204 -3.9755349 0 -4.9257204 0.9419512 1.1727625 0 -3.9755349 1.1727625 -5.1219512
  • 365. Héctor M. Mora E. Métodos Numéricos con Scilab 351 k = 2 i = 4 c = 0.778168 s = -0.628057 A = 2 7.0710678 0 0 7.0710678 11.18 -6.3298973 0 0 -6.3298973 -0.3036510 -2.7160739 0 0 -2. -3.876349 ✸ No sobra recordar que el producto GT AG debe ser hecho de manera eficiente, realizando únicamente las operaciones necesarias. 9.5.3. Valores propios de matrices tridiagonales simétricas Sea T una matriz tridiagonal simétrica. En lo que sigue en esta sección, se supone que T es tridiagonal simétrica. La matriz T puede ser el resultado del proceso de tridiagonalización de Householder o de Givens. La matriz T se llama no reducida, [GoV96] p. 416, si todos lo elementos subdiagonales (y los superdiagonales) son no nulos. Una matriz es reducida si algún elemento subdiagonal o (superdiagonal) es nulo. Ejemplo 9.16. Una matriz no reducida y dos reducidas:         2 3 0 0 0 0 3 4 5 0 0 0 0 5 6 7 0 0 0 0 7 8 9 0 0 0 0 9 10 11 0 0 0 0 11 12         ,         2 3 0 0 0 0 3 4 5 0 0 0 0 5 6 7 0 0 0 0 7 8 0 0 0 0 0 0 10 11 0 0 0 0 11 12         ,         2 3 0 0 0 0 3 4 5 0 0 0 0 5 6 0 0 0 0 0 0 8 0 0 0 0 0 0 10 11 0 0 0 0 11 12         T siempre se puede expresar como una matriz diagonal por bloques, donde cada bloque es de tamaño 1 × 1 o de mayor tamaño pero tridiagonal no reducido. En el primer caso del ejemplo anterior hay un solo bloque, en el segundo hay dos. En el tercer caso hay tres bloques, uno de ellos es 1 × 1.
  • 366. 352 CAPÍTULO 9. VALORES PROPIOS Para encontrar los valores propios de T basta con encontrar los de cada bloque tridiagonal simétrico no reducido, agregando los bloques 1 × 1 que son valores propios de T. El objetivo, a partir de ahora, es encontar los valores propios de T no re- ducida. Sea T = QR la factorización QR de A y sea T+ = RQ QT QR = QT T R = QT T T+ = RQ = QT TQ. Luego T+ es simétrica y semejante a T. Además, se puede demostrar que también es tridiagonal. Ejemplo 9.17. T = 2 3 0 0 3 4 5 0 0 5 6 7 0 0 7 8 R = -3.6055513 -4.9923018 -4.1602515 0 0 -5.0076864 -5.8371805 -6.9892556 0 0 -7.6563459 -7.4712474 0 0 0 2.8863072 Q = -0.5547002 -0.0460830 0.3365427 0.7595545 -0.8320503 0.0307220 -0.2243618 -0.5063697 0 -0.9984651 -0.0224362 -0.0506370 0 0 -0.9142743 0.4050957 T+ = 6.1538462 4.1666469 0 0 4.1666469 5.6743747 7.644594 0 0 7.644594 7.0025484 -2.6388764 0 0 -2.6388764 1.1692308 ✸
  • 367. Héctor M. Mora E. Métodos Numéricos con Scilab 353 Un proceso, un poco lento, para hallar los valores propios de T, consiste en hacer T = T+ y repetir varias veces. Se puede demostrar que la matriz que se va obteniendo tiende a ser reducida. Dicho en palabras populares, la tridiagonal se va adelgazando en alguna parte. repetir QR = T factorización QR de T T = RQ fin-repetir Ejemplo 9.18. Aplicar el proceso anterior hasta que T sea reducida. En este ejemplo se supone que T es reducida cuando para algún elemento sub- diagonal |ti+1,i| ≤ 10−10. T = 2 3 0 0 3 4 5 0 0 5 6 7 0 0 7 8 k = 1 T+ = 9.8718663 -4.486006 0 0 -4.486006 10.134151 -4.5625729 0 0 -4.5625729 -1.1770851 -0.7764250 0 0 -0.7764250 1.1710681 k = 2 T+ = 13.296028 -3.5861468 0 0 -3.5861468 8.2428763 1.7266634 0 0 1.7266634 -2.7961816 0.3062809 0 0 0.3062809 1.2572771 k = 10
  • 368. 354 CAPÍTULO 9. VALORES PROPIOS T+ = 15.191934 -0.0059687 0 0 -0.0059687 6.6303783 0.0035727 0 0 0.0035727 -3.100073 0.0002528 0 0 0.0002528 1.2777606 k = 20 T+ = 15.191938 -0.0000015 0 0 -0.0000015 6.6303755 0.0000018 0 0 0.0000018 -3.1000743 3.577E-08 0 0 3.577E-08 1.2777606 k = 27; matriz reducida: T+ = 15.191938 -4.514E-09 0 0 -4.514E-09 6.6303755 -8.713E-09 0 0 -8.713E-09 -3.1000743 -7.230E-11 0 0 -7.229E-11 1.2777606 ✸ Denotemos por espec(A) el conjunto de valores propios de A. Cuando se hace un desplazamiento en los elementos diagonales de una matriz, los valores propios quedan desplazados igualmente, o sea, λ ∈ espec(A) sssi λ − s ∈ espec(A − sI). Hacer un desplazamiento adecuado en T puede acelerar notablemente la convergencia. Ejemplo 9.19. Aplicar el mismo proceso a T − sI, con s = 1, hasta que para algún elemento |ti+1,i| ≤ 10−10. T = 2 3 0 0 3 4 5 0 0 5 6 7
  • 369. Héctor M. Mora E. Métodos Numéricos con Scilab 355 0 0 7 8 T - s I = 1 3 0 0 3 3 5 0 0 5 5 7 0 0 7 7 k = 9, matriz reducida: T+ = 14.191935 -0.0052796 0 0 -0.0052796 5.5882374 0.6389663 0 0 0.6389663 -4.057933 -8.844E-12 0 0 -8.844E-12 0.2777606 T + s I 15.191935 -0.0052796 0 0 -0.0052796 6.5882374 0.6389663 0 0 0.6389663 -3.057933 -8.844E-12 0 0 -8.844E-12 1.2777606 ✸ Aunque hay varias maneras de calcular desplazamientos, uno de los más utilizados es el desplazamiento de Wilkinson: d = tn−1,n−1 − tnn µ = tnn + d − signo(d) q d2 + t2 n,n−1 = tnn − t2 n,n−1 d + signo(d) q d2 + t2 n,n−1 Para una matriz T ∈ Rn×n tridiagonal, simétrica y no reducida, el proceso que se aplica es el siguiente:
  • 370. 356 CAPÍTULO 9. VALORES PROPIOS mientras T sea no reducida cálculo de µ T = T − µI QR = T factorización QR de T T = RQ T = T + µI para i = 1 : n − 1 si |ai+1,i| ≤ ε ( |aii| + |ai+1,i+1| ) ai+1,i = 0 ai,i+1 = 0 fin-si fin-para fin-mientras En [GoV96], p. 420, se encuentra una descripción eficiente de la parte prin- cipal de este proceso, desde el cálculo de µ hasta T = T + µI. Ejemplo 9.20. Hallar, por el proceso descrito anteriormente, una matriz tridiagonal reducida semejante a la siguiente matriz tridiagonal: T =     8 3 0 0 3 6 −4 0 0 −4 −10 −6 0 0 −6 0     Con un propósito meramente informativo, se presentan los valores propios obtenidos por la función spec : −13.50417 , 1.9698954 , 5.0194039 , 10.51487 k = 1 mu = 2.8102497 T -mu I 5.1897503 3 0 0 3 3.1897503 -4 0 0 -4 -12.81025 -6 0 0 -6 -2.8102497 T+ = RQ 7.2885019 2.0988427 0 0
  • 371. Héctor M. Mora E. Métodos Numéricos con Scilab 357 2.0988427 -9.5701241 8.9042431 0 0 8.9042431 -4.1976395 -0.6390185 0 0 -0.6390185 -0.7617370 T + mu I 10.098752 2.0988427 0 0 2.0988427 -6.7598744 8.9042431 0 0 8.9042431 -1.3873898 -0.6390185 0 0 -0.6390185 2.0485127 k = 2 mu = 2.1635102 T -mu I 7.9352413 2.0988427 0 0 2.0988427 -8.9233846 8.9042431 0 0 8.9042431 -3.5509 -0.6390185 0 0 -0.6390185 -0.1149975 T+ = RQ 7.8706324 -3.26714 0 0 -3.26714 -14.885642 -2.4468061 0 0 -2.4468061 2.5541744 0.0357613 0 0 0.0357613 -0.1932052 T + mu I 10.034143 -3.26714 0 0 -3.26714 -12.722132 -2.4468061 0 0 -2.4468061 4.7176845 0.0357613 0 0 0.0357613 1.970305 k = 3 mu = 1.9698396 T -mu I 8.064303 -3.26714 0 0 -3.26714 -14.691972 -2.4468061 0 0 -2.4468061 2.7478449 0.0357613
  • 372. 358 CAPÍTULO 9. VALORES PROPIOS 0 0 0.0357613 0.0004654 T+ = RQ 7.1298463 5.6488809 0 0 5.6488809 -14.048752 0.5009906 0 0 0.5009906 3.0394919 0.0000006 0 0 0.0000006 0.0000557 T + mu I 9.0996859 5.6488809 0 0 5.6488809 -12.078913 0.5009906 0 0 0.5009906 5.0093315 0.0000006 0 0 0.0000006 1.9698954 k = 4 mu = 1.9698954 T -mu I 7.1297905 5.6488809 0 0 5.6488809 -14.048808 0.5009906 0 0 0.5009906 3.0394362 0.0000006 0 0 0.0000006 1.379E-13 T+ = RQ 4.4614948 -9.0220625 0 0 -9.0220625 -11.390431 -0.1052167 0 0 -0.1052167 3.049355 -2.585E-17 0 0 1.656E-22 7.811E-16 T + mu I 6.4313901 -9.0220625 0 0 -9.0220625 -9.4205358 -0.1052167 0 0 -0.1052167 5.0192503 -2.585E-17 0 0 1.656E-22 1.9698954 T reducida 6.4313901 -9.0220625 0 0 -9.0220625 -9.4205358 -0.1052167 0 0 0.1052167 5.0192503 0 0 0 0 1.9698954
  • 373. Héctor M. Mora E. Métodos Numéricos con Scilab 359 ✸ En una matriz simétrica tridiagonal se busca desde la esquina SE hacia la esquina NO, el primer bloque de tamaño superior a uno que sea no reducido. A este bloque se le aplica el procedimiento anterior (hasta que el bloque sea reducido). El proceso general acaba cuando la matriz resultante es diagonal. Ejemplo 9.21. Obtener los valores propios de la siguiente matriz tridiago- nal simétrica: A =         −2 8 0 0 0 0 8 −2 0 0 0 0 0 0 8 3 0 0 0 0 3 6 −4 0 0 0 0 −4 −10 −6 0 0 0 0 −6 0         i1 i2 : 3 6 T inicial 8 3 0 0 3 6 -4 0 0 -4 -10 -6 0 0 -6 0 mu = 2.810250 T final 10.098752 2.0988427 0 0 2.0988427 -6.7598744 8.9042431 0 0 8.9042431 -1.3873898 -0.6390185 0 0 -0.6390185 2.0485127 i1 i2 : 3 6 T inicial 10.098752 2.0988427 0 0 2.0988427 -6.7598744 8.9042431 0 0 8.9042431 -1.3873898 -0.6390185 0 0 -0.6390185 2.0485127 mu = 2.163510
  • 374. 360 CAPÍTULO 9. VALORES PROPIOS T final 10.034143 -3.26714 0 0 -3.26714 -12.722132 -2.4468061 0 0 -2.4468061 4.7176845 0.0357613 0 0 0.0357613 1.970305 i1 i2 : 3 6 T inicial 10.034143 -3.26714 0 0 -3.26714 -12.722132 -2.4468061 0 0 -2.4468061 4.7176845 0.0357613 0 0 0.0357613 1.970305 mu = 1.969840 T final 9.0996859 5.6488809 0 0 5.6488809 -12.078913 0.5009906 0 0 0.5009906 5.0093315 0.0000006 0 0 0.0000006 1.9698954 i1 i2 : 3 6 T inicial 9.0996859 5.6488809 0 0 5.6488809 -12.078913 0.5009906 0 0 0.5009906 5.0093315 0.0000006 0 0 0.0000006 1.9698954 mu = 1.969895 T final 6.4313901 -9.0220625 0 0 -9.0220625 -9.4205358 -0.1052167 0 0 -0.1052167 5.0192503 8.383E-17 0 0 -1.058E-22 1.9698954 A = -2 8 0 0 0 0 8 -2 0 0 0 0
  • 375. Héctor M. Mora E. Métodos Numéricos con Scilab 361 0 0 6.4313901 -9.0220625 0 0 0 0 -9.0220625 -9.4205358 -0.1052167 0 0 0 0 -0.1052167 5.0192503 0 0 0 0 0 0 1.9698954 i1 i2 : 3 5 T inicial 6.4313901 -9.0220625 0 -9.0220625 -9.4205358 -0.1052167 0 -0.1052167 5.0192503 mu = 5.020017 T final -6.2865541 11.012094 0 11.012094 3.2972548 -0.0000058 0 -0.0000058 5.0194039 i1 i2 : 3 5 T inicial -6.2865541 11.012094 0 11.012094 3.2972548 -0.0000058 0 -0.0000058 5.0194039 mu = 5.019404 T final -12.629095 -4.5002992 0 -4.5002992 9.6397959 2.575E-17 0 2.079E-17 5.0194039 A = -2 8 0 0 0 0 8 -2 0 0 0 0 0 0 -12.629095 -4.5002992 0 0 0 0 -4.5002992 9.6397959 0 0 0 0 0 0 5.0194039 0 0 0 0 0 0 1.9698954 i1 i2 : 3 4
  • 376. 362 CAPÍTULO 9. VALORES PROPIOS T inicial -12.629095 -4.5002992 -4.5002992 9.6397959 mu = 10.514870 T final -13.50417 -2.914E-16 3.384E-16 10.51487 A = -2 8 0 0 0 0 8 -2 0 0 0 0 0 0 -13.50417 0 0 0 0 0 0 10.51487 0 0 0 0 0 0 5.0194039 0 0 0 0 0 0 1.9698954 i1 i2 : 1 2 T inicial -2 8 8 -2 mu = -10.000000 T final 6 -8.782E-17 -1.735E-18 -10 A = 6 0 0 0 0 0 0 -10 0 0 0 0 0 0 -13.50417 0 0 0 0 0 0 10.51487 0 0 0 0 0 0 5.0194039 0 0 0 0 0 0 1.9698954 En los resultados anteriores, i1 e i2 indican la fila inicial y final de la primera submatriz no reducida que se encuentra y con la que se va a trabajar. ✸
  • 377. Héctor M. Mora E. Métodos Numéricos con Scilab 363 Ejercicios 9.1 Aplique el método de la potencia para encontrar el valor propio dom- inante de A =     −2 0 −6 0 −6 1 −9 −6 0 0 −5 0 −2 0 −9 2     . 9.2 Aplique el método de la potencia a A =     5 0 2 0 −5 2 4 0 0 0 5 0 −4 −4 1 1     . 9.3 Aplique el método de la potencia inversa para hallar el valor propio menos dominante de A =     8 5 −8 0 0 9 8 0 0 0 10 0 −6 −5 −4 2     . 9.4 Aplique el método de la potencia inversa a A =     8 0 1 0 −1 2 5 6 0 0 9 0 −7 0 −7 2     . 9.5 Obtenga, usando matrices de Householder, la factorización QR de A =     4 2 1 1 −1 1 1 1 1 16 4 1     .
  • 378. 364 CAPÍTULO 9. VALORES PROPIOS 9.6 Obtenga, usando matrices de Givens, la factorización QR de A =     4 2 1 1 −1 1 1 1 1 16 4 1     . 9.7 Utilice la factorización QR de A para resolver por mı́nimos cuadrados     4 2 1 1 −1 1 1 1 1 16 4 1       x1 x2 x3   =     3.01 5.99 1.99 11.01     . Compare con la solución obtenida por medio de ecuaciones normales. 9.8 Tridiagonalice, por medio de matrices de Householder, la matriz A =     2 3 4 5 3 0 −1 −2 4 −1 −3 −4 5 −2 −4 1     Puede verificar, usando Scilab, que los valores propios de A y de la matriz obtenida son exactamente los mismos. 9.9 Tridiagonalice, por medio de matrices de Givens, la matriz A =     2 3 4 5 3 0 −1 −2 4 −1 −3 −4 5 −2 −4 1     9.10 Obtenga los valores propios, sin desplazamiento o con desplazamiento, de la matriz tridiagonal obtenida. 9.11 Obtenga los valores propios, sin desplazamiento o con desplazamiento, de la matriz A =       2 −1 0 0 0 −1 3 −2 0 0 0 −2 4 0 0 0 0 0 5 −3 0 0 0 −3 1       .
  • 379. Héctor M. Mora E. Métodos Numéricos con Scilab 365 Bibliografı́a [AbS65] Abramowitz M. y Stegun I., Handbook of Mathematical Functions: with Formulas, Graphs, and Mathematical Tables, Dover, New York, 1965. [AlK02] Allaire G. y Kaber S.M., Algèbre linéaire numérique, Ellipses, Paris, 2002. [Atk78] Atkinson Kendall E., An Introduction to Numerical Analysis, Wiley, New York, 1978. [Apo79] Apostol Tom M., Análisis matemático, 2 ed., Reverté, Barcelona, 1979. [BuF85] Burden R.L. y Faires J.D., Numerical Analysis, 3a. ed., Prindle- Weber-Schmidt, Boston, 1985. [ChC99] Chapra S.C. y Canale R.P., Métodos Numéricos para Ingenieros, McGrawHill, México, 1999. [Dem97] Demmel J.W., Applied Numerical Linear Algebra, SIAM, Philadel- phia, 1997. [EnU96] Engel-Mullges G. y Uhlig F. Numerical Algorithms with C, Springer, Berlin, 1996. [Fro70] Fröberg C.E., Introduction to Numerical Analysis, 2nd ed., Addison- Wesley, Reading, 1970. [GoV96] Golub G.H. y Van Loan C.H., Matrix Computations, 3rd ed., Johns Hopkins University Press, Baltimore, 1996. [KiC94] Kincaid D. y Cheney W., Análisis numérico, Addison-Wesley Iberoa- mericana, Wilmington, 1994. [Man04] Mantilla I., Análisis Numérico, Universidad Nacional, Fac. de Cien- cias, Bogotá, 2004. [Mor01] Mora H., Optimización no lineal y dinámica, Universidad Nacional, Fac. de Ciencias, Bogotá, 2001. [NoD88] Noble B. y Daniel J.W,, Applied Linear Algebra, 3rd ed., Prentice- Hall, Englewood Cliffs, 1988. [Par80] Parlett B.N., The Symmetric Eigenvalue Problem, Prentice-Hall, En- glewood Cliffs, 1980. [Sch91] Schatzman M., Analyse Numérique, InterEditions, Paris, 1991.
  • 380. 366 CAPÍTULO 9. VALORES PROPIOS [Ste98] Stewart G.W., Matrix Algorithms, Volume I: Basic Decompositions, Siam, Philadelphia, 1998. [Str86] Strang G., Álgebra Lineal y sus Aplicaciones, Addison-Wesley, Wilm- ington, 1986. [YoG72] Young D.M. y Gregory R.T., A Survey of Numerical Mathematics, vol I y II, Addison-Wesley, Reading, 1972.
  • 381. Índice alfabético Adams-Bashforth fórmula de, 271 Adams-Moulton fórmula de, 274 aproximación, 171 aproximación por mı́nimos cuadrados, 205 base, 174, 206 condicionamiento de un problema, 21 condiciones de frontera ecuaciones diferenciales con, 285 ecuaciones diferenciales lineales con, 288 continuidad, 1 control del paso, 261 convergencia cuadrática, 13, 131 lineal, 12, 13 sublineal, 13 superlineal, 13 cuadratura de Gauss-Hermite, 234 de Gauss-Laguerre, 234 de Gauss-Legendre, 228, véase cuadratu- ra de Gauss def, 212 deflación, 156 derivabilidad, 2 derivación numérica, 236 derivada parcial, 10 determinante, 53 diagonal estrictamente dominante por filas, 83 diferencias divididas de Newton, 183 finitas, 193 diferencias finitas, 288, 294 ecuaciones diferenciales con condiciones de frontera, 285 de orden superior, 283 lineales con condiciones de fron- tera, 288 sistemas de, 278 ecuaciones diferenciales ordinarias, 243 ecuaciones diferenciales parciales, 293 ecuaciones normales, 65 encajonamiento, 124, 136 épsilon de la máquina, 16 error, 233 absoluto, 18 exponencial, 19 global, 216, 217, 220, 222, 246 orden del, 267 lineal, 19 local, 216, 220, 246 método de Euler, 268 método de Heun, 268 367
  • 382. 368 ÍNDICE ALFABÉTICO método del punto medio, 268 método RK4, 268 método RK5, 268 método RK6, 268 orden del, 267 método de Euler, 246 orden del, 267 relativo, 18 Euler método de, 245, 255 orden del método de, 268 extrapolación, 189 factorización de Cholesky, 54, 61 LU, 41 PA=LU, 48 QR, 331 fórmula de Adams-Bashforth, 271 de Adams-Moulton, 274 de Newton-Cotes, 213, 218, 224 abierta, 224 cerrada, 224 de Simpson, 218 del trapecio, 213 frontera libre, 202 frontera natural, 202 frontera sujeta, 203 funciones de la base, 174, 206 Gauss, véase método de Gauss Gauss-Seidel, véase método de Gauss- Seidel Givens, matriz de, 335 Heun método de, 248, 255 orden del método de, 268 integración numérica, 211 interpl, 173 interpolación, 171–173 de Lagrange, 177 lineal, 173 polinomial, 176 polinomial por trozos, 198 por diferencias divididas, 189 por diferencias finitas, 195 intg, 212 inv, 25 inversa de una matriz, 25 Lagrange, véase interpolación de La- grange lı́mite de una función, 1 de una sucesión, 4 LU, factorización, 41 Matlab, 26 matrices ortogonales, 69 matriz de diagonal estrictamente domi- nante por filas, 83 de Givens, 69, 335 de Householder, 69 definida positiva, 51, 54, 84 jacobiana, 152 positivamente definida, véase ma- triz definida positiva método de Cholesky, 51, 61 de colocación, 172 de Euler, 245, 255 de Gauss, 32 de Gauss con pivoteo parcial, 43, 48 de Gauss-Seidel, 81
  • 383. Héctor M. Mora E. Métodos Numéricos con Scilab 369 de Heun, 248, 255 de la bisección, 136 de la secante, 133 de Newton, 126, 150 de Newton en Rn, 151, 152 de punto fijo, 143, 150 de regula falsi, 140 de regula falsi modificado, 142 de Runge-Kutta (RK), 254 de Runge-Kutta-Fehlberg, 262, 264 del disparo (shooting), 285, 287 del punto medio, 251, 255 del trapecio, 248 indirecto, 80 iterativo, 80 multipaso abierto, 271 multipaso cerrado, 274 multipaso explı́cito, 269, 271 multipaso implı́cito, 273, 274 orden del, 267 predictor-corrector, 275 RK2, 259 deducción del, 259 RK4, 255 RK5, 262 RK6, 262 RKF, 262 mı́nimos cuadrados, véase solución por... notación de Matlab, 26 de Scilab, 26 número de operaciones, 31, 39, 60 números de Fibonacci, 4 O grande, 12 ode, 244 orden de convergencia, 12 del error, 267 verificación numérica, 268 del error global, 267 del error local, 267 del método, 267 de Euler, 268 de Heun, 268 del punto medio, 268 RK4, 268 RK5, 268 RK6, 268 orden de convergencia, 130, 131, 134 pivote, 43 pivoteo parcial, 43 total, 43 polinomio de Lagrange, 178 de Legendre, 233 de Taylor, 6 problema bien condicionado, 21 mal condicionado, 21 punto medio método del, 251, 255 orden del método de, 268 QR, factorización, 331 Raphson, véase método de Newton- Raphson redondeo, 17 RK, véase método de Runge-Kutta RK4, véase método RK4 RKF, véase Runge-Kutta-Fehlberg Runge-Kutta método de, 254 Runge-Kutta-Fehlberg método de, 262, 264
  • 384. 370 ÍNDICE ALFABÉTICO Seidel, véase método de Gauss-Seidel seudosolución, 66 sistema diagonal, 27 triangular inferior, 31 triangular superior, 28 sistemas de ecuaciones diferenciales, 278 sobrerrelajación, 105 solución de ecuaciones, 123 de sistemas de ecuaciones lineales, 24 de un sistema diagonal, 27 triangular inferior, 31 triangular superior, 28 por mı́nimos cuadrados, 63 SOR, 105 spline, 174, 198 sucesión convergente, 4 sucesiones, 4 tabla de diferencias divididas, 186 de diferencias finitas, 194 tasa de convergencia, 13 teorema de Rolle, 3 de valores extremos, 2 del valor intermedio, 2 del valor medio, 3 espectral, 11 trazador cúbico, 174, 198 triangularización, 32, 35, 39 truncamiento, 17 valor propio, 53, 321