4. Seznamy a lineární algebra

Seznamy

Seznam je konečná posloupnost prvků ve složených závorkách, prvky jsou oddělené čárkami.

cisla={1,2,5,3,1}

Prvky seznamu mohou být libovolné korektně utvořené výrazy:

jmena={"Emil","Cyril","Bedřich","František","Dagmar","Alena"}

Prvky seznamu mohou být opět seznamy:

FactorInteger[120]

Seznamy se často vyrábějí pomocí Table.

Table[i!,{i,1,10}]

Table[1,{10}]

Pro generování aritmetických posloupností lze použít Range:

Range[20]

Range[10,20]

Range[0.1,1,0.1]

První a poslední prvek seznamu:

jmena

First[jmena]

Last[jmena]

Konstrukce a[[i]] značí i-tý prvek seznamu a.

jmena[[3]]

jmena[[1]]="Eva"

jmena

seznam[[-i]] je i-tý prvek od konce:

jmena[[-2]]

Konstrukce seznam[[i;;j]] vrací podseznam vymezený pozicemi i a j.

jmena[[2;;4]]

Vkládání na konec nebo na začátek seznamu:

Append[jmena,"Gabriela"]

Prepend[jmena,"Hynek"]

Append a Prepend vracejí modifikovaný seznam, v proměnné jmena však zůstává původní seznam:

jmena

Toto chování je typické pro většinu operací se seznamy. Výjimkami jsou AppendTo a PrependTo:

AppendTo[seznam,hodnota] je totéž, jako seznam=Append[seznam,hodnota].

AppendTo[jmena,"Gabriela"]

jmena

PrependTo[seznam,hodnota] je totéž, jako seznam=Prepend[seznam,hodnota].

PrependTo[jmena,"Hynek"]

jmena

Vložení prvku na zadanou pozici:

Insert[jmena,"Ivan",2]

Vymazání prvku na zadané pozici:

Delete[jmena,4]

Obrácení seznamu:

Reverse[jmena]

Délka seznamu:

Length[jmena]

Součet prvků seznamu:

Total[Range[100]]

Setřídění seznamu:

cisla

Sort[cisla]

Sort[jmena]

Clear[jmena,cisla]

Cyklický posun seznamu vlevo nebo vpravo:

RotateLeft[{1,2,3,4}]

RotateLeft[{1,2,3,4},2]

RotateRight[{1,2,3,4}]

Spojení seznamů:

Join[{1,2,5},{3,2,1}]

Sjednocení (spojení, odstranění duplicit a setřídění):

Union[{1,2,5},{3,2,1}]

Union[{3,4,3,1,5}]

Průnik:

Intersection[{1,2,5},{3,2,1}]

Rozdíl:

Complement[{1,2,5},{3,2,1}]

Atribut Listable

Každá funkce v Mathematice má přiřazeny tzv. atributy.

Attributes[Sqrt]

Atribut Listable znamená, že funkci lze aplikovat na seznamy (výsledkem je seznam funkčních hodnot).

Sqrt[{4,5,9}]

Výpočet odmocnin z čísel 1, ..., 100  a) pomocí Sqrt[seznam], b) pomocí Table.

Sqrt[Range[1.0,100.0]]

Table[Sqrt[x],{x,1.0,100.0}]

Také funkce více proměnných mohou mít atribut Listable.

Attributes[Mod]

Funkci n proměnných můžeme aplikovat na n stejně dlouhých seznamů:

Mod[{4,6,5},{3,2,3}]

Vektory

Aritmetické operace se provádějí po složkách:

{1,2}+{3,1}

{1,2}-{3,1}

{1,2}*{3,1}

{1,2}/{3,1}

{1,2,3}^2

{1,2}^{3,1}

Násobení vektoru číslem:

2*{1,2,5}

Ekvivalentně lze psát jen 2{1,2,5}.

Skalární součin:

{1,2,5}.{1,2,1}

Vektorový součin:

Cross[{1,2,5},{1,2,1}]

Velikost vektoru:

Norm[{1,2,1}]

Matice

Matice se zapisuje jako seznam řádkových vektorů:

m={{1,2},{3,4}}

Matici lze vypsat v tradiční podobě pomocí MatrixForm:

MatrixForm[m]

m[[i,j]] je prvek matice m v i-tém řádku a j-tém sloupci.

m[[2,1]]=0

m

Matice se dají vyrábět pomocí Table:

Table[0,{i,1,2},{j,1,3}]

MatrixForm[Table[i*j,{i,1,10},{j,1,10}]]

Jednotková matice zadaného řádu:

IdentityMatrix[2]

Diagonální matice se zadanými diagonálními prvky:

DiagonalMatrix[{1,2,3}]

Maticové operace se provádějí po složkách:

m={{1,2},{3,4}}

m+m

m-m

m*m

2m

m^2

Maticové násobení:

m.m

Mocnina matice:

MatrixPower[m,4]

Transponovaná matice:

Transpose[m]

Hodnost matice:

MatrixRank[m]

Determinant:

Det[m]

Inverzní matice:

Inverse[m]

Vlastní čísla a vlastní vektory:

Eigenvalues[m]

Eigenvectors[m]

Řešení soustavy zadané maticí a vektorem pravé strany:

LinearSolve[{{3,1},{2,1}},{2,3}]

Gaussova eliminace:

MatrixForm[RowReduce[{{3,1,a},{2,1,b}}]]

MatrixForm[RowReduce[{{1,2,3},{4,5,6},{7,8,9}}]]

Báze všech řešení homogenní soustavy:

NullSpace[{{1,2,3},{4,5,6},{7,8,9}}]

Pomocí volby Modulus->p lze počítat v tělese (Subscript[ℤ, p]).

LinearSolve[{{1,2},{2,1}},{0,1},Modulus->5]