Skip to content

Commit 306de99

Browse files
authored
Create calc_matriz_met_Gauss_refi.py
Calculates linear systems using the Gauss method with refinement.
1 parent fa11a7b commit 306de99

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

Diff for: python/calc_matriz_met_Gauss_refi.py

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import math
2+
def EliminaGaussiana(A,b):
3+
for k in range(0,n-1):
4+
pivo = A[k][k]
5+
l_pivo = k
6+
for i in range(k+1,n-1):
7+
if (abs(A[i][k]) > abs(pivo)):
8+
pivo = A[i][k]
9+
l_pivo = i
10+
if pivo == 0:
11+
break
12+
13+
if l_pivo != k:
14+
for j in range(0,n):
15+
troca = A[k][j]
16+
A[k][j] = A[l_pivo][j]
17+
A[l_pivo][j] = troca
18+
troca = b[k]
19+
b[k] = b[l_pivo]
20+
b[l_pivo] = troca
21+
22+
for i in range(k+1,n):
23+
m = A[i][k]/A[k][k]
24+
A[i][k]=0
25+
for j in range(k+1,n):
26+
A[i][j]=A[i][j]-m*A[k][j]
27+
b[i] = b[i] - m*b[k]
28+
29+
x = [0]*n
30+
x[n-1] = b[n-1]/A[n-1][n-1]
31+
32+
for i in range(n-2,-1,-1):
33+
soma = 0
34+
for j in range(i,n):
35+
soma = soma + A[i][j]*x[j]
36+
x[i] = (b[i] - soma)/A[i][i]
37+
38+
return x
39+
40+
def calVetor(A,r,b,x):
41+
42+
for i in range(0,n):
43+
for j in range(0,n):
44+
r[i] += A[i][j]*x[j]
45+
46+
for i in range(0,n):
47+
r[i] = b[i] - r[i]
48+
49+
return r
50+
51+
def norma(r):
52+
norma = 0
53+
for i in range(0,n):
54+
norma = r[i]**2 + norma
55+
norma = math.sqrt(norma)
56+
return norma
57+
58+
print("nome do arquivo")
59+
name = input()
60+
arquivo = open(name, "r")
61+
v = (arquivo.readline())
62+
v = v[:-1]
63+
n = int(v) #tamanho da matriz
64+
l = [0]*(n+1) #matriz auxiliar
65+
A = [0]*n #matriz A
66+
for x in range(0,n): #gerando as matrizes zeradas
67+
A[x] = [0]*n
68+
69+
b = [0]*n #vetor b
70+
r = [0]*n #vetor residual
71+
i = 0
72+
73+
#lendo arquivo
74+
75+
for linha in arquivo:
76+
l[i] = linha.split()
77+
i=i+1
78+
79+
80+
#gerando as matrizes com os valores
81+
82+
for x in range(0,n):
83+
for i in range(0,n+1):
84+
if i == n:
85+
b[x] = float(l[x][i])
86+
else:
87+
A[x][i] = float(l[x][i])
88+
89+
#iterações de refinamento
90+
91+
for i in range(0,2):
92+
x = EliminaGaussiana(A,b)
93+
r = calVetor(A,r,b,x)
94+
b = r
95+
norm = norma(r)
96+
print("Norma:")
97+
print(norm)
98+
print("Vetor residual:")
99+
print(r)

0 commit comments

Comments
 (0)