FSharp.MathTools: Change of Plans
In the interest of having one great open source library for the .NET platform we have refocussed our efforts and are now contributing to dnAnalytics
now includes all the functionality that was in FSharp.MathTools and much more
. Although dnAnalytics
is written as a C# library with the choice of including fast native code, we have added an F# front end to accomodate the functional programming community. The code for FSharp.MathTools will still be available from this site.
This community project is an effort to augment the F# libraries with methods for mathematical computing. We have different bits and pieces of code in different areas which we add as soon as they are tested and have a usable interface.
Our philosophy is to provide an interface for mathematical computing to F#. As for the backend: we plan to implement as much functionality as we can ourselves, but resort to quality libraries that are freely available for specialized functionality. E.g. currently, our Fourier transform library binds to the FFTW library which is a very high quality, high performance Fourier transform implementation which we cannot hope to do a better job on. If you have any suggestions for useful libraries which F# should be able to use, let us know.Overview
The code is organized into the following modules:
- FSharp.MathTools.Core: currently the major part of this module implements special functions such as gamma, beta, erf, ... Also under this module there will be various other utility function such as a Histogram, etc.
- FSharp.MathTools.Stat: implements all functionality related to probability and statistics. The main content of this module is a series of classes that implement various operations (evaluate pdf/cdf, compute means and variances, sample) for standard probability distributions such as the uniform, Bernoulli, normal, exponential, gamma, beta and Dirichlet distributions.
- FSharp.MathTools.Transforms: currently, this module implements experimental bindings to the FFTW fourier transform library. More information and examples on this binding are here.
- FSharp.MathTools.Optimization: implements algorithms for unconstrained numerical optimization. Currently, there are F# implementations of line search, gradient descent and conjugate gradient algorithms. However, as we explained above, we are evaluating different free libraries for having fast access to a wider range of optimization algorithms, possibly including constrained optimization.
- FSharp.MathTools.IO: augments the F# linear algebra types with functionality to read and write matrices in text of matlab formats.
- FSharp.MathTools.Compatibility.Matlab: essentially some conveniently named shortcuts for common Matlab functions.
- FSharp.MathTools.Notation: some convenient names for F# library modules and classes.
Currently, the library is developed on an as-need basis by its developers. Likely extensions for the future are
- more special functions,
- bindings and extensions to the dnAnalytics linear algebra library,
- extended support for numerical optimization,
- performance optimizations: YourKit has kindly agreed to support our open source projects with its full-featured .NET Profiler. This is a great donation to our project and we are excited to use their profiler to improve our library.