Subdeterminant
Subdeterminant je determinant submatice. Speciálním případem subdeterminantu je algebraický doplněk. Algebraické doplňky umožňují redukovat řád determinantu pomocí rozvoje podle řádku nebo sloupce a prostřednictvím adjungované matice umožňují nalezení inverzní matice.
SubmaticeEditovat
Submatice je matice, která vznikne z dané matice odstraněním vybraných řádků a sloupců. Matice tvořená zbylými řádky a sloupci se nazývá doplňková submatice.[1]
Subdeterminant (minor)Editovat
Je-li submatice čtvercová, má smysl její determinant. Tento determinant se nazývá subdeterminant nebo minor. Počet řádků submatice je řádem subdeterminantu.
Je-li čtvercová matice -tého řádu, potom subdeterminant -ního řádu, který je determinantem submatice vytvořené z matice odstraněním i-tého řádku a j-tého sloupce se nazývá subdeterminant (minor) příslušný k prvku matice .
Algebraický doplněkEditovat
Algebraickým doplňkem nebo také kofaktorem prvku čtvercové matice nazýváme číslo
Výpočet determinantu rozvojem podle řádků (sloupců)Editovat
Algebraický doplněk lze použít k výpočtu determinantu. Pro libovolný (pevně daný) řádkový index lze determinant matice vyjádřit pomocí součtu součinů všech prvků tohoto řádku a jejich algebraických doplňků, tj. jako
Rozvoj determinantu je možné zobecnit[2] i na rozvoj podle víceprvkové množiny vybraných řádků s využitím všech možných minorů sestavených z těchto řádků.
Rekurentní výpočet determinantuEditovat
V programování lze velmi dobře využít metodu rozvoje podle řádku nebo sloupce pro výpočet determinantů čtvercové matice libovolného rozměru za pomocí rekurze. Výhodou je jednoduchá implementace, nevýhodou výpočetní náročnost rychle rostoucí s řádem determinantu.
Příklad kódu v jazyce Java:
public int determinant(int[][] m) {
int n = m.length;
if(n == 1) {
return m[0][0];
} else {
int det = 0;
for(int j = 0; j < n; j++) {
det += Math.pow(-1, j) * m[0][j] * determinant(minor(m, 0, j));
}
return det;
}
}
public int[][] minor(final int[][] m, final int i, final int j) {
int n = m.length;
int[][] minor = new int[n - 1][n - 1];
int r = 0, s = 0;
for(int k = 0; k < n; k++) {
int[] row = m[k];
if(k != i) {
for(int l = 0; l < row.length; l++) {
if(l != j) {
minor[r][s++] = row[l];
}
}
r++;
s = 0;
}
}
return minor;
}
ReferenceEditovat
- ↑ HORÁK, Pavel; JANYŠKA, Josef. Lineární algebra [online]. Masarykova Univerzita [cit. 2022-06-04]. S. 33. Dostupné online.
- ↑ HORÁK, Pavel; JANYŠKA, Josef. Lineární algebra [online]. Masarykova Univerzita [cit. 2022-06-04]. S. 34. Dostupné online.