Está en la página 1de 4

n = length(x);

F = zeros(n, n); % Matriz de diferencias divididas


F(:,1) = y'; % Primera columna es igual a los valores de y
for j = 2:n
for i = j:n
F(i,j) = (F(i,j-1) - F(i-1,j-1)) / (x(i) - x(i-j+1));
end
end
a = diag(F(1:grado+1,1:grado+1))';

El objetivo de esta sección del código es calcular las diferencias divididas que se utilizan
para encontrar el polinomio interpolante.

El cálculo de las diferencias divididas se realiza mediante la matriz de diferencias divididas


F, que es una matriz cuadrada de tamaño n x n, donde n es la cantidad de puntos de
entrada x e y.

En la primera columna de F, se colocan los valores de y que se han ingresado. Luego, se


utilizan estas diferencias divididas para calcular las siguientes columnas de F. Las
diferencias divididas son los elementos diagonales de la matriz F.

En este caso, se utiliza el índice j para recorrer las columnas de la matriz F y el índice i
para recorrer las filas. En cada iteración, se calcula la diferencia dividida correspondiente y
se almacena en F(i,j).

La última línea de este bloque de código, a = diag(F(1:grado+1,1:grado+1))',


selecciona solo los elementos diagonales de la matriz F hasta el grado deseado grado, y
los almacena en el vector a.

F(:,1) = y'; y

se está inicializando la matriz F con los valores de la función y en la primera columna.


El operador : se utiliza para indicar que se deben tomar todos los índices en una
determinada dimensión, por lo que F(:,1) selecciona todas las filas de la primera columna
de F.

El apóstrofe (') se utiliza para realizar la transposición de un vector o matriz en Octave, es


decir, se convierten las filas en columnas y viceversa. En este caso, y' convierte el vector
fila y en un vector columna, que se utiliza para inicializar la primera columna de F.
for j = 2:n

for i = j:n

F(i,j) = (F(i,j-1) - F(i-1,j-1)) / (x(i) - x(i-j+1));

end

end

a = diag(F(1:grado+1,1:grado+1))';

En este bloque de código se calculan las diferencias divididas de la función a interpolar.


Primero se inicializa la matriz F con ceros, donde F(i,j) representa la diferencia dividida
de orden j-1 de los valores y en los índices 1 a i. Luego, se asigna la primera columna de
F con los valores y que se quiere interpolar.

Luego, se usan dos ciclos anidados para calcular las diferencias divididas de orden superior.
La expresión (F(i,j-1) - F(i-1,j-1)) / (x(i) - x(i-j+1)) representa la
diferencia dividida de orden j de los valores y en los índices 1 a i. Finalmente, se guarda el
valor de esta diferencia dividida en la matriz F(i,j).

por ejemplo, si tenemos los puntos (1, 3), (2, 5), (3, 7), (4, 9), queremos encontrar un
polinomio que pase por estos puntos. Primero, encontramos las diferencias divididas de
primer orden:

f[1] = 3

f[2] = 5

f[3] = 7

f[4] = 9

f[1,2] = (5 - 3)/(2 - 1) = 2

f[2,3] = (7 - 5)/(3 - 2) = 2

f[3,4] = (9 - 7)/(4 - 3) = 2

Luego, encontramos las diferencias divididas de segundo orden:

f[1,2,3] = (2 - 2)/(3 - 1) = 0

f[2,3,4] = (2 - 2)/(4 - 2) = 0

Finalmente, encontramos las diferencias divididas de tercer orden:

f[1,2,3,4] = (0 - 0)/(4 - 1) = 0
Claro, la fórmula de las diferencias divididas para encontrar los coeficientes de la
interpolación polinómica de Lagrange es:

F(i,j) = (F(i,j-1) - F(i-1,j-1)) / (x(i) - x(i-j+1))

Donde:

● F es la matriz de diferencias divididas que vamos a calcular.


● i representa la fila en la que estamos trabajando.
● j representa la columna en la que estamos trabajando.
● x es el vector de las coordenadas x de los puntos de datos.
● F(i,j-1) y F(i-1,j-1) son los elementos de la matriz de diferencias divididas en la fila i y
columna j-1 y en la fila i-1 y columna j-1, respectivamente.
● x(i) y x(i-j+1) son los valores de las coordenadas x correspondientes a los elementos
F(i,j-1) y F(i-1,j-1).

En otras palabras, la fórmula nos permite calcular la diferencia dividida de orden j de la


función interpolante, utilizando las diferencias divididas de orden j-1 que ya hemos calculado
en iteraciones anteriores.

Por ejemplo, para los datos (1, 3), (2, 5), (3, 7), (4, 9), la matriz de diferencias divididas F se
vería así:

|3|2|0|0|

|5|2|0|0|

|7|2|0|0|

|9|0|0|0|

Para calcular el elemento F(3,3), tendríamos:

F(3,3) = (F(3,2) - F(2,2)) / (x(3) - x(1)) = (2 - 2) / (3 - 1) = 0

Por último, se seleccionan las diferencias divididas diagonales de orden 0 a grado (donde
grado es el grado de interpolación deseado) y se guardan en un vector a. La función diag
devuelve la diagonal de una matriz, y al especificar los índices 1:grado+1 en la matriz F,
se están seleccionando las diagonales desde la posición (1,1) hasta la posición
(grado+1, grado+1). Luego, el operador de transposición ' se utiliza para convertir el
vector fila a en un vector columna.

syms z;

polinomio = a(1);
for i = 2:grado+1

termino = a(i);

for j = 1:i-1

termino = termino * (z - x(j));

end

polinomio = polinomio + termino;

end

Primero, se define una variable simbólica z para poder construir el polinomio. Luego se
inicializa el polinomio polinomio con el valor de la primera diferencia dividida a(1).

Después se utiliza un ciclo for que recorre las demás diferencias divididas (de la segunda
hasta la grado+1-ésima) y por cada una de ellas se construye un término del polinomio
interpolante. Este término se calcula como el producto de la diferencia dividida
correspondiente a(i) y una serie de factores (z - x(j)), donde j recorre los índices
desde 1 hasta i-1.

Finalmente, el término calculado se suma al polinomio interpolante polinomio, que al


finalizar el ciclo for, contiene el polinomio completo.

También podría gustarte