# Interpolación trilineal

La interpolación trilineal es un método de interpolación multivariable en un retículo regular tridimensional. Se aproxima linealmente al valor de una función en un punto intermedio $(x,y,z)$ dentro de un prisma rectangular axial local, utilizando los datos de la función en los puntos del retículo. Para un retículo no estructurado arbitrario (como se usa en el análisis del método de los elementos finitos), se deben usar otros métodos de interpolación. Si todos los elementos de la malla son tetraedros (símplices 3D), entonces las coordenadas baricéntricas proporciona un procedimiento de cálculo más sencillo.
La interpolación trilineal se utiliza con frecuencia en el análisis numérico, el análisis de datos y la computación gráfica.

## Comparado con la interpolación lineal y con la bilineal

La interpolación trilineal es la extensión de la interpolación lineal, que opera en espacios con dimensión $D=1$, y de la interpolación bilineal, que opera con la dimensión $D=2$, a la dimensión $D=3$. Todos estos sistemas de interpolación utilizan polinomios de orden 1, lo que proporciona una precisión de orden 2, y requieren $2^{D}=8$ valores predefinidos adyacentes que rodeen el punto de interpolación. Hay varias formas de llegar a la interpolación trilineal, que es equivalente a la interpolación tridimensional tensorial de orden 1 con B-splines, y el operador de interpolación trilineal también es un producto tensorial de 3 operadores de interpolación lineal.

## Método

En una red periódica y cúbica, sean $x_{\text{d}}$, $y_{\text{d}}$ y $z_{\text{d}}$ sean las diferencias entre cada uno de $x$, $y$, $z$ y la coordenada más pequeña relacionada, es decir:
    ${\begin{aligned}x_{\text{d}}={\frac {x-x_{0}}{x_{1}-x_{0}}}\\y_{\text{d}}={\frac {y-y_{0}}{y_{1}-y_{0}}}\\z_{\text{d}}={\frac {z-z_{0}}{z_{1}-z_{0}}}\end{aligned}}$
donde $x_{0}$ indica el punto de red debajo de $x$, y $x_{1}$ indica el punto de red por encima de $x$ y de manera similar para $y_{0},y_{1},z_{0}$ y $z_{1}$.
Primero se interpola en $x$ (imagínese que se está "empujando" la cara del cubo definida por $C_{0jk}$ hacia la cara opuesta, definida por $C_{1jk}$), dando:
    ${\begin{aligned}c_{00}&=c_{000}(1-x_{\text{d}})+c_{100}x_{\text{d}}\\c_{01}&=c_{001}(1-x_{\text{d}})+c_{101}x_{\text{d}}\\c_{10}&=c_{010}(1-x_{\text{d}})+c_{110}x_{\text{d}}\\c_{11}&=c_{011}(1-x_{\text{d}})+c_{111}x_{\text{d}}\end{aligned}}$
donde $c_{000}$ significa el valor de la función de $(x_{0},y_{0},z_{0}).$ A continuación, se interpolan estos valores (en $y$, "empujando" de $C_{i0k}$ a $C_{i1k}$), dando:
    ${\begin{aligned}c_{0}&=c_{00}(1-y_{\text{d}})+c_{10}y_{\text{d}}\\c_{1}&=c_{01}(1-y_{\text{d}})+c_{11}y_{\text{d}}\end{aligned}}$
Finalmente, se interpolan estos valores en $z$ (recorriendo una recta):
    $c=c_{0}(1-z_{\text{d}})+c_{1}z_{\text{d}}.$
Esto da un valor previsto para el punto.
El resultado de la interpolación trilineal es independiente del orden de los pasos de interpolación en los tres ejes: cualquier otro orden, por ejemplo en $x$, luego en $y$ y finalmente en $z$, produce el mismo valor.
Las operaciones anteriores se pueden visualizar de la siguiente manera: Primero se localizan las ocho esquinas de un cubo que rodean al punto de interés. Estas esquinas tienen los valores $c_{000}$, $c_{100}$, $c_{010}$, $c_{110}$, $c_{001}$, $c_{101}$, $c_{011}$, $c_{111}$.
A continuación, se realiza una interpolación lineal entre $c_{000}$ y $c_{100}$ para encontrar $c_{00}$, $c_{001}$ y $c_{101}$ para encontrar $c_{01}$, $c_{011}$ y $c_{111}$ para encontrar $c_{11}$, $c_{010}$ y $c_{110}$ para encontrar $c_{10}$.
Ahora se interpola entre $c_{00}$ y $c_{10}$ para encontrar $c_{0}$, $c_{01}$ y $c_{11}$ para encontrar $c_{1}$. Finalmente, se calcula el valor $c$ mediante interpolación lineal de $c_{0}$ y $c_{1}$.
En la práctica, una interpolación trilineal es idéntica a dos interpolaciones bilineales combinadas con una interpolación lineal:
    $c\approx l\left(b(c_{000},c_{010},c_{100},c_{110}),\,b(c_{001},c_{011},c_{101},c_{111})\right)$

### Algoritmo alternativo

Una forma alternativa de escribir la solución al problema de interpolación es
    $f(x,y,z)\approx a_{0}+a_{1}x+a_{2}y+a_{3}z+a_{4}xy+a_{5}xz+a_{6}yz+a_{7}xyz$
donde los coeficientes se encuentran resolviendo el sistema lineal
    ${\begin{aligned}{\begin{bmatrix}1&x_{0}&y_{0}&z_{0}&x_{0}y_{0}&x_{0}z_{0}&y_{0}z_{0}&x_{0}y_{0}z_{0}\\1&x_{1}&y_{0}&z_{0}&x_{1}y_{0}&x_{1}z_{0}&y_{0}z_{0}&x_{1}y_{0}z_{0}\\1&x_{0}&y_{1}&z_{0}&x_{0}y_{1}&x_{0}z_{0}&y_{1}z_{0}&x_{0}y_{1}z_{0}\\1&x_{1}&y_{1}&z_{0}&x_{1}y_{1}&x_{1}z_{0}&y_{1}z_{0}&x_{1}y_{1}z_{0}\\1&x_{0}&y_{0}&z_{1}&x_{0}y_{0}&x_{0}z_{1}&y_{0}z_{1}&x_{0}y_{0}z_{1}\\1&x_{1}&y_{0}&z_{1}&x_{1}y_{0}&x_{1}z_{1}&y_{0}z_{1}&x_{1}y_{0}z_{1}\\1&x_{0}&y_{1}&z_{1}&x_{0}y_{1}&x_{0}z_{1}&y_{1}z_{1}&x_{0}y_{1}z_{1}\\1&x_{1}&y_{1}&z_{1}&x_{1}y_{1}&x_{1}z_{1}&y_{1}z_{1}&x_{1}y_{1}z_{1}\end{bmatrix}}{\begin{bmatrix}a_{0}\\a_{1}\\a_{2}\\a_{3}\\a_{4}\\a_{5}\\a_{6}\\a_{7}\end{bmatrix}}={\begin{bmatrix}c_{000}\\c_{100}\\c_{010}\\c_{110}\\c_{001}\\c_{101}\\c_{011}\\c_{111}\end{bmatrix}},\end{aligned}}$
dando el resultado
    ${\begin{aligned}a_{0}=&{\frac {-c_{000}x_{1}y_{1}z_{1}+c_{001}x_{1}y_{1}z_{0}+c_{010}x_{1}y_{0}z_{1}-c_{011}x_{1}y_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}+\\&{\frac {c_{100}x_{0}y_{1}z_{1}-c_{101}x_{0}y_{1}z_{0}-c_{110}x_{0}y_{0}z_{1}+c_{111}x_{0}y_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{1}=&{\frac {c_{000}y_{1}z_{1}-c_{001}y_{1}z_{0}-c_{010}y_{0}z_{1}+c_{011}y_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}+\\&{\frac {-c_{100}y_{1}z_{1}+c_{101}y_{1}z_{0}+c_{110}y_{0}z_{1}-c_{111}y_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{2}=&{\frac {c_{000}x_{1}z_{1}-c_{001}x_{1}z_{0}-c_{010}x_{1}z_{1}+c_{011}x_{1}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}+\\&{\frac {-c_{100}x_{0}z_{1}+c_{101}x_{0}z_{0}+c_{110}x_{0}z_{1}-c_{111}x_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{3}=&{\frac {c_{000}x_{1}y_{1}-c_{001}x_{1}y_{1}-c_{010}x_{1}y_{0}+c_{011}x_{1}y_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}+\\&{\frac {-c_{100}x_{0}y_{1}+c_{101}x_{0}y_{1}+c_{110}x_{0}y_{0}-c_{111}x_{0}y_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{4}=&{\frac {-c_{000}z_{1}+c_{001}z_{0}+c_{010}z_{1}-c_{011}z_{0}+c_{100}z_{1}-c_{101}z_{0}-c_{110}z_{1}+c_{111}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{5}=&{\frac {-c_{000}y_{1}+c_{001}y_{1}+c_{010}y_{0}-c_{011}y_{0}+c_{100}y_{1}-c_{101}y_{1}-c_{110}y_{0}+c_{111}y_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{6}=&{\frac {-c_{000}x_{1}+c_{001}x_{1}+c_{010}x_{1}-c_{011}x_{1}+c_{100}x_{0}-c_{101}x_{0}-c_{110}x_{0}+c_{111}x_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{7}=&{\frac {c_{000}-c_{001}-c_{010}+c_{011}-c_{100}+c_{101}+c_{110}-c_{111}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}.\end{aligned}}$