Глобальные и локальные переменные

 

В теле, определяемой функции, могут использоваться глобальные и локальные переменные. Например, в теле следующих функций

In[4]:= exprod[n_]:= Expand[Product[x+i, {i, 1, n}]]

In[5]:= cex[n_, i_]:= (t = exprod[n]; Coefficient[t, x^i])

переменные x и t будут глобальными. Значения глобальных переменных доступны для любых выражений в среде Mathematica.

In[6]:= exprod[5]

Out[6]= 120 + 274 x + 225 x2 + 85 x3 + 15 x4 + x5

In[7]:= cex[5, 3]

Out[7]= 85

In[8]:= t t - глобальная переменная

Out[8]= 120 + 274 x + 225 x2 + 85 x3 + 15 x4 + x5

In[9]:= x=a; x - глобальная переменная

In[10]:= exprond[3]

Out[10]= 6 + 11 a + 6 a2 + a3

Локальные переменные в теле функции или процедуры вводятся с помощью специальной функции

Module[{a,b,c, ...}, procedure],

в которой a, b, c,... локальные переменные. Определим функцию ncex с использованием локальной переменной u.

In[11]:= ncex[n_, i_]:= Module[{u}, u = exprod[n]; Coefficient[u, x^i]] u - локальная переменная

In[12]:= ncex[5, 3]

Out[12]= 85

In[13]:= u

Out[13]= u

 

Структурные операторы

Язык программной системы Mathematica является функциональным языком, поэтому структурные операторы определяются как функции возвращающие соответствующие значенрия.

Goto[tag] - безусловный переход к метке tag.

Label[tag] - определяет метку tag.

If[conditioon, t, f] - условный оператор If возвращает значение t, если condition=true и возвращает значение f, если condition=false.

Do[expr, {i, imax}] - цикл с индексом Do вычисляет expr imax - раз. При этом i меняется от1 до imax с шагом 1.

Do[expr, {i, imin, imax, di] - определяет цикл с индексом i, изменяющимся от imin до imax с шагом di.

Table[expr, {i, imax}] - создает список (list) значений, вычисляемых в expr. Число элементов списка равно imax.

Table[expr, {i, imax},{j, jmax]] - создает матрицу, которая содержит imax строк и jmax столбцов.

While[condition, body] - цикл с предусловием.

 

Рекурсивный вызов функций

 

При определении функций в программной системе Mathematica широко используется рекурсия, так как многие математические объекты определяются с помощью рекурсивных выражений. Простейшим примером является факториал:

In[1]:= Factorial[n_] := If[n==0, 1, n*Factorial[n-1]]

In[2]:= Factorial[4]

Out[2]= 24

 

Пакеты функций

 

Приведенные выше определения функций в интерактивном режиме работы программной систем размещаются в оперативной памяти. По окончанию работы с программной системой данные определения функций уничтожаются. Пользователь может создавать собственные функции и объединять их в пакеты функций. Пакет функций (Package) представляет собой текстовый файл в кодах ASCII с расширением m. Файлы пакетов функций хранятся в подкаталогах каталога PACKAGES система Mathematica.

При создании пакета функций используются следующие средства:

BeginPackage["NonLSys`AffinS`"] - определяет начало пакета и текущий контекст пакета NonLSys`AffinS`, который является маршрутом доступа к файлу AffinS.m.

f::usage="Text" - вводит объект для экспорта и декларирует функцию f, которая описывается в теле пакета. Каждая функция пользователя, включаемая в пакет должна декларироваться. "Text" представляет собой комментарий, который описывает назначение функции f. При выполнении команды ?<имя функции> выводится комментарий "Text"

Begin["`Private`"] - устанавливает текущий контекст для внутреннего использования в пакете. Фактически открывает тело пакета.

f[arg]:= <тело функции> - определение функций включенной в пакет.

End[ ] - возврат к предыдущему контексту.

EndPackage[ ] - конец пакета.

 


ПРИМЕР определения пакета.

 

BeginPackage["NonLSys`AffinS2`"]

(* Здесь должен располагаться комментарий *)

 

GradF::usage="GradF[h, x] returns the gradient dh={dh/dx1...

dh/dxn} of function h. x={x1 ... xn} is array of state space

variables."

 

Jacobi::usage="Jacoby[f, x] returns the Jacobi matrix J=df/dx

of vector f. f={{f1(x)},{f2(x)},...} is vector colums"

 

Begin["`Private`"]

 

GradF[hh_, xx_]:=Module[{i}, Table[D[hh, xx[[i]] ], {i, Length[xx]}]]

 

Jacobi[ff_, xx_]:= Module[{i, j},

Table[D[ff[[i, 1]], xx[[j]]], {i, Length[ff]}, {j, Length[xx]}]]

 

End[ ]

 

EndPackage[ ] (* NonLSys`AffinS2` *)

 

После запуска программной системы загружаются лишь встроенные функции ядра. Загрузка функций пакета осуществляется следующим образом.

In[1]:= <<NonLSys`AffinS2`


 

Построение графиков

 

Mathematica предоставляет набор функций для построения графиков функций, зависящих от одой и двух переменных, при этом аргументы функции могут быть заданы параметрически. Кроме того графики можно строить в различных системах координат (линейных, логарифмических, полярных и т.д.).

 

Двухмерные графики

 

Построение графика функции от одной переменной

 

Plot[f[x], {x, xmin, xmax}],

где f[x] – функция одной переменной, x – аргумент функции, xmin – начальное значение x, xmax – конечное значение x.

 

In[1]:=Plot[Sin[x], {x, 0, 2*Pi}]

 

Out[1] = Graphics

 

При построении графика можно задавать опции, позволяющие нарисовать рамку Frame, наложить сетку GridLines, дать наименования осям GridLines.

 

In[2]:=Plot[Sin[x^2], {x, 0, 3}, Frame -> True, GridLines -> Automatic,

AxesLabel -> {"x", "Sin[x]"}]

 

Out[2] = Graphics

 

 

Опция PlotRange позволяет задать границы по вертикальной оси при отображении графика.

 

In[3]:=Plot[Sin[x^2], {x, 0, 3}, PlotRange -> {0, 1.2}]

Out[3] = Graphics

 

Функция Show позволяет вывести вместе несколько графиков, построенных ранее.

 

In[4] :=Show[Out[2], Out[3]]

Out[4] = Graphics