The problem that arrives again
Worth reading first: The exact answer to a nearby problem · The condition number is an amplifier · The accuracy that is thrown away.
Every essay in this collection so far has solved one system. A matrix arrives, an answer is wanted, the answer comes back wrong by some amount, and the whole of the work is deciding whether the fault is the algorithm’s or the problem’s. That framing is what the collection is for and it has held up through a hundred and thirty essays.
It also describes almost nothing that anybody runs.
A solve is nearly always one step of an outer loop. A Newton iteration produces a linear system per step and each one is built out of the answer to the last. A time-stepping code produces one per step for a hundred thousand steps. A continuation walks a parameter and solves at each stop; an optimisation solves a subproblem per iteration; a design sweep solves the same structure under two hundred load cases. In every one of those the vector the solver returns is not the answer to anything. It is an input, and the next member of the sequence will be assembled from it and handed back.
That changes what the accuracy of a solve is for, and the change is larger than it sounds. This field is about the change, and this essay is about the four situations it comes in.
The classification, which is not a taxonomy for its own sake
Between one member of a sequence and the next, one of four things has happened.
Nothing changed. The same matrix, the same right-hand side. This is rarer than it sounds and it is not a joke: it is what a badly written outer loop does, and the reason to name it is that the cost of the whole sequence is then the cost of one member and the correct implementation is a cache.
The right-hand side changed. One matrix, many loads. One factorisation serves the entire sequence, and every further member costs a pair of triangular solves. On a 120×120 problem the twelve members together cost 16.5 per cent of what twelve independent problems cost, and the reused factorisation is still solving every one of them to a relative residual of 1.5·10⁻¹³ — reuse here costs nothing at all, and the only thing to get wrong is failing to do it.
The matrix drifted. This is the interesting case and it is most of them: a Jacobian at a new iterate, an operator at a new time step, a stiffness matrix at a slightly deformed configuration. The factorisation from an earlier member is not a factorisation of this one, and it is not useless either. It is an approximation, and everything in this field follows from asking how good an approximation and for how long.
Everything changed. Independent problems in a loop. Nothing carries and the sequence is a sequence only in the scheduler.
Read as a ladder, each level licenses exactly one more kind of reuse than the level below it. Read as a decision, each level has a different way of being got wrong, and the expensive mistakes are not symmetric: reusing where reuse was not licensed costs correctness, and declining to reuse where it was costs a constant factor that nothing will ever report.
The problem this field measures on
Every claim in this field is made against an answer that is known rather than approximated, which is this collection’s standing habit and is unusually cheap to arrange here.
The family is F(x) = Ax + λx³ − b, with A symmetric positive definite at a prescribed condition number and b constructed from a chosen x*. So the root is not estimated, it is an input. The Jacobian is A + 3λ·diag(x²), which is a formula rather than a difference quotient — the essay on operators with no entries measures what happens when it is not — and it is symmetric positive definite, so the inner solve can be conjugate gradients and the inner tolerance is a knob with a known iteration count behind it.
One parameter moves the whole family, so a sequence is a continuation: member t has root t·x*, and how fast the members drift apart is a number the experiment sets rather than inherits.
What an outer loop forgives
Here is the sentence the field turns on, and it is worth stating before any of the measurements that support it.
An outer iteration recomputes its residual from the matrix at every step. So whatever the inner solve got wrong is not carried forward — it is measured again, from scratch, against the problem that is actually being solved.
That is why a Newton step can be solved to two digits and still produce the same next iterate as one solved to sixteen. It is why a factorisation several members old can drive an iteration to full accuracy. It is why a pivot order chosen for a different matrix, with pivots deliberately replaced by made-up numbers, can be repaired to the working precision in two steps.
And it is exactly why the things that are not recomputed are dangerous, which is the other half of this field and is measured in the essays on what a carried factor accumulates and on what a recurrence remembers.
Four assets, and each of them ages
Once a computation is a sequence, four objects that had looked like properties of a solve turn into objects with a lifetime.
The inner tolerance. In a single solve, a tighter tolerance is never wrong; it is only wasteful. In a sequence it is not even wasteful in an interesting way — it is wasteful in a measurable way, because the next outer step throws away most of what it bought. Solving every step of one Newton run to 10⁻¹⁴ costs 9,358 conjugate gradient iterations. A rule that reads the last two residuals and asks for what it can use costs 1,009, for the same final residual.
The factorisation. Reusing one Cholesky factor across a drifting sequence saves a factor of 1.9 at its best fixed period and stops converging one period later. The optimum is a period, the failure past it is a cliff rather than a slope, and a rule written in the observed contraction ratio finds both without being told the drift rate.
The preconditioner. The same object one level less exact, and it fails differently: a stale preconditioner never stops converging, it just costs more iterations, so nothing announces the problem. What decides how fast it ages is not how much the matrix changed but where the change landed in the spectrum, and the two differ by the condition number.
The pivot order. The most valuable of the four, because what it saves is a symbolic phase rather than arithmetic, and the least forgiving: a reused pivot order is safe or useless depending on the units the rows are written in, and there iterative refinement — the repair every other essay here leans on — does not work.
Warm starting, which is the reuse nobody argues about
There is a fifth thing carried between members and it is so obviously right that it is worth saying why it belongs on the list: the previous answer, used as the starting point for the next member.
It is free, it is never wrong, and it is the reason the other four decisions exist at all. A cold start on member two hundred would cost as much as member one; a warm start turns each member into a correction, and a correction is small. Every measurement in this field warm-starts, which is why the chord iteration in the next essay converges at all from a factorisation four members old — the point it starts from is already close.
What warm starting does not do is make the sequence a smaller problem. The conditioning of member two hundred is the conditioning of member two hundred whatever it is started from, and an ill-conditioned member met at the end of a long sequence is exactly as ill-conditioned as it would have been met alone. The essay on a condition number scaling cannot move is the standing statement of that, and it is worth carrying into this field intact: a warm start changes the distance to the answer and not the sensitivity of the answer to the data.
And one asset that must not be reused at all
The counterweight, and the field needs it early because the four above make reuse sound like a uniformly good idea with a schedule attached.
A randomised method draws a random matrix and applies it. The guarantee attached to it is a probability statement over that draw — over a random object chosen independently of what it is applied to. Use it once and deflate what it found, and the next input is a function of the draw. The independence is gone, and it does not degrade gracefully: the second sketch of the deflated matrix is the zero matrix, exactly, and the measurement is 9.0·10⁻¹⁵ where the first round saw 2.6.
So the field’s rule is not keep things. It is that every object carried between members of a sequence has a lifetime, that the lifetime is a measurement rather than a policy, and that for one of them the lifetime is a single use.
What a sequence’s backward error even is
There is a question underneath all of this that is worth asking out loud, because the collection’s own vocabulary does not answer it.
A backward-stable solve returns the exact answer to a nearby problem. What does a backward-stable sequence return? Not the exact answer to a nearby sequence — the members are not independent, and a perturbation to member three changes what member four is. The honest statement is narrower and it is the one this field uses: each member is solved backward-stably for the problem it was actually handed, and the problem it was handed was built from an answer that was itself only approximate.
That distinction is what makes the essay on a chain of rotations necessary. There, one object is carried across three thousand steps without ever being recomputed from the data, and per-step backward stability says nothing at all about where it ends up. Here, the residual is recomputed from the data at every outer step, and per-step backward stability is exactly what is wanted.
Two situations that look the same from a single step and are not the same situation.
What the four bars actually cost
The hero figure is the classification with numbers on it. Twelve members of a 120×120 problem, costed in multiplications with a dense Cholesky at n³/3 and a solve at 4n²:
- nothing changes — one factorisation, one solve, 8.3 per cent of the independent cost, and eleven of the twelve members are free;
- the right-hand side changes — one factorisation, twelve triangular solves, 16.5 per cent, with the worst relative residual across all twelve at 1.5·10⁻¹³;
- the matrix drifts — four factorisations and seventy-five chord steps under a rule that decides when to rebuild, 85.9 per cent;
- everything changes — twelve factorisations, twelve solves, and the definition of 100 per cent.
The drifting bar is the one worth staring at. At twelve members it costs 86 per cent of the independent sequence, which is a poor advertisement; at six members it costs more than the independent sequence, because the rule has not had time to keep anything and it pays for the measurement anyway. Reuse is a claim about a run and not about a step, and a field that only ever draws one step cannot see that.
Where the accuracy goes
The last thing to establish before the field’s measurements begin is what the outer loop actually does with the inner solve’s accuracy, and it is worth doing directly rather than by argument.
Take one iterate of the Newton sequence, 2.50·10⁻³ from a root that is known exactly. Solve its linear system to a relative residual of 10⁻⁴: the resulting point is 1.200·10⁻⁵ from the root, and it cost 426 conjugate gradient iterations. Solve the same system to 10⁻¹⁴: the resulting point is 1.200·10⁻⁵ from the root, and it cost 1,129.
Eleven decades of inner accuracy, the same four digits, and a factor of 2.6 in work. The floor is not the arithmetic and it is not the conditioning: it is the square of the distance the step started at, 6.23·10⁻⁶, because a Newton step is the exact solution of a linearised problem and the linearisation is wrong at second order.
That is the whole of the field’s first claim, and everything else in it is the same claim about a different object: the tolerance, the factorisation, the preconditioner and the pattern are all approximations to something, the outer loop measures the difference from the matrix at every step, and what may be approximated is decided by what is measured again rather than by what looks important.
What the field will not claim
Two things are worth ruling out at the start, because both are easy readings of the essays that follow and both are wrong.
Not that a rule beats a constant. A rule that reads the residual beats every constant forcing term, and a rule that reads the contraction ratio beats every fixed refactorisation period. A rule that reads the iteration count of a preconditioned solve does not beat every fixed rebuild period: it wins in the middle of the range and loses at both ends, because what it cannot see is what a rebuild cost, and at the ends that is the whole decision.
Not that an outer loop repairs everything. It repairs a loose tolerance, a stale factorisation and a stale preconditioner. It does not repair a pivot replaced by a number nine orders of magnitude larger than the row it came from, and it does not repair a random projection that the input has already been made orthogonal to. Both of those are changes to the problem rather than errors in solving it, and a residual computed from the problem cannot see them.
The rest of this field is those measurements, in that order.
Where this field touches the others
It is worth naming the essays this one is built on, because the field is not a new subject — it is every existing field’s object, met a second time.
Reads more easily once this is understood
Essays that name this one as worth reading first.
Shares its objects with
Essays that name at least two of the same things, and that neither author linked.
- A factorisation kept past its date — both name cholesky factorisation, exact ground truth, flop count, newton iteration, triangular solve, warm start
- What a rebuild is worth — both name cholesky factorisation, condition number, flop count, preconditioning, warm start
- Where the drift lands — both name cholesky factorisation, condition number, flop count, preconditioning
- A rule that is correct and unusable — both name backward error, condition number, flop count
- A tolerance that reads its own residual — both name flop count, newton iteration, warm start
- An iteration that only multiplies — both name condition number, flop count, newton iteration
Named objects
A flat tag is an object no other essay names yet.
Backward errorCholesky factorisationCondition numberExact ground truthFlop countNewton iterationPreconditioningTriangular solveWarm start