Escolar Documentos
Profissional Documentos
Cultura Documentos
PROJETO COMPUTACIONAL
APLICAO DE MTODOS DIRETOS E ITERATIVOS NA SOLUO
DE SISTEMAS LINEARES RESULTANTE DA ANLISE NODAL DE
CIRCUITOS ELTRICOS RESISTIVOS
So Lus
2011
PROJETO COMPUTACIONAL
APLICAO DE MTODOS DIRETOS E
ITERATIVOS NA SOLUO DE SISTEMAS
LINEARES RESULTANTE DA ANLISE NODAL DE
CIRCUITOS ELTRICOS RESISTIVOS
Trabalho apresentado disciplina
de Mtodos Numricos e
Otimizao para obteno da
terceira nota.
So Lus
2011
Sumario
Introduo
Os Mtodos Anlise de Malhas e Anlise Nodal so bastante
utilizados em clculos de Engenharia. Esses mtodos baseiam-se em
sistemas matriciais que possuem o nmero de equaes igual ao
nmero de correntes, que por sua vez, igual ao nmero de malhas
do circuito analisado.
As resolues desses sistemas podem tornar-se to
complexas, que seria invivel a utilizao dessas tcnicas de anlise.
H vrias ferramentas computacionais existentes para a aplicao
dos dois mtodos, porm, microcomputadores convencionais no
possuem mobilidade alguma e at mesmo os laptops tornam-se
inviveis para muitas aplicaes e locais onde so requisitados.
No intuito de automatizar os clculos de engenharia, diversas
ferramentas computacionais so desenvolvidas para facilitar o
trabalho dos engenheiros.
I YE
onde :
I o vetor das injees nodais de corrente
E vetor das tenses nodais em relao ao n de referncia.
Y matriz de admitncia nodal
Em sistemas de potncia geralmente o n de referncia o
n terra, sendo os demais ns as barras do sistema:
IBarra = YBarra ZBarra
Na sua forma inversa tem-se:
EBarra = YBarra-1 IBarra
YBarra
esparsa
ZBarra
YBarra-1
Cheia
ZBarra
Elementos diagonais
i e y ik
K
barra vizinha a
admitncia da linha i-k
K vizinho a i
y ik
K no vizinho a i
iK
0
=
Ya
Yc
Ya
Yb
Ya Yb
Ya
Ya Yc
Yc
Ya
Yc
Yb Yc
YBarra =
Matriz singular (colunas combinao linear)
Mau condicionamento: admitncia fraca entre a rede e o n
de referncia
Bom condicionamento: forte conexo com o n de referncia.
Ax b
onde:
matriz de coeficientes
vetor de variveis
nn
n 1
n 1
Mtodos
Diretos
Re gra de Cramer
Inverso da Matriz A
Estacionrios
Mtodos
Iterativos
Gauss Jacobi
Gauss Seidel
Sobrerelax ao
Gradiente Conjugado
Gradiente Biconjugad o
No Estacionrios
GradienteBiconjugadoEstabiliza do
etc..
l 11
l
21
0
l 22
l
n1
0
0
1 u 12
0 1
l n2
l nn
u 1n
u 2n
a 11
a
21
a 31
a 12
a 22
a 32
a 13 b1
l11
a 23 b 2 l 21
l 31
a 33 b 3
0
l 22
l 32
0
0
l 33
1 u 12
0 1
0 0
u 13 c1
u 23 c 2
1 c 3
l11 a 11
l 21 a 21
u12 a 12 / l11
l 31 a 31
u13 a 13 / l11
c 1 b 1 / l 11
l 22 a 22 l 21u12
l 32 a 32 l 31u 12
u 23 (a 23 l 21 u 13 ) / l 22
l 33 a 33 l 31u13 l 32 u 23
c 2 ( b 2 l 21 c 1 ) / l 22
c 3 ( b 3 l 31 c 1 l 32 c 2 ) / l 33
Note que o clculo de c pode ser feito da mesma forma que o clculo de u.
A sequncia de operaes :
x3 c3
x 2 c 2 u 23 x 3
x 1 c 1 u 13 x 3 u 12 x 2
a 11
a 21
a 31
a 12
a 22
a 32
a 13 b 1 l 11
a 23 b 2 l 21
a 33 b 3 l 31
u 12
l 22
l 32
u 13 c 1
u 23 c 2
l 33 c 3
l i1 a i1
i = 1,2,3,...,n
l ik a ik l ir u rk
r 1
u kj
k (i = k,k+1,...,n)
k 1
a kj l kr u rj
l kk
r 1
j > k (j = k+1,...,n+1)
bi
a i4
ci
Armazenam-se os valores de
em
e
em
decomposta L e U na prpria rea de memria de A.
a11 a12
a 21 a 22
a 31 a 32
a13 a14
a 23 a 24
a 33 a 34
l11
l 21
l 31
u i4
aps a decomposio LU
u12
l 22
l 32
e a matriz
u13 u14
u 22 u 24
l 33 u 34
x C x g (x)
iterativo
, onde:
em um processo
g
vetor com dimenses
nn
n 1
(x)
funo de iterao matricial
2.2.1.
..................................................................
..................................................................
a n1 x1 a n 2 x 2 a n 3 x 3 ............a nn x n bn
aii 0, i 1,2,..., n
Supondo
, isola-se o vetor
matriz de coeficientes.
x1( k 1)
1
(b1 a12 x 2( k ) a13 x3( k ) .......... a1n x n( k ) )
a11
x 2( k 1)
1
(b2 a 21 x1( k ) a 23 x3( k ) .......... a 2 n x n( k ) )
a 22
x n( k 1)
1
(bn a n1 x1( k ) a n 2 x 2( k ) .......... a nn1 x n( k1) )
a nn
x Cx g
Assim, tem-se o sistema iterativo
, onde:
a12 / a11
a /a
21
22
a n1 / a nn
a13 / a11
a1n / a11
a 23 / a 22 a 2 n / a 22
a n 3 / a nn
a n 2 / a nn
b1 / a11
b /a
2 22
bn / a nn
(o )
x
sequncia
(o )
x
,
(1)
( 2)
(k )
, ......,
( k 1)
Cx
(k )
e seja:
a
j 1
jk
a kk
kj
max k 1
k 1, n
Se
(k )
x
independentemente da escolha da aproximao inicial
(0)
em:
Onde:
L Matriz Triangular Inferior
D Matriz Diagonal
U Matriz Triangular Superior
0
a
21
L a31
a n1
0
0
0
0
a 32 0
a n 2 a nn1
0
0
0
d11
0
D 0
0
d 22
0
0
0
d 33
0
0
0
0 d nn
(L D U )x b
Lx Dx U x b
D x b (L U )x
Dx
x
( k 1)
( k 1)
b (L U )x
(k )
D 1 b D 1 ( L U ) x
(k )
0 a12
0 0
U 0 0
0 0
a13
a 23
0
a1n
a 2 n
a n 1n
0
0
1
(b2 a 21 x1( k 1) a 23 x3( k ) a 24 x 4( k ) .......... a 2 n x n( k ) )
a 22
x3( k 1)
1
(b3 a31 x1( k 1) a32 x 2( k 1) a34 x 4( k ) .......... a 2 n x n( k ) )
a 22
x n( k 1)
1
(bn a n1 x1( k 1) a n 2 x 2( k 1) a n 3 x3( k 1) .......... a nn1 x n( k11) )
a nn
Onde:
L Matriz Triangular Inferior
D Matriz Diagonal
U Matriz Triangular Superior
em:
0
a
21
L a31
a n1
0
0
0
0
0
0
0
a 32 0
a n 2 a nn1
d11
0
D 0
0
d 22
0
0
0
d 33
0
0
0
0 d nn
0 a12
0 0
U 0 0
0 0
a13
a 23
0
a1n
a 2 n
a n 1n
0
0
(L D U )x b
Lx Dx U x b
D x b (L U ) x
x D 1 b D 1 L x D 1U x
x
( k 1)
D 1 b D 1 L x
( k 1)
D 1U x
(k )
, com A dimenso
a
j 1
jk
e seja:
nn
kj
a kk
max k 1
k 1, n
Se
(k )
x
independentemente da escolha da aproximao inicial
(0)
, com A dimenso
nn
e seja:
j 2,3,.............n
e para
a j1 1 a j 2 2 .............. a jj 1 j 1 a jj 1 ...... . a j1
a jj
max j
j 1, n
Define-se
1
Se
, ento o Mtodo de Gauss-Seidel gera uma sequncia convergente para a
soluo do sistema, qualquer que seja o vetor inicial. Alm disso, quanto menor for o
1
(bi aij x (jk 1) aij x (jk ) )
aii
j i
j i
1 w 2
0 w 1
Seja
A (M N ) n
e
no singular. Se M no ( M 1 N ) 1
M N
singular e o raio espectral de
satisfaa
, ento o
( k 1)
(k )
Mx
Nx b
processo iterativo definido por
converge para
(0)
1
xA b
x
para qualquer vetor
.
1
1
( M N ) max : ( M N )
1
( k 1)
b (L U )x
(k )
M D
N ( L U )
Para o Mtodo de Gauss-Seildel:
(L D U )x b
Lx Dx U x b
Lx Dx b U x
( L D) x
( k 1)
M ( L D)
N U
b U x
(k )
F ( x)
1 T
x Ax b T x
2
(1)
1
F ( x) (a11 x12 2a12 x1 x 2 a 22 x 22 ) b1 x1 b2 x 2
2
grad
F
x a x a x b
F ( x1 , x 2 ) 1 11 1 12 2 1 Ax b
F a12 x1 a 22 x 2 b2
x 2
(2)
1
F ( x sr ) ( x sr ) T A( x sr ) b T ( x sr )
2
(4)
dF
1
1
( x sr ) r T A( x sr ) ( x sr ) T Ar b T r
ds
2
2
rT r
s T
r Ar
Propriedade:
possvel
escolher
direes
linearmente
v Tj
A
= 0.
(garante a
ortogonalidade dos vetores)
2. sj+1 o nmero real que minimiza F(x(j) + svj+1), isto , o
mnimo de F ao longo da reta que passa por x(j) e tem direo
de vj+1 .
3. x(j+1) = x(j) + sj+1 vj+1
Existem vrias maneiras de construir vetores que satisfazem o
item 1. No algoritmo abaixo, que poder ser usado na
implementao do mtodo GC, apresentamos um destes
procedimentos. Quanto ao item 2, repetimos as mesmas contas
realizadas ao minimizar a funo (4) e podemos mostrar que
s j1
rjT v j1
v Tj1Av j1
z = Av
s
4:
aux
vT z
5:
x(k+1) = x(k) + s v
6:
r=rsz
7:
aux1 = rT r
8:
9:
4. Resultados
Os Resultados sero mostrado como plot do programa. Foi
criando uma funo main para chama todos os mtodos e aplica
cada um, assim podendo analisa cada resultado e obtendo a
concluso necessria.
Ser impresso:
Tempo de processamento
Numero de Somas e Subtrao
Numero de Multiplicao e Diviso
Erro Relativo
Numero de Interao para Mtodos Interativo
E por ultimo ser realizado um estudo comparativo entre a preciso e custo computacional
dos mtodos diretos e iterativos usados na soluo do sistema linear GV = I.
Nz =
Columns 1 through 15
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
Columns 16 through 30
-1
-1
-1
-1
Columns 31 through 45
-1
-1
-1
Columns 46 through 60
-1
-1
-1
-1
Columns 61 through 75
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
Columns 76 through 90
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
I=
2
0
0
3
0
0
4
0
2
0
0
3
0
0
4
0
2
0
0
3
0
0
4
0
2
0
0
3
0
0
4
0
2
0
0
3
0
0
4
0
A Matriz Esparsa
A Matriz positiva Definida
A Matriz bem condicionada
-------------------------------------------------------
Metodo Doolittle
Resultado
ans =
26.7500
22.0000
24.2500
20.5000
15.0000
17.5000
16.7500
13.2500
35.7500
33.6250
32.1250
35.8750
33.0000
30.6250
35.8750
31.8750
33.2500
31.1250
29.6250
33.3750
30.5000
28.1250
33.3750
29.3750
25.7500
23.6250
22.1250
25.8750
23.0000
20.6250
25.8750
21.8750
22.2500
20.1250
18.6250
22.3750
19.5000
17.1250
22.3750
18.3750
-------------------------------------------------------
Metodo de Cholesk
Resultado
ans =
26.7500
22.0000
24.2500
20.5000
15.0000
17.5000
16.7500
13.2500
35.7500
33.6250
32.1250
35.8750
33.0000
30.6250
35.8750
31.8750
33.2500
31.1250
29.6250
33.3750
30.5000
28.1250
33.3750
29.3750
25.7500
23.6250
22.1250
25.8750
23.0000
20.6250
25.8750
21.8750
22.2500
20.1250
18.6250
22.3750
19.5000
17.1250
22.3750
18.3750
-------------------------------------------------------
-------------------------------------------------------
Resultado
ans =
26.7500
22.0000
24.2500
20.5000
15.0000
17.5000
16.7500
13.2500
35.7500
33.6250
32.1250
35.8750
33.0000
30.6250
35.8750
31.8750
33.2500
31.1250
29.6250
33.3750
30.5000
28.1250
33.3750
29.3750
25.7500
23.6250
22.1250
25.8750
23.0000
20.6250
25.8750
21.8750
22.2500
20.1250
18.6250
22.3750
19.5000
17.1250
22.3750
18.3750
-------------------------------------------------------
Resultado
ans =
26.7500
22.0000
24.2500
20.5000
15.0000
17.5000
16.7500
13.2500
35.7500
33.6250
32.1250
35.8750
33.0000
30.6250
35.8750
31.8750
33.2500
31.1250
29.6250
33.3750
30.5000
28.1250
33.3750
29.3750
25.7500
23.6250
22.1250
25.8750
23.0000
20.6250
25.8750
21.8750
22.2500
20.1250
18.6250
22.3750
19.5000
17.1250
22.3750
18.3750
-------------------------------------------------------
Resultado
ans =
26.6947
21.9531
24.1970
20.4633
14.9702
17.4649
16.7268
13.2278
35.6731
33.5508
32.0545
35.8008
32.9295
30.5600
35.8045
31.8100
33.1764
31.0540
29.5575
33.3040
30.4325
28.0628
33.3075
29.3128
25.7177
23.5939
22.0954
25.8439
22.9704
20.5977
25.8454
21.8477
22.2191
20.0952
18.5967
22.3452
19.4717
17.0989
22.3467
18.3489
-------------------------------------------------------
Gradiente Conjugado
Resultado
xgc =
26.7500
22.0000
24.2500
20.5000
15.0000
17.5000
16.7500
13.2500
35.7500
33.6250
32.1250
35.8750
33.0000
30.6250
35.8750
31.8750
33.2500
31.1250
29.6250
33.3750
30.5000
28.1250
33.3750
29.3750
25.7500
23.6250
22.1250
25.8750
23.0000
20.6250
25.8750
21.8750
22.2500
20.1250
18.6250
22.3750
19.5000
17.1250
22.3750
18.3750
>>
10
-1
10
-2
10
-3
10
-4
10
-5
10
-6
10
-7
10
-8
10
100
200
300
400
500
600
700
800
900
1000
10
-2
10
-4
10
-6
10
-8
10
-10
10
100
200
300
400
500
600
700
10
-1
10
-2
10
-3
10
-4
10
50
100
150
Concluso
Mtodos Diretos:
1. Processos finitos (convergncia para qualquer sistema nosingular);
2. Apresentam problemas com erros de arredondamento;
3. Utiliza-se tcnicas de pivoteamento para amenizar os problemas
de arredondamento;
4. O processo de triangularizao destri a esparsidade da matriz de
coeficientes. Tcnicas de Esparsidade so utilizadas para amenizar
o enchimento da matriz.
5. Reduo de esforo computacional conseguido em solues para
vetores independentes adicionais com a matriz de coeficientes
mantida constante, com a utilizao da fatorao LU;
n3
6. Para matrizes cheias a soluo requer
operaes sem considerar
o pivoteamento.
Mtodos Iterativos:
1. Provavelmente mais eficientes para sistemas de grande porte,
principalmente com a utilizao de computao de alto
desempenho (vetorial e paralela);
2. Tem convergncia assegurada apenas sob certas condies;
3. Conserva a esparsidade da matriz de coeficientes;
2n 2
4. Os mtodos de G-J e G-S requerem
operaes por iteraes;
5. Poucas vantagens adicionais so conseguidas em solues para
vetores independentes adicionais com a matriz de coeficientes
mantida constante, como no caso da fatorao LU;
6. Carregam menos erros de arredondamento no processo, tendo em
vista que a convergncia uma vez assegurada independe da
aproximao inicial. Somente os erros da ltima iterao afetam a
soluo.
Bibliografia
MONTICELLI, Alcir Jos Fluxo de cargas em redes de energia em
eltrica. So Paulo, Edgard Blutcher, 1983.
FRANCO, Neide Bertoldi Clculo Numrico. Rio de Janeiro, Prentice
Hall, 2006.
ISBN 8576050870.
Anexos
kbran=ni_bran(ibran);
lbran=nf_bran(ibran);
switch type_bran(ibran);
case 1
name_bran='Resistor';
case 2
name_bran='Fonte';
otherwise
fprintf('Ramo #%d com tipo indefinido!!!!!\n',ibran);
fprintf('Parando...');
return;
end
fprintf(fid,'%4d %4d %8s
%10.4f\n',kbran,lbran,name_bran,size_bran(ibran));
end
%Fecha o arquivo de sada
fclose(fid);
G=zeros(num_node);
I = zeros(num_node,1);
for i=1:num_bran
if type_bran(i)==1
if ni_bran(i)~=0 && nf_bran(i)~=0
G(ni_bran(i),nf_bran(i)) = -1/size_bran(i);
G(nf_bran(i),ni_bran(i)) = -1/size_bran(i);
G(ni_bran(i),ni_bran(i)) = G(ni_bran(i),ni_bran(i))
+1/size_bran(i);
G(nf_bran(i),nf_bran(i)) = G(nf_bran(i),nf_bran(i))
+1/size_bran(i);
end
if nf_bran(i)==0
G(ni_bran(i),ni_bran(i)) = G(ni_bran(i),ni_bran(i))
+1/size_bran(i);
end
if ni_bran(i)==0
G(nf_bran(i),nf_bran(i)) = G(nf_bran(i),nf_bran(i))
+1/size_bran(i);
end
end
if type_bran(i)==2
if ni_bran(i)~=0 && nf_bran(i)~=0
I(ni_bran(i)) = I(ni_bran(i)) - size_bran(i);
I(nf_bran(i)) = I(nf_bran(i)) + size_bran(i);
end
if nf_bran(i)==0
I(ni_bran(i)) = I(ni_bran(i)) - size_bran(i);
end
if ni_bran(i)==0
I(nf_bran(i)) = I(nf_bran(i)) + size_bran(i);
end
end
end
Elementos Nulos
function Nonzeros(G)
n=length(G);
w=0;
for i=1:n
for j=1:n
if G(i,j)~=0
w=w+1;
Nz(w)=G(i,j);
end
end
end
fprintf('\n Elemento No Nulo da Matriz G \n');
Nz
function Nonzeros(G)
n=length(G);
w=0;
for i=1:n
for j=1:n
if G(i,j)~=0
w=w+1;
Nz(w)=G(i,j);
end
end
end
fprintf('\n Elemento No Nulo da Matriz G \n');
Nz
function G_esp(G)
n=length(G);
zeros=0;
for i=1:n
for j=1:n
if G(i,j)==0
zeros=zeros+1;
end
end
end
G_esp=zeros/n^2;
if G_esp>0.5
disp('A Matriz Esparsa')
else
disp('A Matriz Densa')
end
spy(G);
Esparsidade
Definida positiva.
function Def_Pos(G)
auto=eig(G);
cont=0;
for i=1:length(auto)
if auto(i)<0
disp('A matriz no Definida Positiva')
cont=1;
break
end
end
if cont~=1
disp('A Matriz positiva Definida')
end
Condicionamento da Matriz
function V_cond(G)
numcond=norm(G,inf)*norm(inv(G),inf);
if numcond>10000
disp('A Matriz mal condicionada')
else
disp('A Matriz bem condicionada')
end
Doolittle
function Doolittle(G,I)
fprintf('\n ------------------------------------------------------\n\n');
disp(' Metodo Doolittle');
tic % Comeo da Marcao de Tempo.
[m,n]=size(G);
U=zeros(m);
L=zeros(m);
ContSomaSubD = 0;
ContMultDivD = 0;
perdas=0;
for j=1:m
L(j,j)=1;
end
for j=1:m
U(1,j)=G(1,j);
end
for i=2:m
for j=1:m
for k=1:i-1
s1=0;
if k==1
s1=0;
else
for p=1:k-1
s1=s1+L(i,p)*U(p,k);
ContSomaSubD=ContSomaSubD+1;
ContMultDivD=ContMultDivD+1;
end
end
L(i,k)=(G(i,k)-s1)/U(k,k);
end
ContSomaSubD=ContSomaSubD+1;
ContMultDivD=ContMultDivD+1;
end
for k=i:m
s2=0;
for p=1:i-1
s2=s2+L(i,p)*U(p,k);
ContSomaSubD=ContSomaSubD+1;
ContMultDivD=ContMultDivD+1;
end
U(i,k)=G(i,k)-s2;
ContSomaSubD=ContSomaSubD+1;
end
end
%Mostra Resultados
fprintf('\n Resultado \n');
x'
%fprintf('\n Matriz L \n');
%L'
%fprintf('\n Matriz U \n');
%U'
tdoo=toc; %Encerra marcao de tempo
fprintf('\n Tempo de Processamento %f',tdoo);
fprintf('\n Numero de Soma %d',ContSomaSubD);
fprintf('\n Numero de Multiplicao %d',ContMultDivD);
fprintf('\n Perdas Resistiva %f',-perdas);
fprintf('\n ------------------------------------------------------\n\n');
%-------------------------------------------------------------------------
Cholesky
function Cholesky(G,I)
fprintf('\n ------------------------------------------------------\n\n');
disp(' Metodo de Cholesk')
tic % Comeo da Marcao de Tempo.
n = length( G );
L = zeros( n, n );
L(1,1)=sqrt(G(1,1));
perdas=0;
ContSomaSubC = 0;
ContMultDivC = 0;
for i=1:n
L(i,1)=G(i,1)/L(1,1);
end
for j=2:n
sun=0;
for k=1:j-1
sun=sun+(L(j,k))^2;
ContSomaSubC=ContSomaSubC+1;
ContMultDivC=ContMultDivC+2;
end
L(j,j)=sqrt(G(j,j)-sun);
for i=2:n
if i>j
sun=0;
for k=1:j-1
sun=sun+L(i,k)*L(j,k);
ContSomaSubC=ContSomaSubC+1;
ContMultDivC=ContMultDivC+1;
end
L(i,j)=(G(i,j)-sun)/L(j,j);
ContSomaSubC=ContSomaSubC+1;
ContMultDivC=ContMultDivC+1;
end
end
end
for i=1:n
for j=1:n
LT(j,i)=L(i,j);
end
end
Gauss Jacobi
function Gauss_Jacobi(G,I)
fprintf('\n ------------------------------------------------------\n\n');
disp(' Metodo Gauss Jacobi');
tic % Comeo da Marcao de Tempo.
n=length(G);
b=I;
intertol=1000;
tol=1e-10;
perdas=0;
ContSomaSubGJ = 0;
ContMultDivGJ = 0;
for i=1:n
r=1/G(i,i);
ContMultDivGJ=ContMultDivGJ+1;
for j=1:n
if i~=j
G(i,j)=G(i,j)*r;
ContMultDivGJ=ContMultDivGJ+1;
end
end
b(i)=b(i)*r;
x(i)=b(i);
ContMultDivGJ=ContMultDivGJ+1;
end
inter=0;
while 1
inter=inter+1;
for i=1:n
sun=0;
for j=1:n
if i~=j
sun=sun+G(i,j)*x(j);
ContSomaSubGJ=ContSomaSubGJ+1;
ContMultDivGJ=ContMultDivGJ+1;
end
end
v(i)=b(i)-sun;
ContSomaSubGJ=ContSomaSubGJ+1;
end
normnum=0;normden=0;
for i=1:n
t=abs(v(i)-x(i));
ContSomaSubGJ=ContSomaSubGJ+1;
if t>normnum
normnum=t;
end
if abs(v(i))>normden
normden=abs(v(i));
end
x(i)=v(i);
end
normrel=normnum/normden;
ContMultDivGJ=ContMultDivGJ+1;
if (normrel<tol)|(inter>intertol)
break
end
ErroR(inter)=normrel;
Intera(inter)=inter;
end
% Clculo das Perdas
for i=1:n
for j=1:(i-1)
perdas=perdas+G(i,j)*(x(i)-x(j))*(x(i)-x(j));
end
end
figure(1)
semilogy(Intera,ErroR)
normrelgj=normrel;
integj=inter;
fprintf('\n Resultado \n');
x'
tgj=toc; %Encerra marcao de tempo
fprintf('\n Tempo de Processamento %f',tgj);
fprintf('\n Numero de Soma %d',ContSomaSubGJ);
fprintf('\n Numero de Multiplicao %d',ContMultDivGJ);
fprintf('\n Numero de Interao %d',integj);
fprintf('\n Erro Relativo %d',normrelgj);
fprintf('\n Perdas Resistiva %f',-perdas);
fprintf('\n ------------------------------------------------------\n\n');
%------------------------------------------------------------------------
Gauss Seidel
function Gauss_Seidel(G,I)
fprintf('\n ------------------------------------------------------\n\n');
disp(' Metodo Gauss Seidel');
tic
n=length(G);
b=I;
intertol=1000;
tol=1e-10;
ContSomaSubGS = 0;
ContMultDivGS = 0;
perdas=0;
for i=1:n
r=1/G(i,i);
ContMultDivGS=ContMultDivGS+1;
for j=1:n
if i~=j
G(i,j)=G(i,j)*r;
ContMultDivGS=ContMultDivGS+1;
end
end
b(i)=b(i)*r;
x(i)=b(i);
ContMultDivGS=ContMultDivGS+1;
end
inter=0;
while 1
inter=inter+1;
for i=1:n
sun=0;
for j=1:n
if i~=j
sun=sun+G(i,j)*x(j);
ContSomaSubGS=ContSomaSubGS+1;
ContMultDivGS=ContMultDivGS+1;
end
end
v(i)=x(i);
x(i)=b(i)-sun;
ContSomaSubGS=ContSomaSubGS+1;
end
normnum=0;normden=0;
for i=1:n
t=abs(x(i)-v(i));
ContSomaSubGS=ContSomaSubGS+1;
if t>normnum
normnum=t;
end
if abs(x(i))>normden
normden=abs(x(i));
end
end
normrel=normnum/normden;
ContMultDivGS=ContMultDivGS+1;
if (normrel<tol)|(inter>intertol)
break
end
ErroR(inter)=normrel;
Intera(inter)=inter;
end
% Clculo das Perdas
for i=1:n
for j=1:(i-1)
perdas=perdas+G(i,j)*(x(i)-x(j))*(x(i)-x(j));
end
end
figure(2)
semilogy(Intera,ErroR)
normrelgs=normrel;
integs=inter;
%Mostra Resultados
fprintf('\n Resultado \n');
x'
tgs=toc; %Encerra marcao de tempo
fprintf('\n Tempo de Processamento %f',tgs);
fprintf('\n Numero de Soma %d',ContSomaSubGS);
fprintf('\n Numero de Multiplicao %d',ContMultDivGS);
fprintf('\n Numero de Interao %d',integs);
fprintf('\n Erro Relativo %d',normrelgs);
fprintf('\n Perdas Resistiva %f',-perdas);
fprintf('\n ------------------------------------------------------\n\n');
%-------------------------------------------------------------------------
Sobre Relaxao
function Sobre_Relaxacao(G,I)
fprintf('\n ------------------------------------------------------\n\n');
disp(' Metodo Sobre Relaxao');
tic % Comeo da Marcao de Tempo.
n=length(G);
b=I;
intertol=1000;
tol=0.0001;
omeg=1.2;
ContSomaSubSR = 0;
ContMultDivSR = 0;
for i=1:n
r=1/G(i,i);
ContMultDivSR=ContMultDivSR+1;
for j=1:n
if i~=j
G(i,j)=G(i,j)*r;
ContMultDivSR=ContMultDivSR+1;
end
end
b(i)=b(i)*r;
x(i)=b(i);
ContMultDivSR=ContMultDivSR+1;
end
inter=0;
while 1
inter=inter+1;
for i=1:n
sun=0;
for j=1:n
if i~=j
sun=sun+G(i,j)*x(j);
ContSomaSubSR=ContSomaSubSR+1;
ContMultDivSR=ContMultDivSR+1;
end
end
v(i)=x(i);
x(i)=omeg*(b(i)-sun)+(1-omeg)*x(i);
ContSomaSubSR=ContSomaSubSR+3;
ContMultDivSR=ContMultDivSR+2;
end
normnum=0;normden=0;
for i=1:n
t=abs(x(i)-v(i));
ContSomaSubSR=ContSomaSubSR+1;
if t>normnum
normnum=t;
end
if abs(x(i))>normden
normden=abs(x(i));
end
end
normrel=normnum/normden;
ContMultDivSR=ContMultDivSR+1;
if (normrel<tol)|(inter>intertol)
break
end
ErroR(inter)=normrel;
Intera(inter)=inter;
end
figure(3)
semilogy(Intera,ErroR)
normrelsr=normrel;
intesr=inter;
%Mostra Resultados
fprintf('\n Resultado \n');
x'
tsr=toc; %Encerra marcao de tempo
fprintf('\n Tempo de Processamento %f',tsr);
fprintf('\n Numero de Soma %d',ContSomaSubSR);
fprintf('\n Numero de Multiplicao %d',ContMultDivSR);
fprintf('\n Numero de Interao %d',intesr);
fprintf('\n Erro Relativo %d',normrelsr);
fprintf('\n ------------------------------------------------------\n\n');
%-------------------------------------------------------------------------
Gradientes Conjugados
function Gradientes_Conjugados(G,I)
fprintf('\n ------------------------------------------------------\n\n');
disp(' Gradiente Conjugado');
tic % Comeo da Marcao de Tempo.
n=length(G);
x=zeros(n,1);
mmax=n;
tol=1e-10;
res=zeros(1,mmax);
ContSomaSubGC = 0;
ContMultDivGC = 0;
perdas=0;
r=I-G*x;
ContMultDivGC=ContMultDivGC+1;
ContSomaSubGC=ContSomaSubGC+1;
d=r;
res(1)=dot(r,r);
aux=norm(I);
for m=1:mmax
p=G*d;
ContMultDivGC=ContMultDivGC+1;
xi=res(m)/dot(d,p);
ContMultDivGC=ContMultDivGC+1;
x=x+xi*d;
ContMultDivGC=ContMultDivGC+1;
ContSomaSubGC=ContSomaSubGC+1;
r=r-xi*p;
ContMultDivGC=ContMultDivGC+1;
ContSomaSubGC=ContSomaSubGC+1;
res(m+1)=dot(r,r);
if (sqrt(res(m+1))<tol*aux);
break
end
tau=res(m+1)/res(m);
d=r+tau*d;
ContMultDivGC=ContMultDivGC+1;
ContSomaSubGC=ContSomaSubGC+1;
end
if (m==mmax)
disp('O sistema no converge')
end
% Clculo das Perdas
for i=1:n
for j=1:(i-1)
perdas=perdas+G(i,j)*(x(i)-x(j))*(x(i)-x(j));
end
end
%Mostra Resultados
fprintf('\n Resultado \n');
xgc=x
tgc=toc; %Encerra marcao de tempo
fprintf('\n Tempo de Processamento %f',tgc);
fprintf('\n Numero de Soma %d',ContSomaSubGC);
fprintf('\n Numero de Multiplicao Escalar %d',ContMultDivGC);
fprintf('\n Numero de Interao %d',m);
%fprintf('\n Erro Relativo %d',normrelsr);
fprintf('\n Perdas Resistiva %f',-perdas);
fprintf('\n ------------------------------------------------------\n\n');