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
.