Почему метод Ньютона не сходится?


22

Я использую пакет нелинейных решателей PETSc SNES для решения системы нелинейных уравнений, полученных путем дискретизации уравнения в частных производных. Как я могу определить, почему решатель не сходится и что я могу сделать, чтобы успешно решить мои уравнения?


8
Как и в случае любого итеративного метода, крайне важно, чтобы кто-то нашел хорошее начало для запуска метода Ньютона-Рафсона. Плохая отправная точка часто приводит к хаосу.
JM

6
Я думаю, что «часто приводит к хаосу» неправильно. Что касается Блюма, Кукера, Шуба и Смейла, у Ньютона есть привлекательные бассейны, разделенные границами, что может привести к хаотической итерации. Таким образом, этот тип поведения очень маловероятен по сравнению с конвергенцией. Если алгоритм ищет только реальные решения, он не сможет часто сходиться, но не станет хаотичным.
Мэтт Кнепли

5
Я имел в виду "хаос" в нетехническом смысле, @Matt; например, расхождение до бесконечности или циклическое поведение. Может быть, «катастрофа» была бы лучшим выбором слов?
JM

Ответы:


43

Метод Ньютона может не сходиться по многим причинам, вот некоторые из наиболее распространенных.

  • Якобиан неверен (или корректен последовательно, но не параллельно).
  • Линейная система не решена или не решена достаточно точно.
  • Якобианская система имеет особенность, с которой линейный решатель не справляется.
  • В процедуре оценки функции есть ошибка.
  • Функция не является непрерывной или не имеет непрерывных первых производных (например, изменение фазы или ограничители TVD).
  • Уравнения могут не иметь решения (например, предельный цикл вместо установившегося состояния) или между первоначальным предположением и установившимся состоянием может быть «горка» (например, реагенты должны воспламениться и сгореть до достижения установившегося состояния, но установившийся остаточное состояние будет больше при сгорании).

Вот некоторые способы помочь отладить отсутствие сходимости Ньютона.

  • Запустите с параметрами -snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason. Если линейное решение не сходится, проверьте правильность якобиана, а затем посмотрите этот вопрос . Если предобусловленный остаток сходится, а истинный остаток - нет, предобусловливатель может быть единственным. Если линейное решение сходится хорошо, но поиск строки не удается, якобиан может быть неверным.
  • Запустите с, -pc_type lu or -pc_type svdчтобы увидеть, если проблема плохой линейный решатель
  • Бегите с -mat_viewили, -mat_view_drawчтобы увидеть, выглядит ли якобиан разумно
  • Запустите с, -snes_type test -snes_test_displayчтобы увидеть, если якобиан, который вы используете, не так. Сравните результат при добавлении, -mat_fd_type dsчтобы увидеть, чувствителен ли результат к выбору параметра разности.
  • Запустите с, -snes_mf_operator -pc_type luчтобы увидеть, если якобиан, который вы используете, не так. Если проблема слишком велика для прямого решения, попробуйте -snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12. Сравните результат при добавлении, -mat_mffd_type dsчтобы увидеть, чувствителен ли результат к выбору параметра разности.
  • Запустите на одном процессоре, чтобы увидеть, если проблема только в параллельном.
  • Запустите с, -snes_ls_monitorчтобы увидеть, если поиск строки не удался (это обычно признак плохого якобиана).
  • Запустите с, -infoчтобы получить более подробную информацию о процессе решения.

Вот несколько способов помочь процессу Ньютона, если все вышеперечисленное подтвердится

  • Запускайте с последовательностью сетки ( -snes_grid_sequenceэто все, что вам нужно, если вы работаете с a DM), чтобы генерировать лучшее начальное предположение о вашей более мелкой сетке
  • Работать с четверной точностью ( ./configure --with-precision=__float128 --download-f2cblaslapackс PETSc 3.2 и более поздними версиями требуется компилятор GNU версии 4.6 или более поздней)
  • Измените единицы (безразмерность), масштабирование граничных условий или формулировку так, чтобы якобиан был лучше обусловлен.
  • Функции Mollify в функции, которые не имеют непрерывных первых производных (часто происходит, когда ifв остаточной оценке есть операторы, например, изменение фазы или ограничители TVD). Используйте средство решения вариационных неравенств ( SNESVINEWTONRSLS ), если разрывы имеют фундаментальное значение.
  • Попробуйте метод доверительной области ( -ts_type trвозможно, придется настроить параметры).
  • Запустите с некоторым параметром продолжения из точки, где вы знаете решение, см. TSPSEUDO для решения стационарных задач. Существуют гомотопические решатели, такие как PHCpack, которые могут дать вам все возможные решения (и сказать, что он нашел их все), но они не масштабируемы и не могут решить ничего, кроме небольших проблем.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.