UNIVERSIDAD AUTONOMA DE NUEVO LEON
FACULTAD DE CIENCIAS FISICO
MATEMATICAS
UA: ANALISIS NUMERICO.
M.A. MARIA DEL CARMEN MARTINEZ CEJUDO.
Proyecto 1
(PROGRAMA DEL MÉTODO GAUSS-JORDAN)
Jorge Vasconcelos Cáceres 1656187
San Nicolás de los Garza, a 17 de febrero de 2023
Introducción.
El método de eliminación de Gauss - Jordan nos permiten obtener las soluciones
(en caso de haberlas) de los sistemas de ecuaciones lineales (SEL).
El método consiste en aplicar operaciones elementales fila, es decir, cualquier fila
se puede multiplicar por cualquier número (distinto de cero) o se le puede sumar o
restar cualquier otra fila multiplicada o no por cualquier número. No se puede
restar una fila a ella misma. También puede intercambiarse el orden de las filas
(por ejemplo, intercambiar las dos primeras filas). El proceso debe aplicarse hasta
que se obtenga la matriz en forma escalonada reducida (método Gauss - Jordan)
de la matriz ampliada.
Descripción del programa.
El programa que se realizó nos permite obtener una resolución de matrices
cuadradas ( n x n ) de un tamaño de 1 a 9 ecuaciones mediante el método Gauss -
Jordan
Contenido.
Cuando abrimos el ejecutable se nos muestra en pantalla el mensaje inicial con
una pequeña descripción de lo que hace el programa, también nos pide ingresar el
tamaño de la matriz que se va a resolver
Una vez ingresado el dato procedera el inicio de el ingreso de datos
Se procede a llenar los coeficientes de las ecuaciones según el tamaño, cabe
mencionar que como es cuadrada, el numero de coeficientes y ecuaciones a llenar
es el mismo
Algo mas a mencionar es que los coeficientes siempre serán n+1, dado que las
ecuaciones cuentas con un coeficiente ya que este ultimo será el termino de lado
derecho de la ecuación, es decir los números que van después del “=”
Para finalizar el programa se debe de mostrar así y nos mostrara la matriz que
introdujimos, se resuelve con algoritmo implementado en el script e imprime la
matriz escalonada, junto con sus respectivos valores
Ejemplo 2. Matriz que no tiene solución.
Existen algunos tipos de sistemas de ecuaciones que no es posible resolverlos por
medio de este método, sea de ejemplo el siguiente caso
Tomando una matriz de 2x2 y una vez llenado los coeficientes necesarios,
podemos observar el siguiente resultado.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void Gauss_Jordan(float M[15][15],int finDelCiclo);
int main(){
char tam; //variable para que el usuario coloque el tamano de la matriz
int conv=0; //variable que almacena la conversion en entero de la variable tam
int a=0; //variable que nos da acceso a lo que va despues de introducir el tamano de la matriz
int finDelCiclo=0; //indica el final del ciclo de iteraciones cuando se llene la matriz
int i=0;
int j=0;
float M[15][15];//Variables para la matriz
do{
system("cls");
printf("///////////////////////////////////////////////////");
printf("\n//\t\t METODO GAUSS-JORDAN \t\t//");
printf("\n//\t\t Proyecto 1 \t\t//");
printf("\n//\t\t\t\t\t\t//\n//\t\t\t\t\t\t//\n//\t\t\t\t\t\t//");
printf("\n///////////////////////////////////////////////////");
printf("\n\nIntroduce el tama%co de la matriz |nxn|\n", 164);
scanf("%c", &tam);
fflush(stdin);
conv=int(tam);
if(isdigit(tam) && conv!=48){
a++;
finDelCiclo=conv-48;
}else{
system("cls");
printf("Ingresa solamente numeros de 1 a 9. NO caracteres o letras.\n\n");
system("pause");
fflush(stdin);
}
}while(a!=1);
//Estos son mensajes antes de comenzar con el metodo
printf("\n\n\t\t\tMatriz de tama%co: %c\n\n", 164, tam);
fflush(stdin);
printf("\n\nPrimero debemos llenar cada uno de los elementos de la matriz.\n");
printf("NOTA: Se aceptan numeros decimales.\n\n\n");
//Aqui empezamos el llenado de la matriz
for(i=0; i<finDelCiclo; i++){
printf("\tEcuaci%cn %d:\n", 162, i+1);
for(j=0; j<finDelCiclo+1; j++){
if(j==finDelCiclo){
printf("\t\tLado derecho de la ecuaci%cn %d: ", 162, i+1);
scanf("%f", &M[i][j]);
fflush(stdin);
}else{
printf("\t\tPosici%cn [%d][%d]: ", 162, i+1, j+1);
scanf("%f", &M[i][j]);
fflush(stdin);
}
}
printf("\n\nLa matriz introducida es: \n");//Impresion de la matriz aumentada
for(int i=0; i<finDelCiclo; i++){
for(int j=0; j<finDelCiclo+1; j++){
printf("\t%.2f", M[i][j]);
}
printf("\n");
}
printf("\nMatriz Inversa: \n");
Gauss_Jordan(M,finDelCiclo);
for(int i=0; i<finDelCiclo; i++){
for(int j=0; j<finDelCiclo+1; j++){
printf("\t%.2f", M[i][j]);
}
printf("\n");
}
//impresion de resultados
printf("\nResultados\n\n");
for(i=0; i<finDelCiclo; i++){
printf("X%d = %.2f\t", i+1, M[i][finDelCiclo]);
}
return 0;
void Gauss_Jordan(float M[15][15],int finDelCiclo){
double mayor; //variable para almacenar el mayor de la columna k
int indice; // indice del mayor
double aux;
double pivote;
for(int k=0;k<finDelCiclo;k++){//recorrer columnas de la matriz reducida
mayor=abs(M[k][k]);
indice=k;
//recorrer filas de la columna k en busca del indice del mayor
for(int l=k+1;l<finDelCiclo;l++){
if(mayor<abs(M[l][k])){
mayor=abs(M[l][k]);
indice=l;
}
}
//para cambiar filas si asi lo require
if(k!=indice){
for(int i=0;i<finDelCiclo+1;i++){
aux=M[k][i];
M[k][i]=M[indice][i];
M[indice][i]=aux;
}
}
if(M[k][k]==0){
printf("No tiene solucion\n");
break;
}
else{
for(int i=0;i<finDelCiclo;i++){
//recorrer la fila
if(i!=k){
pivote=-M[i][k];
for(int j=k;j<finDelCiclo+1;j++){//recorrer elementos de una fila
M[i][j]=M[i][j]+pivote*M[k][j]/M[k][k];
else{
pivote=M[k][k];
for(int j=k;j<finDelCiclo+1;j++){
M[i][j]=M[i][j]/pivote;