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 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 *x j 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 *x j 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 #include #include #include #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
cprintf("\n\n Presione una tecla para ingresar ala tabla!!! "); getch(); textcolor(GREEN); clrscr(); t=5; titulo(n); } gotoxy(15,t);cout<
MÉTODO ITERATIVO DE GAUSS-SEIDEL
Diagrama de flujo
Diagram a Mé tod o Gau ss -Seidel, a) main, b) leer, c) mo strar 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*/ } }