Calculus.jl
Введение
Пакет Calculus предоставляет инструменты для работы с основными вычислительными операциями дифференцирования и интегрирования. Его можно использовать для получения приближенных производных с помощью нескольких форм конечных разностей или для получения точных производных посредством символьного дифференцирования. Вы также можете вычислять определенные интегралы различными численными методами.
API
Большинство пользователей будут работать с ограниченным набором базовых функций.
-
derivative()
: используйте для функций из R в R -
second_derivative()
: используйте для функций из R в R -
Calculus.gradient()
: используйте для функций из R^n в R -
hessian()
: используйте для функций из R^n в R -
differentiate()
: используйте для выполнения символьного дифференцирования -
simplify()
: используйте для выполнения символьного упрощения -
deparse()
: используйте для получения обычного инфиксного представления выражений
Примеры использования
Существует несколько основных подходов к использованию пакета Calculus.
-
Использование конечного дифференцирования для вычисления производной в конкретной точке
-
Использование функций высших порядков для создания новых функций, вычисляющих производные
-
Использование символьного дифференцирования для получения точных производных для простых функций
Вычисление прямых конечных разностей
using Calculus # Сравнение с cos(0.0) derivative(sin, 0.0) # Сравнение с cos(1.0) derivative(sin, 1.0) # Сравнение с cos(pi) derivative(sin, float(pi)) # Сравнение с [cos(0.0), -sin(0.0)] Calculus.gradient(x -> sin(x[1]) + cos(x[2]), [0.0, 0.0]) # Сравнение с [cos(1.0), -sin(1.0)] Calculus.gradient(x -> sin(x[1]) + cos(x[2]), [1.0, 1.0]) # Сравнение с [cos(pi), -sin(pi)] Calculus.gradient(x -> sin(x[1]) + cos(x[2]), [float64(pi), float64(pi)]) # Сравнение с -sin(0.0) second_derivative(sin, 0.0) # Сравнение с -sin(1.0) second_derivative(sin, 1.0) # Сравнение с -sin(pi) second_derivative(sin, float64(pi)) # Сравнение с [-sin(0.0) 0.0; 0.0 -cos(0.0)] hessian(x -> sin(x[1]) + cos(x[2]), [0.0, 0.0]) # Сравнение с [-sin(1.0) 0.0; 0.0 -cos(1.0)] hessian(x -> sin(x[1]) + cos(x[2]), [1.0, 1.0]) # Сравнение с [-sin(pi) 0.0; 0.0 -cos(pi)] hessian(x -> sin(x[1]) + cos(x[2]), [float64(pi), float64(pi)])
Функции высших порядков
using Calculus g1 = derivative(sin) g1(0.0) g1(1.0) g1(pi) g2 = Calculus.gradient(x -> sin(x[1]) + cos(x[2])) g2([0.0, 0.0]) g2([1.0, 1.0]) g2([pi, pi]) h1 = second_derivative(sin) h1(0.0) h1(1.0) h1(pi) h2 = hessian(x -> sin(x[1]) + cos(x[2])) h2([0.0, 0.0]) h2([1.0, 1.0]) h2([pi, pi])
Символьное дифференцирование
using Calculus differentiate("cos(x) + sin(x) + exp(-x) * cos(x)", :x) differentiate("cos(x) + sin(y) + exp(-x) * cos(y)", [:x, :y])
Численное интегрирование
Пакет Calculus больше не предоставляет процедуры для одномерного численного интегрирования. Используйте вместо него пакет QuadGK.jl.
Участники
В разработке Calculus.jl принимали участие следующие авторы:
-
Джон Майлс Уайт (John Myles White)
-
Тим Холи (Tim Holy)
-
Андреас Ноак Дженсен (Andreas Noack Jensen)
-
Натаниэль Доу (Nathaniel Daw)
-
Блейк Джонсон (Blake Johnson)
-
Авик Сенгупта (Avik Sengupta)
-
Майлс Любин (Miles Lubin)
Пакет основан на идеях следующих авторов:
-
Марк Шмидт (Mark Schmidt)
-
Джонас Раух (Jonas Rauch)