Функции и процедури в Mathematica
Дефиниране и правила за работа с потребителски функции и организиране на процедури
Всички функции в Mathematica имат име, аргументи и формула или процедура за изчисляване. Аналогично е дадена възможност на потребителя да си дефинира свои функции, като спазва правилата на системата. Препоръчва се името на потребителска функция да започва с малка латинска буква, за разлика от системните функции. След което в квадратни скоби се задават формалните параметри, завършващи със символа _  (долна черта) и разделени със запетая. Следва знак за присвояване  :=  и   описание на операциите над формалните аргументи, които се пишат без долна черта накрая. Използването на функциите по-нататък е както всички функции на Mathematica.

Пример 1. Дефиниране нафункция на един аргумент. Функцията може да извиква себе си, т.е. да бъде свой аргумент (рекурсивна функция).

f[x_] := x^3/(1 + x) + Cos[x] RowBox[{f, [, 0., ]}] RowBox[{a, =, RowBox[{RowBox[{5, RowBox[{f, [, 3.5, ]}]}], -, RowBox[{f, [, RowBox[{f, [, 1.2, ]}], ]}]}]}]

1.

41.8421

Пример 2. Ако искаме да проверим каква точно дефиниция е запомнила системата, във всеки момент можем да разберем с командата  ? име на функцията или променлива, чийто смисъл искаме да покажем. Всички операции върху функцията са разрешени.

?f
a=.
f[a+1]

Global`f

f[x_] := x^3/(1 + x) + Cos[x]

(1 + a)^3/(2 + a) + Cos[1 + a]

Пример 3. Ето развиване на израза от пример 2, групиране на множители и опростяване.

Expand[f[a + 1]] Factor[%] Simplify[%]

1/(2 + a) + (3 a)/(2 + a) + (3 a^2)/(2 + a) + a^3/(2 + a) + Cos[1 + a]

(1 + 3 a + 3 a^2 + a^3 + 2 Cos[1 + a] + a Cos[1 + a])/(2 + a)

((1 + a)^3 + (2 + a) Cos[1 + a])/(2 + a)

Пример 4.  Графика на функцията от пример 1 в интервала [-2,2]. Същата графика, но само за стойностите на  f[x] в интервала [0,10] с използване на опцията PlotRange.

g1 = Plot[f[x], {x, -2, 2}] g2 = Plot[f[x], {x, -2, 2}, PlotRange {0, 10}]

[Graphics:HTMLFiles/index_11.gif]

⁃Graphics⁃

[Graphics:HTMLFiles/index_13.gif]

⁃Graphics⁃

Пример 5. Дефиниция на функция на две променливи. Променливите за формалните параметри могат да се дублират от с използваните по-рано. Извеждаме формулата и построяваме двумерната графика. Независимо, че функцията не е определена при y=0,  Mathematica показва графика, очевидно със скок в съответната област.

huhu[x_, y_] := (x - y)^3/y ? huhu Plot3D[huhu[x, y], {x, -10, 10}, {y, -1, 1}]

Global`huhu

huhu[x_, y_] := (x - y)^3/y

[Graphics:HTMLFiles/index_17.gif]

⁃SurfaceGraphics⁃

Пример 6. Можем да дефинираме изрази, присвоени на прости променливи като използваме без ограничение вече дефинирани функции и да извикваме в комбинация със системни функции. Тук в клетка  r  запомняме формула на една променлива  x, като използваме huhu, рисуваме графиката,  изчисляваме при конкретна временна стойност  x=3 и решаваме уравнението  r==0  спрямо  x.

r = 2 * 10^2huhu[x, 2] Plot[r, {x, -10, 10}] RowBox[{%%, /., RowBox[{x, , 3.}]}] Solve[r2, x] %//N

100 (-2 + x)^3

[Graphics:HTMLFiles/index_21.gif]

⁃Graphics⁃

100.

{{x2 + 1/(2^(1/3) 5^(2/3))}, {x2 - (1 -  3^(1/2))/(2 2^(1/3) 5^(2/3))}, {x2 - (1 +  3^(1/2))/(2 2^(1/3) 5^(2/3))}}

RowBox[{{, RowBox[{RowBox[{{, RowBox[{x, , 2.27144}], }}], ,, RowBox[{{, RowBox[{x, &# ...  , RowBox[{RowBox[{1.86428, }], -, RowBox[{0.235075,  , }]}]}], }}]}], }}]

Пример 7. Смесено използване на функциите от горните примери. Дефинираме нова функция, изчисляваме стойност при z=3, t=6, развиваме я в ред на Тейлър до третия член.

p1[z_, t_] := (1 - f[z] * huhu[z, t])^2 p1[3, 6] %//N Series[p[x, y], {x, 0, 3}, {y, 0, 3}]

(1 + 9/2 (27/4 + Cos[3]))^2

724.688

(1 + 2 y^2 + O[y]^4) + (-6 y - 6 y^3 + O[y]^4) x + (6 + 14 y^2 + O[y]^4) x^2 + (-2/y - 17 y + 2 y^2 + 6 y^3 + O[y]^4) x^3 + O[x]^4

Пример 8.  Трябва да се има впредвид, че променливите, участващи във функции в дясната част на дефиницията са локални в рамките на оператора и нямат стойност извън него. Ето пример, в който променливата  i  е  локална в рамките на оператора за сума от първия ред. При изчисляване на сумата с 1000000 члена са необходими около 20 секунди, при което системата отразява изчислението с двойна голяма затваряща скоба най-отдясно на текущата клетка.

ss[n_] := Underoverscript[∑, i = 1, arg3] i^2 ss[1000000] i

333333833333500000

i

Пример 9.  Дефинирането на процедури става чрез оператори, разделени със символа ; (точка и запетая) и всички поставени в кръгли скоби като израз. За да се разбере кои променливи са глобални и локални ги разпечатваме. Типът на променливата (цяло число, дробно, комплексно, ...) автоматично довежда до работа над съответното поле от числа.

Clear[aa, bb, n, k] pro1[n_, k_] := (aa = ∫_0^k (1 + u)^(1/2) u ; bb = a ... 72;лна променлива *)

 При n=1 и  k=π и ... егралът е =  -2/3 + 2/3 (1 + π)^(3/2)

 При n=3 и  k= -2 и ... ;тегралът е =  -2/3 - (2 )/3

u

-2/3 - (2 )/3

-2/9 - (2 )/9

n

Пример 10.  Формалното заместване дава възможност за най-различни символни пресмятания с формули.

Clear[f]
r=f[x]+2f[y]
r /. x->2
r /. {f[x]->p,f[y]->6q}
r/. f[t_] -> t^2

f[x] + 2 f[y]

f[2] + 2 f[y]

p + 12 q

x^2 + 2 y^2


Created by Mathematica  (December 29, 2007)