yat/utility/CholeskyDecomposer.h

Code
Comments
Other
Rev Date Author Line
4280 27 Jan 23 peter 1 #ifndef _theplu_yat_utility_cholesky_decomposer_
4280 27 Jan 23 peter 2 #define _theplu_yat_utility_cholesky_decomposer_
4280 27 Jan 23 peter 3
4280 27 Jan 23 peter 4 // $Id$
4280 27 Jan 23 peter 5
4280 27 Jan 23 peter 6 /*
4280 27 Jan 23 peter 7   Copyright (C) 2023 Peter Johansson
4280 27 Jan 23 peter 8
4280 27 Jan 23 peter 9   This file is part of the yat library, https://dev.thep.lu.se/yat
4280 27 Jan 23 peter 10
4280 27 Jan 23 peter 11   The yat library is free software; you can redistribute it and/or
4280 27 Jan 23 peter 12   modify it under the terms of the GNU General Public License as
4280 27 Jan 23 peter 13   published by the Free Software Foundation; either version 3 of the
4280 27 Jan 23 peter 14   License, or (at your option) any later version.
4280 27 Jan 23 peter 15
4280 27 Jan 23 peter 16   The yat library is distributed in the hope that it will be useful,
4280 27 Jan 23 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
4280 27 Jan 23 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4280 27 Jan 23 peter 19   General Public License for more details.
4280 27 Jan 23 peter 20
4280 27 Jan 23 peter 21   You should have received a copy of the GNU General Public License
4280 27 Jan 23 peter 22   along with yat. If not, see <https://www.gnu.org/licenses/>.
4280 27 Jan 23 peter 23 */
4280 27 Jan 23 peter 24
4280 27 Jan 23 peter 25 #include <yat/utility/Matrix.h>
4280 27 Jan 23 peter 26
4280 27 Jan 23 peter 27 namespace theplu {
4280 27 Jan 23 peter 28 namespace yat {
4280 27 Jan 23 peter 29 namespace utility {
4280 27 Jan 23 peter 30
4280 27 Jan 23 peter 31   class VectorBase;
4280 27 Jan 23 peter 32   class VectorMutable;
4280 27 Jan 23 peter 33
4280 27 Jan 23 peter 34   /**
4280 27 Jan 23 peter 35      \brief Wrapper class around
4280 27 Jan 23 peter 36      <a href "https://www.gnu.org/software/gsl/doc/html/linalg.html#cholesky-decomposition">GSL Cholesky Decomposition</a>
4280 27 Jan 23 peter 37
4280 27 Jan 23 peter 38      From the input matrix \c A, the class calculates \c L such that
4280 27 Jan 23 peter 39      \f$ A = L * L^T\f$, \c L is a lower triangular matrix.
4280 27 Jan 23 peter 40
4280 27 Jan 23 peter 41      \since New in yat 0.21
4280 27 Jan 23 peter 42    */
4280 27 Jan 23 peter 43   class CholeskyDecomposer
4280 27 Jan 23 peter 44   {
4280 27 Jan 23 peter 45   public:
4280 27 Jan 23 peter 46     /**
4280 27 Jan 23 peter 47        Input matrix A must be square and positive definite. A is assumed
4280 27 Jan 23 peter 48        to be symmetric and elements above diagnonal are ignored.
4280 27 Jan 23 peter 49      */
4280 27 Jan 23 peter 50     CholeskyDecomposer(const MatrixBase& A);
4280 27 Jan 23 peter 51
4280 27 Jan 23 peter 52     /**
4280 27 Jan 23 peter 53        Input matrix A must be square and positive definite. A is assumed
4280 27 Jan 23 peter 54        to be symmetric and elements above diagnonal are ignored.
4280 27 Jan 23 peter 55      */
4280 27 Jan 23 peter 56     CholeskyDecomposer(Matrix&& A);
4280 27 Jan 23 peter 57
4280 27 Jan 23 peter 58     /**
4280 27 Jan 23 peter 59        Calculate the inverse matrix of \c A and return it in passed
4280 27 Jan 23 peter 60        matrix \c X
4280 27 Jan 23 peter 61      */
4280 27 Jan 23 peter 62     void invert(Matrix& X) const;
4280 27 Jan 23 peter 63
4280 27 Jan 23 peter 64     /**
4280 27 Jan 23 peter 65        \return a reference to matrix \c L
4280 27 Jan 23 peter 66      */
4280 27 Jan 23 peter 67     const Matrix& L(void) const;
4280 27 Jan 23 peter 68
4280 27 Jan 23 peter 69     /**
4280 27 Jan 23 peter 70        Solve the equation system Ax = b for given A and b. Solution is
4280 27 Jan 23 peter 71        returned in \c x.
4280 27 Jan 23 peter 72      */
4280 27 Jan 23 peter 73     void solve(const VectorBase& b, VectorMutable& x) const;
4280 27 Jan 23 peter 74   private:
4280 27 Jan 23 peter 75     void decompose(Matrix&&);
4280 27 Jan 23 peter 76     Matrix L_;
4280 27 Jan 23 peter 77   };
4280 27 Jan 23 peter 78
4280 27 Jan 23 peter 79 }}} // of namespace utility, yat, and theplu
4280 27 Jan 23 peter 80
4280 27 Jan 23 peter 81 #endif