Estaba intentando implementar Matrix.class para aprender algo de Java. En este momento, tengo algunas dificultades con un método que debería devolver la matriz después de la eliminación gaussiana que se usará para encontrar la inversa de una matriz más adelante.
Esto es lo que se me ocurrió hasta el momento:Eliminación gaussiana en Java
public Matrix gaussianElimination() {
Matrix inv = this.clone();
int i = 0;
int j = 0;
while (i<inv.getHeight() && j<inv.getWidth()) {
int pivot = i;
for (int k=i+1; k<inv.getHeight(); k++) {
if (Math.abs(inv.getArray()[k][j]) > Math.abs(inv.getArray()[pivot][j])) {
pivot = k;
}
}
if (inv.getArray()[pivot][j] != 0) {
inv = inv.swapRow(i, pivot);
double div = inv.getArray()[i][j];
for (double value : inv.getArray()[i]) {
value = value/div;
}
for (int u=i+1; u < inv.getHeight(); u++) {
double mult = inv.getArray()[u][j];
for (int l=0; l<inv.getWidth(); l++) {
inv.getArray()[u][l] = mult * inv.getArray()[i][l];
}
}
}
j++;
i++;
}
return inv;
}
Mientras que la función getArray() devuelve el doble [] [] de la matriz, getHeight() y getWidth() inv.length retorno y inv [ 0] .length respetablemente.
Seguí el pseudocódigo de esta página wikipedia para implementar el algoritmo.
El método devuelve una matriz con la línea del primer elemento de pivote en la parte superior, pero no calcula correctamente las filas inferiores.
Por ejemplo:
A
0,2635522849474877 0,10001114673002853 0,442971040143471
0,2986277338922876 0,7517642579959294 0,09150190333830721
0,8913610667753092 0,8898546572478708 0,25592546060133237
Inv
0,8913610667753092 0,8898546572478708 0,25592546060133237
0,26618513545092265 0,26573527978742995 0,07642644034471581
0.062426597261833985 0.9565941264 0.017923775508624545
Estaría muy agradecido por cualquier ayuda ya que no puedo encontrar una solución. Probablemente haya mezclado un puntero en alguna parte o implementado el algoritmo incorrecto.
Hola, puedes publicar una fuente de tu clase 'Matrix'. –