Considere con casi singular, lo que significa que hay un valor propio de que es muy pequeño. El criterio habitual de detención de un método iterativo se basa en el valor residual y considera que las iteraciones pueden detenerse cuando con n el número de iteración. Pero en el caso que estamos considerando, podría haber un gran error v viviendo en el espacio propio asociado con el pequeño valor propio \ lambda_0 que da un pequeño Av residual \ \ lambda_0v . Supongamos que el residual inicial r_0 es grande, entonces podría ocurrir que nos detengamos enA λ 0 A r n : = b - A x n ‖ r n ‖ / ‖ r 0 ‖ < t o l n v λ 0 A v = λ 0 v r 0 ‖ r n ‖ / ‖ r 0 ‖ < T o l pero el error sigue siendo grande. ¿Cuál es un mejor indicador de error en este caso? Esun buen candidato?
fuente
Respuestas:
Por favor, no use la diferencia entre iteraciones sucesivas para definir un criterio de parada. Esto diagnostica erróneamente el estancamiento por convergencia. La mayoría de las iteraciones de matriz no simétricas no son monótonas, e incluso GMRES en aritmética exacta sin reinicios puede estancarse por un número arbitrario de iteraciones (hasta la dimensión de la matriz) antes de converger repentinamente. Véanse ejemplos en Nachtigal, Reddy y Trefethen (1993) .
Una mejor manera de definir la convergencia.
Por lo general, estamos interesados en la precisión de nuestra solución más que en el tamaño del residuo. Específicamente, nos gustaría garantizar que la diferencia entre una solución aproximada y la solución exacta x satisface | x n - x | < c para algunos especificados por el usuario c . Resulta que puede lograr esto al encontrar una x n tal que | A x n - b | < c ϵ donde ϵ es el valor singular más pequeño de A , debido axn x
donde hemos usado que es el mayor valor singular de A - 1 (segunda línea) y que x resuelve exactamente A x = b (tercera línea).1/ϵ A−1 x Ax=b
Estimando el valor singular más pequeñoϵ
Una estimación precisa del valor singular más pequeño generalmente no está disponible directamente del problema, pero se puede estimar como un subproducto de un gradiente conjugado o una iteración GMRES. Tenga en cuenta que aunque las estimaciones de los mayores valores propios y valores singulares es por lo general bastante bueno después de sólo unas pocas iteraciones, una estimación precisa de los más pequeños Eigen / valor singular lo general sólo se obtiene una vez que se alcanza la convergencia. Antes de la convergencia, la estimación generalmente será significativamente mayor que el valor real. Esto sugiere que en realidad debe resolver las ecuaciones antes de poder definir la tolerancia correcta c ϵ . Una tolerancia de convergencia automática que toma una precisión proporcionada por el usuario cϵ cϵ c para la solución y estima que el valor singular más pequeño con el estado actual del método de Krylov podría converger demasiado pronto porque la estimación de ϵ fue mucho mayor que el valor verdadero.ϵ ϵ
Notas
-ksp_monitor_singular_value
con cualquier programa PETSc. Consulte KSPComputeExtremeSingularValues () para calcular valores singulares a partir del código.-ksp_gmres_restart 1000
en PETSc).fuente
Otra forma de ver este problema es considerar las herramientas de problemas inversos discretos, es decir, problemas que implican resolver o min | El | A x - b | El | 2 donde A está muy mal condicionado (es decir, la relación entre el primer y el último valor singular σ 1 / σ n es grande).Ax=b min||Ax−b||2 A σ1/σn
Aquí, tenemos varios métodos para elegir el criterio de detención, y para un método iterativo, recomendaría el criterio de la curva L ya que solo involucra cantidades que ya están disponibles (DESCARGO DE RESPONSABILIDAD: mi asesor fue pionero en este método, por lo que definitivamente estoy sesgado hacia eso). He usado esto con éxito en un método iterativo.
La idea es monitorear la norma residual y la norma de solución η k = | El | x k | El | 2 , donde x k es la k 'ésima iteración. A medida que itera, esto comienza a dibujar la forma de una L en un diagrama de registro (rho, eta), y el punto en la esquina de esa L es la opción óptima.ρk=||Axk−b||2 ηk=||xk||2 xk k
Esto le permite implementar un criterio en el que vigila cuando haya pasado la esquina (es decir, mirando el gradiente de ), y luego elija la iteración que se encuentra en la esquina.(ρk,ηk)
La forma en que lo hice implicaba almacenar los últimos 20 iteraciones, y si el gradienteabs(log(ηk)−log(ηk−1)log(ρk)−log(ρk−1))
También hay métodos más detallados para encontrar la esquina, y estos funcionan mejor pero requieren almacenar un número significativo de iteraciones. Juega un poco con eso. Si está en matlab, puede usar las herramientas de regularización de la caja de herramientas, que implementa algo de esto (específicamente la función "esquina" es aplicable).
Tenga en cuenta que este enfoque es particularmente adecuado para problemas a gran escala, ya que el tiempo de computación adicional involucrado es minúsculo.
fuente