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
| ConjugateGradient () | |
| template<typename MatrixDerived > | |
| ConjugateGradient (const EigenBase< MatrixDerived > &A) | |
|
| |
| 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 |
|
| |
| 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]
| inline |
Конструктор по умолчанию.
ConjugateGradient() [2/2]
| inlineexplicit |
Инициализировать решатель матрицей A для дальнейшего Ax=b решения.
Этот конструктор является сокращением для конструктора по умолчанию, за которым следует вызов compute().
- Предупреждение
- Этот класс хранит ссылку на матрицу A, а также некоторые предварительно вычисленные значения, зависящие от неё. Поэтому, если A изменится, этот класс станет недействительным. Вызовите compute(), чтобы обновить его с новой матрицей A, или измените копию A.
The documentation for this class was generated from the following file:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1ConjugateGradient.html