Solved

multiplication and division for a 2x2 matrix

Posted on 2004-05-01
3
1,638 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Getting IP address 8 71
SNMP error No Such Object available on this agent at this OID 3 187
C++ question 3 62
c++ reading data from file into two dimensional array 3 95
Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
This article will show you some of the more useful Standard Template Library (STL) algorithms through the use of working examples.  You will learn about how these algorithms fit into the STL architecture, how they work with STL containers, and why t…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

911 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now