Una aplicación de interpolación por medio de funciones spline Marta C. Vidal1,2, Adriana B. Verdiell 2,3 (1) Facultad de Ingeniería, Universidad Tecnológica Nacional Regional Bahía Blanca. (2) Departamento de Matemática, Universidad Nacional del Sur.
[email protected] (3) Facultad de Ingeniería, Universidad Nacional de La Pampa.
[email protected]
RESUMEN: La enseñanza de la Matemática en las carreras de Ingeniería es un desafío desafío para los docentes puesto que el avance tecnológico y el manejo manejo que tienen los alumnos de procesadores procesadores compromete a los docentes a utilizarlos como medios didácticos. En asignaturas como Métodos Numéricos es esencial la incorporación de una herramienta computacional adecuada que permita comprender, visualizar y aplicar las técnicas desarrolladas por el docente. De esta manera el estudiante se convierte en un individuo activo y crítico, capaz de aplicar la teoría aprendida y estudiar aplicaciones más avanzadas de la matemática en Ingeniería. En este trabajo se describe una aplicación de interpolación por medio de funciones splines cúbicas utilizando MATLAB, propuesta a alumnos de Métodos Numéricos de carreras de Ingeniería de Universidades Nacionales con con el objetivo de visualizar, comparar, discutir los resultados obtenidos obtenidos y presentar alternativas de resolución que no resultan evidentes en un primer momento. PALABRAS CLAVES: Aproximación de datos, Interpolación, Spline cúbica.
1
INTRODUCCIÓN
Uno de los objetivos de la educación universitaria es sin duda preparar a los estudiantes de hoy para un mundo velozmente cambiante e interdependiente, enseñándoles a reflexionar a partir de conocimientos y capacitarlos para su su aplicación de manera flexible y responsable. Esto implica no sólo aportarles conocimientos teóricos sino también manejo manejo de los medios disponibles disponibles para su aplicación. Una visión crítica permitirá escoger entre múltiples posibilidades comparando costos y beneficios teniendo en cuenta que difícilmente haya una única opción como herramienta para resolver un problema. Con esta finalidad hemos incluído en nuestros cursos de Análisis Numérico, la resolución de un problema como requisito para cursar la materia. La resolución del mismo debe ser presentada en un informe escrito y defendida en forma oral. En la sección 2 de esta contribución describimos uno de los problemas propuestos una de nuestras cátedras y las herramientas teóricas que disponen los alumnos, en la sección 4 mencionamos los
resultados y para una adecuada exposición detallamos en las secciones siguientes.
2 EL PROBLEMA Los alumnos divididos en grupos de no más de tres personas deben dibujar el contorno de la mano de uno de sus sus integrantes usando las herramientas interpolación que ofrece MATLAB. A continuación se describen brevemente las interpolaciones más habituales intentadas por los alumnos y que son estudiadas estudiadas en detalle en los cursos de Análisis Numérico. 2.1 Interpolación polinomial Dados n puntos ( x1 , y1 ) , ( x 2 , y 2 ) ,...., ( x n , y n ) existe un único polinomio de grado menor o igual que n-1 que los interpola. La forma más compacta de representarlo es la llamada forma de Lagrange:
( x − x j ) y k . ∑ ∏ ( ) − x x k j k =1 j ≠ k n
P( x ) =
n
La forma más habitual de escribir un polinomio, es como suma de monomios, es decir, P( x ) = c1 x n −1 + c 2 x n − 2 + ......... + c 0 y las condiciones de interpolación puede representarse matricialmente por el sistema lineal n −1
n −2
⎡ x1 x1 ⎢ n −1 2 x 2n − ⎢ x 2 ⎢. . . ⎢ . ⎢ . ⎢ x n −1 x n −2 n ⎣ n
....
x1
....
x 2
1 1
....
.
.
....
.
.
....
x n
1
⎤ ⎡ c1 ⎤ ⎡ y1 ⎤ ⎥ ⎢c ⎥ ⎢ y ⎥ ⎥ ⎢ 2⎥ ⎢ 2⎥ ⎥⎢ . ⎥=⎢ . ⎥ ⎥⎢ . ⎥ ⎢ . ⎥ ⎥⎢ . ⎥ ⎢ . ⎥ ⎥⎢ ⎥ ⎢ ⎥ ⎦ ⎢⎣c n ⎥⎦ ⎢⎣ y n ⎥⎦
En forma compacta, j Vc = y V ij = x i i , j = 1...n . con V ∈ R
n× x
es la matriz de Van der Monde. Esta matriz puede ser creada fácilmente con MATLAB con la sentencia
f ( x ) − Pn ( x ) =
( x − x 0 )( x − x1 ) ....( x − x n ) n +1 f ( c x ) (n + 1)!
para x ∈ [a , b] y c x una incógnita entre los valores máximos y mínimos del conjunto
{ x 0 , x1 ,...., x n , x}. Esta fórmula pone de manifiesto que el error depende en gran medida del comportamiento del factor ( x ) = ( x − x 0 )( x − x1 )...( x − x n ) cuyos valores varían notablemente en el intervalo [ x 0 , x n ]. , como puede comprobarse en la Figura 1, en el caso en que xi = i + 1 , i = 0 ,..5 10
5
0
-5
>> V=vander(x) siendo x = [ x1 , x 2 ,.., x n ]' . Si se define y = [ y1 , y 2 ,.., y n ]' , la solución del sistema está dada por c=V\y . Desde el punto de vista numérico este método no es recomendable debido al mal condicionamiento de la matriz V. Como ejemplo es suficiente recordar que el número de condición de la matriz de Van de Monde generada a partir del los primeros 6 números naturales es 7.3120e+005. Otra sentencia de MATLAB que implementan algoritmos de interpolación es: >> V=interp( x,y,u) donde ( x,y) es el vector de puntos a interpolar y u el vector de puntos donde el polinomio interpolador debe ser calculado. Las desventajas de estas técnicas son básicamente dos: 1. el alto costo computacional cuando el número de puntos a interpolar es grande. 2. la excesiva variación del polinomio interpolante principalmente en los extremos del intervalo que contiene los valores de las abcisas. En efecto puede probarse que el error en la interpolación de una función f ( x ) con n + 1 derivadas continuas en [a,b] en n+1 puntos por un polinomio x 0 < x1 < x 2 < ... < x n Pn ( x ) de grado a lo sumo n puede estimarse de acuerdo a la siguiente fórmula:
-10
-15
-20 1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
Figura 1. y = ( x) Al considerar la función ( x ) como parte del error, se pone de manifiesto que es menor para valores de x cercanos al punto medio del intervalo y crece notablemente en los extremos. Cabe señalar que al interpolar una función, aún cuando se aumenten los nodos, nada asegura que disminuya el error. 1 Por ejemplo para f ( x) = en el intervalo 1 + x 2 [−5 ,5] , si se define h = 10 y los nodos n
x j = −5 + jh
para j=0,1…n , puede probarse que las interpolaciones por polinomios Pn ( x ), n ≥ 2, no convegen a f ( x ) para h → 0. En la figura 2 se muestra los gráficos de la función y el polinomio de grado 6
5
2 4
1.5 3
P 10(x)
1
2
1
0.5
y=1/(x 2+1)
0
0 -1 0
-0.5 -5
-4
-3
-2
-1
0
1
Figura 2. Aproximación de f ( x ) =
2
3
1 a + x
2
4
5
por P6 ( x )
Para motivar la definición y el uso de funciones spline comenzamos con el problema de interpolar los datos que se muestran en la siguiente tabla: x y
1 0.5
0 2.5
2 0.5
2.5 1.5
3 1.5
3.5 4 1.125 0
El método de interpolación más simple es conectar los nodos por segmentos de recta l ( x ) puede apreciarse en la Figura 3.
0.5
1
1.5
2
2.5
3
3.5
4
Figura 4. y=P6( x) interpolación polinomial Si se interpola por una sucesión de polinomios de segundo grado que denotamos q ( x ) puede verse en la Figura 5 que el gráfico es más suave que el de l ( x ) y más parecido al de P6 ( x ) , sin embargo persisten problemas n los puntos de abscisa 2 y 3 ya que q' ( x ) es discontinua en dichos puntos. Por lo tanto el objetivo es encontrar una función interpolante suave, que no varíe demasiado entre los nodos cuando se la compara con l ( x ) . De todos modos, para muchas aplicaciones q ( x ) puede ser satisfactoria, por ejemplo, para integración numérica de datos.
2.5 2.5
2
2
1.5
1.5
1
1 0.5
0.5 0
0
0
0.5
1
1.5
2
2.5
3
3.5
4
-0.5 0
Figura 3. y=l( x) interpolación lineal a trozos Si bien los datos son exactamente representados, en general se desea tener al menos una curva ‘suave’. Como los datos son siete, se puede intentar en una interpolación por P6 ( x ), polinomio de grado 6. En este caso la Figura 4 muestra la curva obtenida; se diferencia de la anterior fundamentalmente en los valores obtenidos en el intervalo [0 ,1] .
0.5
1
1.5
2
2.5
3
3.5
4
Figura 5. y=q( x): Interpolación cuadrática a trozos Con el objetivo de evitar los problemas mencionados es usual proponer una interpolación con funciones spline, cuyas características detallamos a continuación. 2.2 Interpolación por medio de funciones spline La idea fundamental detrás de este tipo de interpolación está basada en la herramienta usada para dibujar curvas suaves que unen ciertos datos.
Esta herramienta consiste en pesos que se adjuntan a una superficie plana en los puntos que deben ser unidos; se pasa una banda flexible por cada uno de los pesos y así queda definida una curva suave que los une. El principio matemático de la función spline es similar, en este caso los puntos a unir son los datos y los pesos son los coeficientes de los polinomios interpolantes.
y i = d i
(6)
Como la curva debe se continua, se impone s i ( xi ) = si −1 ( x i ) De (2) resulta y s i ( x i ) = d i (8)
(7)
3 2 si −1( xi ) = ai −1( xi − xi −1 ) + bi −1( xi − xi −1 ) + ci −1( xi − xi −1 ) + d i −1
por lo tanto, d i = ai −1( xi − xi −1 )3 + bi −1( xi − xi −1 )2 + ci −1( xi − xi −1 ) + d i −1
Vamos a definir interpolación por una spline cúbica, es decir , la función interpolante es un polinomio cúbico a trozos.
para i = 1 ,2 ,L , n − 1 . Tomando h = xi − x i −1 en (8) resulta
2.2.1 Spline cúbica
para i = 1 ,2 ,L , n − 1 . La condición de suavidad impone que s i′ ( x ) = ci y teniendo en cuenta la expresión para s i′−1 ( x i ) , resulta: c i = 3a i −1 h 2 + 2bi −1 h + c i −1 (11) para i=2,3,…,n-1. De (4) resulta s i′′( x i ) = 2bi (12) para i=2,…,n-2. Finalmente, la condición de continuidad de s i′′ y la ecuación anterior conducen vía unas simples cuentas a la condición: 2bi +1 = 6ai h + 2bi . ( 13) Las ecuaciones precedentes puede re-escribirse definiendo M i = s'i' ( xi ) y expresándolas en términos de M i e y i . Esto provoca la determinación de los coeficientes a i , bi , ci y d i en una forma sencilla:
Sean ( x1 , y1 ) ....( x n , y n ) n puntos del plano. Sea k ≥ 0 un número entero, una función spline de grado k con nodos x1 , x 2 ,.., x n es una función S que verifica : •
S ( x i ) = y i .
•
en cada subintervalo [ x i −1 , xi ) es un polinomio de grado ≤ k .
•
S tiene sus (k -1) primeras derivadas continuas.
En el caso de k =3 se la llama spline cúbica. Por lo tanto, es una función que S( x) que verifica: ⎧ s1 ( x) si x1 ≤ x < x2 ⎪ S ( x ) = ⎨ s 2 ( x) si x 2 ≤ x < x3 ⎪s ( x) si x ≤ x < x n −1 n ⎩ n−1
con
si
(1)
de (12) resulta bi =
polinomio de tercer grado definido por 3
2
si ( x) = ai ( x − xi ) + bi ( x − xi ) + ci ( x − xi ) + d i
para i = 1 ,2 ,L , n − 1 . (2) Las primeras y segundas derivadas juegan un rol fundamental :
s i′′( x) = 6ai ( x − xi ) + 2bi
Matemáticamente las condiciones que debe satisfacer la función S( x) se traducen en las siguientes ecuaciones: S ( x i ) = y i Usando (2) y como xi ∈ [ xi , xi + 1 ] y S ( xi ) = si ( xi ) resulta y i = s i ( x i ) por lo tanto,
(3) (4)
(5)
Mi
2
,
(10)
(14)
por (6), (15) d i = yi ´. Procediendo de forma similar se puede verificar que ai = ci =
Para i = 1 ,2 ,L , n − 1 es si′ ( x) = 3ai ( x − xi ) 2 + 2bi ( x − xi ) + ci
d i = ai −1h 3 + bi −1h 2 + ci − 1h + d i −1
(9)
M i +1 − M i
(16)
6h yi +1 − yi h
M i +1 + 2 M i
−(
6
)h
(17)
(14)-(17) definen ecuaciones que pueden representarse matricialmente como
⎡1 4 1 0 ⎢0 1 4 1 ⎢ ⎢0 0 1 4 ⎢ ⎢M M M M ⎢0 0 0 0 ⎢ ⎢0 0 0 0 ⎢0 0 0 0 ⎣
L
0 0 0 0⎤ 0 0 0 0⎥⎥ 0 0 0 0⎥
N
M
L L
M
M
⎥
M⎥
4 1 0 0⎥ ⎥ 1 4 1 0⎥ 0 0 0 1⎥⎦
L L L
⎡ M 1 ⎤ ⎢ M ⎥ ⎡ y1 − 2 y2 + y3 ⎤ ⎢ 2 ⎥ ⎢ y − 2 y + y ⎥ ⎢ M 3 ⎥ 2 3 4 ⎢ ⎥ ⎢ ⎥ ⎢ y3 − 2 y4 + y5 ⎥ ⎢ M 4 ⎥ ⎥ ⎢ ⎥= 6 ⎢ M ⎥ ⎢ ⎥ h2 ⎢ ⎢ yn − 4 − 2 yn − 3 + yn − 2 ⎥ ⎢ M n −3 ⎥ ⎢ ⎥ ⎢ M ⎥ ⎢ yn − 3 − 2 yn − 2 + yn −1 ⎥ ⎢ n −2 ⎥ ⎢ y − 2 y + y ⎥ ⎢ M n −1 ⎥ n −1 n ⎦ ⎣ n−2 ⎢ ⎥ ⎣ M n ⎦
Este es un sistema indeterminado de n-2 filas y n columnas, por lo tanto se deben agregar dos condiciones más si se quiere determinar una única spline.
Esto lleva a definir distintas clases de funciones spline dependiendo de las condiciones requeridas. La más popular es la spline natural y corresponde a imponer la condición M 1 = M n = 0 que implica que la función interpoladora se extiende en forma lineal fuera del intervalo en consideración. En ese caso, pueden eliminarse la última fila y columna de la matriz anterior y se obtiene el sistema de orden n-2 ⎡4 ⎢1 ⎢ ⎢0 ⎢ ⎢M ⎢0 ⎢ ⎢0 ⎢0 ⎣
⎤ ⎡ y1 − 2 y2 + y3 ⎤ ⎥ ⎢ y − 2 y + y ⎥ 2 3 4 ⎥ ⎢ ⎥ ⎥ ⎢ y3 − 2 y4 + y5 ⎥ ⎢ ⎥ 6 ⎢ ⎥ M ⎢ M ⎥= 2 ⎢ ⎥ ⎢ M n − 3 ⎥ h ⎢ yn − 4 − 2 y n − 3 + yn − 2 ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ M n − 2 ⎥ ⎢ yn − 3 − 2 yn − 2 + yn −1 ⎥ ⎢ M ⎥ ⎢ y ⎥ ⎣ n −1 ⎦ ⎣ n − 2 − 2 yn −1 + y n ⎦
1 0 4 1 1 4
K K
0 0 0⎤ ⎡ M 2 0 0 0⎥⎥ ⎢⎢ M 3 0 0 0⎥ ⎢ M 4
M
M
O
M
0 0 0 0 0 0
K
...
M
⎥
M⎥
4 1 0⎥ ⎥ 1 4 1⎥ 0 1 4⎥⎦
K K
La spline cúbica natural S que interpola a una función f dos veces continuamente derivable en un intervalo [a , b] , con nodos en dicho intervalo, verifica b
b
a
a
2 ∫ [S' ' ( x )] dx ≤ ∫ f ' ' ( x )dx
Entre otro tipo de funciones spline, podemos mencionar a la parabólica la cual queda definida cuando se impone la siguiente restricción en los extremos: M 1 = M 2 M n −1 = M n
Como resultado de esta condición la curva es parabólica en los puntos extremos. Este tipo de aproximación resulta muy útil cuando se interpolan datos periódicos o exponenciales. La ecuación matricial en este caso es: ⎡5 ⎢1 ⎢ ⎢0 ⎢ ⎢M ⎢0 ⎢ ⎢0 ⎢0 ⎣
⎤ ⎡ y1 − 2 y2 + y3 ⎤ ⎥ ⎥ ⎢ y − 2 y + y 2 3 4 ⎥ ⎢ ⎥ ⎥ ⎢ y3 − 2 y4 + y5 ⎥ ⎢ ⎥ 6 ⎢ ⎥ M ⎢ M ⎥= 2 ⎢ ⎥ ⎢ M n − 3 ⎥ h ⎢ yn − 4 − 2 yn − 3 + yn − 2 ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ M n − 2 ⎥ ⎢ yn −3 − 2 y n − 2 + yn −1 ⎥ ⎢ M ⎥ ⎢ y ⎥ ⎣ n −1 ⎦ ⎣ n − 2 − 2 yn −1 + yn ⎦
1 0 4 1 1 4
K K
0 0 0⎤ ⎡ M 2 0 0 0⎥⎥ ⎢⎢ M 3 0 0 0⎥ ⎢ M 4
M
M
O
M
0 0 0 0 0 0
K
...
K K
M
⎥
M⎥
4 1 0⎥ ⎥ 1 4 1⎥ 0 1 5⎥⎦
Como puede verse, tanto para determinar una spline natural como para una parabólica, los sistemas lineales resultantes tienen una estructura tridiagonal que debe explotarse en el momento de su resolución. Otro tipo de condiciones pueden consultarse en la bibliografía que se adjunta.
3
RESOLUCIÓN DEL PROBLEMA
En esta sección describiremos los pasos seguidos por los alumnos para resolver el problema propuesto. En primer lugar debían recolectar los datos: les sugerimos no menos de 40 puntos del contorno de la mano. Para ello procedieron de alguna de estas maneras: • Dibujaron el contorno de la mano en un papel, lo recortaron y lo apoyaron en la pantalla. Con el uso de la sentencia ‘ginput ’ de MATLAB eligieron puntos representativos. • Tomando los puntos con la misma sentencia pero directamente con la mano en la pantalla. Después debían escoger alguna de las técnicas de interpolación y usarlas para graficar. Entre los métodos estudiados se inclinaron por interpolación con spline cúbica y en uno de los primeros intentos obtuvieron gráficos como el de le Figura 6. 1
0.9
0.8
0.7
0.6
0.5
0.4
0.25
0.3
0.35
0.4
0.45
0.5
0.55
0.6
0.65
Figura 6. Esto los motivó para recolectar otros datos y hacer nuevos intentos. Finalmente por sugerencia de los docente efectuaron una doble interpolación: en el eje de abcisas y ordenadas con lo que consiguieron perfiles altamente satisfactorios como muestra la Figura 7.
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1 0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Figura 7.
4 CONCLUSIONES La experiencia resultó ampliamente satisfactoria pues los alumnos se vieron motivados a conocer con profundidad la teoría de interpolación para poder aplicarla con éxito. Las discusiones planteadas en el aula resultaron enriquecedoras no sólo para los más aventajados sino para aquéllos que tenían alguna dificultad con la aplicación de la teoría o con el manejo del software. Al tener que elaborar un informe debieron ser cuidadosos en las formas de presentación de un trabajo y al defenderlo en público estuvieron obligados a enfrentarse a una situación desconocida para muchos de ellos que les será ineludible en el ejercicio de la profesión. Los alumnos que manifestaron que esta forma de trabajo les brindó herramientas que no logran con otras más convencionales y nos comprometió como docentes a intentar profundizarla con más propuestas a lo largo del dictado de los cursos.
REFERENCIAS Atkinson, K. Elementary Numerical Analysis. John Wiley & Sons, Inc., 1993. Burden,R., Faires D. Análisis Numérico. Editorial Thompson. 2003. Kincaid, D., Cheney W. Numerical Analysis Brooks/Cole Publishing ,. 1990. Moler C. Numerical Computing with MATLAB . SIAM. 2004.