Gauss - Seidel (programa)

Gauss - Seidel (programa)

Curso: Engenharia de Produção Civil Disciplina Métodos Numéricos

3º TRABALHO DE MÉTODOS NUMÉRICOS GAUSS-SIEDEL

Prof. Violeta Maria Estephan

Curitiba 2009

1.INTRODUÇÃO3
2.O MÉTODO GAUSS-SEIDEL3
3.CÓDIGO FONTE3
4.ANÁLISE DOS PROBLEMAS PROPOSTOS7
4.1 Apresentação dos resultados16

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

!#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")

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

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

!soluc=0

do i=1, nlin read (1,*) mat(i,:) end do close(1) 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) end do texto="Solução parcial" call impressao (texto, soluc,nlin,ncol-1)

!## subrotina para fornecimento correto para entrada de dados ao usuário subroutine INICIO (ver) implicit none 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,1)

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

!## 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,*) "_"

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

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:

Solução inicial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução Final

b)

Solução:

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

Solução inicial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução Final

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:

Solução inicial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução parcial
Solução Final

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

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:

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:

e) Problema Proposto

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.

O sistema utilizado foi o seguinte:

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.

Comentários