Pole, vektory a matice

Pole je obecná několikarozměrná datová struktura, jejíž speciálními typy jsou matice a vektory. V tomto místě se omezíme pouze na základní definice a vlastnosti těchto struktur, výpočty s nimi a další jejich vlastnoti jsou uvedeny dále v oddíle lineární algebra nebo v helpu linalg   .

Obecně lze definovat pole takto:

>    array(0..1,-1..0,[(0,-1)=a, (0,0)=b, (1,-1)=c]);

ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (1, -1) = c, (1, 0) = `?`[1,0]])
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (1, -1) = c, (1, 0) = `?`[1,0]])
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (1, -1) = c, (1, 0) = `?`[1,0]])
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (1, -1) = c, (1, 0) = `?`[1,0]])
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (1, -1) = c, (1, 0) = `?`[1,0]])
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (1, -1) = c, (1, 0) = `?`[1,0]])

Lze i jednodušeji:

>    v:=array([a,b,c]);
type(v,list); #POZOR v není seznam
type(v,array); #je to pole
type(v,vector); #a navíc vektor

v := vector([5, 5, c])

false

true

true

Výše uvedený zápis je tedy ekvivalentní zápisu v:=vector([a,b,c]); podobně lze zadat matici:

>    M:=matrix([[a,b],[c,d]]);
M[1,2]:=3;
print(M);  #zobrazí matici

M := matrix([[5, 5], [c, d]])

M[1,2] := 3

matrix([[5, 3], [c, d]])

Lze zadávat i mnoho specifických typů matic, např:

>    matrix(2,2,0); #nulova matice
M:=array(symmetric,1..2,1..2): M[1,2]:=2: print(M);

matrix([[0, 0], [0, 0]])

matrix([[M[1,1], 2], [2, M[2,2]]])

Pro konverze do jiného typu datové struktury lze opět použít pčíkaz convert  a dále s výhodou použíp příkaz map  .

>    Ms:=convert(M,listlist);

Ms := [[M[1,1], 2], [2, M[2,2]]]

>    map(op,%);

[M[1,1], 2, 2, M[2,2]]

>    convert(Ms,matrix); #konverze zpet

matrix([[M[1,1], 2], [2, M[2,2]]])