Number of watchers on Github  97 
Number of open issues  23 
Average time to close an issue  14 days 
Main language  Julia 
Average time to merge a PR  3 days 
Open pull requests  13+ 
Closed pull requests  8+ 
Last commit  over 1 year ago 
Repo Created  over 6 years ago 
Repo Last Updated  over 1 year ago 
Size  146 KB 
Organization / Author  johnmyleswhite 
Contributors  18 
Page Updated  20180321 
Do you use Calculus.jl? Leave a review!  
View open issues (23)  
View Calculus.jl activity  
View on github  
Fresh, new opensource launches 🚀🚀🚀  
Trendy new open source projects in your inbox!
View examples

The Calculus package provides tools for working with the basic calculus operations of differentiation and integration. You can use the Calculus package to produce approximate derivatives by several forms of finite differencing or to produce exact derivative using symbolic differentiation. You can also compute definite integrals by different numerical methods.
Most users will want to work with a limited set of basic functions:
derivative()
: Use this for functions from R to Rsecond_derivative()
: Use this for functions from R to RCalculus.gradient()
: Use this for functions from R^{n} to Rhessian()
: Use this for functions from R^{n} to Rdifferentiate()
: Use this to perform symbolic differentiationsimplify()
: Use this to perform symbolic simplificationdeparse()
: Use this to get usual infix representation of expressionsThere are a few basic approaches to using the Calculus package:
using Calculus
# Compare with cos(0.0)
derivative(sin, 0.0)
# Compare with cos(1.0)
derivative(sin, 1.0)
# Compare with cos(pi)
derivative(sin, float(pi))
# Compare with [cos(0.0), sin(0.0)]
Calculus.gradient(x > sin(x[1]) + cos(x[2]), [0.0, 0.0])
# Compare with [cos(1.0), sin(1.0)]
Calculus.gradient(x > sin(x[1]) + cos(x[2]), [1.0, 1.0])
# Compare with [cos(pi), sin(pi)]
Calculus.gradient(x > sin(x[1]) + cos(x[2]), [float64(pi), float64(pi)])
# Compare with sin(0.0)
second_derivative(sin, 0.0)
# Compare with sin(1.0)
second_derivative(sin, 1.0)
# Compare with sin(pi)
second_derivative(sin, float64(pi))
# Compare with [sin(0.0) 0.0; 0.0 cos(0.0)]
hessian(x > sin(x[1]) + cos(x[2]), [0.0, 0.0])
# Compare with [sin(1.0) 0.0; 0.0 cos(1.0)]
hessian(x > sin(x[1]) + cos(x[2]), [1.0, 1.0])
# Compare with [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])
For scalar functions that map R to R, you can use the '
operator to calculate
derivatives as well. This operator can be used abritratily many times, but you
should keep in mind that the approximation degrades with each approximate
derivative you calculate:
using Calculus
f(x) = sin(x)
f'(1.0)  cos(1.0)
f''(1.0)  (sin(1.0))
f'''(1.0)  (cos(1.0))
using Calculus
differentiate("cos(x) + sin(x) + exp(x) * cos(x)", :x)
differentiate("cos(x) + sin(y) + exp(x) * cos(y)", [:x, :y])
The Calculus package no longer provides routines for univariate numerical integration. Use QuadGK.jl instead.
Calculus.jl is built on contributions from:
And draws inspiration and ideas from: