**Even very small systems of linear equations can be hard to solve!**

A variety of difficulties arise in solving some systems of linear algebraic equations. We will present several such difficulties here in the simplest possible form: two equations in two unknowns.

(To see how our solvers work on these systems, scroll down to the bottom.)

0. A typical system with no difficulties.

1*x + 1* y = 2

1*x – 1*Y = 0

This is the kind of situation one sees in High School Algebra classes. Easy to solve.

1.
A *variable
may not actually be involved* in the solution. For example,

1*x + 0*y = 1

2*x + 0*y = 2

In this case, y simply isn’t involved, and can’t be solved for. Solving for x is easy with either equation (x=1) but when you substitute x=1 into the other equation you just get 0 = 0, which is true, but not helpful. Of course, you can see that this could happen with a larger system of equation also. So, can this problem be solved? Yes: x=1, y=anything is a solution. Most solvers will automatically compute y=0, but some may crash.

2.
O*ne
equation may not be usable*. For
example,

1*x + 1*y = 2

0*x + 0*y = 0

In this case the second equation is completely useless. On the other hand, any x and y we pick would satisfy it! If we ignore the useless equation then a solution is easy: x=1 and y=1, for example. Such systems of equations present problems to some solvers, but more sophisticated ones, like autoreg(), return the so-called “pseudoinverse” in such cases, which is x=1, y=1.

3.
Sometimes a system of equations is simply *under-determined.* This situation is much like the situation
just above, but is actually much simpler to diagnose
and solve. In such cases there is not
enough information present to compute a particular solution. For example: consider if we just have ONE
equation but TWO unknowns:

1x + 2y = 2

We can see that x=1, y=0.5 works fine as a solution. But so does x=0, y=1, and x=2, y=0, or x=-1, y=1.5, etc. We have to add some rule for picking an appropriate solution among all the possible solutions. The usual way to do this is to pick the solution with the smallest sum of squares. That is, the smallest possible value of x*x + y*y. In this case that solution turns out to be x=0.4, y = 0.8.

4.
The equations may be *dependent*. That is, one or
more of the equations may be combinations of the other equations. For example,

1*x + 1*y = 2

2*x + 2*y = 4

In this case the second equation is just 2 times the first. When you attempt to eliminate the x term in the second equation, by subtracting the first equation from it twice, look what you get:

1*x + 1*y = 2

0*x + 0*y = 0

This last equation is, again, true, but useless. (Like case 2 above.) As above, sophisticated solvers will return the pseudoinverse solution: x=1, y=1.

5.
The equations may not be *consistent*. In the case just
above, the equations were *dependent*,
but at least *agreed*. What if the equations are *dependent* again, but also *disagree*? For example,

1*x + 1*y = 2

2*x + 2*y = 6

When we subtract the first equation times 2 from the second, we get

1*x + 1*y = 2

0*x + 0*y = 2

and the second equation cannot be satisfied*.*
This system cannot be solved exactly.
Equation 1 by itself would result in x=1,y=1, while equation 2 by itself
would result in x=1.5, y=1.5. However, an approximate solution can be computed
by finding the solution which makes the right hand
side results come as close as possible to the given 2 and 6. By “close”, we
mean again, that the sum of the square of the errors has the smallest possible
sum of squares. That answer is x=1.2625, y=1.2625, and plugging those values in
the equations, we get

1*x + 1*y = 2.5250

2*x + 2*y =5.0500

6.
The equations may be independent, and
consistent, but result in an unreasonable answer. Often this is due to what we call an *ill-conditioned system of equations*. For example, consider these two:

1*x + 1*y = 2

1*x + 1.01*y = 3

When we solve this by the usual elimination
and substitution method, we get x= -98 and y=100. This is a surprising answer since by looking
at each equation alone we would have guessed that the solution values would be
near 1 (*). And a negative answer such
as -98 may be completely unacceptable.
For example, if x and y represent amounts of physical entities such as
light, then a negative number is plain wrong.
An approximate solution can be computed by “*regularization*” of
the problem. **This is the kind of
problem that autoreg() was designed to solve.** It also
solves all the other cases listed here, though you should always check the
result when giving autoreg() a hard problem, to
assure that the answer is acceptable for your purposes.

(*) Looking closer, one can see that an increase of 0.01*y in the second equation resulted in a change in the right hand side of 1.0…. implying that y must be about 100.)

7.
Sometimes a system of equations is simply *over-determined*. That is, there are more equations than need
to determine a solution, and we have no reason to eliminate any particular equation.
We would like a solution that somehow “comes closest” to solving all of the equations.
For example,

1*x + 2 *y = 15

2*x + 2*y = 16

-1*x + 1*y = 6

The solution to this system is easy: x=1, y=7. And, we are in luck: that solution satisfies all three equations exactly. But that is not the typical case. More typically, we would have something like

1*x + 2 *y = 15.1

2*x + 2*y = 15.9

-1*x + 1*y = 6.5

And if we try x=1, y=7 in this set of equation, we will not quite solve the equations. Instead we will get 0.1 too little for the first equation, 0.1 too much for the first equation, and 0.5 too much for the first equation. We can do better than that. In particular, we can compute a solution which minimizes the sum of the square of these errors. Such solutions are called “least squares” solutions. Solvers like autoreg() automatically give this “least squares” result in this very common situation.

8.
Sometimes a system of equation produces *negative
answers, when*
that is unacceptable. This is often due to poor data on the right hand side, or may be due to trying to solve for a larger number
of values that the data supports. (Such as solving a 5 row, 20 column
underdetermined problem, when 5 rows by 5 columns might be better.)

1*x + 1*y = 0.9

1*x - 1*y = 1.1

The answer to this system is easily computed to be x=1, y= -0.1. If we demand that the solution be non-negative, as autregnn() allows, then the computes answer will be x=1, y=0.

When we have larger systems of equations
we may have two or more of the above difficulties in the one set of equations.
For example, it would not be surprising for a set of equations to be *underdetermined (case 6), and not independent
(case 3) and ill-conditioned (case 5). *That’s
what makes developing solvers for these interesting.

---------------------

**How ARLS Works on
These Small Systems of Equations**

1. A
typical problem* without* difficulties

1*x +
1*y = 2

1*x - 1*y = 0

Our
programs return x=1, y=1.

2. Missing
Variable.

1*x +
0*y = 1

2*x +
0*y = 2

Our
programs return x=1, y=0. This is the minimum norm solution.

3. Effectively
missing equation.

1*x +
1*y = 2

0*x +
0*y = 0

Our
programs return x=1, y=1. This is the minimum norm solution.

4. Dependent
but consistent equations.

1*x +
1*y = 2

2*x +
2*y = 4

Our
programs return x=1, y=1. This is the minimum norm solution.

5. Dependent
and inconsistent equations.

1*x +
1*y = 2

2*x +
2*y = 6

Our
programs recognize the problem as ill-conditioned, apply an
automatic regularization method and give x=1.2625, y=1.2625. This is reasonable
behavior.

6. Independent,
consistent, but unreasonable equations.

1*x +
1*y = 2

1*x +
1.01*y = 3

Our programs recognize the problem as
ill-conditioned, apply an automatic regularization method and return x=1.1165,
y=1.1334.

7. An
under-determined system.

1x + 2y
= 2

Our programs return the minimum-norm
solution, x=0.4, y=0.8. This is actually an
easy problem.

8. An
over-determined system

1*x + 2
*y = 15.1

2*x +
2*y = 15.9

-1*x +
1*y = 6.5

Our
programs return x=0.7276. y=7.2069. When you substitute these values
into the equations, the resulting right side values
are: 15.141, 15.869, and 6.479, which is excellent!