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