⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix_def.h

📁 Matrix operations solution of AX=B Jordan and newton Methods
💻 H
字号:
//////////////////////////////////////////////////////
// programmer : tufan biyiktas
// email      : tfn@mail.ege.edu.tr
// date       : March, 7 2005
//////////////////////////////////////////////////////

//////////////////////////////////////////////////////
// HEADER FILES
//////////////////////////////////////////////////////
#include "matrix_err.h"

//////////////////////////////////////////////////////
// Definition   : rom matrix_err.h to indicate which error occured
//////////////////////////////////////////////////////
extern int error_num;

//////////////////////////////////////////////////////
// Definition   : matrix data sructure definition 
//////////////////////////////////////////////////////
typedef struct{

    int row_size, // size of row
        col_size; // size of col
    
    float *data;  // data pointer

}matrix_t;

//////////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////////
/* 1 */ void  matrix_init(matrix_t *matrix);
/* 2 */ void  matrix_set_size(matrix_t *matrix,int row_size,int col_size);
/* 3 */ int   matrix_allocate(matrix_t *matrix,int row_size,int col_size);
/* 4 */ void  matrix_remove(matrix_t *matrix);
/* 5 */ void  matrix_set_data(matrix_t *matrix,int row,int colon, float item);
/* 6 */ float matrix_get_data(matrix_t matrix,int row,int colon);
/* 7 */ void  matrix_copy(matrix_t matrix_a,matrix_t *matrix_b);
/* 8 */ int   matrix_build(matrix_t *matrix,int row_size,int col_size,char *fname);
/* 9 */ int   matrix_fprint(matrix_t matrix , char *fname);
//////////////////////////////////////////////////////



//////////////////////////////////////////////////////
// Definition   : init given matrix  
//////////////////////////////////////////////////////
void matrix_init(matrix_t *matrix){
    
    matrix->row_size = 0;
    matrix->col_size = 0;
    matrix->data = 0;
}

//////////////////////////////////////////////////////
// Definition   : define row & col sizes of given matrix
//////////////////////////////////////////////////////
void matrix_set_size(matrix_t *matrix,int row_size,int col_size){
    
    matrix_init(matrix);
    matrix->row_size = row_size;
    matrix->col_size = col_size;
}

//////////////////////////////////////////////////////
// Definition   : get memory for given matrix
//////////////////////////////////////////////////////
int matrix_allocate(matrix_t *matrix,int row_size,int col_size){
     
     // error  --> 0
     // success -> 1
     
     matrix_set_size(matrix,row_size,col_size);
                 
     matrix->data = (float *)malloc(sizeof(float)*(matrix->row_size*matrix->col_size));
     
     if(!matrix->data){
          error_num=0;
          matrix_error_print();
          return 0;
     }
     
     return 1;
}

//////////////////////////////////////////////////////
// Definition   : remove matrix from memory 
//////////////////////////////////////////////////////
void matrix_remove(matrix_t *matrix){
    free(matrix->data);
}
	
//////////////////////////////////////////////////////
// Definition   : set matrix data at the given row&col 
//////////////////////////////////////////////////////
void matrix_set_data(matrix_t *matrix,int row,int colon, float item){
    *(matrix->data + row*matrix->col_size +colon) = item;
}

//////////////////////////////////////////////////////
// Definition   : get matrix data at the given row&col
//////////////////////////////////////////////////////
float matrix_get_data(matrix_t matrix,int row,int colon){
    return *(matrix.data + row*matrix.col_size +colon);
}

//////////////////////////////////////////////////////
// Definition   : copy the first matrix to the second  
//////////////////////////////////////////////////////
void matrix_copy(matrix_t matrix_a,matrix_t *matrix_b){
         
    int row,col;
    
    matrix_allocate(matrix_b,matrix_a.row_size,matrix_a.col_size);
     
    for(row=0;row<matrix_a.row_size;row++){
        for(col=0;col<matrix_a.col_size;col++){
                matrix_set_data(matrix_b,row,col,matrix_get_data(matrix_a,row,col));
        }
    }
}

//////////////////////////////////////////////////////
// Definition   : build matrix from the given file with the given dims 
//////////////////////////////////////////////////////
int matrix_build(matrix_t *matrix,int row_size,int col_size,char *fname){
    
    // error  --> 0
    // success -> 1
    
    FILE *fd;
    float data;
    int row,col;
    
    matrix_allocate(matrix,row_size,col_size);
                            
    fd = fopen(fname,"r");
    
    if(!fd){
        error_num=1;
        matrix_error_print();
        return 0;
    }
    
    for(row=0;row<row_size;row++){
        for(col=0;col<col_size;col++){
            fscanf(fd,"%f ",&data);
            matrix_set_data(matrix,row,col,data);
        }
    }
        
    fclose(fd);
    return 1;
}
   
//////////////////////////////////////////////////////
// Definition   : print content of the given matrix to the given file 
//////////////////////////////////////////////////////
int matrix_fprint(matrix_t matrix , char *fname){
    
    // error  --> 0
    // success -> 1
    
    int row,col;
    FILE *fd;
       
    fd = fopen(fname,"w"); 
    
    if(!fd){
        error_num=2;
        matrix_error_print();
        return 0;
    }  

     for(row=0;row<matrix.row_size;row++){
         for(col=0;col<matrix.col_size;col++){    
             //fprintf(fd,"%f ",*(matrix.data+row*matrix.size+col));
             fprintf(fd,"%f ",matrix_get_data(matrix,row,col));
         }
         fprintf(fd,"%s","\n");
    }
    
    fclose(fd);
    
    return 1;        
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -