Lineární kombinace, lineární závislost a nezávislost vektorů v rovině

Tento interaktivní notebook umožňuje názorně pochopit lineární kombinaci vektorů v rovině a jejich lineární závislost resp. nezávislost.
Počet vektorů, které se zobrazí k standardně zobrazenému vektoru (Overscript[w, ->]), lze zadat pomocí posuvníku. (K vyšetřování lineární závislosti resp. nezávislosti vektorů je nutné mít zobrazeny minimálně dva vektory.)
Vektory lze měnit tak, že nastavíme kurzor myši nad koncový nebo počáteční bod vektoru, stiskneme levé tlačítko a myší pohybujeme do nové polohy, v níž pak levé tlačítko myši uvolníme.

V notebooku lze volitelně dále zobrazit:
	osy karézského systému souřadnic;
	souřadnice zobrazených vektorů na osách;
	zápis souřadnic vektorů;
	výpis lineární kombinace vektorů pro lineárně nezávislé vektory.
Souřadnice vektorů na osách kartézského systému souřadnic se zobrazí jen tehdy, leží-li počáteční body zadaných vektorů v počátku kartézské soustavy souřadnic.

Tlačítkem Ulož obrázek se uloží právě zobrazené "bílé" okno do aktuální složky (složka, v níž je uložen tento notebook) pod jménem, které je uloženo v proměnné jmenosouboru. K tomuto jménu souboru je při opakovaném ukládání grafu přidáváno pořadové číslo.
Pozor! Při každém spuštění tohoto apletu se začínají soubory číslovat opět od jedné! Tak může dojít k přepsání minule uložených obrázků.

© Jaroslav Reichl, 2009

Příprava pro vykreslení grafu

ClearAll["Global`*"];
jmenosouboru="anal_vektor_lk_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

nazevvektoru=RandomChoice[{"a","p"}];
nazevvysledku="w";

x1=-10;x2=-x1;
y1=-10;y2=-y1;
stredx=((x1+x2)/2);stredy=((y1+y2)/2);
delta=0.02(x2-x1);(*Použito u popisu bodů, vektorů a přímek.*)

pocet0=2;pocetmin=1;pocetmax=5;deltapocet=1;

tloustka=0.005;
velikostsipky=0.035;
velikostpisma=18;

barva=Black;
barvavektoru={Red,Blue,Magenta,Orange,Brown,Darker[Green]};(*barvavektoru[[1]] je barva výsledného vektoru*)

prvnibeh=True;

minulypocetvektoru=0;
minulyparametr=-10;

osax={
Arrowheads[{0,0.8velikostsipky}],
Arrow[{{x1,0.5(y1+y2)},{x2,0.5(y1+y2)}}]};
osay={
Arrowheads[{0,0.8velikostsipky}],
Arrow[{{0.5(x1+x2),y1},{0.5(x1+x2),y2}}]};

VektoryLK=Manipulate[Deploy[
If[pocetmax>Length[barvavektoru],
barvavektoru=PadRight[barvavektoru,pocetmax,Black]];
vektor=PadRight[vektor,2pocetvektoru+2,RandomReal[{x1,x2},{2pocetvektoru+2,2}]];
If[minulypocetvektoru≠pocetvektoru,
{Table[{vektor[[2i-1,1]]=0,vektor[[2i-1,2]]=0},{i,minulypocetvektoru+1,pocetvektoru+1,1}],
minulypocetvektoru=pocetvektoru},
""];
vektor=Table[Round[vektor[[i]],0.5],{i,1,2pocetvektoru+2,1}];
vektorkresleni={
Table[
{Arrowheads[{0,velikostsipky}],
Arrow[{{vektor[[2i-1,1]],vektor[[2i-1,2]]},{vektor[[2i,1]],vektor[[2i,2]]}}]},
{i,1,pocetvektoru+1,1}]};
souradnicevektoru=Table[
Line[{{vektor[[2i,1]],stredy},{vektor[[2i,1]],vektor[[2i,2]]},{stredx,vektor[[2i,2]]}}],
{i,1,pocetvektoru+1,1}];
vektorvnule=Table[vektor[[2i]]-vektor[[2i-1]],{i,1,pocetvektoru+1,1}];
If[Norm[vektorvnule[[1]]]≠0,
{reseni=Quiet[Solve[(∑_(i=2)^(pocetvektoru+1))koef[[i]] vektorvnule[[i]]==vektorvnule[[1]]]],
If[reseni≠{},
{LKnalezena=True,
pomkoef=Quiet[koef[[2]] /.reseni[[1,1]]],
If[NumericQ[pomkoef],
{vektoryLZ=True,
koeficient=Quiet[Table[koef[[i+1]]/.reseni[[1,i]],{i,1,Length[reseni[[1]]],1}]],
znamenko=Table[
If[koeficient[[i]]≥0,
" + ",
" - "],{i,1,pocetvektoru,1}]},
{If[pocetvektoru==Length[reseni[[1]]],
If[NumericQ[koeficient[[1]]]==False,
koeficient=Quiet[Table[koef[[i+1]]/.reseni[[1,Length[reseni[[1]]]-i+1]],{i,1,Length[reseni[[1]]],1}]],
""],
{koeficient=Quiet[Table[koef[[i+1]]/.reseni[[1,i]],{i,1,Length[reseni[[1]]],1}]],
parametr=1,
For[i=1,i≤pocetvektoru+1,
i=i+1,
koeficient=Quiet[koeficient/.koef[[i]]->parametr]],
koeficient=PadRight[koeficient,pocetvektoru,parametr]},
""],
znamenko=Table[
If[koeficient[[i]]≥0,
" + ",
" - "],{i,1,pocetvektoru,1}],
vektoryLZ=True}]},
{LKnalezena=False,
If[pocetvektoru≥2,
vektoryLZ=True,
vektoryLZ=False]}]},
vektoryLZ=False];
If[vektoryLZ,
{pisLN=Style["Vektory jsou lineárně závislé.",barva],
If[LKnalezena,
pisLK=StringJoin[ToString[Style[Overscript[nazevvysledku,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[" =",barva],StandardForm],znamenko[[1]],ToString[Style[ToString[Round[Abs[koeficient[[1]]],0.01]],barva],StandardForm],ToString[Style[Overscript[nazevvektoru,"→"],barvavektoru[[2]]],StandardForm],
Table[{ToString[Style[znamenko[[i-1]],barva],StandardForm],ToString[Style[ToString[Round[Abs[koeficient[[i-1]]],0.01]],barva],StandardForm],ToString[Style[Overscript[FromCharacterCode[ToCharacterCode[nazevvektoru]+i-2],"→"],barvavektoru[[i]]],StandardForm]},{i,3,pocetvektoru+1,1}]],
pisLK=StringJoin[ToString[Style["Vektor ",barva],StandardForm],ToString[Style[Overscript[nazevvysledku,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[" nelze zapsat jako LK ostatních!",barva],StandardForm]]]},
{pisLK=StringJoin[ToString[Style["Vektor ",barva],StandardForm],ToString[Style[Overscript[nazevvysledku,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[" nelze zapsat jako LK ostatních!",barva],StandardForm]],
pisLN=Style["Vektory jsou lineárně nezávislé.",barva]}];
pisvektor1=StringJoin[ToString[Style[Overscript[nazevvysledku,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[" = (",barva],StandardForm],ToString[Style[ToString[vektorvnule[[1,1]]],barva],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[vektorvnule[[1,2]]],barva],StandardForm],ToString[Style[")",barva],StandardForm]];
pisvektor=Table[
StringJoin[ToString[Style[Overscript[FromCharacterCode[ToCharacterCode[nazevvektoru]+i-2],"→"],barvavektoru[[i]]],StandardForm],ToString[Style[" = (",barva],StandardForm],ToString[Style[ToString[vektorvnule[[i,1]]],barva],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[vektorvnule[[i,2]]],barva],StandardForm],ToString[Style[")",barva],StandardForm]],{i,2,pocetvektoru+1,1}];

(*Test, zda jsou všechny vektory umístěné v počátku soustavy souřadnic. Jedině v tom případě se vykreslí v grafu suřadnice vektorů.*)
vektoryumistenyvnule=True;
Table[
If[vektor[[2i-1,j]]≠0,
vektoryumistenyvnule=False,
""],
{i,1,pocetvektoru+1,1},{j,1,2,1}];

grafik=Show[
Graphics[{
If[zobrazitosy,
{{barva,Thickness[0.5tloustka],osax},
{barva,Thickness[0.5tloustka],osay},
Text[Style["x",15,barva,FontFamily->Times,Italic],{x2,0.5(x1+x2)},{Right,Top}],
Text[Style["y",15,barva,FontFamily->Times,Italic],{0.05x1,y2},{Center,Top}]},
Text[""]],
Table[
{barvavektoru[[i]],Thickness[tloustka],vektorkresleni[[1,i]]},{i,1,pocetvektoru+1,1}],
Table[Text[Style[ToString[Overscript[FromCharacterCode[ToCharacterCode[nazevvektoru]+i-2],"→"],StandardForm],15,barvavektoru[[i]],FontFamily->Times,Bold],{vektor[[2i,1]]+delta,vektor[[2i,2]]+delta},{Center,Bottom}],{i,2,pocetvektoru+1,1}],
Text[Style[ToString[Overscript[nazevvysledku,"→"],StandardForm],15,barvavektoru[[1]],FontFamily->Times,Bold],{vektor[[2,1]]+delta,vektor[[2,2]]+delta},{Center,Bottom}],
If[zobrazitsouradnice∧zobrazitosy,
If[vektoryumistenyvnule,
{Table[
{barvavektoru[[i]],Thickness[0.2tloustka],Dashed,souradnicevektoru[[i]]},{i,1,pocetvektoru+1,1}],
Table[
Text[Style[ToString[vektor[[2i,1]]-vektor[[2i-1,1]]],15,barvavektoru[[i]],FontFamily->Times],{vektor[[2i,1]],0.02y1},{Center,Top}],{i,1,pocetvektoru+1,1}],
Table[
Text[Style[ToString[vektor[[2i,2]]-vektor[[2i-1,2]]],15,barvavektoru[[i]],FontFamily->Times],{0.02x2,vektor[[2i,2]]},{Left,Center}],{i,1,pocetvektoru+1,1}]},
Text[""]],
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},ImageSize->480
]],

{{vektor,RandomReal[{0.8x1,0.8x2},{2,2}]},Locator,Appearance->""},
{{pocetvektoru,pocet0,Style["počet vektorů",15,barva]},pocetmin,pocetmax,deltapocet},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitosy,True,Style["osy",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitsouradnice,False,Style["souřadnice v grafu",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitzapissouradnic,False,Style["zápis souřadnic",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvypis,True,Style["výpis",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitzapissouradnic∧pocetvektoru≥1,
Item[Style[pisvektor[[1]],velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitzapissouradnic∧pocetvektoru≥2,
Item[Style[pisvektor[[2]],velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitzapissouradnic∧pocetvektoru≥3,
Item[Style[pisvektor[[3]],velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitzapissouradnic∧pocetvektoru≥4,
Item[Style[pisvektor[[4]],velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitzapissouradnic∧pocetvektoru≥5,
Item[Style[pisvektor[[5]],velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitzapissouradnic,
Item[Style["",0.5velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitzapissouradnic,
Item[Style[pisvektor1,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitzapissouradnic,
Item[Style["",1.5velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypis,
Item[Style[pisLK,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypis,
Item[Style[pisLN,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]}
}]],
Delimiter,
Button[" Ulož obrázek ",{pocetulozeni=pocetulozeni+1,Export[StringInsert[StringJoin[cesta,jmenosouboru],ToString[pocetulozeni],-5],grafik]},ImageSize->{100,Automatic}],
ControlPlacement->Left,
FrameLabel->{Style["© Jaroslav Reichl, 2009",10,Black,FontFamily->Times],"",Style["Lineární kombinace, lineární závislost a nezávislost vektorů v rovině",25,Black,FontFamily->Times],""}];

Spuštění animace
Zpracujte běžným způsobem následující buňku a na dotaz, který se objeví, odpovězte ANO.

VektoryLK