Eigen::IDRS
template<typename _MatrixType, typename _Preconditioner>
class Eigen::IDRS< _MatrixType, _Preconditioner >
Метод индуцированного сокращения размерности (IDR(s)) — метод Кристова с короткими рекуррентными соотношениями для решения разреженных квадратных задач.
Этот класс позволяет решать разреженные линейные системы вида A⋅x = b. Векторы x и b могут быть как плотные, так и разреженные. Метод индуцированного сокращения размерности (IDR()) — устойчивый и эффективный метод подпространств Кристова с короткими рекуррентными соотношениями для решения больших несимметричных систем линейных уравнений.
Для невырожденных систем IDR(S) превосходит как BiCGStab, так и BiCGStab(L). Кроме того, IDR(S) может обрабатывать матрицы с комплексными собственными значениями более эффективно, чем BiCGStab.
Многие задачи, которые не сходятся для BiCGSTAB, сходятся для IDR(s) (для больших значений s). И если оба метода сходятся, то сходимость для IDR(s) обычно гораздо быстрее для сложных систем (например, для невырожденных задач).
IDR(s) — метод с ограниченной памятью и конечным числом итераций. В точной арифметике он сходится не более чем за N+N/s итераций, где N — размер системы. Он использует фиксированное число 4+3s векторов. В сравнении, BiCGSTAB завершается за 2N итераций и использует 7 векторов. GMRES завершается не более чем за N итераций и использует I+3 векторов, где I — число итераций. Перезапуск GMRES ограничивает потребление памяти, но разрушает свойство конечного числа итераций.
- Шаблонные параметры
-
_MatrixType тип разреженной матрицы A, может быть плотной или разреженной. _Preconditioner тип предобуславливателя. По умолчанию — DiagonalPreconditioner
Этот класс следует концепции разрешенного решателя.
Максимальное число итераций и значение толерантности можно контролировать с помощью методов setMaxIterations() и setTolerance(). Значения по умолчанию — размер задачи для максимального числа итераций и NumTraits<Scalar>::epsilon() для толерантности.
Толерантность соответствует относительной ошибке остатка: |Ax-b|/|b|
Производительность: при использовании разреженных матриц лучшая производительность достигается для разреженной матрицы в формате с порядком строк. Кроме того, в этом случае можно использовать многопоточность, если код пользователя скомпилирован с включенным OpenMP. Подробности см. в Eigen и многопоточность.
По умолчанию итерации начинаются с x=0 в качестве начального приближения решения. Можно управлять начальным значением с помощью метода solveWithGuess().
IDR(s) также можно использовать в контексте без матриц, см. следующий пример.
- См. также
- класс SimplicialCholesky, DiagonalPreconditioner, IdentityPreconditioner
| template<typename Rhs , typename Dest > | |
| void | _solve_vector_with_guess_impl (const Rhs &b, Dest &x) const |
| IDRS () | |
| template<typename MatrixDerived > | |
| IDRS (const EigenBase< MatrixDerived > &A) | |
| void | setAngle (RealScalar angle) |
| void | setResidualUpdate (bool update) |
| void | setS (Index S) |
| void | setSmoothing (bool smoothing) |
IDRS() [1/2]
| inline |
Конструктор по умолчанию.
IDRS() [2/2]
| inlineexplicit |
Инициализирует решатель матрицей A для дальнейшего Ax=b решения.
Этот конструктор является сокращением для конструктора по умолчанию, за которым следует вызов compute().
- Предупреждение
- Этот класс хранит ссылку на матрицу A, а также некоторые предварительно вычисленные значения, зависящие от нее. Поэтому, если A изменена, этот класс становится недействительным. Вызовите compute(), чтобы обновить его с новой матрицей A, или измените копию A.
_solve_vector_with_guess_impl()
| inline |
Перебирает количество столбцов b и выполняет следующие действия:
- устанавливает толерантность и maxIterations
- Вызывает функцию, содержащую основную процедуру решателя
setAngle()
| inline |
Угол должен быть вещественным скаляром. В IDR(s) значение параметра итерации omega должно выбираться на каждом s+1 шаге. Естественный выбор — выбрать значение, минимизирующее норму следующего остатка. Это соответствует параметру omega = 0. На практике это может привести к значениям omega, настолько малым, что другие параметры итерации не могут быть вычислены с достаточной точностью. В таких случаях лучше увеличить значение omega до тех пор, пока не будет достигнут компромисс между точностью вычислений и уменьшением нормы остатка. Параметр angle =0.7 («поддержание стратегии сходимости») приводит к такому компромиссу.
setResidualUpdate()
| inline |
Параметр replace — логический, определяющий, используется ли стратегия замены остатка для повышения точности решения.
setS()
| inline |
Устанавливает параметр S, указывающий размер теневого пространства. По умолчанию — 4.
setSmoothing()
| inline |
Включает и отключает сглаживание. Сглаживание остатка приводит к монотонно убывающим нормам остатка за счет двух дополнительных векторов хранения и нескольких дополнительных векторных операций. Хотя монотонное уменьшение норм остатка является желательным свойством, скорость сходимости несглаженного и сглаженного процесса в основном одинакова. По умолчанию выключено
The documentation for this class was generated from the following file:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/unsupported/classEigen_1_1IDRS.html