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.

Примеры

Пример 1

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'

Пример 2

Константы рассматриваются как постоянные функции:

PI', 3', (1/2)'

Пример 3

Обычные правила дифференцирования реализованы. Обратите внимание на то, что списки и наборы могут также быть взяты в качестве входа; в этом случае D применяется к каждому элементу списка или устанавливается:

delete f, g: D([f+g, f*g]); D({1/f, f@g})

Пример 4

Производные большинства специальных функций библиотеки могут быть вычислены. Снова, id обозначает тождественное отображение:

D(tan); D(sin*cos); D(1/sin); D(sin@cos); D(2*sin + ln)

Пример 5

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:

Пример 6

Полином рассматривается как полиномиальная функция:

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:

Пример 7

Сглажены вложенные вызовы D:

D([1], D([2], f))

Однако это не содержит для вызовов только с одним аргументом, поскольку D(f) и D([1], f) не считаются тем же самым:

D(D(f))

Пример 8

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)

Пример 9

Иногда вам, возможно, понадобится 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:

Пример 10

Опытные пользователи могут расширить 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

Функция или функциональное выражение, массив, список, полином, набор или таблица

n1, n2, …

Индексы: положительные целые числа

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

функционируйте или функциональное выражение. Если 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.