Você está na página 1de 15

PR

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Curso: Engenharia de Produção Civil

Disciplina Métodos Numéricos

ALEX BARBOSA CAMPOS SILVA

JONATHAN DA MAIA SANTOS DE MELO

RODOLFO KRUL TESSARI

3º TRABALHO DE MÉTODOS NUMÉRICOS


GAUSS-SIEDEL

LINGUAGEM FORTRAN

Prof. Violeta Maria Estephan

Curitiba

2009

1
Sumário
1.INTRODUÇÃO ................................................................................................................... 3
2.O MÉTODO GAUSS-SEIDEL ................................................................................................ 3
3.CÓDIGO FONTE................................................................................................................. 3
4.ANÁLISE DOS PROBLEMAS PROPOSTOS ............................................................................ 7
4.1 Apresentação dos resultados ............................................................................................... 16
5.CONCLUSÕES ................................................................................................................. 17

2
1. INTRODUÇÃO
A importância do estudo de resolução de Sistemas-lineares na Engenharia e de uma grandeza
imensurável, pois diversos cálculos e dimensionamentos são feitos através de Sistemas Lineares,
além de que esse método possui uma grande precisão, levando em conta que é utilizado o valor
anterior calculado nas Funções de Iterações.

Neste trabalho foram omitidas as deduções do método tendo em vista que o mesmo já foi
deduzido em sala e será apresentado como programação.

2. O MÉTODO GAUSS-SEIDEL
O método de Gauss-Seidel é um método interativo para resolução de sistemas de equações
lineares. O seu nome é uma homenagem aos matemáticos alemães Carl Friedrich Gauss e Philipp
Ludwig von Seidel. É semelhante ao método de Jacobi (e como tal, obedece ao mesmo critério de
convergência). É condição suficiente de convergência que a matriz seja estritamente diagonal
dominante e fica garantida a convergência da sucessão de valores gerados para a solução exata
do sistema linear.

Esse método difere do processo de Jacobi-Richardson por utilizar para o cálculo de uma
componente de x(k+1) o valor mais recente das demais componentes Por esse motivo o método
da Gauss-Seidel é também conhecido por Método dos Deslocamentos Sucessivos.

3. O CÓDIGO FONTE
program Gauss_Sudel

!-----------------------------------------------------------------------------------------------

!#declaração das variáveis: matriz com valores reais, demais variáveis inteiras

implicit none

real*4, allocatable, dimension (:,:) :: mat

real*4, allocatable, dimension (:) :: soluc, copia, vetor_erro, vetor_soluc, posicao_i, posicao_j

real*4 soma, dk

integer nlin, ncol, i, j, ver, posicaoi, posicaoj, n_it

character*30 texto

!-----------------------------------------------------------------------------------------------

!#Abertura dos blocos de notas para posterior entrada dos dados da matriz

!# e gravação dos resultados da matriz escalonada

open (1, file="GJS52EQUIPE7DADOS.TXT")


3
open (2, file="GJS52EQUIPE7SOLUC.TXT")

!-----------------------------------------------------------------------------------------------

!# Entrada visual do program por meio do emprego da subrotina INICIO

!-----------------------------------------------------------------------------------------------

call INICIO (ver)

open(1, file="GJS52EQUIPE7DADOS.TXT")

read (1,*) nlin,ncol

allocate (mat(nlin,ncol), soluc(nlin), copia(nlin), posicao_i(1), posicao_j(1), vetor_erro(nlin),


vetor_soluc(nlin))

do i=1, nlin

read (1,*) mat(i,:)

end do

close(1)

!_____________________________________________________________soluc=0

texto="Solução inicial"

call impressao (texto, soluc,nlin,ncol-1)

dk=1

n_it=0

do while (dk .ge. 0.0001)

copia=soluc

do i = 1, nlin

soma=0

do j = 1, ncol-1

if (j==i) cycle

soma=soma+mat(i,j)*soluc(j)

end do

soluc(i)=(-soma+mat(i,ncol))/mat(i,i)

4
end do

texto="Solução parcial"

call impressao (texto, soluc,nlin,ncol-1)

vetor_erro=abs(soluc-copia)

Vetor_soluc=abs(soluc)

posicao_i=maxloc(Vetor_erro)

posicao_j=maxloc(vetor_soluc)

posicaoi=posicao_i(1)

posicaoj=posicao_j(1)

dk=vetor_erro(posicaoi)/vetor_soluc(posicaoj)

n_it=n_it+1

end do

texto="Solução Final"

call impressao (texto, soluc,nlin,ncol-1)

write (2,*) ""

write (2,1) dk

1 format (" ERRO:", F10.7)

write (2,*) "Número de iterações:", n_it

close (2)

ver=system("GJS52EQUIPE7SOLUC.TXT")

!-----------------------------------------------------------------------------------------------

contains !##descrição das subsrotinas

!-----------------------------------------------------------------------------------------------

!## subrotina para fornecimento correto para entrada de dados ao usuário

subroutine INICIO (ver)

implicit none

5
integer ver

open(1, file="GJS52EQUIPE7DADOS.TXT")

write (1, '("Nlin Ncol", 10X, "!Substitua Nlin e Ncol pela dimensão da matriz ampliada")')

!## prepara o bloco de notas para um sistema escalonado

write (1, 10)

10 format (//, 'a11 a12 a13 r1',/,'a21 a22 a23 r2',/,'a31 a32 a33 r3')

write (1,11)

11 format (/,'!Substitua as incognitas A pelos valores da sua matriz e R pelo resultado',/,'!caso seja
maior siga no mesmo formato')

write (1,*) " "

write (1,*) "!!PRGRAMA GAUSS-SUDEL!!"

close (1)

ver=system ("GJS52EQUIPE7DADOS.TXT")

end subroutine INICIO

!-----------------------------------------------------------------------------------------------

!## subrotina de impressão da solucao após cada iteracao

subroutine impressao (texto,soluc,nlin,ncol)

implicit none

real*4, allocatable, dimension (:,:) :: mat

real*4, allocatable, dimension (:) :: soluc

integer nlin, ncol, i, j

character*30 texto

open (2,file="GJS52EQUIPE7SOLUC.TXT")

write (2,*) " "

write (2,*) texto

write (2,*) "____________________________________________________"

6
do j=1,ncol

write (2,1,advance="no") soluc(j)

1 format (4X,F15.5)

end do

write (2,*) " "

write (2,*) "____________________________________________________"

end subroutine impressao

!-----------------------------------------------------------------------------------------------

end program Gauss_Sudel

4. ANÁLISE DOS RESULTADOS DOS PROBLEMAS PROPOSTOS


Sim, foi preciso “pivotear” as linhas pois da maneira que estavam dispostas, o método divergia da
resposta, e condição dominante para que o método convirja, foi citada na introdução deste
trabalho, de que é condição suficiente de convergência que a matriz seja estritamente diagonal
dominante e fica garantida a convergência da sucessão de valores gerados para a solução exata
do sistema linear, caso essa condição não seja atendida o método diverge do valor real do
sistema.

4.1. APRESENTAÇÃO DA RESOLUÇÃO DOS SISTEMAS UTILIZANDO O PROGRAMA

a)

200 2 0,3 0,01 5


0,4 0,03 9 10 7
2 30 1 4 10
2,3 0,8 60 1 20
Solução:
Para a resolução do item a, foram realizadas as seguintes trocas:
linha 2 com linha 3
linha 3 com linha 4
O sistema utilizado foi o seguinte:

200 2 0,3 0,01 5


2 30 1 4 10
2,3 0,8 60 1 20
0,4 0,03 9 10 7
Solução inicial
____________________________________________________
0.00000 0.00000 0.00000 0.00000
____________________________________________________
7
Solução parcial
____________________________________________________
0.02500 0.33167 0.32795 0.40285
____________________________________________________

Solução parcial
____________________________________________________
0.02117 0.26728 0.32224 0.40833
____________________________________________________

Solução parcial
____________________________________________________
0.02182 0.26669 0.32214 0.40841
____________________________________________________

Solução parcial
____________________________________________________
0.02183 0.26669 0.32213 0.40841
____________________________________________________

Solução Final
____________________________________________________
0.02183 0.26669 0.32213 0.40841
____________________________________________________

ERRO: 0.0000246
Número de iterações: 4

b)

2 -2 11 87 -1 245
0.7 -63 2 3 -8 1358
138 -3 21 0.3 -18 56
11 -25 -51 7 -11 38
1.8 -6 -12 3 -81 157

Solução:
Para a resolução do item c, foram realizadas as seguintes trocas:
linha 1 com linha 3
linha 3 com linha 4

8
O sistema utilizado foi o seguinte:

138 -3 21 0.3 -18 56


0.7 -63 2 3 -8 1358
11 -25 -51 7 -11 38
2 -2 11 87 -1 245
1.8 -6 -12 3 -81 157

Solução inicial
____________________________________________________
0.00000 0.00000 0.00000 0.00000 0.00000
____________________________________________________

Solução parcial
____________________________________________________
0.40580 -21.55105 9.90666 1.05877 -1.76132
____________________________________________________

Solução parcial
____________________________________________________
-1.80228 -20.98701 9.67914 1.13102 -1.81579
____________________________________________________

Solução parcial
____________________________________________________
-1.76265 -20.98343 9.70760 1.12597 -1.81957
____________________________________________________

Solução parcial
____________________________________________________
-1.76739 -20.98234 9.70616 1.12624 -1.81954
____________________________________________________

Solução parcial
____________________________________________________
-1.76714 -20.98238 9.70626 1.12622 -1.81954
____________________________________________________

Solução parcial
____________________________________________________
-1.76716 -20.98237 9.70626 1.12622 -1.81954
____________________________________________________

Solução Final
____________________________________________________
-1.76716 -20.98237 9.70626 1.12622 -1.81954
____________________________________________________

9
ERRO: 0.0000095
Número de iterações: 6
c)

0,7 -63 2 3 -8 1 18
2 -8 0 31 0 -1 1358
0 48 -8 0 0 11 382
0 0 0 192 0 -89 129
1 -11 0 0 0 132 359
1 2 -11 4 -5 28 193

Solução:

Para a resolução do item c, foram realizadas as seguintes trocas:


linha 5 com linha 6
coluna 1 com coluna 2
Devido à troca de colunas, neste caso a solução apresentada encontra-se na seguinte
ordem: y, x, z, w, t, g. O sistema utilizado foi o seguinte:

-63 0,7 2 3 -8 1 18
-8 2 0 31 0 -1 1358
48 0 -8 0 0 11 382
0 0 0 192 0 -89 129
2 1 -11 4 -5 28 193
-11 1 0 0 0 132 359

Solução inicial
____________________________________________________
0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
____________________________________________________

Solução parcial
____________________________________________________
-0.01587 678.93652 -47.84524 0.67188 202.97798 -2.42508
____________________________________________________

Solução parcial
____________________________________________________
4.66288 686.02490 -23.10719 -0.45225 137.36368 -2.08889
____________________________________________________

Solução parcial
____________________________________________________
4.20869 701.80023 -25.37010 -0.29641 147.32283 -2.24625
____________________________________________________

Solução parcial
____________________________________________________
4.45643 700.29694 -24.10002 -0.36935 143.38754 -2.21421
10
____________________________________________________

Solução parcial
____________________________________________________
4.40377 701.23297 -24.37193 -0.35451 144.34314 -2.22569
____________________________________________________

Solução parcial
____________________________________________________
4.42099 701.06598 -24.28438 -0.35983 144.05548 -2.22299
____________________________________________________

Solução parcial
____________________________________________________
4.41651 701.13184 -24.30756 -0.35857 144.13399 -2.22387
____________________________________________________

Solução parcial
____________________________________________________
4.41782 701.11725 -24.30088 -0.35898 144.11169 -2.22365
____________________________________________________

Solução Final
____________________________________________________
4.41782 701.11725 -24.30088 -0.35898 144.11169 -2.22365
____________________________________________________

ERRO: 0.0000318
Número de iterações: 8
d)
Problema proposta

0.7071 1 0 0 0 0 0 0 0 0 0 0 0 0
0 -1 0 0 0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 2000
-0.7071 0 0 1 0.6585 0 0 0 0 0 0 0 0 0
0.7071 0 1 0 0.7526 0 0 0 0 0 0 0 0 -1000
0 0 0 -1 0 0 1 0.6585 0 0 0 0 0 0
0 0 0 0 0 0 0 0.7526 1 0 0 0 0 -500
0 0 0 0 -0.6585 -1 0 0 0 1 0 0 0 0
0 0 0 0 0.7526 0 0 0 1 0 0 0 0 4000
0 0 0 0 0 0 -1 0 0 0 0.7071 0 0 0
0 0 0 0 0 0 0 0 0 0 0.7071 1 0 -500
0 0 0 0 0 0 0 0.7526 0 0 0 1 0 2000
0 0 0 0 0 0 0 0 0 0 0.7071 0 1 0

11
Para a resolução do item d, foram realizadas as seguintes trocas:
linha 04 com linha 1
linha 02 com linha 4
linha 09 com linha 5
linha 02 com linha 6
linha 06 com linha 7
linha 12 com linha 8
linha 07 com linha 9
linha 08 com linha 10

O sistema utilizado foi o seguinte:

0.7071 0 1 0 0.7526 0 0 0 0 0 0 0 0 -1000


0.7071 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 2000
-0.7071 0 0 1 0.6585 0 0 0 0 0 0 0 0 0
0 0 0 0 0.7526 0 0 0 1 0 0 0 0 4000
0 -1 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 -1 0 0 1 0.6585 0 0 0 0 0 0
0 0 0 0 0 0 0 0.7526 0 0 0 1 0 2000
0 0 0 0 0 0 0 0.7526 1 0 0 0 0 -500
0 0 0 0 0.6585 -1 0 0 0 1 0 0 0 0
0 0 0 0 0 0 -1 0 0 0 0.7071 0 0 0
0 0 0 0 0 0 0 0 0 0 0.7071 1 0 -500
0 0 0 0 0 0 0 0 0 0 0.7071 0 1 0

O nosso programa divergiu da resposta, a solução apresentada foi obtida através de outro
método computacional a HP, ficando para a tentativa de solução deste e do próximo sistema
como desafio da apresentação do programa.
Na execução do programa a resposta deve convergir para:

F1 -3086.48173 F7 -1483.78111
F2 2182.45123 F8 396.184067
F3 1023.34229 F9 1033.03261
F4 -2199.55161 F10 0
F5 1509.12388 F11 -1858.94199
F6 2182.45123 F12 645.13465
F13 1314.45788

12
e) Problema Proposto
-1 0 -0.7071 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 -1 -0.7071 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.7071 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 -1 0 -0.7071 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 -1 0 0 0.7071 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 -1 -0.7071 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0.7071 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 -1 0 -0.707 0 0 0.9806 0.7071 0 0 0 0 0 0 0
0 0 0 0 0 0 0 -1 0 0 0.7071 0 1 0.1961 0.7071 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 -1 0.7071 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0.7071 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9806 0 0 0 0.9806 0.7433 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1961 0 0 1 0.1961 0.669 0 0 8000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7071 -1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7071 0 -1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.743 -1 0 -5000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.669 0 -1 0
0 0 0 0 0 0 0 0 0 0 0.9806 0 0 0 0 0 0 0 0 0 0 5000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1961 0 0 1 8660.25

Para a resolução do item d, foram realizadas as seguintes trocas diversas trocas para atender a máxima do método de Gass-seidel
Que na diagonal principal não haja termo nulo.

13
O sistema utilizado foi o seguinte:

-1 0 -0.7071 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 -1 -0.7071 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.7071 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 -1 0 0 0.7071 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 -1 0 -0.7071 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 -1 -0.7071 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0.7071 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 -1 0 0 0.7071 0 1 0.1961 0.7071 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 -1 0 -0.707 0 0 0.9806 0.7071 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 -1 0.7071 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0.9806 0 0 0 0 0 0 0 0 0 0 5000
0 0 0 0 0 0 0 0 0 0 0.7071 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9806 0 0 0 0.9806 0.7433 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7071 0 -1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1961 0 0 1 0.1961 0.669 0 0 8000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1961 0 0 1 8660.25
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.743 -1 0 -5000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7071 -1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.669 0 -1 0

14
A solução apresentada pelo programa para esse sistema foi mostrada em sala durante a
apresentação do programa, sendo que foram 74 iterações e um erro de 10E-5.
Frisamos que para a convergência do programa não pode haver números nulos na diagonal
principal
5. CONCLUSÕES

O método se mostrou o muito eficaz para a resolução de sistemas lineares, sendo que a
aproximação é muito precisa, dependendo do erro adotado. É um método também caso
necessário realizá-lo manualmente sem máquinas de cálculo, se mostra eficiente também,
levando em conta que se consegue funções de iterações o que facilita a visualização e realização
de contas.
Enfim de todos os métodos conhecidos do Gauss para resolução de sistema, esse foi o método
que mais agradou nossa equipe, pela fácil aplicação e também pela precisão.
O que mais nos chama a atenção nesse método é a utilização dos valores anteriores para o cálculo
do próximo valor esse fato leva a precisão.
Após a realização desse trabalho ficamos cientes que a condição necessária para o êxito do
método é o de que a matriz seja estritamente diagonal e após alguns testes com o programa de
Gauss-Seidel verficou-se também que na diagonal principal não pode possuir nenhum numero
nulo.

15

Você também pode gostar