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

Ответы:

11

Для небольших матриц число условий может быть надежно вычислено с использованием разложения по сингулярным числам. Сделай KSPSolve()с матрицей и беги с -pc_type svd -pc_svd_monitor.

Для больших матриц вы можете оценить число условий, используя метод Крылова. Например, итерация Арнольди, выполняемая GMRES, постепенно вычисляет разложение Хессенберга. Экстремальные сингулярные значения и собственные значения матрицы Гессенберга являются хорошими приближениями к значениям исходной матрицы. Чтобы PETSc оценил собственные значения таким образом, запустите

-ksp_monitor_singular_value -ksp_type gmres -ksp_gmres_restart 1000 -pc_type none

Эти параметры говорят об оценке экстремальных сингулярных значений на каждой итерации Крылова. GMRES используется для вычисления пространства Крылова (вы также можете использовать CG) с огромным перезапуском. При перезапуске GMRES отбрасывает текущее пространство Крылова, поэтому весь прогресс в оценках сингулярных значений теряется при перезапуске. Последний вариант -pc_type noneговорит выполнить эту итерацию на необусловленной матрице. По умолчанию будет использоваться предобусловленный оператор ( или A P - 1 ), поэтому в итоге вы получите оценку для предобусловленного оператора.п-1AAп-1

Как правило, это будет точным для самых больших значений единственного числа, но может переоценить наименьшее значение единственного числа, если метод не сходится. Если у вас есть решатель для матрицы (например, с использованием KSPSolve()), то вы можете оценить наименьшее единичное значение используя ту же процедуру, что и для A - 1 .AA-1

Используйте SLEPc, если вам нужны более точные оценки наименьшего сингулярного значения (и для всех других проблем с собственным значением и сингулярным значением).

Джед браун
источник