DДифференциальный оператор для функций
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
f ' D(f) D([n1, n2, …],f)
D(f) или, альтернативно, f' вычисляет производную одномерного функционального f.
D([n1, n2, ...], f) вычисляет частную производную
многомерного функционального f (x 1, x 2, …).
MuPAD® имеет две функции для дифференцирования: diff и D. D представляет дифференциальный оператор, который может быть применен к функциям; diff используется, чтобы дифференцировать арифметические выражения. Математически, D(f)(x) совпадает с diff(f(x), x); D([1, 2], f)(x, y) совпадает с diff(f(x, y), x, y). Символьные вызовы D и diff могут быть преобразованы друг в друга через rewrite. Cf. Пример 8.
D(f) возвращает производную
одномерного functionf. f' является сокращением для D(f).
Если f является многомерной функцией и
обозначает частную производную f относительно ее n-th аргумент, то D([n1, n2, ...], f) вычисляет частную производную
. Cf. Пример 5. В частности, D([ ], f) возвращает сам f.
Это принято та поездка на работу частных производных. Внутренне, D([n1, n2, ...], f) преобразован в D([m1, m2, ...], f), где [m1, m2, ...] = sort([n1, n2, ...]).
f может быть любым объектом, который может представлять функцию. В частности, f может быть функциональным выражением, созданным из простых функций посредством арифметических операторов (+, -, *, /, ^, @, @@). Любой идентификатор, отличающийся от CATALAN, ЭЙЛЕРА и PI, рассматривается как “неизвестная” функция; то же самое содержит для элементов областей ядра, не явным образом упомянутых на этой странице. Cf. Пример 1. Любой номер и каждый из трех постоянных идентификаторов выше рассматриваются как постоянная функция. Cf. Пример 2.
Если f является списком, набором, таблицей или массивом, то D применяется к каждой записи f. Cf. Пример 3.
Полиномиальный f типа DOM_POLY рассматривается как полиномиальная функция, indeterminates быть аргументами функции. Cf. Пример 6.
Если f является функциональной средой, процедурой, то D может вычислить производную в некоторых случаях; смотрите раздел “Background” ниже. Если это не возможно, на символьный звонок D отвечают.
Более высокие частные производные D([n1], D([n2], f)) упрощены до D([n1, n2], f). Cf. Пример 7.
Производную одномерного функционального f — обозначенный D(f) — синтаксически отличают от частной производной D([1], f) относительно первой переменной, даже если f представляет одномерную функцию.
Обычные правила дифференцирования реализованы:
D(f + g) = D(f) + D(g),
D(f * g) = f * D(g) + g * D(f),
D(1/f) = -D(f) / f^2,
D(f @ g) = D(f) @ g * D(g).
Обратите внимание на то, что состав функций записан как f@g и не как f(g).
В порядке выразить n-th производная одномерной функции для символьного n, можно использовать “повторный оператор состава” @@. Cf. Пример 9.
D использует option remember.
D(f) вычисляет производную функционального f:
D(sin), D(x -> x^2), D(id)
![]()
D также работает на более комплексные функциональные выражения:
D(sin @ exp + 2*(x -> x*ln(x)) + id^2)
![]()
Если f является идентификатором без значения, на символьный звонок D отвечают:
delete f: D(f + sin)
![]()
То же самое содержит для объектов типа ядра, который не может рассматриваться как функции:
D(NIL)
![]()
f' является сокращением для D(f):
(f + sin)', (x -> x^2)', id'
![]()
Константы рассматриваются как постоянные функции:
PI', 3', (1/2)'
![]()
Обычные правила дифференцирования реализованы. Обратите внимание на то, что списки и наборы могут также быть взяты в качестве входа; в этом случае D применяется к каждому элементу списка или устанавливается:
delete f, g: D([f+g, f*g]); D({1/f, f@g})![]()

Производные большинства специальных функций библиотеки могут быть вычислены. Снова, id обозначает тождественное отображение:
D(tan); D(sin*cos); D(1/sin); D(sin@cos); D(2*sin + ln)
![]()
![]()
![]()
![]()
![]()
D может также вычислить производные процедур:
f := x -> x^2: g := proc(x) begin tan(ln(x)) end: D(f), D(g)
![]()
Мы дифференцируем функцию двух аргументов путем передачи списка индексов в качестве первого аргумента к D. В примере ниже, мы сначала дифференцируемся относительно второго аргумента и затем дифференцируем результат относительно первого аргумента:
D([1, 2], (x, y) -> sin(x*y))
![]()
Порядок частных производных не релевантен:
D([2, 1], (x, y) -> sin(x*y))
![]()
delete f, g:
Полином рассматривается как полиномиальная функция:
D(poly(x^2 + 3*x + 2, [x]))
![]()
Мы дифференцируем следующий двумерный полиномиальный f дважды относительно его второй переменной y и однажды относительно его первой переменной x:
f := poly(x^3*y^3, [x, y]): D([1, 2, 2], f) = diff(f, y, y, x)
![]()
delete f:
Сглажены вложенные вызовы D:
D([1], D([2], f))
![]()
Однако это не содержит для вызовов только с одним аргументом, поскольку D(f) и D([1], f) не считаются тем же самым:
D(D(f))
![]()
D может только быть применен к функциям, тогда как diff имеет только смысл для выражений:
D(sin), diff(sin(x), x)
![]()
Применение D к выражениям и diff к функциям не имеет никакого смысла:
D(sin(x)), diff(sin, x)
![]()
rewrite позволяет переписывать выражения с D в diff - выражение:
rewrite(D(f)(y), diff), rewrite(D(D(f))(y), diff)

Обратная конверсия возможна также:
map(%, rewrite, D)
![]()
Иногда вам, возможно, понадобится n-th производная функции, где n неизвестен. Это может быть достигнуто с помощью повторного оператора состава. Например, давайте запишем функцию, которая вычисляет k-th полином Тейлора функционального f в точке x 0 и использует x в качестве переменной для того полинома:
kthtaylorpoly:= (f, k, x, x0) -> _plus(((D@@n)(f)(x0) * (x - x0)^n / n!) $ n = 0..k): kthtaylorpoly(sin, 7, x, 0)
![]()
delete kthtaylorpoly:
Опытные пользователи могут расширить D к своим собственным специальным математическим функциям (см. раздел “Background” ниже). С этой целью встройте свою математическую функцию f, скажем, в функцию environmentf и реализуйте поведение D для этой функции как слот "D" функциональной среды. Слот должен обработать два случая: это может быть или вызвано только одним аргументом, который равняется f, или двумя аргументами, где второй равняется f. В последнем случае первый аргумент является списком произвольных много индексов; то есть, слот должен смочь обработать более высокие частные производные также.
Предположим, например, что нам дают функциональный f (t, x, y), и что мы ничего не знаем о f за исключением того, что это дифференцируемо бесконечно часто и удовлетворяет дифференциальное уравнение с частными производными
. Чтобы заставить MuPAD устранить производные относительно t, мы можем сделать следующее:
f := funcenv(f):
f::D :=
proc(indexlist, ff)
local
n : DOM_INT, // Number of t-derivatives.
list_2_3 : DOM_LIST; // List of indices of 2's and 3's.
// These remain unchanged.
begin
if args(0) <> 2 then
error("Wrong number of arguments")
end_if;
n := nops(select(indexlist, _equal, 1));
list_2_3 := select(indexlist, _unequal, 1);
// rewrite (d/dt)^n = (d^2/dx^2 + d^2/dy^2)^n
_plus(binomial(n, k) *
hold(D)(sort([2 $ 2*(n-k), 3 $ 2*k].list_2_3), ff)
$ k = 0..n)
end_proc:Теперь, частные производные относительно первого аргумента t переписаны производными относительно второго и третьего аргумента:
D([1], f^2)(t, x, y)
![]()
D([1, 2, 1], f)
![]()
delete f:
|
Функция или функциональное выражение, массив, список, полином, набор или таблица |
|
Индексы: положительные целые числа |
функционируйте или функциональное выражение. Если f является массивом или списком и т.д., соответствующий объект, содержащий производные записей, возвращен.
f
Если f является областью или функциональной средой с slot"D", этот слот называется, чтобы вычислить производную. Процедура слота имеет тот же синтаксис вызова как D. В частности — и в отличие от slot"diff" — слот должен смочь вычислить более высокие частные производные, потому что список индексов может иметь длину, больше, чем одна. Cf. Пример 10.
Если f является процедурой, функциональной средой без слота "D", то f вызван вспомогательными идентификаторами в качестве аргументов. Результат вызова затем дифференцируется с помощью функционального diff. Если результат diff приводит к выражению, которое может рассматриваться как функция во вспомогательном identifers, то эта функция возвращена, в противном случае на неоцененный звонок D отвечают.
Давайте возьмем функциональная средаsin в качестве примера. Это не имеет никакого слота "D", таким образом процедура, op(sin, 1), который ответственен за оценку синусоидальной функции, используется, чтобы вычислить D(sin), можно следующим образом. Эта процедура применяется к вспомогательному идентификатору, скажите x, и дифференцируемый относительно этого идентификатора через diff. Результатом является diff(sin(x), x) = cos(x). Через fp::expr_unapply и fp::unapply, функциональный cos вычисляется как производная sin.