Interpolaci N en Matlab
Interpolaci N en Matlab
Interpolaci N en Matlab
UNIVERSIDAD DE OVIEDO
Tema Interpolación Lagrange, Newton y
Splines
DEPARTAMENTO DE MATEMÁTICAS
Práctica 3
⎛1 x0 x02 x0n ⎞ ⎛ a0 ⎞ ⎛ f ( x0 )⎞
⎜ ⎟ ⎜ ⎟ ⎜ ⎟
⎜1 x1 x2
1 x1n ⎟ ⎜ a1 ⎟ ⎜ f (x1 ) ⎟
⎜1 x2 x2
x2n ⎟⎟ ⋅ ⎜ a 2 ⎟ = ⎜ f ( x 2 )⎟
⎜ 2 ⎜ ⎟ ⎜ ⎟
⎜ ⎟ ⎜ ⎟ ⎜ ⎟
⎜ ⎟ ⎜ ⎟ ⎜
⎝1 xn xn2 xnn ⎠ ⎝ a n ⎠ ⎝ f (xn )⎟⎠
Pero este método da lugar a un sistema muy mal condicionado, con importantes errores
numéricos. Su implementación en MATLAB se realiza mediante la instrucción polyfit tomando
como grado del polinomio el número de datos menos uno.
p=polyfit(x,y,n) Obtiene el polinomio de grado n con ajuste mínimo cuadrático a los datos (x,y). Error si length(x) ≤n
[p,S,m]=polyfit(x,y,n) Realiza previamente un centrado y escalado de los datos x tomando respectivamente la media y la
x−x
varianza devueltos en m, esto es, x = . Esto mejora las propiedades numéricas del
sx
polinomio y del algoritmo de ajuste.
Utilizamos las instrucciones anteriores para interpolar el polinomio x4+2x-1 mediante 10 puntos
equiespaciados en el intervalo [-3,3], y posteriormente representar los puntos y el interpolante.
» f=inline(‘x.^4+2*x-1’);x=linspace(-3,3,10);y=f(x);
» p=polyfit(x,y,length(x)-1)
» X=linspace(-3,3);Y=f(X);P=polyval(p,X);
» plot(X,Y,X,P,x,y,'*');grid on;
» legend('funcion','Interpolante','datos')
» n=8;a=-pi;b=pi;
» x=linspace(a,b,n);y=f(x);
» p0=polyfit(x,y,n-1)
» [p1,s,m]=polyfit(x,y,n-1)
» X=linspace(a,b);Y=f(X);P0=polyval(p0,X);P1=polyval(p1,(X-m(1))/m(2));
» plot(X,Y,X,P0,X,P1,x,y,'*');grid on;
» legend('funcion','Interp','InterpN','datos')
Se pide:
interpolación.
Las siguientes instrucciones obtienen una matriz cuyas filas son los coeficientes de los
polinomios de interpolación de Lagrange a partir de un soporte de puntos X.
n=size(x);p=zeros(n);
for i=1:n
q=x;q(i)=[];q=poly(q);p(i,:)=q/polyval(q,x(i));
end
mediante
» P=y*p
Se pide:
2. Representar los polinomios de Lagrange cuando se toma como soporte el {0, 1}. Verificar que
la suma de ambos polinomios es una recta constante. ¿Cual es su valor?. Repetir lo anterior
pchip(x,y,xi) Lo mismo que interp1(x,y,xi,’pchip’). Permite spline natutral o sujeta (cuando y tiene dos
elementos más que x).
pchip(x,y) Devuelve en forma especial los resultados (coeficientes, soporte, etc.) del interpolante
Sin embargo, las funciones anteriores no nos dan los coeficientes del polinomio de interpolación
(salvo splines y pchip que lo da en una forma especial).
Utilizamos la interpolación segmentaria para interpolar la función f ( x ) = x sin ( x 2 )
» f=inline('x.*sin(x.^2)');
» n=8;a=-pi;b=pi;
» x=linspace(a,b,n);y=f(x);
» X=linspace(a,b);Y=f(X);
» P0=interp1(x,y,X,’linear’)
» P1=interp1(x,y,X,’spline’)
» plot(X,Y,X,P1,X,P2,x,y,'*');grid on;
» legend('funcion','lineal','spline','datos')
4. Verificar la oscilación de los polinomios de interpolación clásicos y compararla con las splines
1
usando la función de Runge f ( x ) = cuando se toman 5 puntos equiespaciados en el
1 + x2
intervalo [-5,5]. Representar la función frente a ambos interpolantes. Repetir tomando 9 y
17 puntos.
conv(v,w) Realiza el producto de los polinomios cuyos coeficientes son los elementos de los vectores v y w
[n,d,q]=residue(v,w) Cociente q y expansión del resto en fracciones simples, siendo n y d los respectivos numeradores y
denominadores.
[v,w]=residue(n,d,q) Realiza la operación inversa de la anterior, obteniendo el numerador y denominador a partir de la
expansión en fracciones simples.
poly2sym(v) Convierte el vector v en un polinomio cuyos coeficientes son las componentes del vector