/* * testmatmul.c --- 行列とベクトルの積 * * コンパイルは数学科計算機室では * gcc -c matutil.c * gcc -o testmatmul testmatmul.c matutil.o */ #include #include "matutil.h" /* m 行 n 列の行列 A と n 次元ベクトル b の積を c に代入する */ void mul_matrix_vector(int m, int n, vector c, matrix a, vector b) { int i; /* c の第 i 成分は A の第 i 行ベクトルと b の内積 */ for (i = 0; i < m; i++) c[i] = dotprod(n, a[i], b); } main() { int i, j, n; vector b, c; matrix a; /* 次数 n */ printf("n="); scanf("%d", &n); /* 行列とベクトルの確保 */ a = new_matrix(n, n); b = new_vector(n); c = new_vector(n); /* ベクトル b */ for (i = 0; i < n; i++) b[i] = 1; /* 行列 A */ for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (i == j) a[i][j] = 2.0; else a[i][j] = 1.0; /* c = A b */ mul_matrix_vector(n, n, c, a, b); /* */ for (i = 0; i < n; i++) printf("c[%d]=%g\n", i, c[i]); }