Документация Engee

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)