На вход поступает выражение в виде дерева. Например:
( . x . ) + ( . x . )
Точка обозначает NULL. Таким образом строится дерево
Все операции и их деревья будут ниже
После чтения дерева, выполняются стандартные операции взятия производной. Например:
Функция diff() обозначает дифференцирование элементов выражений(переменных или чисел)
При дифференцированнии сложных функций, дерево производной этой функции становится довольно объемным, поэтому производятся оптимизации, упрощающие деревья.
Этот тип оптимизации работает для поддеревьев, не содержащих переменных. Это поддерево заменяется вычисленным значением. Например:
Этот тип оптимизации работает для определенных случаев (в т.ч. содержащих переменные). Полный список этих случаев перечислен в таблице:
Было | Стало |
---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Все стадии оптимизации дерева
- График изначальной функции и разложения в ряд Тейлора
- График изначальной функции и касательной к ней в точке 0
Рассмотрим пример работы программы для функции f(x) = sin(x) + cos(x^2)
Процесс оптимизации:
Добавлены речевые связки, которые часто используются в математической литературе
Результат дифференцирования:
График функции и ряда Тейлора до 5 члена:
График функции и график касательной в точке 0: