• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NoOne

Metodo Gauss-Seidel

13 mensagens neste tópico

Eu basicamente não estou a perceber nada deste método, porque não o demos na aula... mas tenho um projecto para entregar ate dia 31 sobre este método.

tenho que fazer um programa em Java que resolva um sistema de n equações usando o método gauss-seidel.

Alguém é capaz de me explicar por passos o que devo fazer num programa para resolver um sistema através deste método?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu tenho esse método implementado em MatLab, se quiseres posso disponibilizá-lo aqui.

como é que vais implementar o método? usando a formulação matricial?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tipo eu n percebo nada disto lol,

por passos o k ja fiz foi o seguinte:

1. perguntar o numero de incongitas

    ex: o utilizador escolhe 2

2. perguntar quais sao as incongitas que vao ser usadas

    ex: X e Y

3. ler a matriz e o resultado

    ex:    2    3    = 5

              4      5  = 6

4. mostrar sistema

    ex.  2x  +  3y =5

            4x + 5y = 6

4. verificar s a diagonal é dominante

n sei k mais fazer, nem tenho a certeza s o k fiz faz sentido :S tou mesmo à nora...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para o sistema Ax=b, a resolução usando a formulação matricial (que não será talvez a forma mais eficiente de resolver o problema...) faz-se da seguinte forma:

  • criar as matrizes D, M e N (com a mesma dimensão de A), onde:
     

       
  • D se obtém extraindo a diagonal de A;
     
  • M se obtém extrainda a parte triangular inferior de A (sem a diagonal)
     
  • N se obtém extrainda a parte triangular superior de A (sem a diagonal)
     

[*]criar as matrizes B e c, onde:

 


     
  • B = - (D + M)-1 N
     
  • c = (D + M)-1 b
     

[*]as soluções serão obtidas fazendo

x[n+1] = B x[n] + c

sendo x[n] a solução obtida na iteração n.

vais realizando iterações até a diferença entre x[n] e x[n+1] for suficientemente pequena ou quando atingir um número máximo de iterações.

PS: não é necessário a matriz A ser diagonal ser estritamente dominante para o método convergir!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja fiz isto:

    * D se obtém extraindo a diagonal de A;

    * M se obtém extrainda a parte triangular inferior de A (sem a diagonal)

    * N se obtém extrainda a parte triangular superior de A (sem a diagonal)

    * B = - (D + M)-1 N

    * c = (D + M)-1 b

so nao percebo o resto :S nem o k fazer com estas matrizes todas que criei

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

as matrizes D, M e N são só para auxiliar a criação das matrizes B e c. agora só precisas destas duas.

depois de teres as matrizes o algoritmo é o seguinte:

x = (1,1,...)  -- vector de soluções

erro = 1       -- erro

nit = 0         -- numero de iterações

while (erro > erromax && nit < nitmax)

-- o ciclo para quando o erro for inferior a um determinado limite (erromax)

-- ou quando o número de iteração for superior ao limite (nitmax)

  aux = B * x + c            -- calcula a nova solução

  erro = norma(aux - x)   -- determina o erro máximo da solução actual

  x = aux

  nit = nit + 1

NOTA: existem várias formas de aplicar este método! eu coloquei aqui da forma como aprendi. se o teu professor ensinou de maneira diferente é capaz de ser melhor fazer da maneira que ele ensinou!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o prob é k ele n ensinou... :/

vou ver s consigo fazer isso, é k n tou a ver nenhum sitio k fale em valores maximos :S

tudo o k diz no enunciado é:

Dado um sistema de equações lineares de N equações a N incógnitas

● Determinar se é possível aplicar o método de Gauss-Seidel ao problema;

● Implementar o método de Gauss-Seidel para a resolução do sistema.

cmo vejo s é possivel aplicar o metodo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O valor máximo és tu que tens de definir.

Não sei se sabes mas os computadores não conseguem fazer as contas "directamente". Vão fazendo aproximações até que a solução encontrada esteja dentro de uma determinada margem de erro. Se bem percebi é deste método que o Rui Carlos está a falar. E foi este método que aprendi em Matemática Computacional, já não me lembro é do nome... provavelmente era Gauss-Seidel :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o prob é que ele n ensinou... :/

vou ver s consigo fazer isso, é que n tou a ver nenhum sitio que fale em valores maximos :S

tudo o que diz no enunciado é:

Dado um sistema de equações lineares de N equações a N incógnitas

● Determinar se é possível aplicar o método de Gauss-Seidel ao problema;

● Implementar o método de Gauss-Seidel para a resolução do sistema.

cmo vejo s é possivel aplicar o metodo?

Ora bem, está aqui um pouco de confusão, o sistema não se resolve pelo método de gauss-seidel. O sistema resolve-se pelo método de gauss. O método de gauss seidel é uma extensão do anterior que permite encontrar a matriz inversa, caso a matriz dada seja invertível.

Tendo a matriz inversa tambem podes calcular a solução do  sistema facilmente. Da seguinte forma:

A*x=b

x=A^-1*b

onde A é a matriz de coeficientes, x é o vextor de incógnitas e b o vector de termos independentes

Primeira coisa: para que a matriz seja invertível o seu determinante tem que se diferente de zero, ( ainda há coisa de duas semanas falamos aqui disso a propósito do meu último exame )

portanto: calcula o determinante e verifica se este é diferente de zero.

Depois... sabes fazer a eliminação de Gauss?

EDIT: entretanto andei a pesquisar por aí... agora n sei se estou confundido... estou a confundir os métodos de gauss-jordan e gauss-seidel?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

EDIT: entretanto andei a pesquisar por aí... agora n sei se estou confundido... estou a confundir os métodos de gauss-jordan e gauss-seidel?

estás confundido!!

o método de Gauss-Jordan é que permite obter a matriz inversa.

o método de Gauss-Seidel (tal como o de Jacobi) é um método iterativo para a resolução de sistemas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem, ja fiz parte do programa...

fiz duma forma diferente, pra já tenho o seguinte:

verifica s a diagonal é dominante, quase dominante e se se verifica a condiçao de sassenfeld  .

se se verificar entao é possivel aplicar o metodo gauss-seider ( certo? )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei exactamente o que é a condição de sassenfeld, mas segundo a wikipedia, desde que a diagonal seja dominante, então o método de gauss-seidel converge.

Na Wikipedia tens um algoritmo que me pareceu fácil de implementar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei exactamente o que é a condição de sassenfeld, mas segundo a wikipedia, desde que a diagonal seja dominante, então o método de gauss-seidel converge.

ter diagonal estritamente dominante é uma condição suficiente para o método convergir, mas não é uma condição necessária. podemos ter sistemas em que a diagonal não seja dominante para os quais o método converge.

uma condição necessária e suficiente para o método convergir é a matriz de iteração (matriz B, cuja definição indiquei acima) tenha raio espectral inferior a 1. mas como dá um bocado de trabalho estar a determinar o raio espectral de uma matriz, normalmente não se verifica se o método converge ou não, aplica-se o algoritmo limitando-se o número de iterações.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora