/********************************/ /* matrix valdes 8 30 82 */ /* */ /* Matrix operations */ /********************************/ #include /* Matrix multiplication a[n][m]*b[m][o]=c[n][o] */ mmul (n, m, o, a, b, c) int n, m, o; double *a, *b, *c; { int i, j, k; for (i = 0; i < n; i++) for (j = 0; j < o; j++) { *(c + n * i + j) = 0.; for (k = 0; k < m; k++) *(c + n * i + j) += *(a + n * i + k) * *(b + m * k + j); } } /* matrix copy b[n][m]=a[n][m] */ m2cpy (n, m, a, b) int n, m; double *a, *b; { int i, j; for (i = 0; i < n; i++) for (j = 0; j < m; j++) *(b + n * i + j) = *(a + n * i + j); } /* Vector copy b[n]=a[n] */ vcpy (n, a, b) int n; double *a, *b; { int i, j; for (i = 0; i < n; i++) *(b + i) = *(a + i); } /* Vector multiply a[n][m]*b[m]=c[n] */ vmul (n, m, a, b, c) int n, m; double *a, *b, *c; { int i, j; for (i = 0; i < n; i++) { *(c + i) = 0.; for (j = 0; j < m; j++) *(c + i) += *(a + n * i + j) * *(b + j); } } /* Vector multiply a[n]*b[n][m]=c[m] */ vmul1 (n, m, a, b, c) int n, m; double *a, *b, *c; { int i, j; for (i = 0; i < m; i++) { *(c + i) = 0.; for (j = 0; j < n; j++) *(c + i) += *(b + m * j + i) * *(a + j); } }