Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Teoría Completa
Teoría Completa
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.
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:
𝑣 ∙ 𝑥 = 𝑣( ) ∙ 𝑥( ) = 𝐴( ) ≡ 𝑀𝑎𝑡𝑟𝑖𝑧
𝑣 ∙ 𝑥 = 𝑣( ) ∙ 𝑥( ) = 𝑎( ) ≡ 𝐸𝑠𝑐𝑎𝑙𝑎𝑟
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: 𝑥 = 𝐴 𝑏...
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
𝑎 𝑎 𝑎
𝐴( )
= 0 𝑎 𝑎 → {𝑙 =𝑎 /𝑎 =1
0 𝑎 𝑎
Escrito en función de los multiplicadores:
1 0 0
𝐿= 𝑙 1 0
𝑙 𝑙 1
𝐴𝑥 = 𝑏 → 𝐿𝑈𝑥 = 𝑏
↓Resuelvo este sistema↓
𝐿𝑏 = 𝑏
Que se resuelve muy fácilmente por sustitución progresiva, porque 𝐿 es triangular inferior
𝑈𝑥 = 𝑏
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.
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⎦
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. 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: + 𝑛 = 𝑂(𝑛 )
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 𝐴
‖𝐴‖ = 𝜌(𝐴 𝐴)
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.
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…
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…
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.
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:
Los vectores [𝑞 , … , 𝑞 ] :
EJERCICIO 14
↓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:
[𝑎 , … , 𝑎 ] = 𝐴 = 𝑄 ∙ [𝑟 , … , 𝑟 ] = 𝑄 ∙ 𝑅
β α , ⋯ α , α ,
⎛0 β ⋯ α , α ,
⎞
𝐴 = 𝑞 ,…,𝑞 ,𝑞 ,…,𝑞 ∙⎜0 0 ⋱ ⋮ ⋮ ⎟
0 0 0 β α ,
⎝ 0 0 0 0 β ⎠
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 [𝐴 = 𝑄𝑅]:
𝐴 = 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.
[𝐴 𝐴𝑥 ∗ = 𝐴 𝑏] → 𝑅 Q Q R 𝑥∗ = R Q 𝑏 →
→ R 𝑅 𝑥∗ = R Q 𝑏 → [R 𝑥 ∗ = Q 𝑏]
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
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:
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
𝑣 𝑣
Es simétrica
𝑣𝑣 2 2 𝑣𝑣
𝑇 =𝐼− 2 =𝐼− (𝑣𝑣 ) = 𝐼 − (𝑣 ) 𝑣 = 𝐼 − 2 =𝑇
𝑣 𝑣 𝑣 𝑣 𝑣 𝑣 𝑣 𝑣
Su inversa es ella misma
2 2 4 4
𝑇𝑇 = 𝐼 − 𝑣𝑣 𝐼− 𝑣𝑣 =𝐼− 𝑣𝑣 + 𝑣𝑣 𝑣𝑣 =
𝑣 𝑣 𝑣 𝑣 𝑣 𝑣 (𝑣 𝑣)
4 4 4 4
=𝐼− 𝑣𝑣 + 𝑣 𝑣𝑣𝑣 = 𝐼 − 𝑣𝑣 + 𝑣𝑣 = 𝐼
𝑣 𝑣 (𝑣 𝑣) 𝑣 𝑣 𝑣 𝑣
𝑣𝑣 𝑦 = −𝛿‖𝑥‖𝑒
𝐻 =𝐼−2 ;
𝑣 𝑣 𝑣 =𝑥−𝑦
𝑣𝑣
𝐻 =𝐼−2
𝑣 𝑣
(𝑣 = 𝑥 + 𝛿‖𝑥‖𝑒 )
EJERCICIO 16
Vista la base, ahora vamos a determinar el Método de Householder para obtener la
descomposición QR de una matriz.
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:
𝐴( )
será la matriz 𝑅, triangular superior, de la descomposición QR.
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
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.
Ahora vamos a ver el caso que falta: 𝐴 (𝑚 𝑥 𝑛) con rango menor que 𝑛
𝐴 𝐴𝑥 = 𝐴 𝑏 → 𝐴 (𝑏 − 𝐴𝑥) = 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] ∀ 𝑧 ∈ 𝑁𝑢𝑙(𝐴)
𝐴 = 𝑈Σ𝑉
→ 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 𝐴 :
𝐴 =𝑉Σ 𝑈
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 𝐴
𝑥∗ = 𝐴 𝑏 = 𝑉 Σ 𝑈 𝑏=𝑉 Σ 𝑈 𝑏 ∈ 𝑐𝑜𝑙(𝑉 )
𝐴𝑣 = 𝜆 𝑣
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.
Otra consecuencia de ser simétrica y definida positiva es que todos sus elementos
diagonales son positivos:
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 caso es que se puede hacer la eliminación gaussiana sin pivotaje porque no nos topamos con
ningún pivote nulo.
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…
𝐴=𝑅 𝑅
/
𝐴=𝑅 𝑅 siendo 𝑅=𝐷 𝐿
EJERCICIO 37
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:
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 𝐴𝑥 = 𝑏…
1º) 𝐿𝑏 = 𝑏 → 2º) 𝑈𝑥 = 𝑏
R 𝑥∗ = Q 𝑏
𝑥∗ = 𝐴 𝑏 = 𝑉 Σ 𝑈 𝑏
LECCIÓN 3: Ecuaciones y sistemas de ecuaciones
no lineales
𝑓 (𝑥 ∗ ) ∙ (𝑥 − 𝑥 ∗ )
𝑓(𝑥) = 𝑓(𝑥 ∗ ) + 𝑓 (𝑥 ∗ ) ∙ (𝑥 − 𝑥 ∗ ) + +⋯
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 𝑇𝑂𝐿 .
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 𝑓(𝑥).
𝑓 𝑥[ ] − 𝑓 𝑥[ ]
𝑓(𝑥 ∗ ) ≈ 𝑓(𝑥) + 𝑓 (𝑥)(𝑥 ∗ − 𝑥) → 𝑓 𝑥[ ]
≈
𝑥[ ] − 𝑥[ ]
𝑓(𝑥) 𝑥[ ] − 𝑥[ ]
𝑥[ ]
= 𝑥[ ] − → 𝑥[ ]
= 𝑥[ ] − 𝑓 𝑥[ ]
𝑓 (𝑥 [ ] ) 𝑓(𝑥 [ ] ) − 𝑓(𝑥 [ ])
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.
𝑑𝑓 𝑑𝑓 𝑑𝑓
𝑥 𝑓 (𝑥 , 𝑥 , 𝑥 ) ⎛𝑑𝑥 𝑑𝑥 𝑑𝑥 ⎞
𝑑𝑓 𝑑𝑓 𝑑𝑓
𝑅𝑒𝑐𝑢𝑒𝑟𝑑𝑎 𝑞𝑢𝑒, 𝑠𝑖 𝑓(𝑥) = 𝑓 𝑥 = 𝑓 (𝑥 , 𝑥 , 𝑥 ) → 𝐷𝑓(𝑥) = ⎜
⎜𝑑𝑥
⎟
⎟
𝑥 ⎜ 𝑑𝑥 𝑑𝑥 ⎟
𝑓 (𝑥 , 𝑥 , 𝑥 )
𝑑𝑓 𝑑𝑓 𝑑𝑓
⎝𝑑𝑥 𝑑𝑥 𝑑𝑥 ⎠
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:
𝑥∗ ≈ 𝑥 − 𝐽 𝑓(𝑥)
𝑥∗ = 𝑥 + 𝑒
Hay una forma general de comprobar si hemos hecho bien la matriz diferencial (y NO es
revisar todos los cálculos):
𝐷 𝑓(𝑥) ∙ 𝑒
𝑓(𝑥 + 𝑒) − 𝑓(𝑥) − 𝐷𝑓(𝑥) ∙ 𝑒 ≈
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 𝜀 𝑒
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.
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 [𝜉 ∈ (𝑥, 𝑥 + ℎ)]
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.
𝑥 ≠0 |𝜖 | ≤ 𝜖
𝑠𝑖𝑔𝑛(𝑥 )
donde 𝛿 = |𝜖 | ≤ 𝜖
1 𝑥 =0
𝜕 𝑓 𝑥 + 𝛼 √𝜖 − 𝑓 (𝑥)
𝑓 ℝ (𝑥) = 𝑓 (𝑥) ≈
𝜕𝑥 𝛼 √𝜖
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
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.
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.
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 𝑠𝑖 𝑥 = 𝑥 (𝑥 − 𝑥 ) … (𝑥 − 𝑥 )(𝑥 − 𝑥 ) … (𝑥 − 𝑥 )
𝐿 (𝑥) = ← 𝐿 =
0 𝑠𝑖 𝑥 ≠ 𝑥 (𝑥 − 𝑥 ) … (𝑥 − 𝑥 )(𝑥 − 𝑥 ) … (𝑥 − 𝑥 )
Entonces es fácil construir el polinomio interpolador:
La precisión se puede aumentar con interpolación polinómica a trozos. Veremos tres tipos de
interpolación polinómica a trozos:
ℎ
→ 𝑒𝑟𝑟𝑜𝑟 ≤ 𝑚𝑎𝑥|𝑓 (𝜉)|
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.
𝑓 −𝑓 𝑐 ∆ (𝑥) ≥ 0 𝑐𝑜𝑛 𝑥 ∈ (𝑥 ,𝑥 )
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 𝑂((𝑥 − 𝑥 ) ).
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 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:
𝑏−𝑎
𝑓(𝑥) 𝑑𝑥 ≈ (𝑓(𝑎) + 𝑓(𝑏)) 𝑐𝑜𝑛 𝑎=𝑥 , 𝑏=𝑥
2
𝑏−𝑎 𝑎+𝑏
𝑓(𝑥) 𝑑𝑥 ≈ (𝑓(𝑎) + 𝑓(𝑏) + 4𝑓(𝑐)) 𝑐𝑜𝑛 𝑎=𝑥 , 𝑏=𝑥 , 𝑐=
6 2
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:
|𝑒𝑟𝑟𝑜𝑟| ≤ 𝐶(𝑏 − 𝑎) )
𝑚𝑎𝑥 𝑓 (𝑥)
|𝑒𝑟𝑟𝑜𝑟| ≤ 𝐶(𝑏 − 𝑎) )
𝑚𝑎𝑥 𝑓 (𝑥)
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.
↓ 𝑓 (𝑥 ∗ ) ≈ 𝑝 (𝑥 ∗ ) ↓
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 𝑥 − 𝑥
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
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
(𝑡 −𝑡 )= ℎ
𝑦 = 𝑦 + ℎ 𝑓(𝑡 , 𝑦 )
→ 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
𝑦 =𝑦 +ℎ 𝑓 𝑡 + ,𝑦 + 𝑓(𝑡 , 𝑦 )
Paréntesis:
ℎ ℎ ℎ
ℎ 𝑓 𝑡 + ,𝑦 ≈ℎ 𝑓 𝑡 + ,𝑦 + 𝑓(𝑡 , 𝑦 )
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
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
𝑘 = 𝑓(𝑡 + ℎ , 𝑦 + ℎ 𝑘 )
𝑦 = 𝑦 + ℎ (𝑏 𝑘 + 𝑏 𝑘 + ⋯ + 𝑏 𝑘 )
𝑘 = 𝑓(𝑡 , 𝑦 )
𝑘 = 𝑓(𝑡 + 𝑐 ℎ , 𝑦 +ℎ 𝑎 𝑘 )
𝑘 = 𝑓(𝑡 + 𝑐 ℎ , 𝑦 + ℎ (𝑎 𝑘 + 𝑎 𝑘 ))
⋮
𝑘 = 𝑓(𝑡 + 𝑐 ℎ , 𝑦 + ℎ (𝑎 𝑘 + ⋯ + 𝑎 𝑘 ))
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í:
𝑦 =𝑦 +ℎ 𝑘 𝑦 =𝑦 +ℎ 𝑘
𝑘 = 𝑓(𝑡 , 𝑦 ) 𝑘 = 𝑓(𝑡 , 𝑦 )
𝑘 = 𝑓 𝑡 + ℎ ,𝑦 + ℎ 𝑘
𝑎 =𝑐
𝑏 =1
El Error global, que no es más que el error absoluto que cometemos al calcular cada 𝑦
|𝑦(𝑡 ) − 𝑦 |
𝑧 (𝑡) = 𝑓 𝑡, 𝑧(𝑡)
𝑃𝑉𝐼 ≡ → |𝑧 (𝑡 )−𝑦 |
𝑧(𝑡 ) = 𝑦
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.
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
Los dos métodos deben tener mismos coeficientes 𝑎 y 𝑐 pero distintos 𝑏. Así los 𝑘 son iguales
en los dos métodos.
𝑦 = 𝑦 + ℎ (𝑏 𝑘 + 𝑏 𝑘 + ⋯ + 𝑏 𝑘 )
𝑦 = 𝑦 + ℎ (𝑏 𝑘 + 𝑏 𝑘 + ⋯ + 𝑏 𝑘 )
‖𝑒̂ ‖ ≈ ‖𝑦 −𝑦 ‖
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.