⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cholesky.h

📁 高效的c++科学算法库
💻 H
字号:
/*                                                           -*- c++ -*- *********************************************************************** * Scientific Library (GNU Public Licence) * * module sparse * * Author: Pierre Aubert paubert@mathinsa.insa-lyon.fr * * $Id: cholesky.h,v 1.2 1998/07/28 11:40:17 paubert Exp $ * * Suggestions: sl@mathinsa.insa-lyon.fr * Bugs:   sl-bugs@mathinsa.insa-lyon.fr  * * For more information, please see the sl++ Home Page: * http://wwwinfo.cern.ch/~ldeniau/sl.html  * *********************************************************************** */#ifndef SL_ALGEBRA_CHOLESKY_DIAGONAL_H#define SL_ALGEBRA_CHOLESKY_DIAGONAL_H#ifdef HAVE_NAMESPACEnamespace sl {#endif    template <typename T_value, typename T_storage>    void cholesky( Matrix<T_value,Diagonal,T_storage> & m, Matrix<Index,TVector> & indx)    {        typedef T_value value_t;                  // declarations        Index j;        Index n=m.n();        Index p=m.p();                  // check for size        if( n != p )            {                cerr << "sl/algebra/diagonal/lu.h: cholesky() matrix must be square" << endl;                throw eMatrixMustBeSquare;            }                for( j=1; j<= n; ++j )            {                if( m(j,j) == 0 )                    {                        cerr << "sl/algebra/diagonal/cholesky.h: cholesky() matrix must be positive definite" << endl;                        throw eMatrixIsNotPositiveDefinite;                    }                else                    m(j,j) = 1.0/m(j,j);            }            } // end cholesky()            template <typename T_value, typename T_storage>    void choleskyLowerSolve( Matrix<T_value,Diagonal,T_storage> const& A,                             Matrix<Index,TVector>              const& indx,                             Matrix<T_value,TVector>            const& B,                             Matrix<T_value,TVector>                 & X )    {        X=A*B;    }    template <typename T_value, typename T_storage>    void choleskyUpperSolve( Matrix<T_value,Diagonal,T_storage> const& A ,                             Matrix<Index,TVector>              const& indx,                             Matrix<T_value,TVector>                 & X )    {    }    template <typename T_value, typename T_storage>    void choleskySolve( Matrix<T_value,Diagonal,T_storage> & A ,                        Matrix<Index,TVector>              & indx,                        Matrix<T_value,TVector>       const& B,                        Matrix<T_value,TVector>            & X )    {        try {            cholesky(A,indx);        }        catch( ErrorCode error )             {                if( error == eMatrixIsNotPositiveDefinite )                    cerr << "sl/algebra/diagonal/cholesky.h: choleskySolve() matrix is not positive definite" << endl;                else if( error == eMatrixMustBeSquare )                    cerr << "sl/algebra/diagonal/cholesky.h: choleskySolve() matrix must be square" << endl;                else                    cerr << "sl/algebra/diagonal/cholesky.h: choleskySolve() unknown exception" << endl;                throw;            }                choleskyLowerSolve(A,indx,B,X);        choleskyUpperSolve(A,indx,X);    }#ifdef HAVE_NAMESPACE}#endif#endif// end of SL_ALGEBRA_CHOLESKY_DIAGONAL_H definition(s)// do not write anything after this line!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -