#include <matrix_int.h>
Public Methods | |
matrix_int () | |
matrix_int (size_t new_rows, size_t new_cols, bool clear=true) | |
void | copy (const matrix_int &other) |
template<class oclass> void | copy (const oclass &other) |
matrix_int (const matrix_int &other) | |
template<class oclass> | matrix_int (const oclass &other) |
~matrix_int () | |
size_t | get_rows () const |
size_t | get_cols () const |
size_t | size1 () const |
size_t | size2 () const |
void | dimensions (size_t *num_rows, size_t *num_cols) const |
int | get_element (size_t row, size_t col) const |
const int& | operator() (size_t row, size_t col) const |
int& | operator() (size_t row, size_t col) |
void | set_element (size_t row, size_t col, const int &v) |
void | set_elements (const int &new_value) |
void | set_all (const int &new_value) |
void | set_zero () |
void | set_dimensions (size_t new_rows, size_t new_cols) |
void | load (const char *filename) |
void | save (const char *filename) const |
int | fwrite (FILE *stream) const |
int | fread (FILE *stream) |
void | load_binary (const char *filename) |
void | save_binary (const char *filename) const |
bool | operator== (const matrix_int &other) const |
bool | operator!= (const matrix_int &other) const |
matrix_int& | operator= (const matrix_int &other) |
template<class omatrix> matrix_int& | operator= (const omatrix &other) |
converts from any other matrix type. More... | |
matrix_int | operator+ (const matrix_int &other) const |
matrix_int | operator+ (const int &f) const |
matrix_int& | operator+= (const int &f) |
matrix_int& | operator+= (const matrix_int &other) |
matrix_int | operator- (const matrix_int &other) const |
matrix_int | operator- (const int &f) const |
matrix_int& | operator-= (const int &f) |
matrix_int& | operator-= (const matrix_int &other) |
matrix_int | operator * (const matrix_int &other) const |
matrix_int | operator * (const int &f) const |
matrix_int& | operator *= (const int &f) |
matrix_int& | operator *= (const matrix_int &other) |
matrix_int | operator/ (const int &) const |
matrix_int& | operator/= (const int &) |
matrix_int | transpose () const |
matrix_int | LU_decomp (gsl::permutation *perm=NULL, int *psign=NULL) const |
matrix_int | LU_invert () const |
int | sum () const |
double | LU_lndet () const |
vector_int_view | row (size_t rowindex) |
const vector_int_view | row (size_t rowindex) const |
vector_int_view | column (size_t colindex) |
const vector_int_view | column (size_t colindex) const |
matrix_int | get_row (size_t rowindex) const |
matrix_int | get_col (size_t colindex) const |
matrix_int | row_sum () const |
matrix_int | column_sum () const |
double | trace () const |
int | cholesky_decomp (matrix_int &a) const |
matrix_int | covariance () const |
bool | is_square () const |
void | set_diagonal (int f) |
void | identity (size_t k) |
double | norm (double n) const |
gsl_matrix_int* | gslobj () |
const gsl_matrix_int* | gslobj () const |
Friends | |
ostream& | operator<< (ostream &os, const matrix_int &m) |
matrix_int | operator+ (const int &f, const matrix_int &other) |
matrix_int | operator- (const int &f, const matrix_int &other) |
matrix_int | operator * (const int &f, const matrix_int &other) |
|
Definition at line 77 of file matrix_int.cc. 00077 :m(NULL) 00078 { 00079 } |
|
Definition at line 81 of file matrix_int.cc. 00082 { 00083 if(clear){m = gsl_matrix_int_calloc( rows, cols );} 00084 else {m = gsl_matrix_int_alloc ( rows, cols );} 00085 } |
|
Definition at line 74 of file matrix_int.h. 00074 :m(NULL) {copy(other);} |
|
Definition at line 77 of file matrix_int.h. 00077 :m(NULL) {copy(other);} |
|
Definition at line 88 of file matrix_int.cc. 00089 { 00090 if ( m ) {gsl_matrix_int_free( m );} 00091 } |
|
Definition at line 354 of file matrix_int.cc. 00355 { 00356 bool retPerm=perm!=NULL; 00357 if(!perm){perm = new permutation();} 00358 int sign; 00359 perm->resize( get_rows() ); 00360 matrix result=*this;// this does conversion if necessary 00361 gsl_linalg_LU_decomp( result.m, perm->gsldata, &sign ); 00362 00363 if(!retPerm){delete perm;} 00364 if(psign){*psign=sign;} 00365 00366 return result;// this does conversion if necessary 00367 } |
|
Definition at line 369 of file matrix_int.cc. |
|
returns logarithm of the determinant of the matrix. Definition at line 397 of file matrix_int.cc. 00398 { 00399 matrix a=*this; 00400 a=a.LU_decomp(); 00401 00402 // calculate log determinant from LU decomposed matrix "a" 00403 return gsl_linalg_LU_lndet( a.m ); 00404 } |
|
calculates cholesky decomposition of the matrix, returning success if matrix is positive definite. Definition at line 530 of file matrix_int.cc. 00531 { 00532 int i, j; 00533 int error; 00534 matrix result=*this; 00535 // do decomposition with call to g_s_l 00536 error = gsl_linalg_cholesky_decomp( result.m ); 00537 a=result; 00538 return error; 00539 } |
|
Definition at line 430 of file matrix_int.cc. 00431 { 00432 gsl_vector_int_view view=gsl_matrix_int_column(m, colindex); 00433 return vector_int_view::create_vector_view(view); 00434 } |
|
returns a vector_int_view of a single column of the matrix. Definition at line 422 of file matrix_int.cc. 00423 { 00424 gsl_vector_int_view view=gsl_matrix_int_column(m, colindex); 00425 return vector_int_view::create_vector_view(view); 00426 } |
|
calculates sum of columns returned as a row matrix. Definition at line 495 of file matrix_int.cc. |
|
Definition at line 63 of file matrix_int.h. 00064 { 00065 set_dimensions( other.get_rows(), other.get_cols() ); 00066 for ( size_t i = 0; i < get_rows(); i++ ) 00067 { 00068 for ( size_t j = 0; j < get_cols(); j++ ) 00069 { 00070 gsl_matrix_int_set( m, i, j, (int)other(i,j)); 00071 } 00072 } 00073 } |
|
Definition at line 57 of file matrix_int.h. Referenced by matrix_int(), and operator=().
00058 { 00059 set_dimensions(other.size1(),other.size2()); 00060 gsl_matrix_int_memcpy( m, other.m ); 00061 } |
|
calculates covariance of the matrix columns. |
|
Definition at line 98 of file matrix_int.cc. 00099 { 00100 *num_rows = m->size1; 00101 *num_cols = m->size2; 00102 } |
|
Definition at line 117 of file matrix_int.h. 00117 {return gsl_matrix_int_fread (stream, m);} |
|
Definition at line 114 of file matrix_int.h. 00114 {return gsl_matrix_int_fwrite (stream, m);} |
|
returns a column matrix containing a single column of the matrix. Definition at line 458 of file matrix_int.cc. Referenced by column_sum().
00459 { 00460 matrix_int columnmatrix( get_rows(), 1 ); 00461 gsl_vector_int *tempvector = gsl_vector_int_calloc( get_rows() ); 00462 00463 if ( colindex < 0 || colindex >= get_cols() ) 00464 { 00465 cerr << "column index must be in range 0 to " << get_cols() - 1 << endl; 00466 exit( 1 ); 00467 } 00468 00469 gsl_matrix_int_get_col( tempvector, m, colindex ); 00470 gsl_matrix_int_set_col( columnmatrix.m, 0, tempvector ); 00471 for ( int i = 0; i < get_rows(); i++ ) 00472 cout << gsl_vector_int_get( tempvector, i ) << endl; 00473 00474 // tidy up 00475 gsl_vector_int_free( tempvector ); 00476 00477 return( columnmatrix ); 00478 } |
|
Definition at line 86 of file matrix_int.h. Referenced by column_sum(), copy(), get_col(), get_row(), is_square(), norm(), set_diagonal(), set_dimensions(), sum(), trace(), and transpose().
00086 {return m->size2;} |
|
Definition at line 96 of file matrix_int.h. Referenced by norm(), operator==(), and trace().
00096 {return gsl_matrix_int_get( m, row, col ) ;} |
|
returns a column matrix containing a single row of the matrix. Definition at line 437 of file matrix_int.cc. Referenced by row_sum().
00438 { 00439 matrix_int rowmatrix( 1, get_cols() ); 00440 gsl_vector_int *tempvector = gsl_vector_int_calloc( get_cols() ); 00441 00442 if ( rowindex < 0 || rowindex >= get_rows() ) 00443 { 00444 cerr << "row index must be in range 0 to " << get_rows() - 1 << endl; 00445 exit( 1 ); 00446 } 00447 00448 gsl_matrix_int_get_row( tempvector, m, rowindex ); 00449 gsl_matrix_int_set_row( rowmatrix.m, 0, tempvector ); 00450 00451 // tidy up 00452 gsl_vector_int_free( tempvector ); 00453 00454 return( rowmatrix ); 00455 } |
|
Definition at line 84 of file matrix_int.h. Referenced by LU_decomp(), copy(), get_col(), get_row(), is_square(), norm(), operator *(), row_sum(), set_diagonal(), set_dimensions(), sum(), trace(), and transpose().
00084 {return m->size1;} |
|
Definition at line 217 of file matrix_int.h. 00217 {if (!m){cout << "matrix_int::gslobj ERROR, data not initialized!! " << endl; exit(-1);}return m;} |
|
for interfacing with gsl c Definition at line 216 of file matrix_int.h. 00216 {if (!m){cout << "matrix_int::gslobj ERROR, data not initialized!! " << endl; exit(-1);}return m;} |
|
sets matrix to a k dimensional unit matrix. Definition at line 542 of file matrix_int.cc. 00543 { 00544 set_dimensions( k, k ); 00545 set_zero(); 00546 set_diagonal( 1 ); 00547 } |
|
returns 1 if matrix is square, 0 otherwise. Definition at line 559 of file matrix_int.cc. |
|
Definition at line 122 of file matrix_int.cc. 00123 { 00124 FILE * f = fopen( filename, "r" ) ; 00125 matrix temp; 00126 gsl_matrix_fread ( f, temp.m ); 00127 fclose (f); 00128 *this = temp; 00129 } |
|
Definition at line 165 of file matrix_int.cc. 00166 { 00167 ; 00168 } |
|
returns sum of nth power of all elements. Definition at line 567 of file matrix_int.cc. 00568 { 00569 int i, j; 00570 double sum = 0.0; 00571 00572 for ( i = 0; i < get_rows(); i++ ) { 00573 for ( j = 0; j < get_cols(); j++ ) { 00574 sum += pow( get_element( i, j ), n ); 00575 } 00576 } 00577 00578 return sum; 00579 } |
|
Definition at line 285 of file matrix_int.cc. 00286 { 00287 matrix_int result( *this ); 00288 gsl_matrix_int_scale( result.m, f ); 00289 return( result ); 00290 } |
|
Definition at line 272 of file matrix_int.cc. 00273 { 00274 matrix result( get_rows(), other.get_cols() ); 00275 #ifdef type_is_double 00276 gsl_linalg_matmult(m,other.m,result.m); 00277 #else //type_is_double 00278 matrix a=*this; 00279 matrix b=other; 00280 gsl_linalg_matmult(a.m,b.m,result.m); 00281 #endif //type_is_double 00282 return result ; 00283 } |
|
Definition at line 307 of file matrix_int.cc. 00308 { 00309 *this=(*this)*other; 00310 return( *this ); 00311 } |
|
Definition at line 300 of file matrix_int.cc. 00301 { 00302 gsl_matrix_int_scale( m, f ); 00303 00304 return( *this ); 00305 } |
|
Definition at line 125 of file matrix_int.h. 00125 {return !((*this)==other);} |
|
Definition at line 98 of file matrix_int.h. 00098 {return *gsl_matrix_int_ptr( m, row, col ) ;} |
|
Definition at line 97 of file matrix_int.h. 00097 {return *gsl_matrix_int_ptr( m, row, col ) ;} |
|
Definition at line 203 of file matrix_int.cc. 00204 { 00205 matrix_int result( *this ); 00206 gsl_matrix_int_add_constant( result.m, f ); 00207 00208 return( result ); 00209 } |
|
Definition at line 196 of file matrix_int.cc. 00197 { 00198 matrix_int result(*this); 00199 gsl_matrix_int_add( result.m, other.m ); 00200 return result; 00201 } |
|
Definition at line 226 of file matrix_int.cc. 00227 { 00228 gsl_matrix_int_add( m, other.m ); 00229 00230 return( *this ); 00231 } |
|
Definition at line 219 of file matrix_int.cc. 00220 { 00221 gsl_matrix_int_add_constant( m, f ); 00222 00223 return( *this ); 00224 } |
|
Definition at line 241 of file matrix_int.cc. 00242 { 00243 matrix_int result( *this ); 00244 gsl_matrix_int_add_constant( result.m, -f ); 00245 00246 return( result ); 00247 } |
|
Definition at line 233 of file matrix_int.cc. 00234 { 00235 matrix_int result( *this ); 00236 gsl_matrix_int_sub( result.m, other.m ); 00237 00238 return( result ); 00239 } |
|
Definition at line 264 of file matrix_int.cc. 00265 { 00266 gsl_matrix_int_sub( m, other.m ); 00267 00268 return( *this ); 00269 } |
|
Definition at line 257 of file matrix_int.cc. 00258 { 00259 gsl_matrix_int_add_constant( m, -f ); 00260 00261 return( *this ); 00262 } |
|
Definition at line 313 of file matrix_int.cc. 00314 { 00315 matrix_int result( *this ); 00316 00317 if ( f != 0.0 ) { 00318 gsl_matrix_int_scale( result.m, 1.0 / f ); 00319 } else { 00320 cout << "e_r_r_o_r: division by zero." << endl; 00321 return( result ); 00322 } 00323 00324 return( result ); 00325 } |
|
Definition at line 327 of file matrix_int.cc. 00328 { 00329 if ( f != 0.0 ) { 00330 gsl_matrix_int_scale( m, 1.0 / f ); 00331 } else { 00332 cout << "e_rr_or: division by zero." << endl; 00333 return( *this ); 00334 } 00335 00336 return( *this ); 00337 } |
|
converts from any other matrix type.
Definition at line 130 of file matrix_int.h. 00130 {copy(other);return *this;} |
|
Definition at line 127 of file matrix_int.h. 00127 {copy(other);return *this;} |
|
Definition at line 175 of file matrix_int.cc. 00176 { 00177 size_t i, j; 00178 00179 // first check for same dimensions 00180 if ( size1() != other.size1() || size2() != other.size2() ) 00181 { 00182 return false; 00183 } 00184 00185 for ( i = 0; i < size1(); i++ ) { 00186 for ( j = 0; j < size2(); j++ ) { 00187 if ( this->get_element( i, j ) != other.get_element( i, j ) ) { 00188 return false; 00189 } 00190 } 00191 } 00192 00193 return true; 00194 } |
|
Definition at line 415 of file matrix_int.cc. 00416 { 00417 gsl_vector_int_view view=gsl_matrix_int_row(m, rowindex); 00418 return vector_int_view::create_vector_view(view); 00419 } |
|
returns a vector_int_view of a single row of the matrix. Definition at line 407 of file matrix_int.cc. 00408 { 00409 gsl_vector_int_view view=gsl_matrix_int_row(m, rowindex); 00410 return vector_int_view::create_vector_view(view); 00411 } |
|
calculates sum of rows returned as a column matrix. Definition at line 481 of file matrix_int.cc. |
|
Definition at line 131 of file matrix_int.cc. 00132 { 00133 FILE * f = fopen( filename, "w" ) ; 00134 matrix temp = *this; 00135 gsl_matrix_fwrite ( f, temp.m ); 00136 fclose ( f ); 00137 } |
|
Definition at line 170 of file matrix_int.cc. 00171 { 00172 ; 00173 } |
|
Definition at line 103 of file matrix_int.h. 00103 {gsl_matrix_int_set_all ( m, new_value );} |
|
set diagonal elements of a square matrix to f. Definition at line 550 of file matrix_int.cc. Referenced by identity().
00551 { 00552 size_t i; 00553 int mn=(get_rows()<get_cols() ? get_rows() : get_cols()); 00554 for ( i = 0; i < mn; i++ ) 00555 set_element( i, i, f ); 00556 } |
|
Definition at line 110 of file matrix_int.cc. Referenced by copy(), and identity().
|
|
Definition at line 100 of file matrix_int.h. Referenced by set_diagonal().
00100 { gsl_matrix_int_set( m, row, col, v );} |
|
Definition at line 105 of file matrix_int.cc. 00106 { 00107 gsl_matrix_int_set_all( m, new_value ); 00108 } |
|
Definition at line 104 of file matrix_int.h. Referenced by identity().
00104 {gsl_matrix_int_set_zero( m );} |
|
Definition at line 88 of file matrix_int.h. Referenced by LU_invert(), and operator==().
00088 {return m->size1;} |
|
Definition at line 90 of file matrix_int.h. Referenced by LU_invert(), and operator==().
00090 {return m->size2;} |
|
returns sum of all the matrix elements. Definition at line 382 of file matrix_int.cc. Referenced by column_sum(), and row_sum().
|
|
returns trace (diagonal sum) of a square matrix. Definition at line 509 of file matrix_int.cc. 00510 { 00511 int i; 00512 double sum = 0.0; 00513 00514 if ( get_rows() != get_cols() ) { 00515 cerr << "e_r_r_o_r: cannot calculate trace of non-square matrix."; 00516 cerr << endl; 00517 exit( 1 ); 00518 } 00519 00520 // calculate sum of diagonal elements 00521 for ( i = 0; i < get_rows(); i++ ) { 00522 sum += get_element( i, i ); 00523 } 00524 00525 return( sum ); 00526 } |
|
Definition at line 339 of file matrix_int.cc. |
|
Definition at line 292 of file matrix_int.cc. 00293 { 00294 matrix_int result( other ); 00295 gsl_matrix_int_scale( result.m, f ); 00296 00297 return( result ); 00298 } |
|
Definition at line 211 of file matrix_int.cc. 00212 { 00213 matrix_int result( other ); 00214 gsl_matrix_int_add_constant( result.m, f ); 00215 00216 return( result ); 00217 } |
|
Definition at line 249 of file matrix_int.cc. 00250 { 00251 matrix_int result( -1 * other ); 00252 gsl_matrix_int_add_constant( result.m, f ); 00253 00254 return( result ); 00255 } |
|
Definition at line 139 of file matrix_int.cc. 00140 { 00141 size_t i, j; 00142 00143 os.setf( ios::fixed ); 00144 00145 //FIXME for aCC (doesn't find correct outstream function 00146 // for ( i = 0; i < m.get_rows(); i++ ) { 00147 // for ( j = 0; j < m.get_cols() - 1; j++ ) { 00148 // os << setprecision( 6 ) << setw( 11 ) ;//<< m.get_element( i, j ) << " "; 00149 // } 00150 // os << setprecision( 6 ) << setw( 11 ) ;//<< m.get_element( i, j ) << endl; 00151 // } 00152 00153 for ( i = 0; i < m.get_rows(); i++ ) { 00154 for ( j = 0; j < m.get_cols() - 1; j++ ) { 00155 os << m.get_element( i, j ) << " "; 00156 } 00157 os << m.get_element( i, j ) << endl; 00158 } 00159 00160 return os; 00161 } |