Solve Linear System with a Ill Conditioned matrix.

31 views (last 30 days)
I am working on my Master Thesis that consists in programming a 3D Multibody Simulator that solves kinematic and foward dynamic analysis, as a result I have matrices that are usually ill conditioned. In one of my lines of code I am trying to solve a linear system that follows the equation of Mq''=g, where M is an Inertia Matrix and g is a vector of forces and q'' is the accelerations that I use to start an iterative process.
From this iterative process I am able to calculate position and velocity of all bodies and the results I have are plaged with numerical instability and as a result I suspect that the culprit is this equation. Therefore my question is the following: Is there anything that I can do to improve the condition of my mass matrix? I have tried the following:
  1. Use Pinv, which uses SVD, but the results are not satisfactory;
  2. Tried to use Decomposition to once again see if the results were satisfatory but unsuccessfully;
  3. Tried to use lsqminnorm with a high tolerance factor, where I achieved my best results.
  4. Eliminated the first 7 rows and columns from the matrix and the 7 rows of the vetor which correspond to a body without movement or mas (ground) to try and improve the conditions unsucessfully ( this simplification would not change my results);
Other than this I have been reading all sort of articles and answers in this community, mainly answers from John D'Errico user, but I haven't found anything that helped me. In annex I put the example of one Inertial matrix and a vetor of forces that I use in one of my models.
EDIT: I also have been trying to use the regtools toolbox, mainly focusing on using Tikhonov regularization but currently I am having trouble in choosing an adequate method to choose the regularization parameter.

Accepted Answer

Ivo Houtzager
Ivo Houtzager on 25 Aug 2022
Edited: Ivo Houtzager on 25 Aug 2022
Please have look at the following regress function, see PBSID-Toolbox/regress.m at master · jwvanwingerden/PBSID-Toolbox · GitHub. This function uses the reglcurve and reggcv fucntions of the regtools toolbox to find the the regularization parameter using L-Curve or Generalized Cross Validation for the Tikhonov regularization or the Truncated SVD method.
Ivo Houtzager
Ivo Houtzager on 25 Aug 2022
Edited: Ivo Houtzager on 25 Aug 2022
It solves the linear problem Y=X*P where X is unknown and Y and P are given, and Y can be vector as well. Seems you want to solve g=M*g2 for unknown g2 and g and M are given, If you transpose to g'=g2'*M', than the inputs are Y = g'; and P = M'; and output is g2 = X';. Thus function becomes something like
g2 = regress(g',M','TIKH','LCURVE')';
where you can select also select different method options, like 'TSVD' and/or 'GCV'.
Tiago Carvalho
Tiago Carvalho on 26 Aug 2022
Thank you for your help. I have been experimenting with the toolbox that you mentioned I was able to obtain results that unfortunetly are only similar to the ones I achieved with the lsqminnorm. These results however, are not close to what I achieved with a standard commercial program.
However, I don't think anyone else has any suggestion on how to solve this issue, and as a result I will wait more 24 hours and accept the answer, since it is very useful for regularization problems!

Sign in to comment.

More Answers (0)


Find more on Linear Algebra in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!