Matriz de resolução de Octave / Matlab usando Gauss Seidel não convergindo

0

Algo totalmente impossível está acontecendo. Eu executei o código a seguir várias vezes na Matriz same e sempre convergi para uma solução usando o método Gauss Seidel em 10 iterações.

A definição da função My Gauss Seidel é:

function xnew = gauss_seidel(A, b, xold)
  n = size(A)(1);
  At = A;
  xnew = xold;
  for i = 1 : n
    At(n, n) = 0;
  end
  for i = 1 : n
    xnew(i) = (b(i) - At(i, :)*xnew)/A(i, i);
  end
endfunction

Configurando a matriz de coeficientes, o vetor da solução e o vetor aproximado inicial:

A = [20 1 -1; 1 -10 1; -1 1 10];
b = [17 13 18]';
x = [0 0 0]';

Usando o método Gauss Seidel:

>> x = gauss_seidel(A, b, x)
Test
x =

   0.85000
  -1.21500
   2.00650

>> x = gauss_seidel(A, b, x)
Test
x =

   0.16107
   0.13176
   1.80293

>> x = gauss_seidel(A, b, x)
Test
x =

   0.77248
  -1.17422
   1.99467

>> x = gauss_seidel(A, b, x)
Test
x =

   0.235961
   0.097279
   1.813868

etc ... etc ... Alguém pode, por favor, guiar-me para o erro que estou possivelmente fazendo que não está permitindo que o meu código converge?

    
por Dean P 07.05.2018 / 16:26

1 resposta

0

É claro que o impossível não é possível. Um acidente esquisito me deixou digitando os personagens errados. Uma parte do código abaixo deve ser igual a (i, i)

function xnew = gauss_seidel(A, b, xold)
  n = size(A)(1);
  At = A;
  xnew = xold;
  for i = 1 : n
    At(n, n) = 0; //THIS SHOULD EQUAL (i, i)
  end
  for i = 1 : n
    xnew(i) = (b(i) - At(i, :)*xnew)/A(i, i);
  end
endfunction
    
por 07.05.2018 / 16:36

Tags