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