En matemáticas , el preacondicionamiento es la aplicación de una transformación, llamada preacondicionador , que condiciona un problema dado a una forma que sea más adecuada para los métodos de resolución numérica . El preacondicionamiento generalmente está relacionado con la reducción de un número de condición del problema. El problema preacondicionado generalmente se resuelve mediante un método iterativo .
En álgebra lineal y análisis numérico , un precondicionador de una matriz es una matriz tal que tiene un número de condición menor que . También es común llamar al precondicionador, en lugar de , ya que rara vez está explícitamente disponible. En el precondicionamiento moderno, la aplicación de , es decir, la multiplicación de un vector columna, o un bloque de vectores columna, por , se realiza comúnmente de una manera libre de matriz , es decir, donde ni , ni (y a menudo ni siquiera ) están explícitamente disponibles en forma de matriz.
Los preacondicionadores son útiles en los métodos iterativos para resolver un sistema lineal , ya que la tasa de convergencia para la mayoría de los solucionadores lineales iterativos aumenta porque el número de condición de una matriz disminuye como resultado del preacondicionamiento. Los solucionadores iterativos preacondicionados generalmente superan a los solucionadores directos, por ejemplo, la eliminación gaussiana , para matrices grandes, especialmente para matrices dispersas . Los solucionadores iterativos se pueden utilizar como métodos sin matriz , es decir, se convierten en la única opción si la matriz de coeficientes no se almacena explícitamente, sino que se accede a ella evaluando productos matriz-vector.
En lugar de resolver el sistema lineal original para , se puede considerar el sistema preacondicionado correcto y resolver para y para .
Alternativamente, se puede resolver el sistema precondicionado izquierdo
Ambos sistemas dan la misma solución que el sistema original siempre que la matriz de preacondicionamiento no sea singular . El preacondicionamiento de la izquierda es más tradicional.
El sistema preacondicionado bilateral puede ser beneficioso, por ejemplo, para preservar la simetría de la matriz: si la matriz original es simétrica real y los preacondicionadores reales y satisfacen , entonces la matriz preacondicionada también es simétrica. El preacondicionamiento bilateral es común para el escalamiento diagonal donde los preacondicionadores y son diagonales y el escalamiento se aplica tanto a las columnas como a las filas de la matriz original , por ejemplo, para disminuir el rango dinámico de las entradas de la matriz.
El objetivo del preacondicionamiento es reducir el número de condición , por ejemplo, de la matriz del sistema preacondicionado izquierda o derecha o . Los números de condición pequeños benefician la convergencia rápida de los solucionadores iterativos y mejoran la estabilidad de la solución con respecto a las perturbaciones en la matriz del sistema y el lado derecho, por ejemplo, permitiendo una cuantificación más agresiva de las entradas de la matriz utilizando una precisión informática menor .
La matriz preacondicionada rara vez se forma explícitamente. Es posible que solo sea necesario calcular la acción de aplicar la operación de resolución del preacondicionador a un vector determinado.
Por lo general, existe una disyuntiva en la elección de . Dado que el operador debe aplicarse en cada paso del solucionador lineal iterativo, debería tener un pequeño costo (tiempo de cálculo) de aplicación de la operación. Por lo tanto, el preacondicionador más barato sería ya que entonces Claramente, esto da como resultado el sistema lineal original y el preacondicionador no hace nada. En el otro extremo, la elección da que tiene un número de condición óptimo de 1, requiriendo una sola iteración para la convergencia; sin embargo, en este caso y aplicar el preacondicionador es tan difícil como resolver el sistema original. Por lo tanto, uno elige un punto intermedio entre estos dos extremos, en un intento de lograr un número mínimo de iteraciones lineales mientras se mantiene el operador lo más simple posible. A continuación se detallan algunos ejemplos de enfoques de preacondicionamiento típicos.
Los métodos iterativos preacondicionados son, en la mayoría de los casos, matemáticamente equivalentes a los métodos iterativos estándar aplicados al sistema preacondicionado. Por ejemplo, la iteración estándar de Richardson para resolver es
Aplicado al sistema preacondicionado se convierte en un método preacondicionado.
Entre los métodos iterativos preacondicionados más populares para sistemas lineales se incluyen el método del gradiente conjugado preacondicionado , el método del gradiente biconjugado y el método del residuo mínimo generalizado . Los métodos iterativos, que utilizan productos escalares para calcular los parámetros iterativos, requieren cambios correspondientes en el producto escalar junto con la sustitución de
Un método iterativo estacionario se determina mediante la división de la matriz y la matriz de iteración . Suponiendo que
El número de condición está limitado arriba por
Para una matriz definida positiva simétrica , el preacondicionador se elige típicamente para que también sea definido positivo simétrico. El operador preacondicionado es entonces también definido positivo simétrico, pero con respecto al producto escalar basado en . En este caso, el efecto deseado al aplicar un preacondicionador es hacer que la forma cuadrática del operador preacondicionado con respecto al producto escalar basado en sea casi esférica. [1]
Al denotar , destacamos que el preacondicionamiento se implementa prácticamente como la multiplicación de algún vector por , es decir, el cálculo del producto En muchas aplicaciones, no se da como una matriz, sino como un operador que actúa sobre el vector . Sin embargo, algunos preacondicionadores populares cambian con y la dependencia de puede no ser lineal. Los ejemplos típicos implican el uso de métodos iterativos no lineales , por ejemplo, el método del gradiente conjugado , como parte de la construcción del preacondicionador. Dichos preacondicionadores pueden ser prácticamente muy eficientes, sin embargo, su comportamiento es difícil de predecir teóricamente.
Un caso particular interesante de preacondicionamiento variable es el preacondicionamiento aleatorio, por ejemplo, el preacondicionamiento multimalla en mallas gruesas aleatorias. [2] Si se utiliza en métodos de descenso de gradiente , el preacondicionamiento aleatorio puede verse como una implementación del descenso de gradiente estocástico y puede conducir a una convergencia más rápida, en comparación con el preacondicionamiento fijo, ya que rompe el patrón asintótico de "zig-zag" del descenso de gradiente .
El uso más común del preacondicionamiento es para la solución iterativa de sistemas lineales resultantes de aproximaciones de ecuaciones diferenciales parciales . Cuanto mejor sea la calidad de la aproximación, mayor será el tamaño de la matriz. En tal caso, el objetivo del preacondicionamiento óptimo es, por un lado, hacer que el número de condición espectral de esté acotado desde arriba por una constante independiente del tamaño de la matriz, lo que D'yakonov llama preacondicionamiento espectralmente equivalente . Por otro lado, el costo de aplicación de debería ser idealmente proporcional (también independiente del tamaño de la matriz) al costo de multiplicación de por un vector.
El preacondicionador de Jacobi es una de las formas más simples de preacondicionamiento, en la que se elige como preacondicionador la diagonal de la matriz . Suponiendo que , obtenemos Es eficiente para matrices diagonalmente dominantes . Se utiliza en programas de análisis para problemas de vigas o problemas unidimensionales (por ejemplo, STAAD.Pro )
El precondicionador de inverso aproximado disperso minimiza donde es la norma de Frobenius y es de un conjunto adecuadamente restringido de matrices dispersas . Bajo la norma de Frobenius, esto se reduce a resolver numerosos problemas de mínimos cuadrados independientes (uno para cada columna). Las entradas en deben restringirse a algún patrón de escasez o el problema sigue siendo tan difícil y lento como encontrar la inversa exacta de . El método fue introducido por MJ Grote y T. Huckle junto con un enfoque para seleccionar patrones de escasez. [3]
Los problemas de valores propios pueden plantearse de varias maneras alternativas, cada una de las cuales conlleva su propio preacondicionamiento. El preacondicionamiento tradicional se basa en las denominadas transformaciones espectrales. Conociendo (aproximadamente) el valor propio deseado, se puede calcular el vector propio correspondiente resolviendo el sistema lineal homogéneo relacionado, lo que permite utilizar el preacondicionamiento para el sistema lineal. Por último, la formulación del problema de valores propios como optimización del cociente de Rayleigh hace que las técnicas de optimización preacondicionada entren en escena. [4]
Por analogía con los sistemas lineales, para un problema de valores propios uno puede verse tentado a reemplazar la matriz con la matriz que utiliza un preacondicionador . Sin embargo, esto tiene sentido solo si los vectores propios de búsqueda de y son los mismos. Este es el caso de las transformaciones espectrales.
La transformación espectral más popular es la llamada transformación de desplazamiento e inversión , donde para un escalar dado , llamado desplazamiento , el problema de valor propio original se reemplaza con el problema de desplazamiento e inversión . Los vectores propios se conservan y uno puede resolver el problema de desplazamiento e inversión mediante un solucionador iterativo, por ejemplo, la iteración de potencia . Esto da la iteración inversa , que normalmente converge al vector propio, correspondiente al valor propio más cercano al desplazamiento . La iteración del cociente de Rayleigh es un método de desplazamiento e inversión con un desplazamiento variable.
Las transformaciones espectrales son específicas para los problemas de valores propios y no tienen análogos para los sistemas lineales. Requieren un cálculo numérico preciso de la transformación involucrada, lo que se convierte en el principal obstáculo para los problemas de gran envergadura.
Para hacer una conexión estrecha con los sistemas lineales, supongamos que se conoce (aproximadamente) el valor propio deseado. Entonces se puede calcular el vector propio correspondiente a partir del sistema lineal homogéneo . Utilizando el concepto de preacondicionamiento izquierdo para sistemas lineales, obtenemos , donde es el preacondicionador, que podemos intentar resolver utilizando la iteración de Richardson
El pseudoinverso de Moore–Penrose es el precondicionador, que hace que la iteración de Richardson anterior converja en un paso con , ya que , denotado por , es el proyector ortogonal en el espacio propio, correspondiente a . La elección es impráctica por tres razones independientes. Primero, en realidad no se conoce, aunque se puede reemplazar con su aproximación . Segundo, el pseudoinverso de Moore–Penrose exacto requiere el conocimiento del vector propio, que estamos tratando de encontrar. Esto se puede evitar en cierta medida mediante el uso del precondicionador de Jacobi–Davidson , donde se aproxima a . Por último, pero no menos importante, este enfoque requiere una solución numérica precisa del sistema lineal con la matriz del sistema , que se vuelve tan costosa para problemas grandes como el método de desplazamiento e inversión anterior. Si la solución no es lo suficientemente precisa, el paso dos puede ser redundante.
Reemplacemos primero el valor teórico en la iteración de Richardson anterior con su aproximación actual para obtener un algoritmo práctico.
Una opción popular es utilizar la función de cociente de Rayleigh . El preacondicionamiento práctico puede ser tan trivial como simplemente usar o Para algunas clases de problemas de valores propios, se ha demostrado la eficiencia de, tanto numérica como teóricamente. La opción permite utilizar fácilmente para problemas de valores propios la amplia variedad de preacondicionadores desarrollados para sistemas lineales.
Debido al valor cambiante , un análisis de convergencia teórica integral es mucho más difícil, en comparación con el caso de sistemas lineales, incluso para los métodos más simples, como la iteración de Richardson .
En optimización , el preacondicionamiento se utiliza normalmente para acelerar los algoritmos de optimización de primer orden .
Por ejemplo, para encontrar un mínimo local de una función de valor real utilizando el descenso de gradiente , se toman pasos proporcionales al negativo del gradiente (o del gradiente aproximado) de la función en el punto actual:
El preacondicionador se aplica al gradiente:
Aquí el preacondicionamiento puede verse como un cambio en la geometría del espacio vectorial con el objetivo de hacer que los conjuntos de niveles parezcan círculos. [5] En este caso, el gradiente preacondicionado apunta más cerca del punto del extremo como en la figura, lo que acelera la convergencia.
El mínimo de una función cuadrática donde y son vectores columna reales y es una matriz definida positiva simétrica real , es exactamente la solución de la ecuación lineal . Dado que , el método de descenso de gradiente preacondicionado para minimizar es
Esta es la iteración de Richardson preacondicionada para resolver un sistema de ecuaciones lineales .
El mínimo del cociente de Rayleigh donde es un vector columna real distinto de cero y es una matriz definida positiva simétrica real , es el valor propio más pequeño de , mientras que el minimizador es el vector propio correspondiente . Como es proporcional a , el método de minimización de descenso de gradiente preacondicionado es
Este es un análogo de la iteración de Richardson preacondicionada para resolver problemas de valores propios.
En muchos casos, puede ser beneficioso cambiar el preacondicionador en algunos o incluso en cada paso de un algoritmo iterativo para adaptarse a una forma cambiante de los conjuntos de niveles, como en
Sin embargo, hay que tener en cuenta que construir un preacondicionador eficiente suele ser muy costoso desde el punto de vista computacional. El aumento del coste de actualización del preacondicionador puede fácilmente anular el efecto positivo de una convergencia más rápida. Si , una aproximación BFGS de la matriz hessiana inversa, este método se denomina método Quasi-Newton .