1 #include "matrix-ops.h"
5 void transpose (int rows, int cols, double m[rows][cols], double m_trans[cols][rows])
9 for (i = 0; i < rows; i++)
10 for (j = 0; j < cols; j++)
11 m_trans[j][i] = m[i][j];
15 void multiply (int m, int n, int p, double m1[m][n], double m2[n][p], double result[m][p])
19 for (i = 0; i < m; i++)
20 for (k = 0; k < p; k++) {
22 for (j = 0; j < n; j++)
23 result [i][k] += m1[i][j] * m2 [j][k];
26 void invert (int s, double m[s][s], double m_inv[s][s])
32 for (i = 0; i < s; i++)
33 for (j = 0; j < s; j++)
35 for (i = 0; i < s; i++)
40 for (i = 0; i < s; i++) {
42 for (j = i+1; j < s; j++) {
43 if (fabs(tmp[i][j]) > fabs(tmp[i][i]))
49 for (k = 0; k < s; k++) {
51 tmp[k][i] = tmp[k][swap];
55 m_inv[k][i] = m_inv[k][swap];
61 for (k = 0 ; k < s ; k++) {
66 for (j = 0 ; j < s ; j++) {
69 for (k = 0 ; k < s; k++) {
70 tmp[k][j] -= tmp[k][i] * t;
71 m_inv[k][j] -= m_inv[k][i] * t;
78 void multiply_scalar_inplace(int rows, int cols, double m[rows][cols], double scalar)
82 for (i = 0; i < rows; i++)
83 for (j = 0; j < cols; j++)
84 m[i][j] = m[i][j] * scalar;
86 void assign (int rows, int cols, double m[rows][cols], double m1[rows][cols])
90 for (i = 0; i < rows; i++)
91 for (j = 0; j < cols; j++)
95 void substract (int rows, int cols, double m1[rows][cols], double m2[rows][cols], double res[rows][cols])
99 for (i = 0; i < rows; i++)
100 for (j = 0; j < cols; j++)
101 res[i][j] = m1[i][j] - m2[i][j];