Universidad Mayor de San Andrés Facultad de Ciencias Puras y Naturales Carrera de Informática INTERPOLACION DE SPLINES INTEGRANTES: OMAR E. ESTEBAN AVENDAÑO JHOEL D. TAPIA TIRINA INTERPOLACIÓN DE SPLINES Llamada interpolación segmentaria o interpolación por splines. La idea central es que en vez de usar un solo polinomio para interpolar los datos, podemos usar segmentos de polinomios y unirlos adecuadamente para formar nuestra interpolación. Una función spline está formada por varios polinomios, cada uno definido en un intervalo y que se unen entre si bajo ciertas condiciones de continuidad. Definición. (Splines de grado k) Dada nuestra tabla de datos donde x0<x1<….<xn , y dado k un número entero positivo, S(x) una función de interpolación spline de grado k, para la tabla de datos. Condiciones que debe cumplir la función: i) s( xi ) yi , para toda i 0,1,, n . ii) sx es un polinomio de grado k en cada subintervalo iii ) sx tiene derivada contínua hasta de orden k 1 en xi 1, xi . x0 , xn . FUNCIONES SPLINES CUBICAS Para este caso (k=3). Dados los n+1 datos: Una spline cúbica que interpola estos datos, es una función S(x) definida como sigue : s0 x si s x si s x 1 sn 1 x si x x0 , x1 x x1 , x2 x xn 1 , xn si x es un polinomio cúbico; si xi yi , para toda i 0,1,, n y tal que sx tiene primera y segunda derivadas continuas en x0 , xn . donde cada Ejemplo Interpolar los siguientes datos mediante una spline cúbica : Solución. Definimos un polinomio cúbico en cada uno de los intervalos que se forman: a x3 b x 2 c x d1 s x 1 3 1 2 1 a2 x b2 x c2 x d 2 si si x 2,3 x 3,5 A continuación, hacemos que se cumpla la condición de que la spline debe pasar por los puntos dados en la tabla. Así, tenemos que: s2 1 8a1 4b1 2c1 d1 1 s3 2 27a1 9b1 3c1 d1 2 s5 7 125a2 25b2 5c2 d2 7 Ahora calculamos la primera derivada de sx : 3a1 x 2 2b1 x c1 s x 2 3a 2 x 2b2 x c2 si si x 2,3 x 3,5 Al igual que en el caso de las splines cuadráticas, se presentan ecuaciones que pueden presentar discontinuidad en los cambios de intervalo; las posibles discontinuidades son los puntos donde se cambia de intervalo, en este caso x 3 . Para evitar esta discontinuidad, evaluamos dos polinomios e igualamos: 3a1 3 2b1 3 c1 3a2 3 2b2 3 c2 2 2 o lo que es lo mismo: 27a1 6b1 c1 27a2 6b2 c2 x 3 en los Análogamente procedemos con la segunda derivada : 6a x 2b1 s x 1 6a 2 x 2b2 si si x 2,3 x 3,5 Para lograr que s x sea continua : 6a1 3 2b1 6a2 3 2b2 18a1 2b1 18a2 2b2 En este punto contamos con 6 ecuaciones y 8 incognitas, por lo tanto tenemos 2 grados de libertad; en general, se agregan las siguientes 2 condiciones: s x0 0 s xn 0 De lo cual vamos a obtener: s2 0 6a1 2 2b1 0 12a1 2b1 0 s5 0 6a2 5 2b2 0 30a2 2b2 0 Con lo cual, hemos completado un juego de 8 ecuaciones vs. 8 incógnitas, el cual es el siguiente: 8a1 4b1 2c1 d1 1 27a1 9b1 3c1 d1 2 27a 2 9b2 3c 2 d 2 2 125a 2 25b2 5c 2 d 2 7 27a1 6b1 c1 27a 2 6b2 c 2 18a1 2b1 18a 2 2b2 12a1 2b1 0 30a 2 2b2 0 Cuya forma matricial es la siguiente : 8 27 0 0 27 18 12 0 4 2 1 0 0 9 3 1 0 0 0 0 0 27 9 0 0 0 125 25 6 1 0 27 6 2 0 0 18 2 2 0 0 0 0 0 0 0 30 2 0 a1 1 0 0 b1 2 3 1 c1 2 5 1 d1 7 1 0 a2 0 0 0 b2 0 0 0 c2 0 0 0 d 2 0 0 De donde obtenemos la siguiente solución: a1 b1 c1 d1 a2 b2 c2 d2 1.25 7.5 10.75 0.5 0.625 9.375 39.875 50.125 Sustituyendo estos valores en nuestra función inicial, vemos que la spline cúbica para la tabla de datos dada, queda definida como sigue: 1.25x3 7.5 x 2 10.75x 0.5 si s x 3 2 0.625x 9.375x 39.875x 50.125 si x 2,3 x 3,5 Mostramos la gráfica correspondiente a este ejemplo. Obsérvese la finura con la que se unen los polinomios cúbicos que conforman a la spline. Prácticamente ni se nota que se trata de dos polinomios diferentes!. Esto es debido a las condiciones que se impusieron sobre las derivadas de la función. Esta finura casi artística, es la que permite aplicar las splines cúbicas, para cuestiones como el diseño de letras por computadoras, o bien a problemas de aplicación donde la interpolación que se necesita es de un carácter bastante delicado, como podría tratarse de datos médicos sobre algún tipo de enfermedad. Codigo del Programa %Primero hay que introducir el vecto X e Y clear all X=[40 45 50 55 60 65 70]; Y=[390 340 290 250 210 180 160]; N=length(X)-1; H=diff(X); E=diff(Y)./H; diagsupinf=H(2:N-1); diagprinc=2*(H(1:N-1)+H(2:N)); U=6*diff(E); % restricciones del spline natural Minicial=0; Mfinal=0; % construccion de la matriz de los coeficientes para el calculo de los % momentos A=diag(diagprinc)+diag(diagsupinf,1)+diag(diagsupinf,-1); % construccion del vector independiente para el calculo de los momentos B=U'; B(1)=B(1)-H(1)*Minicial; B(N-1)=B(N-1)-H(N)*Mfinal; % resolvemos el sistema y hallamos los momentos M=A\B; % añadimos los dos momentos naturales extremos y lo escribimos como vector % fila M=[Minicial,M',Mfinal]; % calculo de los coeficientes del polinomio cubico i-esimo en potencias % de (x-x_i) for i=1:N S(i,1)=(M(i+1)-M(i))/(6*H(i)); S(i,2)=M(i)/2; S(i,3)=E(i)-H(i)*(M(i+1)+2*M(i))/6; S(i,4)=Y(i); end % creamos los polinomios para cada intervalo syms x for i=1:N s=0; for j=1:size(S,2) s=s+expand(S(i,j)*(x-X(j))^(4-j)); end Es(i,:)=s; end % Es(1)--->f1---> Intervalo X [40,45) % Es(2)--->f2---> Intervalo X [45,50) % Es(3)--->f3---> Intervalo X [50,55) % Es(4)--->f4---> Intervalo X [55,60) % Es(5)--->f5---> Intervalo X [60,65) % Es(6)--->f6---> Intervalo X [65,70) %dibujamos los polinomios figure(gcf) hold on c='rgbcmk'; for i=1:length(X)-1 F=vectorize(inline(Es(i))); plot(linspace(X(i),X(i+1)),F(linspace(X(i),X(i+1))),c(i),'linewidth',5) %fplot(F,[X(i) X(i+1)],'r',); end plot(X,Y,'linewidth',5,'color',rand(1,3)) axis([X(1) X(end) -200 500]) grid on hold off Corrida