Práctica 1: Polinomios en MATLAB. Interpolación de Lagrange I.



En MATLAB un polinomio se representa mediante un vector fila que contiene los coeficientes de las potencias en orden decreciente: empezando por el coeficiente principal y terminando por el término independiente.

Por ejemplo, el polinomio p(x)=3x2-2x-1 se representa con
        p = [3  -2  -1];
MATLAB contempla las siguientes operaciones básicas con polinomios:
Cálculo de las raíces a partir de la lista coeficientes, por medio del comando roots( ), por ejemplo
        r=roots(p)
nos devuelve
        r =    1.0000
              -0.3333
El resultado es un vector columna de ceros.
Cálculo de los coeficientes a partir del vector columna de ceros, por medio del comando poly( ), por ejemplo
        poly(r)
nos devuelve
        ans =    1.0000   -0.6667   -0.3333
Observe que el polinomio devuelto siempre es mónico.
Multiplicación de dos polinomios dados por la lista de sus coeficientes, por medio del comando conv( , ). Por ejemplo, para comprobar que (x-5) (x+1)=x2-4x-5 basta ejecutar
        conv([1  -5], [1  1])
obteniendo
        ans =    1    -4    -5
La división se realiza por medio del comando deconv( , ): si p(x)=s(x) q(x) + r(x), se puede usar el formato
        [s, r] = deconv(p, q])
Evaluación de un polinomio dado por la lista de sus coeficientes p en un valor x, por medio del comando polyval(p, x). Por ejemplo, para comprobar que p(1)0= basta realizar
        polyval(p, 1)
obteniendo
        ans =    0
polyval( ) realiza la evaluación siguiendo el algoritmo de Horner o de multiplicación anidada.

Si x es un vector o una matriz, MATLAB devuelve la matriz con el polinomio evaluado en cada elemento.
Recordemos que dados unos nodos de interpolación x=[x0, x1, ..., xn], los polinomios básicos de Lagrange se definen por la fórmula
li(t)=
(t-x0)... (t-xi-1)(t-xi+1)... (t-xn)
(xi-x0)...(xi-xi-1)(xi-xi+1)... (xi-xn)
 ,    i=0, 1, ..., n .
Entonces el polinomio pn de menor grado que interpola la nube de puntos (x0, f0), ..., (xn,fn) está dado por
pn(t)=f0 l0(t) + ... + fn ln(t) .

Problema 1   Vamos a construir los polinomios básicos de Lagrange para los nodos x=[ -3, -1, 1], usando los comandos vistos hasta ahora. Un procedimiento, aunque poco eficiente, podría ser:
  1. construir el polinomio nodal (el polinomio mónico que se anula en todos los nodos de interpolación) por medio de la función poly;
  2. para cada uno de los nodos eliminar el factor que contiene ese nodo, dividiendo con deconv el polinomio nodal entre el factor lineal que se anula en dicho nodo;
  3. normalizar cada polinomio, dividiéndolo entre su valor en el nodo omitido; utilizar polyval.
Dibuje las gráficas de cada uno de los polinomios obtenidos en el intervalo [-4, 2] y compruebe visualmente que en efecto los polinomios obtenidos satisfacen la propiedad li(xj)=dij. Para ello tabule los valores de cada polinomio en 200 puntos equiespaciados del intervalo, creados con

        linspace(-4, 2, 200);
Problema 2   Usando los resultados del problema anterior construya el polinomio de menor grado que interpole la función f(t)=exp (t) en los nodos -3, -1, 1. Dibuje su gráfica junto con la de la función f en el intervalo [-4,2] y compruebe visualmente que el polinomio obtenido interpola a f en los nodos indicados.

Para diferenciar las dos curvas puede después de
plot usar el comando

        legend('Funcion', 'Polinomio');
Problema 3  [Opcional]   Escribir una función lagrange con el formato

        function [c]=lagrange(x, f)
que dados los nodos (vector x) y los valores correspondientes de ordenada (vector f) devuelva los coeficientes del polinomio interpolador de Lagrange.

This document was translated from LATEX by HEVEA.
Profesor: Andrei Martínez Finkelshtein