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, (...
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (...
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (...
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (...
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (...
ARRAY([0 .. 1, -1 .. 0],[(0, -1) = 5, (0, 0) = 5, (...

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]]])