Subido por Danny Mind Proyect

INTERPOLACION

Anuncio
INTERPOLACIÓN
8. POLINOMIO INTERPOLANTE DE NEWTON CON DIFERENCIAS DIVIDIDAS
Es una reformulación del polinomio de Newton que evita los cálculos de
diferencias divididas.
𝑛
𝑃(𝑥) = ∑ 𝐿𝑖 𝑓(𝑥𝑖) = 𝐿0 (𝑥)𝑓(𝑥0 ) + 𝐿1 (𝑥)𝑓(𝑥1 ) + 𝐿2 (𝑥)𝑓(𝑥2 ) + 𝐿3 (𝑥)𝑓(𝑥3 )
𝑖=0
𝑛
𝐿𝑖 (𝑥) = ∏
𝑝=0
𝑝<>𝑖
Error: 𝑅𝑛 =
𝐹𝑛+1 (𝛿)
∏(𝑥
(𝑛+1)!
𝑥 − 𝑥𝑝
𝑥𝑖 − 𝑥𝑝
− 𝑥𝑖)
9.1 SEUDOCÓDIGO POLINOMIO INTERPOLANTE DE LAGRANGE
𝐿𝑒𝑎 ⃗⃗⃗
𝑥𝑖 , ⃗⃗𝑦⃗𝑖 , 𝑥
𝑛 = 𝑇𝑎𝑚𝑎ñ𝑜 (𝑥𝑖 )
𝑃𝑎𝑟𝑎 𝑗 = 1 ℎ𝑎𝑠𝑡𝑎 𝑛
𝑃𝑟𝑜𝑑𝑢𝑐 = 1
𝑃𝑎𝑟𝑎 𝑖 = 1 ℎ𝑎𝑠𝑡𝑎 𝑗 − 1
𝑃𝑟𝑜𝑑𝑢𝑐 = 𝑃𝑟𝑜𝑑𝑢𝑐 × (𝑥 − 𝑥1𝑗 )
𝐹𝑖𝑛 𝑃𝑎𝑟𝑎
𝑃𝑟𝑜𝑑𝑢𝑐2 = 1
𝑃𝑎𝑟𝑎 𝑖 = 𝑗 + 1 ℎ𝑎𝑠𝑡𝑎 𝑛
𝑃𝑟𝑜𝑑𝑢𝑐2 = 𝑃𝑟𝑜𝑑𝑢𝑐2 × (𝑥 − 𝑥1𝑗 )
𝐹𝑖𝑛 𝑃𝑎𝑟𝑎
𝑃𝑟𝑜𝑑𝑢𝑐3 = 1
𝑃𝑎𝑟𝑎 𝑖 = 1 ℎ𝑎𝑠𝑡𝑎 𝑗 − 1
𝑃𝑟𝑜𝑑𝑢𝑐3 = 𝑃𝑟𝑜𝑑𝑢𝑐3 × (𝑥 − 𝑥1𝑗 )
𝐹𝑖𝑛 𝑃𝑎𝑟𝑎
𝑃𝑟𝑜𝑑𝑢𝑐4 = 1
𝑃𝑎𝑟𝑎 𝑖 = 𝑗 + 1 ℎ𝑎𝑠𝑡𝑎 𝑛
𝑃𝑟𝑜𝑑𝑢𝑐4 = 𝑃𝑟𝑜𝑑𝑢𝑐4 × (𝑥 − 𝑥1𝑗 )
𝐹𝑖𝑛 𝑃𝑎𝑟𝑎
𝐹𝑖𝑛 𝑃𝑎𝑟𝑎
𝑃𝑛 = 0
𝑃𝑎𝑟𝑎 𝑗 = 1 ℎ𝑎𝑠𝑡𝑎 𝑛
𝑃𝑛 = 𝑃𝑛 + (𝐿𝑗 − 𝑦𝑖𝑗 )
𝐹𝑖𝑛 𝑃𝑎𝑟𝑎
8.2 CÓDIGO POLINOMIO INTERPOLANTE DE LAGRANGE
%POLINOMIO INTERPOLANTE DE LAGRANGE
disp('POLINOMIO INTERPOLANTE DE LAGRANGE')
xi=input('Ingrese las x: ');
yi=input('Ingrese las y: ');
n=length(xi);
x=sym('x');
for j=1:n
pr1=1;
for i=1:j-1
pr1=pr1*(x-xi(i));
endfor
pr2=1;
for i=j+1:n
pr2=pr2*(x-xi(i));
endfor
pr3=1;
for i=1:j-1
pr3=pr3*(xi(j)-xi(i));
endfor
pr4=1;
for i=j+1:n
pr4=pr4*(xi(j)-xi(i));
endfor
L(j)=(pr1*pr2)/(pr3*pr4);
fprintf('\n L%d:\n',j-1)
disp(L(j))
endfor
Pn=0;
for j=1:n
Pn=Pn+L(j)*yi(j);
endfor
disp('Polinomio Interpolante:')
disp(Pn)
opc=input('Desea aproximar un valor (si/no): ','s');
if opc=='si'
x=input('Ingrese el punto a aproximar: ');
y=eval(Pn);
disp('La aproximacion a f(x) es:')
disp(y)
endif
Descargar