Tomáš Kalvoda, KAM FIT ČVUT, 2016-2019
Začněme jednoduše s lineárními kombinacemi jednoho nenulového vektoru , tedy s násobky , kde 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 , tedy zobrazovat kombinace , kde ? 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)
Nyní přejděme do trojrozměrného prostoru, . 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')