Where the angle comes from

Where the model stops

Below a growth parameter of about 0.18 this implementation does not converge — the settled angle wanders over a hundred degrees however long the run. That is the range where the literature says the interesting behaviour lives, and it is worth a figure rather than a quietly chosen axis.

Worth reading first: The bifurcation diagram.

Every model has a range where it works, and a site that plots only that range is hiding the more interesting half of its own honesty.

This one stops converging below a growth parameter of about 0.18.

Where this implementation stops converging. Below about G = 0.18 the settled angle wanders over 113° however long the run. That is the model's limit, not a fact about plants.
Fig. 1 The spread of the last thirty steps against the growth parameter. Above about 0.18 it is zero — the model has settled. Below it, the angle wanders over a hundred degrees and does not stop.

What goes wrong

At slow growth the elements barely move outward between steps. After a dozen steps the newest dozen elements are all still within a few percent of the meristem boundary, effectively sitting on the same circle as the place where the next one has to go.

The problem then degenerates. Placing a point on a circle as far as possible from a set of points also on that circle is just “find the biggest gap”, and filling the biggest gap repeatedly is a sequence with no attractor in it — it depends on the entire history, and a model that keeps only a finite window loses exactly the information it needs.

Two things were tried and neither helped, which is how the limit was established rather than assumed.

Longer runs. Three hundred steps at a growth of 0.03 wander as much as eighty do. It is not a transient.

A bigger window. The window is already scaled to the growth rate — the number of elements within a fixed radius ratio is the logarithm of that ratio divided by the growth parameter, so it grows automatically as the parameter shrinks. Fixing the window at a constant was an earlier bug and fixing it improved the middle of the range and not the bottom.

Why the limit sits exactly where it is inconvenient

The regime this implementation cannot reach is the one the botanical literature cares about most.

High-order Fibonacci phyllotaxis — the 55-and-89 heads that get photographed — corresponds to slow growth relative to primordium size, which is the small-parameter end. Douady and Couder’s own treatment works there, using a continuous formulation and a much more careful treatment of the interaction, and it is where their Fibonacci ladder appears.

So the honest summary of what is here is narrow: this implementation demonstrates that the golden angle is an attractor of a repulsion rule over a broad range of growth rates, and that other regimes exist at higher rates. It does not reproduce the climb up the Fibonacci sequence at low rates, and a reader wanting that should go to the original papers rather than to this site.

Why it is drawn rather than mentioned

Because a range chosen to make a model look good is indistinguishable, from outside, from a range chosen because it is the right one.

Every figure on this site that sweeps the growth parameter starts at 0.2, and a reader has no way to know whether that is a considered choice or a convenient one. Plotting the convergence failure directly answers that: the axis starts there because below there the model does not answer, and the plot shows exactly how badly.

That is a small piece of work with a disproportionate effect on how much the rest of the figures can be trusted. A site that shows where its machinery breaks has said something about the parts where it does not.

The general form

The distinction to keep is between a limit of the model and a fact about the subject.

That the settled angle wanders below G = 0.18 is a fact about a sampled circle with an inverse-cube repulsion and a truncated window. It is not a fact about meristems, and if it were reported without that framing it would read as one — “slow-growing plants have no consistent divergence angle” is a sentence this data does not support and could easily be mistaken for.

The same distinction applies to the packing measurements, where several criteria disagree at finite head size, and it would be equally wrong to conclude that the golden angle is unremarkable. What both cases show is where the measurement runs out, which is a different thing from what the world does.

What was tried

Three things, in order, and recording them is the point of the essay.

A longer run. Three hundred steps at a growth of 0.03 wander as much as eighty do. Convergence is not being cut short.

A larger window. The number of elements kept is already scaled to the growth rate — the count within a fixed radius ratio is log(ratio)/G, so it grows automatically as the parameter shrinks, from fourteen at G = 0.15 to over forty at G = 0.02. Fixing the window at a constant was an earlier bug and fixing it improved the middle of the range and did nothing at the bottom.

A finer boundary. Fourteen hundred and forty samples rather than seven hundred and twenty. The wandering is not quantisation.

So the failure is structural rather than a matter of resolution or patience, and the structure is described in the essay above: at slow growth the youngest several elements all sit on the meristem boundary, the problem degenerates into repeatedly filling the biggest angular gap, and a truncated history cannot do that stably.

What the literature does instead

Douady and Couder’s own treatment reaches the low-growth regime, and the differences are worth naming because they say what a better implementation would need.

A continuous formulation. Their model treats the primordia as a continuum rather than as a list, which removes the truncation entirely.

A softer boundary. The new element is not placed on a circle of fixed radius but where an inhibition field falls below a threshold, which is closer to what a meristem does and removes the degeneracy of several elements sharing a radius.

Continuation rather than restart. Their sweeps follow a branch as the parameter changes, rather than restarting the model at each value. That is what reveals the hysteresis and the Fibonacci ladder, and it is why their diagram has structure that a restart-at-each-point sweep cannot show.

Any of the three would be a substantial piece of work and all three are the obvious next step for this site.

Why the failure is worth drawing

Because a range chosen to make a model look good is indistinguishable, from outside, from a range chosen because it is the right one.

Every sweep on this site starts at G = 0.2, and a reader has no way to know whether that is a considered choice or a convenient one. Plotting the convergence failure directly answers it, and the plot costs one figure.

There is a second reason, which is about what the reader should conclude. Without the figure, a reader who tried the model themselves at a low growth rate and got nonsense would reasonably conclude they had made a mistake. With it, they know they have reproduced a known limit.

The distinction to keep

Between a limit of the model and a fact about the subject.

That the settled angle wanders below G = 0.18 is a fact about a sampled circle with inverse-cube repulsion and a truncated window. It is not a fact about meristems. Reported without that framing it would read as one — “slow-growing plants have no consistent divergence angle” is a sentence this data does not support and could easily be mistaken for.

The same distinction applies to the packing measurements, where several criteria disagree at finite head size and it would be equally wrong to conclude that the golden angle is unremarkable. Both cases show where the measurement runs out, which is a different thing from what the world does — and being able to tell the two apart is most of what a site like this is for.

What the model settles on, against how fast the meristem grows. A broad golden branch, a transition, and then the two-whorl regime at exactly half a turn. 9 of 27 converged settings land within 4° of the golden angle; 15 land more than 20° away.
Fig. 2 The diagram the constant is one branch of. Sweeping the growth parameter gives a golden branch, a transition and a two-whorl regime at half a turn.

Why the continuous formulation reaches further

The obstacle is not the physics; it is the discretisation, and naming the three places it bites makes clear why a different implementation does better.

The boundary is sampled. This implementation evaluates the repulsion at 720 points around the meristem and takes the least. At high growth the minimum is broad and 720 samples locate it to well under a degree. At low growth the energy landscape around the ring is nearly flat with several shallow minima, and which one wins can be decided by the sampling rather than by the field.

The window is finite. It is scaled to the growth rate, which is the fix for an earlier bug, but at very low G the required window grows without bound and the truncation eventually bites again.

The steps are discrete. Real primordia appear over a finite time and push their neighbours while forming; a model that places one point and freezes it discards the relaxation, which is exactly the mechanism that lets a slow system find its way to a Fibonacci ladder rather than wandering.

Douady and Couder’s treatment replaces all three: a continuous energy, an interaction with an explicit range, and relaxation of the whole configuration rather than placement of one element. It reaches the small-parameter regime, and its Fibonacci ladder is the classic result of the subject.

Implementing that here was a scope decision rather than a difficulty. It is the first item on this site’s list of what is missing.

Two runs of the same rule from unrelated starting angles. Both settle at 137.0°, within 0.5° of the golden angle, from seeds 166° apart.
Fig. 3 Two runs of the same rule from unrelated starting angles, both settling on the same value.

Stating a limit is a result

There is a version of this site that sweeps from G = 0.2 upward, shows a clean diagram, and says nothing. Every figure would pass, every claim would be true, and the reader would come away believing the model works everywhere.

The reason not to do that is not decorum. It is that the region that fails is the region the literature is about, so a reader who took the clean diagram at face value and went looking for high-order Fibonacci phyllotaxis in it would find nothing and have no idea why.

A plotted limit is also checkable, which a cropped range is not. The claim here is specific: below G ≈ 0.18 the spread of the last thirty steps exceeds twenty degrees and stays there for runs of any length. Someone who thinks that is an artefact can test it, and the two things already tried — longer runs, larger windows — are reported so that they are not tried twice.

Where this implementation stops converging. Below about G = 0.18 the settled angle wanders over 113° however long the run. That is the model's limit, not a fact about plants.
Fig. 4 The same sweep over six of the ten settings. Where the model stops converging is read off the spread of the last thirty steps, and it is read the same way at every setting.

What is not being conceded

The limit is a fact about this implementation, and it is worth separating from three things it is not.

It is not a failure of the Douady–Couder model, which behaves well in the region in its own formulation.

It is not evidence that low-G phyllotaxis is unstable in plants. The wandering is numerical, and reading it as biology would be exactly the mistake this site keeps warning about — treating a property of a model as a property of the thing modelled.

It is not a limit on the rest of the site. Everything about lattices, counting, angle recovery, packing and arithmetic is independent of the dynamics: those essays take an angle as given and measure what follows. The dynamical model is the part that explains where the angle comes from, and it is the part with the boundary.

Where this implementation stops converging. Below about G = 0.18 the settled angle wanders over 113° however long the run. That is the model's limit, not a fact about plants.
Fig. 5 Five settings spanning the whole range, both of the non-converging ones kept. The boundary is drawn rather than avoided, which is what makes it a limit of the implementation rather than of the subject.

The two things tried, in more detail

The claim that the limit is real rests on having tried to move it, so the attempts are worth recording precisely enough to be repeated.

Longer runs. At G = 0.03 the model was run for 80, 150 and 300 placements. The spread of the last thirty steps was 84°, 91° and 87° respectively — no trend, and no sign of a long transient settling. If it were a transient, three hundred steps at that growth rate would be far past it.

Larger windows. The interaction window was doubled and then quadrupled beyond the log(reach)/G scaling. The middle of the range was unaffected, since the extra elements contribute almost nothing there, and the low end stayed exactly as unsettled. That rules out truncation as the cause, which had been the leading suspicion because truncation was the cause of an earlier and quite different failure.

What remains is the boundary sampling and the absence of relaxation, which are structural rather than tunable. A different implementation is needed, not a bigger number.

Where this implementation stops converging. Below about G = 0.18 the settled angle wanders over 113° however long the run. That is the model's limit, not a fact about plants.
Fig. 6 The two settings that never converge and three that do, and nothing in between. Reading a sparse sweep is the cheapest check that the boundary is not an artefact of the sampling.

What a reader should take from a stated limit

The general habit is worth naming, because it applies well beyond this model.

Every computational result on this site is produced by an implementation with a range, and the range is rarely the whole domain. A site that reports only results from inside the range, without saying where it is, is making claims that look stronger than they are — and the reader has no way to tell, because a working figure looks the same whether or not the region next to it works.

So the limits get plotted. The sweep grid that cannot represent the golden angle, the packing statistics that depend on head size, the counting that depends on radius and this convergence boundary are all the same kind of statement: here is where the measurement stops meaning what it appears to mean.

The item at the top of the list

Since this essay is the site’s statement of what it cannot do, it should say what it would take to fix it.

A continuous formulation: an energy defined over the whole configuration rather than a placement rule, relaxed to a local minimum at each step, with the interaction range as an explicit parameter rather than an element count. That removes all three of the discretisation problems at once and reaches the low-G regime where the Fibonacci ladder lives.

It would also make a prediction this site currently cannot check: the ladder’s transitions should fall at parameter values computable from the same model, and they should line up with the radius transitions in a single head, which are computed here from lattice geometry alone. Two routes to the same numbers, which is the arrangement this site prefers and does not yet have for this part of the subject.

Where this implementation stops converging. Below about G = 0.18 the settled angle wanders over 113° however long the run. That is the model's limit, not a fact about plants.
Fig. 7 Five spread across the lower half. Every result on this site that uses the rule is quoted inside the region these figures bound.

The habit, stated plainly

An implementation with a boundary is the normal case, not a special one, and the only decision is whether to draw it.

The argument for drawing it is that a reader cannot see it otherwise. A figure computed inside the working range looks exactly like a figure computed anywhere, and a site that crops silently is making its results look more general than they are without saying anything false.

The argument against — that it undermines confidence — has it backwards. A stated limit is a claim someone can test, and a site that states one has demonstrated it knows where its own edges are. A site with no stated limits has either found none or looked for none, and the reader has no way to tell which.

So the sweep grid that cannot represent the target value, the packing statistics that move with head size and this convergence boundary are all drawn. They are the least flattering figures here and they are the ones that make the rest worth reading.

A window that makes a pattern

The work after it found a failure mode of this rule that belongs on this page, and it is the sharpest one yet because the output looks correct.

Every simulation of a placement rule truncates its neighbourhood somewhere. At the exponent this site uses that is harmless — the interaction has effectively vanished within three node spacings, so where the array stops is irrelevant. At a long-range exponent it is not: the truncation supplies the contrast between a node’s immediate neighbours and the rest that the exponent fails to supply, and the rule then produces a lattice it has no business producing.

Where this implementation stops converging. Below about G = 0.18 the settled angle wanders over 113° however long the run. That is the model's limit, not a fact about plants.
Fig. 8 And the whole of the range below 0.5 at its finest step. Six sweeps is what the boundary is located by — and every one of them has to reach the two settings that do not converge, because a sweep that starts above them cannot show where the boundary is.

The manufactured lattice passes every check in this collection. It has a countable consecutive-Fibonacci pair, a divergence within a tenth of a degree of 137.5°, and less scatter than several genuine runs. What distinguishes it is that it disappears when the model is asked a question it was not built to answer — widen the neighbourhood, or nudge it with a fifth of a degree of noise, and it is not there.

That is the general form of what this page is about. A limit of a model is most dangerous where the model still produces something plausible, and the cheapest tests for it are about the machinery rather than the phenomenon: the cut-off, the resolution, the window, the seed.

A later note: one more parameter of the program

This page lists what the model is for and where it stops. Later work added a class of limit it does not cover: a number in the program rather than in the model, deciding a result.

What links here

Computed from the collection, not written here: the essays that point at this one.

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.

Named objects

A flat tag is an object no other essay names yet.

BranchConvergenceDiscretisationDivergence angleFibonacciHonest limitsThe range of the interactionLadderMeristemRepulsionTruncation