Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to �нтеллектуальная Кобринщина

Map a Function over a List - Wolfram Mathematica

Применение функции к списку

Mathematica содержит множество мощных команд для работы со списками. Часто возникает необходимость применить функцию для каждого отдельного элемента в списке. В то время как поддерживающие списки функции делают это по умолчанию, Вы можете использовать команду Map для того, чтобы сделать это с функциями, не поддерживающими списки.

Для начала, создадим список целых чисел от 1 до 5:

In[293]:=

MapAFunctionOverAListRU_1.gif

Out[293]=

MapAFunctionOverAListRU_2.gif

Вы можете применить функцию к каждому элементу списка, используя команду Map; в этом примере используется функция f, для которой не задано определений:

In[294]:=

MapAFunctionOverAListRU_3.gif

Out[294]=

MapAFunctionOverAListRU_4.gif

Вы можете использовать /@ в качестве сокращенного отображения Map (вот та же самая команда, как в предыдущем примере):

In[295]:=

MapAFunctionOverAListRU_5.gif

Out[295]=

MapAFunctionOverAListRU_6.gif

Большинство математических функций имеют атрибут Listable, означающий, что они автоматически применяются к элементам списков:

In[296]:=

MapAFunctionOverAListRU_7.gif

Out[296]=

MapAFunctionOverAListRU_8.gif

In[297]:=

MapAFunctionOverAListRU_9.gif

Out[297]=

MapAFunctionOverAListRU_10.gif

Если функция не имеет атрибут Listable, в таком случае Вы можете использовать команду Map. Создадим список из пяти матриц 2?2:

In[298]:=

MapAFunctionOverAListRU_11.gif

Out[298]=

MapAFunctionOverAListRU_12.gif

Используем команду Map, чтобы применить MatrixForm к элементам списка, для отображения каждого из них в математической записи:

In[299]:=

MapAFunctionOverAListRU_13.gif

Out[299]=

MapAFunctionOverAListRU_14.gif

Теперь используем Map для вычисления характеристических значений каждой матрицы в списке:

In[300]:=

MapAFunctionOverAListRU_15.gif

Out[300]=

MapAFunctionOverAListRU_16.gif

Команда Map работает не только со списками. Она может быть использована для любого выражения:

In[301]:=

MapAFunctionOverAListRU_17.gif

Out[301]=

MapAFunctionOverAListRU_18.gif

    

Команда Apply является еще одной операцией функционального программирования. Она производит замену заголовка выражения.

Вы можете видеть как это работает, используя две неопределенные функции, f и g:

In[302]:=

MapAFunctionOverAListRU_19.gif

Out[302]=

MapAFunctionOverAListRU_20.gif

Команда Apply имеет сокращенную запись @@ (ниже - краткая запись той же самой команды, приведенной в предыдущем примере):

In[303]:=

MapAFunctionOverAListRU_21.gif

Out[303]=

MapAFunctionOverAListRU_22.gif

В Mathematica общие выражения отображаются в стандартной форме - StandardForm, но, лежащая в ее основе, полная форма - FullForm показывает, ка&# 1082; может быть использована команда Apply:

In[304]:=

MapAFunctionOverAListRU_23.gif

Out[304]=

MapAFunctionOverAListRU_24.gif

Например, так сумма заменяется произведением:

In[305]:=

MapAFunctionOverAListRU_25.gif

Out[305]=

MapAFunctionOverAListRU_26.gif

    

Команда Apply полезна когда Вы хотите превратить элементы списка в аргументы функции.

Создадим список из пяти упорядоченных пар целых чисел {a,b}:

In[12]:=

MapAFunctionOverAListRU_27.gif

Out[12]=

MapAFunctionOverAListRU_28.gif

Команда Mod находит остаток от деления первого числа упорядоченной пары на второе число:

In[10]:=

MapAFunctionOverAListRU_29.gif

Out[10]=

MapAFunctionOverAListRU_30.gif

Чтобы применить команду Mod ко всем парам, необходимо действовать на 1-ом уровне списка (заданном посредством {1}):

In[13]:=

MapAFunctionOverAListRU_31.gif

Out[13]=

MapAFunctionOverAListRU_32.gif

Вы можете использовать @@@ в качестве сокращенной формы для применения команды к 1-му уровню:

In[309]:=

MapAFunctionOverAListRU_33.gif

Out[309]=

MapAFunctionOverAListRU_34.gif

Это еще один способ найти решение, теперь с использованием чистой функции, задаваемой командой Function:

In[310]:=

MapAFunctionOverAListRU_35.gif

Out[310]=

MapAFunctionOverAListRU_36.gif

Здесь используется сокращенная форма команды Function:

In[311]:=

MapAFunctionOverAListRU_37.gif

Out[311]=

MapAFunctionOverAListRU_38.gif