Символьное дифференцирование дерева выражений
Когда суммы и произведения представлены в виде списков, рекурсивные селекторы и конструкторы могут получить новое выражение без вычисления исходного.
Как конструкторы данных отделяют алгебраическое упрощение от правил дифференцирования?
- Классификация чисел, переменных, сумм и произведений как данных выражений
- Рекурсивное применение правил дифференцирования суммы и произведения
- Упрощение случаев с нулем, единицей и числами в конструкторах
- Чтение возвращенной производной как нового дерева выражений
deriv выполняет диспетчеризацию по форме данных выражения. Числа дают 0, выбранная переменная дает 1, а списки сумм или произведений рекурсивно дифференцируют свои операнды.
make-sum и make-product отвечают за очистку представления. Они удаляют сложение с нулем, умножение на ноль или единицу и объединяют числовые операнды, поэтому ветви дифференцирования формулируют математические правила без повторения деталей упрощения.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Первая программа возвращает (+ x (+ x 3)). Вторая программа возвращает (+ 3 (+ x x)).
Проследите за тем, как deriv спускается по цитированному дереву, а затем наблюдайте, как make-sum и make-product удаляют случаи с нулем и единицей при повторном построении результата. Возвращаемый список представляет собой данные выражения, а не вычисленную числовую производную.
Измените программу и сравните результат.
Продифференцируйте '(* x (* x x)) по x. Заранее определите неупрощенные повторяющиеся члены, которые сохранят эти конструкторы.
Показать подсказку
Примените правило дифференцирования произведения в обоих узлах произведения. Эти конструкторы упрощают только ноль, единицу и два числовых операнда.