I'm currently working on a implementing a matrix inversion method for a Matrix class in C++. One thing that isn't implemented is a check for when the pivot element is 0, meaning I will need to swap the rows (likely with the row just beneath it).
Here is what I have for far for the Inversion method:
Matrix Matrix:: invert()
{
if (rows != cols) { // Check for square matrix
cout << "Matrix must be square." << endl;
exit(1);
}
double ratio, sum;
int i, j, k;
Matrix T1(rows, cols*2); // New temp identity matrix of same order
Matrix F(rows, cols); // Final Inverted Matrix
// Add Identity Matrix
for(i = 1; i <= rows; i++){
for(j = rows; j <= 2*rows; j++){
if(i == (j-cols)){
T1.el[i][j] = 1.0;
}
else
T1.el[i][j] = 0.0;
}
}
// Add original Matrix to 1st half of Temp Matrix
for (i = 1; i <=rows; i++) {
for(j=1;j<=rows; j++) {
T1.el[i][j] = el[i][j];
}
}
cout << "\n\nOriginal matrix with added Identity Matrix" << endl;
for (i = 1; i <=rows; i++) {
cout << setw(5);
for(j=1;j<=rows*2; j++) {
cout << T1.el[i][j] << setw(6);
}
cout << endl;
}
double temp;
// Row Operations
for(i = 1; i <= rows; i++){
for(j = 1; j <= rows; j++){
if(i != j) {
ratio = T1.el[j][i]/T1.el[i][i];
for(k = 1; k <= 2*rows; k++) {
T1.el[j][k] -= ratio * T1.el[i][k];
}
}
}
}
// backwards substitutions
for(i = 1; i <= rows; i++){
sum = T1.el[i][i];
for(j = i+1; j <= 2*rows; j++){
T1.el[i][j] /= sum;
}
}
// Copy to return Matrix
for(i=1; i<=rows; i++){
for (j=1; j<=rows; j++) {
F.el[i][j] = T1.el[i][j+cols];
}
}
return F;
}
How or where would I go about adding this functionality/check?
Thanks.
Brock