dsimcha wrote:
== Quote from Lars T. Kyllingstad (pub...@kyllingen.nospamnet)'s article
In my numerics library (which I've, in all modesty, named SciD) I'm
converging on a package structure I'm fairly pleased with:
scid.core:
Internal modules, such as scid.core.traits, scid.core.tests,
scid.core.exception, etc.
scid.ports:
Here I put ports of various packages from NETLIB and other
sources. Examples of subpackages are scid.minpack,
scid.quadpack, etc. These have, for the most part, rather
nasty APIs, and should normally not be used directly.
scid:
In the root package I've placed the most ubiquitous modules,
i.e. scid.vector, scid.transformation, etc.
scid.calculus
scid.calculus.differentiation
scid.calculus.integration
...
scid.linalg
...
scid.nonlinear
...
Specific problem areas get their own subpackages. At the moment
these mostly just contain nicer interfaces to the routines in
scid.ports -- "drivers", if you will.
Wait a minute, you have a numerics library for D that does all this stuff? I'd
like to hear more about this. If/when it's in a usable state, please put it up
on
dsource and post it to http://prowiki.org/wiki4d/wiki.cgi?ScientificLibraries.
It's in a usable, but very incomplete state. I fully intend to publish
it on dsource at some point, but there are a couple of reasons why I
haven't done it yet:
1. I don't want to burden dsource with yet another dead project with
some half-baked modules in it. I haven't got a lot of time to work on
it, and mostly I just add things as I need them in my work.
2. I have to figure out some licensing issues. Some algorithms are
clearly public domain, while some things -- like code I've ripped off
Numerical Recipes, for instance -- is more questionable. (Although the
NR guys do quite a lot of off-ripping themselves. ;)
3. The API is still very much in a state of flux, and I need to decide
how I want it. Here, I feel I'm making some progress now. After a long
period of doing analytical calculations by hand, I'm now back on the
numerics bandwagon and have started actually using my library again. The
best way to judge whether an API is usable is to actually use it. ;)
If you're interested, this is what I have:
Integration:
- Five of the QUADPACK routines (qk, qng, qag, qags, qagi)
- Mori's Double Exponential algorithm
Differentiation:
- Forward/backward/symmetric difference
- Ridder's extrapolation method
- A home-brewed templated function for doing higher-order
derivatives by symmetric difference
- Jacobian matrix by forward difference (from MINPACK)
Nonlinear equation solvers:
- bisection, secant, false position, and Ridders' method
Nonlinear system solvers:
- MINPACK's variant of the Powell Hybrid algorithm
- The Newton-Raphson algorithm
I'm hoping someone will create a linear algebra library for D2 soon. I
know very little about that stuff. At the very least, I think Phobos
should have some basic vector/matrix functionality. I've looked at Don's
BLADE library; it looks pretty awesome. Here's to hoping he finds the
time and inspiration to continue work on it again. :)
-Lars