The order that was right last time
Worth reading first: Structure and stability stop being separable · The units the matrix is measured in · The problem that arrives again.
The field on sparsity measures the trade every sparse elimination makes: the pivot that keeps the factor sparse and the pivot that keeps the elimination stable are different rows, and a threshold buys one with the other. Every number in it is about factorising one matrix.
A code that factorises one matrix is rare. A time-stepping solver, a Newton iteration or a parameter sweep factorises hundreds of matrices with the same sparsity pattern and different values, and the expensive part is not the arithmetic — it is the symbolic phase: choosing the order, allocating the structure, and on a distributed machine deciding which processor holds what. Doing that once and reusing it is worth a large constant factor, and it is what a distributed sparse solver does.
The price is that the order was chosen for a matrix that is no longer the one being factorised.
What static pivoting is
The reuse cannot include interchanges. If the code is allowed to swap rows when a pivot turns out small, then the order is not fixed, the structure it allocated is wrong, and everything the symbolic phase bought is given back.
So it does not swap. When a pivot is smaller than √u·‖A‖ it is replaced by that value, with its own sign, and the elimination carries on. √u is 1.05·10⁻⁸ in double precision.
That is a deliberate change to the matrix being factorised. What comes back is the exact factorisation of a matrix that is not A, the difference is bounded by how many pivots were replaced and by how far, and the standard answer to the obvious objection is: iterative refinement repairs it. The residual is computed against the true A, the factorisation is used only to approximate a correction, and a couple of steps bring the backward error to the working precision.
This essay is about a case where that does not happen, and about why.
The sequence
The family is the conflict grid — a five-point Laplacian pushed out of symmetry, which is the object this field’s argument is about — with one addition: three of its rows are scaled down through nine decades as the sequence runs, each starting at its own member.
A row scaling is the smallest honest way to write down a pivot that was large and is now small. It leaves the solution of the system unchanged, leaves the sparsity pattern untouched — so a symbolic phase computed once stays valid, which is the whole premise — and moves nothing except which rows a pivoting rule would want. It is also what happens to a real matrix for real reasons: a row is an equation, and an equation written in different units is a row of a different size.
That the pattern never moves is asserted at every member rather than assumed: zero differing positions against the first member, at member 1, 5, 8 and 11.
What the reuse costs
By the last member, two pivots have fallen below the floor and been replaced.
| pivots replaced | ‖PA − LU‖/‖A‖ | backward error | after six refinements | fill | |
|---|---|---|---|---|---|
| a fresh order each member | 0 | 1.6·10⁻¹⁶ | 9.5·10⁻¹⁷ | — | 1,568 |
| the first member’s order, kept | 2 | 1.22·10⁻⁹ | 4.8·10⁻⁹ | 5.5·10⁻¹⁰ | 1,460 |
| the same order, rows equilibrated | 0 | 9.4·10⁻¹⁷ | 6.5·10⁻¹⁷ | nothing to do | 1,458 |
Two results, and the second is the one worth carrying.
Refinement does not repair the middle row. Six steps take the backward error from 4.8·10⁻⁹ to 5.5·10⁻¹⁰ — a factor of 8.8 — and then it stops falling. Every other repair in this collection’s work on sequences reaches the working precision in one or two steps. This one gets less than one decade and stalls.
And the whole thing evaporates on a row scaling. Divide each row by its largest entry, choose the order once on the equilibrated first member, and reuse it: no pivot is replaced anywhere in the run, the factorisation’s own residual stays at 9.4·10⁻¹⁷, and the backward error is at the working precision at every member with no refinement at all.
Why the floor is the problem
√u·‖A‖ is a threshold in the units of the largest row. A row that has been scaled down by nine decades has entries nine decades below that threshold, so the rule does not protect it from a small pivot — it overwrites it, with a number that has nothing to do with the equation that row represents.
That is not a rounding and it is not a perturbation of the size the analysis assumes. It is a substitution of one number for another, and the analysis behind static pivoting assumes the replacement is of order √u relative to the matrix, which it is — relative to the matrix. Relative to the row, it is a factor of 10⁹.
The refinement then fails for a reason worth stating precisely. Refinement is a fixed-point iteration whose contraction factor is how good the perturbed factorisation is as a preconditioner for the true matrix. Once a pivot has been replaced by something nine orders larger than the row it came from, that factorisation is not a good preconditioner, the contraction factor is close to one, and the iteration crawls. The failure is not that refinement is slow here. It is that its rate is nearly 1.
Where the boundary is
The damage arrives when the rows fall past the floor and not before, and the sweep says exactly where:
| rows scaled down by | pivots replaced | backward error after refinement |
|---|---|---|
| 0 decades | 0 | 6.0·10⁻¹⁷ |
| 2 | 0 | 8.5·10⁻¹⁷ |
| 4 | 0 | 9.5·10⁻¹⁷ |
| 6 | 0 | 5.9·10⁻¹⁷ |
| 8 | 2 | 2.4·10⁻¹⁴ |
| 9 | 2 | 5.5·10⁻¹⁰ |
| 12 | 2 | 7.5·10⁻¹⁰ |
Nothing at all happens for six decades. The transition is between six and eight, which is where the row’s entries cross √u·‖A‖, and past it the refinement is not recovering. And the equilibrated column of the same sweep replaces no pivot at any setting, at any number of decades.
So the boundary is not a property of the sequence, the drift rate or the conditioning. It is the point at which a row becomes small in the units the floor is written in, and moving the units moves it out of the picture entirely.
The reused order is also the sparser one
A number falls out of the same run that has nothing to do with stability and is worth having.
The equilibrated reused order leaves 1,458 entries in the factors. A freshly chosen order at the last member leaves 1,568. The order computed once is not merely usable, it is 7 per cent sparser than the one threshold pivoting picks for that member.
The reason is that threshold pivoting on a later member is choosing under a constraint the first member did not impose: it has to reject rows whose pivot candidate is below τ times the column maximum, and by the last member some of those rejections are forced by the row scalings rather than by the structure. A choice made when the matrix was well scaled is a choice made with more options available.
That is an argument for reuse this field did not have, and it points the same way as the cost argument — provided the equilibration is done.
What equilibration is and is not
Row equilibration — divide each row by its largest entry — is usually described as a preliminary, a tidying step done before the interesting work. Everything above says it is not.
It is worth being precise about what it does and does not change.
It does not change the solution. Scaling a row scales the corresponding entry of the right-hand side, and the system is the same system. Nothing about the answer moves.
It does not change the conditioning in general. The collection has an essay on a condition number scaling cannot move, and it applies here: equilibration improves the conditioning of some matrices and not others, and the improvement is bounded by a factor that has nothing to do with this essay.
What it changes is which numbers are comparable. A pivoting rule compares candidates against each other and a perturbation floor compares them against a norm. Both are comparisons, both are meaningless across rows in different units, and equilibration is the statement that there is no such thing as a small row — only a small entry relative to its own row.
So the honest summary is that static pivoting is not a technique with a stability caveat. It is a technique that requires an equilibration, in the strong sense that without one it is not merely less accurate but unrepairable, and with one it is free. That is a much sharper statement than “scaling helps”, and the six orders of magnitude between the two policies at the last member is what makes it one.
The one repair in this collection that does not work
It is worth saying plainly what this essay is doing in a run of essays about outer loops forgiving their inner objects.
Every other one has an outer loop that recomputes the residual from the matrix, and that recomputation is what makes a stale or approximate inner object survivable. A Newton step solved to two digits, a factorisation four members old, a preconditioner built for a different operator — all forgiven, because the next step measures against the real problem.
Here the outer loop does the same thing and it does not work. The residual is recomputed against the true A, in double, from the current iterate. What defeats it is that the perturbation is not an error in solving the problem, it is a change to the problem — and it is a change in a direction the residual is badly conditioned to see, because the row that was overwritten is the row whose entries are nine orders below everything else in the residual vector.
So the field’s rule has a boundary and this is it. An outer loop forgives an inner object that approximated the answer. It does not forgive an inner object that answered a different question.
Why the symbolic phase is worth this much trouble
The essay is about an accuracy failure, so it is worth restating what is being bought, because the answer is not arithmetic and the size of it is why anybody accepts the risk.
A sparse factorisation has two halves. The numeric half is the arithmetic — the multiplications and subtractions that produce the factors — and it is the half a flop count sees. The symbolic half decides where the fill will go, allocates the structure to hold it, and on a distributed machine decides which processor owns which part of the elimination tree. It computes no entries at all.
For a matrix whose values change and whose pattern does not, the symbolic half is identical at every member and the numeric half is not. Reusing it turns a sequence of factorisations into a sequence of numeric passes over a structure allocated once, and on a distributed solver it also fixes the communication pattern — which is a second saving the flop count cannot see and which this collection’s cost field has spent a run establishing is the one that matters at scale.
That is what static pivoting is protecting, and it is why replacing a pivot with a made-up number is considered an acceptable trade rather than an obvious mistake. The measurement above does not overturn that trade. It says the trade has a precondition, that the precondition is a row scaling, and that without it the repair the trade depends on does not arrive.
What is asserted
That the pattern never moves — zero differing positions at four members spread through the sequence — which is what makes the symbolic reuse legal in the first place.
That the kept order is destroyed and not repaired: two pivots replaced, a backward error seven orders above a fresh order’s, refinement gaining a factor of 8.8 and not reaching the working precision.
That equilibration makes the same reuse free: no pivot replaced at any member, the first solve already at the working precision, and six orders of magnitude between the two policies on a row scaling alone.
And that the boundary is the floor: nothing at four decades, everything at nine, with the equilibrated column flat throughout.
The refusals are the three shapes this could be misread as. The damage claimed where nothing was rescaled; the refinement failure claimed at the member the order was chosen for; and equilibration claimed to fix the fill as well as the stability, which it does not — the fill is a separate measurement and it happens to go the same way.
Shares its objects with
Essays that name at least two of the same things, and that neither author linked.
- A threshold between fill and growth — both name backward error, fill-in, growth factor, threshold pivoting
- A condition number scaling cannot move — both name backward error, iterative refinement
- A small residual is not a small error — both name backward error, iterative refinement
- Buying the accuracy back — both name backward error, iterative refinement
- Elimination is a sequence of choices — both name backward error, growth factor
- The bound that is never attained — both name backward error, growth factor
Named objects
A flat tag is an object no other essay names yet.
Backward errorEquilibrationFill-inGrowth factorIterative refinementSparse luStatic pivotingSymbolic factorisationThreshold pivoting