5D Library › Phase Transitions, Critical Slowing Down and Resilience in Complex Dynamical Systems · 中文
Chapter 1 Folds, Hysteresis and Flips That Are Hard to Undo
A calm surface
In many ecosystems change is not proportional to pressure. A shallow lake can stay clear through decades of slowly rising nutrient loading and then switch within a short time to a turbid state dominated by phytoplankton; a coral reef can be overgrown by macroalgae within a few years. In their 2001 review Scheffer, Carpenter, Foley, Folke and Walker called such events “catastrophic shifts” in ecosystems and discussed lakes, coral reefs, woodlands, deserts and oceans within a single framework (Scheffer et al. 2001).
The core of that framework is that under the same external conditions a system may have more than one stable state. As conditions change slowly, the stable state the system occupies grows shallower until, at some point, it disappears and the system has to jump to another stable state; even if conditions are then returned to where the jump happened, the system does not come back. This difference between the way out and the way back is called hysteresis.
The grazing model
Calculation
Let be the amount of vegetation (or of a harvested population). It grows logistically and is consumed by herbivores (or harvested) with intensity ; consumption is a sigmoid (Holling type III) function of : when vegetation is scarce the animals find little to eat, and when it is plentiful they are satiated and eat no more.
Apart from , the equilibrium condition can be written , that is, “ is an equilibrium at pressure ”. The function first falls, then rises, then falls again; its local minimum and maximum are the two saddle-node bifurcations (folds) and . For between them the system has two stable equilibria separated by an unstable one.
The graphical analysis of grazing systems by plant growth and consumption curves (sigmoid ones among them) goes back to Noy-Meir (Noy-Meir 1975); in his 1977 review May placed it alongside other simple models with multiple stable states, applied them to grazing systems, insect pests and some human host–parasite systems, and discussed “thresholds” and “breakpoints” (May 1977). This book uses the dimensionless illustrative values , , , which correspond to no particular pasture or fishery.
Calculation
The program finds the two folds; raises the pressure very slowly from 1.0 to 3.0 and lowers it again, recording where the jumps occur; and, starting from the collapsed state at pressure 2.7, lowers the pressure to various levels to see whether the system recovers.
Calculation
# Folds (saddle-node bifurcations) and hysteresis in the grazing model of Noy-Meir (1975) and
# May (1977): dx/dt = r x (1 - x/K) - c x^2/(x^2 + a^2); x = vegetation (or a harvested
# stock), c = grazing / harvesting pressure. Illustrative values r = 1, K = 10, a = 1.
R, K, A = 1.0, 10.0, 1.0
f = lambda x, c: R * x * (1 - x / K) - c * x * x / (x * x + A * A)
c_of_x = lambda x: R * (1 - x / K) * (x * x + A * A) / x # x > 0 is an equilibrium at c
dc = lambda x, h=1e-6: (c_of_x(x + h) - c_of_x(x - h)) / (2 * h)
def bisect(g, lo, hi, n=80):
for _ in range(n):
mid = (lo + hi) / 2
if (g(lo) > 0) == (g(mid) > 0): lo = mid
else: hi = mid
return (lo + hi) / 2
X1, X2 = bisect(dc, 0.5, 2.5), bisect(dc, 2.5, 9.0) # local min and max of c(x)
C1, C2 = c_of_x(X1), c_of_x(X2)
def equilibria(c):
xs, roots = [i * 0.01 for i in range(1, 1000)], []
for u, v in zip(xs, xs[1:]):
if (f(u, c) > 0) != (f(v, c) > 0):
x = bisect(lambda x: f(x, c), u, v)
if not roots or x - roots[-1] > 0.02: roots.append(x)
return roots
def settle(x, c, t=200.0, dt=0.01):
for _ in range(int(t / dt)): x += f(x, c) * dt
return x
if __name__ == "__main__":
print(f"folds: c1 = {C1:.3f} (at x = {X1:.2f}), c2 = {C2:.3f} (at x = {X2:.2f})")
print(" c equilibria (stable / unstable / stable)")
for c in (1.5, 1.8, 2.2, 2.6, 2.7):
print(f" {c:.1f} " + " ".join(f"{x:5.2f}" for x in equilibria(c)))
x, c, up, down = settle(9.0, 1.0), 1.0, None, None # slow sweep, dc/dt = 0.0005
while c < 3.0:
x += f(x, c) * 0.01; c += 0.000005
if up is None and x < 3.0: up = c
while c > 1.0:
x += f(x, c) * 0.01; c -= 0.000005
if down is None and x > 3.0: down = c
print(f"slow sweep up: collapse at c = {up:.3f}; sweep down: recovery at c = {down:.3f}")
low = settle(9.0, 2.7) # collapsed at c = 2.7: how far must c be cut?
print(f"collapsed state at c = 2.7: x = {low:.2f}")
ends = [(c, settle(low, c, t=400.0)) for c in (2.5, 2.2, 2.0, 1.85, 1.80, 1.75, 1.5)]
print(" pressure cut to c: " + " ".join(f"{c:4.2f}" for c, _ in ends))
print(" x settles at: " + " ".join(f"{e:4.2f}" for _, e in ends)
+ " (> 3 = recovered)")
# folds: c1 = 1.787 (at x = 1.14), c2 = 2.604 (at x = 4.78)
# c equilibria (stable / unstable / stable)
# 1.5 8.20
# 1.8 1.00 1.30 7.70
# 2.2 0.57 2.57 6.86
# 2.6 0.44 4.56 5.00
# 2.7 0.42
# slow sweep up: collapse at c = 2.635; sweep down: recovery at c = 1.762
# collapsed state at c = 2.7: x = 0.42
# pressure cut to c: 2.50 2.20 2.00 1.85 1.80 1.75 1.50
# x settles at: 0.46 0.57 0.68 0.86 1.00 7.79 8.20 (> 3 = recovered)The two folds lie at and . Between them a single value of allows two outcomes: at the vegetation can settle at 6.86 or at 0.57, and the value 2.57 in between is the boundary of the two basins of attraction. The slow sweep shows hysteresis: on the way up the system collapses at (slightly beyond 2.604, because the pressure keeps moving and the system lags behind), and on the way down it recovers only at . Starting from the collapsed state at , cutting the pressure to 2.5, 2.2, 2.0 or even 1.80 leaves the system in the low state; only at 1.75, below , does the vegetation return to 7.79. Once has been crossed, the pressure must be about 31 % lower than at the collapse for recovery. This is what the author’s framework means by “pulling the pressure back well below the other bifurcation point”.
Note
Terminology. Chapter 4 of Volume 13 of 5D Library used the normal form of the cusp to discuss hysteresis and the “bottleneck” near a fold; there the two folds are symmetric. The grazing model’s folds are not, and its collapsed state is low but not zero; recovery follows once the pressure falls below . Strictly, this is hysteresis; “irreversibility” requires a stronger condition.
Reversible, hysteretic and irreversible
Calculation
A dimensionless phosphorus model of a shallow lake (after the model of Carpenter, Ludwig and Brock 1999 and Box 1 of the review by Scheffer and colleagues 2001):
is phosphorus in the water (turbidity), is loading from the catchment, the rate of loss by outflow and burial, and the last term the positive feedback by which anoxic sediments release phosphorus back into the water; . The program sorts lakes by into three types: “reversible” lakes with no fold; “hysteretic” lakes with both folds at positive loading; and “irreversible” lakes whose fold for the way back lies at negative loading.
Calculation
# Reversible, hysteretic and irreversible lakes (after Carpenter, Ludwig & Brock 1999 and
# Box 1 of Scheffer et al. 2001). Dimensionless phosphorus model:
# dx/dt = a - b x + x^q / (1 + x^q)
# x = phosphorus in the water (turbidity), a = loading from the catchment, b = loss rate
# (outflow, burial), x^q/(1+x^q) = recycling from the sediment. q = 8; values illustrative.
Q = 8
def a_eq(x, b): # loading at which x is an equilibrium
return b * x - x ** Q / (1 + x ** Q)
def folds(b):
xs = [i / 2000 for i in range(1, 8000)]
ext = []
for u, v, w in zip(xs, xs[1:], xs[2:]):
if (a_eq(v, b) - a_eq(u, b)) * (a_eq(w, b) - a_eq(v, b)) < 0:
ext.append(a_eq(v, b))
return ext # [] or [a_on, a_off]
def settle(x, a, b, t=300.0, dt=0.01):
for _ in range(int(t / dt)):
x += (a - b * x + x ** Q / (1 + x ** Q)) * dt
return x
print("loss b lake type tips to turbid at a > returns to clear at a <")
for b in (2.5, 1.0, 0.8, 0.6, 0.45):
fo = folds(b)
if not fo:
print(f" {b:4.2f} reversible (no fold: x changes smoothly with a)")
continue
a_on, a_off = fo
kind = "hysteretic" if a_off > 0 else "IRREVERSIBLE"
note = f"{a_off:6.3f}" if a_off > 0 else f"{a_off:6.3f} (impossible: a >= 0)"
print(f" {b:4.2f} {kind:13s} {a_on:6.3f} {note}")
for b in (1.0, 0.6):
a_on, a_off = folds(b)
x = settle(0.2, a_on + 0.05, b) # loading pushed just past the fold
print(f"b = {b}: loading {a_on + 0.05:.3f} -> turbid x = {x:.2f}; loading cut to")
for a in (a_on - 0.05, max(a_off, 0) + 0.03, max(a_off - 0.03, 0.0)):
print(f" a = {a:.3f}: x = {settle(x, a, b):.2f}")
# loss b lake type tips to turbid at a > returns to clear at a <
# 2.50 reversible (no fold: x changes smoothly with a)
# 1.00 hysteretic 0.660 0.389
# 0.80 hysteretic 0.510 0.144
# 0.60 IRREVERSIBLE 0.366 -0.111 (impossible: a >= 0)
# 0.45 IRREVERSIBLE 0.262 -0.309 (impossible: a >= 0)
# b = 1.0: loading 0.710 -> turbid x = 1.70; loading cut to
# a = 0.610: x = 1.59
# a = 0.419: x = 1.32
# a = 0.359: x = 0.36
# b = 0.6: loading 0.416 -> turbid x = 2.36; loading cut to
# a = 0.316: x = 2.19
# a = 0.030: x = 1.69
# a = 0.000: x = 1.63With a high loss rate () the lake responds smoothly to loading. With the water turns turbid once loading exceeds 0.660, and to become clear again loading must fall below 0.389, about 41 % lower than at the flip; with it must fall by about 72 %. With and 0.45 the threshold for the way back is negative: even with the catchment loading cut to zero the lake stays turbid (). Carpenter and colleagues pointed out that for irreversible lakes reducing the loading is not enough; the lake itself must be changed, for example by removing phosphorus-rich sediment (Carpenter et al. 1999).
Evidence: lakes
Evidence
Shallow lakes. Scheffer and colleagues summarised that shallow lakes can switch abruptly from a clear state with submerged plants to a turbid, algae-dominated state when nutrient loading crosses a threshold, the loss of plants then helping to keep the water turbid; restoring the clear state needs nutrient levels “substantially lower” than those at which the collapse occurred, and simply reversing the loading often fails. They gave Lake Veluwe in the Netherlands as an example and noted that, when nutrients are not too high, a short, drastic reduction of fish can make the water clear again (Scheffer et al. 2001). Jeppesen and colleagues collected long-term data from 35 lakes after nutrient loading had been reduced (5–35 years, mean 16): in most lakes total phosphorus reached a new equilibrium only after 10–15 years, phosphorus stored in the sediment having slowed recovery (Jeppesen et al. 2005).
The latter data agree with the qualitative prediction of the hysteresis model, but by themselves they cannot distinguish “hysteresis between multiple stable states” from “a single equilibrium approached very slowly”: a store of phosphorus in the sediment can by itself cause a delay of many years.
Evidence and dispute: coral reefs
Evidence
Jamaican reefs. Hughes documented the degradation of Jamaican reefs: coral cover at 10 m fell from a mean of 52 % in 1977–1980 to 3 % in 1990–1993, while fleshy macroalgae rose from 4 % to 92 %. The causes included decades of overfishing, Hurricane Allen in 1980 and a pathogen that in 1983 cut the density of the algae-grazing sea urchin Diadema antillarum by 99 %, with no recovery over the following decade (Hughes 1994). Using models, Mumby, Hastings and Edwards concluded that Caribbean reefs have generally lost resilience since 1983 and become highly sensitive to the overfishing of parrotfish (Mumby et al. 2007).
Evidence
The dispute. Bruno and colleagues analysed 3,581 surveys of 1,851 reefs worldwide made in 1996–2006 and found that only about 4 % were dominated by macroalgae (cover above 50 %), and only 1 % in the Indo-Pacific (Bruno et al. 2009). Dudgeon, Aronson, Bruno and Precht argued that, where firm conclusions can be drawn, fossil and modern data “overwhelmingly” support the phase-shift hypothesis rather than the alternative-stable-states hypothesis: a given tropical reef environment supports at most one stable community, and confusion in the literature comes from misunderstanding the theory and from conflating phase shifts caused by persistent environmental change with switches between alternative stable states; if the environment of degraded reefs is restored, the communities should return to coral dominance (Dudgeon et al. 2010).
The dispute decides the direction of management. If reefs are hysteretic, recovery needs “over-correction”; if a reef is a single state that tracks its environment, restoring the environment is enough. The two hypotheses do not differ in whether change is abrupt but in whether the way back differs from the way out, and that can be tested only after the environment has been improved.
Note
The limits of analogy. “Once past the threshold, a large reversal is needed for recovery” is often used to describe the vicious circle of a company’s cash flow, or the body’s sudden decompensation under long stress. As an analogy it draws attention to positive feedback and asymmetric paths of recovery; but the models and evidence in this chapter come from ecosystems and must not be used for any business or investment decision, or for any medical judgment about anyone. This book is neither investment advice nor medical advice.
Hypothesis · not established
Underestimated hysteresis (not yet established). The author conjectures that people managing a resource system with hysteresis tend to assume that “returning the pressure to where things went wrong will bring recovery”. A testable prediction: in a simulated harvesting task whose structure participants do not know, after a collapse most participants’ first reduction of effort is not enough to bring the pressure below the recovery threshold . If, in a pre-registered experiment, most participants’ first adjustment brings the pressure below , the hypothesis is refuted.
Chapter summary
Systems with positive feedback can have two stable states over a range of conditions. In the grazing model, once the pressure exceeds the system jumps to the low state, and recovery requires a fall below , about 31 % below the collapse point. In the lake phosphorus model the same structure yields reversible, hysteretic and irreversible behaviour, depending on the loss rate. The evidence for multiple stable states and slow recovery is good for lakes; whether coral reefs have alternative stable states remains disputed. The next chapter asks whether the approach to a fold can be seen in a system’s response to small disturbances.
References
Fan, Y. (2026). Phase Transitions, Critical Slowing Down and Resilience in Complex Dynamical Systems: From Saddle-Node Bifurcations and Early-Warning Signals to Cascading Failures, Read Beside Classical Chinese Thought on Incipient Change [复杂系统相变、临界慢化与生态韧性的非线性动力学] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23770082 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).