O processo iterativo utiliza somente estimativas da iteração anterior.
O método gera uma seqüência convergente para a
solução do sistema dado, independentemente da escolha da aproximação inicial.
Decompõe-se a matriz de coeficientes A em:
A = L + D + U
Onde:
L – Matriz Triangular Inferior
D – Matriz Diagonal
U – Matriz Triangular Superior
Abaixo tem um algoritmo em C para o calculo deste método linear:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#define tam 3
main()
{
int t, j, i, k;
bool pare=false;
float a[tam][tam], b[tam], x[tam], x0[tam], x2[tam], e, norma=0, soma=0,soma2=0;
// inserindo os elementos na matriz A
printf("\nInserindo elementos da matriz A:");
for(i=0; i<tam; i++)
{
for(j=0; j<tam; j++)
{
printf("\nInsira o elemento a[%i,%i]:",i+1,j+1);
scanf("%f",&a[i][j]);
}
}
printf("\n");
// inserindo os elementos da matriz dos termos independentes B
printf("Inserindo os termos independentes B:");
for(i=0; i<tam; i++)
{
printf("\nInsira o elemento b[%i]:",i+1);
scanf("%f",&b[i]);
}
// inserindo os elementos do vetor x0 inicial
printf("Entrando com os valores do vetor x0 (inicial)\n");
for(i=0; i<tam; i++)
{
printf("x0[%i]= ",i+1);
scanf("%f",&x0[i]);
}
//imprimindo a matriz
printf("\nMatriz A:\n");
for(i=0; i<tam; i++)
{
for (j=0;j<tam;j++)
{
printf ("%.0f",a[i][j]);
if(j==2)
{
printf("\n");
}
else
{
printf("\t");
}
}
}
printf("\n\n");
//imprimindo a matriz de termos
printf("\nMatriz B:\n");
for (j=0;j<tam;j++)
{
printf ("%.0f",b[j]);
if(j==2)
{
printf("\n");
}
else
{
printf("\t");
}
}
printf("\n\n");
//imprimindo o vertor x
printf("\nMatriz X:\n");
for (j=0;j<tam;j++)
{
printf ("%.0f",x0[j]);
if(j==2)
{
printf("\n");
}
else
{
printf("\t");
}
}
printf("\n\n");
printf("Entre com a precisao: ");
scanf("%f", &e);
while (!(pare))
{
for (i=0; i<tam; i++)
{
//calculando o valor do primeiro somatório.
for (j=0; j<i; j++ )
{
soma=soma+a[i][j]*x0[j];
}
//calculando o valor do somatório.
for (j=i+1; j<tam; j++ )
{
soma2 = soma2 + a[i][j]*x0[j];
}
x[i]=(b[i]-soma-soma2)/a[i][i];
printf("x%i=%f\n",i,x[i]);
soma=0;
soma2=0;
}
for (t=0; t<tam; t++)
{
x2[t] = x[t]-x0[t];
}
norma = (sqrt((x2[0]*x2[0])+(x2[1]*x2[1])+(x2[2]*x2[2])))/sqrt((x[0]*x[0])+(x[1]*x[1])+(x[2]*x[2]));
printf ("norma = %f", norma);
printf("\nPressione p/ continuar\n\n");
getch();
if (norma <= e)
{
pare = true;
}
else
{
for (t=0; t<tam; t++)
{
x0[t] = x[t];
}
k++;
}
}
getch();
}