Spec-Zone.ru › Eigen3

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
Inheritance graph
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]

template<typename _MatrixType , typename _Preconditioner >
Eigen::IDRS< _MatrixType, _Preconditioner >::IDRS ( )
inline

Конструктор по умолчанию.

IDRS() [2/2]

template<typename _MatrixType , typename _Preconditioner >
template<typename MatrixDerived >
Eigen::IDRS< _MatrixType, _Preconditioner >::IDRS ( const EigenBase< MatrixDerived > & A )
inlineexplicit

Инициализирует решатель матрицей A для дальнейшего Ax=b решения.

Этот конструктор является сокращением для конструктора по умолчанию, за которым следует вызов compute().

Предупреждение
Этот класс хранит ссылку на матрицу A, а также некоторые предварительно вычисленные значения, зависящие от нее. Поэтому, если A изменена, этот класс становится недействительным. Вызовите compute(), чтобы обновить его с новой матрицей A, или измените копию A.

_solve_vector_with_guess_impl()

template<typename _MatrixType , typename _Preconditioner >
template<typename Rhs , typename Dest >
void Eigen::IDRS< _MatrixType, _Preconditioner >::_solve_vector_with_guess_impl ( const Rhs & b,
Dest & x
) const
inline

Перебирает количество столбцов b и выполняет следующие действия:

  1. устанавливает толерантность и maxIterations
  2. Вызывает функцию, содержащую основную процедуру решателя

setAngle()

template<typename _MatrixType , typename _Preconditioner >
void Eigen::IDRS< _MatrixType, _Preconditioner >::setAngle ( RealScalar angle )
inline

Угол должен быть вещественным скаляром. В IDR(s) значение параметра итерации omega должно выбираться на каждом s+1 шаге. Естественный выбор — выбрать значение, минимизирующее норму следующего остатка. Это соответствует параметру omega = 0. На практике это может привести к значениям omega, настолько малым, что другие параметры итерации не могут быть вычислены с достаточной точностью. В таких случаях лучше увеличить значение omega до тех пор, пока не будет достигнут компромисс между точностью вычислений и уменьшением нормы остатка. Параметр angle =0.7 («поддержание стратегии сходимости») приводит к такому компромиссу.

setResidualUpdate()

template<typename _MatrixType , typename _Preconditioner >
void Eigen::IDRS< _MatrixType, _Preconditioner >::setResidualUpdate ( bool update )
inline

Параметр replace — логический, определяющий, используется ли стратегия замены остатка для повышения точности решения.

setS()

template<typename _MatrixType , typename _Preconditioner >
void Eigen::IDRS< _MatrixType, _Preconditioner >::setS ( Index S )
inline

Устанавливает параметр S, указывающий размер теневого пространства. По умолчанию — 4.

setSmoothing()

template<typename _MatrixType , typename _Preconditioner >
void Eigen::IDRS< _MatrixType, _Preconditioner >::setSmoothing ( bool smoothing )
inline

Включает и отключает сглаживание. Сглаживание остатка приводит к монотонно убывающим нормам остатка за счет двух дополнительных векторов хранения и нескольких дополнительных векторных операций. Хотя монотонное уменьшение норм остатка является желательным свойством, скорость сходимости несглаженного и сглаженного процесса в основном одинакова. По умолчанию выключено


The documentation for this class was generated from the following file:
  • IDRS.h

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/unsupported/classEigen_1_1IDRS.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API