00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #if !defined (octave_CHOL_h)
00026 #define octave_CHOL_h 1
00027
00028 #include <iosfwd>
00029
00030 #include "dMatrix.h"
00031 #include "dColVector.h"
00032
00033 class
00034 OCTAVE_API
00035 CHOL
00036 {
00037 public:
00038
00039 CHOL (void) : chol_mat () { }
00040
00041 CHOL (const Matrix& a, bool calc_cond = false) { init (a, calc_cond); }
00042
00043 CHOL (const Matrix& a, octave_idx_type& info, bool calc_cond = false)
00044 { info = init (a, calc_cond); }
00045
00046 CHOL (const CHOL& a) : chol_mat (a.chol_mat), xrcond (a.xrcond) { }
00047
00048 CHOL& operator = (const CHOL& a)
00049 {
00050 if (this != &a)
00051 {
00052 chol_mat = a.chol_mat;
00053 xrcond = a.xrcond;
00054 }
00055 return *this;
00056 }
00057
00058 Matrix chol_matrix (void) const { return chol_mat; }
00059
00060 double rcond (void) const { return xrcond; }
00061
00062
00063 Matrix inverse (void) const;
00064
00065 void set (const Matrix& R);
00066
00067 void update (const ColumnVector& u);
00068
00069 octave_idx_type downdate (const ColumnVector& u);
00070
00071 octave_idx_type insert_sym (const ColumnVector& u, octave_idx_type j);
00072
00073 void delete_sym (octave_idx_type j);
00074
00075 void shift_sym (octave_idx_type i, octave_idx_type j);
00076
00077 friend OCTAVE_API std::ostream& operator << (std::ostream& os, const CHOL& a);
00078
00079 private:
00080
00081 Matrix chol_mat;
00082
00083 double xrcond;
00084
00085 octave_idx_type init (const Matrix& a, bool calc_cond);
00086 };
00087
00088 Matrix OCTAVE_API chol2inv (const Matrix& r);
00089
00090 #endif
00091
00092
00093
00094
00095
00096