Wyznacznik macierzy - gdzie błąd?

0

Witam, otóż liczę wyznacznik macierzy nxn rozwinięciem Laplacea i w wyniku zawsze dostaję taką wartość jaką ma na początku przypisana zmienna "wynik". A jeśli robię algorytm ten na papierze wychodzi, co zrobić aby wynik był poprawny?
RowCount to liczba wierszy a ColCount liczba kolumna


public class macierz extends MATRIX {
	
	public macierz(int a, int b){
		super(a,b); //wywolanie konstruktora klasy bazowej
	}
	public macierz Add(float wartosc){
		macierz wynik= new macierz(RowCount,ColCount);
		for(int i=0;i<RowCount;i++)
			for(int j=0;j<ColCount;j++)wynik.VALS[i][j]=this.VALS[i][j]+wartosc;
		return wynik;
	}
    public float wyznacznik(macierz M){
    	float wynik=0;
    	if(M.RowCount==1)return VALS[0][0];
    	if(M.RowCount==2)return VALS[0][0]*VALS[1][1]-VALS[0][1]*VALS[1][0];
    	
    	
    	for(int i=0;i<M.RowCount;i++){
    		System.out.println("wynik ="+wynik);
    		if(i%2==0){
    		wynik+=M.VALS[0][i]*wyznacznik(dopelnienie(M,i));
    		System.out.println("wynik ="+wynik);
    		}
    		else wynik-=M.VALS[0][i]*wyznacznik(dopelnienie(M,i));
    	
    	}
    	return wynik;
    }
    public macierz dopelnienie(macierz M,int k_skreslona){
    	macierz dopelniona= new macierz(M.RowCount-1,M.ColCount-1);
    	
    	for(int i=1;i<M.RowCount;i++){
    		for(int j=0;j<M.ColCount-1;j++){
    			if(j==k_skreslona)dopelniona.VALS[i-1][j]=M.VALS[i][j+1];
    			else dopelniona.VALS[i-1][j]=M.VALS[i][j];
    		}
    	}
    	
    	dopelniona.Print();
    	return dopelniona;
    }

}
0

Nie chce mi się analizować twojego kodu ;-P masz tutaj mój ;-)

	
public static float det(float[][] matrix,int dimension){
        float buff[][];
        float whatReturn=0;
        //jeżeli pierwszego stopnia czyli skalar to zwróć jego wartość
        if(dimension==1){
                return matrix[0][0];
        }else{
                //macierz dopełnienia algebraicznego
                buff = new float[dimension-1][dimension-1];
                //rozwinięcie Laplace'a względem pierwszego wiersza
                for(int i=0;i<dimension;i++){
                        //przepisanie do buff rozwinięcia algebraicznego
                        for(int j=0;j<dimension-1;j++){
                                for(int k=0;k<dimension-1;k++){
                                        buff[j][k]=matrix[j+1][k<i?k:k+1];
                                }
                        }
                        //zgodnie z rozwinieciem Laplace'a trzeba zsumować wartosci poszczególnych komórek w wierszu
                        //pomnożone przez wyznaczniki ich rozwinięc algebraicznych oraz pomnożone przez (-1)^i+j
                        if(i%2==0){
                                whatReturn+=matrix[0][i]*det(buff,dimension-1);
                        }else{
                                whatReturn-=matrix[0][i]*det(buff,dimension-1);
                        }
                }
                return whatReturn;
        }
}
0

niestety ale i twoj kod mi nie działa :|, nie mam pojęcia czemu zawsze zwraca mi wartość początkową wyniku czyli 0, nawet gdy analogicznie co do instrukcji napisałem na podstawie tego:/

1 użytkowników online, w tym zalogowanych: 0, gości: 1