Warning: include(/var/www/iill7773/data/www/wiselab.ru/wp-content/plugins/wp-super-cache/wp-cache-base.php): failed to open stream: No such file or directory in /home/u7426dd0/domains/wiselab.ru/public_html/wp-content/plugins/wp-super-cache/wp-cache.php on line 65

Warning: include(): Failed opening '/var/www/iill7773/data/www/wiselab.ru/wp-content/plugins/wp-super-cache/wp-cache-base.php' for inclusion (include_path='.:/opt/alt/php55/usr/share/pear:/opt/alt/php55/usr/share/php') in /home/u7426dd0/domains/wiselab.ru/public_html/wp-content/plugins/wp-super-cache/wp-cache.php on line 65

Warning: include_once(/var/www/iill7773/data/www/wiselab.ru/wp-content/plugins/wp-super-cache/ossdl-cdn.php): failed to open stream: No such file or directory in /home/u7426dd0/domains/wiselab.ru/public_html/wp-content/plugins/wp-super-cache/wp-cache.php on line 82

Warning: include_once(): Failed opening '/var/www/iill7773/data/www/wiselab.ru/wp-content/plugins/wp-super-cache/ossdl-cdn.php' for inclusion (include_path='.:/opt/alt/php55/usr/share/pear:/opt/alt/php55/usr/share/php') in /home/u7426dd0/domains/wiselab.ru/public_html/wp-content/plugins/wp-super-cache/wp-cache.php on line 82
Укороченная форма функций | Учебники

Главная > Mathematica 8 > Укороченная форма функций


Укороченная форма функций

Укороченная форма функций
Из описания указанных функций вытекает, что они наряду с полной формой могут задаваться укороченной формой.

Укороченная форма

Полная форма

f @ ехрг

f [expr]

f @@ ехрг

Apply [f, expr]

f /@ ехрг

Map[f, expr]

f //@ ехрг

MapAll [f, expr]

Смысл укороченных выражений очевиден. Приведем несколько примеров их использования.

Ввод (In)

Вывод (Out)

f@{a, b, с}

f[{a, b, c}]

f@@{a, b, c}

f [a, b, c]

f /@{a, b, c}

{f[a], f[b], f[c]}

f//@{a, b, x}

f[{f[a], f[b], f[x]}]

Укороченная форма функций может оказаться полезной для сокращения записи алгоритмов и программ.
Выделения и подстановки в функциях
Функция Slot[n], или, в укороченной форме, #n, представляет n-й аргумент функции. Это иллюстрируют следующие примеры.

Ввод (In)

Вывод (Out)

(5* Slot [1] + Slot [2] *Slot[3] A 2) &[a, b, с]

5a+bc 2

#1 A #2 S[a, b]

a b

Объект # эквивалентен #1, a #0 — заголовку абстрактной функции. Таким образом, F[#.#2]&F[a,b] эквивалентно F[a,b].
Функция SlotSequence [n], или, в укороченной форме, ##n, где п = 1, 2, …, представляет порядок применения формальных аргументов к абстрактной функции. Таким образом, объект ##n определяет последовательность аргументов, начиная с n-го.

Ввод (In)

Вывод (Out)

(Times[5, ##2] +Times[##2, ##3 A 2]) &[а, b, с]

Sbobc 3

Представленные средства обеспечивают работу с функциями на абстрактном уровне.
Интересные возможности связаны с использованием подстановок при определении функций. Система допускает использование подстановок в виде f [x] = value и f[x_] = value.
Поясним это несколькими примерами.

Ввод (In)

Вывод (Out)

f[x] =u

u

f[x] +f[y]

u+f ty]

f [x_] = х^2

x 2

f[x] +f[y]

u+y 2

Clear [f]

f[x]+f[y]

f [x] + f [y]

Как нетрудно заметить из этих примеров, подстановки в функциях могут существенно изменить исходную функциональную зависимость. А потому важной областью их применения является модификация функций.
Рекуррентные функции
Использование подстановок при определении функций позволяет легко реализовывать рекуррентные алгоритмы, то есть алгоритмы, при которых очередной шаг вычислений основан на определенном преобразовании предшествующих шагов. Примером может служить задание функции вычисления факториала fact [n], представленное ниже.

Операция

Комментарий

fact[n_] :=n*fact[n-l]

Задана рекурсивная функция факториала

fact[l]=l

Выполнена инициализация функции

1

fact[3]

Вычислено значение 3!

6

fact[10]

Вычислено значение 10!

3628800

?fact[l]

Выполнена проверка определения функции

Global ‘ fact

fact[l] = 1

fact[n_] :=nfact[n-l]

Обратите внимание на использование знака вопроса перед именем функции в конце примера, показанного выше. Оно позволяет вывести текст декларации (определения) функции. После объявления функция может быть использована в последующих ячейках документа.
Дополнительные примеры работы с функциями
Приведем еще ряд примеров действия функций Apply, Map и Nest.

Ввод (In)

Вывод (Out)

Nest[f ,x,3]

f [f[f [X]]]

Apply[f,{a,b,c}]

f[a, b, c]

s [x_,y_, z_] : =х+у+b

N[Apply[s,{l,2,a}]]

3. + b

Map[f,{a,b,c}]

{f [a], f [b], f [c] }

N[Map[Exp, {1,2,3}]]

{2.71828, 7.38906, 20.0855}

Map[f ,1+2+c]

f[3] + f[c]

m={{a,b},{c,d}}

{{a, b}, {c, d}}

Map[f,m]

{f [{a, b}], f [{c, d}] }

take2[list_] :=Take[list,2]

Map[take2,{{a,b,c},{c,a,b),{c,c,a}}]

{{a, b}, {c, a}, {c, c}}

Большинство описанных операций для работы с функциями могут использоваться и при работе со списками. Порой это резко упрощает запись алгоритмов вы-числений для данных, представленных списками, поскольку дает общее определение функций для произвольного числа их параметров. Примерами могут служить определения следующих статистических функций.
Вычисление среднего для элементов списка:
Mean[list_] := Apply[Plus, list] / Length[list] /;
VectorQ[list] && Length[list] > 0
General: :spell! : Possible spelling error: new
symbol name "list" is similar to existing symbol "List".
Вычисление среднего геометрического для списка:
GeometricMean[list_] : = Apply
[Times, list"4 (I/Length [list])] /;
VectorQ[list] && Length[list] > 0
Вычисление гармонического среднего для списка:
HarmonicMean[list_] := Length[list]
/ Apply[Plus, I/list] /;
VectorQ[list] && Length[list] > 0
Обратите внимание на то, что при задании первой функции Mathematica предупреждает о том, что введенный идентификатор list подозрительно напоминает зарезервированный идентификатор List. Все приведенные выше функции не имеют смысла, если список пустой. Поэтому в них введен контроль за такой ситуацией.
Теперь можно выполнить расчеты по этим формулам.

Ввод (In)

Вывод (Out)

data={l,2,3,4}

{1, 2, 3, 4}

Mean [data]

5/2

GeometricMean [data]

2 3/4 3 l/4

N[%]

2.21336

HarmonicMean [data]

48/25

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

Статьи по теме

Комментарии запрещены.