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_FloatCHOL_h)
00026 #define octave_FloatCHOL_h 1
00027
00028 #include <iosfwd>
00029
00030 #include "fMatrix.h"
00031 #include "fColVector.h"
00032
00033 class
00034 OCTAVE_API
00035 FloatCHOL
00036 {
00037 public:
00038
00039 FloatCHOL (void) : chol_mat () { }
00040
00041 FloatCHOL (const FloatMatrix& a, bool calc_cond = false) { init (a, calc_cond); }
00042
00043 FloatCHOL (const FloatMatrix& a, octave_idx_type& info, bool calc_cond = false)
00044 { info = init (a, calc_cond); }
00045
00046 FloatCHOL (const FloatCHOL& a) : chol_mat (a.chol_mat), xrcond (a.xrcond) { }
00047
00048 FloatCHOL& operator = (const FloatCHOL& a)
00049 {
00050 if (this != &a)
00051 {
00052 chol_mat = a.chol_mat;
00053 xrcond = a.xrcond;
00054 }
00055 return *this;
00056 }
00057
00058 FloatMatrix chol_matrix (void) const { return chol_mat; }
00059
00060 float rcond (void) const { return xrcond; }
00061
00062
00063 FloatMatrix inverse (void) const;
00064
00065 void set (const FloatMatrix& R);
00066
00067 void update (const FloatColumnVector& u);
00068
00069 octave_idx_type downdate (const FloatColumnVector& u);
00070
00071 octave_idx_type insert_sym (const FloatColumnVector& 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 FloatCHOL& a);
00078
00079 private:
00080
00081 FloatMatrix chol_mat;
00082
00083 float xrcond;
00084
00085 octave_idx_type init (const FloatMatrix& a, bool calc_cond);
00086 };
00087
00088 FloatMatrix OCTAVE_API chol2inv (const FloatMatrix& r);
00089
00090 #endif
00091
00092
00093
00094
00095
00096