Determinanty
Ověření vztahů o součinu
Ověřte vztah o determinantu součinu $\det(\boldsymbol A\boldsymbol B)=\det \boldsymbol A \cdot \det \boldsymbol B$ a determinantu inverzní matice $\det(\boldsymbol A^{-1}) = (\det \boldsymbol A)^{-1}$ pro náhodné regulární čtvercové matice řádu 4.
Nápověda:
Pro výpočet hodnoty determinantu použijte funkci det(A)
nebo metodu A.determinant()
.
Součin matic je jednoduše A*B
, podobně i součet a rozdíl.
Inverzní matice je A^(-1)
nebo A.inverse()
.
Matici $\boldsymbol B$ můžete zadat ručně nebo použít metodu random_matrix(ZZ,4,4)
. Tato náhodná matice ovšem nemusí být regulární.
A = matrix([
[1, 2, 3, 4],
[5, 6, 7, 8],
[4, 3, 3, 1],
[0, 1, 2,-5]])
Generování matice
Sestrojte celočíselnou matici řádu 5 se všemi prvky kladnými a determinantem 7.
Cramerovo pravidlo
Pomocí Cramerova pravidla vyřešte následující soustavu $\boldsymbol A\boldsymbol x=\boldsymbol b$.
Nápověda:
Pro náhradu sloupce v matici si nejprve vytvořte její kopii A1 = copy(A)
.
Teprve pak proveďte dosazení vektoru $\boldsymbol b$ do příslušného sloupce A1[:,0] = b
.
Pozor, indexování v Sage (stejně jako v Pythonu) začíná od 0
, nikoli od 1
.
A = matrix(QQ, [
[3, 4, 1, 2, 1, 1, 4],
[1, 6, 0, 1, 1, 6, 3],
[0, 1, 5, 2, 6, 2, 1],
[0, 1, 5, 4, 0, 1, 3],
[0, 4, 5, 3, 2, 6, 3],
[4, 5, 3, 2, 3, 2, 2],
[2, 3, 5, 0, 1, 3, 0]]);
b = vector(QQ, [35, 92, 7, 18, 78, 36, 41]);
Počet koster
Pomocí determinantu Laplaceovy podmatice určete počet koster Petersenova grafu a grafů krychle, osmistěnu, dvanáctistěnu a dvacetistěnu.
Nápověda:
Graf lze převzít z databáze grafů G = graphs.PetersenGraph()
nebo graphs.DodecahedralGraph()
apod., podle tohoto seznamu.
Graf lze znázornit pomocí G.show()
.
Laplaceovu matici lze spočítat z matice sousednosti G.adjacency_matrix()
nebo použít přímo metodu laplacian_matrix()
.
Výběr podmatice dává metoda M.submatrix(row_from,col_from,nr_rows,nr_cols)
nebo lze použít metody pro mazání M.delete_rows([list_deleted])
a M.delete_columns([list_deleted])
.
Řešení
Pokud si nevíte rady, můžete zde kliknout a ukáže se vám řešení:
Ověření vztahů o součinu
Matici lze nastavit ručně nebo náhodně
B=random_matrix(ZZ,4,4)
.
Poté stačí porovnat hodnoty determinantů A*B
a B*A
.
Například:
B = matrix([
[1, 0, 3, 2],
[9, 3, 4, 6],
[0, 2, 3, 1],
[0, 7, 5,-3]]);
nebo
B = random_matrix(ZZ,4,4);
a poté
det(A*B);
det(B*A);
det(A);
det(A.inverse());
det(B);
det(B.inverse());
Generování matice
Takovou matici lze získat například úpravami horní trojúhelníkové matice s deteminanetem 7. Výpočet lze zjednodušit, pokud si uvědomíme, že úpravy lze interpretvat jako dolní trojúhelníkovou matici determinantu 1.
Například:
A = matrix([
[7, 1, 1, 1, 1],
[0, 1, 1, 1, 1],
[0, 0, 1, 1, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 1]]);
B = matrix([
[1, 0, 0, 0, 0],
[1, 1, 0, 0, 0],
[1, 1, 1, 0, 0],
[1, 1, 1, 1, 0],
[1, 1, 1, 1, 1]]);
B*A;
det(B*A);
Protože prvky nad, resp. pod diagonálou jsou kladná celá čísla, budou ve výsledném součinu všechny prvky také kladná celá čísla.
Cramerovo pravidlo
Například s použitím cyklu:
x = zero_vector(QQ, 7);
det_A = det(A);
for i in range(7) :
A_copy = copy(A);
A_copy[:,i] = b;
x[i] = det(A_copy) / det_A;
print(x);
Výsledek lze srovnat s řešením A.solve_right(b)
nebo provést zkoušku výpočtem A*x
.
Počet koster
Výběrem $G$ lze provést výpočty pro různé grafy:
G = graphs.PetersenGraph();
graphs.TetrahedralGraph();
graphs.HexahedralGraph();
graphs.OctahedralGraph();
graphs.IcosahedralGraph();
graphs.DodecahedralGraph();
G.show();
L = G.laplacian_matrix();
nebo s použitím jednotkové matice a matice sousednosti (pro ostatní grafy třeba upravit řád a stupeň)
L = ( 3 * identity_matrix(10) - G.adjacency_matrix() );
a poté
L1 = L.delete_rows([0]).delete_columns([0]);
print(L1);
det(L1)