Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifdef HAVE_CONFIG_H
00025 #include <config.h>
00026 #endif
00027
00028 #include "SparsedbleCHOL.h"
00029
00030
00031 #define OCTAVE_CHOLMOD_TYPE CHOLMOD_REAL
00032 #include "sparse-base-chol.h"
00033 #include "sparse-base-chol.cc"
00034 template class sparse_base_chol <SparseMatrix, double, SparseMatrix>;
00035
00036
00037 SparseMatrix
00038 chol2inv (const SparseMatrix& r)
00039 {
00040 octave_idx_type r_nr = r.rows ();
00041 octave_idx_type r_nc = r.cols ();
00042 SparseMatrix retval;
00043
00044 if (r_nr == r_nc)
00045 {
00046 MatrixType mattype (r);
00047 int typ = mattype.type (false);
00048 double rcond;
00049 octave_idx_type info;
00050 SparseMatrix rinv;
00051
00052 if (typ == MatrixType::Upper)
00053 {
00054 rinv = r.inverse(mattype, info, rcond, true, false);
00055 retval = rinv.transpose() * rinv;
00056 }
00057 else if (typ == MatrixType::Lower)
00058 {
00059 rinv = r.transpose().inverse(mattype, info, rcond, true, false);
00060 retval = rinv.transpose() * rinv;
00061 }
00062 else
00063 (*current_liboctave_error_handler)
00064 ("spchol2inv requires triangular matrix");
00065 }
00066 else
00067 (*current_liboctave_error_handler) ("spchol2inv requires square matrix");
00068
00069 return retval;
00070 }