|
class Matrix3x3 { public: double A[3][3]; }; // <--- Note: class definition must end in ; |
class Vector3 { public: double d[3]; }; // <--- Note: class definition must end in ; |
+- -+ +- -+ +- -+ | 1 0 0 | | 3 | | .. | | 1 1 0 | * | 6 | = | .. | | 1 2 5 | | 9 | | 1*3 + 2*6 + 5*9 | +- -+ +- -+ +- -+ A * v = u |
u[2] = a[2][0]*v[0] + a[2][1]*v[1] + a[2][2]*v[2] |
u[2] = 0; for (k = 0; k < 3; k = k + 1) u[2] = u[2] + A[2][k] * v[k]; |
u[i] = 0.0; for (k = 0; k < N; k = k + 1) u[i] = u[i] + A[i][k] * v[k]; |
for (i = 0; i < N; i = i + 1) { u[i] = 0.0; for (k = 0; k < N; k = k + 1) u[i] = u[i] + A[i][k] * v[k]; } |
Matrix3x3 M; Vector3 u, v; u = M * v; |
we must define the following operator function :
Vector3 operator* ( Matrix3x3 & M, Vector3 & v) { .... } |
(The body of the function must implement the matrix-vector multiplication algorithm )
Vector3 operator* ( Matrix3x3 & M, Vector3 & v) { Vector3 out; 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); } |
int main(int argc, char *argv[]) { Matrix3x3 A; Vector3 v, u; u = A * v; } |
class Matrix3x3 { public: double A[3][3]; Vector3 operator* ( Vector3 & v) { Vector3 out; 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] + A[i][k] * v.d[k]; } return(out); } }; |
Matrix3x3 M; Vector3 u, v; u = v * M; // Vector * Matrix !! |
we must define the following operator function :
// Notice that the order of parameter is changed !!! Vector3 operator* ( Vector3 & v, Matrix3x3 & M ) { .... } |
(We must write a new function to implement the vector-matrix multiplication algorithm )
Vector3 operator* ( Vector3 & v, Matrix3x3 & M ) { Vector3 out; 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] + v.d[k] * M.A[k][i]; } return(out); } |
int main(int argc, char *argv[]) { Matrix3x3 A; Vector3 v, u; u = v * A; } |
class Vector3 { public: double A[3][3]; Vector3 operator* ( Matrix3x3 & M ) { Vector3 out; 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] + d[k] * M.A[k][i]; } return(out); } }; |
Using member functions will allow you to improve on correctness of the entire problem by localizing program statements that can cause errors