Está en la página 1de 3

public class EliminacionG {

private float matriz[][];

public EliminacionG(float[][] matriz) {


this.matriz = matriz;

}
//metodo para hacer que los elementos de la diagonal sean unos

public float[] pivoteUno(float[][] matrix,int indice){


for(int i=0;i<this.matriz.length+1;i++){
matrix[indice][i] = matrix[indice][i]/matrix[indice][indice];
}
return matrix[indice];

}
//función para evitar que matriz[i][i] sea cero, es decir que el pivote no sea cero
public float[] evitarCeros(float[][] matrix,int indice){
int n = matrix.length;
boolean l = false;
while(l==false){
int rand = new Random().nextInt(n);
if(rand!=indice){
for(int i=0;i<this.matriz.length+1;i++){
matrix[indice][i]+=matrix[rand][i];
}
if(matrix[indice][indice]!=0)
l = true;

return matrix[indice];
}
//this.matriz[0].length

public void eliminacionGaussiana(){

int n = this.matriz.length;
int k=1,i=0;
while(k<n){
if(this.matriz[i][i]==0){
this.matriz[i]=evitarCeros(this.matriz, i);
}else if(this.matriz[i][i]!=1){
this.matriz[i] = pivoteUno(this.matriz, i);
}
//que los elementos debajo del pivote sean ceros
for(int j=k;j<n;j++){
for(int g=0;g<this.matriz.length+1;g++){
this.matriz[j][g] -= matriz[j][i]*matriz[i][g];
}
}
k+=1;
i+=1;

}
//mismo proceso pero que los elementos arriba del pivote se hagan ceros
k=n-2;
i=n-1;
while(i>=0){
for(int j=k;j>-1;j--){
for(int g=0;g<this.matriz.length+1;g++){
this.matriz[j][g] = this.matriz[j][g] - matriz[j][i]*matriz[i][g];
}
}
k-=1;
i-=1;
}

String re = "";
for( i=0;i<n;i++){
for(int j=0;j<this.matriz.length+1;j++){
re+=" "+this.matriz[i][j];
}

re+= "\n";
}

System.out.println(re);

public class Gauss {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
float[][] m = {{4,2,1,5,6},{1,2,3,3,7},{5,0,1,7,4},{5,4,2,1,7}};

EliminacionG gauss = new EliminacionG(m);


gauss.eliminacionGaussiana();
}

También podría gustarte