Solved

multiplication and division for a 2x2 matrix

Posted on 2004-05-01
3
1,650 Views
Last Modified: 2008-02-01
#include <iostream>

using namespace std;

class Matrix {
     
public:
     Matrix(int val = 0) : nValue(val) { Initialise(); }
     ~Matrix() {};
     Matrix add(const Matrix& rhs);
     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 Matrix::add(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::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);
     Matrix c = a.add(b);
     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
Comment
Question by:edelossantos
  • 3
3 Comments
 
LVL 4

Assisted Solution

by:PerryDK
PerryDK earned 500 total points
ID: 10969766
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
 
LVL 4

Accepted Solution

by:
PerryDK earned 500 total points
ID: 10969777
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
 
LVL 4

Assisted Solution

by:PerryDK
PerryDK earned 500 total points
ID: 10969781
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

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question