Está en la página 1de 12

Formula de Diferencias Finitas Progresivas

Marco Teórico
La fórmula de diferencias finitas progresivas
surge como un caso particular de la
interpolación de Newton, que consiste en
aproximar una función a partir de un conjunto
de puntos denominados “Base” o “Soporte” de
la interpolación en un intervalo. Como se
aprecia en la figura, un polinomio interpolador
se construye de tal forma que tome los valores
especificados por dicho soporte, y permite
aproximar valores en puntos donde esta función
no está normalmente definida.
El polinomio interpolador de Newton tiene la siguiente forma general:
𝑁

𝑃𝑁 (𝑥) = 𝑓[𝑥0 ] + ∑ 𝑓[𝑥0 , … , 𝑥𝑘 ](𝑥 − 𝑥0 ) … (𝑥 − 𝑥𝑘−1 )


𝑘=1
Donde 𝑥0 , … , 𝑥𝑁 ∈ [𝑎, 𝑏] son N+1 puntos de soporte distintos. Esta fórmula consiste en dos partes,
la denominada “base” del polinomio interpolador, que es el producto (𝑥 − 𝑥0 ) … (𝑥 − 𝑥𝑘−1 ) ,
∀𝑘 ∈ {1, … , 𝑁}, y las diferencias dividas, que tienen se representan por 𝑓[𝑥0 , … , 𝑥𝑘 ],
∀𝑘 ∈ {0, … , 𝑁}. Estamos ultimas son las que hallaremos para un caso particular, el caso de puntos
de soporte equidistantes.
El método regular para calcular las diferencias divididas es conocido, y está dado por:

Pero ahora deseamos considerar el caso cuando la distancia entre cada 𝑥𝑖 y el subsiguiente 𝑥𝑖+1
es una constante real positiva, ∀𝑖 ∈ {0, … , 𝑁 − 1}. Denominaremos a esta constante ℎ ∈ ℝ+ :
𝑥𝑖+1 − 𝑥𝑖 = ℎ, ∀𝑖 ∈ {0, … , 𝑁 − 1} , luego:
𝑓(𝑥𝑖+1 ) − 𝑓(𝑥𝑖 )
𝑓[𝑥𝑖 , 𝑥𝑖+1 ] =

Definimos ∆𝑓(𝑥𝑖 ) = 𝑓(𝑥𝑖+1 ) − 𝑓(𝑥𝑖 ), que es una diferencia finita progresiva de primer orden:
∆𝑓(𝑥𝑖 )
𝑓[𝑥𝑖 , 𝑥𝑖+1 ] = → ∆𝑓(𝑥𝑖 ) = ℎ𝑓[𝑥𝑖 , 𝑥𝑖+1 ]

Además, definimos al operador de diferencia finita progresiva de segundo orden de manera
recursiva: ∆2 𝑓(𝑥𝑖 ) = [𝑓(𝑥𝑖+2 ) − 𝑓(𝑥𝑖+1 )] − [𝑓(𝑥𝑖+1 ) − 𝑓(𝑥𝑖 )] = ∆𝑓(𝑥𝑖+1 ) − ∆𝑓(𝑥𝑖 )
∆𝑓(𝑥𝑖+1 ) ∆𝑓(𝑥𝑖 )
− ∆2 𝑓(𝑥𝑖 )
𝑓[𝑥𝑖 , 𝑥𝑖+1 , 𝑥𝑖+2 ] = ℎ ℎ = → ∆2 𝑓(𝑥𝑖 ) = 2ℎ2 𝑓[𝑥𝑖 , 𝑥𝑖+1 , 𝑥𝑖+2 ]
2ℎ 2ℎ2
En el denominador, obtenemos el valor 2ℎ, pues al ser los puntos equidistantes, debemos obtener
𝑥𝑖+2 − 𝑥𝑖 = 𝑥𝑖+2 − 𝑥𝑖+1 + 𝑥𝑖+1 − 𝑥𝑖 = ℎ + ℎ. En general, la distancia 𝑥𝑖+𝑛 − 𝑥𝑖 = 𝑛ℎ. Luego,
generalizamos la formula mediante inducción matemática. Ya resolvimos el caso cuando 𝑛 = 1.
Sea 𝑛 = 𝑘, asumimos por hipótesis inductiva:
∆𝑘 𝑓(𝑥𝑖 )
𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘 ] = → ∆𝑘 𝑓(𝑥𝑖 ) = 𝑘! ℎ𝑘 𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘 ]
𝑘! ℎ𝑘
Luego, sea 𝑛 = 𝑘 + 1, por la fórmula de diferencias divididas:
𝑓[𝑥𝑖+1 , … , 𝑥𝑖+𝑘+1 ] − 𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘 ]
𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘+1 ] =
𝑥𝑖+𝑘+1 − 𝑥𝑖
∆𝑘 𝑓(𝑥𝑖+1 ) ∆𝑘 𝑓(𝑥𝑖 )
𝑘 −
𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘+1 ] = 𝑘! ℎ 𝑘! ℎ𝑘
(𝑘 + 1)ℎ
∆𝑘 𝑓(𝑥𝑖+1 ) − ∆𝑘 𝑓(𝑥𝑖 )
𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘+1 ] =
𝑘! ℎ𝑘 (𝑘 + 1)ℎ
∆𝑘+1 𝑓(𝑥𝑖 )
𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘+1 ] = → ∆𝑘+1 𝑓(𝑥𝑖 ) = (𝑘 + 1)! ℎ𝑘+1 𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘+1 ]
(𝑘 + 1)! ℎ𝑘+1
Por lo tanto, ya tenemos la formula general para las diferencias finitas progresivas. Sin embargo,
existe una fórmula que nos ayudara a calcular estas diferencias de manera no recursiva, lo cual
nos permite una aplicación más rápida. Esta fórmula está dada por:
𝑛
𝑛
∆ 𝑓(𝑥0 ) = ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)𝑛−𝑗
𝑛
𝑗
𝑗=0

En efecto, la demostramos mediamente mediante inducción matemática:


Sea 𝑛 = 1:
1
1
∆𝑓(𝑥0 ) = ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)1−𝑗
𝑗
𝑗=0

1 1
∆𝑓(𝑥0 ) = 𝑓(𝑥0 ) ( ) (−1)1−0 + 𝑓(𝑥1 ) ( ) (−1)1−1
0 1
∆𝑓(𝑥0 ) = 𝑓(𝑥0 )(−1) + 𝑓(𝑥1 )(1) = 𝑓(𝑥1 ) − 𝑓(𝑥0 )
Ahora, asumimos por hipótesis inductiva que, para 𝑛 = 𝑘:
𝑘
𝑘
∆ 𝑓(𝑥0 ) = ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)𝑘−𝑗
𝑘
𝑗
𝑗=0

Luego, sea 𝑛 = 𝑘 + 1, por la definición de diferencias definidas de orden k+1:


∆𝑘+1 𝑓(𝑥0 ) = ∆𝑘 𝑓(𝑥1 ) − ∆𝑘 𝑓(𝑥0 )
𝑘 𝑘
𝑘+1
𝑘 𝑘
→∆ 𝑓(𝑥0 ) = ∑ 𝑓(𝑥1+𝑗 ) ( ) (−1)𝑘−𝑗 − ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)𝑘−𝑗
𝑗 𝑗
𝑗=0 𝑗=0

Descomponemos las sumas, separando los términos 𝑗 = 0 y 𝑗 = 𝑘 + 1


𝑘−1 𝑘
𝑘+1
𝑘 𝑘 𝑘
→∆ 𝑓(𝑥0 ) = (𝑓(𝑥1+𝑘 ) ( ) (−1)𝑘−𝑘 ) + ∑ 𝑓(𝑥1+𝑗 ) ( ) (−1)𝑘−𝑗 − ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)𝑘−𝑗
𝑘 𝑗 𝑗
𝑗=0 𝑗=1
𝑘
− (𝑓(𝑥0 ) ( ) (−1)𝑘−0 )
0
𝑘
𝑘+1
𝑘+1 𝑘
→∆ 𝑓(𝑥0 ) = (𝑓(𝑥𝑘+1 ) ( ) (−1)𝑘+1−𝑘−1 ) + ∑ 𝑓(𝑥1+𝑗−1 ) ( ) (−1)𝑘−𝑗+1
𝑘+1 𝑗−1
𝑗=1
𝑘
𝑘 𝑘+1
− ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)𝑘−𝑗 + (𝑓(𝑥0 ) ( ) (−1)𝑘+1−0 )
𝑗 0
𝑗=1

𝑘
𝑘+1 𝑘
→ ∆𝑘+1 𝑓(𝑥0 ) = (𝑓(𝑥𝑘+1 ) ( ) (−1)𝑘+1−𝑘−1 ) + ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)𝑘+1−𝑗
𝑘+1 𝑗−1
𝑗=1
𝑘
𝑘 𝑘+1
+ ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)𝑘+1−𝑗 + (𝑓(𝑥0 ) ( ) (−1)𝑘+1−0 )
𝑗 0
𝑗=1

Factorizamos ambas sumas en una sola:


𝑘
𝑘+1
𝑘+1 𝑘 𝑘
→∆ 𝑓(𝑥0 ) = (𝑓(𝑥𝑘+1 ) ( ) (−1)𝑘+1−𝑘−1 ) + ∑ 𝑓(𝑥𝑗 )(−1)𝑘+1−𝑗 [( ) + ( )]
𝑘+1 𝑗−1 𝑗
𝑗=1
𝑘+1
+ (𝑓(𝑥0 ) ( ) (−1)𝑘+1−0 )
0
𝑘
Pero por la formula del triangulo de Pascal, se tiene (𝑗−1 ) + (𝑘𝑗) = (𝑘+1
𝑗
)
𝑘
𝑘+1
𝑘+1 𝑘+1
→∆ 𝑓(𝑥0 ) = (𝑓(𝑥𝑘+1 ) ( ) (−1)𝑘+1−𝑘−1 ) + ∑ 𝑓(𝑥𝑗 )(−1)𝑘+1−𝑗 ( )
𝑘+1 𝑗
𝑗=1
𝑘+1
+ (𝑓(𝑥0 ) ( ) (−1)𝑘+1−0 )
0

𝑘
𝑘+1
𝑘+1 𝑘+1
→∆ 𝑓(𝑥0 ) = 𝑓(𝑥𝑘+1 ) ( ) (−1)𝑘+1−𝑘−1 + ∑ 𝑓(𝑥𝑗 )(−1)𝑘+1−𝑗 ( )
𝑘+1 𝑗
𝑗=0
𝑘+1
𝑘+1
→ ∆𝑘+1 𝑓(𝑥0 ) = ∑ 𝑓(𝑥𝑗 )(−1)𝑘+1−𝑗 ( )
𝑗
𝑗=0

Por lo tanto, queda demostrada esta formula.


Finalmente, mostraremos la formula del polinomio interpolador de Newton a partir de las
recientemente definidas Diferencias Finitas Progresivas:
𝑁

𝑃𝑁 (𝑥) = 𝑓[𝑥0 ] + ∑ 𝑓[𝑥0 , … , 𝑥𝑘 ](𝑥 − 𝑥0 ) … (𝑥 − 𝑥𝑘−1 )


𝑘=1
Reemplazamos la formula que obtuvimos con las diferencias divididas
∆𝑘+1 𝑓(𝑥𝑖 )
𝑓[𝑥𝑖 , … , 𝑥𝑖+𝑘+1 ] = (𝑘+1)!ℎ𝑘+1
:

𝑁
∆ 𝑓(𝑥0 )
𝑘

𝑃𝑁 (𝑥) = 𝑓[𝑥0 ] + ∑ (𝑥 − 𝑥0 ) … (𝑥 − 𝑥𝑘−1 )


𝑘! ℎ𝑘
𝑘=1
Consideremos ahora el siguiente cambio de variable: 𝑥 = 𝑥0 + 𝑡ℎ, 𝑡 ∈ [0, 𝑁]. Notamos que si t es
natural, se cumple 𝑥𝑘 = 𝑥0 + 𝑘ℎ:
𝑡ℎ = 𝑥 − 𝑥0
𝑡ℎ = 𝑥 − 𝑥𝑘 + 𝑘ℎ

( 𝑡 − 𝑘 ) ℎ = 𝑥 − 𝑥𝑘
Reemplazamos en los factores de la suma:
𝑁
∆ 𝑓(𝑥0 )
𝑘

𝑃𝑁 (𝑥) = 𝑓[𝑥0 ] + ∑ (𝑡ℎ) … ((𝑡 − 𝑘 + 1)ℎ)


𝑘! ℎ𝑘
𝑘=1
𝑁
∆ 𝑓(𝑥0 )
𝑘

𝑃𝑁 (𝑥) = 𝑓[𝑥0 ] + ∑ 𝑘
(𝑡) … ((𝑡 − 𝑘 + 1))ℎ𝑘
𝑘! ℎ
𝑘=1
𝑁
∆ 𝑓(𝑥0 )
𝑘

𝑃𝑁 (𝑥) = 𝑓[𝑥0 ] + ∑ (𝑡) … ((𝑡 − 𝑘 + 1))


𝑘!
𝑘=1
(𝑡)…((𝑡−𝑘+1))
Finalmente, por notacion, se suele abreviar = (𝑘𝑡 )
𝑘
𝑁
𝑡
𝑃𝑁 (𝑥) = 𝑓[𝑥0 ] + ∑ ∆𝑘 𝑓(𝑥0 ) ( )
𝑘
𝑘=1
Ejemplos:
1) Aplicar la fórmula de Newton progresiva a los puntos de la siguiente tabla
para obtener un valor aproximado de 𝑓(1.5) mediante un polinomio de
interpolación de 2º grado.
𝒙𝒊 0 1 2 3 4
𝒇(𝒙𝒊 ) -5 1 9 25 55

Hallamos las diferencias divididas hasta el orden 3:


𝒙𝒊 𝒇(𝒙𝒊 ) ∆𝒇(𝒙𝟎 ) ∆𝟐 𝒇(𝒙𝟎 ) ∆𝟑 𝒇(𝒙𝟎 )
0 -5 - - -
1 1 6 - -
2 9 8 2 -
3 25 16 8 6
4 55 30 14 6

Ahora, calculamos el polinomio:

8(𝑥 − 1) 8(𝑥 − 1)(𝑥 − 2)


𝑃(𝑥) = 1 + +
1! (1) 2! (1)
𝑃(𝑥) = 1 + (8𝑥 − 8) + 4(𝑥 2 − 3𝑥 + 2)
𝑃(𝑥) = 4𝑥 2 − 4𝑥 + 1
Finalmente, evaluamos 𝑃(1.5):

𝑓(1.5) ≈ 𝑃(1.5) = 4
2)Encontrar el polinomio interpolador de Newton de 𝑓(𝑥) sobre el soporte
dado utilizando para ello diferencias finitas progresivas.
𝒙𝒊 0 1 2 3 4
𝒇(𝒙𝒊 ) 2 3.086 7.524 20.135 54.616

Nuevamente, hallamos primero las diferencias finitas progresivas mediante la fórmula. La tabla
obtenida es:
𝒙𝒊 𝒇(𝒙𝒊 ) ∆𝒇(𝒙𝟎 ) ∆𝟐 𝒇(𝒙𝟎 ) ∆𝟑 𝒇(𝒙𝟎 ) ∆𝟒 𝒇(𝒙𝟎 )
0 2 - - - -
1 3.086 1.086 - - -
2 7.524 4.438 3.352 - -
3 20.135 12.611 8.173 4.821 -
4 54.616 34.481 21.87 13.697 8.876

Aplicamos la formula del polinomio interpolador de Newton:

1.086(𝑥−1) 3.352(𝑥−1)(𝑥−2) 4.821(𝑥−1)(𝑥−2)(𝑥−3)


𝑃(𝑥) = 2 + + + +
1!(1) 2!(1) 3!(1)
8.876(𝑥−1)(𝑥−2)(𝑥−3)(𝑥−4)
4!(1)

𝑃(𝑥) = 2 + 1.086𝑥 − 1.086 + 1.676(𝑥 2 − 3𝑥 + 2) + 0.8035(𝑥 3 − 6𝑥 2 −


11𝑥 − 6) + 0.369833(𝑥 − 1)(𝑥 − 2)(𝑥 − 3)(𝑥 − 4)
Finalmente, luego de operar este polinomio:

𝑃(𝑥) = 2 − 1.202𝑥 + 3.3336666𝑥 2 − 1.4155𝑥 3 + 0.369833𝑥 4


3)Encontrar el polinomio interpolador de Newton de 𝑓(𝑥) sobre el soporte
dado utilizando para ello diferencias finitas progresivas.
Usando la interpolación progresiva de Newton, hallar el área de la distribución normal entre 0 a 2,
usando 5 puntos:
2
𝑥2

𝑒 2
𝐴=∫ ⅆ𝑥
√2𝜋
0
𝒙𝒊 0 0,5 1 1,5 2
𝒇(𝒙𝒊 ) 0,39894 0,35207 0,24197 0,12952 0,05399

A partir de estos datos, construimos la tabla de diferencias finitas progresivas.

𝒙𝒊 𝒇(𝒙𝒊 ) ∆𝒇(𝒙𝟎 ) ∆𝟐 𝒇(𝒙𝟎 ) ∆𝟑 𝒇(𝒙𝟎 ) ∆𝟒 𝒇(𝒙𝟎 )


0 0.39894 - - - -
0.5 0.35207 -0.09374 - - -
1 0.24197 -0.2202 -0.12646 - -
1.5 0.12952 -0.2249 -0.0047 0.08117333 -
2 0.05399 -0.15106 0.07384 0.05236 -0.01440667

Hallamos el polinomio interpolador de Newton:


4
𝒕
𝑃4 (0 + 0.5𝑡) = ∑ ∆𝒊 𝒇(𝒙𝟎 ) ( )
𝟒
𝑖=0

0.12646 𝑡(𝑡 − 1) 0.08117 𝑡(𝑡 − 1)(𝑡 − 2)


𝑃4 (0.5𝑡) = 0.39894 − 0.09374𝑡 − +
2 2(3)
0.01441 𝑡(𝑡 − 1)(𝑡 − 2)(𝑡 − 3)

2(3)(4)
𝑃4 (0.5𝑡) = 0.39894 − 0.09374𝑡 − 0.06323𝑡(𝑡 − 1) + 0.01353𝑡(𝑡 − 1)(𝑡 − 2)
− 0.0006 𝑡(𝑡 − 1)(𝑡 − 2)(𝑡 − 3)
Luego, integramos este polinomio:
2

∫ 𝑃4 (𝑥) ⅆ𝑥 = 0.56840
0
Notamos la siguiente grafica de ambas funciones:

Observaciones:

1. El valor obtenido debería ser cercano a 0,4772 (notar que este número es menor que 0,5;
porque es una porción de la mitad de la gráfica), sin embargo, el valor obtenido es 0,5684
(superior a 0,5).
2. Esto quiere decir que era mejor haber usado la interpolación por segmentos parabólicos
que usando un polinomio de grado mayor.
3. La curva roja (polinomio aproximado) está en la mayor parte del eje X por encima de la
curva azul (función original).
4) En la tabla siguiente se dan los valores de la función 𝑦(𝑥) = √𝑥,
redondeados a 5 cifras decimales. Calcular las diferencias finitas progresivas
de orden 3, y utilizar la tabla para obtener √1.01, √1.28 y √1.12
𝒙𝒊 1 1.05 1.1 1.15 1.2 1.25 1.3
𝒇(𝒙𝒊 ) 1 1.02470 1.04881 1.07238 1.09545 1.11803 1.14017

Calculamos la tabla de diferencias divididas:

𝒙𝒊 𝒇(𝒙𝒊 ) ∆𝒇(𝒙𝟎 ) ∆𝟐 𝒇(𝒙𝟎 ) ∆𝟑 𝒇(𝒙𝟎 )


1 1 - - -
1.05 1.02470 0.49390 - -
1.1 1.04881 0.48228 -0.11626 -
1.15 1.07238 0.47143 -0.10842 0.05229
1.2 1.09545 0.46129 -0.10142 0.04666
1.25 1.11803 0.45178 -0.09514 0.04184
1.3 1.14017 0.44283 -0.08949 0.03770

3
𝒕
𝑃3 (1 + 0.1𝑡) = ∑ ∆𝒊 𝒇(𝟏) ( )
𝟑
𝑖=0

𝑃3 (1 + 0.1𝑡) = 1 + 0.4939𝑡 − 0.05813𝑡(𝑡 − 1) + 0.00871𝑡(𝑡 − 1)(𝑡 − 2)


𝑃3 (𝑥) = 1 + 0.4939(𝑥 − 1) − 0.05813(𝑥 − 1)(𝑥 − 1.05) + 0.00871(𝑥 − 1)(𝑥 − 1.05)(𝑥 − 1.1)

Finalmente, evaluamos los valores en el polinomio obtenido:


𝒙 𝑷𝟑 (𝒙)
1.01 1.00496
1.28 1.13465
1.12 1.05878
Línea roja: polinomio aproximado
Línea verde: función original
Aplicación en un programa de MATLAB
La formula del polinomio de Newton para Diferencias Finitas Progresivas tiene la forma general:
𝑁
𝑡
𝑃𝑁 (𝑥) = 𝑓[𝑥0 ] + ∑ ∆𝑘 𝑓(𝑥0 ) ( )
𝑘
𝑘=1
Luego, para poder determinar el polinomio, debemos poder determinar los valores ∆𝑘 𝑓(𝑥0 ) y
(𝑘𝑡 ). Elaboramos codigos que se encarguen de hallar estas variables:

La función difprog se encarga de calcular el valor de las diferencias progresivas ∆𝑘 𝑓(𝑥0 ). Recibe
como valores la función f (de la cual obtiene 𝑓(𝑥0 ) y los valores siguientes), ord (el orden de las
diferencias finitas), inic (el punto inicial 𝑥0 ) y dist (la distancia h entre cada punto).
Esta función aplica la segunda formula demostrada para las diferencias finitas progresivas:
𝑛
𝑛
∆ 𝑓(𝑥0 ) = ∑ 𝑓(𝑥0+𝑗 ) ( ) (−1)𝑛−𝑗
𝑛
𝑗
𝑗=0

La función varchoose está basada en la función denominada “choose(n,k)” en MATLAB, que es el


𝑛
nombre de la función (𝑘 )de coeficientes binomiales. Esta función nos debe devolver el polinomio
𝑡
denotado por (𝑘 ), que depende de la variable t. Esta funcion aplica directamente la formula

(𝑡) … ((𝑡 − 𝑘 + 1))


𝑘!
Pero también devuelve la función en términos de la variable original tras el cambio de variable
𝑡ℎ = 𝑥 − 𝑥0
Esta función depende de las variables k (del coeficiente binomial), h (nuevamente la distancia) y
inic (el punto inicial 𝑥0 ).

Finalmente, tras definir las dos funciones auxiliares, tenemos la función final interp, que interpola
la función f dada. También recibe el valor cant (la cantidad de puntos de soporte), el valor inic (𝑥0 ),
el valor dist (distancia entre cada punto). Esta función aplica directamente la formula general del
polinomio interpolador de Newton para diferencias finitas progresivas.
En la parte inferior, se ve la aplicación del programa para resolver el ejercicio planteado 2). La
función definida en puntos discretos se llama xn, y recibe los valores de la tabla usada en ese
ejercicio. El polinomio interpolado f(x) es igual al polinomio obtenido manualmente en ese
ejercicio, e incluso podemos evaluar el valor 1.5 en el nuevo polinomio interpolador.

También podría gustarte