-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgaussSeidel.sci
39 lines (25 loc) · 1.14 KB
/
gaussSeidel.sci
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function solucao = gaussSeidel(matriz, vetorTermosIndependentes, solucaoAproximada, tolerancia, interacoes)
[linhas colunas] = size(matriz);
solucao = zeros(linhas, 1);
for iteracao = 1 : iteracoes
for linha = 1 : linhas
soma = 0;
/*for coluna = 1 : colunas
soma = soma + matriz(linha, coluna) * solucao(coluna);
end
for coluna = linha+1 : colunas
soma = soma + matriz(linha, coluna) * solucaoAproximada(coluna);
end*/
for coluna = [1 : linha-1, linha+1 : colunas] // acessa de 1 .. coluna, menos quando linha == coluna
soma = soma + matriz(linha, coluna) * solucao(coluna);
end
solucao(linha) = (vetorTermosIndependentes(linha) - soma) / matriz(linha, linha);
end
if (norm(solucao - solucaoAproximada), 'inf') < tolerancia then
return solucao;
end
disp(solucao);
solucaoAproximada = solucao;
end
printf("codigo nao convergiu!");
endfunction