Você está na página 1de 61

UNIVERSIDADE FEDERAL DO MARANHO

CENTRO DE CINCIAS EXATAS E TECNOLOGIA


DEPARTAMENTO DE ENGENHARI DE
ELETRICIDADE
CURSO: ENGENHARIA ELTRICA
DISCIPLINA: MTODOS NUMRICOS E
OTIMIZAO
Prof: ANSELMO RODRIGUES

VINCIUS CUNHA SOARES


LUIS FELIPE MOREIRA TEIXEIRA

PROJETO COMPUTACIONAL
APLICAO DE MTODOS DIRETOS E ITERATIVOS NA SOLUO
DE SISTEMAS LINEARES RESULTANTE DA ANLISE NODAL DE
CIRCUITOS ELTRICOS RESISTIVOS

So Lus
2011

VINCIUS CUNHA SOARES


LUIS FELIPE MOREIRA TEIXEIRA

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.

O objetivo, desse trabalho, apresentar alguns dos mais usuais


mtodos numricos para calcular as tenses nodais e as perdas
resistivas de um circuito eltrico composto por 40 (quarenta) ns e 75
(setenta e cinco) ramos, contendo 40 (quarenta) resistores e 15
(quinze) fontes de corrente. A organizao do trabalho foi feita em
partes integradas e complementares usadas sem dificuldades para
que se resolva o sistema linear G*V=I. A primeira parte consiste em
montar a matriz G (condutncia nodal) e o vetor de injeo de
correntes I. A segunda parte consiste em resolver o sistema linear e
obter as tenses nodais atravs de mtodos numricos. A terceira
parte consiste na apresentao dos resultados calculados por cada
mtodo alm de uma comparao dos custos computacionais de cada
mtodo. Os algoritmos escolhidos para resoluo do sistema linear
foram: dois mtodos diretos: Fatorao LU de Doolittle e Fatorao de
Cholesky; e quatro mtodos iterativos: Jacobi, Gauss-Seidel, Sobrerelaxao e mtodo dos Gradientes Conjugados.
Os algoritmos foram escritos na linguagem do Matlab.

1 . Tcnica de Anlise Nodal


Esta tcnica permite descobrir os valores das tenses nos ns
de um circuito composto apenas por resistores e fontes de corrente
independentes. Atravs dela somos capazes de montar um sistema
matricial para que encontremos mais facilmente os valores das
tenses em cada n do circuito.
O sistema matricial segue a frmula conhecida i = (V1 V2)/R
ou i = (V1 V2)*G e apresentada da seguinte maneira:
[G] * [V] = [i], onde:
[G] = Matriz das condutncias;
[i] = Matriz das correntes;
[V] = Matriz das tenses.

Figura 1 : Matriz Condutncia Nodal

Montando a matriz das condutncias:

A matriz de condutncias uma matriz do tipo simtrica que possui


as seguintes caractersticas:
o Gnn= soma das condutncias conectadas ao n k;
o Gmn = Gnm = soma das condutncias conectadas entre os
ns j e k.
Os elementos situados fora da diagonal principal so negativos.
1.1.Anlise Nodal em Sistema Eltricos
A equao matricial de desempenho de uma rede linear na
formulao nodal dada por:

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

Na ausncia de acoplamento mtuo, a matriz YBarra


montada com grande facilidade.
ii y ik
K

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
=

Condicionamento da matriz YBarra


Sistema sem ligao terra
Yb
1
11

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.

2 . Mtodos para a Soluo de


Sistemas Lineares

Ax b

Seja os Sistema Linear

onde:

matriz de coeficientes

vetor de variveis

nn

n 1

vetor independente (constantes)

n 1

Mtodos Diretos Fornece soluo exata aps um


nmero finito de operaes. Soluo assegurada para matriz de
coeficientes no-singular.

Mtodos

Diretos

Re gra de Cramer
Inverso da Matriz A

E lim inao de Gauss


Fatorao LU

Mtodos Iterativos Processo de aproximao iterativa

da soluo. A convergncia assegurada sob certas condies.

Estacionrios

Mtodos

Iterativos

Gauss Jacobi

Gauss Seidel
Sobrerelax ao

Gradiente Conjugado
Gradiente Biconjugad o

No Estacionrios

GradienteBiconjugadoEstabiliza do
etc..

2.1. Mtodo Direto


2.1.1. Mtodo de decomposio LU
A matriz A pode ser decomposta no produto A=LU, onde L
uma matriz triangular inferior e U uma matriz triangular superior ,
quando a matriz for no singular (Det (A) 0). Alm disso, se
atribuirmos valores fixos aos elementos da diagonal, seja de L (lii = 1
no Mtodo de Doolitle) ou em U (uii = 1 no Mtodo de Crout), esta
decomposio ser nica.
Para a soluo de A . x = b, pode-se decompor A segundo o
Mtodo de Crout, conforme segue:

l 11
l
21

0
l 22

l
n1

0
0

1 u 12
0 1

l n2

l nn

u 1n
u 2n

tal que A = L.U. Ento, o sistema torna-se L.U.x = b.


Fazendo U.x = c, resolve-se primeiro L.c = b e depois U.x = c.

Para um sistema 3x3 podemos escrever:

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

Esta multiplicao de matrizes pode ser usada para definir os


l ij u ij c i
a ij
bi
valores de ,
e
em termos dos valores
e .

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 :

1). Calcular a primeira coluna de L, calcular a primeira linha de


U e c1;
2). Calcular a segunda coluna de L, calcular a segunda linha de
U e c2;
e assim sucessivamente.
Os valores de x so obtidos por substituio sucessiva a partir
de c (U.x = c)

x3 c3
x 2 c 2 u 23 x 3
x 1 c 1 u 13 x 3 u 12 x 2

Note que, o vetor c tambm pode ser obtido do sistema parcial


L.c = b por substituies sucessivas.
Sugere-se usar o processo "tipo escada" para armazenar L e U
na mesma rea de memria, o que torna o processo mais eficiente.

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

De uma forma geral, para sistemas de ordem n:


- Operaes com o primeiro piv: k = 1

l i1 a i1

i = 1,2,3,...,n

u1j a1j / l11


j = 2,3,...,n+1

- Operaes com piv genrico: k = 2,3,...,n


k 1

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

2.1.2. Mtodo de Choleys

Se a matriz A definida positiva, podemos decomp-la


t
unicamente no produto GG , onde G uma matriz triangular inferior
com elementos positivos na diagonal

Multiplicando as linhas i pelas colunas i,


temos os elementos da diagonal da matriz A:

2.2. Mtodos Iterativos.


Ax b

Converter o sistema de equaes

x C x g (x)
iterativo

, onde:

em um processo

matriz com dimenses

g
vetor com dimenses

nn

n 1

(x)
funo de iterao matricial

2.2.1.

Mtodo Iterativo de Gauss-Jacobi

Considere o sistema linear:

a11 x1 a12 x 2 a13 x 3 ............a1n x n b1


a x a x a x ............a x b
22 2
23 3
2n n
2
21 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

mediante a separao pela diagonal da

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 )

Dado uma aproximao inicial

x
sequncia

(o )

x
,

(1)

( 2)

, o Mtodo de Gauss-Jacobi consiste em obter uma

(k )

, ......,

( k 1)

, por meio da relao recursiva:

Cx

(k )

Observe que o processo iterativo utiliza somente estimativas da iterao anterior.

2.2.1.1 Condies Suficientes para a Convergncia do


Mtodo de Gauss-Jacobi
Teorema
Ax b

Seja o sistema linear

e seja:

a
j 1
jk

a kk

kj

max k 1
k 1, n

Se

, ento o mtodo G-J gera uma seqncia

(k )

convergente para a soluo do sistema dado,

x
independentemente da escolha da aproximao inicial

(0)

Observe que esta uma condio suficiente, se for


satisfeita o mtodo converge, entretanto se no for satisfeita
nada se pode afirmar.

2.2.1.2 Frmula Matricial do Mtodo Gauss-Jacobi


Decompe-se a matriz de coeficientes
A L D U

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

2.2.2. Mtodo Iterativo de Gauss-Seidel


Ax b

Assim como no Mtodo de Gauss-Jacobi o sistema linear


escrito na forma equivalente:
x Cx g

Como no Mtodo Gauss-Jacobi, realizada uma separao


diagonal, e o processo iterativo de atualizao seqencial,
componente por componente. A diferena que, no momento de
realizar-se a atualizao das componentes do vetor numa
determinada iterao, a formulao utiliza as componentes da
iterao j atualizadas na iterao atual, com as restantes no
atualizadas da iterao anterior. Por exemplo, ao se calcular a
x (jk 1)
componente
da iterao (k+1), utiliza-se no clculo as
x1( k 1) , x 2( k 1) , ... , x (jk11)
componentes j atualizadas
com as componentes
(k )
x j 1 , x (jk)2 , ... , x n( k )
ainda no atualizadas da iterao anterior
.
1
x1( k 1)
(b1 a12 x 2( k ) a13 x3( k ) a14 x 4( k ) .......... a1n x n( k ) )
a11
x 2( k 1)

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

2.2.2.1. Frmula Matricial do Mtodo Gauss-Seidel


Decompe-se a matriz de coeficientes
A L D U

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 )

2.2.2.2.Estudo da Convergncia do Mtodo de GaussSeidel


Existem dois critrios de suficincia para a convergncia do
Mtodo de Gauss-Seidel. O critrio de linhas e o critrio de
Sassenfeld. O critrio de linhas o mesmo da Mtodo de GaussJacobi.

2.2.2.2.1 Critrios das linhas de Linhas


Ax b

Seja o sistema linear

, com A dimenso

a
j 1
jk

e seja:

nn

kj

a kk

max k 1
k 1, n

Se

, ento o mtodo Gauss-Seidel gera uma seqncia

(k )

convergente para a soluo do sistema dado,

x
independentemente da escolha da aproximao inicial

(0)

A matriz que satisfizer o critrio de linhas chamada de


diagonal dominante estrita.

2.2.2.2.2 Critrio de Sassenfeld


Ax b

Seja o sistema linear

, com A dimenso

nn

e seja:

a12 a13 a14 ....... a1n


a11

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

valor de mais rpida a convergncia.

2.2.3. Mtodo da Sobre relaxao Sucessiva


xi( k 1) xi( k ) w( x i( k 1) xi( k ) )
x i( k 1)

1
(bi aij x (jk 1) aij x (jk ) )
aii
j i
j i

1 w 2

- Utilizado para aumentar a velocidade de convergncia.

0 w 1

- Utilizado em sistemas com dificuldades de convergncia


pelo Mtodo de gauss Seidel.
Condies Necessria e Suficiente para Convergncia do Mtodo de
Gauss-Jacobi e Gauss-Seidel
Teorema
b n

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

Para o Mtodo de Gauss-Jacobi:


(L D U )x b
Lx Dx U x b
D x b (L U )x
Dx

( 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 )

2.2.4. Mtodo do Gradiente Conjugado


Os mtodos gradientes conjugados tm sido estudados a partir da
dcada de 50, motivados pela soluo de sistemas provenientes da
discretizao de equaes diferenciais parciais e viabilizados pela
entrada dos computadores nos clculos cientficos. Vrios autores
citam os trabalhos de Hestenes e Stiefel, de 1952, como base do que
foi desenvolvido posteriormente.
Consideraremos que a matriz do sistema linear seja simtrica e
positiva definida, isto , AT=A e xT Ax > 0, para qualquer x no-nulo.

Idia bsica dos mtodos do tipo gradiente, para resolver o


sistema Ax = b minimizar a funo de x = (x1, x2 , ..., xn )

F ( x)

1 T
x Ax b T x
2

(1)

Para simplificar, quando abrirmos as equaes matriciais, o


faremos supondo n = 2, embora o desenvolvimento seja o mesmo
para um nmero arbitrrio de componentes. Por exemplo, para
verificar que F(x) uma funo quadrtica nas componentes do
vetor x, tomamos n = 2 em (1):

1
F ( x) (a11 x12 2a12 x1 x 2 a 22 x 22 ) b1 x1 b2 x 2
2

onde foi usada a simetria da matriz A.

As curvas de nvel da funo F(x) so definidas por F(x1,x2) =


constante e, portanto, so elipses. Assim, o grfico de F(x) um
parabolide e esta funo tem um nico mnimo.
O mnimo da funo atingido no vetor x que anula o gradiente
da funo,

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)

Sendo assim, grad F(x1,x2) = 0 significa Ax = b, isto , a soluo


do sistema de equaes lineares minimiza a funo quadrtica e viceversa.
Como conhecido do Clculo Diferencial, o vetor gradiente aponta
a direo do mximo da funo. Portanto natural que, nos passos de
busca do mnimo, caminhemos na direo contrrio ao gradiente, isto
:

x(k+1) = x(k) sk grad F( x(k) ) .


(3)

Assim, a aproximao num passo k+1 calculada a partir da


aproximao no passo anterior, caminhando na direo contrria ao
gradiente. O parmetro real sk regula o tamanho do passo na ksima iterao.
Usando (2), temos que a direo de descida grad F( x(k) ) =

b Ax(k) = r(k) , que o resduo associado aproximao x(k) .


O parmetro sk em (3), tamanho do passo, ser usado na
minimizao do resduo associado aproximao que est sendo
calculada. Desta maneira vamos calcular o valor de s que minimiza

1
F ( x sr ) ( x sr ) T A( x sr ) b T ( x sr )
2

(4)

Fixado x, derivamos a funo com relao varivel s, aplicamos


a regra da cadeia e derivao do produto:

dF
1
1
( x sr ) r T A( x sr ) ( x sr ) T Ar b T r
ds
2
2

Usando a propriedade distributiva na operaes e as propriedades


de transposio de vetores e matrizes para mostrar que xTAr =

(Ar)T x = rTAx, uma vez que A simtrica temos


dF
( x sr ) sr T Ar r T ( Ax b) sr T Ar r T r
ds
Finalmente, igualando a derivada a zero, obtemos o valor de s que
minimiza a funo:

rT r
s T
r Ar

Mtodo dos Gradientes Conjugados

No Mtodo dos Gradientes Conjugados. GC, o mtodo do tipo gradiente mais


usado,

ainda supomos que A seja uma matriz simtrica positiva

definida. A base do mtodo GC a seguinte:

Propriedade:

possvel

escolher

direes

linearmente

independentes, v1 , ...., vn e, por meio da minimizao da funo

F(x(k) + svk), em cada uma das direes separadamente, construir


uma seqncia de aproximaes que fornea o mnimo da funo (1)
aps n passos (n o nmero de equaes do sistema).

Neste mtodo, cada novo vetor vj gerado depois de completo


um ciclo de minimizao, como descreveremos a seguir. Dada uma
aproximao inicial x(0) , tomamos a primeira direo v1 = grad

F(x(0)). Conhecidas as direes v1 , ...., vj e as aproximaes x(1)


, x(2) , ......, x(j) , tomamos:

1. vj+1 tal que

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

onde, conforme a notao anterior, rj = b A x(j) .


Algoritmo: Mtodo dos Gradientes Conjugados
Dados A, b, max, tol
1: x(0) = 0, r = b, aux = rT r , v = b
2: Para k = 0 : max, faa
3:

z = Av

s
4:

aux
vT z

5:

x(k+1) = x(k) + s v

6:

r=rsz

7:

aux1 = rT r

8:

Se aux1 < tol ento

9:

Sada com sol = x(k+1)

10: m = aux1/aux; aux = aux1


11: v = r + m v

3. Algoritmo Conceitual Matriz


Condutncia
Algoritmo conceitual para a construo da matriz G e do vetor I.
Para que seja possvel calcular as tenses nodais de um circuito, onde
so dados os valores da resistncia de todos os resistores e o valor de
cada fonte de corrente, necessrio formar uma matriz de
condutncia nodal e um vetor de injeo de correntes. Com a
obteno da matriz e do vetor possvel determinar a tenso em
cada n atravs da frmula:
G*V=I
sendo G a matriz de condutncia nodal, V o vetor de tenses nodais e
I o vetor de injeo de correntes.
O Mtodo utilizado para formar a matriz de condutncia de um
circuito com N ns feito de acordo com as seguintes etapas: clculo
da ordem da matriz, sendo que a ordem igual ao nmero de ns do
circuito, ou seja, ordem = 40; clculo de cada elemento da matriz,
sendo que sero feitos dois tipos de clculo. O primeiro clculo se
refere aos elementos presentes na diagonal principal e o segundo aos
demais elementos da matriz.
O clculo dos elementos presentes na diagonal principal ser feito da
seguinte forma: o elemento ij da diagonal principal ser o resultado

da soma de todas as condutncias conectadas ao n i do circuito


eltrico. Ex: O elemento G11 ser igual soma das condutncias de
todos os resistores conectados ao n 1 do circuito eltrico.
O clculo dos elementos que no pertencem diagonal principal ser
feito da seguinte forma: o elemento ij ser igual ao valor da
condutncia do resistor presente entre os ns i e j do circuito eltrico
multiplicado por -1. Ex: O elemento G23 ser igual a (-1)*o valor da
condutncia do resistor entre os ns 2 e 3 do circuito. O mesmo
raciocnio serve para o elemento G32, ou seja, G23==G32.
Os seguintes passos devem ser seguidos para a construo do
algoritmo:

Dois laos do tipo for que devero executar 40 repeties


cada um, para que seja possvel determinar o valor de
cada elemento da matriz.

Um lao do tipo for que dever executar 75 repeties,


para que possa ser feita uma busca em cada um dos 75
ramos do circuito.

Uma estrutura de seleo para definir se o elemento


pertencente ao ramo um resistor ou uma fonte de
corrente.

Uma estrutura de seleo para definir se ser calculado


um elemento pertencente diagonal principal ou no.

Clculo dos elementos pertencentes diagonal principal.

Clculo dos demais elementos da Matriz de Condutncia.

A formao do vetor de injeo de correntes feita de forma bastante


simples: o vetor ter 40 posies, cada uma referente a um n do
circuito. Basta verificar em qual n as fontes de correntes esto
conectadas. Se uma fonte estiver chegando ao n seu valor ser
positivo, caso contrrio ser negativo. Ex: se existir uma fonte de 4 A
conectada ao n 1 do circuito, com a corrente chegando ao n, o
valor da posio 1 do vetor ser igual a 4.
Os seguintes passos devem ser seguidos para a construo do
algoritmo:

Um lao que dever executar 40 repeties, para que


seja possvel calcular cada posio do vetor.

Um lao que dever executar 75 repeties, para que


seja possvel fazer uma busca em todos os 75 ramos do
circuito.

Uma estrutura de seleo para verificar se o ramo


composto por uma fonte de corrente.

Uma estrutura de seleo para verificar se existe alguma


fonte conectada ao n que se refere atual posio do
vetor.

Clculo da posio do vetor.

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:

Elementos no nulos da Matriz Condutncia


O vetor de injees de corrente nodais
O grau e o padro de esparsidade da matriz de condutncia nodal.
Se a matriz condutncia nodal definida positiva.
Se a matriz condutncia nodal mal condicionada.
As tenses nodais calculados pelos mtodos diretos
Perdas resistivas estimadas por todos os mtodos (diretos e
iterativos).

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.

4.4. Impresso dos Dados


Elemento No Nulo da Matriz G

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

Columns 91 through 105

-1

-1

-1

-1

Columns 106 through 120

-1

-1

-1

-1

Columns 121 through 135

-1

-1

-1

-1

Columns 136 through 150

-1

-1

-1

-1

Columns 151 through 154

-1

-1

-1

Vetor Injeo de Corrente Nodal

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

Tempo de Processamento 0.036060


Numero de Soma 885638
Numero de Multiplicao 854439
Perdas Resistiva 557.375000
-------------------------------------------------------

-------------------------------------------------------

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

Tempo de Processamento 0.003151


Numero de Soma 13039
Numero de Multiplicao 13820
Perdas Resistiva 557.375000

-------------------------------------------------------

-------------------------------------------------------

Metodo Gauss Jacobi

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

Tempo de Processamento 0.283872

Numero de Soma 1641640


Numero de Multiplicao 1564201
Numero de Interao 1001
Erro Relativo 1.042140e-008
Perdas Resistiva 174.702961
-------------------------------------------------------

-------------------------------------------------------

Metodo Gauss Seidel

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

Tempo de Processamento 0.202001


Numero de Soma 1113560
Numero de Multiplicao 1061559
Numero de Interao 679
Erro Relativo 9.935774e-011
Perdas Resistiva 174.703124
-------------------------------------------------------

-------------------------------------------------------

Metodo Sobre Relaxao

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

Tempo de Processamento 0.194132


Numero de Soma 245960
Numero de Multiplicao 236303
Numero de Interao 143
Erro Relativo 9.573005e-005
-------------------------------------------------------

-------------------------------------------------------

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

Tempo de Processamento 0.006397


Numero de Soma 93
Numero de Multiplicao Escalar 155
Numero de Interao 31
Perdas Resistiva 557.375000
-------------------------------------------------------

>>

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

Figura 2 : Interao x Erro , Gaus Jacobi

10

-2

10

-4

10

-6

10

-8

10

-10

10

100

200

300

400

500

Figura 3: Interao x Erro , Gaus Seidel

600

700

10

-1

10

-2

10

-3

10

-4

10

50

100

Figura 4: Interao Erro Sobre Relaxao

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

Analise Nodal Matriz Condutncia e


Injeo de Corrente.
%Remoo de Variveis e Funes da Memria
clear all;
%Limpa a janela de comandos
clc;
%Leitura dos dados de entrada dos ramos
[ni_bran,nf_bran,type_bran,size_bran]=textread('input_40nodes.dat','%d
%d %d %f');
num_bran=length(ni_bran);
%Definio de uma numerao seqencial para os nmeros dos ns
nex_node=[];
num_node=0;
for ibran=1:num_bran
kbran=ni_bran(ibran);
lbran=nf_bran(ibran);
if kbran > 0
kseq=find(nex_node==kbran);
if length(kseq) == 0
num_node=num_node+1;
nex_node(num_node)=kbran;
ni_bran(ibran)=num_node;
else
ni_bran(ibran)=kseq;
end
end
if lbran > 0
lseq=find(nex_node==lbran);
if length(lseq) == 0
num_node=num_node+1;
nex_node(num_node)=lbran;
nf_bran(ibran)=num_node;
else
nf_bran(ibran)=lseq;
end
end
end
%Impresso dos dados de ramos (com numerao seqencial dos ns)
num_res=length(find(type_bran==1));
num_src=length(find(type_bran==2));
fid=fopen('output.dat','w');
fprintf(fid,'Nmero de ns: %d\n',num_node);
fprintf(fid,'Nmero de ramos: %d\n',num_bran);
fprintf(fid,'Nmero de Resistores: %d\n',num_res);
fprintf(fid,'Nmero de Fontes de Corrente: %d\n',num_src);
fprintf(fid,'----X----X--------X----------\n');
fprintf(fid,' NI
NF
TIPO
DIMENSO\n');
fprintf(fid,'----X----X--------X----------\n');
for ibran=1:num_bran

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

%Resoluo do sistema L*y=b


y(1)=I(1)/L(1,1);
for i=2:n
sun=0;
for j=1:i-1
sun=sun+L(i,j)*y(j);
ContSomaSubD=ContSomaSubD+1;
ContMultDivD=ContMultDivD+1;
end
y(i)=(I(i)-sun)/L(i,i);
ContSomaSubD=ContSomaSubD+1;
ContMultDivD=ContMultDivD+1;
end
%Resoluo do sistema U*x=y
x(n)=y(n)/U(n,n);
ContMultDivD=ContMultDivD+1;
for i=n-1:-1:1
sun=0;
for j=i+1:n
sun=sun+U(i,j)*x(j);
ContSomaSubD=ContSomaSubD+1;
ContMultDivD=ContMultDivD+1;
end
x(i)=(y(i)-sun)/U(i,i);
ContSomaSubD=ContSomaSubD+1;
ContMultDivD=ContMultDivD+1;
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');
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

%Resoluo do sistema L*y=b


y(1)=I(1)/L(1,1);
for i=2:n
sun=0;
for j=1:i-1
sun=sun+L(i,j)*y(j);
ContSomaSubC=ContSomaSubC+1;
ContMultDivC=ContMultDivC+1;
end
y(i)=(I(i)-sun)/L(i,i);
ContSomaSubC=ContSomaSubC+1;
ContMultDivC=ContMultDivC+1;
end
%Resoluo do sistema LT*x=y
x(n)=y(n)/LT(n,n);
ContMultDivC=ContMultDivC+1;
for i=n-1:-1:1
sun=0;
for j=i+1:n
sun=sun+LT(i,j)*x(j);
ContSomaSubC=ContSomaSubC+1;
ContMultDivC=ContMultDivC+1;
end
x(i)=(y(i)-sun)/LT(i,i);
ContSomaSubC=ContSomaSubC+1;
ContMultDivC=ContMultDivC+1;
end
%Mostra Resultados
% 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

fprintf('\n Resultado \n');


x'
%fprintf('\n Matriz L \n');
%L
%fprintf('\n Matriz LT \n');
%LT
tcho=toc; %Encerra marcao de tempo
fprintf('\n Tempo de Processamento %f',tcho);
fprintf('\n Numero de Soma %d',ContSomaSubC);
fprintf('\n Numero de Multiplicao %d',ContMultDivC);
fprintf('\n Perdas Resistiva %f',-perdas);
fprintf('\n ------------------------------------------------------\n\n');
%---------------------------------------------------------------------

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');

Você também pode gostar