Quote from stephencrowley:
Which libraries specifically? I've learned a lot writing my own matrix package.. I think it is robust enough to release publically but don't want to go thru the trouble right now..
specifically most matrix libs/languages are fairly ineffecient
for instance, a matrix transpose actually creates a fully copy of the matrix, whereas my package makes the new transposed matrix share the same underlying native buffer and only swaps the num rows/cols and the col/row increments.. many of my native fortran libs can deal with matrices such as these and it is not necessary to do a full matrix copy before doing some operation. If a native func actually needs a column-major matrix when I just do 'matrix.trans().copy()' before passing it along in the case where a full copy really is necessary.
Same concept goes for matrix slicing, reversing.. swapping, etc.
I've reimplemented the unscented kalman filter with matrix package, translated directly from the matlab version.. it is about 15% faster and infinitely more readable and fully object oriented.
Things like this make it more apparant about the memory access and runtime of your algorithms and makes it more readily apparent where optimizations can happen.
I am surprised that you would tackle such an enormous task - unless I am missing something writing general purpose solvers is no simple task . I have written a couple for commercial products from scratch - outside of the BLAS.
I really have not had any issues using Atlas nor interfacing with it.
We dont use Matlab - for some of the reasons you mention but there are many other options, especially with respect to filtering.
Of course I dont know all the details of your system but it sure sounds like you are spending time writing things that are already available to be integrated and which offer performance that would only be an issue in the largest, most demanding of applications - far beyond those of even a very ambitious ATS.
(You ought to try some in Python.)
