Cvičení 2: Lineární rovnice

Tomáš Kalvoda, KAM FIT ČVUT, 2016, 2017

Jedna lineární rovnice o jedné neznámé

Jedním z ústředních témat Lineární algebry je řešení soustav lineárních rovnic s více neznámými. Jedná se o dalekosáhlé zobecnění jedné lineární rovnice o jedné neznámé, tedy rovnice ax=b,a \cdot x = b, kde a,ba,b jsou pevně zvolené parametry a xx je hledaná neznámá. Parametry i neznámá mohou být komplexní, reálné, nebo obecně prvky pevně tělesa zvoleného.

Konkrétní hodnotu xx, která splňuje výše uvedenou rovnici, nazýváme jejím řešením. Naším cílem typicky je určit množinu všech řešení této rovnice.

Ačkoliv jedna rovnice o jedné neznámé vypadá až směšně jednoduše, lze už na jejím příkladě pozorovat všechny kvalitativně různé případy, které se vyskytují i v obecném případě. Rozeberme si její řešení podrobně (pro jednoduchost nad C\mathbb{C}):

Poznámka: Slovo "lineární" pro nás nyní znamená, že proměnná v rovnici vystupuje v první mocnině pouze násobená konstantou. Přesně bude "linearita" definována později v semestru.

Výše uvedenou rovnici lze jednoduše geometricky interpretovat (alespoň v reálném oboru): úloha odpovídá hledání bodu (xx) kde přímka y=axy = ax protne přímku y=by=b. Tři kvalitativně rozdílné situace si graficky předvedeme níže.

# změna fontu v grafech
import matplotlib.pyplot as plt
plt.rc('font', family='DejaVu Sans')
var('x')
p1 = plot(x/2, (x, 0, 12),
          figsize=4, gridlines=true,
          color='green', thickness=2,
          legend_label='$y=ax$',
          title=u'Právě jedno řešení'
         )
p2 = plot(3, (x, 0, 12),
          color='blue', thickness=2,
          legend_label='$y=3$'
         )
p1 + p2 + point([6,0], color='red', size=40)
p1 = plot(0, (x, 0, 12),
          figsize=4, gridlines=true,
          color='green', thickness=2,
          legend_label='$y=ax$, pro $a=0$',
          ymin=-0.5, ymax=3.5,
          title=u'Žádné řešení'
         )
p2 = plot(3, (x, 0, 12),
          color='blue', thickness=2,
          legend_label='$y=3$'
         )
p1 + p2
p1 = plot(0, (x, 0, 12),
          figsize=4, gridlines=true,
          color='green', thickness=4, alpha=.5,
          legend_label='$y=ax$, pro $a=0$',
          ymin=-0.5, ymax=0.5,
          title=u'Nekonečně mnoho řešení'
         )
p2 = plot(0, (x, 0, 12),
          color='blue', thickness=2, alpha=1,
          legend_label='$y=0$'
         )
p1 + p2

Jedna rovnice o dvou neznámých

Rozšiřme předchozí úlohu přidáním jedné další neznámé. Máme tedy jednu lineární rovnici ax+by=cax + by = c o dvou neznámých x,yx,y. Parametry a,b,ca,b,c jsou zvoleny pevně. Rozeberme opět možné situace.

  1. Pokud je a0a \neq 0, potom pro libovolné yy stačí za xx zvolit x=(cby)/ax = (c-by)/a, čímž zadanou rovnici splníme. V tomto případě tedy máme nekonečně mnoho řešení. Skutečně, yy může být libovolné a xx k němu snadno dopočteme!
  2. Pokud je a=0a = 0, ale b0b \neq 0, pak naopak xx můžeme zvolit libovolně a dále položit y=c/by = c/b, čímž opět rovnici splníme. Opět tedy máme nekonečně mnoho řešení.
  3. Pokud je a=0a = 0 a b=0b = 0, ale c0c \neq 0, pak rovnice nemá žádné řešení.
  4. Konečně, pokud a=b=c=0a=b=c=0, pak libovolná dvojice x,yx,y rovnici očividně splní. Máme tedy nekonečně mnoho řešení.

Všimněte si, že v bodech 1., 2. a 4. měla rovnice sice nekonečně mnoho řešení, ale mezi těmito body je kvalitativní rozdíl. V případě 4. není žádný vztah mezi xx a yy, obě jejich hodnoty můžeme volit zcela libovolně a vždy budou řešením dané rovnice. V případě 1. a 2. vždy můžeme jednu neznámou zvolit libovolně a druhou dopočítat (nemáme u ní už možnost volby). V budoucnu uvidíme, jak lze toto pozorování vyjádřit pomocí dimenze množiny řešení (podprostoru či variety).

Dále poznamenejme, že v případě jedné lineární rovnice o dvou neznámých nikdy nenastává případ v němž by rovnice měla právě jedno řešení.

Vypustíme-li triviální případy (žádné řešení (3.) a triviální 0=00=0 (4.)), pak lze řešení rovnice ax+by=cax+by=c interpretovat jako body o souřadnicích [x,y][x,y] v rovině R2\mathbb{R}^2. Tuto situaci znázorňujeme na obrázku níže.

plot((x+2)/2, (x, 0, 12),
     figsize=4, gridlines=true,
     color='blue', thickness=4,
     title=u'Všechna řešení rovnice $2y-x=2$'
    ) 

Dvě rovnice o dvou neznámých

Řešení soustavy dvou rovnic o dvouch neznámých \begin{align*} a_1 x+b_1 y &= c_1, \\ a_2 x+b_2 y &= c_2, \end{align*} lze díky pozorování výše interpretovat jako hledání průniku dvou přímek. Skutečně, aby (x,y)(x,y) bylo řešením této soustavy, musí splňovat obě rovnice současně. To znamená, že musí ležet na obouch přímkách. Tedy být v jejich průniku.

Nyní bychom se mohli opět rozebrat různé kvalitativně odlišné situace, které mohou nastat v závislosti na hodnotách parametrů ai,bi,ci, i=1,2a_i, b_i, c_i, \ i=1,2. Zde se této otázce ale věnovat nebudeme. Laskavý čtenář tento rozbor jistě sám provede.

Řešení rovnic v SageMath

Ukažme si jak řešit tyto lineární rovnice v SageMath. Toho můžeme využít například ke kontrolování výpočtů.

Nejprve deklarujme symbolické proměnné s kterými budeme pracovat. K tomu slouží funkce var.

var('x,y,z,a,b,c')
(x, y, z, a, b, c)

Nyní máme pomocí těchto symbolických proměnných můžeme vytvářet všemožné symbolické výrazy.

show(sin(x) + ln(y^a))
log(ya)+sin(x)\newcommand{\Bold}[1]{\mathbf{#1}}\log\left(y^{a}\right) + \sin\left(x\right)
type(x)
<class 'sage.symbolic.expression.Expression'>

K řešení rovnic (nejen lineárních) slouží příkaz solve. Jeho první argument je rovnice, nebo soustava rovnic zadaná jako list nebo tuple a dalšími argumenty jsou proměnné, vůči nimž hledáme řešení.

Například jednu lineární rovnici s jednou neznámou bychom řešili takto:

solve(a*x == b, x)
[x == b/a]

Pozor! Zde vidíme, že SageMath není všemocný. V tomto případě nedokáže odhalit nebezpečný případ, kdy a=0a=0. Bohužel toto je slabost CAS obecně. Například Mathematica se chová naprosto stejně. Jako odpověď na Solve[a*x == b, x] dostanete {{x -> b/a }}. Což je špatně.

Při řešení parametrických úloh je tedy nutné být velmi obezřetný (obezřetná). Pokud se v úloze vyskytují pouze číselné koeficienty, tak takovéto nebezpečí nehrozí (ale můžeme narazit na nebezpečí jiná, jak uvidíme v dalších cvičeních).

Příklad: Požádejme Sage o řešení soustavy y+2x=3ax2y=1.y + 2x = 3 \quad \text{a} \quad x-2y = 1.

solve([y + 2*x == 3, x - 2*y == 1], x, y)
[[x == (7/5), y == (1/5)]]

Dostáváme právě jedno řešení.

Příklad: Vyzkoušejme nyní, jak si Sage poradí se soustavou, která nemá řešení. Například, x+y=1a2x+2y=1.x + y = 1 \quad \text{a} \quad 2x + 2y = 1.

solve([x + y == 1, 2*x + 2*y == 1], x, y)
[]

Příklad: Nejzajímavějším případem bude situace s nekonečně mnoha řešeními. Například soustava xy=1a2x2y=2.x - y = 1 \quad \text{a} \quad 2x -2y = 2.

solve([x - y == 1, 2*x - 2*y == 2], x, y)
[[x == r1 + 1, y == r1]]

Na předchozích příkladech je patrné, že zapisovat soustavy linárních rovnic pomocí rovnic samotných je značně redundantní. Na příštím cvičení si ukážeme, jak si život zjednodušit maticovou notací.