Seminario de Interpolacion

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 51

Interpolación y aproximación

polinomial
Programación Numérica
Definición
Un polinomio de grado n es una expresión de la forma:
P(x) = anxn + an-1xn-1 + ... +a1x + a0
Donde an <> 0

Teorema (teorema de aproximación de Weierstrass)


Suponga que f está definida y es continua en [a, b]. Para ε > 0
existe un polinomio P definido en [a, b], con la propiedad de
que
|f(x) – P(x)| < ε, para toda x en [a, b]
Desarrollo en series de Taylor
Sea f(x) = ex
Desarrollando en serie de Taylor alrededor de x = 0

P0(x) = 1 P1(x) = 1 + x P2(x) = 1 + x + x2/2


P3(x) = 1 + x + x2/2 + x3/6 P4(x) = 1 + x + x2/2 + x3/6 + x4/24
P5(x) = 1 + x + x2/2 + x3/6 + x4/24 + x5/120
x
Valores de e
Valores de las aproximaciones de ex con polinomios de Taylor
Expansión de Taylor para 1/x
Interpolación polinomial de Newton

Revisaremos solo algunos casos: lineal, de segundo grado y de


tercer grado.
Interpolación lineal
Utilizando triángulos semejantes

f(x)

Reordenando
f(x1)
f1(x)

f(x0)

x0 x x1
Ejemplo
Estimar ln 2 mediante interpolación lineal si ln1 = 0 y ln 6 = 1.791759 y ln 4 = 1.386294

Valor real ln 2 = 0.6931472


Error relativo porcentual = 33.3%

f(x) = ln x

Valor verdadero

f1(x)

Estimaciones lineales
Interpolación cuadrática
Polinomio cuadrático
f2(x) = b0 + b1(x – x0) + b2(x – x0)(x – x1) (1)
simplificado
f2(x) = b0 + b1x – b1x0 + b2x2 + b2x0 x1 – b2xx0 – b2xx1
Podemos escribirlo como
f2(x) = a0 + a1x + a2x2
Donde
a0 = b0 – b1x0 + b2x0 x1, a1 = b1 – b2x0 – b2x1, a2=b2
Podemos evaluar b0, b1 y b2 sustituyendo x0, x1 y x2 en la ecuación (1), se obtiene
b0 = f(x0)
ejemplo 2
Calculemos ln 2 con ln 4 y ln 6, los punto que se conocen son:
f(x) = ln x
x0 = 1 f(x0) = 0
x1 = 4 f(x0) = 1.386294
x0 = 6 f(x0) = 1.791759
Aplicando las ecs. anteriores
Valor verdadero
b0 = 0
b1 = (1.386294 – 0)/(4 – 1) = 0.4620981
b2 = ((1.791759 – 1.386294)
/(6 – 4) – 0.4620981)/(6 – 1)
= – 0.0518731 Estimación cuadrática

El polinomio es Estimación lineal


f2(x) = 0.4620981(x – 1) – 0.0518731(x – 1)(x – 4)

f2(2) = 0.5658444
Valor real ln 2 = 0.6931472
Error relativo porcentual = 18.4%
Forma general
Polinomio general
fn(x) = b0 + b1(x – x0) +...+ bn(x – x0)(x – x1)... (x – xn–1)
Los coeficientes se calculan con
b0 = f(x0)
b1 = f [x1, x0]
b2 = f [x2, x1, x0]

bn = f [,xn, xn–1, ..., x1, x0]


Donde los paréntesis cuadrados se denominan diferencias divididas finitas.
La n-ésima diferencia dividida finita es:

Se conoce como polinomio de interpolación de Newton en diferencias divididas.


ejemplo 3
Calculemos ln 2 con ln 0, ln 4, ln 5 y ln 6, los punto que se conocen son:
x0 = 1 f(x0) = 0
x1 = 4 f(x1) = 1.386294
x2 = 6 f(x3) = 1.791759
x3 = 5 f(x2) = 1.609438
primeras diferencias
f [x1, x0] = (1.386294 – 0)/(4 – 1) = 0.4602981
f [x2, x1] = (1.791759 – 1.386294)/(6 – 4) = 0.2027326
f [x3, x2] = (1.609438 – 1.791759)/(5 – 6) = 0.1823216
Segundas diferencias
f [x2, x1, x0] = (0.2027326 – 0.4602981)/(6 – 1) = –0.05187311
f [x3, x2, x1] = (0.1823216 – 0.2027326)/(5 – 4) = –0.02041100
tercera diferencia
f [x3, x2, x1 , x0] = (–0.02041100–(–0.05187311))/(5 – 1) = 0.007865529
Polinomio
f3(x) = 0 + 0.4602981(x – 1) –0.05187311(x – 1) (x – 4) + 0.007865529(x – 1) (x – 4) (x – 6)
Valor calculado con el polinomio
f3(2) = 0.6287686
Ejemplo 3 (cont.)
f3(x)

Valor verdadero

f(x) = ln x

Estimación cúbica
Estimación del error
Para estimar el error requerimos de un datos más (xn+1). La
siguiente fórmula puede utilizarse para estimar el error.

Rn = f [,xn+1, xn, ..., x1, x0](x – x0) (x – x1)... (x – xn)


Interpolación y polinomio de
Lagrange
Se trata de encontrar un polinomio de grado n que pase por
los puntos (x0, f(x0)), (x1, f(x1)), ... (xn, f(xn)), se construye un
cociente Ln,k(xk) con la propiedad de que
Ln,k(xi) = 0 cuando i ≠ k y Ln,k(xk) = 1
Se requiere entonces que el numerador contenga
(x – x0) (x – x1)... (x – xk–1)(x – xk+1)... (x – xn)
El denominador debe coincidir con el numerador cuando x =
x k.
N-ésimo polinomio interpolante
de Lagrange
Teorema
Si x0, x1, x2, ... xn, son n+1 números distintos y si f es una función
cuyos valores están dados en esos números, entonces existe un
polinomio de grado a lo más n, con la propiedad de que
f(xk) = P(xk) para cada k = 0, 1, 2, ...n
Este polinomio está dado por

donde
Aproximación a 1/x con
interpolantes de Lagrange
Usaremos x0 = 2, x1 = 2.5 y x2 = 4, para obtener un polinomio de grado
2 para 1/x. f(x0) = 0.5, f(x1)= 0.4 y f(x2) = 0.25.
Los polinomios de Lagrange son:

P(x) = 0.5*((x–6.5)x+10)+0.4*((–4x+24)x–32)/3+ 0.25*((x + 4.5)x+5)/3


P(x) = (0.05x – 0.425)x + 1.15 = 0.05x2 – 0.425x + 1.15
f(3) = P(3) = 0.325
Aproximación a 1/x con
interpolantes de Lagrange
P(x) = (0.05x – 0.425)x + 1.15
f(3) = P(3) = 0.325
El error en la interpolación de
Lagrange
El error en la interpolación de Lagrange puede calcularse
con
Algoritmo en Matlab
function fi = Lagran_(x, f, xi)
fi=zeros(size(xi));
np1=length(f);
for i=1:np1
z=ones(size(xi));
for j=1:np1
if i~=j, z = z.*(xi - x(j))/(x(i)-x(j));end
end
fi=fi+z*f(i);
end
return
Calcula coeficientes de P2(x)
%Calcula el polinomio interpolante de Lagrange
de grado 2
function [a,b,c] =
Lagrange(x0,x1,x2,fx0,fx1,fx2)
t0 = (x0 - x1)*(x0 - x2);
t1 = (x1 - x0)*(x1 - x2);
t2 = (x2 - x0)*(x2 - x1);
a = fx0/t0 +fx1/t1 +fx2/t2;
b = -fx0*(x1 + x2)/t0 - fx1*(x0 + x2)/t1 -
fx2*(x0 + x1)/t2;
c = fx0*x1*x2/t0 + fx1*x0*x2/t1 + fx2*x0*x1/t2;
Interpolación Inversa
Tabla de valores de f (x) = 1/x.

x 1 2 3 4 5 6 7

f (x) 1 0.5 0.3333 0.25 0.2 0.1667 0.1429

Se desea conocer el valor de x tal que f (x) = 0.3.


El problema se resuelve definiendo un polinomio de
interpolación de grado 2 con los puntos (2, 0.5), (3, 0.3333) y
(4, 0.25) y resolviendo la ecuación:
f (x) = 0.3 = 1.08333 – 0.375x + 0.041667x2
Lo que da x = 5.704158 y x = 3.295842, el valor real es 3.333.
Trazadores (Splines)
Dados n +1 puntos podemos construir un polinomio de grado n
para interpolar valores dentro del intervalo.
También se pueden usar líneas rectas entre cada par de puntos
para hacer interpolación lineal entre ellos o polinomios
cuadráticos o cúbicos.
Tales interpoladores se llaman trazadores lineales, cuadráticos y
cúbicos, respectivamente.
La ventaja de los trazadores es que no presentan el efecto de
oscilación de los polinomios de alto grado.
f (x)

f (x)

f (x)

f (x)
Trazadores lineales
Para los trazadores lineales se definen rectas entre cada
intervalo para calcular los valores intermedios.
f (x) = f (x0) + m0(x – x0) x0 <= x <= x1
f (x) = f (x1) + m1(x – x0) x1 <= x <= x2

f (x) = f (x0) + mn–1 (x – x0) xn–1 <= x <= xn


Los valores de mi se calculan con:
ejemplo
x f (x)
3.0 2.5
4.5 1.0
2
7.0 2.5
9.0 0.5 0
2 4 6 8 10
Trazadores cuadráticos
El polinomio en cada intervalo es de la forma:
fi(x) = ai x2 + bi x + ci
Para encontrar los ai , bi , ci se deben cumplir las siguientes condiciones:
1. Los valores de la función deben ser iguales en los nodos interiores, 2n –
2 ecuaciones.

2. La primera y última función debe pasar por los extremos, 2 ecuaciones.

3. Las primeras derivadas en los nodos interiores deben ser iguales, n – 1


ecuaciones. O sea: 2ai –1 xi–1 + bi –1 = 2ai xi–1 + bi
4. Suponer derivada 0 en el primer punto. a1 = 0
ejemplo
x f (x) Encontrar f (5)
3.0 2.5
4.5 1.0
7.0 2.5
9.0 0.5
La condición 1 genera las siguientes ecuaciones:
20.25a1 + 4.5b1 + c1 = 1.0
20.25a2 + 4.5b2 + c2 = 1.0
49a2 + 7b2 + c2 = 2.5
49a3 + 7b3 + c3 = 2.5
La condición 2 da las siguientes ecuaciones
9a1 + 3b1 + c1 = 2.5
81a3 + 9b3 + c3 = 0.5
La condición 3 genera:
9a1 + b1 = 9a2 + b2
14a2 + b2 = 14a3 + b3
El sistema resultante es:

La solución es:
a1 = 0 b1 = –1 c1 = 5.5
a2 = 0.64 b2 = –6.67 c2 = 18.46
a3 = –1.6 b3 = –24.6 c3 = 91.3
f(5) = 0.64(5)2 – 6.67(5) +18.46 = 1.11
yi = ppval (pp, xi) - Evalúa polinomio a trozos pp en
los puntos xi. Si pp.d es un escalar mayor que 1, o un
arreglo, entonces el valor regresado yi será un arreglo
que es d1, d1, ..., dk, length (xi).

pp = spline (x, y) yi = spline (x, y, xi)


Regresa los interpolantes cúbicos de y en los puntos x.
Si se llama con dos argumentos, regresa los trozos
polinomicos pp que ueden ser evaluados con ppval.
Si se llama con tres parámetros, evalúa el los puntos xi.
Splines cúbicos
Aplicando las condiciones de continuidad del spline S y de las
derivadas primera S' y segunda S'', es posible encontrar la
expresión analítica del spline.

Donde hi = xi+1 – xi y z0, z1, … ,zn son incognitas.


Aplicando las condiciones de continuidad se llega a

La ecuación anterior, genera un sistema de n–1


ecuaciones lineales con n+1 incógnitas.
donde
Los valores del spline S se calculan eficientemente con

Donde
Los coeficientes de los polinomios se pueden calcular con:
c1 = yi – xi D
c2 = D – xi E
c3 = E – xi A
c4 = A
Para obtener: fi (x) = c1 + c2 x + c3 x2 + c4 x3
Donde
Guión en MatLab
%encuentra los trazadores cúbicos para un conjunto
de puntos x,y
% x - vector con los n valores de x
% y - vector con los n valores de y
% w - matriz de n-1 por 4 con los coeficientes de
los polinomios cúbicos
function w = spline3(x,y)
[dummy n] = size(x);
for i = 1:n-1
h(i) = x(i+1)-x(i);
b(i) = 6*(y(i+1)-y(i))/h(i);
end
u(2) = 2*(h(1)+h(2));
v(2) = b(2)-b(1);
for i = 3:n-1
u(i) = 2*(h(i)+h(i-1))-h(i-1)^2/u(i-1);
v(i) = b(i)-b(i-1)-h(i-1)*v(i-1)/u(i-1);
end
z(n) = 0;
for i = n-1:-1:2;
z(i) = (v(i)-h(i)*z(i+1))/u(i);
end
z(1) = 0;
for i = 1:n-1
A = (z(i+1)-z(i))/6/h(i);
B = z(i)/2;
C = -h(i)*z(i+1)/6-h(i)*z(i)/3+(y(i+1)-y(i))/h(i);
D = C-x(i)*B+A*x(i)^2;
E = B-2*x(i)*A;
w(i,4) = y(i)-x(i)*D;
w(i,3) = D-x(i)*E;
w(i,2) = E-x(i)*A;
w(i,1) = A;
end
end
Actividades para el hogar
Realizar las actividades en
cuaderno las que corresponde,
en hoja de calculo, en Scilab y
en calculadora, el ultimo caso.
Actividad I. 1 Actividad I. 2

Actividad I. 4
Actividad I. 3
Actividad I.5. Ejercicio a mano
de la interpolación de Newton
Actividad I.6 Interpolación lineal
de Newton en hoja de calculo
Actividad I.7 Interpolación polinomial de Newton
en Matlab: Tutorial paso a paso + código

Adaptar al código de Scilab del ejemplo en clases, apoyese con Chatgpt


Actividad I.8 Ejercicio a mano de la interpolación
de Lagrange
Actividad I.9 Interpolación de Lagrange en hoja de
cálculo
Actividad I.10 Interpolación de lagrange explicación
y programa MATLAB

Adaptar al código de Scilab del ejemplo en clases, apoyese con Chatgpt


Actividad I.11 Interpolación lineal simple con
Calculadora
Ejemplo en clase para Interpolación por Lagrange,
desarrollado en clases con asistencia de chatgpt
function resultado=interpolacionLagrange(x, y, valorInterpolar)
n = length(x);
resultado = 0;

for i = 1:n
termino = y(i);
Su punto de
for j = 1:n
if i ~= j
termino = termino .* (valorInterpolar - x(j)) / (x(i) - x(j));
inicio en Scilab,
end
end
para que
resultado = resultado + termino;
end
end modifiquen a
// Datos de entrada
valoresY = [1, 1.6, 1.7, 2.0];
valoresX = [0, 0.2, 0.3, 0.4];
gusto.
// Valor a interpolar
valorInterpolar = 0.1; Ver video de
// Calcula la interpolación de Lagrange
resultado = interpolacionLagrange(valoresX, valoresY, valorInterpolar);

// Gráfica del polinomio de Lagrange y el valor interpolado


clases
clf; // Limpia la figura actual

x_interp = linspace(min(valoresX), max(valoresX), 1000); // Puntos para la gráfica más suave


y_interp = interpolacionLagrange(valoresX, valoresY, x_interp);

plot(valoresX, valoresY, 'o', 'markerfacecolor', 'b', 'markeredgecolor', 'b'); // Puntos de datos


mtlb_hold on;
Agregar que
plot(x_interp, y_interp, 'r-', 'LineWidth', 2); // Polinomio de Lagrange
plot(valorInterpolar, resultado, 'go', 'markerfacecolor', 'g', 'markeredgecolor', 'g'); // Valor interpolado
mtlb_hold off;
muestre el
legend('Datos', 'Polinomio de Lagrange', 'Valor interpolado');
title('Interpolación de Lagrange');
xlabel('x');
polinomio de
ylabel('f(x)');

disp('El resultado de la interpolación de Lagrange en x = 0.1 es:');


disp(resultado);
Lagrange
Ejemplo en clase para Interpolación lineal de Newton,
desarrollado en clases con asistencia de chatgpt
function resultado=interpolacionNewton(x, y, valorInterpolar)
n = length(x);
F = zeros(n, n); // Matriz de diferencias divididas
F(:, 1) = 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

resultado = F(1, 1);

for j = 2:n
producto = 1;
for i = 1:j-1
Su punto de inicio
end
producto = producto .* (valorInterpolar - x(i)); // Corregir aquí

resultado = resultado + F(j, j) * producto';


en Scilab, para que
end
end

// Datos de entrada
modifiquen a
x = [1, 5, 20, 40];
y = [56.5, 113, 181, 214.5]; gusto.
// Valor a interpolar
valorInterpolar = 2;

// Calcula la interpolación de Newton


Ver video de clases
resultado = interpolacionNewton(x, y, valorInterpolar);

// Gráfica de la interpolación de Newton y el valor interpolado


clf; // Limpia la figura actual

x_interp = linspace(min(x), max(x), 1000); // Puntos para la gráfica más suave


y_interp = interpolacionNewton(x, y, x_interp);
Agregar que
plot(x, y, 'o', 'markerfacecolor', 'b', 'markeredgecolor', 'b'); // Puntos de datos
mtlb_hold on;
plot(x_interp, y_interp, 'r-', 'LineWidth', 2); // Interpolación de Newton
muestre el
plot(valorInterpolar, resultado, 'go', 'markerfacecolor', 'g', 'markeredgecolor', 'g'); // Valor interpolado
mtlb_hold off; expresión de
legend('Datos', 'Interpolación de Newton', 'Valor interpolado');
title('Interpolación de Newton');
xlabel('x');
ylabel('f(x)');
Newton
disp(['El resultado de la interpolación de Newton en x = ', string(valorInterpolar), ' es:']);
disp(resultado);
Lagrange
Explicación de Clases
Newton
Explicación de Clases

También podría gustarte