Hodnost, regularita a inverze matice

Tomáš Kalvoda, KAM FIT ČVUT, 2019

Hodnost matice

Podle definice hodností matice ATm,n\mathbb{A} \in T^{m,n} nazýváme dimenzi lineárního obalu souboru řádků matice A\mathbb{A}. Značíme ji h(A)h(\mathbb{A}).

Poznámky: Podle věty o hodnosti matice a matice k ní transponované je pravda, že hodnost matice A\mathbb{A} je rovna i dimenzi lineárního obalu souboru sloupců matice A\mathbb{A}. Z definice a této poznámky tedy ihned plyne, že hodnost matice ATm,n\mathbb{A} \in T^{m,n} je přirozené číslo ležící mezi nulou a min{m,n}\min\{m,n\} (obě meze včetně).

Příklad 4.2 b)

Vypočtěte hodnost matice

A=(04101481871018401717173)\mathbb{A} = \begin{pmatrix} 0 & 4 & 10 & 1 \\ 4 & 8 & 18 & 7 \\ 10 & 18 & 40 & 17 \\ 1 & 7 & 17 & 3 \end{pmatrix}

# zavedení matice A
A = matrix(QQ, [
    [0,   4, 10,  1],
    [4,   8, 18,  7],
    [10, 18, 40, 17],
    [1,   7, 17,  3]
])
show(A)
(04101481871018401717173)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 0 & 4 & 10 & 1 \\ 4 & 8 & 18 & 7 \\ 10 & 18 & 40 & 17 \\ 1 & 7 & 17 & 3 \end{array}\right)

"Hodnost" odpovídá v anglické terminologii termínu "rank". K výpočtu hodnosti tak nepřekvapivě můžeme použít metodu rank objektu typu matice.

# Hodnost matice A
A.rank()
2

Pojďme si to ověřit z definice (dimenze obalu souboru řádků) a ekvivalentní formulace (dimenze obalu souboru sloupců). Nejprve tento výpočet provedeme "na koleni".

# Soubor řádků
rows = [vector(A[j, :]) for j in range(4)]
rows
[(0, 4, 10, 1), (4, 8, 18, 7), (10, 18, 40, 17), (1, 7, 17, 3)]
# lineárního obalu souboru řádků...
RowSpace = VectorSpace(QQ, 4).span(rows)
# ...a jeho dimenze
RowSpace.dimension()
2

V buňce výše jsme použili metodu dimension k určení dimenze příslušného lineárního obalu. Při ručním výpočtu bychom aplikovali Gaussovu eliminaci na matici mající řádky matice A ve sloupcích (tj. na transpozici matice A):

At = A.transpose()
show(At)
(04101481871018401717173)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 0 & 4 & 10 & 1 \\ 4 & 8 & 18 & 7 \\ 10 & 18 & 40 & 17 \\ 1 & 7 & 17 & 3 \end{array}\right)

Tím bychom získali matici v následujícím horním stupňovitém tvaru:

show(At.echelon_form())
(10125401521400000000)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 1 & 0 & -\frac{1}{2} & \frac{5}{4} \\ 0 & 1 & \frac{5}{2} & \frac{1}{4} \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array}\right)

Tj. poslední dva vektory v našem souboru jsme schopni vyjádřit jako lineární kombinaci prvních dvou. Dimenze příslušného lineárního obalu je tedy skutečně 2.

Poznámka: Lineární obal souboru řádků můžeme z matice A vytvořit přímo pomocí metody row_space.

A.row_space() == RowSpace
True

Podobně bychom mohli postupovat v případě sloupců. To proveďme už pouze rychle, výsledek by neměl být překvapivý.

A.column_space().dimension()
2

Gaussova eliminace převede matici A do následujícího horního stupňovitého tvaru.

show(A.echelon_form())
(10125401521400000000)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 1 & 0 & -\frac{1}{2} & \frac{5}{4} \\ 0 & 1 & \frac{5}{2} & \frac{1}{4} \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array}\right)

Lineární obal soubor jejích řádků má proto opravdu dimenzi 22.

Příklad 4.3 a)

V tomto příkladě máme matici s prvky z GF(5)GF(5) obsahující jeden parametr αGF(5)\alpha \in GF(5). Efektivně nám je tedy zadáno pět matici, jejichž hodnost máme zjistit. A=(012α2321α)\mathbb{A} = \begin{pmatrix} 0 & 1 & 2 \\ \alpha & 2 & 3 \\ 2 & 1 & \alpha \end{pmatrix}

Na tomto místě se uchýlíme alespoň k ilustraci toho jak bychom na otázku mohli odpovědět pomocí výpočetní síly, resp. k demonstraci co se po nás vlastně chce. Prostě ve všech (pěti) příkladech onu hodnost spočteme (toto se jistě nehodí do písemky, tam proveďte Gaussovu eliminaci s parametrem!).

# Funkce vracící naší matici v závislosti na argumentu `a`
getA = lambda a: matrix(GF(5), [[0, 1, 2], [a, 2, 3], [2, 1, a]])
# výpočet hodností v jednotlivých případech
for a in GF(5):
    print("alpha = %i" % a)
    print("  => hodnost: %i" % getA(a).rank())
alpha = 0
  => hodnost: 3
alpha = 1
  => hodnost: 3
alpha = 2
  => hodnost: 3
alpha = 3
  => hodnost: 2
alpha = 4
  => hodnost: 2

Můžeme učinit pozorování, že pokud je α{3,4}\alpha \in \{3,4\}, pak h(A)=2h(\mathbb{A}) = 2. Ve všech ostatních případech je hodnost této matice rovna 33.

Příklad 4.3 b)

V tomto příkladě máme určit také hodnost matice v závislosti na parametru. Tentokrát jsou ovšem prvky této matice (a i onen parametr) reálné. Nemůžeme tedy použít postup jako v předchozím příkladě.

V tomto případě se můžeme s maticí skutečně pokusit pracovat. Vytvoříme symbolickou proměnnou a matici se symbolickými prvky.

a = var('alpha')
A = matrix([
    [3, 1,  1, 4],
    [a, 4, 10, 1],
    [1, 7, 17, 3],
    [2, 2,  4, 1]
])
show(A)
(3114α4101171732241)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 3 & 1 & 1 & 4 \\ \alpha & 4 & 10 & 1 \\ 1 & 7 & 17 & 3 \\ 2 & 2 & 4 & 1 \end{array}\right)

Pokus o výpočet hodnosti jako kdyby fungoval bez problémů:

A.rank()
4

Toto ovšem bohužel není pravda. Podobným problémem trpí i další algebraické systémy (Mathematica, etc.). Sage v tomto případě s a (resp. α\alpha) pracuje jako se symbolem a nezajímá ho, jestli jednotlivé úpravy Gaussovy eliminace jsou korektní. To je krásně vidět z horního stupňovitého tvaru, který nám vrátí:

show(A.echelon_form())
(100(4(4α3)α121)(α30α121)6(2(α30)α125)4α33(α12)+43010000100001)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 1 & 0 & 0 & \frac{{\left(\frac{4 \, {\left(4 \, \alpha - 3\right)}}{\alpha - 12} - 1\right)} {\left(\frac{\alpha - 30}{\alpha - 12} - 1\right)}}{6 \, {\left(\frac{2 \, {\left(\alpha - 30\right)}}{\alpha - 12} - 5\right)}} - \frac{4 \, \alpha - 3}{3 \, {\left(\alpha - 12\right)}} + \frac{4}{3} \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right)

Na první pohled je zřejmé, že pro některé hodnoty parametru α\alpha je toto nepoužitelný výsledek. SageMath během výpočtu tyto problémy ignoruje (ani Mathematica na tom není lépe, toto je častý nedostatek počítačových algebraických systémů).

Tento problém bychom se mohli pokusit obejít implementací vlastní Gaussovy eliminace (to už umíme), která by si dávala pozor na to čím se dělí.

Regularita a inverze matice

Čtvercovou matici ATn,n\mathbb{A} \in T^{n,n} nazýváme regulární, právě když existuje matice BTn,n\mathbb{B} \in T^{n,n} splňující AB=BA=E,\mathbb{A} \mathbb{B} = \mathbb{B} \mathbb{A} = \mathbb{E}, zde E\mathbb{E} je jednotková matice. Takovouto matici B\mathbb{B} poté nazýváme maticí inverzní k matici A\mathbb{A} a značíme ji A1\mathbb{A}^{-1}.

Z přednášky se dozvíme, že matice ATn,n\mathbb{A} \in T^{n,n} je regulární, právě když její hodnost je nn. Tj. právě když při její úpravě na horní stupňovitý tvar pomocí ekvivalentních úprav Gaussovy eliminace nezískáme žádný vedlejší sloupec (matice má tzv. "plnou" hodnost). Toto pozorování není těžké prohlédnout, uvědomíme-li si, jak úloha na hledání inverze matice souvisí s řešením soustav rovnic.

Příklad 4.4 b)

Rozhodněte o regularitě matice

A = matrix(QQ,[
    [1, 2, 3],
    [4, 0, 1],
    [2, 3, 4]
])
show(A)
(123401234)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrr} 1 & 2 & 3 \\ 4 & 0 & 1 \\ 2 & 3 & 4 \end{array}\right)

Z definice výše je zřejmé, že stačí tuto matici převést do horního stupňovitého tvaru a počet hlavních sloupců v tomto horním stupňovitém tvaru pak udává hodnost (odpovídá dimenzi lineárního obalu souboru sloupců naší matice). Aby naše matice byla regulární, musí mít hodnost rovnou 33.

show(A.echelon_form())
(100010001)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrr} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right)

Její hodnost proto skutečně je rovna 33 a tato matice je regulární. To můžeme snadno ověřit i pomocí metody rank.

A.rank()
3

Nyní pojďme nalézt inverzní matici k matici A. K dispozici v SageMath samozřejmě máme k tomu určenou metodu inverse.

show(A.inverse())
(351525145251151251585)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrr} -\frac{3}{5} & \frac{1}{5} & \frac{2}{5} \\ -\frac{14}{5} & -\frac{2}{5} & \frac{11}{5} \\ \frac{12}{5} & \frac{1}{5} & -\frac{8}{5} \end{array}\right)

Případně lze použít i nepřekvapivou notaci pomocí mocniny:

show(A^(-1))
(351525145251151251585)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrr} -\frac{3}{5} & \frac{1}{5} & \frac{2}{5} \\ -\frac{14}{5} & -\frac{2}{5} & \frac{11}{5} \\ \frac{12}{5} & \frac{1}{5} & -\frac{8}{5} \end{array}\right)

Jak bychom k tomuto výsledku došli ručním výpočtem? Hledáme matici B\mathbb{B}, která splňuje maticovou rovnici AB=E\mathbb{A} \mathbb{B} = \mathbb{E}. Uvědomíme-li si jak funguje maticové násobení, tak vidíme, že jjtý sloupec matice B\mathbb{B} řeší soustavu s maticí A\mathbb{A} a pravou stranou eje_j (jjtý vektor standardní báze). Jinak řečeno, sloupce hledané matice B\mathbb{B} najdeme řešením několika soustav lineárních rovnic, to můžeme udělat pomocí jedné Gaussovy eliminace:

mat = matrix(QQ,[
    [1, 2, 3, 1, 0, 0],
    [4, 0, 1, 0, 1, 0],
    [2, 3, 4, 0, 0, 1]
])
show(mat)
(123100401010234001)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrrrr} 1 & 2 & 3 & 1 & 0 & 0 \\ 4 & 0 & 1 & 0 & 1 & 0 \\ 2 & 3 & 4 & 0 & 0 & 1 \end{array}\right)
show(mat.echelon_form())
(100351525010145251150011251585)\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrrrr} 1 & 0 & 0 & -\frac{3}{5} & \frac{1}{5} & \frac{2}{5} \\ 0 & 1 & 0 & -\frac{14}{5} & -\frac{2}{5} & \frac{11}{5} \\ 0 & 0 & 1 & \frac{12}{5} & \frac{1}{5} & -\frac{8}{5} \end{array}\right)

Protože levý 3×33\times 3 blok byl vyeliminován na jednotkovou matici, tak ve sloupcích v pravém 3×33\times 3 bloku jsou přesně řešení výše zmíněných soustav a tedy zde přesně máme matici B=A1\mathbb{B} = \mathbb{A}^{-1}.