Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > C / C++ > Ayuda sobre Gauss-Jordan
-Foros de debate

C / C++
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Ayuda sobre Gauss-Jordan
Enviado por Crash Overide el día 26 de septiembre de 2003

Tengo un problema al implementar el metodo de Gauss-Jordan, implemento 3 ecuasiones con 9 incognitas y me sale errores, hay talvez algun otro metodo de resolver este tipo de ecuasiones o hacer algun cambio a G-J? por la atencion anticipo las gracias

 
Re: Ayuda sobre Gauss-Jordan
Enviado por Mario Alberto Rodiles el día 2 de noviembre de 2003

Hola:)
Disculpa ahora por este a-mail, sabes no se si ya obtuviste la ayuda en la solución de tu programa. Espero que sí, ahora soy yo el que tiene el mismo problema, necesito realizar un programa en C++ que utilice el método de Gauss-Jordan para resolver un sistema de ecuaciones mediante matricez.
Necesito de tu apoyo. ¡Help! por favor..
De antemano te agradezco por el tiempo de leer esto.
Gracias. Cuanta también con mi apoyo en algo que requieras. Soy de Chiapas, México; y estudio el segundo semestre de Ingeniería en sistemas computacionales.

 
Re: Re: Ayuda sobre Gauss-Jordan
Enviado por ESIME el día 22 de abril de 2008

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define max_ecu 10
#define max_inc 10

void a_ceros();
void encabezado();
void cap_coef();
void jordan();
void resultados();
float mat_coef[10][10];
float resul[10];
int n_ecu, n_inc;
int i,j,k,ln,cl,cl1,cl2;

void main()
{
a_ceros();
encabezado();
cap_coef();
jordan();
resultados();
getch();
}

void resultados()
{
int r,n;
r=n_ecu+1;
n=0;
printf("\n Valor de las incognitas del sistema de ecuaciones es:\n\n");
for(n=1;n<=n_ecu;n++)
{
printf("X%d=%0.4f\n",n,mat_coef[n][r]);
}
getch();
}

void jordan()
{
int z;
float pivote=0.0;
float elem_zero=0.0;

for(i=1;i<=n_ecu;i++)
{
pivote=mat_coef[i][i];
for(z=1;z<=(n_ecu+1);z++)
{
mat_coef[i][z]=mat_coef[i][z]/pivote;
}
for(k=1;k<=n_ecu;k++)
{
if(k!=i)
{
elem_zero=mat_coef[k][i];
for(j=i;j<=(n_ecu+1);j++)
{
mat_coef[k][j]=mat_coef[k][j]-(elem_zero*mat_coef[i][j]);
}
}
}
}
}

void cap_coef()
{
i=0; j=0;
ln=11;cl=8;
for(i=1;i<=n_ecu;i++){
for(j=1;j<=(n_ecu+1);j++){
if(j>n_ecu)cl=cl+5;
gotoxy(cl,ln);
if(i==1&&j==1)scanf("%f",&mat_coef[1][1]);else
scanf("%f",&mat_coef[i][j]);
cl=cl+6;
}
ln=ln+1;
cl=8;
}
}

void a_ceros()
{
i=j=k=0;
for(i=0;i<max_ecu;i++){
for(j=0;j<max_inc;j++){
mat_coef[i][j]=0.0;
}
}
}

void encabezado()
{
clrscr();
gotoxy(35,1);printf("Metodo de Gauss-Jordan \n");
for(i=1;i<80;i++){
printf("%c",177);
}

gotoxy(5,5);printf("Teclee el numero de ecuaciones:");
gotoxy(37,5);scanf("%d",&n_ecu);
gotoxy(10,8);printf("Captura de coeficientes del sistema de ecuaciones");
ln=10;
cl=8+(6*n_ecu);
for(i=1;i<=(n_ecu);i++){
if(1==1){
gotoxy(5,ln);printf("%c",218);
gotoxy(cl,ln);printf("%c",191);
}
ln=ln+1;
gotoxy(5,ln);printf("%c",179);
gotoxy(cl,ln);printf("%c",217);
ln=10;
cl1=cl+3;
cl2=cl1+4;
for(i=1;i<=(n_ecu);i++){
if(i==1){
gotoxy(cl1,ln);printf("%c",218);
gotoxy(cl2,ln);printf("%c",191);
}
ln=ln+1;
gotoxy(cl1,ln);printf("%c",179);
gotoxy(cl2,ln);printf("%c",179);
}

ln=ln+1;
gotoxy(cl1,ln);printf("%c",192);
gotoxy(cl2,ln);printf("%c",217);
ln=11;cl=10;
for(i=1;i<=n_ecu;i++){
for(j=1;j<=n_ecu;j++){
gotoxy(cl,ln);printf("X%d",i);
ln=ln+1;
}
ln=11;
cl=cl+6;
}
}
}

 

Re: Re: Ayuda sobre Gauss-Jordan
Enviado por Ruben Mendez el día 28 de diciembre de 2004

Que tal,
Soy IEC de la FIME en la UANL. Muy seguro tienes problemas en el Algoritmo para la resolucion de la Matriz, Si estas sujeto a utilizar el metodo G-J. Si puedes utilizar otro metodo, Yo te recomiendo el Metodo del Prf. Montante, es
un metodo muy eficiente y rapido para resolver matrices, ahora ya puedes encontrarlo en los libros de Algebra lineal. El prf. Montante Dio clases en FIME, es todo un genio y volvio obsoleto el metodo G-J.

 

Re: Re: Ayuda sobre Gauss-Jordan
Enviado por sorp el día 1 de abril de 2005

* Método de Newton-Raphson.

OBJETIVO.

Este método consiste de proporcionar un Xi inicial de aproximación a la raíz analítica r en seguida se evalúa la función en Xi obteniendo se f(Xi) se traza una recta tangente que intercepta en Xi+1al eje de las X. A este punto se le llama raíz nueva de aproximación a la r.

Algoritmo:

1. Dada una función f(X)=0 Obtener la Primera y Segunda derivada.

2. Elegir un valor inicial X0. Este valor inicial debe cumplir con el criterio de convergencia:

3. Obtener una nueva aproximación evaluando la formula general del método:

Xn+1=Xn - f(Xn)/ f ´(Xn)


4. Evaluar la aproximación relativa

| (Xn+1 - Xn) / Xn+1 | < Tolerancia

No. (Falso) Repetir el paso 3 y 4

Si . (Verdadero) Entonces Xn+1 Es la Raíz

Si existe una función f(x)=0 y un intervalo [a,b], tenemos una raiz  y xo una aproximación de , se extrae de la llamada Serie de Taylor (tomando hasta la 2ª potencia) :





Despejando , se tiene:




Siguiendo esto como una sucesión, se tiene:


Tenemos la fórmula de Newton-Raphson. Además, existe un estudio de la convergencia del método, en donde G(x) se acota, teniendo la fórmula de convergencia como:



Cabe señalar que el método de Newton-Raphson es convergente en forma cuadrática, es decir, que el número de cifras decimales correctas se duplica aproximadamente en cada iteración, o el error es aproximadamente proporcional al cuadrado del error anterior.

La ventaja de este método es que, al ser un método iterativo, éste entrega una sucesión , resoluciones aproximadas, convergiendo más rápidamente al valor buscado y se usan menos operaciones aritméticas.

Método de Gauss-Jordan.

Es una variante del método de Gauss y consiste en producir ceros en toda posición no diagonal de cada columna j, ubiando por operación unos en la posición (j,j).Esto es:

[a,b]![I,x]

donde I es la matriz identidad de orden n, y x es la solución del sistema Ax=b.

Este método se conoce como método directo para resolver ecuaciones lineales tipo Ax=b, donde en un número finito de pasos da la solución exacta.Además, es eficiente cuando la matriz A posee elelmentos no nulos, los que son más fáciles de aplicarles operaciones matemáticas.

Programa en C++

#include<stdio.h>

#include<conio.h>

void main()

{

int n,m,i,j,k;

float a[25][26],b[25][26],apoyo;

clrscr();

printf("\n MÉTODO DE GAUSS-JORDAN");

printf("\n\n Ingrese el nº de incógnitas \n\n Nº de Ecuaciones = ");

scanf("%d",&n);

printf("\n Ingrese coeficientes\n");

/* Datos para iniciar método */

for(i=1;i<=n;i++)

{

printf("\n Fila %d \n",i);

for(j=1;j<=n+1;j++)

{

printf(" Ingese a(%d,%d) = ",i,j);

scanf("%f",&a[i][j]);

}

}

/* Fin Del Ciclo De Solicitud De Datos */

/* Proceso Principal */

m=n+1;

do

{

if(a[1][1]==0)

{

k=m-1;

for(i=2;i<=k;i++)

{

if(a[i][1]!=0)

{

for(j=1;j<=m;j++)

{

apoyo=a[i][j];

a[i][j]=a[1][j];

a[1][j]=apoyo;

}

}

}

}

else

{

for(j=2;j<=m;j++)

{

for(i=2;i<=n;i++)

{

b[i-1][j-1]=a[i][j]-a[1][j]*a[i][1]/a[1][1];

}

}

for(j=2;j<=m;j++)

{

b[n][j-1]=a[1][j]/a[1][1];

}

m=m-1;

for(j=1;j<=m;j++)

{

for(i=1;i<=n;i++)

{

a[i][j]=b[i][j];

}

}

}

}

while(m>1);

printf("\n\n SOLUCION DEL SISTEMA\n ");

for(i=1;i<=n;i++)

{

printf("\n X(%d) = %1.4f",i,a[i][1]);

}

printf("\n\n Fin del programa");

getch();

}

Universidad Católica de la

Santísima Concepción.

Facultad de Ingeniería.

Area ciencias Básicas.














mira vato no se site sirva este programa para ay te lo envio

 
Re: Re: Re: Ayuda sobre Gauss-Jordan
Enviado por franjadini el día 22 de mayo de 2008

viejo gracias gracias gracias cuando kiera pasese a mi casa y le invito unas polas esta muy teso su programa me sirvio demasiado gracias

 


Ayuda sobre Gauss-Jordan
Enviado por hugo el día 7 de marzo de 2006

necesito un programa en c de gauss los que tengas y el de euckler, r-k y r-k-f me los pordrias mandar por favor

 


Re: Ayuda sobre Gauss-Jordan
Enviado por Yo el día 30 de diciembre de 2004

// programa : Hanoi no recursivo
// borland c++ for windows - ver 4.5
// 10/4/2004

#include <iostream.h>
#include <iomanip.h>
#include <conio.h>

const int MAX = 10;
int a = 0,b = 1,c = 2 ,n = 0,
p[3],x[3][MAX];

void GetDim()
{
while(n < 1 || n > MAX)
{
cout << "entre el numero de discos (0 < n <= 10) : ";
cin >> n;
}
cout << endl << endl;
} // GET DIM

void Init()
{
if(n%2) // para numero de aros pares, rotacion inversa
{
b = 2;
c = 1;
}
for(int i = 0;i < n;i++)
x[0][i] = n-i;
p[0] = n-1;
p[1] = p[2] = -1;
} // INIT

void Show()
{
for(int i = 0;i < 3;i++)
{
cout << "[" << char('a'+i) << "] : ";
for(int j = 0;j < n;j++)
{
cout << setw(3);
if(x[i][j])
cout << x[i][j];
else
cout << '.';
}
cout << endl;
}
cout << endl;
getch();
} // SHOW

void Rotation()
{
int holder = a;
a = b;
b = c;
c = holder;
} // ROTATION

void Move(int source,int target)
{
x[target][++p[target]] = x[source][p[source]];
x[source][p[source]--] = 0;
} // MOVE

void Process()
{
Show();
for(;;)
{
Move(a,b);
Show();
if(p[b] == n-1)
break;
if(p[c] == -1)
Move(a,c);
else if(p[a] == -1)
Move(c,a);
else if(x[a][p[a]] < x[c][p[c]])
Move(a,c);
else
Move(c,a);
Show();
Rotation();
}
} // PROCESS

void main()
{
cout << "Torres de Hanoi, processo no recursivo : " << endl << endl;
GetDim();
Init();
Process();
cout << "end of program - good bye ! ! ! " << endl;
} // MAIN

 


Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network