funcenv

Создайте функциональную среду

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

funcenv(f1, <f2>, <slotTable>)

Описание

funcenv(f) создает функциональную среду из f.

funcenv подачи для генерации функциональной среды доменного типа DOM_FUNC_ENV.

С точки зрения пользователя функциональные среды похожи на процедуры и могут быть названы как любая функция MuPAD®.

Однако в отличие от простых процедур, функциональная среда позволяет тесную интеграцию в систему MuPAD. В частности, стандартные системные функции, такие как diffрасширение, float и т.д. может быть сказан, как действовать на символьные вызовы функции к функциональной среде.

Для этого функциональная среда хранит специальные функциональные атрибуты (пазы) во внутренней таблице. Каждый раз, когда сверхзагружаемая системная функция, такая как diffрасширение, float сталкивается с объектом типа DOM_FUNC_ENV, его поисковые запросы функциональная среда для соответствующего паза. Если найдено, это вызывает соответствующий паз и возвращает значение, произведенное пазом.

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

Смотрите Пример 1 ниже для получения дополнительной информации.

Первый аргумент f1 из funcenv определяет оценку вызовов функции. С f:= funcenv(f1), вызов f(x) возвращает результат f1(x). Обратите внимание на то, что вызовы формы f:= funcenv(f) возможны (и, на самом деле, типичны). Этот вызов встраивает процедуру f в функциональную среду того же имени. Исходная процедура f хранится внутренне в функциональной среде f. После этого вызова дальнейшие функциональные атрибуты могут быть присоединены к f через slot функция.

Второй аргумент f2 из funcenv определяет экран выход символьных вызовов функции. Рассмотрите f:= funcenv(f1, f2). Если вызов f(x) возвращает символьный вызов функции f(x) с 0-th операндом f, затем f2 называется: возвращаемое значение f2(f(x)) используется в качестве экрана выход f(x).

Примечание

Остерегайтесь: f2(f(x)) не должен приводить к результату, содержащему дальнейший символьный вызов f, потому что это приведет к бесконечной рекурсии, вызывая сообщение об ошибке.

Третий аргумент slotTable из funcenv таблица, содержащая функциональные атрибуты (пазы). Таблица должна использовать строки в качестве индексов, чтобы обратиться к системным функциям. Например,

 
   slotTable := table("diff" = mydiff, "float" = myfloat):      f
:= funcenv(f1, f2, slotTable): 

присоединяет функции паза mydiff и myfloat к f. Они вызваны системными функциями diff и float, соответственно, каждый раз, когда они сталкиваются с символьным выражением f(x) с 0-th операндом f. Внутренняя таблица паза может быть изменена или заполнена дополнительными функциональными атрибутами через функциональный slot.

Если первый аргумент f1 из funcenv самостоятельно функциональная среда, затем возвращаемое значение является физической копией f1.

Документация floatпечать, и slot обеспечивает дальнейшие примеры, включающие функциональные среды.

Примеры

Пример 1

Мы хотим ввести функциональный f это представляет решение дифференциального уравнения. Во-первых, мы задаем функциональный f, который отвечает на любой звонок f(x) символически:

f := proc(x) begin procname(args()) end_proc: f(x), f(3 + y)

Из-за дифференциального уравнения, производных f может быть переписан в терминах f. Как мы можем сказать системе MuPAD дифференцировать символьные вызовы функций, такие как f(x) соответственно? Для этого мы сначала должны встроить процедуру f в функциональную среду:

f := funcenv(f):

Функциональная среда ведет себя как исходная процедура:

f(x), f(3 + y)

Системные функции, такие как diff все еще обработайте символьные вызовы f как вызывает к неизвестным функциям:

diff(f(x + 3), x)

Однако как функциональная среда, f может получить атрибуты та перегрузка системные функции. Следующий slot вызовите присоединяет фиктивный "diff" припишите f:

f::diff := mydiff:  diff(2*f(x^2) + x, x)

Мы присоединяем более значимый "diff" припишите f это на основе. Обратите внимание на то, что произвольные вызовы diff(f(y), x1, x2, ..) должны быть обработаны этим пазом:

fdiff := proc(fcall) local y; begin
    y:= op(fcall, 1);
    (y + sin(y)*f(y))*diff(y, args(2..args(0)))
end_proc:
f := slot(f, "diff", fdiff):

Теперь, насколько дифференцирование затронуто, функциональный f полностью интегрирован в MuPAD:

diff(f(x), x), diff(f(x), x, x)

diff(sin(x)*f(x^2), x)

Поскольку Разложение Тейлора вокруг конечных точек только должно оценить производные, также Разложения Тейлора f может быть вычислен:

taylor(f(x^2), x = 0, 9)

delete f, fdiff:

Пример 2

Предположим, что вы задали функциональный f это может возвратить себя символически, и вы хотите такие символьные выражения формы f(x,...) быть распечатанным специальным способом. С этой целью встройте свой proceduref в функциональной среде и предоставлении выходная процедура в качестве второго аргумента к соответствующему funcenv вызвать. Каждый раз, когда выражение формы f(x,...) должен быть распечатан, выходная процедура будет вызвана аргументами x,... из выражения:

f := funcenv(f, 
         proc(x) begin 
            if nops(x) = 2 then
              "f does strange things with its arguments ".
              expr2text(op(x, 1))." and ".expr2text(op(x,2))
            else
              FAIL
            end
         end):
delete a, b:
print(f(a, b)/2):
print(f(a, b, c)/2):

delete f:

Параметры

f1

Произвольный объект MuPAD. Как правило, процедура. Это обрабатывает оценку вызова функции к функциональной среде.

f2

Процедура, обрабатывающая экран выход символьных вызовов функции

slotTable

Таблица функциональных атрибутов (пазы)

Возвращаемые значения

Функциональная среда типа DOM_FUNC_ENV.

Алгоритмы

Математические функции, такие как exp, ln и т.д. или abs, Re\Im и т.д. реализованы как функциональные среды.