1+ def gauss_partial (matrix : list , index_column : int ):
2+ index_max_val = index_column
3+
4+ for i in range (index_column , len (matrix )):
5+ if matrix [index_column ][index_column ] < abs (matrix [i ][index_column ]):
6+ index_max_val = i
7+
8+ if index_column != index_max_val :
9+ matrix [index_column ], matrix [index_max_val ] = matrix [index_max_val ], matrix [index_column ]
10+
11+
12+ def verify_triangular (matrix : list ) -> bool :
13+
14+ for i in range (len (matrix )):
15+ for j in range (i , len (matrix )):
16+
17+ if (j == i and matrix [j ][i ] == 0 ) or (j != i and matrix [j ][i ] != 0 ):
18+ return False
19+
20+ return True
21+
22+
23+ def gauss (matrix : list , index : int ) -> list :
24+
25+ for j in range (index + 1 , len (matrix )):
26+ coefficient = round (matrix [j ][index ] / matrix [index ][index ], 2 )
27+ matrix [j ][index ] = 0
28+
29+ for k in range (index + 1 , len (matrix )+ 1 ):
30+ matrix [j ][k ] = round (matrix [j ][k ] - coefficient * matrix [index ][k ], 5 )
31+
32+ return matrix
33+
34+
35+ def resolve_linear_system (matrix : list ) -> list :
36+ sum = 0
37+ n = len (matrix )
38+ results = [1 ] * n
39+
40+ for i in range (n - 1 , - 1 , - 1 ):
41+
42+ for j in range (n - 1 , i , - 1 ):
43+ sum = sum + matrix [i ][j ]* results [j ]
44+
45+ results [i ] = round ((matrix [i ][n ] - sum )/ matrix [i ][i ], 2 )
46+ sum = 0
47+
48+ return results
49+
50+
51+ def resolve_matrix (matrix : list ):
52+
53+ for i in range (len (matrix )):
54+ gauss_partial (matrix , i )
55+ matrix = gauss (matrix , i )
56+
57+ print ('\n The matrix after Gauss:' )
58+
59+ for line in matrix :
60+ print ("[" , end = '' )
61+ print (* (f'{ val } ' for val in line ), end = '' )
62+ print ("]" )
63+
64+ if verify_triangular (matrix ):
65+
66+ print ("\n The result of Gauss Elimination with Partial Pivoting:" )
67+ for i , x in enumerate (resolve_linear_system (matrix )):
68+ print (f'x_{ i } = { x } ' )
69+
70+ else :
71+ print ("It's impossible to resolve, because it's not a triangular matrix" )
72+ return 0
73+
74+
75+ def take_matrix () -> list :
76+
77+ line = 0
78+ matrix = []
79+ max_length = 0
80+
81+ number_lines = int (input ("Please, insert the length of the your matrix: " ))
82+ print ("Please, insert only the numbers of the your augmented matrix (separete with espace):" )
83+
84+ for i in range (number_lines ):
85+
86+ try :
87+ line = list (input ().split ())
88+ line = list (int (val ) for val in line )
89+
90+ if max_length < len (line ):
91+ max_length = len (line )
92+
93+ matrix .append (line )
94+
95+ except :
96+ print ("This matrix don't exist!!!" )
97+ return 1
98+
99+ if len (matrix ) == max_length - 1 :
100+ return matrix
101+
102+ return 0
103+
104+
105+ if __name__ == '__main__' :
106+
107+ matrix = take_matrix ()
108+
109+ if matrix == 0 :
110+ print ("It's impossible to resolve" )
111+
112+ else :
113+ print ('The matrix:' )
114+
115+ for line in matrix :
116+ print ("[" , end = '' )
117+ print (* (f'{ val } ' for val in line ), end = '' )
118+ print ("]" )
119+
120+ resolve_matrix (matrix )
0 commit comments