Spec-Zone.ru › Eigen3

Eigen::СопряжённыйГрадиент

template<typename _MatrixType, int _UpLo, typename _Preconditioner>
class Eigen::ConjugateGradient< _MatrixType, _UpLo, _Preconditioner >

Решатель сопряжённых градиентов для разреженных (или плотных) самосопряжённых задач.

Этот класс позволяет решать линейные проблемы вида A.x = b с помощью итерационного алгоритма сопряжённых градиентов. Матрица A должна быть самосопряжённой. Матрица A и векторы x и b могут быть как плотные, так и разреженные.

Параметры шаблона
_MatrixType тип матрицы A, может быть плотной или разреженной.
_UpLo треугольная часть, которая будет использована для вычислений. Она может быть нижней, Upper, или Lower|Upper, в которых будут рассматриваться все элементы матрицы. По умолчанию Lower, лучшая производительность достигается при Lower|Upper.
_Preconditioner тип предобуславливателя. По умолчанию DiagonalPreconditioner

Этот класс соответствует концепции разрешенного решателя.

Максимальное количество итераций и значение толерантности можно контролировать с помощью методов setMaxIterations() и setTolerance(). Значения по умолчанию — размер задачи для максимального числа итераций и NumTraits<Scalar>::epsilon() для толерантности.

Толерантность соответствует относительной ошибке остатка: |Ax-b|/|b|

Производительность: Несмотря на то, что значение по умолчанию _UpLo является Lower, значительно более высокая производительность достигается при использовании полной матрицы и значении Lower|Upper в качестве параметра шаблона _UpLo. Кроме того, в этом случае можно использовать многопоточность, если код пользователя скомпилирован с включённой поддержкой OpenMP. Подробнее об этом см. Eigen и многопоточность.

Этот класс можно использовать как класс прямого решателя. Вот пример типичного использования:

int n = 10000;
VectorXd x(n), b(n);
SparseMatrix<double> A(n,n);
// fill A and b
ConjugateGradient<SparseMatrix<double>, Lower|Upper> cg;
cg.compute(A);
x = cg.solve(b);
std::cout << "#iterations:     " << cg.iterations() << std::endl;
std::cout << "estimated error: " << cg.error()      << std::endl;
// update b, and solve again
x = cg.solve(b);

По умолчанию итерации начинаются с x=0 в качестве начального приближения решения. Можно управлять началом с помощью метода solveWithGuess().

ConjugateGradient также может использоваться в контексте без матрицы, см. следующий пример.

См. также
класс LeastSquaresConjugateGradient, класс SimplicialCholesky, DiagonalPreconditioner, IdentityPreconditioner
Inheritance graph
ConjugateGradient ()
template<typename MatrixDerived >
ConjugateGradient (const EigenBase< MatrixDerived > &A)
- Публичные члены-функции, унаследованные от Eigen::IterativeSolverBase< ConjugateGradient< _MatrixType, _UpLo, _Preconditioner > >
ConjugateGradient< _MatrixType, _UpLo, _Preconditioner > & analyzePattern (const EigenBase< MatrixDerived > &A)
ConjugateGradient< _MatrixType, _UpLo, _Preconditioner > & compute (const EigenBase< MatrixDerived > &A)
RealScalar error () const
ConjugateGradient< _MatrixType, _UpLo, _Preconditioner > & factorize (const EigenBase< MatrixDerived > &A)
ComputationInfo info () const
Index iterations () const
IterativeSolverBase ()
IterativeSolverBase (const EigenBase< MatrixDerived > &A)
Index maxIterations () const
Preconditioner & preconditioner ()
const Preconditioner & preconditioner () const
ConjugateGradient< _MatrixType, _UpLo, _Preconditioner > & setMaxIterations (Index maxIters)
ConjugateGradient< _MatrixType, _UpLo, _Preconditioner > & setTolerance (const RealScalar &tolerance)
const SolveWithGuess< ConjugateGradient< _MatrixType, _UpLo, _Preconditioner >, Rhs, Guess > solveWithGuess (const MatrixBase< Rhs > &b, const Guess &x0) const
RealScalar tolerance () const
- Публичные члены-функции, унаследованные от Eigen::SparseSolverBase< Derived >
template<typename Rhs >
const Solve< Derived, Rhs > solve (const MatrixBase< Rhs > &b) const
template<typename Rhs >
const Solve< Derived, Rhs > solve (const SparseMatrixBase< Rhs > &b) const
SparseSolverBase ()

ConjugateGradient() [1/2]

template<typename _MatrixType , int _UpLo, typename _Preconditioner >
Eigen::ConjugateGradient< _MatrixType, _UpLo, _Preconditioner >::ConjugateGradient ( )
inline

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

ConjugateGradient() [2/2]

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

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

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

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

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

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

Spec-Zone.ru

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