Click here to Skip to main content
15,881,803 members
Articles / Programming Languages / C++
Article

A templated Matrix class using 2d dynamic array declaration & having The most needed Mathematical functions of Matrix & also all the operators needed in standard c++ (without using any vc commands)

Rate me:
Please Sign up or sign in to vote.
1.30/5 (15 votes)
22 Feb 2007CPOL3 min read 37.5K   672   12   4
This program is written By Shahin Namini

Introduction

This Matrix class is a templated class that can be initialized as any kind of numeric types(int, double,float,& etc). it includes Inverse & determinant functions (which are not so easy to write the code) & also all the operators needed for a Matrix class like Multiplying 2 matrix or multiplying a digit to the matrix. it is able to be any size & also it is easy to use.

Instruction

the uploaded file check.zip contains a file which shows how the Matrix can get initialized & how the operators or functions work. Note that parentheses is maybe the most important operator.it allows you to get access to the array elements ,as :

matrix1(2,0)=5;

Member functions of class Matrix

These are all the member functions & operators of the class :

template<class T>
class Matrix
{
public:

  1. Matrix(int Row_Size,int Column_Size)
  2. Matrix() >
  3. Matrix(const Matrix<T> &)
  4. ~Matrix(void)
  5. void Set_Element(int Row_,int Column,const T& Value)
  6. T Get_Element(int Row ,int Column) const
  7. bool operator!() const;
  8. const Matrix<T> & operator=(const Matrix<T> &)
  9. const Matrix<T> & operator=(const T&)
  10. bool operator==(const Matrix<T> &) const
  11. bool operator==(const T & ) const
  12. bool operator!=(const Matrix<T> & second) const
  13. bool operator!=(const T & number)
  14. T &operator() (int Row,int Column)
  15. Matrix<T> operator+(const T &)
  16. Matrix<T> operator+(const Matrix<T> &)
  17. const Matrix<T> &operator+=(const T&)
  18. const Matrix<T> & operator+=(const Matrix<T> &)
  19. Matrix<T> operator-(const T&)
  20. Matrix<T> operator - (const Matrix<T> &)
  21. const Matrix<T> & operator -=(const T & )
  22. const Matrix<T> & operator -=(Matrix<T> & )
  23. Matrix<T> operator*(const T&)
  24. Matrix<T> operator* (const Matrix<T> &)
  25. const Matrix<T> & operator*=(const T&)
  26. const Matrix<T> & operator*=(const Matrix<T> &)
  27. void Transposed();>
  28. Matrix<T> GetTransposed() const
  29. bool Inverse();>
  30. Matrix<T> GetInversed() const
  31. double Det() const
  32. void Set_Size(int RowSize,int ColumnSize)
  33. const int& Get_ColumnSize() const
  34. const int & Get_RowSize() const
private:
  • int m_RowSize
  • int m_ColumnSize
  • T**m_Data

};

Notes


note:The returned argument of Inverse (a boolean ) Shows weather the matrix is Invertible & if it is ,inverts the Matrix


note:I have written this code in vc 2005 but it is not a managed code.if you compile it in vc6 you will see some errors that as an instance i is redeclared .thats because vc6 is alittle differant as when you declare i this way :for (int i=0;i<5;i++){ /*statements*/}

i is destroyed after for statement but in vc6 it is a declared variable even after for statement.but it is easy to change it to vc6 by debugging such errors in vc.you can do it yourself.


note:the only code i have not written my self is determinant because i have found a great one being written by Paul Bourke .to find the original code go to http://local.wasp.uwa.edu.au/~pbourke/other/determinant/

Some Technics that are used in Class

to announce one,I have to point to the way the element array (m_Data) is declared using new command:

consider the m_RowSize & m_ColumnSize are given

m_Data=new T* [m_RowSize];

for(int i=0;i<m_RowSize;i++)

m_ColumnSize=new T [m_ColumnSize];

HOPE YOU USE & ENJOY IT

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
CEO
Iran (Islamic Republic of) Iran (Islamic Republic of)
just a Geospatial Information Systems Specialist who loves programming & denotes his life this way.

Comments and Discussions

 
QuestionI think there is a bug [modified] Pin
sizheng13-Aug-07 19:54
sizheng13-Aug-07 19:54 
AnswerRe: I think there is a bug Pin
shahin namini18-Aug-07 21:09
shahin namini18-Aug-07 21:09 
QuestionA problem Pin
cclever10-Apr-07 22:48
cclever10-Apr-07 22:48 
Firstly, thank you for your code ! It is very helpful for me,but there is a problem. When I use it with MFC,there is a error"error LNK2005: "double __cdecl Determinant(double * *,int)" (?Determinant@@YANPAPANH@Z) already defined in ****.obj".I think you should change the position of the definition of "Determinant"
AnswerRe: A problem Pin
shahin namini12-Apr-07 1:50
shahin namini12-Apr-07 1:50 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.