Práctica 9

Técnicas básicas de interpolación polinómica

Interpolación polinómica de Lagrange.

Veremos inicialmente cómo emplear los recursos que proporciona Mathematica para resolver algunos problemas simples de interpolación polinómica

Interpolación lineal.

Los nodos de interpolación formarán la lista nodos y los valores interpolados la lista valores. En el caso general la lista de valores interpolados estará formada por valores arbitrarios,que pueden ser los que una función toma en los nodos de interpolación.La siguiente lista de órdenes produce la solución del problema considerado.

Con la primera restablecemos las variables que vamos a utilizar a lo largo de la sesión de trabajo con Mathematica.

Clear["Global`*"]

\(nodos = {\(-1\), 4}; valores = {1, \(-3\)}; 

    p[x_] := c0 + c1*\((x - nodos[\([1]\)])\)\)sol = 
      Solve[{p[nodos[[1]]] == valores[[1]], 
          p[nodos[[2]]] == valores[[2]]}, {c0, c1}]q1 = p[x] /. sol[[1]]

q1 // Expand

Si se quiere que los datos interpolados correspondan a los valores que una función toma en los nodos de interpolación podemos proceder de forma similar. Debemos especificar los nodos y la función. En lo que sigue la función va a ser la exponencial E^x. Para la interpolación lineal hemos elegido 0 y 1.  El procedimiento es el siguiente:

Clear[f, nodos1, valores1, p, x, sol, c0, c1, q1]f[x_] := E^x\(nodos1 = {0, 1}; 
valores1 = {f[nodos1[\([1]\)]], f[nodos1[\([2]\)]]}; 
    
p[x_] := c0 + c1*\((x - nodos1[\([1]\)])\)\)sol = 
      Solve[{p[nodos1[[1]]] == valores1[[1]], 
          p[nodos1[[2]]] == valores1[[2]]}, {c0, c1}]q1 = p[x] /. sol[[1]]

Plot[{f[x], 1 + (-1 + E) x}, {x, 0, 1}, 
      PlotStyle -> {RGBColor[1, 0, 0], RGBColor[0, 0, 1]}];

Interpolación cuadrática

La forma de abordar la interpolación polinómica cuadrática es análoga a la anterior. A fin de evitar la escritura reiterativa de las ecuaciones del sistema, lo definimos utilizando la orden Table.

Clear[nodos2, valores, p, x, c0, c1, c2, sol, q2]\(nodos2 = {0, 1/2, 1}; 
valores = Table[f[nodos2[\([i]\)]], {i, 3}]; 

    p[x_] := c0 + c1*\((x - nodos2[\([1]\)])\) + 
        c2*\((x - nodos2[\([1]\)])\)*\((x - nodos2[\([2]\)])\)\)\(sol = 
      Simplify[Solve[
          Table[p[nodos2[\([i]\)]] == valores[\([i]\)], {i, 3}], {c0, 
            c1, c2}]]; 
q2 = Simplify[p[x] /. sol[\([1]\)]]; 

    q2 = Collect[q2, x]\)

Clear[nodos2, valores, p, x, c0, c1, c2, sol, q2b]\(nodos2 = {0, 1/2, 1}; 
valores = Table[f[nodos2[\([i]\)]], {i, 3}]; 

    p[x_] := c0 + c1*x + c2*x^2\)\(sol = 
      Simplify[Solve[
          Table[p[nodos2[\([i]\)]] == valores[\([i]\)], {i, 3}], {c0, 
            c1, c2}]]; 
q2b = Simplify[p[x] /. sol[\([1]\)]]; 

    q2b = Collect[q2b, x]\)

q2 // Expand

q2b // Expand

Podemos aproximar los coeficientes de q2.

q2 = N[q2]

Interpolación polinómica de Hermite en dos puntos.

Las siguientes instrucciones tienen como finalidad hallar la expresión de un polinomio conocidos sus valores y los de su derivada en dos puntos distintos. En nuestro caso vuelven a ser los puntos 0 y 1 y la función exponencial.

Clear[nodos3, valores, p, x, sol, q3, c0, c1, c2, c3, sistema, sol, q3]
      \(nodos3 = {0, 1}; 

    valores = {f[nodos3[\([1]\)]], \(f'\)[nodos3[\([1]\)]], 
        f[nodos3[\([2]\)]], \(f'\)[nodos3[\([2]\)]]}; 

    p[x_] := c0 + c1*\((x - nodos3[\([1]\)])\) + 
        c2*\((x - nodos3[\([1]\)])\)^2 + 
        c3*\((x - nodos3[\([1]\)])\)^2*\((x - nodos3[\([2]\)])\); 

    sistema = {p[nodos3[\([1]\)]] == valores[\([1]\)], 
        \(p'\)[nodos3[\([1]\)]] == valores[\([2]\)], 
        p[nodos3[\([2]\)]] == valores[\([3]\)], 
        \(p'\)[nodos3[\([2]\)]] == valores[\([4]\)]}; 

    sol = Simplify[Solve[sistema, {c0, c1, c2, c3}]]; 

    q3 = p[x] /. sol[\([1]\)]; 
q3 = Collect[q3, x]\)

Interpolación polinómica de Taylor.

El caso "opuesto" a la interpolación de Lagrange,en el sentido de emplear muchos datos en un único punto en lugar de un dato único en varios puntos.de interpolación, es el correspondiente a la interpolación de Taylor. Dado un punto, a, y los valores que un polinomio y sus derivadas hasta un cierto orden,n,toman en ese punto a, el polinomio queda unívocamente determinado. Las siguientes instrucciones proporcionan el polinomio de interpolación de Taylor de orden 6 centrado en 1 para la función exponencial.

(∂_x) f[x]

(∂_(x, y))f[x, y]

Clear[n, a, valores, p, x]\(n = 6; 
a = 1; 

    valores = Table[D[f[x], {x, i}] /. x -> a, {i, 0, n}]\)p = Sum[valores[[i + 1]]*(x - a)^i/i!, {i, 0, n}]

valores // Length

Mathematica y la interpolación de Taylor

Mathematica proporciona un comando para hallar el desarrollo de Taylor del orden deseado de una función,  Series[funcion,{variable,origen,orden}]

Asimismo dispone de otro comando,Normal[],que suprime la parte correspondiente al resto quedando la parte polinómica,que es el polinomio de interpolación de Taylor.Por ejemplo,el polinomio de Taylor de orden 6 de la función E^x en 1 es

Series[f[x], {x, 1, 6}]

Series[f[x], {x, 1, 6}] // Normal

?Series

?Normal

Mathematica y la interpolación polinómica

Mathematica proporciona una herramienta específica para resolver cualquier problema de interpolación de Hermite uniforme sin tener que formar y resolver el sistema lineal oportuno. Este problema consiste en interpolar los valores que una función y sus derivadas sucesivas toman en un conjunto de nodos, pero considerándose
en cada nodo derivadas hasta el orden que se desee, independientemente pero con la condición de que en cada uno de ellos no se puede dejar de considerar ningún orden de derivación intermedio.Más concretamente, si {x1,x2,...,xn} son los nodos, en cada xi podemos considerar derivadas de órdenes 0,1,...,ni, donde ni es un número natural o cero tan sólo dependiente de xi. La interpolación de Lagrange, la de Hermite considerada y la de Taylor son casos particulares. La sintaxis de la orden es   
		InterpolatingPolynomial[datos, variable]
		
	Los datos pueden especificarse de dos formas:
1.-{f1,f2,...,fn} indica interpolación de los datos f1,f2,...,fn en los nodos 1,2,...,n, respectivamente.
2.-{{x1,f1},{x2,f2},...,{xn,fn}} indica interpolación de los datos f1,f2,...,fn en los nodos x1,x2,...,xn, respectivamente.
	Cada dato fi puede ser una lista que represente los valores de función
y de derivadas que se desea interpolar en el nodo xi.

?InterpolatingPolynomial

Un ejemplo aclarará la situación.Disponemos de los nodos {0,2,5}. De una función f se conoce que
f(0)=1,f'(0)=-1,f''(0)=3
f(2)=-3,f'(2)=0
f(3)=1

Su polinomio de interpolación (que debe ser de grado menor o igual que 5) es

p = 
      Expand[InterpolatingPolynomial[{{0, {1, -1, 3}}, {2, {-3, 0}}, {
              3, 1}}, x]]

Los diversos ejemplos vistos anteriormente se pueden resolver con este comando comno sigue:

p1 = Expand[InterpolatingPolynomial[{{0, f[0]}, {1, f[1]}}, x]]p2 = 
      Expand[InterpolatingPolynomial[{{0, f[0]}, {1/2, f[1/2]}, {1, f[1]}}, 
          x]]p3 = 
      Expand[InterpolatingPolynomial[{{0, {f[0], f'[0]}}, {
              1, {f[1], f'[1]}}}, x]]p4 = 
      Expand[InterpolatingPolynomial[{{a, 
              Table[D[f[x], {x, i}] /. x -> a, {i, 0, n}]}}, x]]

Ejercicios

1.- Calcule el polinomio de primer grado que en x=10 vale 13 y en x=15 toma el valor 12.

2.- Calcule el polinomio de segundo grado que en x=10 vale 13,en x=15 vale 12 y en 14 vale 17. Dibuje la recta del ejercicio 1 y la parábola de éste en un mismo gráfico.

3.- Calcule el polinomio de tercer grado que vale 13 en x=10,en x=15 vale 12 y es tal que su derivada en x=10 vale 5 y en x=15 toma el valor-7. Dibuje, juntas y con diferente color,las tres curvas obtenidas en estos tres primeros ejercicios.

4.- Calcule el polinomio de Taylor de grado menor o igual que 7 de la función seno en cero usando Series e InterpolatingPolynomial.

5.- Obtenga el polinomio de Taylor de grado menor o igual que 10, en con origen en cero, para las siguientes funciones: Cos[x], 1/(x^2+1), x^5, x^11

6.- Repita los ejercicios 3 y 5 usando la orden InterpolatingPolynomial.