mapПримените функцию ко всем операндам объекта
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
map(object,f, <p1, p2, , …>) map(object,f, <p1, p2, , …>, <Unsimplified>)
map(object, f) возвращает копию object где каждый операнд x был заменен f(x). Сам объект не изменяется map (см. Пример 2).
Второй аргумент f может быть процедура, сгенерированная через -> или proc (например, x -> x^2 + 1), функциональная среда (например, sin), или функциональное выражение (например, sin@exp + 2*id).
Если дополнительные аргументы присутствуют, то каждый операнд x из object заменяется f(x, p1, p2, ...) (см. Пример 1).
Возможно применить оператор, такой как + или *, ко всем операндам object, при помощи его функционального эквивалента, такого как _plus или _mult. Смотрите пример 1.
В отличие от op, map не анализирует рациональные числа и комплексные числа далее. Таким образом, если аргумент является рациональным числом или комплексным числом, то f применяется к самому номеру а не к числителю и знаменателю или действительной части и мнимой части, соответственно (см. Пример 3).
Если object строка, затем f применяется к строке в целом а не к отдельным символам (см. Пример 3).
Если object выражение, затем f применяется к операндам f как возвращено op (см. Пример 1).
Если object последовательность выражения, затем эта последовательность не сглажена map (см. Пример 4).
Если object полином, затем f применяется к самому полиному а не ко всем его коэффициентам. Используйте mapcoeffs достигнуть последнего (см. Пример 3).
Если object список, набор, массив или hfarray, затем функциональный f применяется ко всем элементам соответствующей структуры данных.
Если object таблица, функциональный f применяется ко всем записям таблицы, не в индексы (см. Пример 9). Записи являются правыми сторонами операндов таблицы.
Если object элемент области библиотеки, затем паз "map" из области называется, и результат возвращен. Это может использоваться, чтобы расширить функциональность map к пользовательским областям. Если никакой "map" паз существует, затем f применяется к самому объекту (см. Пример 10).
map не оценивает его результат после замены; используйте eval достигнуть этого. Тем не менее, внутренние упрощения происходят после замены, если опция Unsimplified дан (см. Пример 8).
map не убывает рекурсивно в объект; функциональный f только применяется к операндам на первом уровне. Используйте misc::maprec для рекурсивной версии map (см. Пример 11).
Процедура f должно быть детерминировано и не должен иметь побочных эффектов (таких как изменение и использование глобальных переменных). Пользователь не имеет никакого контроля над упорядоченным расположением, в котором функция применяется к операндам объекта!
map работает на выражения:
map(a + b + 3, sin)
![]()
Дополнительные аргументы map передаются сопоставляемой функции:
map(a + b + 3, f, x, y)
![]()
В следующем примере мы добавляем 10 к каждому элементу списка:
map([1, x, 2, y, 3, z], _plus, 10)
![]()
Как большинство других функций MuPAD®, map не изменяет его первый аргумент, но возвращает модифицированную копию:
a := [0, PI/2, PI, 3*PI/2]: map(a, sin)
![]()
Список a все еще имеет его исходное значение:
a
![]()
map не анализирует рациональные и комплексные числа:
map(3/4, _plus, 1), map(3 + 4*I, _plus, 1)
![]()
map не анализирует строки:
map("MuPAD", text2expr)![]()
map не анализирует полиномы:
map(poly(x^2 + x + 1), _plus, 1)
![]()
Используйте mapcoeffs применять функцию ко всем коэффициентам полинома:
mapcoeffs(poly(x^2 + x + 1), _plus, 1)
![]()
Первый аргумент не сглажен:
map((1, 2, 3), _plus, 2)
![]()
Иногда функция MuPAD возвращает набор или список больших символьных выражений, содержащих математические константы и т.д. Чтобы получить лучшую интуицию о результате, можно сопоставить функциональный float ко всем элементам, который часто решительно уменьшает размер выражений:
solve(x^4 + x^2 + PI, x)

map(%, float)
![]()
В следующем примере мы удаляем значения всех глобальных идентификаторов на текущем сеансе MuPAD. Команда anames(All, User) возвращает набор с именами всех пользовательских глобальных идентификаторов, имеющих значение. Отображение функционального _delete к этому набору удаляет значения всех этих идентификаторов. Начиная с возвращаемого значения _delete пустая последовательность null(), результатом вызова является пустое множество:
x := 3: y := 5: x + y
![]()
map(anames(All, User), _delete)
![]()
x + y
![]()
Возможно выполнить произвольные действия со всеми элементами структуры данных через один map вызвать. Это работает путем передачи анонимной процедуры в качестве второго аргумента f. В следующем примере мы проверяем, что факт “целочисленный n ≥ 2 является главным, если и только если φ (n) = n - 1”, где φ обозначает функцию тотиента Эйлера, содержит для всего целого числа 2 ≤ n <10. Мы делаем это путем сравнения результата isprime(n) со значением истинности уравнения φ (n) = n - 1 для всех элементов n из списка, содержащего целые числа между 2 и 9:
map([2, 3, 4, 5, 6, 7, 8, 9],
n -> bool(isprime(n) = bool(numlib::phi(n) = n - 1)))![]()
Результат map не оценен далее. При желании необходимо запросить оценку явным образом eval:
map(sin(5), float); eval(%)
![]()
![]()
delete a: A := array(1..1, [a]); a := 0: map(A, sin); map(A, eval@sin); delete a:
![]()
![]()
![]()
Тем не менее, определенные внутренние упрощения происходят, такие как вычисление арифметических операций с числовыми аргументами. Следующий вызов заменяет sqrt(2) и PI приближениями с плавающей точкой и системой автоматически упрощает получившуюся сумму:
map(sin(5) + cos(5), float)
![]()
Этого внутреннего упрощения можно избежать путем предоставления опции Unsimplified:
map(sin(5) + cos(5), float, Unsimplified)
![]()
map примененный таблица изменяет только правые стороны (записи) каждого операнда таблицы. Примите, что записи обозначают цены нетто, и налог с продаж (16 процентов в этом случае) должен быть добавлен:
T := table(1 = 65, 2 = 28, 3 = 42): map(T, _mult, 1.16)

map может быть перегружен для элементов областей библиотеки, если slot"map" задан. В этом примере d область, ее элементы содержит два целых числа: индекс и запись (как таблица). Для хорошего входа и элементов печати этой области slots"new" и "print" заданы:
d := newDomain("d"):
d::new := () -> new(d, args()):
d::print := object -> _equal(extop(object)):
d(1, 65), d(2, 28), d(3, 42)![]()
Без паза "map" функциональный f будет применен к самому доменному элементу. Поскольку доменный d не имеет никакого паза "_mult", результатом является символьный _mult вызов:
map(d(1, 65), _mult, 1.16), type(map(d(1, 65), _mult, 1.16))
![]()
Паз "map" из этой области должен сопоставить заданную функцию только на второй операнд доменного элемента. Доменный d получает паз "map" и map работает правильно (в смысле авторов) с элементами этой области:
d::map := proc(obj, f)
begin
if args(0) > 2 then
d(extop(obj, 1), f(extop(obj, 2), args(3..args(0))))
else
d(extop(obj, 1), f(extop(obj, 2)))
end_if
end_proc:
map(d(1, 65), _mult, 1.16),
map(d(2, 28), _mult, 1.16),
map(d(3, 42), _mult, 1.16)![]()
map не работает рекурсивно. Предположим, что мы хотим к de-вложенному-множеству вложенный список. Мы используем map применять функциональный op, который заменяет список последовательностью его операндов ко всем записям списка l. Однако это только влияет на записи на первом уровне:
l := [1, [2, [3]], [4, [5]]]: map(l, op)
![]()
Используйте misc::maprec достигнуть желаемого поведения:
[misc::maprec(l, {DOM_LIST} = op)]![]()
|
Произвольный объект MuPAD |
| |
|
Любые объекты MuPAD приняты |
|
Получившиеся выражения далее не упрощены. |
Копия object с f примененный все операнды.
object