(See http://www.rejtrix.net
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:
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
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 rejones7@msn.com.