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