Preview only show first 10 pages with watermark. For full document please download

Gauss - Seidel (programa)

Programa do Gauss-Seidel em Fortran

   EMBED


Share

Transcript

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 2 30 2,3 0,8 0,4 0,03 0,3 0,01 5 1 4 10 60 1 20 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 0.7 138 11 1.8 -2 -63 -3 -25 -6 11 2 21 -51 -12 87 3 0.3 7 3 -1 245 -8 1358 -18 56 -11 38 -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 0.7 11 2 1.8 -3 -63 -25 -2 -6 21 2 -51 11 -12 0.3 3 7 87 3 -18 56 -8 1358 -11 38 -1 245 -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 2 0 0 1 1 -63 -8 48 0 -11 2 2 3 -8 1 18 0 31 0 -1 1358 -8 0 0 11 382 0 192 0 -89 129 0 0 0 132 359 -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 -8 48 0 2 -11 0,7 2 0 0 1 1 2 3 -8 1 18 0 31 0 -1 1358 -8 0 0 11 382 0 192 0 -89 129 -11 4 -5 28 193 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 0 0 -0.7071 0.7071 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0.6585 0.7526 0 0 -0.6585 0.7526 0 0 0 0 0 1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0.6585 0 0 0 0 0 0 0.7526 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0.7071 0 0 0 0 0 0 0.7071 1 0 0 0.7526 0 0 0 1 0 0 0 0 0 0.7071 0 1 0 0 2000 0 -1000 0 -500 0 4000 0 -500 2000 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.7071 0 -0.7071 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0.7526 0 0 0.6585 0.7526 0 0 0 0 0.6585 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 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 1 0.6585 0 0 0 0 0 0 0.7526 0 0 0 1 0 0 0.7526 1 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0.7071 0 0 0 0 0 0 0.7071 1 0 0 0 0 0 0.7071 0 1 -1000 0 2000 0 4000 0 0 2000 -500 0 0 -500 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 F2 F3 F4 F5 F6 -3086.48173 2182.45123 1023.34229 -2199.55161 1509.12388 2182.45123 F7 F8 F9 F10 F11 F12 F13 -1483.78111 396.184067 1033.03261 0 -1858.94199 645.13465 1314.45788 12 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e) 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Problema Proposto -0.7071 0 0 0 0 -0.7071 0 0 1 0 0.7071 0 1 0 0 0 0 -1 0 -0.7071 0 -1 0 0 0.7071 0 0 0 -1 -0.7071 0 0 0 0 0.7071 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 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 -0.707 0.7071 0.7071 0.7071 0 0 0 0 0 0 0 0 0.9806 0 0 0 0 0 0 0 0 0 0 0 1 -1 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.9806 0.1961 0 0 0 0 -0.9806 -0.1961 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7071 0.7071 0 0 0 0 0 0 -0.7071 -0.7071 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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.7433 0 0 0 1 0.1961 0.669 0 0 8000 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 -0.743 -1 0 -5000 0 0 -0.669 0 -1 0 0 0 0 0 0 5000 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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.1961 0 0 1 0.1961 0.669 0 0 8000 0 0 0 0 0 0 0 -0.1961 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 1 8660.25 -0.743 -1 0 0 -5000 1 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