Чому метод Ньютона не збігається?


22

Я використовую пакет нелінійних розв'язків SNES PETSc для вирішення системи нелінійних рівнянь, отриманих дискретизацією часткового диференціального рівняння. Як я можу визначити, чому розв'язувач не збігається, і що я можу зробити, щоб успішно вирішити свої рівняння?


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 або новішої)
  • Змініть одиниці (неконцентралізація), масштабування граничних умов або формулювання, щоб якобіанські умови були кращими.
  • Моліфікувати функції у функції, які не мають постійних перших похідних (часто виникає, коли є ifзалишкові оцінки, наприклад, зміна фази або обмежувачі TVD). Використовуйте розв'язувач варіативної нерівності ( SNESVINEWTONRSLS ), якщо розриви мають принципове значення.
  • Спробуйте метод області довіри ( -ts_type trможливо, доведеться коригувати параметри).
  • Запустіть деякий параметр продовження з точки, де ви знаєте рішення, див. TSPSEUDO для вирішення стаціонарних задач. Є пакети гомотопічних рішень, таких як PHCpack, які можуть отримати всі можливі рішення (і сказати вам, що він їх знайшов), але вони не є масштабованими і не можуть вирішити нічого, крім невеликих проблем.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.