Interpolaciones


Exposición teórica y código Visual Basic para resolver interpolaciones

Por Harvey Triana

Las interpolaciones tienen un fin claro: predecir un valor a partir de una serie de datos. Es supremamente deseable poder automatizar la predicción de valores a partir de una colección de datos que frecuentemente son empíricos. Valga aclarar que otro aspecto más avanzado es predecir curvas a partir de datos, este tema tiene un enfoque similar pero más complejo y lo tratare un en articulo posterior.

El caso más simple es la Interpolación Lineal Simple. Ejemplo

Hora del día Temperatura, C
6:30 AM 16.3
8.15 AM x
9.00 AM 20.5

Queremos saber la Temperatura ambiente a la 8:15 AM. Así, el caso más sencillo consiste en determinar el punto medio de T(h).

T(h) = T(h2) - [T(h2) - T(h1)](h2 - h)/(h2 -h1), para h {h1, h2}

T(8.25) = 20.5 - (20.5 - 16.3)(9.0 - 8.15)/(9.0 - 6.5) = 19.072

Así, con cierta certidumbre estimamos que la temperatura a las 8 y 15 fue aproximadamente 19.1 grados centígrados. Hasta aquí es bastante sencillo escribir una función en Visual Basic para interpolación simple. Supongamos que la función T(h) responde mejor a un modelo tipo T(h) = a + b× Log(h), en este caso la interpolación se plantea como:

Hora del día Temperatura, C
Log(6.50) 16.3
Log(8.15) x
Log(9.00) 20.5

La interpolación deja de se Lineal Simple para pasar a Logarítmica Simple. La ecuación que lo resuelve es:

T(h) = T(h2) - [T(h2) - T(h1)][Log(h2) - Log(h)]/[Log(h2) -Log(h1)], para h {h1, h2}

Si no se conoce el modelo de la curva, la Interpolación Lineal Simple irá bien (normalmente es el primer recurso). Dejaremos a un lado las interpolaciones simples, y pasaremos a funciones más complejas. El ejemplo inmediato es ajustar los datos a una parábola. Se requieren tres parejas de valores, siguiendo con el ejemplo, se dispone de:

Hora del día Temperatura, C
6.30 16.3
8.15 x
8.30 19.0
9.00 20.5

Si suponemos que una curva del tipo T(h) = c + b×h + a× h² responde a T(h), entonces el problema se reduce a determinar los coeficientes a, b y c. Para resolver el problema se plantea una ecuación simultánea de tres variables. Para no extenderme tanto, aquí están la solución:

t1 = (y1-y2)/(x1-x2), t1 = (y1-y3)/(x1-x3), a = (t1-t2)/(x2-x3), b = t1 - a(x1 + x2), c = y1 - a×x1² - b×x1

En realidad es un verdadero alivio tener esto en un programa Basic, ¡Que cálculos tan aburridos!. Imagínese a aproximaciones a polinomios de tercer, cuarto y n grado (este tema lo trataré en un articulo futuro). Y no todo termina aquí, imagínese una función T(h) = a + b× Log(h) + c× Log(h)². En ingeniería es frecuente este tipo de ajustes.


Interpolaciones Tipo Vector

Se trata de determinar el valor de f(x, y) a partir de unas parejas ordenadas x e y. Esto es un verdadero lío. Este tipo de problema es frecuente cuando es necesario obtener valores de un Plot f(x,y), como se ilustra en el siguiente gráfico:

Plot f(x,y) e ilustración del problema

Se construyen una especie de puentes que nos lleven a f(x, y). La cuestión analítica puede deducirse de la siguiente tabla:

  y1 y y2
x1 f(x1, y1) f(x1, y) f(x1, y2)
x f(x, y1) f(x, y) f(x, y2)
x2 f(x2, y1) f(x2, y) f(x2, y2)

La solución es relativamente sencilla pero algo larga. Se realizan interpolaciones simples en los extremos de los puntos que rodean la incognita, es decir, primero obtenemos f(x,y1) y f(x,y2), luego f(x,y). Las interpolaciones simples pueden ser lineales o de algun modelo de ecuación. El código Visual Basic que pubiclaré incluye una solución a través de una matriz de datos.


Ejemplos

Coloco dos ejemplos a su disposición (ambos escritos en VB4.0), Ipol.zip (8k) contiene :

1. Interpolando.VBP

Este es uno programa simple con una interfaz sencilla que muestra el módulo mod_Ipol.Bas con algunas funciones para interpolación lineal. El módulo puede ser utilizado en alguna otra aplicación, así como también puede ser ampliado para dar mayores servicios.

2. Vector.VBP

Esto es un ejemplo bastante plano, pero incluye la función IpolVector que es un gran avanze para interpolaciones 2D, dado que efectúa la interpolación desde una tabla (matriz) de datos, es decir, no es necesario especificar los limites del punto en exploración. Resulta de gran utilidad cuando se tienen un Plot empírico y se desea automatizar sus lecturas. Para esto, se toma una tabla de lecturas y se introducen en un archivo ASCII, que la función IpolVector leerá y procesara como Usted lo requiera. De hecho esto lo he aplicado en varias soluciones. Cargue el proyecto Vector.VBP y teclee [F5] para ver la salida de un ejemplo sencillo.