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

Result

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;

Result

(%i92) factor(pol);

Result

(%i93) x;pol;

Result

(%i95) x:19/9;

Result

(%i96) x;pol;

Result

Narozdíl od Maplu zde nedochází k úplnému vyhodnocení!

(%i98) ev(pol,x:19/9);

Result

Příkaz ev(vyraz,podm1,podm2,....) vyhodnocuje vyraz za předpokladu
platnosti zadaných podmínek.

(%i99) kill(pol);

Result

(%i100) pol;

Result

Příkaz kill(all) zruší nastavení všech proměnných.

(%i101) kill(all);

Result

(%i1) ev(solve(a*x+b=0),x,a:3,b:12);

Result

(%i2) a;

Result

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;

Result

(%i4) exp(a);

Result

(%i5) ev(exp(a),float);

Result

Příkaz values vraci jména proměnných, kterým byla přiřazena hodnota.

(%i6) values;

Result

(%i7) [a];

Result

(%i8) kill(a);

Result

Pravidlo pro vyhodnocování

(%i9) [a,b,c];

Result

(%i10) c : a+b;

Result

(%i11) a : 10;

Result

(%i12) b : 6;

Result

Pokud nyní necháme vyhodnotit c, jaký bude výsledek?

(%i13) c;

Result

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;

Result

(%i15) [c,a,b];

Result

Ale pokud teď zadáme znovu c : a+b; dostáváme

(%i16) c : a+b;

Result

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

Result

(%i18) c : a + b;

Result

(%i19) a : 10;

Result

(%i20) b : 6;

Result

(%i21) c;

Result

(%i22) ev(c, eval);

Result

Operator ' zamezuje vyhodnocování.

(%i23) i : 2;

Result

(%i24) 'i;

Result

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;

Result

(%i26) Odpoved\:;

Result

(%i27) Jmeno\ s\ mezerou;

Result

3 Funkce assume a forget

(%i28) kill(all);

Result

(%i1) sqrt(a^2);

Result

(%i2) assume(a>0);

Result

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

Result

(%i4) sqrt(a^2);

Result

(%i5) forget(a>0);

Result

(%i6) sqrt(a^2);

Result

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

Result

(%i8) integrate(a*x^n+b*x^m, x);

Result

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

Result

Zavedem předpoklad, že n je liché číslo.

(%i10) declare(n,odd);

Result

(%i11) (-1)^(n+1);

Result

Stejně jako u assume musíme předpoklad nejdříve zrušit, abychom mohli
zavést nový.

(%i12) kill(n);

Result

(%i13) (-1)^(n+1);

Result

(%i14) declare(n,even);

Result

(%i15) (-1)^(n+1);

Result


Created with wxMaxima.