📄 gauss_jordan.py
/home/palash/git/misc/maths/gauss_jordan.py
Language: py • Lines: 110
# Python3 Implementation for Gauss-Jordan
# Elimination Method
M = 10

# Function to print the matrix
def PrintMatrix(a, n):
	for i in range(n):
		print(*a[i])

# function to reduce matrix to reduced
# row echelon form.
def PerformOperation(a, n):
	i = 0
	j = 0
	k = 0
	c = 0
	flag = 0
	m = 0
	pro = 0

	# Performing elementary operations
	for i in range(n):
		if (a[i][i] == 0):

			c = 1
			while ((i + c) < n and a[i + c][i] == 0):
				c += 1
			if ((i + c) == n):

				flag = 1
				break

			j = i
			for k in range(1 + n):

				temp = a[j][k]
				a[j][k] = a[j+c][k]
				a[j+c][k] = temp

		for j in range(n):

			# Excluding all i == j
			if (i != j):
				# Converting Matrix to reduced row
				# echelon form(diagonal matrix)
				p = a[j][i] / a[i][i]

				k = 0
				for k in range(n + 1):
					a[j][k] = a[j][k] - (a[i][k]) * p

	return flag

# Function to print the desired result
# if unique solutions exists, otherwise
# prints no solution or infinite solutions
# depending upon the input given.
def PrintResult(a, n, flag):

	print("Result is : ")

	if (flag == 2):
		print("Infinite Solutions Exists<br>")
	elif (flag == 3):
		print("No Solution Exists<br>")

	# Printing the solution by dividing constants by
	# their respective diagonal elements
	else:
		for i in range(n):
			print(a[i][n] / a[i][i], end=" ")

# To check whether infinite solutions
# exists or no solution exists
def CheckConsistency(a, n, flag):

	# flag == 2 for infinite solution
	# flag == 3 for No solution
	flag = 3
	for i in range(n):
		sum = 0
		for j in range(n):
			sum = sum + a[i][j]
		if (sum == a[i][j]):
			flag = 2

	return flag

# Driver code
a = [[2, 2, 4], [3, 3, 6]]

# Order of Matrix(n)
n = 2
flag = 0

# Performing Matrix transformation
flag = PerformOperation(a, n)

if (flag == 1):
	flag = CheckConsistency(a, n, flag)

# Printing Final Matrix
print("Final Augmented Matrix is : ")
PrintMatrix(a, n)
print()

# Printing Solutions(if exist)
PrintResult(a, n, flag)

# This code is contributed by phasing17