1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Java-Programmierung: Matrizen berechnen

Dieses Thema im Forum "Café" wurde erstellt von ando-x88, 31.01.10.

  1. ando-x88

    ando-x88 Celler Dickstiel

    Dabei seit:
    29.03.07
    Beiträge:
    799
    Ich habe folgendes Problem:
    Ich soll für die Uni eine Java-Programm schreiben, dass die Determinante einer Matrix berechnet. Das ganze soll rekursiv sein.
    Ich habe jetzt ein Programm geschrieben, jedoch liefert es ein falsches Ergebnis. Könntet ihr euch das mal ansehen und mir sagen, wo der Fehler ist?

    Hier ist die Klasse Matrix

    Code:
    public class Matrix {
    
    	public int[][] mat;
    	int determinante = 1; 
    	int i; 
    	private int[][] temp; 
    	
    	public Matrix(int[][]mat){ 
    		this.mat = mat; 
    	} 
    	
      
    	public int det() { 
    		
    		// Für Matrizen genau 1 * 1
    		if(mat.length == 1) { 
    			determinante = mat[0][0]; 
    			return determinante; 
    		} 
    		
    		
    		//Für Matrizen größer als 1 * 1
    			else {
    			for(int i = 0; i < mat[0].length; i++) { 
    				
    				
    				int temp[][] = new int[mat.length - 1][mat[0].length - 1]; 
            
            for(int j = 1; j < mat.length; j++) { 
              for(int k = 0; k < mat[0].length; k++) { 
    						
                if(k < i) { 
                  temp[j - 1][k] = mat[j][k]; 
                } 
                else if(k > i) { 
                  temp[j - 1][k - 1] = mat[j][k]; 
                } 
    					} 
            }
          // Ausrechnen der Determinante mit der Summenformel:  
    				determinante += mat[0][i] * Math.pow(-1, (double)i) * (new Matrix(temp).det());   
    			} 
    			
    			return determinante; 
    		} 
    		
    	} 
    } 
    
    Und hier die Klasse Test, die die Beispielmatrix enthält:

    Code:
    public class Test {
    	public static void main (String[] args) {
    		int[][]test = {
    			{1,2,3,0},
    			{5,5,7,8},
    			{1,3,2,1},
    			{8,7,6,5},
    		};
    		
    		Matrix mat = new Matrix(test);
    		mat.det();
    		int ergebnis = mat.det();
    		System.out.print(ergebnis);
    	}
    }
    Das Programm liefert zur Zeit "-297" als Ergebnis, richtig sollte aber "-169" sein :/
     
  2. Dark Defender

    Dabei seit:
    20.11.08
    Beiträge:
    55
    Den ganzen Morgen dran gesessen (hätte erst gar nicht mit anfangen sollen ;)) und jetzt erst das Problem entdeckt.

    Es sind lediglich 2 kleine Fehler:

    Zunächst solltest du Determinante mit 0 initialisieren. Du willst ja bei 0 anfangen zu zählen.

    Code:
    int determinante = 0;
    
    Und dann rufst du in der Testklasse die Determinantenberechnung 2 mal auf.
    Code:
    mat.det();
    int ergebnis = mat.det();
    
    Damit verdoppelt sich später ja dein Ergebnis, also einfach nur
    Code:
    int ergebnis = mat.det();
    
    und alles wird gut :)
     
    ando-x88 gefällt das.
  3. ando-x88

    ando-x88 Celler Dickstiel

    Dabei seit:
    29.03.07
    Beiträge:
    799
    Super, vielen Dank :D
     
  4. Hauwau

    Hauwau Cripps Pink

    Dabei seit:
    12.07.09
    Beiträge:
    155
    aber ich hoffe im Original sieht das Einrücken besser aus oô
     
  5. ando-x88

    ando-x88 Celler Dickstiel

    Dabei seit:
    29.03.07
    Beiträge:
    799
    Natürlich ;)
    Hab mich auch erschrocken, als ich das hier eingefügt hatte
     
  6. Hauwau

    Hauwau Cripps Pink

    Dabei seit:
    12.07.09
    Beiträge:
    155
    dann ist gut :)
     

Diese Seite empfehlen