Está en la página 1de 10

Método Gauss-Seidel

Pseudocódigo

SUBROUTINE Gseid (a, b, n, x, imax, es, lambda)


DO i = 1,n
dummy = ai.i
DO j = 1,n
ai,j = ai,j / dummy
END DO
bi = ai / dummy
END DO
DO i = 1, n
sum = bi
DO j = 1, n
IF i j THEN sum =sum – ai, j *xj
END DO
xi = sum
END DO
iter =1
DO
centinela = 1
DO i = 1, n
old = xi
sum = bi
DO j = 1, n
IF i j THEN sum =sum – ai, j *xj
END DO
xi = lambda * sum +( 1 - lambda) * old
IF centinela = 1 AND x1 0 . THEN
ea=ABS (( xi –old) / xi )*100.
IF ea es THEN centinela = 0
END IF
END DO
iter = iter + 1
IF centinela = 1 OR (iter I max) EXIT
END DO
END Gseid
Programa en C

#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <conio.h>
#define L 10
#define P L
MAIN
cout<<"\n\n METODO DE GAUSS SEIDEL ";
cout<<"\n\n Numero de incognitas Posibles en el sistema: ";
scanf("%d",&n);
Gauss_Seidel(n);
titulo(n);
resultados();
cout<<"\n\nLos resultado son ";
for(x=0;x<n;x++)
{
RESULTADOS[x]=X[x];
cout<<"\nX["<<x<<"]= "<<RESULTADOS[x];
}
getch();
}
void resultados()
{
int q=0,i=1,t=3,s=n,r=0;
int sw=0,w=0,ite=0,h=0;
while((sw==0)&&(w<20))
{
h=0;
while(h<n)
{
if(tabla[r]==tabla[r+s])
{
cont++;
}
if(cont==n)
sw=1;
r++;
s++;
h++;
}
ite++;
w++;
}
w=ite-1;
for(int j=0;j<w;j++)
{
t=t+2;
if((i%10==0))
{
textcolor(LIGHTRED+BLINK);
gotoxy(5,t-2);
cprintf("\n\n Presione una tecla para ingresar ala tabla!!! ");

getch();
textcolor(GREEN);
clrscr();
t=5;
titulo(n);
}
gotoxy(15,t);cout<<i<<"ø";
int y=20,z=0;
for(int r=0;r<n;r++)
{
gotoxy(y+z,t);cout<<tabla[q];
q++;
z=z+10;
}
i++;
}
}
void main()
{

Demostración del programa


MÉTODO ITERATIVO DE GAUSS-SEIDEL

Diagrama de flujo
Diagrama Método Gauss-Seidel, a) main, b) leer, c) mostrar y c) Gauss-Seidel.
Programa C++
#include "conio.h"
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
int seidel(float [20][21], int , float [20] , float , int, float [20]);
void leemat(float [20][21], int , int);
void mostrar(float [20],int );
main()
{
int n,nit;
float eps, a[20][21], x[20],xs[20];
printf("Solucion de ecuaciones, Metodo iterativo");
printf("\nDame el numero de ecuaciones a resolver ");
scanf("%d",&n);
printf("\nDame la tolerancia permitida: ");
scanf("%f",&eps);
printf("\nDame el maximo de iteraciones permitidas: ");
scanf("%d",&nit);
clrscr();
printf("\nDame la matriz aumentada: ");
leemat(a, n, 4);
clrscr();
seidel( a, n, x, eps, nit, xs);
printf("\n\nPresiona una tecla para salir");
getch();
}

void leemat(float a[20][21], int n, int fil)

{
int i,j,col;
for(i=1;i<=n;i++)
{
col=2; /*Se define un calor de columna para empezar a capturar*/
for(j=1;j<=nc;j++) /*Se inicia el FOR para las columnas totales*/
{
gotoxy(col,fil+i); /*Se fijan las coordenadas de pantalla*/
scanf("%f",&a[i][j]); /*Se captura el valor de cada elemento de la matriz*/
col=col+5; /*Se avanzan cinco espacios para la próxima columna*/
}
}
}
int seidel(float a[20][21], int n, float x[20], float eps, int nit, float xs[20])
{
int i, j, k, ban; /*Se declaran las variables enteras*/
float aux, b[20][21], xc[20],xs1[20]; /*Se declaran las variables flotantes*/

for(i=1;i<=n;i++) /*se inicia el contador para las filas*/


{
for(j=1;j<=n+1;j++) /*Se inicia el contador para las columnas*/
{
b[i][j]=a[i][j]; /*Transfiere cada valor “a” a la matriz “b”*/
}
}
for(i=1;i<=n;i++) /*inicia el contador para las filas*/
{
aux=b[i][i]; /*localiza al elemento pivote*/
for(j=1;j<=n;j++) /*Inicia el contador para las columnas*/
{
if(i==j) /*condición para el elemento pivote*/
{
b[i][j]=b[i][n+1]/aux; /*divide al último de la matriz aumentada entre pivote*/
}
else
{
b[i][j]=-b[i][j]/aux; /*divide entre pivote y cambia de signo*/
}
}
}
for(i=1;i<=n;i++) /*inicia un contador para los elementos supuestos*/
{
xs[i]=b[i][i]; /*elemento supuesto igual al pivote*/
xs1[i]=xs[i]; /*supuesto 1 (auxiliar) igual a supuesto*/
}
for(i=1;i<=nit;i++) /*inicia contador para las filas*/
{
for(j=1;j<=n;j++) /*inicia contador para las columnas*/
{
xc[j]=b[j][j]; /*identifica al valor calculado*/
for(k=1;k<=n;k++) /*inicia contador para cambio en la operación*/
{

if(j!=k) /*evita al elemento pivote*/


{

xc[j]=xc[j]+b[j][k]*xs[k]; /*realize la operación de despeje*/


}
}
xs[j]=xc[j]; /*el supuesto es igual al calculado*/
}
ban=1; /*referencia para determiner convergencia*/
for(j=1;j<=n;j++) /*inicia contador para valores a comparer en error
{
if(fabs(xc[j]-xs1[j])>eps) /*condición para satisfacer el margen de error*/
{
ban=0; /*cambio de referencia para determinar convergencia*/
break; /*termina la condición if*/
}

}
if(ban==1) /*determina si converge o no el sistema*/
{
clrscr(); /*limpia la pantalla*/
printf("\nEl sistema converge");
mostrar(xs,n); /*muestra el arreglo con los resultados*/
return(1); /*devuelve 1 */
break; /*termina la condición if*/
}
else /condición sin cambio de referencia*/
{
for(j=1;j<=n;j++) /*inicia contador para cambiar los valores supuestos*/
{
xs[j]=xc[j]; /*cada supuesto es igual al calculado*/
xs1[j]=xs[j]; /*cada supuesto 1(auxiliary) igual al supuesto*/
}
}
}
if(ban==0) /*condición para el término del número de interaciones*/
{
clrscr(); /*limpia pantalla*/
printf("El sistema no converge");
return(0); /*devuelve cero*/
}
}
void mostrar(float xc[20],int n) /*Se declaran la función y los elementos a insertar*/
{
int i; /*Se declara una variable entera*/
printf("\nLos resultados son:");
for(i=1;i<=n;i++) /*Se inicia un contador para desplegar en pantalla los resultados*/
{
printf("\n xc[%d]= %f",i,xc[i]); /*Se presenta el elemento deseado*/
}
}

También podría gustarte