INTERPOLACIÓN NUMÉRICA.

El comando InterpolatingPolinomial.

Este comando permite obtener el polinomio de interpolación tomando como argumento una lista con las coordenadas (abscisas y ordenadas) de los puntos por los que tiene que pasar exactamente el polinomio de interpolación. El resultado que se obtiene es una función que se puede evaluar en cualquier punto y representar gráficamente. Tiene la forma correspondiente al polinomio de interpolación de Newton con diferencias divididas. La forma básica de este comando es la siguiente:
	InterpolatingPolynomial[datos, var].

Ejemplo:  Dada la siguiente tabla ,
({{"\!\(x\_i\)", 0, 1, 2, 3, 4}, {"\!\(f\_i\)", -5, 1, 9, 25, 55}})
Se pide: 
1º.- Obtener en primer lugar el polinomio de interpolación correspondiente, y representarlo junto con los datos.
2º.-  Obtener un valor aproximado de f(1.5) mediante un polinomio de interpolación de 2º grado.Representar este polinomio junto con los datos.
3º.- Idem. para obtener un valor aproximado de f(3.5) mediante un polinomio de interpolación de tercer grado .

datos={{0,-5},{1,1},{2,9},{3,25},{4,55}};TableForm[Transpose[datos],TableHeadings->{{"(Subscript[x, i])","(Subscript[f, i])"},None}]

datos={{0,-5},{1,1},{2,9},{3,25},{4,55}};

1º.-

p[x_]=InterpolatingPolynomial[datos,x]

puntos=ListPlot[datos,PlotStyle->PointSize[0.02]]

poli=Plot[p[x],{x,0,4},PlotStyle->RGBColor[1,0,0]]

Show[puntos,poli]

2º.-

datos2={{1,1},{2,9},{3,25}};p2[x_]=InterpolatingPolynomial[datos2,x];p2[1.5]

poli2=Plot[p2[x],{x,0,4},PlotStyle->RGBColor[1,0,0]]

Show[puntos,poli2]

3º.-

datos3={{1,1},{2,9},{3,25},{4,55}};p3[x_]=InterpolatingPolynomial[datos3,x];p3[3.5]

poli3=Plot[p3[x],{x,0,4},PlotStyle->RGBColor[1,0,0]]

Show[puntos,poli3]

Ejercicios

1º.- Dada la siguiente tabla de puntos ({{"\!\(x\_i\)", 0.3`, 0.37`, 0.41`, 0.52`}, {"\!\(f\_i\)", 0.97741`, 0.96557`, 0.95766`, 0.93157`}})
se pide:
a) Obtener el polinomio de interpolación correspondiente a dicho conjunto de datos.
b) Representar gráficamente dichos puntos y el polinomio de interpolación en un mismo gráfico.
c) Añadir a la tabla el dato : f(0.47) = 0.94423 , y calcular el polinomio de grado 4º correspondiente.

2º.- Calcular el polinomio de interpolación que interpola a f(x) = (1/(1+(x^2))) en los puntos (Subscript[x, 0])= -5, (Subscript[x, 1])= -4, ...(Subscript[x, 9])= 4 y (Subscript[x, 10])= 5. Representar este polinomio junto con la función en un mismo gráfico para comprobar el denominado "efecto Runge"

3º.- Encontrar un valor aproximado de y(23) usando los datos de la siguiente tabla:
({{10, 20, 30, 40, 50, 60}, {0.17365`, 0.34202`, 0.5`, 0.64279`, 0.76604`, 0.86603`}})
	a) A partir de un polinomio de primer grado.
	b) A partir de un polinomio de segundo grado.
	c) A partir de un polinomio de tercer grado.

4º.- Si se denota  por (Subscript[P, 2])[x] al polinomio que interpola a f(x) = (e^x) en los nodos  : -1, -0.75, -0.5, y por (Subscript[R, 2])(x) al error debido a la aproximación de y = (e^x) mediante el polinomio de interpolación, obtener una cota máxima del error cometido sabiendo que :
	(Subscript[R, n])(x) = (∏_(i=0)^n)(x-(Subscript[x, i]))(((f^(n+1)))(ξ))/((n+1)!))
Representar la función que da el error real en [-1,-0.5] y comprobar que su máximo valor en dicho intervalo es inferior a la cota máxima obtenida.
¿Qué error se comete al aproximar la función en x=-0.3 mediante (Subscript[P, 2])(x)?
Representar la función error y la cota máxima en el intervalo [-2,0].¿Qué se puede decir a la vista de la gráfica?

5º.- Se considera la función : f(x) = 3x(e^x)-2(e^x). Aproximar f(1.03) utilizando el polinomio de interpolación de grado ≤ 2, usando (Subscript[x, 0])=1, (Subscript[x, 1])=1.05 y (Subscript[x, 3])=1.07. Comparar el error cometido con el límite de error en la interpolación.

SPLINES

Ejemplo 1º
Interpolar f(x) = (x^4) mediante la spline cúbica S(x), correspondiente a la partición : (Subscript[x, 0]) = -1 , (Subscript[x, 1])=0, (Subscript[x, 2])= 1 , con las condiciones : S'(-1) = f'(-1) , y S'(1) = f'(1). Representar gráficamente S(x) junto con f(x). 
Repetir el ejercicio calculando esta vez la spline natural, Sn(x).
Finalmente obtener la gráfica de la spline natural utilizando el paquete <<Graphics`Spline`

La spline con condiciones de contorno

f[x_]=x^4;s1[x_]=a1+b1*(x+1)+c1*(x+1)^2+d1*(x+1)^3;s2[x_]=a2+b2*x+c2*x^2+d2*x^3;

sol=Solve[{s1[-1]==f[-1],s2[0]==f[0],s2[1]==f[1],s1[0]==s2[0],s1'[0]==s2'[0],s1''[0]==s2''[0],s1'[-1]==f'[-1],s2'[1]==f'[1]},{a1,b1,c1,d1,a2,b2,c2,d2}]

f1[x_]=s1[x]/.sol[[1]];f2[x_]=s2[x]/.sol[[1]];

S[x_]=Piecewise[{{f1[x],-1≤x≤0},{f2[x],0≤x≤1}}]

Plot[{x^4,S[x]},{x,-1,1},PlotStyle->{RGBColor[0,0,1],RGBColor[1,0,0]},PlotRange->All]

La spline natural:

sol1=Solve[{s1[-1]==f[-1],s2[0]==f[0],s2[1]==f[1],s1[0]==s2[0],s1'[0]==s2'[0],s1''[0]==s2''[0],s1''[-1]==0,s2''[1]==0},{a1,b1,c1,d1,a2,b2,c2,d2}]

f1[x_]=s1[x]/.sol1[[1]];f2[x_]=s2[x]/.sol1[[1]];

Sn[x_]=Piecewise[{{f1[x],-1≤x≤0},{f2[x],0≤x≤1}}]

gr1=Plot[{x^4,Sn[x]},{x,-1,1},PlotStyle->{RGBColor[0,0,1],RGBColor[1,0,0]},PlotRange->All]

Utilizando el paquete <<Graphics`Spline`:

<<"Splines`"

ptos={{-1,1},{0,0},{1,1}};

Show[Graphics[{Hue[0.05],Spline[ptos,Cubic]}],PlotRange->All,Axes->True]

Ejemplo 2º.
Sean los puntos:  f(0)=1, f(2) = 9, f(4) = 41 y f(6) = 41, 
a) Calcular la spline cúbica S(x) que verifique : S'(0) = 0 y S'(6) = -12 (spline con condiciones de contorno) y representarlar en negro, llamando al gráfico g1.
b) Representar la interpolación polinomial a trozos con polinomios de primer grado utilizando los comandos Show, Graphics y Line en azul, llamando al gráfico g2.
c) Calcular el polinomio de interpolación correspondiente y representarlo en verde, llamando al gráfico g3.
d) Representar gráficamente en rojo la spline natural utilizando el paquete <<Graphics`Spline`, llamando al gráfico g4.
e) Mostrar los 4 gráficos juntos de forma que se puedan comparar.
f) Mostrar los gráficos correspondientes a las dos splines conjuntamenete

s1[x_]=a1+b1*x+c1*x^2+d1*x^3;s2[x_]=a2+b2*(x-2)+c2*(x-2)^2+d2*(x-2)^3;
s3[x_]=a3+b3*(x-4)+c3*(x-4)^2+d3*(x-4)^3;

sol=Solve[{s1[0]==1,s2[2]==9,s3[4]==41,s3[6]==41,
s1[2]==s2[2],s2[4]==s3[4],
s1'[2]==s2'[2],s2'[4]==s3'[4],
s1''[2]==s2''[2],s2''[4]==s3''[4],s1'[0]==0,s3'[6]==-12},{a1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3}]

f1[x_]=s1[x]/.sol[[1]];
f2[x_]=s2[x]/.sol[[1]];
f3[x_]=s3[x]/.sol[[1]];
S[x_]=Piecewise[{{f1[x],0≤x≤2},{f2[x],2≤x≤4},{f3[x],4≤x≤6}}]

g1=Plot[S[x],{x,0,6}]

puntos={{0,1},{2,9},{4,41},{6,41}};

Representamos en primer lugar la interpolación lineal a trozos en color azul

g2=Show[ Graphics[{RGBColor[0,0,1],
    Line[puntos]}],
    PlotRange ->{{0,6},{0,50}},Axes->True]

A continuación se calcula el polinomio de interpolación y se representa en verde

p3[x_]=InterpolatingPolynomial[puntos,x];g3=Plot[p3[x],{x,0,6},PlotStyle->RGBColor[0,1,0]]

Finalmente representamos la spline natural en rojo

<<"Splines`"

g4=Show[ Graphics[{RGBColor[1,0,0],
    Spline[puntos,Cubic]}],
    PlotRange ->{{0,6},{0,50}},Axes->True]

Comparando los cuatro gráficos, se puede observar que el polinomio de interpolación (verde) es el que más oscila en los puntos próximos a los extremos. La spline natural (rojo) y la de cond. de contorno (negro) están muy próximas.

Show[g1,g2,g3,g4]

Representando las dos splines

Show[g1,g4]

Ejercicios

Ejercicio 1º
Una spline cúbica viene dada por:
s(x)=  {({{s0(x)=1+Bx+2(x^2)-2(x^3)                    0≤x≤1}, {s1(x)=1+b(x-1)-4(((x-1))^2)+7(((x-1))^3)      1≤x≤2}})  
Calcular B y b, y representar gráficamente la spline.
Hallar f'(0) y f'(2).
¿Se trata de una spline natural?

Ejercicio 2º.
Una spline cúbica se define:
    s(x) = {({{s0(x)=1+2x-(x^3)        0≤x≤1}, {s1(x)=a+b(x-1)+((c(x-1))^2)+((d(x-1))^3)       1≤x≤2}})
   ¿Se pueden determinar a,b,c y d de manera que se trate de una spline natural? Razonar la respuesta y en caso afirmativo calcular y representar la spline.

Como s0''(0) es nula, con las 3 ec. que se obtienen al imponer la continuidad de la spline, de su derivada primera y de su derivada segunda en x=1, más la ec. que se obtiene al igualar a cero la derivada segunda en x=2, se tienen 4 ec. con 4 incógnitas,a,b,c yd,  con lo que es posible determinar la spline natural