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
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.
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;
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);
}
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.
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