Algoritmo para matrices tridiagonales

Este tipo de matrices suelen salir al plantear discretizaciones por métodos de diferencias finitas, volúmenes finitos o elementos finitos de problemas unidimensionales.A continuación se obtiene la solución por sustitución hacia atrás: La siguiente función en C resolverá el sistema (aunque sobreescribirá el vector de entrada c en el proceso).Se ha de notar que aquí los subíndices están basados en el cero, es decirSe hacen llamadas a la biblioteca para reservar más especiao.Otras variantes usan un puntero a memoria disponible.La siguiente implementación usa el lenguaje de programación Python.De nuevo, los subíndices son basados en el cero (Se puede obtener dicho algoritmo usando la eliminación gaussiana de forma genérica.y con ecuaciones a resolver: Modificando la segunda ecuación a partir de la primera obtenemos: lo que da: y se ha eliminadoSi repetimos usando la segunda ecuación en la tercera obtenemos: Esta vez se ha eliminadoLa determinación de los coeficientes en las ecuaciones generales es más complicada.Examinando el procedimiento, se pueden definir de forma recursiva: Para acelerar la resoluciónpuede ser dividido (si no hay problemas por división por cero) y los nuevos coeficientes, indicados con primas, serán: Lo que da el siguiente sistema con las mismas incógnitas y los coeficientes definidos en función de los originales: Donde la última ecuación solo afecta a una incógnita.Resolviéndola podemos resolver la anterior y así sucesivamente: En algunas situaciones, particularmente con condiciones de contorno periódicas, se busca resolver una forma perturbada de la matriz tridiagonal: Para este caso se usa la Fórmula Sherman-Morrison para evitar las operaciones adicionales de una eliminación gaussiana y poder seguir usando el algoritmo de Thomas.Este método requiere resolver una versión no cíclica del sistema para la entrada y un vector de corrección y combinar los resultados.Todo ello se puede hacer eficientemente de una vez dado que ambos problemas compartan el barrido hacia delante de la matriz triangular..En otras situaciones el sistema de ecuaciones puede ser tridiagonal por bloques, con submatrices como elementos formando tres diagonales.Este tipo de problemas suelen darse cuando se quiere extender los métodos de discretización a dos dimensiones y puede verse también como una matriz pentadiagonal.Variantes de este algoritmo se usan para estas situaciones.El libro Numerical Mathematics de Quarteroni, Sacco y Saleri, recoge una versión modificada para multiplicaciones en vez de divisiones, lo que es útil en ciertas arquitecturas.