/* dmatrix2.c double matrix with size. $Id: dmatrix2.c,v 1.1 2009/10/30 16:31:16 daichi Exp $ */ #include #include #include "dvector2.h" #include "dmatrix2.h" double ** dmatrix (int rows, int cols) { double **matrix; int i; matrix = (double **)calloc(rows + 2, sizeof(double *)); if (matrix == NULL) { perror("dmatrix"); return NULL; } /* record size */ *((int *)matrix) = cols; *((int *)(matrix + 1)) = rows; matrix += 2; for (i = 0; i < rows; i++) { matrix[i] = dvector(cols); if (matrix[i] == NULL) return NULL; } return matrix; } void free_dmatrix (double **matrix) { int i; for (i = 0; i < mrows(matrix); i++) free_dvector (matrix[i]); free (matrix - 2); } #if 1 int main (int argc, char *argv[]) { int i, j, rows, cols; double **matrix; rows = atoi(argv[1]); cols = atoi(argv[2]); if ((matrix = dmatrix(rows, cols)) == NULL) perror("HOGE"); printf("matrix rows = %d cols = %d\n", mrows(matrix), mcols(matrix)); for (i = 0; i < mrows(matrix); i++) for (j = 0; j < mcols(matrix); j++) matrix[i][j] = i + j * 0.1; for (i = 0; i < msize(matrix); i++) { for (j = 0; j < vsize(matrix[i]); j++) matrix[i][j] = i + j * 0.1; } for (i = 0; i < mrows(matrix); i++) for (j = 0; j < mcols(matrix); j++) printf("matrix[%d][%d] = %g\n", i, j, matrix[i][j]); return 0; } #endif