Hallo ich versuche schon bestimmt 6-7 stunden ein programm zu schreiben, dass mir eine determinante von einer n*n matrix berechnet. 3*3 klappt schon gut auch 4*4 ging bereits. Allerding kriege ich N*N einfach nicht hin.
Mein Code bis jetzt:
Vllt denke ich viel zu kompliziert..
Kann mir jemand weiterhelfen??
Mein Code bis jetzt:
Java:
public class Mathetool {
public static void main(String[] args)
{
int n = 5;
double [][] matrix = new double[n][n];
matrix [0][0] = 2;
matrix [0][1] = 3;
matrix [0][2] = 3;
matrix [0][3] = -2;
matrix [0][4] = 3;
matrix [1][0] = 3;
matrix [1][1] = -2;
matrix [1][2] = 2;
matrix [1][3] = 4;
matrix [1][4] = 0;
matrix [2][0] = -2;
matrix [2][1] = 1;
matrix [2][2] = 3;
matrix [2][3] = 0;
matrix [2][4] = 10;
matrix [3][0] = 4;
matrix [3][1] = 2;
matrix [3][2] = 4;
matrix [3][3] = 5;
matrix [3][4] = 6;
matrix [4][0] = 1;
matrix [4][1] = 0;
matrix [4][2] = 7;
matrix [4][3] = 2;
matrix [4][4] = 3;
Mathetool matheTool = new Mathetool();
matheTool.determinanteAll(n, matrix);
}
public double determinanteAll(int n, double[][] matrix)
{
if (n == 3)
{
calculateDeterminante3x3(n, matrix);
}
else
{
calculateNxN(n, matrix);
}
return n;
}
public double calculateDeterminante3x3(int n, double[][] matrix)
{
double determinante = 0;
double zwischenErgebnisAddition = 0;
double zwischenErgebnisSubtrahtion = 0;
double matrixElement = 1;
double matrixElement2 = -1;
int j = 2;
int k = 0;
for (int p = 0; p < n; p++)
{
matrixElement = 1;
matrixElement2 = -1;
for (int i = 0; i < n; i++)
{
matrixElement = matrix[k][i] * matrixElement;
matrixElement2 = matrix[k][j] * matrixElement2;
j = j - 1;
if (j == -1)
{
j = n-1;
}
k = (k + 1)%n;
}
zwischenErgebnisAddition = zwischenErgebnisAddition + matrixElement;
zwischenErgebnisSubtrahtion = zwischenErgebnisSubtrahtion + matrixElement2;
determinante = zwischenErgebnisAddition + zwischenErgebnisSubtrahtion;
k = k + 1;
System.out.println(determinante);
}
return determinante;
}
public double calculateNxN(int n, double [][] matrix)
{
double[][] matrixHelp = new double [n-1][n-1];
double wholeDeterminante = 0;
double ergebnis = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
int l = 0;
for (int k = 1; k < n; k++)
{
matrixHelp[(j%(n-1))][l] = matrix[(j+i)%n][k];
l = l + 1;
}
}
// wholeDeterminante = calculateDeterminante3x3(3, matrixHelp) * matrix[i][0];
// if ((i%2)!=0)
// {
// wholeDeterminante = wholeDeterminante * -1;
// }
// System.out.println(matrixHelp[0][n-2]);
n--;
if (n == 3)
{
calculateDeterminante3x3(n, matrixHelp);
}
else if (n > 3)
{
calculateNxN(n, matrixHelp);
}
// ergebnis = wholeDeterminante + ergebnis;
// n = n - 1;
// calculateNxN(n, matrixHelp);
}
return ergebnis;
}
}
Kann mir jemand weiterhelfen??