Дифференцирование

 

Численное дифференцирование и интегрирование были одними из первых приложений для вычислительных машин. Формальное дифференцирование было реализовано на ранних этапах развития вычислительной техники в 1953 году. Дифференцирование является алгоритмической процедурой, так как знание производных элементарных функций и следующих четырех правил:

 

1. (a+b)'=a'+b' - дифференцирование суммы,

2. (a b)'=a' b+a b' - дифференцирование произведения,

3. (a / b)'=(a' b-a b') / b^2 - дифференцирование отношения,

4. f(g(x))'=f ' (g(x)) g'(x) - дифференцирование сложной функции,

позволяет нам продифференцировать произвольную функцию.

Фактически, настоящей проблемой при дифференцировании является упрощение результата, так как если его не упрощать, то производная от 2x+1 формально выдается в виде 0x+2*1+0. В силу этого, в современных универсальных программах алгоритм дифференцирования стал значительно сложнее, так как в данных пакетах используется достаточно широкий класс кусочно-непрерывных функций.

Алгоритм дифференцирования достаточно прост и, поэтому, попробуем реализовать этот алгоритм для дифференцирования полиномов от одной переменной

P = a[n]*x^n + a[n-1]*x^(n-1) + ... + a[0]

Замечание: Работа компьютера напоминает работу мельницы: засыпаешь зерно - получаешь муку, а засыпаешь камни - получаешь песок. Это особенно важно при работе с системами символьных вычислений. Перед началом работы с Maple необходимо понять цель работы, продумать различные подходы к решению проблемы и, как это не парадоксально, скорее всего, уже знать или предполагать конечный ответ.

Итак, для того чтобы продифференцировать полином нам надо:

1. отличать в выражении P переменную x от коэффициентов a[k] и показателей степеней n;

2. различать математические операции - сумму, произведение и степень;

3. задать правила дифференцирования.

Начнем с выделения различных частей выражения. В Maple для этих целей служит команда op(i,e) которая выделяет имя (операнд) под номером i из выражения e. Общее число операндов в выражении определяется командой nop(e).