У меня есть PETSc, Mat
и я хочу оценить его состояние.
источник
У меня есть PETSc, Mat
и я хочу оценить его состояние.
Для небольших матриц число условий может быть надежно вычислено с использованием разложения по сингулярным числам. Сделай 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 ), поэтому в итоге вы получите оценку для предобусловленного оператора.
Как правило, это будет точным для самых больших значений единственного числа, но может переоценить наименьшее значение единственного числа, если метод не сходится. Если у вас есть решатель для матрицы (например, с использованием KSPSolve()
), то вы можете оценить наименьшее единичное значение используя ту же процедуру, что и для A - 1 .
Используйте SLEPc, если вам нужны более точные оценки наименьшего сингулярного значения (и для всех других проблем с собственным значением и сингулярным значением).