# Name : Ananda Das;
# ID : 230241053;
# Lab : 3 , Problem : 04;
def get_matrix_minor(matrix, i, j):
return [row[:j] + row[j+1:] for row in (matrix[:i] + matrix[i+1:])]
def determinant(matrix):
if len(matrix) == 1:
return matrix[0][0]
if len(matrix) == 2:
return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]
det = 0
for c in range(len(matrix)):
det += ((-1)**c) * matrix[0][c] * determinant(get_matrix_minor(matrix, 0, c))
return det
def replace_column(matrix, col_index, new_col):
return [
[new_col[row] if col == col_index else matrix[row][col] for col in range(len(matrix))]
for row in range(len(matrix))
]
def transpose(matrix):
return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix))]
def cofactor_matrix(matrix):
cofactors = []
for i in range(len(matrix)):
row = []
for j in range(len(matrix)):
minor = get_matrix_minor(matrix, i, j)
row.append(((-1) ** (i + j)) * determinant(minor))
cofactors.append(row)
return cofactors
def inverse_matrix(matrix):
det = determinant(matrix)
if det == 0:
return None
cofactors = cofactor_matrix(matrix)
adjoint = transpose(cofactors)
return [[adjoint[i][j] / det for j in range(len(matrix))] for i in range(len(matrix))]
def cramer_solver(A, B):
n = len(A)
detA = determinant(A)
if detA == 0:
return None, 0
solution = []
for i in range(n):
Ai = replace_column(A, i, B)
xi = determinant(Ai) / detA
solution.append(xi)
return solution, detA
# ------------ MAIN ------------
n = int(input("Enter the order of square matrix: "))
print("Enter coefficients of matrix A:")
A = [list(map(float, input().split())) for _ in range(n)]
print("Enter constants of vector B:")
B = list(map(float, input().split()))
solution, detA = cramer_solver(A, B)
print(f"\nDeterminant of A: {detA:.3f}")
if detA == 0:
print("Matrix is singular; the system is not uniquely solvable.")
exit()
print("\nThe solution using Cramer's Rule:")
for i, val in enumerate(solution):
print(f"x{i+1} = {val:.6f}")
# Inverse
invA = inverse_matrix(A)
print("\nInverse of matrix A:")
for row in invA:
print(" ".join(f"{val:.4f}" for val in row))