Está en la página 1de 41

Ideas básicas:

Hay que tener claro que, en la práctica, es imposible hacer ningún cálculo sin cometer errores.

Esto se debe a que nuestra capacidad de memoria (la del ordenador) es limitada. Matlab por
ejemplo sólo almacena las primeras 16 cifras significativas de un número. En ningún caso se va
a poder asegurar que un resultado es correcto hasta su cifra 17 (Ni en la 16, porque esta cifra
está redondeada).

Hay que tener claro cuántas cifras significativas correctas (precisión) tienen los resultados de
cada método numérico. No puedes pedirle un resultado de 12 cifras significativas de precisión
a un método que calcula con una precisión de 8 cifras significativas.

En esta asignatura se pedirán los resultados con una precisión determinada. “Ocho cifras
significativas correctas”, por ejemplo.

Se habla de Inestabilidad Numérica o de Propagación de Errores cuando, llevando a cabo un


procedimiento numérico, los errores de los resultados obtenidos son mayores que los errores
de los datos de partida.

El fenómeno de Cancelación Numérica ocurre cuando se restan dos números muy parecidos, e
implica la pérdida de dígitos significativos. Esto también es consecuencia de la capacidad
limitada de memoria:

Partimos de dos datos con 8 cifras significativas: 𝑎 = 123.45678 y 𝑏 = 123.45679.

Al restarlos obtenemos un número con sólo 1 cifra significativa: 𝑏 − 𝑎 = 0.00001

Todos los vectores se suponen vectores columna:

𝑣 ∙ 𝑥 = 𝑣( ) ∙ 𝑥( ) = 𝐴( ) ≡ 𝑀𝑎𝑡𝑟𝑖𝑧

𝑣 ∙ 𝑥 = 𝑣( ) ∙ 𝑥( ) = 𝑎( ) ≡ 𝐸𝑠𝑐𝑎𝑙𝑎𝑟
LECCIÓN 1: Sistemas de ecuaciones lineales

1. Eliminación gaussiana
1.1 Método de eliminación gaussiana
Nos interesa resolver el siguiente sistema de ecuaciones
𝑥 + 2𝑥 = 3 1 0 2 𝑥 3
2𝑥 + 2𝑥 + 3𝑥 = −2 → 2 2 3 𝑥 = −2 → 𝐴𝑥 = 𝑏
3𝑥 + 2𝑥 + 4𝑥 = 1 3 2 4 𝑥 1
Cuya solución es única si 𝐴 es invertible. En tal caso sería un sistema compatible determinado.

Vamos a suponer 𝐴 invertible. Para este caso, el problema se puede resolver bien mediante
eliminación gaussiana, o bien sencillamente despejando: 𝑥 = 𝐴 𝑏...

NUNCA HACER 𝑥 = 𝐴 𝑏. Los profesores se enfadan. Calcular la inversa de la matriz 𝐴


y multiplicar 𝐴 ∙ 𝑏 es más costoso, en cuanto a número de operaciones, y es más
sensible a errores de redondeo que resolver por eliminación gaussiana.

El método de eliminación gaussiana ya sabemos en qué consiste:


1 0 2 3 𝑒 ← 𝑒 − 2𝑒 1 0 2 3
2 2 3 −2 → → 0 2 −1 −8 → {𝑒 ← 𝑒 − 𝑒
𝑒 ← 𝑒 − 3𝑒
3 2 4 1 0 2 −2 −8
1 0 2 3 𝑥 + 2𝑥 = 3
→ 0 2 −1 −8 → 2𝑥 − 𝑥 = −8
0 0 −1 0 −𝑥 = 0
Una vez tenemos el sistema triangulado, es muy sencillo resolverlo por sustitución regresiva.

Pero ahora vamos a enfocarlo todo de otra manera. Cada paso de la eliminación se puede ver
como la multiplicación de la matriz 𝐴 modificada hasta ese paso (𝐴( ) ), junto a 𝑏 ( ) , por una
matriz de transformación:
1 0 2
𝐴( )
=𝐴= 2 2 3
3 2 4
1 0 0 1 0 2 1 0 2
𝐴( )
= 𝑀 ∙ 𝐴( )
= −2 1 0 2 2 3 = 0 2 −1
−3 0 1 3 2 4 0 2 −2
1 0 0 1 0 2 1 0 2
𝐴( )
= 𝑀 ∙ 𝐴( )
= 0 1 0 0 2 −1 = 0 2 −1
0 −1 1 0 2 −2 0 0 −1

(Las matrices de transformación son las mismas para 𝑏: 𝑏 ( )


= 𝑀 𝑏 ( ) . Aunque al final
veremos que no hace falta modificar 𝑏)

Agrupando todas las operaciones sobre 𝐴:


1 0 0 1 0 0 1 0 2 1 0 0 1 0 2
𝐴( )
= 𝑀 𝑀 𝐴 = −2 1 0 0 1 0 2 2 3 = −2 1 0 2 2 3
−3 0 1 0 −1 1 3 2 4 −3 −1 1 3 2 4
Si llamamos 𝑈 = 𝐴( ) , a la matriz triangular superior resultado de la eliminación gaussiana, y
𝐿=𝑀 𝑀 …𝑀 :

𝑈=𝑀 𝑀 𝐴→𝐴=𝑀 𝑀 𝑈 → [𝐴 = 𝐿𝑈]

Descomposición LU de una matriz


𝐴 = 𝐿𝑈
Donde 𝐿 es una matriz triangular inferior, con unos en la diagonal, y 𝑈 triangular superior:
1 0 0 1 0 2
𝐿= 2 1 0 𝑈 = 0 2 −1
3 1 1 0 0 −1

→ 𝐿 se define como 𝐿 = 𝑀 𝑀 …𝑀 , pero observa que calcular esto es muy


sencillo:
1 0 0 1 0 0
𝑀 = −2 1 0 → 𝑀 = 2 1 0
−3 0 1 3 0 1
y, además
1 0 0
𝑀 𝑀 = 2 1 0
3 1 1

Donde los elementos por debajo de la diagonal son los multiplicadores:


𝑎 𝑎 𝑎
𝑙 = 𝑎 /𝑎 =2
𝐴 ( )
= 𝑎 𝑎 𝑎 →
𝑎 𝑎 𝑎 𝑙 = 𝑎 /𝑎 =3

𝑎 𝑎 𝑎
𝐴( )
= 0 𝑎 𝑎 → {𝑙 =𝑎 /𝑎 =1
0 𝑎 𝑎
Escrito en función de los multiplicadores:
1 0 0
𝐿= 𝑙 1 0
𝑙 𝑙 1

La utilidad de conocer la descomposición LU de la matriz de coeficientes 𝐴, del sistema


𝐴𝑥 = 𝑏, es que se resuelve más fácilmente, si se plantea el sistema de esta manera:

𝐴𝑥 = 𝑏 → 𝐿𝑈𝑥 = 𝑏
↓Resuelvo este sistema↓

𝐿𝑏 = 𝑏

Que se resuelve muy fácilmente por sustitución progresiva, porque 𝐿 es triangular inferior

↓Una vez calculado 𝑏 , resuelvo↓

𝑈𝑥 = 𝑏

Que se resuelve muy fácilmente por sustitución regresiva, porque 𝑈 es triangular superior

Permutación
Falta una consideración: La eliminación gaussiana falla si un pivote es igual a cero.

No se puede hacer la descomposición LU porque no se pueden construir los


multiplicadores de ese paso.

Para evitar esto, antes de proceder a calcular los multiplicadores, se permutan dos filas para
tomar un pivote distinto de cero. Se hace mediante una matriz de permutación:
1 0 0 0 0 1 3 5 1 0 1 3 5 1 0
⎡0 0 0 0 1⎤ ⎡0 1 7 9 1⎤ ⎡0 8 2 2 3⎤
⎢ ⎥⎢ ⎥ ⎢ ⎥
⎢0 0 1 0 0⎥ ⎢0 3 1 6 5⎥ = ⎢0 3 1 6 5⎥
⎢0 0 0 1 0⎥ ⎢0 2 5 1 4⎥ ⎢0 2 5 1 4⎥
⎣0 1 0 0 0⎦ ⎣0 8 2 2 3⎦ ⎣0 1 7 9 1⎦

En la práctica, se permutan filas en todos los pasos de la eliminación. No sólo cuando


nos encontramos un pivote nulo. La motivación es que la eliminación gaussiana es
inestable numéricamente (Los errores se amplifican) si los pivotes son muy pequeños.

Se hace, entonces, pivotaje parcial de filas: En cada paso 𝑘 de la eliminación se


permuta la fila 𝑘 con la que contenga el elemento de mayor módulo de la columna 𝑘
por debajo de la diagonal.
1 0 0 0 0 −7 3 1 6 5 −7 3 1 6 5
⎡0 1 0 0 0⎤ ⎡ 0 1 7 9 1⎤ ⎡ 0 1 7 9 1⎤
⎢ ⎥⎢ ⎥ ⎢ ⎥
⎢0 0 0 0 1⎥ ⎢ 0 0 5 1 0⎥ = ⎢ 0 0 6 2 3⎥
⎢0 0 0 1 0⎥ ⎢ 0 0 5 1 4⎥ ⎢ 0 0 5 1 4⎥
⎣0 0 1 0 0⎦ ⎣ 0 0 6 2 3⎦ ⎣ 0 0 5 1 0⎦
Si se hace pivotaje durante la eliminación, no se cumple la relación 𝐴 = 𝐿𝑈. Hay que tener en
cuenta las permutaciones que se han realizado.

Como es lo mismo permutar dos filas en el paso 𝑘 de la eliminación gaussiana que permutarlas
al principio y hacer toda la eliminación sin pivotaje, todas las permutaciones se van a
almacenar en una matriz 𝑃, tal que

𝑃𝐴 = 𝐿𝑈

1.2 Costo operativo


¿En cuántos flops se resuelve el sistema 𝐴𝑥 = 𝑏 mediante la descomposición LU?

Un flop es una operación elemental: Una multiplicación (o división). Es la manera de


cuantificar el costo operativo de un cálculo.

Vimos que los pasos para resolver el sistema 𝐴𝑥 = 𝑏 eran:

1. Hallar la descomposición LU de 𝐴
𝑓𝑙𝑜𝑝𝑠 Basta ir contando el
2. Resolver 𝐿𝑏 = 𝑃𝑏 por sustitución progresiva número de
( ) multiplicaciones de
𝑓𝑙𝑜𝑝𝑠
cada paso
3. Resolver 𝑈𝑥 = 𝑏 por sustitución regresiva
( )
𝑓𝑙𝑜𝑝𝑠

No se han considerado las permutaciones porque no son más que un reordenamiento de filas.
No entran en el conteo de flops.

El costo operativo total obviamente depende del tamaño del sistema, 𝑛, y vale + 𝑛 + , es
decir, del orden de 𝑛 . Esto se expresa de esta manera: + 𝑛 = 𝑂(𝑛 )

1.3 Norma matricial y número de condición


Igual que el valor absoluto para un número real ‖−3‖ = 3 y el módulo para un vector
1
= √2, la norma matricial para una matriz 𝐴(𝑚 x 𝑛) se define como:
1
‖𝐴‖ = max{‖𝐴𝑥‖ ; ‖𝑥‖ = 1}

Considera todos los vectores 𝑥 de norma uno. La aplicación de la matriz 𝐴 sobre ellos
(𝐴 ∙ 𝑥) dará ciertos vectores que no son necesariamente de norma uno. La máxima
norma de entre estos vectores 𝐴𝑥 es la norma matricial de 𝐴

También se puede demostrar que:

‖𝐴‖ = 𝜌(𝐴 𝐴)

Donde 𝜌(𝐴) es el “radio espectral” de la matriz 𝐴: El autovalor de 𝐴 de mayor módulo


El número de condición de una matriz 𝐴 se define como:
Autovalores de
𝜆 (𝐴 𝐴)
𝑐𝑜𝑛𝑑(𝐴) ≔ ‖𝐴 ‖‖𝐴‖ = 𝐴 𝐴 de máximo y
𝜆 (𝐴 𝐴)
mínimo módulo
El número de condición de una matriz 𝐴 es una forma de medir la relación entre la magnitud
de los errores presentes en los datos del sistema 𝐴𝑥 = 𝑏, y los que se cometen al resolverlo.

Recuerda que siempre que se trata con números de más de 16 cifras significativas es
inevitable cometer errores. Con Matlab no vamos a ser capaces de retener todas sus
cifras.

Al plantear el sistema ya se cometen errores de este tipo: Supondremos que hay errores en el
vector 𝑏, y que en vez del vector 𝑏 real, resolvemos el sistema con el vector 𝑏 + 𝛿𝑏. Al
resolverlo no obtendremos 𝑥, sino 𝑥 + 𝛿𝑥
𝐴𝑥 = 𝑏
→ 𝐴𝛿𝑥 = 𝛿𝑏 → 𝐴 𝛿𝑏 = 𝛿𝑥
𝐴(𝑥 + 𝛿𝑥) = 𝑏 + 𝛿𝑏
Tomando normas de las dos ecuaciones señaladas, tenemos:
‖𝐴‖ 1
‖𝐴‖‖𝑥‖ ≥ ‖𝑏‖ → ≥ ‖𝛿𝑥‖ ‖𝛿𝑏‖
‖𝑏‖ ‖𝑥‖ → ≤ ‖𝐴‖‖𝐴 ‖
‖𝑥‖ ‖𝑏‖
‖𝐴 ‖‖𝛿𝑏‖ ≥ ‖𝛿𝑥‖

‖𝛿𝑥‖ ‖𝛿𝑏‖
≤ 𝑐𝑜𝑛𝑑(𝐴)
‖𝑥‖ ‖𝑏‖

Si una matriz tiene un número de condición grande, significa que la solución 𝑥 del sistema
𝐴𝑥 = 𝑏 tendrá errores mucho más grandes que los que se introducen inicialmente en 𝑏.

2. Problemas sobredeterminados
2.1 Solución de Mínimos cuadrados
Problemas sobredeterminados: más ecuaciones que incógnitas. Lo normal es que no tengan
solución así que lo que se hace es buscar su solución en el sentido de mínimos cuadrados. Es lo
que hace Matlab si le pides que resuelva un sistema sobredeterminado.

𝐴𝑥 = 𝑏 (Con 𝐴 rectangular 𝑚 x 𝑛, ya no es invertible)

La solución de mínimos cuadrados (𝑥 ∗ ) es el vector que minimiza la norma del error (residuo:
𝑏 − 𝐴𝑥 ∗). Una solución en el sentido de los mínimos cuadrados…

 Es la solución de las ecuaciones normales de Gauss: [𝐴 𝐴𝑥 ∗ = 𝐴 𝑏]


 𝑏 − 𝐴𝑥 ∗ es ortogonal a 𝑐𝑜𝑙(𝐴) (el espacio que generan las columnas de 𝐴)
Además, la solución de mínimos cuadrados va a ser única si el rango de la matriz 𝐴 es máximo

Se pueden deducir las ecuaciones normales de Gauss por dos vías. Una primera por
razonamientos geométricos: Lo que se busca minimizar es la distancia entre los
vectores 𝑏 y 𝐴𝑥 (se minimiza 𝑏 − 𝐴𝑥). 𝐴𝑥 está contenido en el espacio columna de
𝐴 (que por comodidad se puede visualizar como un plano), así que el vector 𝐴𝑥 que
menos dista de 𝑏 es justo la proyección de 𝑏 sobre el espacio columna de 𝐴,
llamémoslo 𝑃 ( ) 𝑏 = 𝐴𝑥 ∗. Entonces 𝑏 se puede descomponer en unas “coordenadas
intrínsecas”: una componente 𝑃 ( ) 𝑏 contenida en el espacio columna de 𝐴, y otra
que es perpendicular al mismo (𝑏 − 𝑃 ( ) 𝑏 = 𝑏 − 𝐴𝑥 ∗).
Si ese vector es perpendicular al espacio columna se cumple que:

𝐴 ∙ (𝑏 − 𝐴𝑥 ∗ ) = 0 → 𝐴 𝐴𝑥 ∗ = 𝐴 𝑏
La otra forma de deducirlas es mediante optimización: Si la solución de mínimos
cuadrados hace mínima la norma del residuo, también hace mínimo el cuadrado de la
norma del residuo, así que optimizaremos la función 𝑓(𝑥) = ‖𝑏 − 𝐴𝑥‖ . Se tiene que
el gradiente (derivada con respecto a 𝑥) de la función se anula para el valor de 𝑥
mínimo:

∇𝑓(𝑥) = 2(𝐴 𝐴𝑥 − 𝐴 𝑏) = 0 → 𝐴 𝐴𝑥 ∗ = 𝐴 𝑏

Vamos, que para hallar la solución en el sentido de los mínimos cuadrados basta con resolver
las ecuaciones normales de gauss 𝐴 𝐴𝑥 ∗ = 𝐴 𝑏. Hay que calcular 𝐴 𝐴, por otro lado 𝐴 𝑏 y
resolver el sistema…

Pues NO es así de sencillo:

Resulta que las ecuaciones normales de Gauss, en esta forma, están bastante mal
condicionadas, esto es, que las matrices involucradas tienen un número de condición grande:
los resultados de estas ecuaciones tienen errores notablemente mayores que los errores que,
inevitablemente, se introducen en los datos de entrada. Esto, evidentemente, es indeseable.

Por compararlo con el número de condición de 𝐴: (𝑐𝑜𝑛𝑑(𝐴 𝐴) = 𝑐𝑜𝑛𝑑(𝐴) )

Entonces lo que se hace es recurrir a la descomposición QR de la matriz 𝐴, que involucra


matrices con números de condición menores que el de 𝐴 𝐴.

2.2 Descomposición QR
Igual que la descomposición LU se basaba en la eliminación gaussiana, la descomposición QR
se basa en el método de ortogonalización de Gram-Schmidt:

El procedimiento de ortogonalización de Gram Schmidt, dado un conjunto de vectores


[𝑎 , … , 𝑎 ] linealmente independientes de partida, construye una serie de vectores
[𝑞 , … , 𝑞 ] que forman una base ortonormal del espacio que generan [𝑎 , … , 𝑎 ].

Los vectores [𝑞 , … , 𝑞 ] :

 Son ortogonales entre sí


 Son de norma uno
 Generan el mismo espacio vectorial que los vectores [𝑎 , … , 𝑎 ] de partida

La ortogonalización de Gram-Schmidt ya sabemos en qué consiste:

El algoritmo de ortogonalización de Gram-Schmidt consiste en ir restando a cada vector 𝑎 las


direcciones de los [𝑞 , … , 𝑞 ] ya determinados, para quedarnos con una nueva dirección de la
base que nos interesa formar. Se parte de uno de los vectores 𝑎 , cuya dirección se va a tomar
como primera dirección definitiva de la base. Cada vez que se obtiene un vector con una nueva
dirección [𝑣 , … , 𝑣 ] basta normalizar, dividiendo por su norma. Así se van consiguiendo los 𝑞 .

EJERCICIO 14

La descomposición QR de una matriz 𝐴 (𝑚 x 𝑛) con 𝑚 > 𝑛 se deduce observando el algoritmo


de Gram-Schmidt, que aplicamos a las columnas de 𝐴 = [𝑎 , … , 𝑎 ]

Cada nuevo vector [𝑣 , … , 𝑣 ] se obtiene mediante el algoritmo:

[𝑣 = 𝑎 − α , q − α , q − ⋯ − α , q ] Para (𝑗 = 2,3, … , 𝑛) (cada columna)

↓reordenación↓

𝑎 = 𝑣 + α , q + α , q + ⋯+α , q

↓donde [𝑣 = 𝑣 ∙𝑞 ]↓

𝑎 = 𝑣 ∙ 𝑞 + α , q + α , q +⋯+ α , q

↓reordenación tonta↓

𝑎 = α , q + α , q + ⋯+ α , q + 𝑣 ∙𝑞

Observa que cada vector 𝑎 se puede identificar como la suma de los vectores [𝑞 , … , 𝑞 ] cada
uno multiplicado por un escalar:

 Los primeros 𝑗 − 1 (𝑞 , … , 𝑞 ) por α ,


 Y el último (𝑞 ), por 𝑣 = β

Esto se puede expresar como una multiplicación:


α ,

𝑎 = 𝑞 ,…,𝑞 ∙ α ,
vectores β

↓que es lo mismo que↓


α ,

⎛α , ⎞
𝑎 = 𝑞 ,…,𝑞 ,𝑞 ,…,𝑞 ∙⎜
⎜ β
⎟= 𝑄 ∙𝑟

⎜ 0 ⎟

⎝ 0 ⎠
Es el producto de una matriz por un vector. Y esto es para sólo un vector 𝑎 . Calcularlos todos a
la vez sería:

[𝑎 , … , 𝑎 ] = 𝐴 = 𝑄 ∙ [𝑟 , … , 𝑟 ] = 𝑄 ∙ 𝑅
β α , ⋯ α , α ,
⎛0 β ⋯ α , α ,

𝐴 = 𝑞 ,…,𝑞 ,𝑞 ,…,𝑞 ∙⎜0 0 ⋱ ⋮ ⋮ ⎟
0 0 0 β α ,
⎝ 0 0 0 0 β ⎠

Esta es la descomposición QR Reducida, [𝐴 = 𝑄 𝑅 ]:

 Q tiene las dimensiones de 𝐴 (𝑚 x 𝑛)


 R es de dimensión (𝑛 x 𝑛) y triangular superior. Contiene en su diagonal los
coeficientes 𝛽, y por encima los 𝛼

La matriz Q , al contener vectores ortonormales entre sí, cumple que [Q Q = 𝐼], pero Q
no es una matriz ortogonal (Q = Q ) si 𝐴 no es invertible (Cuadrada).

Como hay casos en los que va a resultar útil que la matriz 𝑄 sea ortogonal, se usa la
descomposición QR estándar en vez de la QR Reducida, en la que se hace 𝑄 cuadrada:

En la descomposición QR [𝐴 = 𝑄𝑅]:

 𝑄 tiene dimensiones (𝑚 x 𝑚). Se construye a partir de la Q , rellenándola por la


derecha con 𝑚 − 𝑛 columnas de vectores linealmente independientes (y unitarios)
 𝑅 es rectangular ahora, con dimensiones (𝑚 x 𝑛). Se obtiene a partir de la R ,
rellenándola por debajo con 𝑚 − 𝑛 filas de ceros

𝐴 = Q R = (Q Q )∙ R = 𝑄𝑅
0

La descomposición QR Reducida nos sirve para obtener la solución de mínimos cuadrados del
sistema sobredeterminado 𝐴𝑥 = 𝑏 sin cometer grandes errores.

La solución de mínimos cuadrados, 𝑥 ∗ , sigue siendo la solución de las ecuaciones normales de


Gauss, pero si se reescribe en función de las matrices Q y 𝑅 , el problema queda mejor
condicionado:

[𝐴 𝐴𝑥 ∗ = 𝐴 𝑏] → 𝑅 Q Q R 𝑥∗ = R Q 𝑏 →

→ R 𝑅 𝑥∗ = R Q 𝑏 → [R 𝑥 ∗ = Q 𝑏]

La solución de mínimos cuadrados de 𝐴𝑥 = 𝑏 es la solución (exacta) del sistema determinado:

R 𝑥∗ = Q 𝑏
El mismo desarrollo podía haberse hecho usando la descomposición QR estándar en vez de la
reducida, pero de usar la estándar, el sistema 𝑅𝑥 ∗ = 𝑄 𝑏 quedaría, a su vez,
sobredeterminado (𝑅 es 𝑚 x 𝑛), y 𝑥 ∗ sería la solución de mínimos cuadrados de 𝑅𝑥 ∗ = 𝑄 𝑏

Una última consideración: Para aplicar Gram Schmidt se suponen los vectores iniciales
[𝑎 , … , 𝑎 ] linealmente independientes, así que el procedimiento falla si hay por lo
menos dos vectores linealmente dependientes de partida…

EJERCICIO 18

2.3 Método de Householder para la descomposición QR


El método de Gram-Schmidt es sensible a errores de redondeo: Los vectores [𝑞 , … , 𝑞 ] que se
obtienen no resultan ser exactamente ortogonales.

Existe otro método más exacto para obtener la descomposición QR: El método de
Householder. Las transformaciones de Householder son un caso particular de simetría
especular.

Paréntesis:

La simetría especular es una transformación de ℝ en ℝ que asocia a cada punto de ℝ su


simétrico con respecto a un hiperplano, de dimensión ℝ (Es fácil verlo cuando 𝑚 = 3).
Conocido el vector 𝑣 perpendicular al hiperplano 𝑉, el simétrico de un vector 𝑥 con respecto al
hiperplano es:

[𝑇𝑥 = 𝑥 − 2𝑃 𝑥], siendo 𝑃 𝑥 = 𝑣 → 𝑇𝑥 = 𝑥 − 2( 𝑣)

Para hallar el simétrico de 𝑥 se le resta dos veces su proyección sobre el vector normal al
plano. De aquí se puede deducir la matriz de transformación de simetría especular.

𝑣 𝑥 1 𝑣𝑣 𝑣𝑣
𝑇𝑥 = 𝑥 − 2 𝑣 =𝑥−2 𝑣(𝑣 𝑥) = 𝑥 − 2 𝑥 = 𝐼−2 𝑥
𝑣 𝑣 𝑣 𝑣 𝑣 𝑣 𝑣 𝑣
escalar
𝑣𝑣
𝑇 =𝐼−2
𝑣 𝑣

Esta matriz 𝑇 de simetría especular:

 Es simétrica
𝑣𝑣 2 2 𝑣𝑣
𝑇 =𝐼− 2 =𝐼− (𝑣𝑣 ) = 𝐼 − (𝑣 ) 𝑣 = 𝐼 − 2 =𝑇
𝑣 𝑣 𝑣 𝑣 𝑣 𝑣 𝑣 𝑣
 Su inversa es ella misma
2 2 4 4
𝑇𝑇 = 𝐼 − 𝑣𝑣 𝐼− 𝑣𝑣 =𝐼− 𝑣𝑣 + 𝑣𝑣 𝑣𝑣 =
𝑣 𝑣 𝑣 𝑣 𝑣 𝑣 (𝑣 𝑣)
4 4 4 4
=𝐼− 𝑣𝑣 + 𝑣 𝑣𝑣𝑣 = 𝐼 − 𝑣𝑣 + 𝑣𝑣 = 𝐼
𝑣 𝑣 (𝑣 𝑣) 𝑣 𝑣 𝑣 𝑣

 Es ortogonal, como consecuencia de las dos anteriores

Al ser ortogonal, la transformación 𝑇 no cambia la norma del vector al que se aplica.

La transformación de Householder es un caso particular de simetría especular, en la que el


vector transformado lleva la dirección del primer vector coordenado. Por tanto, se define una
matriz de transformación de Householder, 𝐻, para cada vector 𝑥 que se quiera transformar.

Para deducir la expresión de 𝐻, buscamos la simetría que transforme el vector 𝑥 cualquiera en


el vector 𝑦 de mismo módulo y dirección 𝑒 , (el primer vector coordenado):

𝑣𝑣 𝑦 = −𝛿‖𝑥‖𝑒
𝐻 =𝐼−2 ;
𝑣 𝑣 𝑣 =𝑥−𝑦

𝑣𝑣
𝐻 =𝐼−2
𝑣 𝑣
(𝑣 = 𝑥 + 𝛿‖𝑥‖𝑒 )

El vector 𝑦 se define así, con [𝛿 = signo de 𝑥 ] para evitar cancelación numérica en 𝑣

EJERCICIO 16
Vista la base, ahora vamos a determinar el Método de Householder para obtener la
descomposición QR de una matriz.

No perdamos de vista que la descomposición QR de la matriz 𝐴 nos servía para obtener la


solución de mínimos cuadrados del sistema 𝐴𝑥 = 𝑏

Recordemos también que, para hacer la descomposición QR, se utiliza este método en
vez del que usa ortogonalización de Gram-Schmidt porque se cometen menos errores.

La idea es la siguiente:

En cada paso vamos a ir transformando la matriz 𝐴 (𝐴( ) =𝐴 ; 𝐴( ) ; 𝐴( ) ; … ; 𝐴( ) ) usando


transformaciones de Householder:

𝐴( )
será la matriz 𝑅, triangular superior, de la descomposición QR.

Los ceros debajo de la diagonal son el resultado de aplicar la transformación de Householder


en cada paso. Recuerda que el resultado de una transformación de Householder es un vector
paralelo al primer vector coordenado.

 En cada paso 𝑘 vamos a crear una matriz de transformación de Householder para la


subcolumna 𝑘 (marcada en la figura) de la matriz 𝐴( ) .
 Cada matriz de Householder, una vez ajustadas sus dimensiones, se aplica a nuestra
matriz 𝐴( ) : 𝐴( ) = 𝐻 ∙ 𝐴( ) . Como resultado, la matriz 𝐴( ) tendrá una
subcolumna de ceros adicional.
 En cada paso la matriz de Householder será de menor dimensión. Por esto lo de
“ajustar las dimensiones”. Hay que completar cada matriz de Householder con la
matriz identidad para que tenga dimensiones compatibles con 𝐴( ) (𝑚 x 𝑛)

Tras aplicar todas las transformaciones de Householder sobre 𝐴, el resultado es una matriz
triangular superior, 𝑅.

[𝐻 ∙ … ∙ 𝐻 ∙ 𝐻 ∙ 𝐴 = 𝑅] → 𝐴 = 𝐻 ∙𝐻 ∙ …∙ 𝐻 ∙𝑅 =𝑄∙𝑅

La multiplicación de las inversas de las matrices 𝐻 entre ellas resulta finalmente en la matriz
𝑄.
EJERCICIO 17

El costo operativo de obtener las matrices Q y R por el método de Householder es 2𝑚 𝑛 −


𝑚𝑛 + 𝑓𝑙𝑜𝑝𝑠, pero obtener la solución de mínimos cuadrados a partir de R 𝑥 ∗ = Q 𝑏 se
puede hacer en menos, en 𝑚𝑛 − 𝑓𝑙𝑜𝑝𝑠.

Esto es porque en realidad, para resolver R 𝑥 ∗ = Q 𝑏, no es necesario calcular


explícitamente la matriz 𝑄 . Basta con aplicar en cada paso las transformaciones 𝐻 a 𝐴( ) ,
para acabar obteniendo 𝑅 , y a 𝑏 ( ) , para acabar obteniendo Q 𝑏.

Al programar la descomposición QR por Householder, ten en cuenta esto:


escalar
2 2 2
𝐻𝑎 = 𝐼 − 𝑣𝑣 𝑎 = 𝑎 − 𝑣𝑣 𝑎 = 𝑎 − ( (𝑣 𝑎))𝑣
𝑣 𝑣 𝑣 𝑣 𝑣 𝑣
Pero, siendo 𝐻 (𝑚 x 𝑚), multiplicar 𝐻 ∙ 𝑎 cuesta 𝑚 𝑓𝑙𝑜𝑝𝑠, mientras que calcular
desde dentro 𝑎 − ( (𝑣 𝑎))𝑣 (haciendo primero 𝑣 𝑎 y 𝑣 𝑣) cuesta sólo 2𝑚 𝑓𝑙𝑜𝑝𝑠.

Una última consideración: Resolver un sistema 𝐴𝑥 = 𝑏 con 𝐴 cuadrada, por QR, en el mejor de
los casos se tardaría el doble que por LU. Matlab de hecho, con el comando 𝐴\𝑏, usa LU para
resolver sistemas con solución exacta y QR para resolver problemas de mínimos cuadrados.

3. Matrices de rango deficiente


Hasta ahora hemos visto los casos… 𝐴 (𝑛 𝑥 𝑛) invertible → Sol exacta, Descomposición LU

𝐴 (𝑚 𝑥 𝑛) con rango 𝑛 → Sol Min C, Descomposición QR

Ahora vamos a ver el caso que falta: 𝐴 (𝑚 𝑥 𝑛) con rango menor que 𝑛

En este caso, el sistema 𝐴𝑥 = 𝑏 tiene infinitas soluciones de mínimos cuadrados.

Demostración: Sabemos que 𝑥 ∗ es una solución de mínimos cuadrados de 𝐴𝑥 = 𝑏 si


cumple las ecuaciones normales de Gauss (𝐴 𝐴𝑥 ∗ = 𝐴 𝑏). Además, si el rango de 𝐴
no es máximo, existen infinitos vectores 𝑐 tal que 𝐴𝑐 = 0.

𝐴 𝐴𝑥 = 𝐴 𝑏 → 𝐴 (𝑏 − 𝐴𝑥) = 0
𝐴𝑐 = 0 → λAc = 0 → 𝐴 (𝐴𝜆𝑐) = 0
↓La resta de las dos expresiones↓

𝐴 (𝑏 − 𝐴(𝑥 + 𝜆𝑐)) = 0
Y lo anterior se cumple ∀ 𝜆, así que hay infinitos vectores (𝑥 + 𝜆𝑐) que son solución de
mínimos cuadrados del sistema 𝐴𝑥 = 𝑏
La solución que suele interesar en estos casos es la solución de mínimos cuadrados que tenga
norma mínima. Se la llama solución óptima 𝑥 ∗ .

Se puede demostrar que la solución óptima es la única perpendicular al espacio nulo de 𝐴. Por
tanto, la solución óptima cumple:

[𝑧 𝑥 ∗ = 0] ∀ 𝑧 ∈ 𝑁𝑢𝑙(𝐴)

En la práctica, para hallar la solución óptima nos basaremos en la descomposición de una


matriz en valores singulares.

3.1 Descomposición en valores singulares (SVD)


Se les llama...

 Valores singulares (𝜎 , 𝜎 , … , 𝜎 ) de 𝐴 a las raíces cuadradas de los autovalores de la


matriz 𝐴 𝐴.
 Vectores singulares derechos (𝑣 , … , 𝑣 ) a los autovectores de 𝐴 𝐴.
 Vectores singulares izquierdos (𝑢 , … , 𝑢 ), que se definen:
1
𝑢 = 𝐴𝑣 𝑐𝑜𝑛 𝑖 = 1: 𝑟
𝜎
Por ser 𝐴 𝐴 simétrica y semidefinida positiva (𝑥 𝐴 𝐴𝑥 = (𝐴𝑥) 𝐴𝑥 = ‖𝐴𝑥‖ ≥ 0),
todos sus autovalores son reales y mayores o iguales que cero. Otra propiedad de ser
la matriz simétrica es que tiene 𝑟 autovectores ortogonales entre sí.

La descomposición en valores singulares de una matriz 𝐴 (𝑚 𝑥 𝑛) de rango 𝑟 < 𝑛 consta de


tres matrices 𝑈, Σ, 𝑉 tal que:

𝐴 = 𝑈Σ𝑉

 𝑈 tiene dimensiones (𝑚 𝑥 𝑚), es ortogonal y sus 𝑟 primeras columnas son los


vectores singulares izquierdos (𝑢 , … , 𝑢 ). El resto de columnas se completan con
𝑚 − 𝑟 vectores, para que (𝑢 , … , 𝑢 ) forme una base ortonormal de ℝ .

Es una matriz ortogonal porque los primeros 𝑟 autovectores ya eran ortogonales


entre sí y los otros (𝑚 − 𝑟) los elegimos ortogonales al resto

 Σ tiene dimensiones (𝑚 𝑥 𝑛) y sus primeros 𝑟 elementos diagonales son los


valores singulares de la matriz 𝐴 𝐴, colocados en orden decreciente. Los
elementos fuera de la diagonal y los diagonales por debajo de la posición 𝑟 son
todos ceros.
 𝑉 tiene dimensiones (𝑛 𝑥 𝑛), es ortogonal y todas sus columnas son los vectores
singulares derechos.

→ Como 𝐴 es (𝑚 x 𝑛) con 𝑚 > 𝑛 y 𝑟𝑎𝑛𝑔𝑜 < 𝑛, van a salir 𝑛 − 𝑟 autovalores nulos. Así que los
𝑛 − 𝑟 autovectores asociados a los autovalores nulos se tienen que elegir ortogonales al resto
para que 𝑉 salga ortogonal.
EJERCICIO 27,18

También existe la descomposición en valores singulares “reducida”, donde las matrices sólo
llegan a dimensión 𝑟: 𝑈 (𝑚 𝑥 𝑟); Σ (𝑟 𝑥 𝑟); 𝑉 (𝑛 𝑥 𝑟). Tiene sentido porque las filas y
columnas de 𝑉 y 𝑈 por abajo y por la derecha de la posición 𝑟 se anulan con los ceros de Σ.
Esta descomposición va a ser útil.
Σ 𝑂
𝐴 = 𝑈Σ𝑉 = 𝑈 𝑉 → 𝐴=𝑈 Σ 𝑉
𝑂 𝑂
Para el resultado que vamos buscando (Hallar la solución óptima de un sistema 𝐴𝑥 = 𝑏, siendo
𝐴 matriz de rango deficiente) hay que definir la matriz pseudoinversa 𝐴 :

𝐴 =𝑉Σ 𝑈

↓Es tal que, si 𝐴 es cuadrada e invertible, 𝐴 = 𝐴 ↓

𝐴 𝐴=𝑉Σ 𝑈 𝑈Σ 𝑉 =𝑉Σ Σ 𝑉 =𝑉𝑉 =𝐼

Ahora veremos finalmente cómo alcanzar la solución óptima 𝑥 ∗ usando esta descomposición
SVD. Es tan fácil como:

𝑥∗ = 𝐴 𝑏 = 𝑉 Σ 𝑈 𝑏

Demostración:

Para ser 𝑥 ∗ la solución óptima, debe ser 𝑎) solución del problema de mínimos cuadrados
𝐴𝑥 = 𝑏, y además ser 𝑏) perpendicular al espacio nulo de 𝐴

𝑎) Se deben cumplir las ecuaciones normales de Gauss (𝐴 𝐴)𝑥 ∗ = 𝐴 𝑏:

Por un lado → 𝐴 𝐴 = 𝑉 Σ 𝑈 𝑈 Σ 𝑉 =𝑉Σ Σ 𝑉 =𝑉Σ 𝑉

Ahora (𝐴 𝐴)𝑥 ∗ = 𝑉 Σ 𝑉 𝑉 Σ 𝑈 𝑏=𝑉Σ Σ 𝑈 𝑏=𝑉Σ 𝑈 𝑏=𝐴 𝑏 ✓

𝑏) Se debe cumplir [𝑥 ∗ ⊥ 𝑁𝑢𝑙(𝐴)]

Resulta que [𝑥 ∗ ∈ 𝑐𝑜𝑙(𝑉 ) ⊥ 𝑁𝑢𝑙(𝐴)]

𝑥∗ = 𝐴 𝑏 = 𝑉 Σ 𝑈 𝑏=𝑉 Σ 𝑈 𝑏 ∈ 𝑐𝑜𝑙(𝑉 )

[𝑁𝑢𝑙(𝐴) = 𝑁𝑢𝑙(𝐴 𝐴) = 𝑙𝑖𝑛(𝑣 , … , 𝑣 ) ⊥ 𝑐𝑜𝑙(𝑉 )]


Para entender que 𝑁𝑢𝑙(𝐴) ⊥ 𝑐𝑜𝑙(𝑉 ) hay que tener en cuenta…

 Que las primeras 𝑟 columnas de 𝑉 son los autovectores de 𝐴 𝐴 asociados a autovalores


No nulos. El resto de (𝑛 − 𝑟) columnas de 𝑉 se corresponden con los autovectores de 𝐴 𝐴
que llevan asociados autovalores Nulos (Son necesariamente nulos porque cualquier
matriz de rango no máximo tiene (𝑛 − 𝑟) autovectores nulos), y que se han elegido para
que sean ortonormales a las anteriores columnas de 𝑉.
 Cómo funcionan los autovalores (𝜆 ) y autovectores (𝑣 ) de una matriz A:

𝐴𝑣 = 𝜆 𝑣

 Que los espacios que generan dos conjuntos de vectores son ortogonales entre sí si todos
los vectores de cada conjunto son ortogonales a los vectores del otro conjunto.

4. Casos particulares relevantes


4.1 Matrices simétricas y definidas positivas
Para el caso particular de que la matriz 𝐴 sea simétrica y definida positiva (por tanto,
cuadrada), la eliminación gaussiana se puede simplificar: Se puede hacer sin pivotaje y de
manera numéricamente estable. Es menos costoso.

Basado en esto, en vez de usar la descomposición LU se usa la descomposición de Cholesky.

Una matriz es definida positiva cuando al pre y postmultiplicarla por un vector


cualquiera se obtiene un valor positivo. Si además es simétrica, se cumple que todos
sus autovalores son estrictamente positivos.

Otra consecuencia de ser simétrica y definida positiva es que todos sus elementos
diagonales son positivos:

Se tiene que cumplir [𝑥 𝐴𝑥 > 0] para cualquier vector 𝑥. Eligiendo 𝑥 = 𝑒 =


[1 0 … 0] se tiene 𝑎 , > 0. Igual para el resto de elementos diagonales.

Vamos a demostrar que bajo estas condiciones es posible hacer la eliminación Gaussiana sin
pivotaje, porque en ningún paso de la eliminación vamos a obtener un pivote nulo:

Para empezar, el primer pivote seguro que va a ser no nulo (y positivo). Empezamos la
eliminación:

1 0
𝑎, 𝑏 𝑏
𝐴= ; 𝑀 =
𝑏 𝐵 − 𝐼
𝑎,

1 0 𝑎 , 𝑏
( ) 𝑏 𝑎, 𝑏 1
→ 𝐴 =𝑀 𝐴= =
− 𝐼 𝑏 𝐵 0 𝐵− 𝑏𝑏
𝑎, 𝑎,

Existe el Teorema de inercia de Sylvester, que dice que siendo dos matrices 𝐴 (𝑛 𝑥 𝑛)
simétrica y 𝑃 (𝑛 𝑥 𝑛) invertible, las matrices 𝐴 y 𝑃𝐴𝑃 tienen el mismo número de
autovalores positivos, negativos y nulos.

𝑎 , 𝑏 1 𝑎 , 0
1 1 − 𝑏 1
𝑀 𝐴𝑀 = 𝑎, =
0 𝐵− 𝑏𝑏 0 𝐵− 𝑏𝑏
𝑎, 0 𝐼 𝑎,
Sabemos que la matriz 𝐴 sólo tiene autovalores estrictamente positivos, y vemos que
los autovalores de la matriz 𝑀 𝐴𝑀 son 𝑎 , y los autovalores de la submatriz
𝐵− 𝑏𝑏 .
,

El resultado del Teorema de inercia es que las matrices 𝐴 y 𝑀 𝐴𝑀 tienen el mismo


número de autovalores positivos: Los autovalores de 𝐵 − 𝑏𝑏 son todos
,
estrictamente positivos.

Como 𝐵 − 𝑏𝑏 sólo tiene autovalores estrictamente positivos y es simétrica,


,
automáticamente debe ser definida positiva, y entonces todos los elementos de su
diagonal son estrictamente positivos. Y por tanto no nulos. Se puede repetir el mismo
razonamiento para todos los pasos de la eliminación.

El caso es que se puede hacer la eliminación gaussiana sin pivotaje porque no nos topamos con
ningún pivote nulo.

No lo vamos a demostrar, pero para matrices simétricas y definidas positivas la eliminación


Gaussiana sin pivotaje además es numéricamente estable: No amplifica errores.

Descomposición de Cholesky:
Está definida para matrices simétricas y definidas positivas.

Consta de una única matriz 𝑅 (𝑛 𝑥 𝑛) triangular superior con elementos diagonales positivos
tal que…

𝐴=𝑅 𝑅

Se puede obtener con un costo de la mitad que el costo de la descomposición LU.

La matriz 𝑅 se deduce a partir de la descomposición LU. La matriz 𝑈, que era triangular


superior, se puede descomponer en:
𝑢 𝑢
𝑢 𝑢 … 𝑢 𝑢 0 … 0 ⎡1 𝑢 … ⎤
𝑢
0 𝑢 … 𝑢 0 𝑢 ⎢ ⎥
… 0 ⎢0 1 … ⋮ ⎥ = 𝐷𝑈
𝑈= ⋱ ⋮ = 𝑢
⋮ ⋱ ⋮ ⋱ ⋱ ⋮ ⎢ ⋮ ⋱ , ⎥

0 … 0 𝑢 0 … 0 𝑢 ⎢ 𝑢 , ⎥
0 …
⎣ 0 1 ⎦

Para matrices simétricas y definidas positivas resulta que 𝑈 = 𝐿

↓Podemos reescribir la descomposición LU↓


/ /
𝐴 = 𝐿𝑈 = 𝐿𝐷𝑈 = 𝐿𝐷𝐿 = 𝐿𝐷 𝐷 𝐿 =𝑅 𝑅

/
𝐴=𝑅 𝑅 siendo 𝑅=𝐷 𝐿
EJERCICIO 37

4.2 Matrices banda


Matriz banda es una que sólo tiene elementos no nulos en torno a su diagonal principal,
formando una banda. Se le llama anchura de banda superior (𝑘 ) y anchura de banda inferior
(𝑘 ) al número de diagonales que forman la banda por encima y por debajo de la diagonal
principal. El ancho de banda total es 𝑘 + 𝑘 + 1
1 1 0 0 0 0
⎡1 2 1 0 0 0⎤
⎢5 2 8 1 0 0⎥⎥

⎢0 2 9 7 1 0⎥
⎢0 0 3 2 4 1⎥
⎣0 0 0 6 4 5⎦

Para matrices banda, en la eliminación gaussiana podemos ahorrar operaciones. Se puede


realizar la eliminación con un costo del orden de 𝑛 (Suponiendo que A es (𝑛 x 𝑛)), mientras
que normalmente cuesta del orden de Ο(𝑛 ).

Costo de la eliminación gaussiana…

 Sin pivotaje el costo máximo es 𝑛𝑘 (𝑘 + 1)


 Con pivotaje el costo máximo es 𝑛𝑘 (𝑘 + 𝑘 )

Cada vez que se hace pivotaje en un paso de la eliminación aumentamos la anchura de banda
superior. Estamos llenando la matriz: Hemos reemplazado elementos nulos que estaban fuera
de la banda por no-nulos.

1 1 0 0 0 0 1 2 1 0 0 0
⎡1 2 1 0 0 0⎤ ⎡1 1 0 0 0 0⎤
⎢5 2 8 1 0 0⎥⎥ ⎢⎢5 2 8 1 0 0⎥⎥
⎢ →
⎢0 2 9 7 1 0⎥ ⎢0 2 9 7 1 0⎥
⎢0 0 3 2 4 1⎥ ⎢0 0 3 2 4 1⎥
⎣0 0 0 6 4 5⎦ ⎣0 0 0 6 4 5⎦

Como mucho la banda se puede ampliar 𝑘 unidades. En la medida de lo posible hay que evitar
este fenómeno de llenado. Hay dos razones: Por ocupar menos memoria y porque resolver el
sistema con la matriz llenada es más costoso.

Matlab, al hacer la descomposición LU, detecta si la matriz con que trabaja es simétrica y
definida positiva y actúa en consecuencia, reduciendo el costo operativo. Sin embargo, Matlab
no detecta si una matriz es banda. Para que aproveche el hecho de ser banda y haga menos
operaciones hay que presentarle la matriz en formato triada. Para eso está el comando
𝑠𝑝𝑎𝑟𝑠𝑒.
4.3 Matrices dispersas
Matriz dispersa es aquella cuyos elementos no nulos están en proporción baja respecto al
total. Con ellas conviene trabajar almacenando sólo sus elementos no nulos. Esto se puede
hacer con el formato triada, en el que intervienen tres vectores:

1) Vector con las filas donde se encuentran los elementos no nulos (𝑖 )


2) Vector con las columnas donde se encuentran los elementos no nulos (𝑗 )
3) Vector donde se almacenan los elementos no nulos de la matriz (𝑎)

Son tales que el k-ésimo elemento de 𝑎 está en la posición (𝑖 (𝑘), 𝑗 (𝑘))

El formato triada es muy útil para matrices dispersas de grandes dimensiones, ya que ahorra el
espacio que ocuparían los ceros. Para la mayoría de funciones de Matlab, dar en los
argumentos de entrada matrices en formato triada conlleva que los argumentos de salida
también lo lleven.

Un hecho que refuerza la idea de que no conviene calcular la inversa de una matriz y
multiplicar por ella es que las inversas de matrices dispersas suelen ser llenas.

RESUMEN GLOBAL:

El sistema de ecuaciones 𝐴𝑥 = 𝑏…

 Si 𝐴 es (𝑛 x 𝑛) de rango máximo la solución es exacta. Se resuelve usando la


descomposición LU en el caso general y por la descomposición de Cholesky si 𝐴 es
simétrica y definida positiva.

1º) 𝐿𝑏 = 𝑏 → 2º) 𝑈𝑥 = 𝑏

 Si 𝐴 es (𝑚 x 𝑛) de rango máximo se calcula la solución en el sentido de mínimos


cuadrados, usando la descomposición QR. El método de Householder es el más
adecuado para realizar la descomposición.

R 𝑥∗ = Q 𝑏

 Si 𝐴 es (𝑚 x 𝑛) con rango 𝑟 < 𝑛 se calcula la solución óptima usando la


descomposición en valores singulares (SVD).

𝑥∗ = 𝐴 𝑏 = 𝑉 Σ 𝑈 𝑏
LECCIÓN 3: Ecuaciones y sistemas de ecuaciones
no lineales

1. Resolución de ecuaciones no lineales


Ando buscando la raíz 𝑥 ∗ de una función no lineal 𝑓(𝑥). Que cumpla 𝑓(𝑥 ∗ ) = 0.

1.1 El método de Newton


Es un proceso iterativo que se basa en el desarrollo de Taylor:

𝑓 (𝑥 ∗ ) ∙ (𝑥 − 𝑥 ∗ )
𝑓(𝑥) = 𝑓(𝑥 ∗ ) + 𝑓 (𝑥 ∗ ) ∙ (𝑥 − 𝑥 ∗ ) + +⋯
2
𝑓 (𝑥) ∙ (𝑥 ∗ − 𝑥)
𝑓(𝑥 ∗ ) = 0 = 𝑓(𝑥) + 𝑓 (𝑥) ∙ (𝑥 ∗ − 𝑥) + +⋯
2
Si sustituimos en 𝑥 un iterante inicial que sea lo suficientemente cercano a la solución 𝑥 ∗ , el
término cuadrático (𝑥 ∗ − 𝑥) y los de orden mayor del desarrollo serán mucho más pequeños
que el término lineal (𝑥 ∗ − 𝑥). Por tanto, ese y los superiores términos pueden despreciarse.
Despejando 𝑥 ∗ obtendremos una aproximación de la solución en función del iterante inicial
𝑓(𝑥)
𝑥∗ ≈ 𝑥 −
𝑓 (𝑥)
Si ahora repetimos el proceso con el valor aproximado de 𝑥 ∗ recién obtenido, obtendremos
una aproximación aún mejor. Cuantas más iteraciones, más cerca estaremos de la raíz real.

Se puede entender gráficamente como que en cada iteración estamos proyectando la recta
tangente a la curva 𝑓(𝑥) en el punto 𝑥 actual y tomamos como mejor aproximación de 𝑥 ∗ la
raíz de dicha recta tangente.
De nuevo por error de redondeo, nunca se va a alcanzar la raíz exacta. De todas formas, en los
casos prácticos se necesita más o menos precisión, pero nunca se necesitarán las infinitas
cifras decimales de la solución. La precisión con que queramos calcular la solución se fija como
criterio de parada del método, para que haya un límite de iteraciones.

Se impone una condición sobre el error 𝑥 − 𝑥 ∗ (absoluto) que queremos cometer. Fijamos que
la diferencia entre dos iterantes 𝑥 consecutivos (error) sea menor que una cantidad 𝑇𝑂𝐿 ‖𝑥‖
( )
Se itera siempre que se cumpla ‖𝑒‖ = ‖𝑥 − 𝑥 ∗ ‖ = > 𝑇𝑂𝐿 ∙ ‖𝑥‖
( )

Este criterio da problemas si 𝑥 ∗ resulta ser cero: 𝑇𝑂𝐿 ∙ ‖𝑥‖ va a ir disminuyendo más rápido
que el error ‖𝑥 − 𝑥 ∗ ‖, de manera que siempre se va a cumplir ‖𝑒‖ > 𝑇𝑂𝐿 ∙ ‖𝑥‖ y nunca se va
a dejar de iterar. Para solventar este problema se añade un término fijo, 𝑇𝑂𝐿 , a la condición.
Así, aunque ‖𝑒‖ siempre quedará más grande que 𝑇𝑂𝐿 ∙ ‖𝑥‖, en algún momento ‖𝑒‖ va a ser
más pequeño que 𝑇𝑂𝐿 .

𝑤ℎ𝑖𝑙𝑒 ‖𝑒‖ > 𝑇𝑂𝐿 ∙ ‖𝑥‖ + 𝑇𝑂𝐿


Otras veces, en vez de la raíz, lo que interesa calcular es 𝑓(𝑥 ∗ ). En ese caso se aplican
los mismos criterios de parada, pero a 𝑓(𝑥)

𝑤ℎ𝑖𝑙𝑒 ‖𝑓(𝑥) − 𝑓(𝑥 ∗ )‖ > 𝑇𝑂𝐿 ‖𝑓(𝑥)‖ + 𝑇𝑂𝐿

El método de Newton no siempre converge. Si el iterante inicial no es lo suficientemente


cercano a 𝑥 ∗ puede que nunca se alcance una solución.

En cuanto al orden de convergencia del método de Newton:

Si 𝑓 (𝑥 ∗ ) ≠ 0, el error cometido en una iteración es el cuadrado del error cometido en


la iteración anterior. Su convergencia es cuadrática.

Si 𝑓 (𝑥 ∗ ) = 0 el error de una iteración sólo es proporcional al anterior.

Cuantas más derivadas siguientes 𝑓 ( ) (𝑥 ∗ ) = 0, más lento va a converger. En


concreto, si la primera derivada distinta de 0 es la de orden 𝑚, se cumple:
1
𝑥∗ − 𝑥[ ]
≈ 1− 𝑥∗ − 𝑥[ ]
𝑚

1.2 Método de bisección


Siendo la función 𝑓(𝑥) continua, podemos asegurar que, si en dos puntos 𝑥 , 𝑥 toma valores
de signo distinto, 𝑓(𝑥 )𝑓(𝑥 ) < 0, entre esos dos valores debe encontrarse al menos una raíz
𝑥 de la función.

El método de bisección parte de dos valores 𝑥 , 𝑥 en los que 𝑓(𝑥) tiene distinto signo y halla
una raíz contenida entre ellos. Consiste en ir reduciendo el intervalo en el que hay contenida
una raíz hasta que sea lo suficientemente pequeño como la precisión con que queramos
calcularla.
Este método siempre converge, y Converge linealmente.

Una ventaja respecto al Newton es que no hace falta conocer la derivada de 𝑓(𝑥). Es algo
bueno porque en muchas ocasiones no se conoce ni la expresión explícita de 𝑓(𝑥), sino que
simplemente tenemos una entidad que al recibir 𝑥 devuelve 𝑓(𝑥).

1.3 Método de la secante


Igual que el de Newton, el método de la secante se basa en el desarrollo de Taylor, sólo que se
parte de dos valores lo suficientemente cercanos a la raíz. El algoritmo es el mismo que el de
Newton, sólo que se reescribe la derivada 𝑓 (𝑥) como:

𝑓 𝑥[ ] − 𝑓 𝑥[ ]
𝑓(𝑥 ∗ ) ≈ 𝑓(𝑥) + 𝑓 (𝑥)(𝑥 ∗ − 𝑥) → 𝑓 𝑥[ ]

𝑥[ ] − 𝑥[ ]

𝑓(𝑥) 𝑥[ ] − 𝑥[ ]
𝑥[ ]
= 𝑥[ ] − → 𝑥[ ]
= 𝑥[ ] − 𝑓 𝑥[ ]
𝑓 (𝑥 [ ] ) 𝑓(𝑥 [ ] ) − 𝑓(𝑥 [ ])

Si se quiere ver gráficamente, en cada iteración se toma como nuevo 𝑥 [ ]


la raíz de la recta
[ ] [ ] [ ] [ ]
que pasa por los puntos 𝑥 ,𝑓 𝑥 𝑦 𝑥 ,𝑓 𝑥 .

Para el método de la secante no es necesario conocer la derivada de 𝑓(𝑥). Sin embargo, no


siempre converge: como antes, ambos iterantes iniciales deben estar lo bastante cercanos a la
raíz.

Si converge, lo hace casi tan rápido como el método de Newton: Si Newton converge
cuadráticamente, con exponente 2, el método de la secante lo hace con exponente 1.62.
Convergencia “superlineal”

En cualquier caso, la mejor práctica es calcular raíces mediante varios métodos diferentes,
para comprobar que no nos hemos equivocado.
2. Sistemas de ecuaciones no lineales
2.1 Método de Newton
Buscamos la solución de una función 𝑓(𝑥) de 𝑚 componentes donde cada una depende de 𝑚
parámetros. Es el equivalente a resolver un sistema de 𝑚 ecuaciones con 𝑚 incógnitas.

Una manera de hacerlo es usando el método de Newton aplicado a una función de 𝑚


componentes: En vez de un escalar, 𝑥 es un vector, y en vez de la derivada parcial, se tiene la
matriz diferencial (Jacobiana):

𝑓(𝑥 ∗ ) = 0 ≈ 𝑓(𝑥) + 𝐷𝑓(𝑥)(𝑥 ∗ − 𝑥)

𝑑𝑓 𝑑𝑓 𝑑𝑓

𝑥 𝑓 (𝑥 , 𝑥 , 𝑥 ) ⎛𝑑𝑥 𝑑𝑥 𝑑𝑥 ⎞
𝑑𝑓 𝑑𝑓 𝑑𝑓
𝑅𝑒𝑐𝑢𝑒𝑟𝑑𝑎 𝑞𝑢𝑒, 𝑠𝑖 𝑓(𝑥) = 𝑓 𝑥 = 𝑓 (𝑥 , 𝑥 , 𝑥 ) → 𝐷𝑓(𝑥) = ⎜
⎜𝑑𝑥


𝑥 ⎜ 𝑑𝑥 𝑑𝑥 ⎟
𝑓 (𝑥 , 𝑥 , 𝑥 )
𝑑𝑓 𝑑𝑓 𝑑𝑓
⎝𝑑𝑥 𝑑𝑥 𝑑𝑥 ⎠

Igual que antes, esta aproximación es válida si 𝑥 está lo suficientemente cerca de 𝑥 ∗ , porque
podíamos despreciar los términos de orden ≥ 2 del desarrollo de Taylor. Llamando 𝐽 = 𝐷𝑓(𝑥),
despejamos 𝑥 ∗ como:

𝑥∗ ≈ 𝑥 − 𝐽 𝑓(𝑥)

Teniendo en cuenta que NO se va a calcular la inversa de 𝐽 y luego multiplicar 𝐽 𝑓(𝑥),


sino que se va a resolver el sistema:

−𝐽 𝑓(𝑥) = 𝑒 → [𝐽𝑒 = −𝑓(𝑥)]


Y luego

𝑥∗ = 𝑥 + 𝑒

2.2 Cuestiones de orden práctico


El principal problema del método de Newton para sistemas es tener que calcular la matriz
diferencial 𝐽, ya que Matlab nos la puede calcular, pero en ocasiones lo hace con errores
demasiado grandes. Y si la calculamos nosotros a mano, además de tardar más que el
ordenador, es fácil que nos equivoquemos.

Hay una forma general de comprobar si hemos hecho bien la matriz diferencial (y NO es
revisar todos los cálculos):

Basándonos en el desarrollo de Taylor, tenemos:


𝐷 𝑓(𝑥)(𝑥 ∗ − 𝑥)
𝑓(𝑥 ∗ ) = 𝑓(𝑥) + 𝐷𝑓(𝑥)(𝑥 ∗ − 𝑥) + + ó𝑟𝑑𝑒𝑛𝑒𝑠 𝑚𝑎𝑦𝑜𝑟𝑒𝑠
2
↓ Si 𝑒 = (𝑥 ∗ − 𝑥) ↓

𝐷 𝑓(𝑥) ∙ 𝑒
𝑓(𝑥 + 𝑒) − 𝑓(𝑥) − 𝐷𝑓(𝑥) ∙ 𝑒 ≈
2

‖𝑓(𝑥 + 𝑒) − 𝑓(𝑥) − 𝐽 ∙ 𝑒‖ = 𝑂(‖𝑒‖ )

Si hacemos el error más pequeño, multiplicándolo por 𝜀 < 1, y la matriz diferencial 𝐽 está bien
hecha, el orden de la expresión de arriba debería ser 𝜀 𝑒

‖𝑓(𝑥 + 𝜀𝑒) − 𝑓(𝑥) − 𝜀 𝐽 ∙ 𝑒‖ = 𝑂(𝜀 ‖𝑒‖ )

Si probamos esto en varias iteraciones, haciendo en cada iteración 𝜀 = 𝜀/10, y la expresión de


arriba no decae de 100 en 100, seguramente la matriz 𝐽 esté mal calculada.

En este caso es conveniente identificar individualmente cuáles de las derivadas parciales son
erróneas. Porque recuerda que 𝑒 = 𝑥 ∗ − 𝑥 es un vector, y con que haya una derivada parcial
incorrecta en 𝐽 (un solo elemento de la matriz), 𝐽 ∙ 𝑒 ya se ve afectado por completo.

Para identificar qué derivada(s) parcial(es) es incorrecta se pueden comprobar


individualmente una a una las componentes de la expresión de arriba: Sustituyendo el
vector error por vectores coordenados, y comprobando cuál de las componentes no
decae con el ritmo adecuado.

La matriz diferencial exacta sólo se puede calcular a mano. Cuando la calcula Matlab, hace una
aproximación por cocientes incrementales. La aproximación se basa en el desarrollo de Taylor
de una función:
𝑓ℝ (𝑥 + ℎ) − 𝑓ℝ (𝑥) ℎ
= 𝑓 ℝ (𝑥) + 𝑓 ℝ (𝜉)
ℎ 2
Resto de Taylor
Donde ℎ es el valor del incremento de 𝑥, y [𝜉 ∈ (𝑥, 𝑥 + ℎ)]

La 𝑓ℝ (𝑥) de la ecuación de Taylor anterior es una función ℝ → ℝ.

Nuestra función es 𝑓(𝑥), ℝ →ℝ

Ten en cuenta que 𝑓 ℝ (𝑥) NO es la matriz diferencial, sino sólo la derivada parcial de
una de las componentes de la 𝑓(𝑥) con respecto a una de sus variables. Es decir,
𝑓 (𝑥), un sólo elemento de la matriz 𝐷𝑓.

Ahora bien, hay que considerar que los valores 𝑓ℝ (𝑥) y 𝑓ℝ (𝑥 + ℎ) inevitablemente se
introducen con unos errores 𝜖 , 𝜖 :

𝑓ℝ (𝑥 + ℎ) = 𝑓ℝ (𝑥 + ℎ) + 𝜖
𝑓ℝ (𝑥) = 𝑓ℝ (𝑥) + 𝜖
↓ Entonces el desarrollo de Taylor queda ↓
𝑓ℝ (𝑥 + ℎ) − 𝑓ℝ (𝑥) ℎ 𝜖 −𝜖
= 𝑓 ℝ (𝑥) + 𝑓 ℝ (𝜉) +
ℎ 2 ℎ

Ahora hay dos errores que se comportan de manera opuesta ante variaciones de ℎ. Cuando
disminuimos ℎ, el error de aproximación de Taylor disminuye, pero el error introducido junto a
los datos aumenta. Y al contrario al aumentar ℎ. Así que en la aproximación por coeficientes
incrementales debemos usar un ℎ óptimo que minimice ambos errores.

Este valor óptimo está alrededor de √𝜖:

ℎ = max(1, ‖𝑥‖) ∙ 𝛿 ∙ √𝜖 = 𝛼 √𝜖 donde

𝑥 ≠0 |𝜖 | ≤ 𝜖
𝑠𝑖𝑔𝑛(𝑥 )
donde 𝛿 = |𝜖 | ≤ 𝜖
1 𝑥 =0

Entonces podemos aproximar 𝑓 ℝ (𝑥) como:

𝜕 𝑓 𝑥 + 𝛼 √𝜖 − 𝑓 (𝑥)
𝑓 ℝ (𝑥) = 𝑓 (𝑥) ≈
𝜕𝑥 𝛼 √𝜖

Eso era sólo una componente de la matriz diferencial. Una columna, es decir, las derivadas
parciales respecto a una misma variable de todas las componentes de 𝑓(𝑥), quedaría:

𝜕 𝑓 𝑥 + 𝛼 √𝜖 𝑒 − 𝑓(𝑥)
𝑓(𝑥) ≈
𝜕𝑥 𝛼 √𝜖

Así con cada columna se aproxima la matriz diferencial por cocientes incrementales.

EJERCICIO 40,41,42

El comando 𝑓𝑠𝑜𝑙𝑣𝑒 de Matlab resuelve sistemas de ecuaciones no lineales por un método de


Newton modificado que es más robusto que el que hemos visto, y sin necesidad de que
nosotros le facilitemos la matriz diferencial (ésta la calcula él por el método de cocientes
incrementales).

Sin embargo, en ocasiones el método de Newton que acabamos de ver va a converger


mientras que 𝑓𝑠𝑜𝑙𝑣𝑒 no. 𝑓𝑠𝑜𝑙𝑣𝑒 no vale siempre.

A costa de devolver siempre una raíz, 𝑓𝑠𝑜𝑙𝑣𝑒 puede no ser muy preciso. Va a dar mucho error
cuando tengamos funciones y/o aproximaciones con muy mala precisión (10 ya no es muy
buena precisión). En esos casos, podemos montar nosotros una diferencial apropiada
(ajustando su cálculo al error mínimo que tengamos) y proporcionársela a 𝑓𝑠𝑜𝑙𝑣𝑒, mediante
las opciones de personalización del comando (𝑜𝑝𝑡𝑖𝑚𝑠𝑒𝑡):
𝑚𝑖𝑠𝑜𝑝𝑠 = 𝑜𝑝𝑡𝑖𝑚𝑠𝑒𝑡(′𝐽𝑎𝑐𝑜𝑏𝑖𝑎𝑛 , ′𝑜𝑛′)

[𝑟𝑎𝑖𝑧] = 𝑓𝑠𝑜𝑙𝑣𝑒(𝑓𝑢𝑛, 𝑖𝑡𝑒𝑟𝑎𝑛𝑡𝑒𝑖𝑛𝑖𝑐𝑖𝑎𝑙, 𝑚𝑖𝑠𝑜𝑝𝑠)

Así 𝑓𝑠𝑜𝑙𝑣𝑒 supone que en el segundo argumento de salida de la función 𝑓𝑢𝑛 está la matriz
jacobiana (diferencial)
[𝑓𝑢𝑛𝑣𝑎𝑙, 𝐽𝑎𝑐𝑜𝑏𝑖𝑎𝑛𝑜] = 𝑓𝑢𝑛(𝑥)

Repito, hacemos esto sólo si estamos seguros de que nosotros vamos a calcular la diferencial
con menos error que Matlab.
LECCIÓN 4: Interpolación

1. Interpolación polinómica
Dados 𝑁 + 1 parejas de valores (𝑥 , 𝑥 , … , 𝑥 ) y (𝑓 , 𝑓 , … , 𝑓 ) distintos dos a dos, se trata de
encontrar una función 𝑔(𝑥) que satisfaga 𝑔(𝑥 ) = 𝑓 , haciendo así una aproximación de la
función exacta 𝑓(𝑥) que desconocemos. Esto se puede conseguir haciendo que 𝑔(𝑥) sea una
función polinómica. Un polinomio interpolador 𝑝 , de grado 𝑁 o menor.

El grado puede ser menor que 𝑁, porque puede darse el caso de que haya, pongamos,
5 puntos, pero estén todos alineados. Entonces con un polinomio de grado 1
tendríamos una interpolación perfecta, no hace falta uno de grado 4.

¿Por qué hacer la aproximación mediante un polinomio interpolador?

 Interesa interpolar con polinomios porque son indefinidamente derivables y sus derivadas
son continuas. Además, son fáciles de tratar, derivar e integrar, y pueden ser evaluados en
𝑁 flops.

 Siempre existe un polinomio interpolador 𝑝 . Siempre se pueden definir los polinomios de


Lagrange que acaban formando nuestro polinomio.

 Sólo hay 1 polinomio 𝑝 válido para cada conjunto de puntos a interpolar. Es único. Esto se
demuestra suponiendo que existe otro polinomio, 𝑞, que también valdría para la
interpolación, y considerando la diferencia:

𝑝 −𝑞 =𝑟
La diferencia 𝑟 será otro polinomio, de grado a lo sumo 𝑁, que se anula en todos los 𝑁 + 1
nudos de interpolación, porque en cada uno de ellos (𝑥 , 𝑥 , … , 𝑥 ), 𝑝 y 𝑞 toman los
mismo valores, (𝑓 , 𝑓 , … , 𝑓 ). Como es imposible que un polinomio de grado 𝑁 tenga 𝑁 +
1 raíces, la única posibilidad es que 𝑟 = 0, y por tanto el polinomio 𝑝 sea único.

1.1 Forma de Lagrange


El polinomio interpolador se puede formar a partir de 𝑁 polinomios de Lagrange 𝐿(𝑥). Hay
uno por cada nodo de interpolación, y son tales que:

1 𝑠𝑖 𝑥 = 𝑥 (𝑥 − 𝑥 ) … (𝑥 − 𝑥 )(𝑥 − 𝑥 ) … (𝑥 − 𝑥 )
𝐿 (𝑥) = ← 𝐿 =
0 𝑠𝑖 𝑥 ≠ 𝑥 (𝑥 − 𝑥 ) … (𝑥 − 𝑥 )(𝑥 − 𝑥 ) … (𝑥 − 𝑥 )
Entonces es fácil construir el polinomio interpolador:

𝑝 (𝑥) = 𝑓 𝐿 (𝑥) + 𝑓 𝐿 (𝑥) + ⋯ + 𝑓 𝐿 (𝑥)

o El error que cometemos haciendo esta aproximación es:


) (𝜉)
𝑓
𝑓(𝑥) − 𝑝 (𝑥) = (𝑥 − 𝑥 ) … (𝑥 − 𝑥 )
(𝑁 + 1)!
Siendo 𝜉 un valor contenido en (𝑥 , 𝑥 ). Observa que el error aumenta para valores de 𝑥
fuera de (𝑥 , 𝑥 ). Por eso, esta aproximación polinómica no se usa para extrapolar.

Comandos de Matlab: 𝑝𝑜𝑙𝑦𝑣𝑎𝑙(𝑣, 𝑠), 𝑝𝑜𝑙𝑦𝑓𝑖𝑡(𝑥, 𝑦, 𝑚)

1.2 Forma de Newton del polinomio interpolador


El polinomio interpolador de grado 𝑁 en la forma de Lagrange no puede evaluarse en 𝑁 flops.
La forma de Newton del polinomio interpolador es más rápida de construir (𝑁(𝑁 + 1)/2 flops)
y se evalúa en tan sólo 𝑁 flops:

𝑝 (𝑥) = 𝑓 + 𝑓[𝑥 , 𝑥 ](𝑥 − 𝑥 ) + 𝑓[𝑥 , 𝑥 , 𝑥 ](𝑥 − 𝑥 )(𝑥 − 𝑥 ) + ⋯

Los coeficientes 𝑓[𝑥 , 𝑥 , … , 𝑥 ] se llaman diferencias divididas. Cada diferencia dividida se


apoya en las diferencias divididas anteriores. Se definen como:
𝑓[𝑥 , … , 𝑥 ] − 𝑓[𝑥 , … , 𝑥 ]
𝑓[𝑥 , 𝑥 , … , 𝑥 ] =
𝑥 −𝑥

Las de grado 0 son directamente los valores de la función en el nodo correspondiente.


𝑓[𝑥 ] = 𝑓 ; 𝑓[𝑥 ] = 𝑓
Es el mismo polinomio que el de la forma de Lagrange, pero escrito diferente. No puede ser de
otra manera porque vimos antes que el polinomio interpolador es único. También por esta
razón, vamos a acabar con el mismo polinomio independientemente del orden en que se
presenten los nodos.

2. Interpolación polinómica a trozos


Resulta que, aumentando el grado del polinomio interpolador, NO aumenta la precisión de la
aproximación. Todo lo contrario: El error de la aproximación tiende a infinito conforme se
aumenta el grado de 𝑝 .

La precisión se puede aumentar con interpolación polinómica a trozos. Veremos tres tipos de
interpolación polinómica a trozos:

2.1 Interpolación lineal a trozos


La interpolación lineal a trozos consiste en usar polinomios de grado 1 entre los nodos. Sólo es
trazar rectas entre cada punto. En cada intervalo (𝑥 , 𝑥 ).

El error cometido con esta aproximación en cada intervalo se deduce particularizando la


fórmula de antes a 𝑁 = 1 (para dos nodos)
) (𝜉)
𝑓
𝑓(𝑥) − 𝑝 (𝑥) = (𝑥 − 𝑥 ) … (𝑥 − 𝑥 )
(𝑁 + 1)!
(𝑥 − 𝑥 )(𝑥 − 𝑥 )
→ 𝑓(𝑥) − 𝑝∆ (𝑥) = 𝑓 (𝜉)
2
El error máximo que cometeríamos dentro del intervalo (𝑥 − 𝑥 ) sería el máximo de un
término por el máximo del otro:
max|𝑓 (𝜉)| = max|𝑓 (𝜉)|
(𝑥 − 𝑥 )(𝑥 − 𝑥 ) 1 𝑥 −𝑥 ℎ 𝑐𝑜𝑛 𝜉 ∈ (𝑥 −𝑥 )
𝑚𝑎𝑥 ≤ =
2 2 4 8


→ 𝑒𝑟𝑟𝑜𝑟 ≤ 𝑚𝑎𝑥|𝑓 (𝜉)|
8

Observa que el error disminuye al reducir el tamaño del intervalo: La aproximación es mejor
cuanto más fina sea la partición del intervalo.

2.2 Interpolación cúbica a trozos.


La derivada del interpolante lineal a trozos no es continua en los nodos de interpolación. En la
interpolación cúbica se impone continuidad de la primera derivada. El interpolante cúbico en
un intervalo 𝑥 ∈ (𝑥 , 𝑥 ) tiene la forma:
𝑥 +𝑥
𝑐∆ (𝑥) = 𝑝∆ (𝑥) + (𝑥 − 𝑥 )(𝑥 − 𝑥)(𝛼 + 𝛽 (𝑥 − ))
2
Hay 2𝑁 incógnitas: 𝛼 , 𝛽 con 𝑗 = 1,2, … , 𝑁. Estas se van a determinar imponiendo condiciones
adicionales:

o Splines: se impone que el interpolante tenga continuidad, además de en su primera,


también en su segunda derivada. Esta condición se cumple seguro dentro de cada
intervalo de la partición, porque al ser el interpolante un polinomio, tiene tantas derivadas
continuas como queramos. Sólo habría que imponer la continuidad en los nodos
intermedios:

En total hay 𝑁 + 1 nodos, así que los intermedios son 𝑁 − 1. Se imponen 𝑁 − 1


ecuaciones para continuidad de la primera derivada y otras 𝑁 − 1 de la segunda
derivada. Tenemos de momento 2(𝑁 − 1) ecuaciones para 2𝑁 incógnitas. Tengo que
imponer dos ecuaciones adicionales, que pueden venir de…

 Imponer el valor de la derivada en los extremos 𝑥 , 𝑥 . Esta es la condición de


Spline sujeto.
 Imponer en los nodos extremos la condición “not-a-knot”. Esto implica que en los
nodos inmediatamente adyacentes a los nodos extremos, la derivada tercera sea
continua a ambos lados. Como el polinomio interpolador es de grado 3, imponer
esta condición implica que los Splines de, respectivamente, los intervalos
(𝑥 , 𝑥 ), (𝑥 , 𝑥 ) y (𝑥 ,𝑥 ), (𝑥 , 𝑥 ) son iguales entre ellos. Como si 𝑥 y
𝑥 no fuesen realmente nodos.

o Interpolación cúbica que preserva la forma: Se impone la condición de derivada primera


continua en todos los nodos internos, y además se impone monotonía en cada intervalo: El
interpolante cúbico que preserva la forma tendrá el mismo comportamiento (creciente,
decreciente o constante) que el interpolante lineal (recta) en ese intervalo.

𝑓 −𝑓 𝑐 ∆ (𝑥) ≥ 0 𝑐𝑜𝑛 𝑥 ∈ (𝑥 ,𝑥 )

No se demuestra cómo resolver el sistema de 2𝑁 incógnitas, sólo se ve el comando de Matlab.

En la interpolación cúbica que preserva la forma, el error viene dado por una fórmula, como en
la lineal:
) (𝜉)
𝑚𝑎𝑥|𝑓(𝑥) − 𝑝∆ (𝑥)| ≤ 𝐶 𝑥 − 𝑥 max 𝑓 𝑐𝑜𝑛 𝜉 ∈ (𝑥 −𝑥 )

Nos basta con saber que este error disminuye al disminuir el tamaño de cada intervalo: Decae
prácticamente igual que el error del interpolante lineal a trozos, como 𝑂((𝑥 − 𝑥 ) ).

El Spline cúbico actúa mejor, decayendo su error como 𝑂((𝑥 − 𝑥 ) )


LECCIÓN 5: Cuadratura

1. Cuadratura numérica
Se pretende calcular el valor de la integral de una función entre dos valores. En ocasiones, las
funciones objeto de la integral no tienen primitiva, o directamente se desconoce su expresión.
La cuadratura consiste en aproximar el valor de dicha integral por la integral de otra función.

𝑓(𝑥) 𝑑𝑥 ≈ 𝑝(𝑥) 𝑑𝑥

1.1 Fórmulas de cuadratura básica


Se llaman fórmulas de cuadratura cuando la aproximación se hace mediante el polinomio
interpolador, basado en unos nodos.

𝑓(𝑥) ≈ 𝑝 (𝑥) = 𝑓(𝑥 )𝐿 (𝑥) + 𝑓(𝑥 )𝐿 (𝑥) + ⋯ + 𝑓(𝑥 )𝐿 (𝑥)

𝑓(𝑥) 𝑑𝑥 ≈ 𝑓(𝑥 )𝐿 (𝑥) + 𝑓(𝑥 )𝐿 (𝑥) + ⋯ + 𝑓(𝑥 )𝐿 (𝑥) 𝑑𝑥

1
↓ 𝑑𝑒𝑓𝑖𝑛𝑖𝑒𝑛𝑑𝑜 𝑤 = 𝐿 (𝑥) 𝑑𝑥 ↓
𝑏−𝑎

𝑓(𝑥) 𝑑𝑥 ≈ (𝑏 − 𝑎) 𝑤 𝑓(𝑥 ) + 𝑤 𝑓(𝑥 ) + ⋯ + 𝑤 𝑓(𝑥 )

Los 𝑤 se llaman pesos de cuadratura, y son independientes del intervalo (𝑎, 𝑏)

Para calcular los pesos de cuadratura, resolver este sistema:

1 1 … 1 𝑤 1 1
𝑥 𝑥 … 𝑥 𝑤 𝑥 𝑑𝑥 = 1/2
⋮ =
⋮ ⋮ ⋱ ⋮ ⋮ ⋮
𝑥 𝑥 … 𝑥 𝑤 𝑥 1/(𝑁 + 1)

Se llama grado de precisión de una fórmula de cuadratura al grado máximo del polinomio
interpolador 𝑓(𝑥) ≈ 𝑝 (𝑥) que la fórmula puede integrar sin error alguno, de manera exacta.
Todas las fórmulas de cuadratura basadas en 𝑁 + 1 nodos tienen al menos grado 𝑁. Esto ha
sido parte de alguna pregunta teórica de examen.
Vemos las fórmulas de cuadratura más elementales:

 Regla del trapecio - Grado de precisión 1

𝑏−𝑎
𝑓(𝑥) 𝑑𝑥 ≈ (𝑓(𝑎) + 𝑓(𝑏)) 𝑐𝑜𝑛 𝑎=𝑥 , 𝑏=𝑥
2

 Regla de Simpson – Grado de precisión 3

𝑏−𝑎 𝑎+𝑏
𝑓(𝑥) 𝑑𝑥 ≈ (𝑓(𝑎) + 𝑓(𝑏) + 4𝑓(𝑐)) 𝑐𝑜𝑛 𝑎=𝑥 , 𝑏=𝑥 , 𝑐=
6 2

 Fórmulas de Newton-Cotes – Grado de precisión N

Una para cada 𝑁 ≥ 2. Se toman como nodos para el interpolante 𝑁 + 1 valores


equiespaciados en el intervalo [𝑎, 𝑏] (𝑎 y 𝑏 cuentan)

 Fórmulas de Gauss – Grado de precisión 2N+1

Una para cada 𝑁 ≥ 0. Se toman 𝑁 nodos en el intervalo [𝑎, 𝑏] de manera que cumplan una
cierta condición.

EJERCICIO 1,2

El error que se comete con las fórmulas de cuadratura está acotado por:

|𝑒𝑟𝑟𝑜𝑟| ≤ 𝐶(𝑏 − 𝑎) )
𝑚𝑎𝑥 𝑓 (𝑥)

Donde 𝑟 es el grado de precisión de la correspondiente fórmula y 𝑥 ∈ [𝑎, 𝑏]

El error de la aproximación disminuye si se aplica cuadratura a intervalos más pequeños. Es lo


que hace la cuadratura compuesta, aplicar las fórmulas de cuadratura a subintervalos de
[𝑎, 𝑏]. Cuanto más fina la partición, más precisión.

El error que se comete con la cuadratura compuesta está acotado por:

|𝑒𝑟𝑟𝑜𝑟| ≤ 𝐶(𝑏 − 𝑎) )
𝑚𝑎𝑥 𝑓 (𝑥)
1.2 Cuadratura adaptada
El comando 𝑞𝑢𝑎𝑑𝑔𝑘 de Matlab usa cuadratura adaptada: Es como la cuadratura compuesta,
pero sin conocer de antemano cuáles son los subintervalos de [𝑎, 𝑏].

 Cada iteración parte de una partición formada por una serie de nodos (𝑎, 𝑥1, 𝑥2, … , 𝑏).
Aplicamos la fórmula de cuadratura que queramos a esa partición.
 Haciendo la diferencia entre los valores obtenidos de la cuadratura de esta iteración y la
anterior tenemos una estimación del error que cometeríamos usando la cuadratura de la
iteración anterior (Porque la cuadratura de esta iteración es más precisa)
 Este error será diferente en cada subintervalo entre nodos (𝑎, 𝑥1), (𝑥3, 𝑥4)… En aquellos
subintervalos en los que el error sea mayor del aceptable, se añade un nodo en su punto
medio. El resto de nodos se mantienen
 Con la nueva partición, se hace la siguiente iteración…
Así hasta satisfacer la tolerancia prefijada en todos los subintervalos de la partición. Porque el
error se reduce cuanto más fina sea la partición.

EJERCICIO 9

2. Derivación numérica
Se pretende aproximar el valor de la derivada de una función en un punto mediante la
derivada de un polinomio interpolador adecuado.

𝑓(𝑥) ≈ 𝑝 (𝑥) = 𝑓(𝑥 )𝐿 (𝑥) + 𝑓(𝑥 )𝐿 (𝑥) + ⋯ + 𝑓(𝑥 )𝐿 (𝑥)

↓ 𝑓 (𝑥 ∗ ) ≈ 𝑝 (𝑥 ∗ ) ↓

𝑓 (𝑥 ∗ ) ≈ 𝑝 (𝑥 ∗ ) = 𝛼 𝑓(𝑥 ) + 𝛼 𝑓(𝑥 ) + ⋯ + 𝛼 𝑓(𝑥 )

Donde los coeficientes 𝛼 = 𝐿 (𝑥 ∗ ) son comparables con los pesos de cuadratura. Se


diferencian en que, mientras que los pesos de cuadratura no dependían del intervalo de
integración, estos coeficientes 𝛼 sí dependen del punto 𝑥 ∗ donde se calcula la derivada.

Para calcular estos coeficientes, resolver este sistema:

1 1 … 1 𝛼 1 0
𝑥 𝑥 … 𝑥 𝛼 𝑑 𝑥 1
⋮ = = ⋮
⋮ ⋮ ⋱ ⋮ 𝑑𝑥 ⋮
𝑥 𝑥 … 𝑥 𝛼 𝑥 𝑁(𝑥 ∗ )

Grado de precisión es el grado máximo del polinomio interpolador que una fórmula de
derivación puede calcular sin error alguno, de manera exacta.
Una fórmula de derivación basada en 𝑁 + 1 nodos tiene al menos grado 𝑁, a menos que se
busque evaluar la derivada en el punto
𝑥 + ⋯+ 𝑥
𝑥∗ =
𝑁+1
en cuyo caso el grado de precisión será 𝑁 + 1.

El error que se comete con las fórmulas de derivación para calcular la derivada primera es…

|𝑒𝑟𝑟𝑜𝑟| ≤ 𝐶 ∙ ℎ ∙ max 𝑓 ) (𝑥)


∈[ , ]

𝑑𝑜𝑛𝑑𝑒 ℎ = max 𝑥 − 𝑥

El error de la derivada primera ya es peor que el de cuadratura, y cuanto mayor el orden de la


derivada, mayor el error que se comete.
LECCIÓN 6: Métodos numéricos para EDOs y
sistemas de EDOs

1. Aspectos generales
Se trata de resolver sistemas de Ecuaciones Diferenciales Ordinarias (EDOs).
𝑑𝑢
= 1 + 𝑢 𝑣 − 4𝑢
𝑑𝑡 ≡ 𝑦 = 𝑓(𝑡, 𝑦)
𝑑𝑣
= 3𝑢 − 𝑢 𝑣
𝑑𝑡
Para que la solución 𝑦(𝑡) sea única debe haber fijada una condición inicial.
𝑦 = 𝑓(𝑡, 𝑦)
𝑦(𝑡 ) = 𝑦
El comando 𝑜𝑑𝑒45 de Matlab halla aproximaciones a la solución del sistema de EDOs en una
partición del intervalo de tiempo [𝑡 , 𝑡 ] donde se quiera calcular.

De entre las opciones de Odeset las únicas que vemos son AbsTol, RelTol, Events, Mass

La opción Mass se utiliza cuando el sistema EDOs no viene en la típica forma


𝑦 = 𝑓(𝑡, 𝑦), sino que las variables derivadas vienen combinadas linealmente entre
ellas, con coeficientes 𝑀𝑦 = 𝑓(𝑡, 𝑦).

1.2 Problemas de segundo orden


Para sistemas de EDOs de segundo orden y superior, Matlab no tiene comandos específicos.
Pero sabemos que con ciertos cambios de variables (𝑧 = 𝑦 , 𝑚 = 𝑧 ...) se puede cambiar una
ecuación de grado 𝑛 por 𝑛 ecuaciones de grado 1.

2. Nociones de métodos numéricos para EDOs


El comando 𝑜𝑑𝑒45 obtenía el valor aproximado de la solución 𝑦(𝑡) en cada uno de los puntos
de la partición (𝑡 , 𝑡 , … , 𝑡 ) del intervalo de tiempo.

Calcula aproximaciones de 𝑦 = 𝑦(𝑡 ) con 𝑖 = 1,2, … , 𝑁


¿Cómo halla estas aproximaciones?

Existen varios procedimientos numéricos. Todos se basan en la idea de calcular el próximo


valor 𝑦 basándose en el punto anterior 𝑦 ya calculado:

𝑦(𝑡 ) = 𝑦(𝑡 ) + 𝑦 (𝑡) 𝑑𝑡 Donde 𝑦 = 𝑓(𝑡, 𝑦).

Así, partiendo de la condición inicial 𝑦(𝑡 ) = 𝑦 , se podrían aproximar todos los valores de
𝑦 ,𝑦 ,…,𝑦
Cada método se diferencia del resto en cuanto a que usa una fórmula de cuadratura diferente
para aproximar la integral ∫ 𝑓(𝑡, 𝑦) 𝑑𝑡.

→ Método de Euler: Usa la regla del rectángulo, es decir, la integral es aproximada por:

La amplitud del
𝑓(𝑡, 𝑦) 𝑑𝑡 ≈ 𝑓(𝑡 , 𝑦 ) 𝑑𝑡 = (𝑡 − 𝑡 ) 𝑓(𝑡 , 𝑦 ) intervalo se denota por
(𝑡 −𝑡 )= ℎ

cada valor 𝑦 se obtiene a partir del anterior, tal que:

𝑦 = 𝑦 + ℎ 𝑓(𝑡 , 𝑦 )
→ Método de Euler mejorado: Usa la regla del punto medio. Se hace la aproximación:

ℎ ℎ
𝑓(𝑡, 𝑦) 𝑑𝑡 ≈ 𝑓 𝑡 + ,𝑦 𝑑𝑡 = ℎ 𝑓 𝑡 + ,𝑦
2 2

Pero, como no conocemos cuánto vale 𝑦(𝑡) en el punto medio del intervalo
[𝑡 , 𝑡 ], (𝑦𝑡 +ℎ𝑛 ), a su vez aproximamos este valor usando el método de Euler:
𝑛 2


𝑦 ≈𝑦 + 𝑓(𝑡 , 𝑦 )
2

ℎ ℎ
→ 𝑓(𝑡, 𝑦) 𝑑𝑡 ≈ ℎ 𝑓 𝑡 + ,𝑦 + 𝑓(𝑡 , 𝑦 )
2 2

Cada valor 𝑦 se obtiene a partir del anterior, tal que:

𝑦 =𝑦 +ℎ 𝑓 𝑡 + ,𝑦 + 𝑓(𝑡 , 𝑦 )

Paréntesis:

Observa que ya en el método de Euler Mejorado aparece cierta recurrencia al usar


internamente a 𝑓(𝑡, 𝑦) el método de Euler:

ℎ ℎ ℎ
ℎ 𝑓 𝑡 + ,𝑦 ≈ℎ 𝑓 𝑡 + ,𝑦 + 𝑓(𝑡 , 𝑦 )
2 2 2

Vamos a utilizar esta recurrencia para que la notación de esta y las siguientes fórmulas que
veamos queden menos complicadas.
ℎ ℎ
𝑘 = 𝑓(𝑡 , 𝑦 ) ; 𝑘 =𝑓 𝑡 + ,𝑦 + 𝑘 → 𝑦 =𝑦 +ℎ 𝑘
2 2
→ Método Runge-Kutta Clásico: Usa la regla de Simpson. Se hace la aproximación:

ℎ ℎ
𝑓(𝑡, 𝑦) 𝑑𝑡 ≈ 𝑓(𝑡 , 𝑦 ) + 4 𝑓 𝑡 + ,𝑦 + 𝑓(𝑡 ,𝑦 )
6 2

Pero, como no conocemos 𝑦𝑡 ℎ𝑛 ni 𝑦 , usamos el método de Euler para


𝑛+ 2

aproximarlos. 𝑦𝑡 ℎ𝑛 se halla como antes, pero esta vez con más precisión.
𝑛+ 2

ℎ 1
𝑓(𝑡 + ,𝑦 ) ≈ (𝑘 + 𝑘 )
2 2
ℎ ℎ ℎ ℎ
𝑘 = 𝑓(𝑡 , 𝑦 ) ; 𝑘 = 𝑓(𝑡 + , 𝑦 + 𝑘 ) ; 𝑘 = 𝑓(𝑡 + , 𝑦 + 𝑘 )
2 2 2 2

Es una movida. Con entender por dónde van los tiros vale. La fórmula total queda:

𝑦 =𝑦 + (𝑘 + 2𝑘 + 2𝑘 + 𝑘 )

𝑘 = 𝑓(𝑡 , 𝑦 )
ℎ ℎ
𝑘 = 𝑓(𝑡 + ,𝑦 + 𝑘 )
2 2
ℎ ℎ
𝑘 = 𝑓(𝑡 + ,𝑦 + 𝑘 )
2 2
𝑘 = 𝑓(𝑡 + ℎ , 𝑦 + ℎ 𝑘 )

Todos los métodos Runge-Kutta tienen esta forma:

𝑦 = 𝑦 + ℎ (𝑏 𝑘 + 𝑏 𝑘 + ⋯ + 𝑏 𝑘 )

𝑘 = 𝑓(𝑡 , 𝑦 )
𝑘 = 𝑓(𝑡 + 𝑐 ℎ , 𝑦 +ℎ 𝑎 𝑘 )
𝑘 = 𝑓(𝑡 + 𝑐 ℎ , 𝑦 + ℎ (𝑎 𝑘 + 𝑎 𝑘 ))

𝑘 = 𝑓(𝑡 + 𝑐 ℎ , 𝑦 + ℎ (𝑎 𝑘 + ⋯ + 𝑎 𝑘 ))

Donde 𝑠 es el orden o el número de etapas de esa recurrencia antes mencionada.


Para cada orden 𝑠, hay una familia entera de métodos Runge-Kutta: Para cada combinación de
valores de los coeficientes 𝑎, 𝑏 y 𝑐 se tiene un método Runge-Kutta diferente. Evidentemente
no todos son igual de precisos. Los que son mejores ya se conocen.

Observa que los métodos de Euler y Euler Mejorado son métodos de Runge-Kutta de orden 1 y
2 respectivamente, mientras que el Runge-Kutta clásico es de orden 4. Podemos escribirlos así:

Euler Euler Mejorado

𝑦 =𝑦 +ℎ 𝑘 𝑦 =𝑦 +ℎ 𝑘

𝑘 = 𝑓(𝑡 , 𝑦 ) 𝑘 = 𝑓(𝑡 , 𝑦 )

𝑘 = 𝑓 𝑡 + ℎ ,𝑦 + ℎ 𝑘

En realidad, con especificar únicamente sus coeficientes el método queda determinado:

Tablero de Butcher de un método Runge-Kutta de 𝑠 etapas:

𝑎 =𝑐

𝑏 =1

Euler Euler Mejorado Runge-Kutta Clásico


2.1 Error global y Error local. Convergencia
En la resolución de EDOs distinguimos dos tipos de errores:

El Error global, que no es más que el error absoluto que cometemos al calcular cada 𝑦

|𝑦(𝑡 ) − 𝑦 |

Y el Error local, que es la diferencia entre un valor calculado, 𝑦 , y el valor en 𝑡 de la


solución de este 𝑃𝑉𝐼 :

𝑧 (𝑡) = 𝑓 𝑡, 𝑧(𝑡)
𝑃𝑉𝐼 ≡ → |𝑧 (𝑡 )−𝑦 |
𝑧(𝑡 ) = 𝑦

Un método numérico que resuelva un 𝑃𝑉𝐼,como los vistos hasta ahora, se dice que es
convergente si, al afinar la partición, el máximo de los errores globales tiende a cero.

𝑆𝑖 𝑠𝑒 𝑐𝑢𝑚𝑝𝑙𝑒 𝑚𝑎𝑥 ‖𝑦(𝑡 ) − 𝑦 ‖ → 0 𝑐𝑢𝑎𝑛𝑑𝑜 𝑚𝑎𝑥 ℎ = ℎ → 0


Además, los métodos convergentes se dice que son convergentes de orden 𝑝 si cumplen:

𝑚𝑎𝑥 ‖𝑦(𝑡 ) − 𝑦 ‖ = 𝑂(ℎ )

 Método de Euler → 𝑝 = 1
 Método de Euler Mejorado → 𝑝 = 2
 Método de Heun → 𝑝 = 3
 Método Runge-Kutta Clásico → 𝑝 = 4

Estimar el tamaño de los errores locales es más fácil que estimar los errores globales. Sin
embargo, los errores globales se pueden acotar en función de los locales:
𝑒
max ‖𝑦(𝑡 ) − 𝑦 ‖ ≤ 𝐶 𝑚𝑎𝑥

No hay que entrar más en detalle

2.1 Pares encajados de métodos Runge-Kutta


Usar pares encajados de métodos es básicamente calcular cada 𝑦 mediante dos métodos
Runge-Kutta distintos en paralelo, sabiendo cuál de los dos métodos es menos preciso para
poder comparar las dos soluciones con criterio.

Los dos métodos deben tener mismos coeficientes 𝑎 y 𝑐 pero distintos 𝑏. Así los 𝑘 son iguales
en los dos métodos.

𝑦 = 𝑦 + ℎ (𝑏 𝑘 + 𝑏 𝑘 + ⋯ + 𝑏 𝑘 )

𝑦 = 𝑦 + ℎ (𝑏 𝑘 + 𝑏 𝑘 + ⋯ + 𝑏 𝑘 )

En cada paso, a partir de 𝑦 se calculan 𝑦 y 𝑦 . Sabiendo que el error local de uno es


mucho más grande que el otro, ‖𝑒 ‖ ≪ ‖𝑒̂ ‖ podemos hacer esta aproximación:

‖𝑒̂ ‖ ≈ ‖𝑦 −𝑦 ‖

Así conocemos una estima del error local cometido por el método menos preciso. Si el error es
mayor del que deseamos, podemos rechazar 𝑦 y volver a calcularlo usando un paso ℎ más
pequeño, obteniendo así un 𝑦 más preciso.

El comando ode45 de Matlab utiliza pares encajados: En cada paso estima el error local que se
comete y adapta el tamaño de paso ℎ en función del mismo.

También podría gustarte