- SM2: Slagel splitting implementation
(http://hdl.handle.net/10919/52966)
- SM3: Keep close to zero denominators for later
- Update tests to show the squared residual
- It can serve as a baseline reference
- It can serve as a starting point for including the pivot
and splitting techniques from Maponi and Slaggel without the full
complexity of the MaponiA3 algorithm
* Started debugging reading from HDF5 formatted datasets. Slater_inv needs to be transposed before sent to Maponi. Algo fails at the last step. Correct Slater and Inverse fail to produce the identity matrix. Suspect that the matMul function is not working correctly eventhough it looks like it does.
Made small corrections to compensate for changes made after branching-off from test_dataset.
Everything compilers
Everything works except for the HDF5 dataset test program that gives an I/O error.
TODO: Calls from C/C++ are still broken because inside the MaponiA3 algo there is compensation for the fact that Fortran sends it's arrays in column-major order. This must be resolved by transposeing S_inv before it is passed to MaponiA3 and remove the compensations made there.
S = [1,0,1,-1; 0,1,1,0; -1,0,-1,0; 1,1,1,1]
S_inv = [1,-1,1,1; 1,0,2,1; -1,1,-2,-1; -1,0,-1,0]
u1 = [0,-2,0,0]
u2 = [0,-1,0,0]
upd_idx = [2,4]
To go from Maponi's examples where the number of updates is always equal
to the the dimension of the matrix, and the decomposition is always
diagonal, to cases with a non-diagonal decomposition and a number of
updates unequal to its size, the following changed needed to be made:
* in the calculation of the {y0k} an extra inner for-loop needs to be
added to make it a full matrix-vector multiplication due to the fact
that A0 is not a diagonal matrix
* in some places the use of the update-order vector p needs
the be replaced with that of upd_idx to make sure the correct
component of the ylk is selected and the proper rank-1 matrices are
constructed
* when a matrix is passed from Fortran to C++ with 2D adressing, it is
passed in colum-major order. The passed matrix needs to be transposed
before passing to C++. Doing this inside the algorithm will break
compatibility with called from C/C++.
that is smaller than the size of the Slater-matrix
* Removed the Slater-matrix as an argument, since it is not used in the
algo.
* Added a manual 4x4 example to debug MaponiA3 to work with a number of
updates that is smaller than the size of the Slater-matrix
* Added a new Octave script to quickly check if the computes inverse is
correct.
decomposition in the Fortran code and made a basic call to the
subroutine MYSUBROUTINE, which is bound to the C++ void function
'Sherman-Morrison();. For now compilation fails with lots of undefined
references.'