File tree 1 file changed +99
-0
lines changed
1 file changed +99
-0
lines changed Original file line number Diff line number Diff line change
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 )
You can’t perform that action at this time.
0 commit comments