Proměnné a jejich vyhodnocování
1 Přiřazování hodnot proměnným
CAS systémy jsou schopny pracovat s formulemi a řešit úlohy, ve kterých
se vyskytují neznamé a parametry.
(%i90) | solve(a*x^2+b*x+c,x); |
Zde a,b a c jsou parametry a x je neznámá. Jsou použity jako symboly.
Toto použití "volných proměnných", které neukazují na žádnou hodnotu,
kromě jejich vlastního jména, je charakteristické pro symbolické systémy.
Promennym prirazujeme hodnoty pomoci operatoru :. jmeno:vyraz
(%i91) | pol:9*x^3-37*x^2+47*x-19; |
(%i92) | factor(pol); |
(%i93) | x;pol; |
(%i95) | x:19/9; |
(%i96) | x;pol; |
Narozdíl od Maplu zde nedochází k úplnému vyhodnocení!
(%i98) | ev(pol,x:19/9); |
Příkaz ev(vyraz,podm1,podm2,....) vyhodnocuje vyraz za předpokladu
platnosti zadaných podmínek.
(%i99) | kill(pol); |
(%i100) | pol; |
Příkaz kill(all) zruší nastavení všech proměnných.
(%i101) | kill(all); |
(%i1) | ev(solve(a*x+b=0),x,a:3,b:12); |
(%i2) | a; |
Vidíme, že přiřazení hodnot proměnným a, b bylo jen lokální
(v rámci příkazu ev). Vně příkazu nemá proměnná a přiřazenu
žádnou hodnotu.
(%i3) | a:9/4; |
(%i4) | exp(a); |
(%i5) | ev(exp(a),float); |
Příkaz values vraci jména proměnných, kterým byla přiřazena hodnota.
(%i6) | values; |
(%i7) | [a]; |
(%i8) | kill(a); |
Pravidlo pro vyhodnocování
(%i9) | [a,b,c]; |
(%i10) | c : a+b; |
(%i11) | a : 10; |
(%i12) | b : 6; |
Pokud nyní necháme vyhodnotit c, jaký bude výsledek?
(%i13) | c; |
Jakmile je proměnné přiřazena hodnota, nedochází k její změně dodatečným
přiřazením (kromě další změny hodnoty této proměnné). V našem případě,
pokud byla proměnné c přiřazena hodnota a+b, tak další přiřazení hodnot
proměnným a, b nemění hodnotu proměnné c.
(%i14) | values; |
(%i15) | [c,a,b]; |
Ale pokud teď zadáme znovu c : a+b; dostáváme
(%i16) | c : a+b; |
protože nyní dojde k vyhodnocení proměnných a,b.
Úplného vyhodnocení u předchozího příkladu můžeme dosáhnout
pomocí příkazu eval.
(%i17) | kill(a,b,c); |
(%i18) | c : a + b; |
(%i19) | a : 10; |
(%i20) | b : 6; |
(%i21) | c; |
(%i22) | ev(c, eval); |
Operator ' zamezuje vyhodnocování.
(%i23) | i : 2; |
(%i24) | 'i; |
2 Jména proměnných
Rezervovaná slova, která nepoužíváme pro označování proměnných:
integrate next from diff
in at limit sum
for and elseif then
else do or if
unless product while thru
step
Ve jménu proměnné se mohou vyskytovat písmena (rozlišuje se mezi velkými
a malými), číslice a znaky % a _. Ostatní znaky musíme zadávat se znakem
zpětné lomítko (backslash) před speciálním znakem.
(%i25) | %Obycejne_jmeno; |
(%i26) | Odpoved\:; |
(%i27) | Jmeno\ s\ mezerou; |
3 Funkce assume a forget
(%i28) | kill(all); |
(%i1) | sqrt(a^2); |
(%i2) | assume(a>0); |
Příkazem assume(podm1,podm2,...) definujeme předpoklady. Tyto jsou
platné (narozdíl od příkazu ev) až do té doby, než je zrušíme
příkazem forget.
(%i3) | is (a>0); |
(%i4) | sqrt(a^2); |
(%i5) | forget(a>0); |
(%i6) | sqrt(a^2); |
Zmenu predpokladu muzeme provest az po jeho zruseni (forget).
Pomoci assume a forget muzeme zadat i vice predpokladu zaraz.
(%i7) | assume(n+1>0,m+1>0); |
(%i8) | integrate(a*x^n+b*x^m, x); |
4 Příkaz declare
Příkaz declare(prom1,podm1,prom2,podm2,...) definuje předpoklad podm1
pro proměnnou prom1, předpoklad podm2 pro proměnnou prom2, atd.
(%i9) | (-1)^(n+1); |
Zavedem předpoklad, že n je liché číslo.
(%i10) | declare(n,odd); |
(%i11) | (-1)^(n+1); |
Stejně jako u assume musíme předpoklad nejdříve zrušit, abychom mohli
zavést nový.
(%i12) | kill(n); |
(%i13) | (-1)^(n+1); |
(%i14) | declare(n,even); |
(%i15) | (-1)^(n+1); |