Computing">
Nothing Special   »   [go: up one dir, main page]

Gauss Jordan C++

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

Nombre: Jaritza Sepulveda Salgado

Código: 2220271

SOLUCIÓN SISTEMA DE ECUACIÓN- GAUSS JORDAN

#include <conio.h>

#include <math.h>

#include <iostream>

using namespace std;

double matriz[50][50];

double identidad[50][50];

double b[50];

double solucion[50];

int N;

void leerEcuaciones(void);

void agregarIdentidad(void);

void extraerInversa(void);

void obtenerValores(void);

void escribirSolucion(void);

void escalonar_matriz(void);

void permutar_filas(int fila1, int fila2);

void multip_fila(int fila,double factor);

void sumar_fila_multip(int fila1,int fila2, double factor);

void ceros_abajo(int fila_pivote, int columna_pivote);

void ceros_arriba(int fila_pivote, int columna_pivote);


int main()

leerEcuaciones();

agregarIdentidad();

extraerInversa();

obtenerValores();

escribirSolucion();

return 0;

void escribirSolucion(){

cout << "La solucion es: (";

for (int i = 0; i < N; i++) {

if(i == N-1){

cout<<solucion[i]<<")";

}else{

cout<<solucion[i]<<", ";

void obtenerValores()

for (int i = 0; i < N; i++) {

for (int j = 0; j < N; j++) {

solucion[i] += identidad[i][j] * b[j];

}
}

void leerEcuaciones()

int fi, co;

do{

cout<<"Ingrese el tamaño de la matriz cuadrada nxn: ";

cout.flush();

cin>>N;

if(N>50 || N<2) {

cout<<"El numero debe estar entre 2 y 50."<<endl;

system("pause");

cout.flush();

}while(N>50 || N<2);

for(fi=0;fi<N;fi++)

for(co=0;co<N;co++)

cout<<"Ingrese el valor de matriz [" <<(fi+1)<< "]" << "[" <<(co+1)<< "]:";

cout.flush();

cin>>matriz[fi][co];

cout<<"Ahora, ingrese los valores de b: "<<endl;

for(fi=0;fi<N;fi++)
{

cout<<"Ingrese el valor de matriz [" <<(fi+1)<< "]:";

cout.flush();

cin>>b[fi];

system("pause");

void agregarIdentidad()

int i,j;

for(i=0;i<50;i++)

for(j=0;j<50;j++)

if(i==j) identidad[i][j]=1;

else identidad[i][j]=0;

void extraerInversa()

int cont,cont2, flag=0;

escalonar_matriz();

for(cont=0;cont<N;cont++)

{
for(cont2=0;cont2<N;cont2++)

if(matriz[cont][cont2]!=0)

if(matriz[cont][cont2]!=1)

multip_fila(cont,pow(matriz[cont][cont2],-1));

ceros_arriba(cont,cont2);

ceros_abajo(cont,cont2);

break;

for(cont=0;cont<N;cont++)

for(cont2=0;cont2<N;cont2++)

if(cont==cont2)

if(matriz[cont][cont2]!=1) flag=1;

else

if(matriz[cont][cont2]!=0) flag=1;

}
}

if(flag==1)

cout<<" La matriz no tiene inversa.";

return;

else

cout<<"La Matriz Identidad es: "<<endl;

for (int i = 0; i < N; i++) {

for (int j = 0; j < N; j++) {

cout << matriz[i][j] << " ";

cout << endl;

cout<<"La Matriz Inversa es: "<<endl;

for (int i = 0; i < N; i++) {

for (int j = 0; j < N; j++) {

cout << identidad[i][j] << " ";

cout << endl;

}
system("pause");

void escalonar_matriz(void)

int cont, col, ceros, vec[10];

int flag, aux;

for(cont=0;cont<N;cont++)

col=0,ceros=0;

if(matriz[cont][col]==0)

do{

ceros++;

col++;

}while(matriz[cont][col]==0);

vec[cont]=ceros;

do

flag=0;

for(cont=0;cont<N-1;cont++)

{
if(vec[cont]>vec[cont+1])

aux=vec[cont];

vec[cont]=vec[cont+1];

vec[cont+1]=aux;

permutar_filas(cont,cont+1);

flag=1;

}while(flag==1);

void permutar_filas(int fila1,int fila2)

float aux;

int cont;

for(cont=0;cont<N;cont++)

aux=matriz[fila1][cont];

matriz[fila1][cont]=matriz[fila2][cont];

matriz[fila2][cont]=aux;
aux=identidad[fila1][cont];

identidad[fila1][cont]=identidad[fila2][cont];

identidad[fila2][cont]=aux;

void multip_fila(int fila,double factor)

int cont;

for(cont=0;cont<N;cont++)

matriz[fila][cont]=(matriz[fila][cont])*factor;

identidad[fila][cont]=(identidad[fila][cont])*factor;

void sumar_fila_multip(int fila1,int fila2, double factor)

int cont;

for(cont=0;cont<N;cont++)

matriz[fila1][cont]=(matriz[fila1][cont])+((matriz[fila2][cont])*factor);

identidad[fila1][cont]=(identidad[fila1][cont])+((identidad[fila2][cont])*factor);

}
}

void ceros_arriba(int fila_pivote, int columna_pivote)

int cont;

for(cont=0;cont<fila_pivote;cont++)

sumar_fila_multip(cont,fila_pivote,((matriz[cont][columna_pivote])*(-1)));

void ceros_abajo(int fila_pivote, int columna_pivote)

int cont;

for(cont=columna_pivote+1;cont<N;cont++)

sumar_fila_multip(cont,fila_pivote,((matriz[cont][columna_pivote])*(-1)));

}
AL COPILAR

También podría gustarte