fbed99da

Дополнительные примеры работы с функциями



Дополнительные примеры работы с функциями

Приведем еще ряд примеров действия функций 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

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



Содержание раздела