Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
MuPAD® обеспечивает множество инструментов для обработки встроенных математических функций, таких как sin
потому что
exp
, и так далее. Эти инструменты реализуют математические свойства этих функций. Типичными примерами является float
подпрограмма преобразования, diff
функция дифференцирования или expand
функция, которую вы используете, чтобы управлять выражениями:
float(sin(1)); diff(sin(x), x, x, x); expand(sin(x + 1))
Можно сказать, что математическое знание о встроенных функциях распределяется по нескольким системным функциям: float
знает, как вычислить числовые приближения синусоидальной функции, diff
знает производную синусоидальной функции и expand
знает теоремы сложения тригонометрических функций.
Когда вы реализуете свою собственную функцию, можно интегрировать ее в систему MuPAD, информируя другие функции, как работать с этой новой функцией правильно. Если новая функция состоит только из встроенных функций MuPAD, то вы не должны делать дополнительные шаги. Все функции MuPAD взаимодействуют правильно с новой функцией:
f := x -> (x*sin(x)): diff(f(x), x)
Однако, если вы реализуете функцию, которая не состоит из стандартных объектов MuPAD (например, новая специальная функция), необходимо распределить знание о математическом значении новой функции к стандартным функциям MuPAD, таким как diff
расширение
, float
, и так далее. Эта дополнительная задача необходима для интеграции новой функции с остальной частью системы. Например, вы можете хотеть дифференцировать выражение, которое содержит и новую функцию и некоторые встроенные функции, и такое дифференцирование только возможно через стандартную программу дифференцирования MuPAD. Поэтому эта стандартная программа должна знать, как обработать новый символ.
Функциональные среды использования MuPAD (область вводят DOM_FUNC_ENV
) интегрировать функции в систему. Функциональная среда хранит специальные функциональные атрибуты (slots
) во внутренней таблице. Каждый раз, когда сверхзагружаемая системная функция, такая как diff
расширение
, или float
, сталкивается с объектом типа DOM_FUNC_ENV
, это ищет функциональную среду соответствующий паз. Если системная функция находит соответствующий паз, она вызывает тот паз и возвращает значение, произведенное пазом. Все встроенные функции MuPAD реализованы как функциональные среды:
domtype(sin), domtype(exp)
Можно вызвать функциональную среду, когда вы вызвали бы любую функцию MuPAD или процедуру:
sin(1.7), exp(1.0)
Предположим, что вы реализуете полные функции эллиптического интеграла первого и второго вида, K(z)
и E(z)
. Эти функции появляются в различных контекстах, таких как вычисление периметра замещающего знака, гравитационного или электростатического потенциала универсального звонка и вероятности, что случайный обход в трех измерениях когда-либо проходит источник. Эллиптические интегралы имеют следующие специальные значения:
, E (1) = 1.
MuPAD предоставляет встроенным функциям ellipticE
и ellipticK
для вычисления этих эллиптических интегралов. Однако можно реализовать собственные функции для той же задачи. Например, запишите процедурам ellipE
и ellipK
. Эти процедуры задают значения эллиптических интегралов для специальных значений x
. Для всех других значений аргументов значения эллиптических интегралов неизвестны, и процедуры возвращают символьные выражения ellipE(x)
и ellipK(x)
. Используйте procname
возвратить символьные выражения:
ellipE := proc(x) begin if x = 0 then PI/2 elif x = 1 then 1 else procname(x) end_if end_proc:
ellipK := proc(x) begin if x = 0 then PI/2 elif x = 1/2 then 8*PI^(3/2)/gamma(-1/4)^2 elif x = -1 then gamma(1/4)^2/4/sqrt(2*PI) else procname(x) end_if end_proc:
ellipE
и ellipK
возвратите специальные значения для конкретных аргументов. Для всех других аргументов они возвращают символьные выражения:
ellipE(0), ellipE(1/2), ellipK(12/17), ellipK(x^2 + 1)
Первые производные этих эллиптических интегралов следующие:
, .
Стандартное дифференцирование MuPAD функционирует diff
не знает об этих правилах. Поэтому пытаясь дифференцировать ellipE
и ellipK
просто возвращает символьные обозначения производных:
diff(ellipE(x), x), diff(ellipK(x), x)
Сделать diff
работайте с новыми функциями, создайте функциональные среды из процедур ellipE
и ellipK
. Кроме того, функциональные среды позволяют вам управлять внешним видом символьных вызовов функции в выходных параметрах.
Функциональная среда состоит из трех операндов.
Первый операнд является процедурой, которая вычисляет возвращаемое значение вызова функции.
Второй операнд является процедурой для печати символьного вызова функции на экране.
Третий операнд является таблицей, которая задает, как системные функции обрабатывают символьные вызовы функции.
Чтобы создать функциональные среды, используйте funcenv
. Например, создайте функциональные среды ellipE
и ellipK
. Используйте второй аргумент, чтобы указать что символьные вызовы ellipE
и ellipK
должен появиться как E
и K
выходные параметры :
output_E := f -> hold(E)(op(f)): ellipE := funcenv(ellipE, output_E):
output_K := f -> hold(K)(op(f)): ellipK := funcenv(ellipK, output_K):
Несмотря на то, что ellipE
и ellipK
теперь функциональные среды, можно вызвать их, когда вы вызвали бы любую другую функцию MuPAD:
ellipE(0), ellipE(1/2), ellipK(12/17), ellipK(x^2+1)
Третий аргумент funcenv
таблица функциональных атрибутов. Это говорит системные функции (такие как float
diff
расширение
, и так далее), как обработать символьные вызовы формы ellipE(x)
и ellipK(x)
. Можно обновить эту таблицу, задающую правила для новой функции. Например, задайте новые правила дифференцирования путем присвоения соответствующих процедур diff
паз функциональных сред:
ellipE::diff := proc(f,x) local z; begin z := op(f); (ellipE(z) - ellipK(z))/(2*z) * diff(z, x) end_proc:
ellipK::diff := proc(f,x) local z; begin z := op(f); (ellipE(z) - (1-z)*ellipK(z))/ (2*(1-z)*z) * diff(z, x) end_proc:
Теперь каждый раз, когда f = ellipE(z)
, и z
зависит от x
, вызов diff(f, x)
использует процедуру, присвоенную ellipE::diff
:
diff(ellipE(z), z); diff(ellipE(y(x)), x); diff(ellipE(x*sin(x)), x)
Новая стандартная программа дифференцирования также находит производные высшего порядка:
diff(ellipE(x), x, x)
Начиная с taylor
функционируйте внутренне вызывает diff
, новая стандартная программа дифференцирования также позволяет вам вычислить Разложения Тейлора эллиптических интегралов:
taylor(ellipK(x), x = 0, 6)
Если производная функции содержит саму функцию, стандартная программа интегрирования имеет хороший шанс нахождения символьных интегралов после того, как вы реализуете diff
атрибуты. Например, int
теперь вычисляет следующие интегралы:
int(ellipE(x), x)
int(ellipK(x), x)