ayuda con Gauss-Jordan
hola, necesito q si alguien tene el algoritmo y programa de Gauss-Jordan, me lo pueda facilitar,
Por su ayuda gracias!!!!!!!
Por su ayuda gracias!!!!!!!
Si te refieres a Gauss Jordan para la inversion de una matriz cuadrada, no hace mucho se lo envie a alguien en este foro.
Adjunto el programa :
// 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
Adjunto el programa :
// 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
