|
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