Rozwinięcie Laplace'a
Obliczanie wyznacznika dowolnego stopnia
Wyznaczniki możemy obliczać dla macierzy kwadratowych dowolnego wymiaru.
Mamy daną macierz:
Wyznacznik macierzy, obliczamy za pomocą wzoru rekurencyjnego
i
– jest ustalone, (numer wiersza względem którego rozwijamy wyznacznik)
A
ij– to dopełnienie algebraiczne elementu ( czyli wyznacznik powstały przez
Przykład
Minory będziemy określać względem wiersza nr 2
musimy wyznaczyć dopełnienia algebraiczne dla elementów:
a
21= 0;
a
22= 3;
a
23= 0;
Końcowy wynik:
double DetLaplace(double *A[], int m) {
if(m<1) throw "to nie jest macierz"; if(m==1) return A[0][0];
if(m==2) return A[0][0]*A[1][1]-A[0][1]*A[1][0]; int h,i,j;
double det=0.0;
//tablica na minory;
double*** AP = new double** [m]; for(j=0; j<m; j++) {
AP[j] = new double* [m-1]; for(h=0; h<m-1; h++) {
AP[j][h] = new double [m-1]; }
}
//Wybieramy minory wg 1-szej kolumny macierzy A;
for(i=0; i<m; i++) { int kk=0;
for(int k=0; k<m; k++) {
// omijamy wiersz wg ktorego wybieramy minor;
if(k!=i) { for(int l=1; l<m; l++) { AP[i][kk][l-1] = A[k][l]; } kk++; kod źródłowy w pliku *ppt
cd – z poprzedniego slajdu
det = det + pow(-1,i+1+1)*A[i][0]*DetLaplace(AP[i], m-1);
//destrukcja tablic na minory;
for(int ii=0; ii<m-1; ii++) { delete [] AP[i][ii]; } delete AP[i]; } return det; } kod źródłowy w pliku *ppt