Пожалуйста, никогда не используйте разницу между последовательными итерациями для определения критериев остановки. Это неправильно диагностирует стагнацию конвергенции. Большинство несимметричных итераций матрицы не являются монотонными, и даже GMRES в точной арифметике без перезапусков может стагнировать в течение произвольного числа итераций (вплоть до размерности матрицы) перед тем, как сойтись внезапно. Смотрите примеры в Nachtigal, Reddy и Trefethen (1993) .
Лучший способ определить сходимость
Нас обычно интересует точность нашего решения больше, чем размер остатка. В частности, мы могли бы гарантировать, что разность между приближенным решением и точным решением x удовлетворяет | х н - х | < c для некоторого указанного пользователем c . Оказывается, что можно добиться этого, найдя x n такой, что | A x n - b | < c ϵ где ϵ - наименьшее единственное значение A , обусловленноеxnx
|xn−x|<c
cxn|Axn−b|<cϵ
ϵA
|xn−x|=|A−1A(xn−x)|≤1ϵ|Axn−Ax|=1ϵ|Axn−b|<1ϵ⋅cϵ=c
где мы использовали, что является наибольшим единичным значением A - 1 (вторая строка) и что x точно решает A x = b1/ϵA−1xAx=b (третья строка).
Оценка наименьшего единственного значения ϵ
Точная оценка наименьшего сингулярного значения обычно не доступна непосредственно из задачи, но ее можно оценить как побочный продукт сопряженного градиента или итерации GMRES. Следует отметить , что хотя оценки наибольших собственных и сингулярных значений, как правило , довольно хорошо после нескольких итераций, точная оценка наималейшего собственному / сингулярных обычно получается только один раз сходимость достигнута. До конвергенции оценка, как правило, будет значительно больше, чем истинное значение. Это говорит о том, что вы должны решить уравнения прежде, чем сможете определить правильный допуск c ϵ . Автоматический допуск сходимости, который принимает заданную пользователем точность cϵcϵcдля решения и оценки наименьшее сингулярное значение с текущим состоянием метода Крылова может сходиться слишком рано, потому что оценка ϵ была намного больше истинного значения.ϵϵ
Примечания
- Выше обсуждение также работает с заменено левым-выдержано оператором P - 1 A и выдержано остаточный P - 1 ( х п - б ) или с правым выдержано оператором P - 1 и ошибками Р ( х п - х ) . Если П - 1AP−1AP−1(Axn−b)AP−1P(xn−x)P−1является хорошим предобусловливателем, предобусловленный оператор будет хорошо подготовлен. Для левого предварительного кондиционирования это означает, что предварительно обработанный остаток может быть сделан небольшим, но истинный остаток может не быть. Для правильной предварительной обработки, легко сделать маленьким, но истинная ошибка | х н - х | может не быть. Это объясняет, почему левое предварительное кондиционирование лучше для уменьшения ошибок, в то время как правильное предварительное кондиционирование лучше для уменьшения остатка (и для отладки нестабильных предварительных кондиционеров).|P(xn−x)||xn−x|
- Смотрите этот ответ для более подробного обсуждения норм, минимизированных GMRES и CG.
- Оценки экстремальных сингулярных значений можно отслеживать с
-ksp_monitor_singular_value
помощью любой программы PETSc. См. KSPComputeExtremeSingularValues () для вычисления особых значений из кода.
- При использовании GMRES для оценки единичных значений крайне важно, чтобы перезапуски не использовались (например,
-ksp_gmres_restart 1000
в PETSc).