This web site offers a free state-of-the-art C++ library (in a file called autoreg.h) for solving dense linear equation systems. Similar algorithms are available for Python at the same address above.
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.
We assume 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 > 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:
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:
Here is an example of how can call our premier solver, autoreg(), with full use of our Matrix classes:
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!
Example solved problems for students:
Garden Fertilizer Calculation
A Problem from Oil-Well Logging
A Problem with Stucco color
Solving Equations to Play MineSweeper
For an introduction to the difficulties that come up in solving linear equation systems click here.
For tutorials on matrix problems click here.
For technical references click here.
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 firstname.lastname@example.org.