Você está na página 1de 9

Exerccio Programa 2 - MAP2014

Marcus Vinicius Saad


9 de abril de 2014

Objetivo
Mtodo de Eliminao de Gauss com pivoteamento parcial

Code 1: Exemplo de cdigo. No se esquea de mudar para a linguagem utilizada no comando 'language=C'.
1

D i s c i p l i n a : MAP214

Autor :
MARCUS VINICIUS SAAD DE PAULA RODRIGUES
Num. USP :
7160861

EXERCICIO PROGRAMA 2

PARTE 1 : RESOLUCAO DE UM SISTEMA LINEAR DO TIPO


A. x = b USANDO O METODO DE GAUSS COM PIVOTEAMENTO

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

#include
#include
#define
int

< s t d i o . h>
< s t d l i b . h>

MAX 5 0 0

main ( )

/
VARIAVEIS DO PROGRAMA

float
int

a [MAX ] [ MAX] ,

i ,

j ,

m,

n,

k,

b [MAX] ,
lin ,

c [MAX] ,

col ,

aux [MAX ] [ MAX] ,

t r o c a [MAX] ,

m u l t [MAX ] ;

mem ;

/
ROTINA QUE RECEBE OS COEFICIENTES
DA MATRIZ A.
/
p r i n t f ( " ***** Parametros da matriz A *****\ n" ) ;
p r i n t f ( " Numero de linhas da matriz A: " ) ;
s c a n f ( "%d" , &n ) ;
p r i n t f ( "\n" ) ;
p r i n t f ( " Numero de colunas da matriz A: " ) ;
s c a n f ( "%d" , &m) ;

38

44

/
RECEBE OS COEFICIENTES DA MATRIZ AUMENTADA DO SISTEMA
/
p r i n t f ( "\n" ) ;
p r i n t f ( " Entre com os coeficientes da matriz A ...\ n" ) ;
p r i n t f ( " Lembrando que o A [0][0] , em C , corresponde ao elemento da linha 1 e coluna 1 \n"

45

for

39
40
41
42
43

46

) ;

for
( i

0;
( j

i
=

<
0;

n;
j

i ++){
< m;

j ++){

47

printf (

48

scanf

49

" A (%d ,% d) = " , i


"%f" , &a [ i ] [ j ] ) ;

j ) ;

50

51

printf (

"\n" ) ;

52
53
54
55
56
57
58
59

/
ROTINA QUE RECEBE OS COEFICIENTES
DO VETOR b .
/
printf
( " Entre com os coeficientes do vetor b :\ n" ) ;

for

60
61

( i

0;

<

n;

i ++){

" b (% d) = " ,
( "%f" , &c [ i ] ) ;

printf (
scanf

i ) ;

62
63
64
65
66
67
68
69

/
PREENCHE A MATRIZ AUMENTADA DE ACORDO
COM A MATRIZ A E O VETOR b .
/
printf
( "\ nMatriz aumentada ...\ n" ) ;

for

70
71

( i

0;
( j

i
=

aux

<

n;

0;

i ++){
< m;

[ i ][ j ]

j ++){

a[ i ][ j ];

72
73

for

aux

[ i ][ j ]

c [ i ];

74
75
76
77
78
79
80

/
EXIBE A MATRIZ AUMENTADA
QUE IRA SER RESOLVIDA .
/

for

81
82

for
( i

0;
( j

i
=

<

n;

0;

printf

j
(

i ++){

<= m;

j ++){

" %.2 f " ,

aux [ i ] [ j ] ) ;

83

printf

84

85

printf (

"\n" ) ;

"\n" ) ;

86
87
88
89
90
91
92
93
94
95
96
97

/
METODO DE GAUSS COM PIVOTEAMENTO.
/
( lin = 0,
col = 0;
l i n < n 1 ; l i n ++, c o l ++){
/
PROCURA, NA COLUNA 0 , PELO ELEMENTO
DE MAIOR VALOR ABSOLUTO. ELE SERA
O PIVOT .
/

for

for

98
99

for
( i

lin

if

( j

0;

1;
j

<

n;

<= m;

( aux [ i ] [ j ]
mem =

>

i ++){
j ++)
aux [ l i n ] [ c o l ] ) {

i ;

/
COLOCA A LINHA DO PIVOT DE MAIOR VALOR
ABSOLUTO NA POSICAO SUPERIOR, LINHA 0 (ZERO) .
/

100
101
102
103

for

104
105

( j

0,

troca [ j ]

= mem ;
=

106

aux [ i ] [ j ]

107

aux [ l i n ] [ j ]

108

<= m;

j ++){

aux [ l i n ] [ j ] ;
=

troca [ j ] ;

109
110

aux [ i ] [ j ] ;

}
}

111
112
113

/
ENCONTRADO O PIVOT DE MAIOR VALOR ABSOLUTO,

CALCULASE OS MULTIPLICADORES QUE IRAO ZERAR


OS ELEMENTOS DAS COLUNAS.
/

114
115
116

for

117
118
119

( i

lin

mult [ j ]

+
=

1,

0;

<

n;

i ++,

j ++){

aux [ i ] [ c o l ] / aux [ l i n ] [ c o l ] ;

120

/
ROTINA QUE ZERA OS ELEMENTOS DAS COLUNAS
UTILIZANDO OS MULTIPLICADORES CALCULADOS
ANTERIORMENTE.
/

121
122
123
124
125

for

126
127

for
( i

128
129

lin
( j

1,

0;

k =

0;

<= m;

aux [ i ] [ j ]

<

n;

i ++,

k++){

j ++){

aux [ l i n ] [ j ]

mult [ k ]

130

aux [ i ] [ 0 ]

131

132

printf

0;

"\n" ) ;

133

/
EXIBE AS MATRIZES INTERMEDIARIAS .
/

134
135
136

for

137
138

for
( i

139
140

0;
( j

i
=

<

n;

0;

printf

j
(

i ++){

<= m;

j ++){

" %.2 f " ,

aux [ i ] [ j ] ) ;

141

printf

142

"\n" ) ;

143

144

/
DEPOIS DE OBTER A MATRIZ FINAL ,
TRIANGULARIZADA, A ROTINA ABAIXO
CALCULA OS VALORES DAS VARIAVEIS
DO SISTEMA, NO CASO, AS CORRENTES.
/
( l i n = n 1 ; l i n >= 0 ;
l i n ){

145
146
147
148
149
150

for

151
152
153
154
155

for

b[ lin ]

aux [ l i n ] [ n ] / aux [ l i n ] [ l i n ] ;

( i

0;

<

lin ;

aux [ i ] [ l i n ]

for

i ++){

aux [ i ] [ l i n ]

b[

lin ];

156
157

( i

158

<

lin ;

aux [ i ] [ n ]

0;

aux [ i ] [ n ]

aux [ i ] [ l i n ]

159

i ++){

aux [ i ] [ l i n ] ;

aux [ i ] [ l i n ] ;

160

161

printf

"\n" ) ;

162

/
EXIBE A SOLUCAO DO SISTEMA, OU SEJA ,
AS CORRENTES I1 , I 2 E I 3 .
/
printf
( " Solucao do sistema ... " ) ;

163
164
165
166
167

for

168
169
170
171

( i

0,

printf

j
(

1;

<

n;

i ++,

"\ nI_ %d = %.3 f\n" ,

j ++){
j ,

b[ i ]) ;

}
}

aux [ i ] [ j ] ;

Figura 1: Funcionamento do mtodo de eliminao de Gauss com pivoteamento parcial. Input e output do
programa.
1

Mtodo de Jacobi

Code 2: Exemplo de cdigo. No se esquea de mudar para a linguagem utilizada no comando 'language=C'.
1

D i s c i p l i n a : MAP214

Autor :
MARCUS VINICIUS SAAD DE PAULA RODRIGUES
Num. USP :
7160861

EXERCICIO PROGRAMA 2

PARTE 1 . b :

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#include
#include
#include

DEFINE A DIMENSAO DA MATRIZ A (MAX)


E A PRECISAO DO PROGRAMA ( e p s )
/

19
20
22
23
24
25

#define
#define
int

MAX 5 0 0
eps

main ( )

26

29
30
31

0.00001

27
28

<math . h>

18

21

< s t d i o . h>
< s t d l i b . h>

VARIAVEIS DO PROGRAMA
A[MAX] [MAX] : MATRIZ AUMENTADA DO SISTEMA
x [MAX] : VETOR QUE ARMAZENA A SOLUCAO DO SISTEMA
x_ :
SERVE PARA CALCULAR AS COMPONENTE DO VETOR x [MAX]

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

v e t o r _ a u x [MAX] : AUXILIA NO CALCULO DAS COMPONENTES DE x [MAX]

E TAMBEM NO CRITERIO DE PARADA


n : RECEBE A DIMENSAO DA MATRIX
o u t p u t : APONTA PARA O ARQUIVO DE SAIDA
/

float

A [MAX ] [ MAX] ,

float

max =

int

i ,

printf
scanf

j ,

1;

for

printf

57
58

k,

m,

n;

( " ENTRE COM A DIMENSAO DA MATRIZ A: " ) ;


"%d" , &n ) ;

53

59

aux ;

output ;

FILE

52

56

v e t o r _ a u x [MAX] ,

/
CONTADORES E PONTEIRO PARA O ARQUIVO DE SAIDA .
/

51

55

x_ ,

/
DEFINE O CRITERIO DE PARADA IGUAL
A 1 . ESSE VALOR DEVE SER MAIOR DO QUE e p s .
VEJA A CONDICAO DO LACO (FOR) , LINHA 6 4 .
/

50

54

x [MAX] ,

for
( i

"\ nENTRE COM OS COEFICIENTES DA MATRIX AUMENTADA ... \n" ) ;

0;
( j

i
=

<
0;

scanf

n;
j

i ++){

<= n ;

"%f" ,

j ++){

&A [ i ] [ j ] ) ;

}
}

60
61
62
63
64
65
66

/
INICIALIZA O VETOR x [MAX] INICIAL COM
COMPONENTES IGUAIS A 1 (UM) .
/

for

67
68

( i

0;

<

n;

vetor_aux [ i ]
x[ i ]

i ++){
1;

1;

69
70
71
72
73
74
75

/
MENSAGEM DE ERRO CASO NAO SEJA POSSIVEL
ABRIR O ARQUIVO DE SAIDA PARA ESCRITA
/
( ( o u t p u t = f o p e n ( " output . txt " , "w" ) ) == NULL) {
p r i n t f ( " Erro na abertura do arquivo de saida !\ n" ) ;

if

76
77

exit (1) ;
}

78
79
80
81
82
83
84
85
86
87

/
CRIA O CABECALHO DO ARQUIVO DE SAIDA
COM OS SEGUINTES PARAMETROS: INTERACAO
VARIAVEIS DO PROBLEMA (NESTE CASO, CORRENTES)
E ERRO.
/
f p r i n t f ( o u t p u t , "k " ) ;

for

( i

0;

fprintf

<

n;

i ++){

( output ,

88

89

f p r i n t f ( output ,

"I%d " ,

( i +1) ) ;

" Erro \n" ) ;

90
91
92
93
94
95
96
97
98

/
PREENCHE A SEGUNDA LINHA DO ARQUIVO DE SAIDA
COM OS VALORES DE k , DO VETOR INICIAL E COM
O ERRO. ESTE, AINDA NAO SENDO DEFINIDO .
/
f p r i n t f ( o u t p u t , "0 " ) ;

for

( i

0;

fprintf

<

n;

i ++){

( output ,

"%d " ,

x[ i ]) ;

99

100

fprintf

" -\n" ) ;

( output ,

101

/
METODO DE JACOBI
/

102
103
104

for

105
106
107
108

(k =

for

1;

max =

max >

0;

x_ =

( i

0;

for

109
110

if
else

( j

<

k++){

112
113

n;

0;

( i

111

114

eps ;

0;

i ++){

<

!=

n;

j ++){

j )

x_ = x_ +

x[ i ]

(A [ i ] [ j ]

vetor_aux [

j ] ) /A [ i ] [ i ] ;

= A[ i ] [ n ] /A[ i ] [ i ] ;

115

x[ i ]

116

= x[ i ]

x_ ;

117

/
CALCULA O CRITERIO DE PARADA.
O
/
max = f a b s ( x [ 0 ] v e t o r _ a u x [ 0 ] ) ;

118
119
120
121
122

for

123
124

( i

if

125
126
127

128

for

129
130
131

aux

( i

1;

<

n;

= x[ i ]

( aux > max )


max =

0;

aux ;

<

n;

vetor_aux [ i ]

i ++){

= x[ i ];

132
133

fprintf

134

for

135
136
137

( i

( output ,

0;

fprintf

<

"%d " ,
n;

k) ;

i ++){

( output ,

" %.3 f " ,

x[ i ]) ;

138
139

fprintf

140

( output ,

" %.6 f\n" ,

max ) ;

141
142

for

f p r i n t f ( output ,

143
144
145
146

i ++){

vetor_aux [ i ] ;

( i

0;

<

"\n ***** A solucao do sistema eh ... ***** \n" ) ;


n;

f p r i n t f ( output ,

i ++){

"I%d = %.3 f \n" ,

i +1 ,

x[ i ]) ;

}
}

Mtodo de Gauss-Seidel

= 4 Area

Pode-se utilizar o cdigo dessa forma, que simples para todos lerem.
Vc pode colcocar as gura de vrios jeitos, de gura simples como a gura 2

(1)

Tabela 1: Resultados Jacobi


k
0
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

I1

0
1.109
1.261
1.233
1.158
1.172
1.208
1.202
1.184
1.187
1.196
1.194
1.190
1.191
1.193
1.193
1.191
1.192
1.192
1.192
1.192
1.192
1.192
1.192
1.192
1.192
1.192
1.192
1.192
1.192

I2

I3

0
0.925
0.585
0.648
0.814
0.784
0.702
0.717
0.757
0.750
0.730
0.734
0.743
0.741
0.737
0.738
0.740
0.739
0.738
0.738
0.739
0.739
0.739
0.739
0.739
0.739
0.739
0.739
0.739
0.739

0
0.000
0.185
0.676
0.585
0.344
0.388
0.507
0.485
0.427
0.438
0.466
0.461
0.447
0.449
0.456
0.455
0.452
0.452
0.454
0.454
0.453
0.453
0.453
0.453
0.453
0.453
0.453
0.453
0.453

Erro
0.109244
0.184716
0.490883
0.166715
0.013715
0.044510
0.118286
0.040173
0.003305
0.010726
0.028503
0.009680
0.000796
0.002584
0.006868
0.002333
0.000192
0.000623
0.001655
0.000562
0.000046
0.000150
0.000399
0.000135
0.000011
0.000036
0.000096
0.000033
0.000003

Figura 2: Grupo compacto de galxias


ou guras duplas, como a 3.

(a) Grupo compacto de galxias

(b) Mesmo grupo compacto de galxias

Figura 3: Grupos
Voc deve tambm por tabelas para mostrar seus dados. Para converter uma tabela do Excel/Calc para uma
do Latex use este site http://www.acsu.bualo.edu/ gregoryt/exceltolatex.html .
De qualquer modo, Bom EP!

Tabela 2: Exemplo de tabela.


Seed uilizado
7160882
-7160882
7160603
7161222
4060603

Valor de convergido Diferena entre iteraes (em mdulo)


3.13528000
0,00025554
3.14224000
0,00021798
3.14172000
0,00013842
3.14116000
0,00030146
3.14136000
0,00009874

Você também pode gostar