A C++ Library for Automatic Regularization of Ill-Conditioned Linear Systems

(See for similar software for Python and Go.)


This web site offers a free state-of-the-art C++ library (in a file called autoreg.h) for solving dense linear equation systems. We assume you would not be here if your problem were easy. So we focus on algorithms that solve the hardest linear equation systems. Easier problems are of course handled easily.  These solvers handle any shape or size of matrix, and handle inherent difficulties such as noisy data, dependencies between rows, singularity of nearly any sort, and ill-conditioning/ instability. The automatic algorithms are based on detailed analysis of the Picard_Condition. Note that these algorithms are, in part, based on heuristics and estimates which may sometimes not produce results of the quality you need. We would love to see such problems that are not well solved so we can further improve our codes. However, they have already seen years of use in many contexts.


Autoreg.h contains a very extensive set of operations for Matrix, Vector, Row, and Diagonal objects. Our solvers are implemented using these classes, as well as matrix decomposition routines from a trusted source. But you do not have to know about or care about these C++ classes if you not interested.


So you want to solve a linear matrix equation, also known as a matrix problem, like this:

            A*x = b

 where A has m rows and n columns, and the right hand side column, b, also has m rows. You may also have extra equations that express constraints such as x[3] > 0, or “the sum of the solution must be 100.” These can also be handled.


Here is an example of how to call our premier solver, autoreg(), directly from a C++ program with no use of our Matrix classes:  

Solver Example A

You may also call our non-negatively constrained solver directly from C++. Just change the name “autoreg” to “autoregnn”.


Here is an example of how to call our premier solver, autoreg(), with minimal use of our Matrix  classes:

Solver Example B


Here is an example of how can call our premier solver, autoreg(), with full use of our Matrix classes:

Solve Example C.


Here is the autoreg.h library for you to download.


Our three main solvers are:


 autoreg(A,b)  for automatically solved problems of any size, shape, or level of simplicity or difficulty.


 autoregnn(A,b) for the same algorithm constrained to force the solution to be non-negative.


 autoreg3(A,b,E,f,G,h) to constrain the solution with any number of exact equality requirements, E*x==f, plus any number of “greater than or equal to” constraints, G*x >= h. (If you need “less than or equal to” constraints, just multiply both sides of your equation by -1.0, and it becomes a  “greater than or equal to” constraint.)


Here is a summary Guide to all the operations available to you

if you choose to use our Matrix, Vector, Row, and Diagonal classes. Note: This documentation is actually an executable C++ program. Download this Guide and the autoreg,h source and try it!




Note: This software is provided AS IS, with no warranty of any sort whatsoever. The user must determine if the results of any calculation using any of this software are appropriate for the user's purposes. Some algorithms contained herein are heuristic and/or experimental. All this software inevitably contains bugs/errors which are as yet unknown, as well as know deficiencies.



This software is offered by:

By Rondall E. Jones, Ph.D.

Dissertation: Solving Linear Algebraic Systems Arising in the Solution of Integral Equations of the First Kind, University of New Mexico, 1985

Advisor: Cleve B. Moler, creator of MATLAB and co-founder of MathWorks

Career: Sandia Laboratories, Albuquerque, New Mexico, 1967-2011

Publications: Please Google “Rondall Jones Sandia” and ignore results not containing the exact spelling of “Rondall”

To contact the author email