ok in reverse order.
Inertia matrices are the first 3x3 element of a 4 x4 matrix, is does not matrix what major because inertia matrices are symmetric and positive definitive.
the videos is really cool, the interesting part is to see whet I did that broke the large test.
I am guessing I probably tweaked the LCP solver that solve the joint that break the close loop.
on eh factorization thing, the formulation of connotation system is a full cyclic graph.
any graphs has a corroding matrix formulations.
the trick to solve the linear system if to apply rows and column permutation try to make so the matrix form a known factorization algorithm.
for example a typical case, take for example a rope, if you organize the joint one after the other the resulting matrix is tridiagonal, such system can be solved in linear time with linear storage.
a three hierarchical case, each node can only have one parent, can be permutated into a
Hessenberg matrix. These systems can be factored it lower and upper triangular matrices than can be solve in linear time. with super linear storage using space matrix techniques.
These system do not have loops.
when a system has loops. what Newton does is that if factor the matrix in four sub matrices where the first quadrant is a Hessenberg matrix, and the other three are the full dense matrices that need to be solve by some direct method using matrix partition techniques.
https://en.wikipedia.org/wiki/Block_matrixThe trick is to factor permutated the big matrix into sub matrices that the off diagonal matrix has the most number of zeros and the diagonal block matrixes and the non zeros.
The method newton uses capitalize on the number of close loop in the graph will be small, therefore when the big matrix is permutated, the first block will be the largest, the off diagonal will have zeros, and the lower diagonal will be dense that will need to be solved by a direct or iterative method. is this part that is expensive and memory consuming and can be inaccurate if using and iterative method.
But the answer is yes any graph can be partitioned, the secrets is knowing how to partitioning to your convenience.
I use Spawning tree trick of the to extract the subgraph the will be equivalent to a Hessenberg matrix, when the number of loop is small (which is the case for most realist systems) this works very well.
One method I make try some day is the Band Diagonal Matrix organization, this method yield matrix the concentrate the non zeros element around the main diagonal and the subsystem can be solved in quadratic time. which when using GPU can be fixable. this system can cope with loops of the type that you are forming.
but in any case do you have a repro to see what was that I did that bloke the difficult test case.?