Gauss - Seidel (programa) - Programa do Gauss-Seidel em Fortran
Alex Barbosa | comentários
Arquivado no curso de Engenharia - Grande Área Cívil na UTFPR
Curso: Engenharia de Produção Civil Disciplina Métodos Numéricos
3º TRABALHO DE MÉTODOS NUMÉRICOS GAUSS-SIEDEL
Prof. Violeta Maria Estephan
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
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
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:
Para a resolução do item c, foram realizadas as seguintes trocas: linha 1 com linha 3 linha 3 com linha 4
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:
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.
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.
EP1 2008 MAP2121 Numérico Enunciado
Enunciado do EP1 de MAP2121 Numérico
MAP 2121 (Numerico) - Enunciado EP1 - 2008
Primeiro exercicio-programa de Calculo Numerico de 2008
Apostila de Calculo numérico
Calculo numérico IV
Cálculo Nimérico
Cálculo Numérico - Apostila
Apostila elabora pelo Drº Lauro César Galvão.
Analise de fluxo de carga
Resolução de Analise de Fluxo de Carga em um sistema de potencia com 9 barras e outro com 18 barras,...