The algorithm is primarily based on this identity:
(AT)-1 = (A-1)T,
which says "the inverse of the transpose of a matrix is equal to the transpose of the inverse of the same
matrix", and a few other identities for factoring matrices.
It may not sound like much, but this allows us to perform simultaneous Gaussian-style row and column
operations on any matrix. It doesn't matter if the matrix is singular or if it has more rows or more columns.
This algorithm has never failed to produce a good answer, and I have implemented it in several languages.
The one on the Demo page
Message Passing Interface (MPI) is a library of routines for coordinating the execution of
copies of an executable on separate cores or networked computers. It is frequently used to
divide a problem into pieces that run concurrently, and so speed the overall execution.
Inversion of Control is a software idea that takes control from the software written by the user
and puts it in the framework that is used by the user's application.
The framework coordinates all
the (mouse, keyboard, timer, file, or other system) events and calls methods the user registers for
handling the events. This is most commonly done for UI systems (Qt, Swing, embedded).
The combination of these two ideas leads to a framework that simplifies the creation of
software that uses multiple cores and multiple networked machines (especially supercomputers and
large clusters). It allows a program to make better use of its resources and even achieve a greater
throughput than the usual "divide and conquer" method usually employed for such problems.
Inverting a sparse matrix is typically less accurate than inverting a tightly banded matrix.
This is a small test routine I wrote while bored.
It takes a matrix that represents the connections in a finite-element grid and reduces the bandwidth to
what should be the minimum possible, and gives the numbering that should be used for the points
to achieve this minimum bandwidth.
Sorting isn't always necessary in numerical modeling.
Often it's only necessary to select the most applicable pieces of data; sorting a long list
can be a waste of CPU.
This little routine selects the top matching items from a list.
I just wanted to play this old game.
This is one of the oldest board games in the world, dating back about 5000 years.
It's a "race game" where each player tries to get their pieces through the path of the board first.
But just having the board, the pieces, and the "dice" is insufficient to reconstruct the play.
Fortunately there are some ideas preserved in ancient texts that describe some of the rules - see the
wikipedia article for more information.