47         if( Nrow<= 0 || Ncolumn <= 0 ){
 
   54         if( !( MAT->
mat = (
double **)calloc( Nrow, 
sizeof(
double *) ) ) ){
 
   58         for( i=0; i<Nrow; i++ ){
 
   59                 if( !( MAT->
mat[i] = (
double *)calloc( Ncolumn, 
sizeof(
double) ) ) ){
 
   76         if( !( VEC->
vec = (
double *)calloc( dimension, 
sizeof(
double) ) ) ){
 
   88         for( i=0; i<MAT->
Nrow; i++ ){
 
  111         for( i=0; i<MAT->
Nrow; i++ ){
 
  112                 if( !(memset( MAT->
mat[i], 0, MAT->
Ncolumn*
sizeof(
double) ) ) ){
 
  132         for( i=0; i<MAT->
Nrow; i++ ){
 
  150         for( i=0; i<MAT1->
Nrow; i++ ){
 
  151                 for( j=0; j<MAT1->
Ncolumn; j++ ){
 
  152                         MAT1->
mat[i][j] = K*MAT2->
mat[i][j];
 
  170                         VEC1->
vec[i] = K*VEC2->
vec[i];
 
  178         if( !(memset( VEC->
vec, 0, VEC->
dimension*
sizeof(
double) ) ) ){
 
  201         for( i=0; i<MAT1->
Nrow; i++ ){
 
  202                 for( j=0; j<MAT2->
Ncolumn; j++ ){
 
  203                         for( k=0; k<MAT1->
Ncolumn; k++ ){
 
  204                                 MAT_R->
mat[i][j] += K*MAT1->
mat[i][k]*MAT2->
mat[k][j];
 
  226         for( i=0; i<MAT1->
Nrow; i++ ){
 
  227                 for( j=i; j<MAT2->
Ncolumn; j++ ){
 
  228                         for( k=0; k<MAT1->
Ncolumn; k++ ){
 
  229                                 MAT_R->
mat[i][j] += K*MAT1->
mat[i][k]*MAT2->
mat[k][j];
 
  231                         MAT_R->
mat[j][i] = MAT_R->
mat[i][j];
 
  249         for( i=0; i<MAT2->
Nrow; i++ ){
 
  250                 for( j=0; j<MAT2->
Ncolumn; j++ ){
 
  251                         MAT1->
mat[j][i] = MAT2->
mat[i][j];
 
  272         for( i=0; i<MAT1->
Ncolumn; i++ ){
 
  273                 for( j=0; j<MAT2->
Ncolumn; j++ ){
 
  274                         for( k=0; k<MAT1->
Nrow; k++ ){
 
  275                                 MAT_R->
mat[i][j] += K*MAT1->
mat[k][i]*MAT2->
mat[k][j];
 
  298         for( i=0; i<MAT1->
Nrow; i++ ){
 
  299                 for( j=0; j<MAT2->
Nrow; j++ ){
 
  300                         for( k=0; k<MAT1->
Ncolumn; k++ ){
 
  301                                 MAT_R->
mat[i][j] += K*MAT1->
mat[i][k]*MAT2->
mat[j][k];
 
  323                 res += VEC1->
vec[i]*VEC2->
vec[i];
 
  345                         RES->
mat[i][j] = K*VEC1->
vec[i]*VEC2->
vec[j];
 
  369         for( i=0; i<MAT->
Nrow; i++ ){
 
  370                 for( j=0; j<MAT->
Ncolumn; j++ ){
 
  371                         VEC_R->
vec[i] += MAT->
mat[i][j]*VEC->
vec[j];
 
  399         for( i=0; i<MAT->
Ncolumn; i++ ){
 
  400                 for( j=0; j<MAT->
Nrow; j++ ){
 
  401                         VEC_R->
vec[i] += MAT->
mat[j][i]*VEC->
vec[j];
 
  418         for( i=0; i<MAT1->
Nrow; i++ ){
 
  419                 for( j=0; j<MAT1->
Ncolumn; j++ ){
 
  420                         MAT_R->
mat[i][j] = MAT1->
mat[i][j] + K*MAT2->
mat[i][j];
 
  437         for( i=0; i<MAT1->
Nrow; i++ ){
 
  438                 for( j=0; j<MAT1->
Ncolumn; j++ ){
 
  439                         MAT_R->
mat[i][j] = MAT1->
mat[i][j] + K*MAT2->
mat[j][i];
 
  457                 VEC_R->
vec[i] = VEC1->
vec[i] + K*VEC2->
vec[i];
 
  471         if( flags & 
W_M_TEXT )          fprintf( fh, 
"matrix = [\n" );
 
  472         if( flags & 
W_M_BIN )           fprintf( fh, 
"\n" );
 
  473         for( i=0; i<MAT->
Nrow; i++ ){
 
  474                 for( j=0; j<MAT->
Ncolumn; j++ ){
 
  475                         fprintf( fh, 
"%15.16e ", MAT->
mat[i][j] );
 
  480         if( flags & W_M_TEXT )          fprintf( fh, 
"]\n" );
 
  481         if( flags & W_M_BIN )           fprintf( fh, 
"\n" );
 
  491         if( flags & 
W_M_TEXT )          fprintf( fh, 
"vector = [\n" );
 
  494                 if( flags & 
W_M_BIN )           fprintf( fh, 
"\n" );
 
  495                 fprintf( fh, 
"%15.16e ", VEC->
vec[i] );
 
  498         if( flags & W_M_TEXT )          fprintf( fh, 
"]\n" );
 
  499         if( flags & 
W_M_BIN )           fprintf( fh, 
"\n" );
 
  510         for( i=0; i<MAT->
Nrow; i++ ){
 
  511                 for( j=0; j<MAT->
Ncolumn; j++ ){
 
  512                         if( fscanf( fh, 
"%le", &MAT->
mat[i][j] ) <= 0 ){
 
  527                 if( fscanf( fh, 
"%le", &VEC->
vec[i] ) <= 0 ){
 
  538         case MAT_NO_MEMORY:     fprintf( stderr, 
"Memory error( @ %s )\n", 
string );
 
  540         case MAT_DIMENSION:     fprintf( stderr, 
"Matrix dimension mismatch( @ %s )\n", 
string );
 
  542         case MAT_INPUT:         fprintf( stderr, 
"Reading error( @ %s )\n",
string );
 
  544         case MAT_GEN_ERROR:     fprintf( stderr, 
"Error( @ %s )\n",
string );
 
  557         for( i=0; i<MAT->
Nrow; i++ ){
 
  558                 for( j=0; j<MAT->
Ncolumn; j++ ){
 
  591         for( i=0; i<MAT->
Nrow; i++ ){
 
  592                 mean += MAT->
mat[i][column];
 
  594         return( mean/MAT->
Nrow );
 
  601         double mean, var = 0.;
 
  604         for( i=0; i<MAT->
Nrow; i++ ){
 
  605                 var += (MAT->
mat[i][column]-mean)*(MAT->
mat[i][column]-mean);
 
  608         return( var/MAT->
Nrow );
 
  617         MAX = MAT->
mat[0][column];
 
  618         for( i=0; i<MAT->
Nrow; i++ ){
 
  619                 if( MAT->
mat[i][column] > MAX ){
 
  620                         MAX = MAT->
mat[i][column];
 
  633         MIN = MAT->
mat[0][column];
 
  634         for( i=0; i<MAT->
Nrow; i++ ){
 
  635                 if( MAT->
mat[i][column] < MIN ){
 
  636                         MIN = MAT->
mat[i][column];
 
  650         for( i=0; i<MAT->
Nrow; i++ ){
 
  651                 trace += MAT->
mat[i][i];
 
  665         for( i=0; i<SUB->
Nrow; i++){
 
  666                 for( j=0; j<SUB->
Ncolumn; j++){
 
  667                         SUB->
mat[i][j] = BIG->
mat[RowIndex+i][ColumnIndex+j];
 
  683         for( i=0; i<SUB->
Nrow; i++){
 
  684                 for( j=0; j<SUB->
Ncolumn; j++){
 
  685                         BIG->
mat[RowIndex+i][ColumnIndex+j] = SUB->
mat[i][j];
 
mat_res_t matrix_random(matrix *MAT, double min, double max)
void matrix_error(mat_res_t error, const char *string)
mat_res_t vector_write(vector *VEC, FILE *fh, unsigned flags)
mat_res_t vector_null(vector *VEC)
mat_res_t matrix_write(matrix *MAT, FILE *fh, unsigned flags)
double variance(matrix *MAT, int column)
mat_res_t vector_sum(vector *VEC1, vector *VEC2, vector *VEC_R, double K)
int error(const char *test, int value)
double matrix_trace(matrix *MAT)
mat_res_t matrix_copy(matrix *MAT1, matrix *MAT2, double K)
mat_res_t vector_init(vector *VEC, unsigned dimension)
mat_res_t vector_random(vector *VEC, double min, double max)
mat_res_t sub_matrix_extract(matrix *BIG, matrix *SUB, unsigned RowIndex, unsigned ColumnIndex)
mat_res_t matrix_transpose_prod(matrix *MAT1, matrix *MAT2, matrix *MAT_R, double K)
mat_res_t matrix_transpose(matrix *MAT1, matrix *MAT2)
mat_res_t matrixT_vector_prod(matrix *MAT, vector *VEC, vector *VEC_R)
mat_res_t matrix_null(matrix *MAT)
double mean_value(matrix *MAT, int column)
mat_res_t matrix_prod_transpose(matrix *MAT1, matrix *MAT2, matrix *MAT_R, double K)
mat_res_t matrix_eye(matrix *MAT, double K)
mat_res_t matrix_destroy(matrix *MAT)
mat_res_t vector_copy(vector *VEC1, vector *VEC2, double K)
mat_res_t matrix_prod_sym(matrix *MAT1, matrix *MAT2, matrix *MAT_R, double K)
mat_res_t vector_read(vector *VEC, FILE *fh, unsigned flags)
mat_res_t matrix_prod(matrix *MAT1, matrix *MAT2, matrix *MAT_R, double K)
mat_res_t matrix_vector_prod(matrix *MAT, vector *VEC, vector *VEC_R)
mat_res_t sub_matrix_insert(matrix *BIG, matrix *SUB, unsigned RowIndex, unsigned ColumnIndex)
double maximum(matrix *MAT, int column)
mat_res_t matrix_read(matrix *MAT, FILE *fh, unsigned flags)
mat_res_t vector_destroy(vector *VEC)
mat_res_t matrix_sum(matrix *MAT1, matrix *MAT2, matrix *MAT_R, double K)
mat_res_t matrix_sum_transpose(matrix *MAT1, matrix *MAT2, matrix *MAT_R, double K)
mat_res_t matrix_init(matrix *MAT, unsigned Nrow, unsigned Ncolumn)
mat_res_t scalar_prod(vector *VEC1, vector *VEC2, double *RES)
mat_res_t vector_vector_prod(vector *VEC1, vector *VEC2, matrix *RES, double K)
double minimum(matrix *MAT, int column)