Блокноты 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 таблица функциональных атрибутов. Это говорит системные функции (такие как floatdiffрасширение, и так далее), как обработать символьные вызовы формы 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)
![]()