Aquí dejo el código para
resolver sistemas de ecuaciones mediante Gauss con la pequeña correción, pero importante, comentada en el
tema de Método de Gauss:
#include <stdio.h>
void PideDatos(int *Dim, float Sist[][102]);
void EscribeDatos(int Dim, float Sist[][102]);
void ResuelveGauss(int Dim, float Sist[][102]);
int main(void)
{
int C,Dimension;
float Sistema[101][102];
PideDatos(&Dimension,Sistema);
printf("\n\n\nEl SISTEMA introducido es el siguiente: \n\n");
EscribeDatos(Dimension,Sistema);
ResuelveGauss(Dimension,Sistema);
printf("\n\n\nLas soluciones son:\n");
for(C=1;C<=Dimension;C++) printf("\n X%d=%f\n",C,Sistema[C][Dimension+1]);
scanf("");
return(0);
}
void PideDatos(int *Dim,float Sist[][102])
{
int A,B;
printf("\n\n ||RESUELVE SISTEMAS LINEALES DETERMINADOS POR GAUSS||");
printf("\n\n\n Introduce el numero de incognitas:(menor que 100)");
scanf("%d",&*Dim);
printf("\n\n PASE A INTRODUCIR CADA COMPONENTE DEL SISTEMA (A|B):");
printf("\n\n MATRIZ A:\n");
for(A=1;A<=*Dim;A++) for(B=1;B<=*Dim;B++){
printf("\n Termino A(%d,%d):",A,B); scanf("%f",&Sist[A][B]);}
printf("\n\n\n VECTOR B:\n");
for(A=1;A<=*Dim;A++){
printf("\n Termino B(%d):",A);scanf("%f",&Sist[A][*Dim+1]);
}}
void EscribeDatos(int Dim, float Sist[][102])
{
int A,B;
for(A=1;A<=Dim;A++){
for(B=1;B<=(Dim+1);B++){
printf("%7.2f",Sist[A][B]);
if(B==Dim) printf(" |");}
printf("\n");
}}
void ResuelveGauss(int Dim, float Sist[][102])
{
int NoCero,Col,C1,C2,A;
float Pivote,V1;
for(Col=1;Col<=Dim;Col++){
NoCero=0;A=Col;
while(NoCero==0){
if((Sist[A][Col]>0.0000001)||((Sist[A][Col]<-0.0000001))){
NoCero=1;}
else A++;}
Pivote=Sist[A][Col];
for(C1=1;C1<=(Dim+1);C1++){
V1=Sist[A][C1];
Sist[A][C1]=Sist[Col][C1];
Sist[Col][C1]=V1/Pivote;}
for(C2=Col+1;C2<=Dim;C2++){
V1=Sist[C2][Col];
for(C1=Col;C1<=(Dim+1);C1++){
Sist[C2][C1]=Sist[C2][C1]-V1*Sist[Col][C1];}
}}
for(Col=Dim;Col>=1;Col--) for(C1=(Col-1);C1>=1;C1--){
Sist[C1][Dim+1]=Sist[C1][Dim+1]-Sist[C1][Col]*Sist[Col][Dim+1];
Sist[C1][Col]=0;
}
}
Un saludo.
expliquenme el final porfavor :c
ResponderEliminarBuenos días Wendyy,
ResponderEliminarEl programa utiliza el método conocido como Método de Gauss.
Esto consiste en realizar operaciones sobre la matriz A del sistema y el vector independiente D (Ax=D donde x es el vector incógnita) para primeramente triangularizarla, de manera que tengas la matriz A' con todos los elementos por debajo de la diagonal nulos, y posteriormente realizar el mismo prceso para los elementos por encima de la diagonal, de modo que tengas una matriz A'' diagonal. Un vez llegado a este paso la resolución ya es inmediata.
Te dejo el enlace de wikipedia de como triangularizar una matriz con gauss-jordan y resokver el sistema:
http://es.wikipedia.org/wiki/Eliminaci%C3%B3n_de_Gauss-Jordan
Un saludo
Este comentario ha sido eliminado por el autor.
ResponderEliminarSONSO
EliminarHola buenas,
ResponderEliminarintento arrancar el programa copiando el codigo y se me cierra el turbo C++, por que podria ser?
Yo no utilizo turbo C++, es preferible usar CodeBlocks. En cualquier caso puedes añadir justo al final de la estructura main (pero antes del return) la siguiente linea de código:
Eliminargetchar();
Esto hace la misma función que el scanf() final, pero igual funciona mejor.
Un saludo y gracias!!
CUANDO TERMINO DE INTRODUCIR TODOS LOS DATOS ME TIRA UN PORTAZO EN LA CARA Y SE CIERRA LA CONSOLA
ResponderEliminarMII DATOS SON:
ResponderEliminar2
4k 3k 3k 3k 2 1
LA SOL ES 1m y -0.66m m es 10 a la menos 3; k=1000
Buenas,
EliminarA mi no me da ningún problema con el sistema que me dices, usando la IDE de codeblocks. El orden de introdución de los datos es: 4000 3000 3000 3000 2 1
prueba si no a añadir otro scanf al final del main...
Un saludo, espero haberte podido ayudar
hola oye este es el metodo de gauss-jordan entonces cual seria el metodo de gauss o cual es la diferencia
EliminarSe le llama de ambas formas, gauss o gauss-jordan, y es el mismo
EliminarPerdón la intromisión, pero gauss es escalonada pero solo hasta llegar a los 1 en la diagonal principal sin importar los numeros que están sobre de estos y gauss-jordan es cuando se logra llegar (por el mismo método) hasta la matriz identidad
EliminarNo es lo mismo. Gauss lo resuelve de manera por filas para buscar la identidad de un lado. en cambio Gauss Jordan es el metodo de pivoteo.
EliminarUna pregunta, mediante este codigo es posible resolver Sistemas de encuaciones mediante matrices de 4x4?
ResponderEliminarAgradezco su respuesta
Hola Eduardo.
EliminarSí, así es, este programa resuelve sistemas lineales de cualquier tamaño siempre que haya espacio en memoria (Aunque por simplicidad a la hora de programarlo se ha limitado a 100 la dimensión máxima)
Si tienes cualquier duda a la hora de utilizar el programa no dudes en preguntar.
Un saludo
Hola, disculpa que este de incognito, queria preguntarte...Tomando e cuenta el proceso que haces en el cuaderno para resolver esta matriz, que funcion viene haciendo tu variable A,COL,COL1 Y COL2? me serviria mucho para poder visualizar mejor el codigo
ResponderEliminarEl código tiene un pequeño error, está en la 15o. linea del código fuente, me funcionó hasta que elimine el "scanf("");" pero no sé a que se deba que a otros les corre a la primera. Como sea, gracias por tan buen aporte!
ResponderEliminarBuenas tardes... como haria para colocarle que no tiene solucion???... claro en el caso de que no la tenga...
ResponderEliminarpodria adaptarlo para que resuelva matrices de mxn y no solo de nxn?
ResponderEliminarTambien lo necesito, no lo tendras de casualidad en C
Eliminar¿Como puedo hacerlo para resolver un sistema de ecuaciones no lineales?.
ResponderEliminarexcelente programa gracias...
ResponderEliminarHOLA BUNENAS NOCHE DISCULPE PARA CAMBIAR EL CODIGO A 3*3???
ResponderEliminarES QUE YA LO INTENTE PERO ME MARCA ERROR AYUDA PORFAVOR