Soustavy lineárních rovnic
Soustavy lineárních rovnic s nejvýše jedním řešením
Vyřešte následující soustavy lineárních rovnic a proveďte zkoušku:
a) $\qquad \begin{alignat*}{7}%{rcrcrcr} 3 x_1 &{}+{}& 2x_2 &{}+{}& x_3 &{}={}& 5 \\ 2 x_1 &{}+{}& 3x_2 &{}+{}& x_3 &{}={}& 1 \\ 2 x_1 &{}+{}& x_2 &{}+{}& 3x_3 &{}={}& 11 \\ 5 x_1 &{}+{}& 5x_2 &{}+{}& 2x_3 &{}={}& 6 \end{alignat*}$
b) $\qquad \begin{alignat*}{9}%{rcrcrcrcr} 10 x_1 &{}+{}& 23x_2 &{}+{}& 17x_3 &{}+{}& 44x_4 &{}={}& 25 \\ 15 x_1 &{}+{}& 35x_2 &{}+{}& 26x_3 &{}+{}& 69x_4 &{}={}& 40 \\ 25 x_1 &{}+{}& 57x_2 &{}+{}& 42x_3 &{}+{}& 108x_4 &{}={}& 65 \\ 30 x_1 &{}+{}& 69x_2 &{}+{}& 51x_3 &{}+{}& 133x_4 &{}={}& 95 \end{alignat*}$
c) $\qquad \begin{alignat*}{9}%{rcrcrcrcr} 36 x_1 &{}-{}& 23x_2 &{}+{}& 29x_3 &{}-{}& 43x_4 &{}={}& 3 \\ 45 x_1 &{}-{}& 28x_2 &{}+{}& 34x_3 &{}-{}& 52x_4 &{}={}& 9 \\ 35 x_1 &{}-{}& 21x_2 &{}+{}& 28x_3 &{}-{}& 45x_4 &{}={}& 16 \\ 46 x_1 &{}-{}& 32x_2 &{}+{}& 36x_3 &{}-{}& 48x_4 &{}={}& -18 \end{alignat*} $
Nápověda:
Pro rozšíření matice o vektor $\boldsymbol b$ použijte metodu .augment(b).
Odstupňovaný tvar vrací metoda .echelon_form().
Jedno z možných řešení soustavy $\boldsymbol{Ax}=\boldsymbol b$ dává metoda A.solve_right(b) (pokud takové existuje).
Součin matice a vektoru $\boldsymbol{Ax}$ lze zapsat A * x.
Ověření rovnosti $L=P$ lze provést např. vyhodnocením podmínky L == P.
A = matrix([
    [ 3, 2, 1 ],
    [ 2, 3, 1 ],
    [ 2, 1, 3 ],
    [ 5, 5, 2 ]])
b = vector([ 5, 1, 11, 6 ])
matrix([
    [ 10, 23, 17,  44 ],
    [ 15, 35, 26,  69 ],
    [ 25, 57, 42, 108 ],
    [ 30, 69, 51, 133 ]])
vector([ 25, 40, 65, 95 ]);
# poslední soustavu přepište sami
Součet dvou řešení
Najděte alespoň jedno řešení soustavy $\boldsymbol{Ax}=\boldsymbol b$ a alespoň jedno netriviální řešení $\boldsymbol y$ soustavy $\boldsymbol{Ax}=\mathbf 0$ a ověřte, že $\boldsymbol x+\boldsymbol y$ je řešením soustavy $\boldsymbol{Ax}=\boldsymbol b$.
Nápověda:
Pro odvození obou řešení stačí určit odstupňovaný tvar. Další nástroje jsou uvedeny u řešení následující úlohy, viz též vysvětlení oboru QQ (racionální čísla).
A = matrix(QQ, [
    [2,  3, -1, -4], 
    [1, -1,  7,  0], 
    [2, -4, 20,  2], 
    [1,  0,  4, -1]])
b = vector(QQ, [-9, 5, 18, 1])
Soustavy lineárních rovnic s libovolně mnoha řešeními¶
Vyřešte následující soustavy lineárních rovnic a proveďte zkoušku:
a) $\qquad \begin{alignat*}{7}%{rcrcrcr} 2 x_1 &{}-{}& 3x_2 &{}+{}& 2x_3 &{}={}& 1 \\ x_1 &{}-{}& 2x_2 &{}+{}& x_3 &{}={}& 0 \\ 5 x_1 &{}-{}& 9x_2 &{}+{}& 5x_3 &{}={}& 1 \\ \end{alignat*}$
b) $\qquad \begin{alignat*}{9}%{rcrcrcrcr} & & x_2 & & &{}+{}& x_4 &{}={}& 1 \\ 3 x_1 &{}-{}& 2x_2 &{}-{}& 3x_3 &{}+{}& 4x_4 &{}={}& -2 \\ x_1 &{}+{}& x_2 &{}-{}& x_3 &{}+{}& x_4 &{}={}& 2 \\ x_1 & & &{}-{}& x_3 & & &{}={}& 1 \end{alignat*}$
c) $\qquad \begin{alignat*}{9}%{rcrcrcrcr} {} - x_1 &{}+{}& x_2 &{}-{}& 3x_3 &{}+{}& 4x_4 &{}={}& 1 \\ 2x_1 &{}-{}& x_2 &{}+{}& 4x_3 &{}-{}& 7x_4 &{}={}& 0 \\ {} - x_1 &{}-{}& x_2 &{}+{}& x_3 &{}+{}& 2x_4 &{}={}& -3 \\ {} - x_1 &{}+{}& 2x_2 &{}-{}& 5x_3 &{}+{}& 5x_4 &{}={}& 3 \\ \end{alignat*}$
Nápověda:
Množinu řešení soustavy $\boldsymbol{Ax}=\mathbf 0$ lze spočítat metodou A.right_kernel().
Tato množina je ovšem principálně nekonečná a tvoří tzv. vektorový prostor nebo modul, to v závislosti na tom, v jakém oboru je výpočet proveden.
Ve specifikaci matice a vektoru proto používáme QQ, aby byl výpočet proveden v racionálních číslech a výsledkem byl vektorový prostor.
Abychom získali řešení odpovídající bázickým proměnným, použijeme metodu right_kernel( basis='pivot' ).basis() nebo right_kernel_matrix( basis='pivot' )
A = matrix(QQ,[
    [ 2, -3, 2 ],
    [ 1, -2, 1 ],
    [ 5, -9, 5 ]])
b = vector(QQ,[ 1, 0, 1 ])
matrix(QQ,[
    [ 0,  1,  0, 1 ],
    [ 3, -2, -3, 4 ],
    [ 1,  1, -1, 1 ],
    [ 1,  0, -1, 0 ]])
vector(QQ,[ 1, -2, 2, 1 ]);
# poslední soustavu přepište sami
Soustavy se stejnou maticí
Řešte soustavy rovnic $\boldsymbol A\boldsymbol x=\mathbf 0$, $\boldsymbol A\boldsymbol x=\boldsymbol b$, $\boldsymbol A\boldsymbol x=\boldsymbol c$ a $\boldsymbol A\boldsymbol x=\boldsymbol d$ pro:
$ \boldsymbol A= \begin{pmatrix} 6 & 3 & 2 & 3 & 4 \\ 4 & 2 & 1 & 2 & 3 \\ 4 & 2 & 3 & 2 & 1 \\ 2 & 1 & 7 & 3 & 2 \\ \end{pmatrix},\ \boldsymbol b= \begin{pmatrix} 5 \\ 4 \\ 0 \\ 1 \\ \end{pmatrix},\ \boldsymbol c= \begin{pmatrix} 1 \\ 1 \\ 1 \\ 1 \\ \end{pmatrix},\ \boldsymbol d= \begin{pmatrix} 3 \\ 2 \\ 2 \\ 3 \\ \end{pmatrix} $
Jak spolu souvisí geometrické interpretace těchto soustav?
Nápověda:
Nulový vektor délky $m$ dává funkce zero_vector(m).
A = matrix([
    [ 6, 3, 2, 3, 4 ],
    [ 4, 2, 1, 2, 3 ],
    [ 4, 2, 3, 2, 1 ],
    [ 2, 1, 7, 3, 2 ]])
b = vector([ 5, 4, 0, 1 ])
c = vector([ 1, 1, 1, 1 ])
d = vector([ 3, 2, 2, 3 ])
Řešení
Pokud si nevíte rady, můžete zde kliknout a ukáže se vám řešení (nebo alespoň jeho podstatná část):
Soustavy lineárních rovnic s nejvýše jedním řešením
Počet volných a bázických proměnných lze získat převodem do odstupňovaného tvaru:
A.echelon_form()
 Ověřit, že pravá strana neobsahuje v odstupňovaném tvaru pivot je možné pomocí:
A.augment(b).echelon_form()
 Vlastní řešení dává příkaz:
x = A.solve_right(b)
 Výpočet zkoušky lze provést příkazem:
A * x == bSoučet dvou řešení
Obě hledaná řešení lze vyčíst z redukovaného odstupňovaného tvaru.
A.augment(b).echelon_form()
 Řešení $\boldsymbol x=(2, -3, 0, 1)^{\mathrm T}$ je v posledním sloupci a řešení $\boldsymbol y=(4, -3, -1, 0)^{\mathrm T}$ odpovídá třetímu sloupci při dosazení $y_3=-1$.
Alternativně lze využít nástroje z následující úlohy:
x = A.solve_right(b)
y = A.right_kernel( basis='pivot' ).basis()[0]
print(x,y,x+y)
A * (x + y) == b    Soustavy lineárních rovnic s libovolně mnoha řešeními
Nejprve určíme jedno konkrétní řešení:
print(A.solve_right(b))
 Řešení homogenní soustavy, která odpovídají pivotům dává příkaz:
print(A.right_kernel( basis='pivot' ).basis())
 Obecné řešení získáme součtem konkrétního řešení a libovolné kombinace vektorů z řešení homogenní soustavy.
Při jedné volné proměnné lze řešení popsat i symbolicky, k tomu je třeba nejprve zavést proměnnou p pro parametr:
var('p')
x = A.solve_right( b ) + p * A.right_kernel( basis='pivot' ).basis()[0]
print(x)
A * x == b
 Podobně, je-li volných proměnných více.
Soustavy se stejnou maticí
Všechny čtyři soustavy vyřešíme najednou převedením matice $(\boldsymbol A|\mathbf 0\ \boldsymbol b\ \boldsymbol c\ \boldsymbol d)$ na odstupňovaný tvar.
Ve skutečnosti nulový sloupec není třeba přidávat, protože se při úpravách nemění.
A.augment(b).augment(c).augment(d).echelon_form()
Poté stačí výsledný odstupňovaný tvar správně vyhodnotit, případně řešení dopočítat zpětnou substitucí.