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];
}
 
     
    