5.1 Diferencias finitas

Referencia: Rodriguez 6.5 Pdf.211, Chapra 18.1.3 pdf.509

Establece relaciones simples entre los puntos dados que describen la funcion f(x)

Por ejemplo, si los puntos son:

xi = [0.10, 0.2, 0.3, 0.4]
fi = [1.45, 1.6, 1.7, 2.0]

la tabla será:

i xi fi Δ1fi Δ2fi Δ3fi Δ4fi
1. 0.1 1.45 0.15 -0.05 0.25 0.
2. 0.2 1.6 0.1 0.2 0. 0.
3. 0.3 1.7 0.3 0. 0. 0.
4. 0.4 2.0 0. 0. 0. 0.

Cada casila de diferencia finita se obtiene restando los dos valores consecutivos de la columna anterior.

Si la función f(x) de donde provienen los datos es un polinonio de grado n, entonces la n-ésima diferencia finita será una constante, y las siguientes diferencias se anularán.

Para crear la tabla mediante un algoritmo en Python, se crean primero las columnas que contienen, el índice i, los valores xi y fi.

Con las tres columnas iniciales, se crea una matriz aumentada con la matriz de diferencias, que tiene tamaño nxn.

Se calculan las diferencias para cada columna, realizando la operación entre los valores de cada fila.
Finalmente se muestra el resultado.

# Diferencias finitas
# Chapra 18.1.3 pdf.509; Rodriguez 6.5 Pdf.211
# Genera la tabla de diferencias finitas
# resultado en: [título,tabla]
# Tarea: verificar tamaño de vectores
import numpy as np

# INGRESO , Datos de prueba
xi = np.array([0.10, 0.2, 0.3, 0.4])
fi = np.array([1.45, 1.6, 1.7, 2.0])

# PROCEDIMIENTO
# Tabla de diferencias finitas
titulo = ['i','xi','fi']
n = len(xi)
# cambia a forma de columnas
i = np.arange(1,n+1,1)
i = np.transpose([i])
xi = np.transpose([xi])
fi = np.transpose([fi])
# Añade matriz de diferencias
dfinita = np.zeros(shape=(n,n),dtype=float)
tabla = np.concatenate((i,xi,fi,dfinita), axis=1)
# Sobre matriz de diferencias, por columnas
[n,m] = np.shape(tabla)
diagonal = n-1

c = 3
while (c<m):
    # Aumenta el título para cada columna
    titulo.append('df'+str(c-2))
    # calcula cada diferencia por fila
    f = 0
    while (f < diagonal):
        tabla[f,c] = tabla[f+1,c-1]-tabla[f,c-1]
        f = f+1
    
    diagonal = diagonal - 1
    c = c+1

# SALIDA
print([titulo])
print(tabla)

el resultado de aplicar el algoritmo es:

[['i', 'xi', 'fi', 'df1', 'df2', 'df3', 'df4']]
[[ 1.    0.1   1.45  0.15 -0.05  0.25  0.  ]
 [ 2.    0.2   1.6   0.1   0.2   0.    0.  ]
 [ 3.    0.3   1.7   0.3   0.    0.    0.  ]
 [ 4.    0.4   2.    0.    0.    0.    0.  ]]

>>>