Вы находитесь на странице: 1из 10

Mtodo Gauss-Seidel

Pseudocdigo 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() { Demostracin del programa

MTODO ITERATIVO DE GAUSS-SEIDEL

Diagrama de flujo

Diagrama Mtodo 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 prxima 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) /*condicin 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 operacin*/ { if(j!=k) /*evita al elemento pivote*/ { xc[j]=xc[j]+b[j][k]*xs[k]; /*realize la operacin 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) /*condicin para satisfacer el margen de error*/ { ban=0; /*cambio de referencia para determinar convergencia*/ break; /*termina la condicin 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 condicin if*/ } else /condicin 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) /*condicin para el trmino del nmero de interaciones*/ { clrscr(); /*limpia pantalla*/ printf("El sistema no converge"); return(0); /*devuelve cero*/ } } void mostrar(float xc[20],int n) /*Se declaran la funcin 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*/ } }

Вам также может понравиться