//Inverse Solve #include #include void get_cofactor(float A[10][10], float temp[10][10], int p, int q, int n) { int i = 0, j = 0; for (int row = 0; row < n; row++) { for (int col = 0; col < n; col++) { if (row != p && col != q) { temp[i][j++] = A[row][col]; if (j == n - 1) { j = 0; i++; } } } } } float determinant(float A[10][10], int n) { float D = 0; if (n == 1) return A[0][0]; float temp[10][10]; int sign = 1; for (int f = 0; f < n; f++) { get_cofactor(A, temp, 0, f, n); D += sign * A[0][f] * determinant(temp, n - 1); sign = -sign; } return D; } void adjoint(float A[10][10], float adj[10][10], int n) { if (n == 1) { adj[0][0] = 1; return; } float temp[10][10]; int sign; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { get_cofactor(A, temp, i, j, n); sign = ((i + j) % 2 == 0) ? 1 : -1; adj[j][i] = sign * determinant(temp, n - 1); } } } void inverse(float A[10][10], float inverseA[10][10], int n) { float det = determinant(A, n); if (fabs(det) < 1e-9) { printf("Singular Matrix: Inverse does not exist.\n"); return; } float adj[10][10]; adjoint(A, adj, n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) inverseA[i][j] = adj[i][j] / det; } int main() { int n; float A[10][10], InvA[10][10]; printf("Enter the size of the square matrix (N): "); scanf("%d", &n); if (n > 10 || n < 1) return 1; printf("Enter elements of the matrix:\n"); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) scanf("%f", &A[i][j]); float det = determinant(A, n); if (fabs(det) < 1e-9) { printf("\nInverse does not exist (Determinant is zero).\n"); return 0; } inverse(A, InvA, n); printf("\nInverse Matrix:\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) printf("%.4f\t", InvA[i][j]); printf("\n"); } return 0; } //det #include #define N 3 // We fix the size to 3x3 // Function to get the sub-matrix by hiding row 'p' and col 'q' void get_cofactor(float A[N][N], float temp[N][N], int p, int q, int n) { int i = 0, j = 0; for (int row = 0; row < n; row++) { for (int col = 0; col < n; col++) { // Copy element only if it is NOT in the hidden row/col if (row != p && col != q) { temp[i][j++] = A[row][col]; // If row is full, move to next row if (j == n - 1) { j = 0; i++; } } } } } // Recursive function to find determinant float determinant(float A[N][N], int n) { float D = 0; // Base case: if matrix is 1x1, the det is the number itself if (n == 1) return A[0][0]; float temp[N][N]; // To store sub-matrix int sign = 1; // To handle + - + sign pattern for (int f = 0; f < n; f++) { get_cofactor(A, temp, 0, f, n); // Hide row 0, col f D += sign * A[0][f] * determinant(temp, n - 1); sign = -sign; // Flip sign } return D; } int main() { float A[N][N]; printf("Enter 3x3 Matrix elements:\n"); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { scanf("%f", &A[i][j]); } } // We pass 'N' (which is 3) to the function printf("Determinant: %.2f\n", determinant(A, N)); return 0; } //Inv #include #include // For fabs() #define N 3 // Fixed to 3x3 void get_cofactor(float A[N][N], float temp[N][N], int p, int q, int n) { int i = 0, j = 0; for (int row = 0; row < n; row++) { for (int col = 0; col < n; col++) { if (row != p && col != q) { temp[i][j++] = A[row][col]; if (j == n - 1) { j = 0; i++; } } } } } float determinant(float A[N][N], int n) { float D = 0; if (n == 1) return A[0][0]; float temp[N][N]; int sign = 1; for (int f = 0; f < n; f++) { get_cofactor(A, temp, 0, f, n); D += sign * A[0][f] * determinant(temp, n - 1); sign = -sign; } return D; } // Function to calculate Adjoint void adjoint(float A[N][N], float adj[N][N], int n) { if (n == 1) { adj[0][0] = 1; return; } float temp[N][N]; int sign = 1; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { // Get sub-matrix for A[i][j] get_cofactor(A, temp, i, j, n); // Determine sign: positive if sum of indices is even sign = ((i + j) % 2 == 0) ? 1 : -1; // IMPORTANT: Assign to adj[j][i] (transpose happens here) adj[j][i] = sign * determinant(temp, n - 1); } } } // Function to calculate Inverse void inverse(float A[N][N], float inv[N][N], int n) { float det = determinant(A, n); if (fabs(det) < 0.00001) { printf("Inverse impossible (Determinant is 0)\n"); return; } float adj[N][N]; adjoint(A, adj, n); // Inverse = Adjoint / Determinant for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) inv[i][j] = adj[i][j] / det; } int main() { float A[N][N], InvA[N][N]; printf("Enter 3x3 Matrix elements:\n"); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) scanf("%f", &A[i][j]); // Calculate Inverse inverse(A, InvA, N); // Check if determinant was non-zero before printing if (fabs(determinant(A, N)) >= 0.00001) { printf("\nInverse Matrix:\n"); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) printf("%.2f\t", InvA[i][j]); printf("\n"); } } return 0; }