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í.

In [5]:
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.

In [ ]:
 

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.

In [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 lze provést pomocí podseznamů, zde např.: L[1:,1:].

In [ ]:
 

Řešení

Pokud si nevíte rady, můžete zde kliknout a ukáže se vám řešení (nebo alespoň jeho podstatná část):

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() )
det(L[1:,1:])