Коли Ньютон-Крилов не є відповідним вирішувачем?


16

Нещодавно я порівнював різні нелінійні розв'язувачі з scipy і був особливо вражений прикладом Ньютона-Крилова в кулінарній книзі Scipy, в якому вони вирішують диференціальне рівняння рівняння другого порядку з нелінійним терміном реакції приблизно в 20 рядках коду.

Я змінив приклад коду для вирішення нелінійного рівняння Пуассона (його також називають рівнянням Пуассона-Больцмана , див. Стор. 17 в цих примітках) для напівпровідникових гетероструктур, які мають вигляд,

г2ϕгх2-к(х)(p(х,ϕ)-н(х,ϕ)+N+(х))=0

(Це залишкова функція, яка передається вирішувачу.)

Це проблема електростатики, де і p ( x , ϕ ) - нелінійні функції для виду n i ( x ) e - ( E i ( x , ϕ ) - E f ) . Деталі тут не важливі, але справа в тому , що нелінійна функцій експоненціально змінюватиметься в залежності ф так , залишкова функція може змінюватися в величезному діапазоні ( 10 - 6 - 10 16 )н(х,ϕ)p(х,ϕ)нi(х)е-(Еi(х,ϕ)-Еf)ϕ10-6-1016)з незначною зміною .ϕ

Я чисельно розв'язую це рівняння з ньютоном-Криловим scipy, але воно ніколи не збігатиметься (адже воно завжди повідомляло б про помилку при обчисленні якобійців). Я перейшов з розв'язувача Ньютона-Крилова на fsolve (який базується на гібриді MINPACK), і це спрацювало вперше!

Чи є загальні причини, чому Ньютон-Крилов не добре підходить до певних проблем? Чи потрібно вхідні рівняння якось обумовлювати?

Можливо, для коментування потрібно більше інформації, але чому ви вважаєте, що fsolve працював у цьому випадку?


У мене був такий самий випадок з помилкою Ньютона-Крилова з якобіаном, і я виявив, що зміна методу з "lgmres" на просто "gmres" ( sol = newton_krylov(func, guess, method='gmres')) вирішила проблему. Не зовсім точно, чому, але будь-хто інший із цим питанням може подумати, що робити те саме.
Артур Дент

Відповіді:


18

Ви можете зіткнутися з двома проблемами.

Погане кондиціонування

По-перше, проблема полягає в необдумані, але якщо ви надаєте лише залишок, Ньютон-Крилов викидає половину ваших значущих цифр шляхом остаточного розмежування залишків, щоб отримати дію якобіанців:

J[х]уЖ(х+ϵу)-Ж(х)ϵ

1016

Зауважте, що ті ж самі питання стосуються і квазі-ньютонських методів, хоча і без кінцевих відмінностей. Усі масштабовані методи для неполадок з компактними операторами (наприклад, диференціальні рівняння) повинні використовувати якобіанську інформацію для попередньої кондиціонування.

Цілком імовірно, що fsolveабо не використовували якобіанську інформацію, або використовували метод dogleg, або зрушення, щоб досягти успіху в методі "градієнтного спуску", незважаючи на по суті єдиний якобійський (тобто, кінцева диференціація матиме багато "шуму" від арифметична гранична точність). Це не масштабується і, fsolveшвидше за все, стає повільніше, коли ви збільшуєте розмір проблеми.

Глобалізація

Якщо лінійні задачі вирішені точно, ми можемо виключити проблеми, що стосуються лінійної задачі (Крилов), і зосередити увагу на тих, що виникають через нелінійність. Місцеві мінімуми та негладкі особливості повільної конвергенції або викликають застій. Пуассон-Больцман - це гладка модель, тому якщо ви почнете з досить хорошого початкового здогаду, Ньютон сходиться квадратично. Більшість стратегій глобалізації передбачають якесь продовження, щоб створити якісну початкову здогадку для остаточних ітерацій. Приклади включають продовження сітки (наприклад, Full Multigrid), продовження параметрів та псевдоперекладне продовження. Остання, як правило, застосовна для стаціонарних проблем і пропонує деяку глобальну теорію конвергенції, див. Coffey, Kelley and Keyes (2003) . Цей документ знайде пошук, який може бути корисним вам:Шестаков, Мілович та Ной (2002) Рішення нелінійного рівняння Пуассона-Больцмана за допомогою псевдоперехідного продовження та методу кінцевих елементів . Продовження псевдотранзиту тісно пов'язане з алгоритмом Левенберга-Маркарда.

Подальше читання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.