IT++ Logo

cholesky.cpp

Go to the documentation of this file.
00001 
00030 #ifndef _MSC_VER
00031 #  include <itpp/config.h>
00032 #else
00033 #  include <itpp/config_msvc.h>
00034 #endif
00035 
00036 #if defined(HAVE_LAPACK)
00037 #  include <itpp/base/algebra/lapack.h>
00038 #endif
00039 
00040 #include <itpp/base/algebra/cholesky.h>
00041 
00042 
00043 namespace itpp {
00044 
00045 #if defined(HAVE_LAPACK)
00046 
00047   bool chol(const mat &X, mat &F)
00048   {
00049 
00050     char uplo='U';
00051     int n, lda, info;
00052     n = lda = X.rows();
00053 
00054     F = X; // input matrix is overwritten
00055 
00056     dpotrf_(&uplo, &n, F._data(), &lda, &info);
00057 
00058     // Set lower part to zero
00059     for (int i=0; i<n; i++)
00060       for(int j=i+1; j<n; j++)
00061         F(j,i) = 0;
00062 
00063     return (info==0);
00064   }
00065 
00066   bool chol(const cmat &X, cmat &F)
00067   {
00068     char uplo='U';
00069     int n, lda, info;
00070     n = lda = X.rows();
00071 
00072     F = X; // input matrix is overwritten
00073 
00074     zpotrf_(&uplo, &n, F._data(), &lda, &info);
00075 
00076     // Set lower part to zero
00077     for (int i=0; i<n; i++)
00078       for(int j=i+1; j<n; j++)
00079         F(j,i) = 0;
00080 
00081     return (info==0);
00082   }
00083 
00084 #else // HAVE_LAPACK
00085 
00086   bool chol(const mat &X, mat &F)
00087   {
00088     it_error("LAPACK library is needed to use chol() function");
00089     return false;
00090   }
00091 
00092   bool chol(const cmat &X, cmat &F)
00093   {
00094 
00095     it_error("LAPACK library is needed to use chol() function");
00096     return false;
00097   }
00098 
00099 #endif // HAVE_LAPACK
00100 
00101   cmat chol(const cmat &X)
00102   {
00103     cmat F;
00104     if (!chol(X, F)) {
00105       it_warning("cholesky factorization didn't succeed");
00106     }
00107 
00108     return F;
00109   }
00110 
00111   mat chol(const mat &X)
00112   {
00113     mat F;
00114     if (!chol(X, F)) {
00115       it_warning("cholesky factorization didn't succeed");
00116     }
00117 
00118     return F;
00119   }
00120 
00121 } // namespace itpp
SourceForge Logo

Generated on Sun Apr 20 12:40:05 2008 for IT++ by Doxygen 1.5.5