I've made a function to calculate the inverse of a matrix, but I'm having an issue getting the correct result when I run my program.
For example, when I insert the following matrix:
A1 A2 A3
(2 1 0)
(1 2 1)
(0 1 2)
I get this matrix:
0.1875 -0.125 0.0625
-0.125 0.25 -0.125
0.0625 -0.125 0.1875
While the correct matrix solution is this:
3/4 -1/2 1/4
-1/2 1 -1/2
1/4 -1/2 3/4
Here is my code:
void inverse(double A[][MAX], int n) {
double B[MAX][MAX];
double det = 1.0;
int i, j, k;
// Initializing B to identity matrix
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
B[i][j] = (i == j) ? 1 : 0;
// Performing row operations to convert A to identity matrix
for(k = 0; k < n; k++) {
// Find the pivot element
int max_row = k;
for (i = k + 1; i < n; i++) {
if (abs(A[i][k]) > abs(A[max_row][k])) {
max_row = i;
}
}
// Swap the current row with the row with the largest pivot element
if (max_row != k) {
for (int col = 0; col < n; col++) {
swap(A[k][col], A[max_row][col]);
swap(B[k][col], B[max_row][col]);
}
det *= -1;
}
// Divide the current row by the pivot element to make it equal to 1
double pivot = A[k][k];
if (pivot == 0) {
cout << "Error: Singular matrix." << endl;
return;
}
det *= pivot;
for(j = 0; j < n; j++) {
A[k][j] /= pivot;
B[k][j] /= pivot;
}
// Use the current row to eliminate the pivot elements in the other rows
for(i = 0; i < n; i++) {
if(i == k) continue;
double factor = A[i][k];
for(j = 0; j < n; j++) {
A[i][j] -= A[k][j] * factor;
B[i][j] -= B[k][j] * factor;
}
}
}
// Multiplying by reciprocal of the determinant
if(det == 0) {
cout << "Error: Singular matrix." << endl;
return;
}
det = 1/det;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
B[i][j] *= det;
// Copying the inverse matrix to A
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
A[i][j] = B[i][j];
}