Lineární kombinace a lineární obal

Tomáš Kalvoda, KAM FIT ČVUT, 2016-2019

Příklad: rovina R2\mathbb{R}^2

Začněme jednoduše s lineárními kombinacemi jednoho nenulového vektoru vR2v \in \mathbb{R}^2, tedy s násobky αv\alpha v, kde αR\alpha \in \mathbb{R} může být libovolné (případ nulového vektoru je triviální, co na obrázku uvidíte?).

v   = vector(RR, [1, 1]); # vektor
n   = 30;               # počet náhodných lineárních kombinací
fig = v.plot(color='red')
figcombs = sum([(RR.random_element(-2, 2)*v).plot(color='gray', width=1) for j in range(n)])
(figcombs + fig).show(xmin=-2, xmax=2, ymin=-2, ymax=2, gridlines=True)

Jak se obrázek změní, pokud budeme kombinovat dva nenulové vektory v,wR2v,w \in \mathbb{R}^2, tedy zobrazovat kombinace αv+βw\alpha v + \beta w, kde α,βR\alpha,\beta\in\mathbb{R}? Nyní mohou nastat dvě kvalitativně odlišné situace:

Oba tyto případy názorně ukazujeme na obrázcích níže.

# Lineárně závislý případ
v   = vector(RR, [1, 1]); w = vector(RR, [-1, -1]);
n   = 40;
fig = v.plot(color='red') + w.plot(color='blue')
figcombs = sum(
    [
        (RR.random_element(-1.5, 1.5)*v + RR.random_element(-1.5, 1.5)*w).plot(color='gray', width=1)
        for j in range(n)
    ]
)
(figcombs + fig).show(xmin=-2, xmax=2, ymin=-2, ymax=2, gridlines=True)
# Lineárně nezávislý případ
v   = vector(RR, [1, 1]); w = vector(RR, [-1, 1]);
n   = 100;
fig = v.plot(color='red') + w.plot(color='blue')
figcombs = sum(
    [
        (RR.random_element(-1.5, 1.5)*v + RR.random_element(-1.5, 1.5)*w).plot(color='gray', width=1)
        for j in range(n)
    ]
)
(figcombs + fig).show(xmin=-2, xmax=2, ymin=-2, ymax=2, gridlines=True)

Příklad: prostor R3\mathbb{R}^3

Nyní přejděme do trojrozměrného prostoru, R3\mathbb{R}^3. V závislosti na počtu kombinovaných vektorů a jejich ne/závislosti může opět nastat několik kvalitativně odlišných případů.

Následující kód generuje interaktivní 3D scénu, která ve statickém HTML náhledu není. Musíte spustit tento sešit přohlížet opravdu v Jupyter Notebooku.

# Lineární kombinace dvou lineárně nezávislých vektorů
V             = RR^3
v             = V([1, 1, 1])
w             = V([0, -1, 1])
soubor        = (v, w)
delka_souboru = len(soubor)
n             = 50
komb_koef     = [ [RR.random_element() for k in range(delka_souboru)] for j in range(n) ]
figsoubor     = arrow([0, 0, 0], v, color='red') + arrow([0, 0, 0], w, color='blue');
figkomb       = sum([ arrow([0,0,0],sum([ koef[j]*soubor[j] for j in range(delka_souboru)]), color='gray')
                     for koef in komb_koef 
                    ])
(figsoubor + figkomb).show(viewer='threejs')
# Dva lineárně závislé vektory
V             = RR^3
v             = V([1, 1, 1])
w             = V([-1, -1, -1])
soubor        = (v, w)
delka_souboru = len(soubor)
n             = 50
komb_koef     = [ [RR.random_element() for k in range(delka_souboru)] for j in range(n) ]
figsoubor     = arrow([0,0,0], v, color='red') + arrow([0,0,0], w, color='blue');
figkomb       = sum([ arrow([0,0,0],sum([ koef[j]*soubor[j] for j in range(delka_souboru)]), color='gray') 
                     for koef in komb_koef
                    ])
(figsoubor + figkomb).show(viewer='threejs')
# tři lineárně závislé vektory (jeden je kombinací zbylých dvou)
V             = RR^3
v             = V([1, 1, 1])
w             = V([0, -1, 1])
z             = V([1, 0, 2])
soubor        = (v, w, z)
delka_souboru = len(soubor)
n             = 50
komb_koef     = [ [RR.random_element() for k in range(delka_souboru)] for j in range(n) ]
figsoubor     = arrow([0, 0, 0], v, color='red') + arrow([0, 0, 0], w, color='blue') + arrow([0, 0, 0], z, color='green');
figkomb       = sum([arrow([0,0,0],sum([ koef[j]*soubor[j] for j in range(delka_souboru)]), color='gray')
                     for koef in komb_koef
                    ])
(figsoubor + figkomb).show(viewer='threejs')
# tři lineárně nezávislé vektory
V             = RR^3
v             = V([1, 1, 1])
w             = V([0, -1, 1])
z             = V([1, -2, 1])
soubor        = (v, w, z)
delka_souboru = len(soubor)
n             = 50
komb_koef     = [ [RR.random_element() for k in range(delka_souboru)] for j in range(n) ]
figsoubor     = arrow([0,0,0], v, color='red') + arrow([0,0,0], w, color='blue') + arrow([0,0,0], z, color='green');
figkomb       = sum([ arrow([0,0,0],sum([ koef[j]*soubor[j] for j in range(delka_souboru)]), color='gray')
                     for koef in komb_koef
                ])
(figsoubor + figkomb).show(viewer='threejs')