• Status: Solved
• Priority: Medium
• Security: Public
• Views: 1739

# multiplication and division for a 2x2 matrix

#include <iostream>

using namespace std;

class Matrix {

public:
Matrix(int val = 0) : nValue(val) { Initialise(); }
~Matrix() {};
Matrix sub(const Matrix& rhs);
Matrix mul(const Matrix& rhs);
Matrix div(const Matrix& rhs);
void print();
void Initialise();
void Clear();
private:
int M[2][2];
int nCols;
int nRows;
int size;
int nValue;
};

void Matrix::Initialise()
{
for (int r = 0; r < 2; r++) {
for (int c = 0; c < 2; c++) {
M[r][c] = nValue;
}
}
}

void Matrix::Clear()
{
for (int r = 0; r < 2; r++) {
for (int c = 0; c < 2; c++) {
M[r][c] = 0;
}
}
}

{
Matrix temp;

for (int r = 0; r < 2; r++) {
for (int c = 0; c < 2; c++) {
temp.M[r][c] = rhs.M[r][c] + M[r][c];
}
}
return temp;
}

Matrix Matrix::sub(const Matrix& rhs)
{
Matrix temp;

for (int r = 0; r < 2; r++) {
for (int c = 0; c < 2; c++) {
temp.M[r][c] = rhs.M[r][c] - M[r][c];
}
}
return temp;
}

Matrix Matrix::mul(const Matrix& rhs)
{
Matrix temp;

for (int r = 0; r < 2; r++) {
for (int c = 0; c < 2; c++) {
temp.M[r][c] = rhs.M[r][c] * M[r][c];
}
}
return temp;
}

Matrix Matrix::div(const Matrix& rhs)
{
Matrix temp;

for (int r = 0; r < 2; r++) {
for (int c = 0; c < 2; c++) {
temp.M[r][c] = rhs.M[r][c] / M[r][c];
}
}
return temp;
}

void Matrix::print()
{
for (int r = 0; r < 2; r++) {
for (int c = 0; c < 2; c++) {
cout << M[r][c] << "\t";
}
cout << endl;
}
}

int main()
{
Matrix a(2);
Matrix b(3);
c.print();

Matrix d(2);
Matrix e(3);
Matrix f = a.sub(b);
f.print();

Matrix g(2);
Matrix h(3);
Matrix i = a.mul(b);
i.print();

Matrix j(2);
Matrix k(3);
Matrix l = a.div(b);
l.print();

return 0;

}

output:

5       5
5       5
1       1
1       1
6       6
6       6

How would you write the implementation for multiplication and division?  I have looked at some examples but cannot grasp the concept.  Please advise.
0
edelossantos
• 3
3 Solutions

Commented:
Have a look at http://www.maths-help.co.uk/Knowldge/Alg/Matrices/Question.htm

Secondly I'm not real clear on your Martrix design.  Is this intended to be a class that can only handle 2x2 matricies?  Or is your Matrix class supposed to handle any r by c matrix?
0

Commented:
Here is matrix multiplication for 2x2 matrix given the definition at http://www.maths-help.co.uk/Knowldge/Alg/Matrices/Question.htm

Matrix Matrix::mul(const Matrix& rhs)
{
Matrix temp;

for (int r = 0; r < 2; r++)
{
for (int c = 0; c < 2; c++)
{
temp.M[r][c] = 0;

for(int x = 0; x < 2; x++
{
temp.M[r][c] += rhs.M[c][x] * M[x][c];
}
}
}
return temp;
}

For you Matrix division I'm not exactly sure what matrix division is unless you mean multiplying by the inverse of a matrix?
0

Commented:
temp.M[r][c] += rhs.M[c][x] * M[x][c];

Change this to

temp.M[r][c] += rhs.M[x][c] * M[c][x];
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.