Necesito codigo INVERSA de una matriz por metodo GAUSS JORDAN! porfa!
Porfa necesito que alguien me ayude con el codigo de la inversa de una matriz...me pidieron un programa de todas las operaciones con matrices y solo me falta la de la inversa porfa ayudenme!!! se los agradeceria muchisisismo!
// program Gauss.
// metodo de Gauss Jordan para la inversion de una matriz cuadrada.
// written in Borland CPP ver 4.5
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <math.h>
#define N 3
void Show(float a[][N],float b[][N])
{
for(int i = 0;i < N;i++)
{
for(int j = 0; j < N; j++)
cout << setw(8) << a[i][j];
cout << " |";
for(j = 0; j < N; j++)
cout << setw(8) << b[i][j];
cout << endl;
}
cout << endl;
} // SHOW
void Show(float a[][N])
{
for(int i = 0;i < N;i++)
{
for(int j = 0; j < N; j++)
cout << setw(8) << a[i][j];
cout << endl;
}
cout << endl;
} // SHOW
void ErrorExit(float a[N][N])
{
Show(a);
cout << "singular system - program halts ! ! !" << endl << endl;
exit(0);
} // ERROR EXIT
void Process(float a[][N],float b[][N])
{
for(int i = 0; i < N; i++)
{
if(!a[i][i])
ErrorExit(a);
float holder = a[i][i];
for(int x = 0;x < N;x++)
{
a[i][x] /= holder;
b[i][x] /= holder;
}
for(int k = 0; k < N; k++)
{
if(k == i)
continue;
holder = a[k][i];
for(int j = 0; j < N; j++)
{
a[k][j] -= a[i][j]*holder;
b[k][j] -= b[i][j]*holder;
}
Show(a,b);
}
}
} // PROCESS
void Verification(float a[N][N],float b[][N])
{
cout << "verification : " << endl << endl;
cout << "la matriz original a : " << endl << endl;
Show(a);
cout << "la matriz inversa b : " << endl << endl;
Show(b);
float c[N][N];
for(int i = 0;i < N;i++)
for(int j = 0;j < N;j++)
{
c[i][j] = 0;
for(int k = 0;k < N;k++)
c[i][j] += a[k][j]*b[i][k];
}
cout << "c = a x b es igual a la matriz unitaria " << endl << endl;
Show(c);
} // VERIFICATION
void main()
{
float a[N][N] = {{1,2,3},{1,4,9},{1,8,27}},
b[N][N] = {{1,0,0},{0,1,0},{0,0,1}},
x[N][N] = {{1,2,3},{1,4,9},{1,8,27}};
cout << setprecision(2) << setiosflags(ios::showpoint)
<< setiosflags(ios::fixed);
Show(a,b);
Process(a,b);
Verification(x,b);
cout << "end of program - good bye ! ! !n";
} // MAIN
// metodo de Gauss Jordan para la inversion de una matriz cuadrada.
// written in Borland CPP ver 4.5
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <math.h>
#define N 3
void Show(float a[][N],float b[][N])
{
for(int i = 0;i < N;i++)
{
for(int j = 0; j < N; j++)
cout << setw(8) << a[i][j];
cout << " |";
for(j = 0; j < N; j++)
cout << setw(8) << b[i][j];
cout << endl;
}
cout << endl;
} // SHOW
void Show(float a[][N])
{
for(int i = 0;i < N;i++)
{
for(int j = 0; j < N; j++)
cout << setw(8) << a[i][j];
cout << endl;
}
cout << endl;
} // SHOW
void ErrorExit(float a[N][N])
{
Show(a);
cout << "singular system - program halts ! ! !" << endl << endl;
exit(0);
} // ERROR EXIT
void Process(float a[][N],float b[][N])
{
for(int i = 0; i < N; i++)
{
if(!a[i][i])
ErrorExit(a);
float holder = a[i][i];
for(int x = 0;x < N;x++)
{
a[i][x] /= holder;
b[i][x] /= holder;
}
for(int k = 0; k < N; k++)
{
if(k == i)
continue;
holder = a[k][i];
for(int j = 0; j < N; j++)
{
a[k][j] -= a[i][j]*holder;
b[k][j] -= b[i][j]*holder;
}
Show(a,b);
}
}
} // PROCESS
void Verification(float a[N][N],float b[][N])
{
cout << "verification : " << endl << endl;
cout << "la matriz original a : " << endl << endl;
Show(a);
cout << "la matriz inversa b : " << endl << endl;
Show(b);
float c[N][N];
for(int i = 0;i < N;i++)
for(int j = 0;j < N;j++)
{
c[i][j] = 0;
for(int k = 0;k < N;k++)
c[i][j] += a[k][j]*b[i][k];
}
cout << "c = a x b es igual a la matriz unitaria " << endl << endl;
Show(c);
} // VERIFICATION
void main()
{
float a[N][N] = {{1,2,3},{1,4,9},{1,8,27}},
b[N][N] = {{1,0,0},{0,1,0},{0,0,1}},
x[N][N] = {{1,2,3},{1,4,9},{1,8,27}};
cout << setprecision(2) << setiosflags(ios::showpoint)
<< setiosflags(ios::fixed);
Show(a,b);
Process(a,b);
Verification(x,b);
cout << "end of program - good bye ! ! !n";
} // MAIN
