¿Por qué el método de Newton no converge?


22

Estoy usando el paquete de solución no lineal de PETSc SNES para resolver un sistema de ecuaciones no lineales obtenidas al discretizar una ecuación diferencial parcial. ¿Cómo puedo determinar por qué el solucionador no converge y qué puedo hacer para resolver con éxito mis ecuaciones?


8
Al igual que con cualquier método iterativo, es primordial que se obtenga una buena semilla para iniciar el método Newton-Raphson. Un mal punto de partida a menudo resulta en caos.
JM

66
Creo que "a menudo resulta en caos" es incorrecto. Refiriéndose a Blum, Cucker, Shub y Smale, Newton tiene cuencas atractivas separadas por límites que pueden resultar en una iteración caótica. Por lo tanto, este tipo de comportamiento es muy poco probable en comparación con la convergencia. Si el algoritmo solo busca soluciones reales, no podrá converger a menudo, pero no se volverá caótico.
Matt Knepley

55
Quise decir "caos" en el sentido no técnico, @Matt; por ejemplo, divergencia al infinito, o comportamiento cíclico. ¿Quizás "desastre" hubiera sido una mejor elección de palabras?
JM

Respuestas:


43

El método de Newton puede no converger por muchas razones, estas son algunas de las más comunes.

  • El jacobiano está equivocado (o correcto en secuencia pero no en paralelo).
  • El sistema lineal no se resuelve o no se resuelve con la suficiente precisión.
  • El sistema jacobiano tiene una singularidad que el solucionador lineal no está manejando.
  • Hay un error en la rutina de evaluación de funciones.
  • La función no es continua o no tiene primeras derivadas continuas (p. Ej., Cambio de fase o limitadores de TVD).
  • Las ecuaciones pueden no tener una solución (por ejemplo, ciclo límite en lugar de un estado estable) o puede haber una "colina" entre la suposición inicial y el estado estable (por ejemplo, los reactivos deben encenderse y arder antes de alcanzar un estado estable, pero el El estado residual será mayor durante la combustión).

Estas son algunas de las formas de ayudar a depurar la falta de convergencia de Newton.

  • Corre con las opciones -snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason. Si la solución lineal no converge, verifique si el jacobiano es correcto, luego vea esta pregunta . Si el residuo preacondicionado converge, pero el residual verdadero no, el preacondicionador puede ser singular. Si la resolución lineal converge bien, pero la búsqueda de línea falla, el jacobiano puede ser incorrecto.
  • Ejecute con -pc_type lu or -pc_type svdpara ver si el problema es un solucionador lineal pobre
  • Corre con -mat_viewo -mat_view_drawpara ver si el jacobiano parece razonable
  • Corre con -snes_type test -snes_test_displaypara ver si el jacobiano que estás usando está mal. Compare la salida cuando agregue -mat_fd_type dspara ver si el resultado es sensible a la elección del parámetro de diferenciación.
  • Corre con -snes_mf_operator -pc_type lupara ver si el jacobiano que estás usando está mal. Si el problema es demasiado grande para una solución directa, intente -snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12. Compare la salida cuando agregue -mat_mffd_type dspara ver si el resultado es sensible a la elección del parámetro de diferenciación.
  • Ejecute en un procesador para ver si el problema es solo en paralelo.
  • Ejecute con -snes_ls_monitorpara ver si la búsqueda de línea está fallando (esto generalmente es un signo de un mal jacobiano).
  • Ejecute con -infopara obtener información más detallada sobre el proceso de solución.

Aquí hay algunas formas de ayudar al proceso de Newton si todo lo anterior se verifica

  • Ejecute con secuencia de cuadrícula ( -snes_grid_sequencees todo lo que necesita si trabaja con a DM) para generar una mejor estimación inicial en su malla más fina
  • Ejecutar con precisión cuádruple ( ./configure --with-precision=__float128 --download-f2cblaslapackcon PETSc 3.2 y posterior, necesita compiladores GNU versión 4.6 o posterior)
  • Cambie las unidades (no dimensionalización), escala de condición de límite o formulación para que el jacobiano esté mejor condicionado.
  • Mollify características en la función que no tienen primeras derivadas continuas (a menudo ocurre cuando hay ifdeclaraciones en la evaluación residual, por ejemplo, cambio de fase o limitadores de TVD). Utilice un solucionador de desigualdad variacional ( SNESVINEWTONRSLS ) si las discontinuidades son de importancia fundamental.
  • Pruebe un método de región de confianza ( -ts_type trpuede que tenga que ajustar los parámetros).
  • Ejecute con algún parámetro de continuación desde un punto donde conozca la solución, consulte TSPSEUDO para resolver problemas de estado estacionario. Hay paquetes de solución de homotopía como PHCpack que pueden brindarle todas las soluciones posibles (y decirle que las ha encontrado todas), pero no son escalables y no pueden resolver nada más que pequeños problemas.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.