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)