You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: jsoc/gsoc/fast_differentiation.md
+6-5Lines changed: 6 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,13 @@
1
+
# FastDifferentiation.jl – Summer of Code
2
+
1
3
[FastDifferentiation.jl](https://github.com/brianguenter/FastDifferentiation.jl) is a Julia package for computing very efficient symbolic derivatives of Julia functions and for compiling the derivatives into efficient executables. It can differentiate much larger expressions than other symbolic systems, such as Symbolics.jl, and the resulting derivatives are also much more efficient, rivaling hand computed derivatives in some cases (see the website for benchmark examples).
2
4
3
5
[FastDifferentiation.jl](https://github.com/brianguenter/FastDifferentiation.jl) also computes the exact sparsity patterns of Jacobians and Hessians (and any other order derivative) and detects common terms in derivatives of Rⁿ->Rᵐ functions for large n,m. As a consequence computation time of Jacobians generally scales sub-linearly as a function of n,m.
4
6
5
-
6
7
However, the current system has several weaknesses. It is not currently possible to differentiate through conditional expressions so many commonly used Julia functions cannot be differentiated.
7
8
Derivatives of any order can be computed but orders above 3 or 4 become increasingly inefficient. These projects aim to address these weaknesse.
8
9
9
-
# Add Conditionals to FastDifferentiation.jl
10
+
##Add Conditionals to FastDifferentiation.jl
10
11
11
12
FastDifferentiation supports conditionals in function definitions but cannot yet compute derivatives of functions with conditionals:
12
13
```julia
@@ -29,7 +30,7 @@ ERROR: Your expression contained a if_else expression. FastDifferentiation does
# Add higher order derivatives to FastDifferentiation.jl
33
+
##Add higher order derivatives to FastDifferentiation.jl
33
34
FastDifferentiation.jl produces extremely efficient first derivatives. But, higher order derivatives become increasingly less efficient since they are computed by repeatedly applying the differentiation algorithm.
34
35
35
36
The fundamental cause of this behavior is that repeated higher order intermediate derivative terms are not detected and reused; instead they are computed from scratch. The goal of this project is to extend the FastDifferentiation algorithm to detect these common higher order terms and to reuse, rather than recompute them.
@@ -44,7 +45,7 @@ This will require a rewrite of the graph factorization code as well as some theo
# Integrate FastDifferentiation.jl into Symbolics.jl
48
+
##Integrate FastDifferentiation.jl into Symbolics.jl
48
49
49
50
FastDifferentiation.jl uses a new symbolic algorithm for automatic differentiation that can be orders of magnitude faster than conventional symbolic differentiation methods. Symoblics.jl could compute derivatives much faster using the FastDifferentiation algorithm. However implementation and data structure differences between the two systems make it difficult to add FastDifferentiation capabilities to Symbolics.jl.
50
51
@@ -60,4 +61,4 @@ See [this](https://github.com/brianguenter/Proposals) page for a more detailed d
60
61
61
62
**Expected Outcome:** Well-tested and well-documented integration of FastDifferentiation into Symbolics.jl.
0 commit comments