alguien que tenga los metodos de gauss

javier
21 de Octubre del 2004
Si alguien tiene los metodos de eliminacin de gauss, gauss-jordan, gauss-seidel por favor urgente. Gracias

LIGIA_JULIAN
21 de Octubre del 2004
//METODO DE GAUSS_SEIDEL
# include <stdio.h>
# include <conio.h>
# include <math.h>
void marco();
main(void)
{
float A[10][11];
float X[10];
float Y[10];
float Z[10];
float sum,suma,T,tol,x1,x2;
int a,i,j,k,l,m,n,nx,co,re,c1,c2,row,pi,Vtol;
char op;

do{
for(re=0;re<10;re++)
{
X[re]=0;
Y[re]=0;
Z[re]=0;
}
for(re=0;re<10;re++)
{
for(co=0;co<11;co++)
{
A[re][co]=0;
}
}

clrscr();
marco();
gotoxy(25,3); printf("MTODO DE 'GAUSS-SEIDEL'");
gotoxy(10,5); printf("Renglones: "); scanf("%d",&re);
gotoxy(30,5); printf("Columnas: "); scanf("%d",&co);

if(co!=re) {
gotoxy(10,8); printf("La Matriz No Es Cuadrada");
row=2; goto fin2;
}

row=0;
for(c1=0;c1<re;c1++) {
pi=0;
for(c2=0;c2<co+1;c2++) {
gotoxy(50,5); printf("Teclea...A[%d][%d] ",c1,c2);
gotoxy(10+pi,7+row);
scanf("%f",&A[c1][c2]); pi+=9;
}

row+=2;
}
/****************************************************************************/
/* Se inicia la generacion de los valores de X(i) */

for (i=0; i<re; i++)
{
X[i] = A[i][re]/A[i][i];
}
a = 0;


/* Se inicia el ciclo para hacer el calculo de los nuevos valores de X */
do
{
a = a+1;
for(i=0;i<re;i++)
{
suma = 0;
m = 0;
do
{
if (m==i)
{
m = m+1;
}
suma = suma + A[i][m]*X[m];
m = m+1;
if ((i == (re-1)) && (m == (re-1)))
{
m = m+1;
}
} while (m<re);
Y[i] = X[i];
X[i] = (A[i][re]-suma)/A[i][i];
}


/* Se comparan los valores de X's para que cumpla la tolerancia */
for (i=0; i<re; i++)
{
Z[i] = fabs(X[i]-Y[i]);
}

/* Se compara la tolerancia para cada valor del vector soluci¢n */
Vtol = 0;
for (i=0; i<re; i++)
{
if (Z[i] <= 0.001)
{
Vtol = Vtol+1;
}
}


} while (Vtol<=(re-1));

/****************************************************************************/
/* Se imprimen los valores del vector soluci¢n */
for(co=0;co<re;co++)
{
gotoxy(10,16+co);printf("El resultado de X[%d] = %fn",co,X[co]);
}
gotoxy(10,20);printf("En la iteracion No. %d",a);

/* Se termina de imprimir el vector soluci¢n */
/****************************************************************************/

fin2:
gotoxy(15,22); printf("¨Desea realizar otra operaci¢n? [s/n] ");
op=getche();
}while (op!='n');
clrscr();

}
/****************************************************************************/
void marco()
{
int i,j;
textcolor(2);
clrscr();
for (i=2; i<81; i++)
{
gotoxy(i,1); printf("Û");
gotoxy(i,24); printf("Û");
}
for (i=1; i<25; i++)
{
gotoxy(1,i); printf("ÛÛ");
gotoxy(79,i); printf("ÛÛ");
}
}

//METODO DE GAUSS_JORDAN
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#define N 20

int gauss_jordan (double a[N][N] , double b[N], double x[N], int n, double eps)

{
double m[N][N+1]; //matriz de orden N
double f; //cantidad de veces que se resta una fila a otra
double max; //para buscar pivote
double t; //auxiliar

int i, j, k, r; //contadores

// llenado de la matriz

i=0; //filas
while (i<n) { //analiza las filas
j=0; //columnas
while (j<n) { //analiza las columnas
m[i][j]=a[i][j];
j++;
}
m[i][n]=b[i];
i++;
}
//dejado de pivotes distintos de cero

i=0;
while (i<n){
max=-1.0;
k=i;
while (k<n){ //busca el pivote de abajo
if (fabs (m[k][i])>max){
max=fabs (m[k][i]);
r=k;
//si termina la busqueda intercambia la fila
}
k++;
}
if (max<=eps)
//si el pivote es 0 el sistema no tiene solucion o tiene infinidad de soluciones
return 0;

if (r!=i){ //se encontr¢ el pivote
k=i; //intercambio de filas
while (k<=n){
t=m[i][k];
m[i][k]=m[r][k];
m[r][k]=t;
k++;
}
}

//se cambia solo a la derecha de la columna
//se cambia solo a la izquierda si hay ceros

j=0;
while (j<n){
if (j!=i){
f=m[j][i]/m[i][i];
k=i;
while (k<=n){
m[j][k]=m[j][k]-f*m[i][k];
k++;
}
}
j++;
}
i++;
}

i=0;
while (i<n){
x[i]=m[i][n]/m[i][i];
printf("nt La solucion x%d es: %lfn", i, x[i]);
i++;
}
return 1;
}



int main(void)
{
textcolor(0);
textbackground(5);
int n,i, j, k, si_sol;
double tol,a[N][N], b[N], x[N];
clrscr();
gotoxy(30,2);printf("Metodo de GAUSS-JORDANn");
printf ("ntIngrese una Matriz Cuadrada de orden N:");
scanf ("%d", &n);
printf ("ntIngrese una tolerancia para el cero:");
scanf ("%lf", &tol);
i=0;
while (i<n){
printf ("nntEcuacion # %d:n", (i+1));
j=0;
while (j<n){
printf ("ntIngrese el coeficiente de la");
printf ("Incognita x%d:", j);
scanf ("%lf", &a[i][j]);
j++;
}
i++;
}
k=0;
while (k<n){
printf ("ntnIngrese el resultado de la ecuacion # %d:", k+1);
scanf ("%lf", &b[k]);
k++;
}

si_sol= gauss_jordan(a, b, x, n, tol);

if (si_sol=0){
printf("nt El sistema no tiene solucion o tiene");
printf ("infinidad de solucionesn");
}
getch();
return EXIT_SUCCESS;
}







eli_zabet
21 de Octubre del 2004
si no es mucha molestia a mi tambien me gustaría tener los metodos alguien me los puede mandar. si alguien tiene en algun programa Visual mucho mejor.
saludos Eli

elvira jim
21 de Octubre del 2004
en la pagina http://mundovb.net encontraras esos programas de gauss y muchos mas