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!