n v жити у власній просторі, пов’язаній з малим власним значенням що дає малий залишковий Av = \ lambda_0v A v = λ 0 v ‖ r n ‖ / ‖ r 0 ‖ < t o l x n - x все ще велика. Що в цьому випадку кращий показник помилок? Чихороший кандидат?
n v жити у власній просторі, пов’язаній з малим власним значенням що дає малий залишковий Av = \ lambda_0v A v = λ 0 v ‖ r n ‖ / ‖ r 0 ‖ < t o l x n - x все ще велика. Що в цьому випадку кращий показник помилок? Чихороший кандидат?
Відповіді:
Будь ласка, ніколи не використовуйте різницю між послідовними ітераціями для визначення критеріїв зупинки. Це неправильно діагностує застій для конвергенції. Більшість несиметричних ітерацій матриці не є монотонними, і навіть GMRES у точній арифметиці без перезапуску може застоюватися для довільної кількості ітерацій (аж до розмірності матриці), перш ніж раптово сходитися. Дивіться приклади в Nachtigal, Reddy та Trefethen (1993) .
Нас зазвичай цікавить точність нашого рішення більше, ніж розмір залишку. Зокрема, ми хотіли б гарантувати, що різниця між приблизним рішенням та точним рішенням x задовольняє | x n - x | < c для деяких вказаних користувачем c . Виявляється, можна досягти цього, знайшовши x n такий, що | A x n - b | < c ϵ де ϵ - найменше особливе значення A , обумовлене
де ми використали, що є найбільшим сингулярним значенням A - 1 (другий рядок) і що x точно вирішує A x = b (третій рядок).
Точна оцінка найменшого сингулярного значення, як правило, безпосередньо не доступна з проблеми, але вона може бути оцінена як побічний продукт спряженого градієнта або ітерація GMRES. Слід зазначити , що хоча оцінки найбільших власних і сингулярних значень, як правило , досить добре після кількох ітерацій, точна оцінка наімалейшего власним / сингулярних зазвичай виходить тільки один раз збіжність досягнута. Перед конвергенцією оцінка, як правило, буде значно більшою за справжнє значення. Це говорить про те, що ви повинні насправді розв’язати рівняння, перш ніж ви зможете визначити правильну толерантність c ϵ . Толерантність до автоматичної конвергенції, яка забезпечує точність, задану користувачем cдля рішення та оцінки найменшого сингулярного значення при поточному стані методу Крилова може зближуватися занадто рано, оскільки оцінка ϵ була набагато більшою, ніж справжня величина.
-ksp_monitor_singular_value
допомогою будь-якої програми PETSc. Див. KSPComputeExtremeSingularValues (), щоб обчислити особливі значення з коду.-ksp_gmres_restart 1000
у PETSc).Іншим способом розгляду цієї проблеми є розгляд інструментів дискретних зворотних задач, тобто проблем, які передбачають розв’язання або min | | А х - б | | 2, де A дуже погано обумовлений (тобто співвідношення між першим і останнім сингулярним значенням σ 1 / σ n велике).
Тут у нас є кілька методів вибору критерію зупинки, і для ітеративного методу я рекомендував би критерій L-кривої, оскільки він включає лише наявні в наявності кількості (ВІДМОВЛЕННЯ: Мій радник запровадив цей метод, тому я, безумовно, упереджений це). Я успішно використовував це в ітеративному методі.
Існують також більш детальні методи пошуку кута, і вони працюють краще, але потребують зберігання значної кількості ітерацій. Пограйте з цим трохи. Якщо ви перебуваєте в matlab, ви можете скористатись інструментами «Regularization Tools», який реалізує частину цього (конкретно, застосована функція «кут»).
Зауважимо, що цей підхід особливо підходить для масштабних проблем, оскільки додатковий час, що займається обчисленням, є незначним.