Funkce - odlišnost od výrazu

Jednopříkazové funkce lze zadat v šipkové notaci, výsledek se ničemu nepřiřazuje, jen se napíše jako výraz:

> f := (x,y) -> x^2+y^2;

f := proc (x, y) options operator, arrow; x^2+y^2 e...

Funkce lze také ekvivalentně zadat jako procedury , které nemusejí být jednopříkazové (end je zavírací závorka od proc. Když ji zapomenete, Maple vám nápadně dlouho nedá žádný výstup).

> fce := proc(x,y) x^2+y^2 end;

fce := proc (x, y) x^2+y^2 end proc

Je nutno rozlišovat výraz , např.

> vyraz := sin(x^2);

vyraz := sin(x^2)

... a funkci , např.

> funkce := x -> sin(x^2);

funkce := proc (x) options operator, arrow; sin(x^2...

Zde je vidět první rozdíl.

> vyraz; funkce;

sin(x^2)

funkce

Z funkce se při výstupu vypíše jen jméno, její definici dostaneme pomocí eval . (Totéž platí o polích, jak uvidíme dále):

> eval(funkce);

proc (x) options operator, arrow; sin(x^2) end proc...

Za funkci můžeme napsat argument:

> funkce(x), funkce(3);

sin(x^2), sin(9)

Potom lze v daném bodě samozřejmě spočítat funkční hodnotu. Zde už bude fungovat i příkaz evalhf , jak jsme zmínili v předchozí kapitole.

> evalf(funkce(3));
evalhf(funkce(3));

.4121184852

.412118485241756594

Za výraz sice také napsat argument, ale s (obvykle) nežádoucím výsledkem (zde bychom museli použít buď globální definici proměnných nebo příkaz subs).

> vyraz(x), vyraz(3);

sin(x^2)(x), sin(x^2)(3)

Takto by situace vypadala při globální definici proměnné x :

> x:=5;
vyraz;
eval(funkce);
funkce(x);
x:='x'; #opět z x uděláme proměnnou x (viz dále)

x := 5

sin(25)

proc (x) options operator, arrow; sin(x^2) end proc...

sin(25)

x := 'x'

Při prvním čtení lze vynechat

Některé procedury pracují s výrazy i s funkcemi, přesto je nutné je rozlišovat, správné jsou např. zápisy

> plot(vyraz, x=0..4); # první argument je výraz

[Maple Plot]

plot(funkce, 0..4); # první argument je funkce

plot(funkce(x), x=0..4); # první argument je výraz

plot(funkce(t), t=0..4); # první argument je výraz

... nesprávné je

plot(vyraz(x), x=0..4); # (`vyraz` je výraz v proměnné x, x je "argument")

> plot(vyraz, t=0..4); # ("vyraz" je výraz v proměnné x, nikoli t)

Plotting error, empty plot

plot(funkce(x), 0..4); # (`funkce(x)` je výraz, nikoli funkce)

plot(funkce, x=0..4); # (`funkce` je funkce, nikoli výraz)

plot(funkce(x), t=0..4); # (`funkce(x)` je výraz v proměnné x, nikoli t)

Případně si připomeňte, jak je výraz a funkce definován.

Při prvním čtení lze vynechat

Z funkce vytvoříme výraz uvedením parametrů:

> f(a,b+c);

25+(5+c)^2

Z výrazu vytvoříme funkci pomocí funkce `unapply`:

> vyraz := x^2 * sin(x);

vyraz := x^2*sin(x)

> h := unapply(vyraz, x);

h := proc (x) options operator, arrow; x^2*sin(x) e...

> h(2);

4*sin(2)

Při prvním čtení lze vynechat -- nespojité funkce