The following function finds the inverse of a matrix (actually its not complete at all):

Code:void Matrix::Inverse() { float det; det = this->Determinant(); if(det == 0) { cout << "The matrix does not have an inverse."; return; } Matrix *identity = new Matrix(a,b); // creates nxn matrix identity->Identity(); // make it an identity matrix Matrix *temp = new Matrix(a,b); temp = this; // so we don't change the original matrix // forward elimination steps for(x = 0; x < a; x++) // a is the number of rows { y = 0; temp->elimination(((float)(temp->Array[x+1][y]/temp->Array[y][y])), (y+1), (x+2)); temp->showMatrix(); } }

elimination is defined as:

Code:void Matrix::elimination(float multiple, int row1, int row2) { // subtracts multiple*row1 from row2 float temp; for(y = 0; y < b; y++) { temp = Array[row2-1][y] - (multiple*Array[row1-1][y]); Array[row2-1][y] = temp; } }

Anyways, if I have the matrix A:

2 1 3

1 2 3

4 2 1

if I do A.Inverse() it SHOULD do this:

2 1 3

0 1.5 1.5

4 2 1

2 1 3

0 1.5 1.5

0 0 -5

But it only does ONE step - it should display a second matrix, even if it isn't right, shouldn't it?

here's rest of the code for reference:

http://dydx.no-ip.com:8080/matrix.cpp

http://dydx.no-ip.com:8080/matrix.h

Thanks!