Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
матан вопросы и ответы.doc
Скачиваний:
136
Добавлен:
23.11.2018
Размер:
2.11 Mб
Скачать
  1. Правила дифференцирования функций

Основная идея автоматического дифференцирования очень проста: к кодовому списку функции применяются правила элементарные дифференцирования строка за строкой до тех пор, пока не получится список команд для вычисления производной. Необходимо отметить, что если функция является дифференцируемой, то это не означает, что ее производная (или даже сама функция) может быть вычислена для всех значений входных переменных. При выполнении на ЭВМ последовательности команд кодового списка попытка деления на нуль или вычисление логарифма неположительного числа будут приводить к сообщениям об ошибках.

Уточним теперь термин "производная", которым мы будем пользоваться. В большинстве приложений имеется в виду частная производная по переменным, указанным в обозначении ее. Например, для функции (1.1) можно получить

(2.1)

или

(2.2)

Эти формулы получаются по правилам дифференцирования функций одной переменной, если считать все другие переменные, входящие в формулу, константами. Таким образом, в случае, когда все переменные независимые, частная производная  интерпретируется как величина изменения функции  в зависимости от . Если, однако, переменная  сама есть функция от  и потому не является независимой, то  на самом деле будет функцией одного , и искомая производная будет обыкновенной производной, которая вычисляется по формуле

. (2.3)

В общем случае предположим, что f и yзависят также от переменныхu, v, w, …, которые не зависят от х. Тогда скорость изменения  по х называется квазиполной производной  по х, которая обозначается  и дается формулой

. (2.4)

Расширение этих понятий и формул на функции  переменных очевидно и может быть найдено в любом вузовском учебнике по математическому анализу.

В сложных программах формула, задающая  как функцию х (и, может быть, других переменных), может находиться на большом удалении от формулы для функции , подлежащей дифференцированию. Это может приводить к неверным выкладкам, если зависимость  от х будет потеряна. Поэтому необходимо быть осмотрительным при вычислении требуемой производной. Эта ситуация встречается даже в простых программах, когда вводятся промежуточные обозначения при записи сложной функции. Например, формула

G = X^2 + EXP(X*(Y+X*Z)/Y) + Y +X*Z (2.5)

может быть записана в виде

U = Y+X/Z V = (X*U)/Y                     (2.6) G = X^2 + EXP(V) + U.

Формальная частная производная от G по Х определяется последней строкой (2.6) и дает 2*Х. Чтобы получить частную производную по Х от функции G, заданной последовательностью формул (2.6), которая определяет G корректно, требуется дифференцировать U и V и применить расширенную формулу (2.4).

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

(2.7)

В терминах операции композиции функций, обозначаемой через , функция  может быть записана как , а ее значение в точке х дается формулой . Формула (2.7) для производной по х в этих обозначениях примет вид

, (2.8)

где операция  обозначает обычное умножение.

Те же самые рассуждения применимы к функции , являющейся композицией n функций , т.е.

. (2.9)

В точке х производная  имеет вид:

. (2.10)

Таким образом, чтобы вычислить производную составной функции , задаваемой формулой (2.9), необходимо знать n производных  и значения n множителей в правой части (2.10). Представление  в виде сложной функции (2.9) тесно связано с идеей базового представления функции в виде базовой последовательности и, таким образом, ее представления в терминах кодового списка.