Changeset 437
- Timestamp:
- 07/28/09 15:31:57 (15 years ago)
- Location:
- library
- Files:
-
- 3 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/math/chmat.cpp
r434 r437 17 17 mat chmat::to_mat() const {mat F=Ch.T() *Ch;return F;}; 18 18 void chmat::mult_sym ( const mat &C ) { 19 it_error ( "not implemented" ); 19 it_assert_debug(C.cols()==dim, "Wrong dimension of U"); 20 if(!qr(Ch*C.T(), Ch)) {it_warning("QR unstable in chmat mult_sym");} 20 21 }; 21 22 void chmat::mult_sym ( const mat &C , chmat &U ) const { 22 mat Z=C*Ch;23 U.Ch= chol(Z*Z.T());23 it_assert_debug(C.cols()==U.dim, "Wrong dimension of U"); 24 if(!qr(Ch*C.T(), U.Ch)) {it_warning("QR unstable in chmat mult_sym");} 24 25 }; 25 26 void chmat::mult_sym_t ( const mat &C ) { 26 it_error ( "not implemented" ); 27 it_assert_debug(C.rows()==dim, "Wrong dimension of U"); 28 if(!qr(Ch*C, Ch)) {it_warning("QR unstable in chmat mult_sym");} 27 29 }; 28 30 void chmat::mult_sym_t ( const mat &C, chmat &U ) const { 29 it_error ( "not implemented" ); 31 it_assert_debug(C.rows()==U.dim, "Wrong dimension of U"); 32 if(!qr(Ch*C, U.Ch)) {it_warning("QR unstable in chmat mult_sym");} 30 33 }; 31 34 double chmat::logdet() const { -
library/bdm/math/chmat.h
r384 r437 40 40 void clear(); 41 41 //! add another chmat \c A2 with weight \c w. 42 void add ( const chmat &A2, double w=1.0 ) {}; 42 void add ( const chmat &A2, double w=1.0 ) { 43 it_assert_debug(dim==A2.dim,"Matrices of unequal dimension"); 44 mat pre=concat_vertical(Ch,sqrt(w)*A2.Ch); 45 mat post=zeros(pre.rows(),pre.cols()); 46 if(!qr(pre,post)) {it_warning("Unstable QR in chmat add");} 47 Ch=post(0,dim-1,0,dim-1); 48 }; 43 49 //!Inversion in the same form, i.e. cholesky 44 50 void inv ( chmat &Inv ) const { ( Inv.Ch ) = itpp::inv ( Ch ).T();}; //Fixme: can be more efficient … … 80 86 //! Operators 81 87 chmat& operator += ( const chmat &A2 ); 82 chmat& operator -= ( const chmat &A2 ) ; 83 chmat& operator * ( const chmat &A2 ); 84 chmat& operator * ( const double &d ){Ch*d; return *this;}; 88 chmat& operator -= ( const chmat &A2 ); 89 chmat& operator * ( const double &d ){Ch*sqrt(d); return *this;}; 85 90 chmat& operator = ( const chmat &A2 ){Ch=A2.Ch;dim=A2.dim;return *this;} 91 chmat& operator *= ( double x ){Ch*=sqrt(x); return *this;}; 86 92 }; 87 93 -
library/tests/square_mat_test.cpp
r434 r437 100 100 101 101 TEST(test_chmat) { 102 test_square_matrix _minimum<chmat>(epsilon);102 test_square_matrix<chmat>(epsilon); 103 103 }