Método Gauss-Seidel en C y C++

March 26, 2018 | Author: Deyvid Fifa Che | Category: Algorithms, Mathematical Objects, Analysis, Applied Mathematics, Computing


Comments



Description

Método Gauss-SeidelPseudocó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 while((sw==0)&&(w<20)) { h=0.j<w. for(x=0. } if(cont==n) sw=1. } w=ite-1. .Programa en C #include <stdio.i=1.r=0.h> #include <iostream.h> #include <math.t=3. s++. cout<<"\n\n Numero de incognitas Posibles en el sistema: ". if((i%10==0)) { textcolor(LIGHTRED+BLINK).j++) { t=t+2.t-2). Gauss_Seidel(n). titulo(n). for(int j=0. cout<<"\n\nLos resultado son ".x++) { RESULTADOS[x]=X[x]. cout<<"\nX["<<x<<"]= "<<RESULTADOS[x].&n).h> #define L 10 #define P L MAIN cout<<"\n\n METODO DE GAUSS SEIDEL ". } getch().ite=0.h=0.x<n. } ite++. w++. } void resultados() { int q=0. r++. resultados(). h++. while(h<n) { if(tabla[r]==tabla[r+s]) { cont++. int sw=0.s=n.h> #include <conio.w=0. gotoxy(5. scanf("%d". r<n.t). for(int r=0. q++. z=z+10. int y=20. } } void main() { Demostración del programa .cout<<i<<"ø". getch(). } i++.r++) { gotoxy(y+z.z=0.cout<<tabla[q]. clrscr(). } gotoxy(15. titulo(n).cprintf("\n\n Presione una tecla para ingresar ala tabla!!! "). textcolor(GREEN). t=5.t). MÉTODO ITERATIVO DE GAUSS-SEIDEL Diagrama de flujo . . . . b) leer. a) main. c) mostrar y c) Gauss-Seidel.Diagrama Método Gauss-Seidel. n. int.h" int seidel(float [20][21]. int nit.h" #include "stdio. scanf("%f". int). k.h" #include "stdlib.int ). int . float [20]). float eps.&eps). float . clrscr(). x[20]. int fil) { int i.Programa C++ #include "conio.fil+i).nit. xc[20]. /*Se declaran las variables enteras*/ float aux. /*Se declaran las variables flotantes*/ for(i=1. clrscr().&a[i][j]). n. printf("\n\nPresiona una tecla para salir").xs[20]. int n. xs). int .i++) /*inicia el contador para las filas*/ .j++) /*Se inicia el FOR para las columnas totales*/ { gotoxy(col. /*Se avanzan cinco espacios para la próxima columna*/ } } } int seidel(float a[20][21]. int n. scanf("%d".i<=n. b[20][21].xs1[20]. getch(). void leemat(float [20][21].col. main() { int n.j<=n+1. printf("Solucion de ecuaciones.j<=nc. } void leemat(float a[20][21]. x. void mostrar(float [20]. for(i=1. float xs[20]) { int i.h" #include "math.j++) /*Se inicia el contador para las columnas*/ { b[i][j]=a[i][j]. seidel( a. float x[20]. j. printf("\nDame la matriz aumentada: ").&n).i<=n. float eps. printf("\nDame el numero de ecuaciones a resolver "). /*Se captura el valor de cada elemento de la matriz*/ col=col+5.j. /*Se define un calor de columna para empezar a capturar*/ for(j=1. ban. nit. printf("\nDame la tolerancia permitida: "). Metodo iterativo"). 4). leemat(a. a[20][21]. /*Transfiere cada valor “a” a la matriz “b”*/ } } for(i=1. eps. float [20] .i++) { col=2.i<=n.i++) /*se inicia el contador para las filas*/ { for(j=1.&nit). scanf("%d". /*Se fijan las coordenadas de pantalla*/ scanf("%f". printf("\nDame el maximo de iteraciones permitidas: "). j++) /*inicia contador para cambiar los valores supuestos*/ { .i<=nit.j<=n. /*muestra el arreglo con los resultados*/ return(1).n). /*devuelve 1 */ break.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.i<=n. /*localiza al elemento pivote*/ for(j=1. /*realize la operación de despeje*/ } } xs[j]=xc[j]. /*identifica al valor calculado*/ for(k=1. /*el supuesto es igual al calculado*/ } ban=1. /*referencia para determiner convergencia*/ for(j=1. /*divide al último de la matriz aumentada entre pivote*/ } else { b[i][j]=-b[i][j]/aux. /*supuesto 1 (auxiliar) igual a supuesto*/ } for(i=1.j<=n. mostrar(xs. /*termina la condición if*/ } else /condición sin cambio de referencia*/ { for(j=1.i++) /*inicia contador para las filas*/ { for(j=1.j++) /*inicia contador para las columnas*/ { xc[j]=b[j][j].j<=n.j<=n.i++) /*inicia un contador para los elementos supuestos*/ { xs[i]=b[i][i].k<=n. /*limpia la pantalla*/ printf("\nEl sistema converge"). /*termina la condición if*/ } } if(ban==1) /*determina si converge o no el sistema*/ { clrscr(). /*cambio de referencia para determinar convergencia*/ break. /*divide entre pivote y cambia de signo*/ } } } for(i=1.{ aux=b[i][i].j++) /*Inicia el contador para las columnas*/ { if(i==j) /*condición para el elemento pivote*/ { b[i][j]=b[i][n+1]/aux.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]. /*elemento supuesto igual al pivote*/ xs1[i]=xs[i]. /*Se declara una variable entera*/ printf("\nLos resultados son:"). /*limpia pantalla*/ printf("El sistema no converge").i. for(i=1.int n) /*Se declaran la función y los elementos a insertar*/ { int i.xs[j]=xc[j].i++) /*Se inicia un contador para desplegar en pantalla los resultados*/ { printf("\n xc[%d]= %f". /*cada supuesto 1(auxiliary) igual al supuesto*/ } } } if(ban==0) /*condición para el término del número de interaciones*/ { clrscr(). /*cada supuesto es igual al calculado*/ xs1[j]=xs[j].i<=n. /*Se presenta el elemento deseado*/ } } . /*devuelve cero*/ } } void mostrar(float xc[20].xc[i]). return(0).
Copyright © 2024 DOKUMEN.SITE Inc.