Métodos Numéricos - Laboratorio
Solución del avance de Guía de Laboratorio N°3
Hecho por: Grupo: 01
Fecha: 8-Abril-2025
Diagrama de Flujo:
1
% Interpolación de Newton - Diferencias Divididas (versión sencilla)
clc; clear;
% DATOS
x = [0 5 10 15]; % Puntos x conocidos
y = [1.792 1.519 1.308 1.140]; % Valores f(x)
x_interp = 8; % Punto donde se quiere interpolar
n = length(x); % Número de puntos
2
% MATRIZ DE DIFERENCIAS DIVIDIDAS
tabla = zeros(n,n);
tabla(:,1) = y'; % Primera columna = f(x)
for j = 2:n
for i = j:n
tabla(i,j) = (tabla(i,j-1) - tabla(i-1,j-1)) / (x(i) - x(i-j+1));
end
end
% MOSTRAR MATRIZ
disp('Matriz de diferencias divididas:');
Matriz de diferencias divididas:
disp(tabla);
1.7920 0 0 0
1.5190 -0.0546 0 0
1.3080 -0.0422 0.0012 0
1.1400 -0.0336 0.0009 -0.0000
% POLINOMIO DE NEWTON
syms X
polinomio = tabla(1,1);
producto = 1;
fprintf('\nPolinomio de Newton:\n');
Polinomio de Newton:
fprintf('P(X) = %.6f', tabla(1,1));
P(X) = 1.792000
for k = 1:n-1
producto = producto * (X - x(k));
nuevo_termino = tabla(k+1,k+1) * producto;
polinomio = polinomio + nuevo_termino;
% Mostrar término actual
fprintf(' + (%.6f)', tabla(k+1,k+1));
for j = 1:k
fprintf('(X - %.2f)', x(j));
end
end
+ (-0.054600)
(X - 0.00)
+ (0.001240)
(X - 0.00)(X - 5.00)
+ (-0.000025)
3
(X - 0.00)(X - 5.00)(X - 10.00)
% MOSTRAR POLINOMIO SIMPLIFICADO
fprintf('\n\nPolinomio simplificado:\n');
Polinomio simplificado:
disp(simplify(polinomio));
% EVALUAR EN x_interp
y_interp = double(subs(polinomio, X, x_interp));
fprintf('\nValor estimado en x = %.2f es: %.6f\n', x_interp, y_interp);
Valor estimado en x = 8.00 es: 1.386176
ANÁLISIS DEL CÓDIGO DE INTERPOLACIÓN DE NEWTON
Entrada de datos
x = [0 5 10 15];
y = [1.792 1.519 1.308 1.140];
x_interp = 8;
• Se definen 4 puntos conocidos.
• Se desea interpolar el valor de f(x) cuando x = 8.
Construcción de la matriz de diferencias divididas
tabla = zeros(n,n);
tabla(:,1) = y';
• Se inicializa una matriz cuadrada tabla.
• La primera columna se llena con los valores conocidos de f(x).
for j = 2:n
for i = j:n
tabla(i,j) = (tabla(i,j-1) - tabla(i-1,j-1)) / (x(i) - x(i-j+1));
end
end
• Se calculan las diferencias divididas sucesivas.
• Cada columna contiene diferencias de orden superior.
Resultado: se obtiene una matriz triangular superior, útil para formar el polinomio de Newton.