Problem z wyznacznikiem macierzy

0

Witam,
jestem nowy, wiec prosze Od razu nie krzyczec, ze w zlym miejscu pisze post, abo ze juz to bylo wiele razy poruszane na forum.
Musze napisac funkcje, ktora oblicza wyznacznik macierzy kwadratowej dowolnego rozmiaru.
Oto co mam:

double det (double** matrix, int n)
{
	double** minor;
	double sum=0.0;
	double sign=1.0;
	int i, j, k;
	if(n==1)
	sum=matrix[0][0];
	if(n==2)
	sum=((matrix[0][0]*matrix[1][1])-(matrix[1][0]*matrix[0][1]));
	if(n>2)
	{
		minor=matrix_alloc(n-1);
		for(i=0;i<n;i++)
		{
			for(j=0;j<(n-1);j++)
			for(k=0;k<(n-1);k++)
			{
				if(k<i)
				minor[j][k]=matrix[j+1][k];
				else
				minor[j][k]=matrix[j+1][k+1];
			}
		sum+=sign*matrix[0][i]*det(minor,n-1);
		sign=(-sign);
		}
		matrix_free(minor);
	}
	return sum;
}

Ogolnie wszystko sie kompiluje, ale po uruchomianiu wywala mi SEGMENTATION FAULT. Blad najprawdopodoniej (jestem prawie pewien) tkwi w czescie, ktora kopiuje podmacierz do minora. Prosze o pomoc, gapie sie w to godzinami i nic wymyslec nie moge.
GDB wywala cos takiego:

0

użyj opcji szukaj, było miliony razy.
np: http://4programmers.net/Forum/605531?h=wyznacznik#id605531

0

Sek w tym, ze gosciu od laborek dal kod tej funkcji, ale jest w nim sporo luk. Moim zadaniem jest tak napisac caly program, zeby to dzialalo w polaczeniu z ta funkcja, wiec nie urzadza mnie to, ze znajde tutaj inny sposob na obliczanie tych wyznacznikow. Poza tym ucze sie programowania dopiero pol roku i nawet jak czytam inny kod, ktory to oblicza to ciezko mi jeszcze wykorzystac to do mojego problemu

0

Wzór na Rozwinięcie Laplace'a (z tego korzystasz) to:
det A = \sum_{i=1}<sup>n (-1)</sup>{i+j}A{ij}det {[A]<em>{ij}}
Gdzie [A]</em>{ij} oznacza macierz A bez i-tego wiersza i j-tej kolumny.
Więc twój kod wydaje się poprawny. Bardziej prawdopodobne jest to, że liczysz dla zbyt dużej macierzy i brakuje ci pamięci (to jest główna wada tego algorytmu)! Sprawdzaj czy alokacja pamięci jest poprawna i obsłuż ten błąd.

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