// // Matrix * Vector using ordinary function #include class Vector3 { public: double d[3]; }; class Matrix3x3 { public: double A[3][3]; }; // ---------------------------------------------- // Here is the Matrix * Vector operator // ---------------------------------------------- Vector3 operator* ( Matrix3x3 & M, Vector3 & v) { Vector3 out; int i, k; for (i = 0; i < 3; i = i + 1) { out.d[i] = 0.0; for (k = 0; k < 3; k = k + 1) out.d[i] = out.d[i] + M.A[i][k] * v.d[k]; } return(out); } void printV(Vector3 *v) { int i, j; for (i = 0; i < 3; i = i+1) { printf("%5.2lf ", v->d[i]); } cout << endl; } void printM(Matrix3x3 *m) { int i, j; for (i = 0; i < 3; i = i+1) { for (j = 0; j < 3; j = j+1) printf("%5.2lf ", m->A[i][j]); cout << endl; } } int main(int argc, char *argv[]) { Matrix3x3 A; Vector3 v, u; A.A[0][0] = 1.0; A.A[0][1] = 0.0; A.A[0][2] = 0.0; A.A[1][0] = 1.0; A.A[1][1] = 1.0; A.A[1][2] = 0.0; A.A[2][0] = 1.0; A.A[2][1] = 1.0; A.A[2][2] = 1.0; cout << "Initial matrix A:" << endl << endl; printM(&A); v.d[0] = 1.0; v.d[1] = 2.0; v.d[2] = 3.0; cout << "Initial vector v:" << endl << endl; printV(&v); u = A * v; cout << endl << "After u = A * v, vector u:" << endl << endl; printV(&u); }