# Determinante berechnen mit Laplace



## 1143 (2. Jan 2009)

Hallo,

bei der folgenden Aufgabe komme ich einfach nicht weiter, vllt. kann mir ja hier im Forum einer helfen ... Es geht darum die Determinante einer Matrix mit Hilfe des Entwicklungssatzes von Laplace zu berechnen.


a) Erstellen Sie eine Methode public float berechneDeterminante2x2(float a, float b, float c, float d), mit deren Hilfe die Determinante einer 2x2 Matrix berechnet werden kann.

b) Erstellen Sie eine Methode private float[][] extrahiereSubmatrix(float[][] matrix, int x), mit der aus dem zweidimensionalen Feld matrix diejenige Submatrix extrahiert werden kann, die für die Entwicklung der Determinanten nach der ersten Zeile notwendig ist. Der Wert x gibt dabei den Spaltenindex (beginnend bei 0) der aktuellen Entwicklung an.

c) Erstelllen Sie eine rekursive Methode public float berechneDeterminante(float[][] matrix), welche die Determinante einer beliebigen nxn Matrix berechnet. Nutzen Sie, wenn möglich, die zuvor erstellte Methode extrahiereSubmatrix.

Hier ist der Link zur kompletten Aufgabenstellung [Aufgabe 5].



Also, a) ist schon mal klar:


```
static public float berechneDeterminante2x2(float a, float b, float c, float d){
    return (a*d)-(b*c);
}
```


b) ging auch nach ein bisschen Überlegen:


```
static private float[][] extrahiereSubmatrix(float[][] matrix, int x){
    int length = matrix.length - 1;
    float[][] subMatrix = new float[length][length];
    for(int a = 0; a < length; a++){
       for(int b = 0; b < length; b++){
       if(x <= b){subMatrix[a][b] = matrix[a+1][b+1];} else {subMatrix[a][b] = matrix[a+1][b];}    
       } 
    }
    return subMatrix;
}
```

c) hier hab ich leider überhaupt keine Ahnung, hört sich zwar jetzt blöd an, ist aber leider so. 

Ich weiß, ihr macht nicht anderer Leute Hausaufgaben, will ich auch gar nicht. Ich bräuchte nur einen kleinen Tipp oder so ne Art Hinweis, der mir hilft auf die richtige Lösung zu kommen ...


----------



## 0x7F800000 (2. Jan 2009)

naja, bei c) reicht's schon bei der wikipedia die formel nachzuschlagen, weitere "tips" kann man da wohl kaum angeben, weil direkt danach nur noch das 1:1 abschreiben in code-form folgen kann, irgendwie so zum Beispiel:

```
public class LaplaceDet {
	public static double[][] extractSubmatrix(double[][] matrix, int row, int column){
		double[][] result=new double[matrix.length-1][matrix[0].length-1];
		for(int x=0; x<result.length; x++){
		for(int y=0; y<result.length; y++){
			result[x][y]=matrix[x<row?x:(x+1)][y<column?y:(y+1)];
		}
		}
		return result;
	}
	public static double det(double[][] matrix){
		//end of recursion
		if(matrix.length==1) return matrix[0][0];
		
		//continue recursion
		double det=0;
		for(int i=0, sign=1; i<matrix.length; i++, sign=-sign){
			if(matrix[0][i]!=0){
				det+=sign*matrix[0][i]*det(extractSubmatrix(matrix,0,i));
			}
		}
		
		return det;
	}
	
	public static void main(String... _){
		System.out.println(det(new double[][]{{1,2,3},{4,5,6},{7,8,19}}));
	}
}
```


----------

