Datové typy
1 Seznam (list)
(%i1) | s:[1,4,25,9,16,25]; |
Stejné objekty se mohou vyskytovat více než jednou,
zachovává se zadané uspořádání.
Ověření, že s je datového typu seznam:
(%i2) | listp(s); |
Vytváření seznamu
(%i3) | makelist(i^2,i,1,5); |
makelist (expr, i, i_0, i_1) vytváří seznam, kde j-tý element je roven
ev (expr, i=j) pro j od i_0 do i_1.
(%i4) | makelist(x=y,y,[a,b,c]); |
makelist (expr, x, list) vytváří seznam, kde j-tý element je roven
ev (expr, x=list[j]) pro j od 1 do počtu prvků seznamu.
(%i5) | create_list(x^i,i,[1,3,7]); |
Počet prvků seznamu (délka seznamu):
(%i6) | length(s); |
Test, zda daný element patří do seznamu:
(%i7) | member(2,s); |
(%i8) | member(4,s); |
Výběr jednotlivých prvků seznamu:
(%i9) | s[1]; |
Nahrazení prvku seznamu jiným:
(%i10) | s[1]:a; |
(%i11) | s; |
(%i12) | first(s);second(s);third(s);fourth(s);fifth(s); |
(%i17) | last(s); |
Odstranění elementu ze seznamu:
(%i18) | delete (y, [w, x, y, z, z, y, x, w]); |
Odstranění duplicit
(%i19) | seznam:[x, x, x*y, x*(x-1)]; |
(%i20) | unique(seznam); |
(%i21) | cl : [black, red, green, yellow, blue, white, pink]; |
(%i22) | rest(cl,2); |
Odstraní první dva prvky seznamu.
(%i23) | rest(cl,-2); |
Odstraní poslední dva prvky seznamu.
(%i24) | rest(cl); |
Odstraní první prvek seznamu.
(%i25) | reverse(cl); |
Obrátí pořadí prvků seznamu.
(%i26) | cons(orange,cl); |
Vytvoří nový seznam se zadaným prvkem na prvním místě.
(%i27) | endcons(orange,cl); |
Vytvoří nový seznam se zadaným prvkem na posledním místě.
(%i28) | append(cl,[orange,brown]); |
append(list_1,...,list_n) vytváří jeden seznam, skládající se postupně z prvků
seznamu list_1,list_2,...,list_n.
(%i29) | L1:[1,2,3,4,5]; |
(%i30) | L2:[a,b,c,d,e]; |
(%i31) | join(L1,L2); |
join(l,m) vytváří seznam spojením seznamů l a m, přičemž prvky obou seznamů se
pravidelně střídají. Tj. výsledný seznam vypadá takto: [l[1], m[1], l[2], m[2],...].
Pokud mají oba seznamy různou délku, join ignoruje prvky delšího seznamu.
(%i32) | f(x):=x^2; |
(%i33) | map(f,L1); |
map(f, list) aplikuje funkční předpis na všechny prvky seznamu.
Sečtení prvků seznamu
(%i34) | apply("+",L1); |
(%i35) | random(11); |
random(x) vrací náhodně zvolené celé číslo od 0 do x-1.
(%i36) | 3<5, pred; |
(%i37) | L : makelist(random(11),i,1,10); |
(%i38) | sublist(L, lambda([x], is(x<5))); |
(%i39) | f(x) := is(x<5)$ |
(%i40) | f(4); |
(%i41) | sublist(L,f); |
(%i42) | sublist(L, evenp); |
2 Množina (set)
(%i43) | M1:set(b,a,c); |
(%i44) | M1:{c,b,a}; |
Pokud množina obsahuje stejné prvky, jsou automaticky odstraněny.
Datový typ množina používá vnitřní systém uspořádání.
(%i45) | setp(M1); |
Prázdná množina:
(%i46) | set(); |
(%i47) | subst(c=a, M1); |
(%i48) | M2:set(1,2,3); |
(%i49) | M3:[1,1,2,2,3,3]; |
Vytvoření množiny ze seznamu:
(%i50) | M4:setify(M3); |
A zpětné vytvoření seznamu z množiny:
(%i51) | listify(M4); |
(%i52) | full_listify ({a, b, {c, {d, e, f}, g}}); |
(%i53) | listify ({a, b, {c, {d, e, f}, g}}); |
(%i54) | fullsetify ([a, [a]]); |
Základní množinové operace
Sjednocení:
(%i55) | union(M1,M2); |
Průnik:
(%i56) | intersect(M1,M2); |
Rozdíl:
(%i57) | setdifference({0,1,2,3},{0,2,4,6}); |
Počet prvků konečné množiny:
(%i58) | cardinality(M1); |
(%i59) | s:{1,2,five,3,4}; |
Přidání prvku:
(%i60) | adjoin(x, s); |
(%i61) | union(s,{x}); |
Odstranění prvku z množiny:
(%i62) | disjoin(x,%); |
(%i63) | disjointp ({a, b, c}, {1, 2, 3}); |
disjoint vrací true, pokud jsou zadané množiny disjunktní.
(%i64) | disjointp ({a, b, 3}, {1, 2, 3}); |
Určuje, zda daný prvek patří do množiny:
(%i65) | elementp(1,s); |
(%i66) | elementp(6,s); |
Určuje, zad jsou zadané množiny totožné:
(%i67) | setequalp ({1, 2, 3}, {1, 2, 3}); |
(%i68) | setequalp ({a, b, c}, {1, 2, 3}); |
(%i69) | subset ({1, 2, 7, 8, 9, 14}, evenp); |
Vytvoří podmnožinu dané množiny na základě zadaného kritéria.
(%i70) | evenp(1);evenp(1/2);evenp(2); |
(%i73) | oddp(1);oddp(1/2);oddp(2); |
Určuje, zda je první zadaná množina podmnožinou druhé.
(%i76) | subsetp ({1, 2, 3}, {a, 1, b, 2, c, 3}); |
(%i77) | subsetp ({a, 1, b, 2, c, 3}, {1, 2, 3}); |
Vrací množinu všech podmnožin zadané množiny:
(%i78) | collection:powerset({1,2,3}); |
(%i79) | cardinality(collection); |
(%i80) | fourth(collection); |
(%i81) | numbers:{0,%pi,%pi/3,%pi/2}; |
(%i82) | map(g,numbers); |
(%i83) | map(sin, numbers); |
3 Pole (array)
array (name, dim_1, ..., dim_n) vytváří obecné pole.
n musí být menší nebo rovné pěti.
(%i84) | array(A,2,3); |
(%i85) | A[1,1]:1;A[1,2]:4;A[1,3]:9; |
(%i88) | A[2,1]:1;A[2,2]:8;A[2,3]:27; |
(%i91) | arrayinfo(A); |
(%i92) | listarray (A); |
(%i93) | translate:[["jedna", 1], ["dve", 2], ["tri",3]]; |
(%i94) | assoc("jedna", translate); |
(%i95) | cons(["ctyri",4], translate); |
4 Matice
K vytvoření matice použijeme příkaz matrix([],[],...), přičemž v hranatých
závorkách vypisujeme jednotlivé řádky matice.
(%i96) | D:matrix([1,2,3],[1,4,9],[1,8,27]); |
(%i97) | D[1,1]; |
Definování indexační funkce
(%i98) | h[i,j]:=1/(i+j-x); |
(%i99) | hilbert4 : genmatrix(h,4,4); |
(%i100) | ident(3); |
(%i101) | diagmatrix(3,0); |
(%i102) | zeromatrix(3,3); |
Operace s maticemi
(%i103) | A: matrix([2,a], [-1,-2*b]); |
(%i104) | B : matrix([3*a,2], [1-b,1]); |
Sečítání a odečítání matic
(%i105) | A+B; |
(%i106) | A-B; |
(%i107) | C:transpose(D); |
Násobení matic
(%i108) | D.C; |
(%i109) | expand(A.B); |
(%i110) | A*B; |
Při použití * se pouze vynásobí prvky na odpovídajících pozicích.
(%i111) | A/B; |
Dělí prvky na odpovídajících pozicích.
Mocniny
(%i112) | B^^3; |
(%i113) | B^3; |
Operátor "^" umocní jen prvky na odpovídajícíh pozicích.
Počet řádků
(%i114) | length(D); |
Počet sloupců
(%i115) | length(transpose(D)); |
Hodnost matice
(%i116) | rank(D); |
Výpočet determinaru čtvercové matice:
(%i117) | determinant(D); |
(%i118) | invert(D); |
(%i119) | D.%; |
(%i120) | kill(all); |
Gaussova eliminace
(%i1) | A:matrix([1,1,3,-3],[5,5,13,-17],[3,1,7,-11]); |
(%i2) | triangularize(A); |
(%i3) | echelon(A); |
(%i4) | load("/home_zam/plch/vyuka/maxima/rref.mac"); |
(%i5) | rref(A); |
Balíček linearalgebra
(%i6) | load(linearalgebra); |
(%i7) | toeplitz([1,2,3]); |
(%i8) | toeplitz([alpha, beta]); |
Pro práci s vektory slouží balíček vect
(%i9) | load(vect); |
(%i10) | v1 : [1,0,1]; |
(%i11) | length(v1); |
(%i12) | v2 : [0,1,1]; |
(%i13) | v1-v2; |
Skalární součin
(%i14) | v1 . v2; |
Vektorový součin
(%i15) | v1 ~ v2; |
zde nedochází automaticky k vyhodnocení, to provedeme až pomocí
(%i16) | express(%); |