jueves, 8 de noviembre de 2007

ELIMINACION GAUSSIANA TEST

#include
#include
#include
#include

float A[4][5]=
{{1,-1, 2,-1, -8},
{2,-2, 3,-3,-20},
{1, 1, 1, 0, -2},
{1,-1, 4, 3, 4}};

/*

float A[4][5]=
{{1, 1, 1, 1, 6 },
{2, 2, 1, 3,12},
{1, 1, 2, 1, 8},
{1, 1, 4, 3, 4}};
*/

float x[4];

float cte,m;
int n=4;
int i,j,k,p;

void imprimeMatriz();
void intercambiarEcuaciones(int ori, int des);
void reducirEcuacion(float m,int j,int i);
int entero_mas_peq(int i);

int main(){

printf("\n Matriz ampliada \n");
imprimeMatriz();

for(i=0;i
p = entero_mas_peq(i);

if(p!=i){
intercambiarEcuaciones(p,i);
imprimeMatriz();
}


for(j=i+1;j //if(A[j][i]!=0){
m = A[j][i]/A[i][i];
reducirEcuacion(m,j,i);
imprimeMatriz();
//}
}



}// for para i

if(A[n-1][n-1]==0){
printf("No existe solucion unica ");
getch();
exit(0);
}

x[n-1]=A[n-1][n]/A[n-1][n-1];
printf("x%d = %5.2f / %5.2f = %5.2f\n\n",n-1,A[n-1][n],A[n-1][n-1],x[n-1]);

for(i=n-2;i>=0;i--){
cte=0;
printf("x%d = (%5.2f",i,A[i][n]);
for(j=i+1;j cte +=A[i][j]*x[j];
printf(" -(%.2f) * x%d",A[i][j],j);
}
x[i]=(A[i][n]-cte)/A[i][i];
printf(" )/%5.2f = %5.2f\n\n",A[i][i],x[i]);
}

for(i=0;i printf("x%d=%5.2f\n",i,x[i]);
}
getch();

return 0;
}


int entero_mas_peq(int i){
int cont;
int p;
p = i;

for(cont=0;cont < n;cont++){
if(!( i <= p && p < n && A[p][i] != 0)){
p++;
if(p==n){
printf("No existe solucion unica ");
getch();
exit(0);
}
}
}

return p;
}

/************************************************************************
*
*
*
*************************************************************************/

void intercambiarEcuaciones(int ori, int des){
int cont,tmp;

for(cont=0 ; cont <= n ; cont++){
tmp = A[des][cont];
A[des][cont] = A[ori][cont];
A[ori][cont] = tmp;
}

printf("(E%d) <-> (E%d) \n",ori,des);
}

void reducirEcuacion(float m,int j,int i){
int cont;

for(cont=0;cont <= n ;cont++){
A[j][cont] = A[j][cont]-m*A[i][cont];
}

printf("(E%d - %4.2f * E%d) <-> (E%d) \n",j,m,i,j);
}

void imprimeMatriz(){

int r,c;

printf("\n");
for(r=0;r < n;r++){
printf("\t E%d : ",r);
for(c=0 ;c <=n ; c++){
printf("%10.2f",A[r][c]);
}
printf("\n");
}

printf("\n");
}

No hay comentarios: