Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Mathematica.doc
Скачиваний:
7
Добавлен:
23.11.2019
Размер:
401.41 Кб
Скачать

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

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

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

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

Язык программной системы 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] - цикл с предусловием.

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

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

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

In[2]:= Factorial[4]

Out[2]= 24

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

Приведенные выше определения функций в интерактивном режиме работы программной систем размещаются в оперативной памяти. По окончанию работы с программной системой данные определения функций уничтожаются. Пользователь может создавать собственные функции и объединять их в пакеты функций. Пакет функций (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`

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]