Está en la página 1de 5

/*Elabore un programa que resuelva un sistema matricial de por lo menos

diez ecuaciones, por el mtodo de eliminacin completa de Gauss - Jordan*/


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define T 12 // tamao mximo para realizar operaciones, tamao real mximo = 10 filas X 10
columnas
int main (void) //funcion principal
{
float A[T][T]={0}; //matriz principal
float B[T][T]={0}; //matriz de valores absolutos para el pivoteo
float W[T]={0}, X[T]={0}, Y[T]={0}, Z[T]={0}, k=0, s=0, det1=1, det2=1; // variables para
clculos
int a, b, m, n, i, j, o; // variables para contadores
printf("\n\n\tMETODO DE ELIMINACION COMPLETA DE GAUSS-JORDAN\n");
system("pause");
/* Tamao de matriz ingresado*/
do
{
system("cls");
printf("\n\n\tIngrese el orden del sistema\n\n\tOrden = ");
scanf("%d", &o);
}
while( o < 2 || o > T-2 );
/*lectura de la matriz*/
printf("\n\n\tIngrese los elementos de la matriz:\n\n");
for (i = 1; i <= o; i++)
{
for (j = 1; j <= o+1; j++)
{
if (j>o)
{
printf("\n\tDame el elemento b[%d]: ",i);
scanf("%f", &A[i][j]);
printf("\n");
}

else
{
printf("\tDame A[%d][%d] = ", i, j);
scanf("%f", &A[i][j]);
}
}
}
/* determinante por diagonal principal, exclusion de matrices con cero en la diagonal */
for(i=1; i<=o; i++)
{
det1 *= A[i][i];
}
if(det1 == 0)
{
printf("\n\n\t Hay por lo menos un CERO en la diagonal principal");
fflush(stdin);
getchar();
exit(0);
}
/* Impresion de matriz ingresada */
printf("\n\n\tLa matriz ingresada es: \n\n");
for (i=1; i<=o; i++)
{
printf("\n\n\t");
for (j=1; j<=o+1; j++)
{
printf("%5.2f ", A[i][j]);
}
}
printf("\n\n\t");
system("pause");
/* Proceso de busqueda del pivote a utilizar */
for (a=1; a<=o; a++)
{
system("cls");
k=0.0;
for (i=0; i<=o; i++)

{
for (j=0; j<=o; j++)
{
B[i][j]=fabsf(A[i][j]);
if
(k<B[i][j]&&j!=Z[1]&&j!=Z[2]&&j!=Z[3]&&j!=Z[4]&&j!=Z[5]&&j!=Z[6]&&j!=Z[7]&&j!=Z[8]&&j!=Z[9]
&&j!=Z[10]&&j!=Z[11]&&i!=Z[1]&&i!=Z[2]&&i!=Z[3]&&i!=Z[4]&&i!=Z[5]&&i!=Z[6]&&i!=Z[7]&&i!=Z
[8]&&i!=Z[9]&&i!=Z[10]&&i!=Z[11])
{
k=B[i][j];
m=i;
n=j;
}
}
}
Z[a]=n; /* criterio para no repetir un pivote */
X[a]=k; /* Esta variable almacena los pivotes utilizados, para clculos posteriores
*/
/* Diagonalizacin de la matriz */
for(i=1; i<= o+1; i++)
{
if (i==n)
{
for(j=1; j<=o+1; j++)
{
Y[j]=A[n][j];
A[n][j]=A[m][j];
A[m][j]=Y[j];
}
for (j=1; j<=o; j++)
{
if (j!=n)
{
s=A[j][n]/A[n][n];
for(b=1; b<=o+1; b++)
{
A[j][b] -= s * A[n][b];
}
}
}

}
}
}
/* Normalizacion de la matriz diagonal y solucion del sistema */
for(i=1; i<=o; i++)
{
k= A[i][i];
for(j=1; j<=o+1; j++)
{
A[i][j]=A[i][j]/k;
}
}
/* Discriminacin del vector de resultados */
for(i=1; i<=o; i++)
{
for(j=1; j<=o+1; j++)
{
if (j>i)
{
Z[i]=A[i][j];
}
}
}
/* Solucion mostrada al usuario */
printf("\n\n\n\tLa Matriz Solucion del Sistema es: \n\n");
for (i=1; i<=o; i++)
{
printf("\n\n\t");
for (j=1; j<=o+1; j++)
{
printf("%5.2f ", A[i][j]);
}
}
printf("\n\n\n\tEl vector solucion es: \n");
for (i=1; i<=o; i++)
{

printf("\n\t X[%d] = %f", i, Z[i]);


}
printf("\n\n\tPivotes utilizados: \n");
for (i=1; i<=o; i++)
{
printf("\n\tPivote[%d] = %f", i, X[i]);
}
printf("\n\n\n\tEl producto de los pivotes utilizados es:\n");
for (i=1; i<=o; i++)
{
det2*=X[i];
}
printf("\n\t%f", det2); //Comparacin del producto de pivotes vs. el determinante original
printf("\n\n\tY el determinante original ingresado es:\n\n\tDet = %f", det1);
printf("\n\n\tGracias por usar el programa :)");
printf("\n\n\t");
fflush(stdin);
getchar();
return 0;
}

También podría gustarte