Solved

# 2x2 matrix math class

Posted on 2004-04-05
731 Views
#ifndef MAT_H
#define MAT_H

// 2x2 Matrix Math

class Matrix {

public:

Matrix(int=1, int=0, int=0, int=1);
Matrix(const Matrix &m);
Matrix &operator = (const Matrix &m);
Matrix matriAdd(const Matrix &m) const;
Matrix matriSub(const Matrix &m) const;
Matrix matriMul(const Matrix &m) const;
Matrix matriDiv(const Matrix &m) const;
int getElement(void);
void setElement(void);
double &operator () int i, int j);
void matriPrint() const;
void matriClear() const;

private:

int width;
int height;

double *data;

};

#endif#include <iostream>

using namespace std;

#include "mat.h"

Matrix::Matrix() {width=0; height=0; data=0;}

Matrix::Matrix(intw, int h) {

width = w;
height = h;

date = new double[width*height];

}

Matrix::Matrix(const Matrix &m) {

width = m.width;
height = m.height;

date = new double[width*height];

for(int k=0; k < width*height; k++)
data[k] = m.data[k];

}

Matrix::~Matrix() {

delete[] data;

}

bool Matrix::operator == (const Matrix &m) const {

if(width != m.width || height != m.height)

return false;

for(int k=0; k < width*height; k++)
if(data[k] != m.data[k])
return false;

return true;

}

Matrix &Matrix::operator = (const Matrix &m) {

if(&m != this) {
delete[] data;

width = m.width; height = m.height;
data = new double[width*height];

for(int k=0; k < width*height; k++)
data[k] = m.data[k];

}

return *this;

}

Matrix Matrix::operator+(const Matrix &m) const {

if(width != m.width; || height != m.height) {
cerr << "Size error!\n";

abort();

}

Matrix result(width, height);

for(int k=0; k < width*height; k++)
result.data[k] = data[k] + m.data[k];

return result;

}

Matrix Matrix::operator*(const Matrix &m) const {

if(width != m.height) {
cerr << "Size error!\n";

abort();

}

Matrix result(m.width, height);

for(int i=0; i < m.width; i++0
for(int j=0; j < height; j++) {
double s = 0;

for(int k=0; k < width; k++)
s += data[k+j*width]*m.data
[i + m.width*k];
result.data[i + m.width*j] = s;

}

return result;

}

double &Matrix::operator() (int i, int j) {

if(i < 0 || i >= width || j < 0 || j >= height) {
cerr << "Out of bounds!\n";

abort();

}

return data[i + width*j];

}

void Matrix::print() const {

for(int j=0; j < height; j++) {
for(int i=0; i < width; i++)
cout << " " << data[i + width * j];

cout << "\n";

}

}

#include <iostream>

using namespace std;

#include "mat.h"

int main(int argc, char **argv) {

Matrix m(3,2), n(5,3);

m(0,0) = 2.0; m(1,0) = 0.0; m(2,0) = 0.0;
m(0,1) = 2.0; m(1,1) = 0.0; m(2,1) = 0.0;

n(0,0) = 1.0; n(1,0) = 2.0; n(2,0) = 3.0; n(3,0)
= 4.0; n(4,0) = 5.0;

n(0,1) = 2.0; n(1,1) = 3.0; n(2,1) = 4.0; n(3,1)
= 5.0; n(4,1) = 6.0;

n(0,2) = 3.0; n(1,2) = 4.0; n(2,2) = 5.0; n(3,2)
= 6.0; n(4,2) = 7.0;

Matrix x = m*n;

x.print();

}

I need to write a program that consists of a 2x2 array that uses member functions add, sub, mul, and div.  Need help, need program to follow the functions in the header.  As you can see, I am having trouble putting 2 and 2 together.  Please advise.  Thank you.  Del

0
Question by:edelossantos
• 3

LVL 30

Expert Comment

ID: 10762738
Is this homework?

If this is not homework, why re-invent the wheel.

Check out the following links:
Matrix class implemented using valarrays:
http://www.hep.ucl.ac.uk/atlas/atlfast/Doxygen/5.1.0/AtlfastUtils-00-00-10/Matrix_8h-source.html

blitz++:
http://www.oonumerics.org/blitz/

newmat:
http://www.robertnz.net/nm_intro.htm

Matrix Template Library (MTL):
http://www.osl.iu.edu/research/mtl/

boost libray multi-array class:
http://www.boost.org/libs/multi_array/doc/user.html
0

LVL 30

Expert Comment

ID: 10762744
Also

("C++ library for "tiny" vectors and matrices with expression templates")
http://tvmet.sourceforge.net/

("Numerical Matrix/Vector Classes in C++ ")
http://math.nist.gov/mv++

0

LVL 30

Accepted Solution

Axter earned 500 total points
ID: 10762753
With all the availability of existing classes that have the functionality you're looking for, there's no real practical reason to start from scratch.

I recommend you use one of the above sources instead.
0

Author Comment

ID: 10821450
Yes, this is homework and this is what I have put together.  Need help in fine tunning the program so it will run.  Any ideas, please advise.  Del
0

## Join & Write a Comment Already a member? Login.

Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilationâ€¦
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the bâ€¦
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

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

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

#### Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!