misc::maprecСопоставьте функцию с подвыражениями выражения
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
misc::maprec(ex, selector = funci, …, <PreMap | PostMap>, <NoOperators>, <Unsimplified>)
misc::maprec(ex, selector=funci) сопоставляет функциональный funci ко всем подвыражениям выражения ex это удовлетворяет данному критерию (заданный selector) и замены каждое выбранное подвыражение s funci(s).
Несколько различных функций могут быть сопоставлены с подвыражениями, удовлетворяющими различным критериям выбора.
misc::maprec(ex, selector1 = funci1, …, selectorn = funcin) выполняет два шага: это тестирует ли ex соответствует критерию выбора, заданному некоторым селекторным selector_k (и, если да, ex замен funci_k(ex)); и это применяет себя рекурсивно ко всем операндам ex. Порядок этих шагов определяется опциями PreMap и PostMap.
Селекторы применяются слева направо; если выражение соответствует некоторому критерию выбора, никакие дальнейшие селекторы не пробуют.
selector может иметь две формы. Это может быть набор {t 1, …, t n}. Здесь подвыражение s из ex выбран, если тип (s1) является одним из типов t 1, …, t n. Если это не набор, подвыражение s из ex выбран если p(s) возвращает TRUE. Когда каждый объект MuPAD® может быть применен как функция к sP может иметь любой тип в последнем случае.
Для того, чтобы не выбрать подвыражение, селекторная потребность не возвращают FALSE; это удовлетворяет, что не возвращает TRUE.
Если ни один опция PreMap ни опция PostMap дан, затем PreMap используется.
Используйте misc::breakmap команда в funci для того, чтобы остановить рекурсивное отображение. Смотрите страницу справки misc::breakmap для примера.
Только подвыражения доменного типа DOM_ARRAY, DOM_EXPR, DOM_LIST, DOM_SET, и DOM_TABLE сопоставлены рекурсивно, а также доменные элементы доменного T для которого паз T::enableMaprec существует и равняется TRUE; паз T::map работа правильно должна затем существовать, также. К подвыражениям других типов, selector применяется, но misc::maprec не сопоставлен с их операндами. (Это должно избежать нежелательных замен.), Если вы хотите рекурсивно вызвать их, любой добавляет enableMaprec- паз или использование selector это выбирает такие подвыражения, и сделайте funci инициируйте другое рекурсивное отображение.
misc::maprec является сверхзагружаемым. Если область подвыражения имеет метод "maprec", затем этот метод вызван подвыражением и другими аргументами вызова.
Подвыражение заменяется результатом, но misc::maprec не сопоставлен с его операндами; такое рекурсивное отображение должно быть сделано доменным методом при желании.
Операторы выражений (op(expression, 0)) также сопоставлены рекурсивно как все другие операнды. Используйте NoOperators выключить это.
В следующем примере каждое целое число данного выражения a+3+4 подставлен значением 10. Начиная с 10(n) возвращает 10 для каждого целочисленного n, это достаточно, чтобы записать 10 вместо n -> 10 здесь.
misc::maprec(hold(a+3+4), {DOM_INT} = 10)![]()
В примере выше, мы использовали hold подавить оценку выражения потому что в противном случае a+3+4 оценен к a+7 и мы получаем результат:
misc::maprec(a+3+4, {DOM_INT} = 10)![]()
Упрощение получившегося 10 + 10 к 20 может избежаться при помощи опции Unsimplified:
misc::maprec(hold(a+3+4), {DOM_INT} = 10, Unsimplified)![]()
Теперь мы даем пример где selector функция. Мы хотим устранить все простые числа из выражения.
misc::maprec(hold(_plus)(i $ i=1..20), isprime= null(), PostMap)
![]()
Здесь isprime возвращает TRUE для каждого простого числа между 1 и 20. Каждое простое число между 1 и 20 заменяется пустым указателем () (поскольку null()(p) дает null()) что означает, что вышеупомянутый вызов вычисляет сумму всех непростых чисел между 1 и 20.
Обычно, misc::maprec рекурсивно вызывает также в операторы подвыражений. Это может быть нежелательно во многих случаях:
misc::maprec(a+b, {DOM_IDENT}= (x -> x.1))![]()
Мы только хотели заменить слагаемых, но не оператор. Используя опцию NoOperators помогает:
misc::maprec(a+b, {DOM_IDENT}= (x -> x.1), NoOperators)![]()
|
Любой объект MuPAD |
|
Любой объект MuPAD |
|
Любой объект MuPAD |
|
Для каждого подвыражения |
|
Для каждого подвыражения |
|
Селектор не применяется к оператору |
|
Получившиеся выражения далее не упрощены. |
misc::maprec может возвратить любой объект MuPAD.
ex