In the late 1970s, I implemented this algorithm in Fortran for a circuit analysis program. Why Sparse Containers are used for the Vectors and Matrices. evaluates to 5.68E-14, so the value 5.69E-14 is used here.
the value is set to slightly greater than 1/(2^44). of a double precision floating point number is 48 bits, so was set to 2.92E-11, which is just slightly larger than
System of equations solver program cx code#
SolveLinearEquations.sln - A Visual Studio 2008 solution fileĪ set of Linear equations are represented by the matrix equation:Ĭopy Code // The original implementation was on a computer where the floating.SolveLinearEquations.vcproj - A Visual Studio 2008 project file.DoubleIndex.h - The header file for DoubleIndex.DoubleIndex.cpp - A class to make two indices into one key.SparseArray.h - The SparseArray template file.MatrixPackage.h - The linear equation solver header file.MatrixPackage.cpp - Contains the linear equations solver function.CharString.h - The string class header file.LinearEquationParser.h - The parser header file.LinearEquationParser.cpp - Parses the input file that contains equations.SolveLinearEquations.cpp - The main program.This code is slower because it uses a SparseArray, but it is still very fast.
System of equations solver program cx Pc#
Today, with that original C code, a problem that size on a PC runs in the blink of an eye.
I wrote this in Fortran, C++ using simple arrays, again in C++ using a sparse container classes, and finally in C#.īack in the late 1970s, I ran this algorithm on a DEC-10 computer and solved 1000 equations with 1000 variables in about 30 seconds. I've rewritten this algorithm several times. This is done using both the matrix norms and a constant that is set based on the number of bits in the mantissa of a floating point number. While this book gives a standard implementation of Gaussian Elimination with partial pivoting, as is taught in Computer Science Linear Algebra courses, this algorithm also determines whether an accurate solution can be found. I was lucky to stumble on this particular reference. An example of ill-conditioned equations would be: Equations are ill-conditioned when two or more equations define almost parallel lines, or in the case of more than two dimensions, almost parallel planes or almost parallel hyperplanes. Wilf, 1967, John Wiley and Sons, pages 65-93.Īn ill-conditioned set of equations is a set of equations that is either difficult or impossible to solve using the given floating point precision. Wilkinson, "Mathematical Methods For Digital Computers" Volume 2, Edited by Anthony Ralston and Herbert S. " The solution of ill-conditioned linear equations", by J. I needed a way to solve simultaneous equations, and I stumbled on the following book and algorithm: When I was in college, I wrote a circuit analysis program in Fortran. The equations have the following format, which allows using the addition and subtraction sign to combine terms of the form: If there is no semicolon at the end of a line, then the equation is continued on the next line. An equation is terminated with a semicolon. There can be no more than 1024 characters on a line. The input file is a text file that contains equations. It's crude because it requires a somewhat rigid input format and doesn't support parenthesis or math functions. The code uses a crude parser to parse the equations in the input file.
Each vector is just an instance of the SparseArray class that stores a double precision value with an integer index for a key. The stored type for the matrix SparseArray is a double precision number.
The matrix uses the DoubleIndex class, which takes two integer indices, to implement a single key to use with the SparseArray class. The program uses the SparseArray template class to implement vectors and a matrix. Other than that, this program has no graphical user interface and a slightly modified equation format, this program is very similar to the C# program. This program was written years before I wrote the Linear Equations Solver in C# here. The program takes a text file that contains equations for input and outputs the solution. The program SolveLinearEquations solves simultaneous equations.