Interpolaciones 
y 
Aproximaciones
Un 
poco 
de 
historia… 
• Formalmente, 
las 
interpolaciones 
fueron 
propuestas 
por 
los 
astrónomos 
para 
“predecir” 
o 
ubicar 
los 
cuerpos 
celestes 
en 
el 
espacio.
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 
conQnua 
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
Valores 
de 
ex 
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 
x0 
x 
x1 
f(x) 
f(x1) 
f1(x) 
f(x0) 
UQlizando 
triángulos 
semejantes 
Reordenando
Ejemplo 
EsQmar 
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 
relaQvo 
porcentual 
= 
33.3% 
f(x) 
= 
ln 
x 
f1(x) 
EsQmaciones 
lineales 
Valor 
verdadero
Interpolación 
cuadráQca 
Polinomio 
cuadráQco 
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 
susQtuyendo 
x0, 
x1 
y 
x2 
en 
la 
ecuación 
(1), 
se 
obQene 
b0 
= 
f(x0) 
b1 = 
f x1 ( ) − f x0 ( ) 
x1 − x0 
b2 = 
f x2 ( ) − f x1 ( ) 
x2 − x1 
− 
f x1 ( ) − f x0 ( ) 
x1 − x0 
x2 − x0
ejemplo 
2 
Calculemos 
ln 
2 
con 
ln 
4 
y 
ln 
6, 
los 
punto 
que 
se 
conocen 
son: 
x0 
= 
1 
f(x0) 
= 
0 
x1 
= 
4 
f(x0) 
= 
1.386294 
x0 
= 
6 
f(x0) 
= 
1.791759 
Aplicando 
las 
ecs. 
anteriores 
b0 
= 
0 
b1 
= 
(1.386294 
– 
0)/(4 
– 
1) 
= 
0.4620981 
b2 
= 
((1.791759 
– 
1.386294) 
/(6 
– 
4) 
– 
0.4620981)/(6 
– 
1) 
= 
– 
0.0518731 
El 
polinomio 
es 
f2(x) 
= 
0.4620981(x 
– 
1) 
– 
0.0518731(x 
– 
1)(x 
– 
4) 
f2(2) 
= 
0.5658444 
f(x) 
= 
ln 
x 
EsQmación 
cuadráQca 
Valor 
verdadero 
EsQmación 
lineal 
Valor 
real 
ln 
2 
= 
0.6931472 
Error 
relaQvo 
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.) 
f(x) 
= 
ln 
x 
Valor 
verdadero 
EsQmación 
cúbica 
f3(x)
EsQmación 
del 
error 
Rn 
= 
f 
[,xn+1, 
xn, 
..., 
x1, 
x0](x 
– 
x0) 
(x 
– 
x1)... 
(x 
– 
xn) 
Para 
esQmar 
el 
error 
requerimos 
de 
un 
datos 
más 
(xn+1). 
La 
siguiente 
fórmula 
puede 
uQlizarse 
para 
esQmar 
el 
error.
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 
= 
xk.
N-­‐ésimo 
polinomio 
interpolante 
de 
Lagrange 
Teorema 
Si 
x0, 
x1, 
x2, 
... 
xn, 
son 
n+1 
números 
disQntos 
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 
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 
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:
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;
Comandos 
de 
Matlab 
poly(r) – toma un vector con las raíces de un polinomio y 
genera el polinomio 
poly([1 2 3]) = 1 -6 11 -6 
roots(1 -6 11 -6) = 3 2 1 
polifit(x,y,n) – genera un polinomio interpolante para los 
datos x, y de grado n, x y y deben tener n+1 datos 
polyfit([1.1 2.3 3.9 5.1],[3.887 4.276 4.651 2.117],3) = 
ans = 
-0.20145 1.43852 -2.74771 5.43700 
El polinomio es 
-0.20145x^3 + 1.43852x^2 -2.74771x + 5.43700
Interpolación 
Por 
Lagrange
Interpolación 
por 
Newton
Interpolación 
de 
Lagrange 
en 
C 
#include 
<iostream> 
#include 
<fstream> 
using 
namespace 
std; 
#include 
<iomanip> 
void 
monomio2(int 
n, 
double 
*x, 
double 
*D); 
int 
main 
() 
{ 
cout 
<< 
"Polinomio 
de 
interpolacion 
de 
Lagrangenn"; 
ifstream 
label1 
("datos//datos.in"); 
int 
n, 
i, 
j, 
k; 
label1 
>> 
n; 
double 
*x, 
*xp, 
*f, 
*L, 
*D, 
producto, 
sum, 
*P; 
x 
= 
new 
double 
[n], 
xp 
= 
new 
double 
[n], 
f 
= 
new 
double 
[n]; 
L 
= 
new 
double 
[n], 
D 
= 
new 
double 
[n], 
P 
= 
new 
double 
[n]; 
cout 
<< 
"Numero 
de 
pares 
ordenados 
= 
" 
<< 
n 
<< 
"nn"; 
cout 
<< 
"Valores 
de 
x 
y 
f(x)nx 
f(x)n"; 
for 
(i= 
0; 
i 
< 
n; 
i++){ 
label1 
>> 
x[i] 
>> 
f[i]; 
cout 
<< 
x[i] 
<< 
setw(5) 
<< 
seQosflags(ios::right) 
<< 
f[i] 
<< 
"n"; 
} 
cout 
<< 
endl; 
for 
(k 
= 
0; 
k 
< 
n; 
k++){ 
producto 
= 
1; 
for 
(i 
= 
0; 
i 
< 
n; 
i++){ 
if 
(i 
!= 
k) 
producto 
= 
producto 
* 
(x[k] 
-­‐ 
x[i]); 
} 
L[k] 
= 
f[k]/producto; 
} 
cout 
<< 
"Coeficientes 
de 
interpolacion 
de 
Lagrangenn"; 
cout.sex(ios::fixed); 
cout.precision(1); 
for 
(i= 
0; 
i 
< 
n; 
i++){ 
cout 
<< 
"L(" 
<< 
n-­‐i-­‐1 
<< 
") 
= 
" 
<< 
setw(4) 
<< 
seQosflags(ios::right) 
<< 
L[i] 
<< 
endl; 
}
Interpolación 
de 
Lagrange 
en 
C 
(ConQnuación) 
cout 
<< 
endl; 
for 
(k 
= 
0; 
k 
< 
n; 
k++){ 
j 
= 
0; 
for 
(i 
= 
0; 
i 
< 
n; 
i++){ 
if 
(i 
!= 
k) 
{xp[j] 
= 
x[i]; 
j 
+= 
1; 
} 
} 
monomio2 
(n-­‐1, 
xp, 
D); 
for 
(i= 
0; 
i 
< 
n; 
i++){ 
P[i] 
= 
P[i] 
+ 
L[k]*D[i]; 
} 
} 
cout 
<< 
"Polinomio 
de 
interpolacion 
de 
Lagrange 
(grado 
" 
<< 
n-­‐1 
<< 
")nn"; 
for 
(i= 
0; 
i 
< 
n; 
i++){ 
cout 
<< 
"P(" 
<< 
n-­‐i-­‐1 
<< 
") 
= 
" 
<< 
setw(4) 
<< 
seQosflags(ios::right) 
<< 
P[i] 
<< 
endl; 
} 
return 
0; 
} 
void 
monomio2(int 
n, 
double 
*x, 
double 
*D){ 
double 
*E; 
E 
= 
new 
double 
[n]; 
D[0] 
= 
1; 
D[1] 
= 
-­‐x[0]; 
for 
(int 
i 
= 
1; 
i 
< 
n; 
i++) 
{ 
for 
(int 
k 
=1; 
k 
< 
i+1; 
k++) 
{ 
E[k] 
= 
D[k] 
+ 
D[k-­‐1]*(-­‐x[i]); 
} 
D[i+1] 
= 
D[i]*(-­‐x[i]); 
for 
(int 
j 
= 
1; 
j 
< 
i+1; 
j++) 
{ 
D[j] 
= 
E[j]; 
} 
} 
delete 
E; 
}
Interpolación Polinómica 
Segmentaria
Interpolación Polinomica Segmentaria: 
Splines 
 Interpolación Segmentaria 
 Interpolación Segmentaria Lineal 
 Interpolación Segmentaria Cúbica 
 Condiciones Naturales 
 Condiciones sobre la derivada
Interpolación Segmentaria Lineal: 
Función de Runge 
0 
-1 0 1 
0.9 
0.8 
0.7 
0.6 
0.5 
0.4 
0.3 
0.2 
0.1 
1 
Spline lineal 
-1 0 1 
0.8 
0.6 
0.4 
-0.2 
-0.4 
0 
0.2 
1 
Polinomio grado 4
Interpolación Polinómica 
Segmentaria
Splines Lineales 
 Polinomio 
de 
Lagrange 
 Polinomio 
de 
Newton
Splines Cúbicos 
 Spline 
cúbico 
4n 
incógnitas 
 Condiciones 
de 
interpolación 
n+1 
ecuaciones 
 Condiciones 
de 
conexión 
3(n-­‐1) 
ecuaciones
h c h h c h c 
k - 
k - 
k - 
k k k k + 
2 ( ) = 
3 3 
( ) ( ) 
h 
a a 
h 
a a 
k 
k k 
k 
+ 
k k 
- 
- 
= 
1 - 
- 
- 
1 
1 
+ 
+ 
+ 
1 1 1 1 
n-­‐1 
ecuaciones 
y 
n+1 
incógnitas
Condiciones Naturales
Matriz del sistema
Términos independientes
Ejemplo de la temperatura 
Grados Spline cúbico 
5 10 15 20 
22 
20 
18 
16 
14 
12 
10 
8 
6 
Hora 
5 10 15 20 
22 
20 
18 
16 
14 
12 
10 
8 
6 
Hora 
Grados 
Polinomio interpolador
Condiciones sobre la derivada
Matriz del sistema
Términos independientes
Interpolación segmentaria con 
MATLAB
-­‐1 
0 
1 
1 
0.5 
1 
0.5 
0 
Spline 
Natural 
-­‐1 
0 
1 
-­‐1 
0 
1 
1 
0.5 
1 
0.5 
0 
Spline 
Derivada 
0 
Interpolación 
Lineal 
-­‐1 
0 
1 
0 
Spline 
de 
MATLAB
Aplicaciones 
 
Ingeniería 
y 
Diseño 
(CAD/CAM, 
CNC’s) 
 
Geología 
 
AeronáuQca 
y 
automoción 
 
Economía 
 
Procesamiento 
de 
señales 
e 
imágenes 
(Reconocimiento 
de 
patrones, 
recuperación 
de 
imágenes) 
 
RobóQca 
 
Medicina 
(Aparatos 
audiQvos, 
mapas 
cerebrales) 
 
Meteorología 
(Mapas 
climáQcos, 
detección 
de 
inundaciones,...) 
 Mundo Virtual Distribuido Multiusuario

Interpolaciones

  • 1.
  • 2.
    Un poco de historia… • Formalmente, las interpolaciones fueron propuestas por los astrónomos para “predecir” o ubicar los cuerpos celestes en el espacio.
  • 3.
    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 conQnua 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]
  • 4.
    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
  • 5.
    Valores de ex Valores de las aproximaciones de ex con polinomios de Taylor
  • 6.
  • 7.
    Interpolación polinomial de Newton Revisaremos solo algunos casos: lineal, de segundo grado y de tercer grado.
  • 8.
    Interpolación lineal x0 x x1 f(x) f(x1) f1(x) f(x0) UQlizando triángulos semejantes Reordenando
  • 9.
    Ejemplo EsQmar 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 relaQvo porcentual = 33.3% f(x) = ln x f1(x) EsQmaciones lineales Valor verdadero
  • 10.
    Interpolación cuadráQca Polinomio cuadráQco 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 susQtuyendo x0, x1 y x2 en la ecuación (1), se obQene b0 = f(x0) b1 = f x1 ( ) − f x0 ( ) x1 − x0 b2 = f x2 ( ) − f x1 ( ) x2 − x1 − f x1 ( ) − f x0 ( ) x1 − x0 x2 − x0
  • 11.
    ejemplo 2 Calculemos ln 2 con ln 4 y ln 6, los punto que se conocen son: x0 = 1 f(x0) = 0 x1 = 4 f(x0) = 1.386294 x0 = 6 f(x0) = 1.791759 Aplicando las ecs. anteriores b0 = 0 b1 = (1.386294 – 0)/(4 – 1) = 0.4620981 b2 = ((1.791759 – 1.386294) /(6 – 4) – 0.4620981)/(6 – 1) = – 0.0518731 El polinomio es f2(x) = 0.4620981(x – 1) – 0.0518731(x – 1)(x – 4) f2(2) = 0.5658444 f(x) = ln x EsQmación cuadráQca Valor verdadero EsQmación lineal Valor real ln 2 = 0.6931472 Error relaQvo porcentual = 18.4%
  • 12.
    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.
  • 13.
    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
  • 14.
    Ejemplo 3 (cont.) f(x) = ln x Valor verdadero EsQmación cúbica f3(x)
  • 15.
    EsQmación del error Rn = f [,xn+1, xn, ..., x1, x0](x – x0) (x – x1)... (x – xn) Para esQmar el error requerimos de un datos más (xn+1). La siguiente fórmula puede uQlizarse para esQmar el error.
  • 16.
    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 = xk.
  • 17.
    N-­‐ésimo polinomio interpolante de Lagrange Teorema Si x0, x1, x2, ... xn, son n+1 números disQntos 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
  • 18.
    Aproximación a 1/x con interpolantes de Lagrange 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 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:
  • 19.
    Aproximación a 1/x con interpolantes de Lagrange P(x) = (0.05x – 0.425)x + 1.15 f(3) = P(3) = 0.325
  • 20.
    El error en la interpolación de Lagrange El error en la interpolación de Lagrange puede calcularse con
  • 21.
    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
  • 22.
    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;
  • 23.
    Comandos de Matlab poly(r) – toma un vector con las raíces de un polinomio y genera el polinomio poly([1 2 3]) = 1 -6 11 -6 roots(1 -6 11 -6) = 3 2 1 polifit(x,y,n) – genera un polinomio interpolante para los datos x, y de grado n, x y y deben tener n+1 datos polyfit([1.1 2.3 3.9 5.1],[3.887 4.276 4.651 2.117],3) = ans = -0.20145 1.43852 -2.74771 5.43700 El polinomio es -0.20145x^3 + 1.43852x^2 -2.74771x + 5.43700
  • 24.
  • 25.
  • 26.
    Interpolación de Lagrange en C #include <iostream> #include <fstream> using namespace std; #include <iomanip> void monomio2(int n, double *x, double *D); int main () { cout << "Polinomio de interpolacion de Lagrangenn"; ifstream label1 ("datos//datos.in"); int n, i, j, k; label1 >> n; double *x, *xp, *f, *L, *D, producto, sum, *P; x = new double [n], xp = new double [n], f = new double [n]; L = new double [n], D = new double [n], P = new double [n]; cout << "Numero de pares ordenados = " << n << "nn"; cout << "Valores de x y f(x)nx f(x)n"; for (i= 0; i < n; i++){ label1 >> x[i] >> f[i]; cout << x[i] << setw(5) << seQosflags(ios::right) << f[i] << "n"; } cout << endl; for (k = 0; k < n; k++){ producto = 1; for (i = 0; i < n; i++){ if (i != k) producto = producto * (x[k] -­‐ x[i]); } L[k] = f[k]/producto; } cout << "Coeficientes de interpolacion de Lagrangenn"; cout.sex(ios::fixed); cout.precision(1); for (i= 0; i < n; i++){ cout << "L(" << n-­‐i-­‐1 << ") = " << setw(4) << seQosflags(ios::right) << L[i] << endl; }
  • 27.
    Interpolación de Lagrange en C (ConQnuación) cout << endl; for (k = 0; k < n; k++){ j = 0; for (i = 0; i < n; i++){ if (i != k) {xp[j] = x[i]; j += 1; } } monomio2 (n-­‐1, xp, D); for (i= 0; i < n; i++){ P[i] = P[i] + L[k]*D[i]; } } cout << "Polinomio de interpolacion de Lagrange (grado " << n-­‐1 << ")nn"; for (i= 0; i < n; i++){ cout << "P(" << n-­‐i-­‐1 << ") = " << setw(4) << seQosflags(ios::right) << P[i] << endl; } return 0; } void monomio2(int n, double *x, double *D){ double *E; E = new double [n]; D[0] = 1; D[1] = -­‐x[0]; for (int i = 1; i < n; i++) { for (int k =1; k < i+1; k++) { E[k] = D[k] + D[k-­‐1]*(-­‐x[i]); } D[i+1] = D[i]*(-­‐x[i]); for (int j = 1; j < i+1; j++) { D[j] = E[j]; } } delete E; }
  • 28.
  • 29.
    Interpolación Polinomica Segmentaria: Splines  Interpolación Segmentaria  Interpolación Segmentaria Lineal  Interpolación Segmentaria Cúbica  Condiciones Naturales  Condiciones sobre la derivada
  • 30.
    Interpolación Segmentaria Lineal: Función de Runge 0 -1 0 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 1 Spline lineal -1 0 1 0.8 0.6 0.4 -0.2 -0.4 0 0.2 1 Polinomio grado 4
  • 31.
  • 32.
    Splines Lineales Polinomio de Lagrange  Polinomio de Newton
  • 33.
    Splines Cúbicos Spline cúbico 4n incógnitas  Condiciones de interpolación n+1 ecuaciones  Condiciones de conexión 3(n-­‐1) ecuaciones
  • 34.
    h c hh c h c k - k - k - k k k k + 2 ( ) = 3 3 ( ) ( ) h a a h a a k k k k + k k - - = 1 - - - 1 1 + + + 1 1 1 1 n-­‐1 ecuaciones y n+1 incógnitas
  • 35.
  • 36.
  • 37.
  • 38.
    Ejemplo de latemperatura Grados Spline cúbico 5 10 15 20 22 20 18 16 14 12 10 8 6 Hora 5 10 15 20 22 20 18 16 14 12 10 8 6 Hora Grados Polinomio interpolador
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
    -­‐1 0 1 1 0.5 1 0.5 0 Spline Natural -­‐1 0 1 -­‐1 0 1 1 0.5 1 0.5 0 Spline Derivada 0 Interpolación Lineal -­‐1 0 1 0 Spline de MATLAB
  • 44.
    Aplicaciones  Ingeniería y Diseño (CAD/CAM, CNC’s)  Geología  AeronáuQca y automoción  Economía  Procesamiento de señales e imágenes (Reconocimiento de patrones, recuperación de imágenes)  RobóQca  Medicina (Aparatos audiQvos, mapas cerebrales)  Meteorología (Mapas climáQcos, detección de inundaciones,...)  Mundo Virtual Distribuido Multiusuario