Numerical Library for Financial Modelling / Scientific Computation in Java (with a C# port)
The goal of this project is to develop a reusable toolkit for developing mathematical models for valuing financial products and risk management. Due to its numerical intensive nature, it can also be used effectively in other applications which make uses of highly efficient numerical algorithms. Specific language features and design patterns will be used aggressively to allow for high performance and reusability. The C# port will be made in parallel as the Java version is developed, a number of features of C# (up to version 2.0) will be used, in particular operator overloading will be used for all matrix operations.
Highly efficient numerical algorithms will be implemented in the following areas:
1. a generic matrix and linear algebra package (including support for dense and sparse matrices and commonly used decomposition methods), an existing library might be used for this part of the toolkit.
2. an approximation package, with an emphasis on the support for B-splines, which is used to approximate curves in general, given a set of points on the curve. Very useful for any sort of data fitting, and heavily used in term structure modelling in finance
3. generic PDE/ODE solvers, with built-in support for Poisson/heat/wave equations. Useful in a large number of situations in modelling.
3. an optimization package, including linear programming (simplex method, later also interior point method), quadratic programming, nonlinear unconstraint/constraint minimization, later will also include search methods including genetic programming.
4. a simulation package, to provide a framework for running (Quasi)Monte-Carlo simulations
5. other essential tools, multi-dimensional numerical integration, Fourier transform, root-solver, interpolation/extrapolation, , special functions, statistical distributions.
Current Java/C# open-source efforts in this area are limited (with many projects abandoned or no longer actively maintained), in particular useful things like B-Spline PDE-Solver, multi-dimensional numerical integration, Fourier transform are not addressed in any existing project I'm aware of (including most commercial ones). Also usually not the most robust & efficient implementation is used whenever a routine does exist, commercial projects have a significant advantage in this respect.
Some of the code I've written for past school projects (I am a maths student specialising in optimization and numerical analysis) in the past will be adapted for various part of the toolkit. It is hoped that by the end of summer the main components of the library will be ready for production use, and it will be actively developed and maintained afterwards.
Initial commit scheduled around 1 July 2005.