5D Library › Computational Attachment Theory and Couple Interaction Dynamics · 中文
Chapter 2 Coupled Equations of the Pursue–Withdraw Loop
The demand–withdraw pattern
One of the most often described conflict patterns in couple research is demand–withdraw, known clinically as “pursuer–distancer”: one partner makes requests, criticisms or complaints, trying to get the other to respond and change; the other avoids the discussion, falls silent or leaves.
Evidence
Who pursues and who withdraws depends on the topic. Christensen and Heavey had married couples discuss one issue on which the wife wanted the husband to change and one on which the husband wanted the wife to change. Overall, “wife demands, husband withdraws” was more common than the reverse; but the asymmetry appeared mainly in discussions of the change the wife wanted, and shrank markedly in discussions of the change the husband wanted. The researchers concluded that the pattern stems not only from gender or personality but also from social structure: the partner who wants to change the status quo is more likely to pursue, the partner who benefits from it more likely to withdraw (Christensen and Heavey 1990). Links to relationship outcomes. A meta-analysis pooling more than seventy studies found demand–withdraw associated with lower relationship satisfaction, poorer communication and individual depression and anxiety (Schrodt et al. 2014).
Both points warn that the pursue–withdraw loop cannot simply be attributed to attachment: who wants change, whose issue is being discussed and the power and division of labour in the relationship all influence who plays which role. Attachment theory offers another layer of explanation: anxiety corresponds to a “hyperactivating” strategy that intensifies seeking when distance is felt, avoidance to a “deactivating” strategy that creates distance when pressed (Mikulincer and Shaver 2016). When the two strategies meet in one couple, each partner’s way of coping becomes exactly the other’s trigger.
A coupled toy model
The best-known use of differential equations for a love affair is Strogatz’s half-joking “Romeo and Juliet”: the more Juliet likes Romeo, the more he loves her; the more he loves her, the more she wants to pull away; when she pulls away he cools off; when he backs off she likes him again, and their feelings rise and fall in cycles (Strogatz 1988). The model below is closer to the structure of demand–withdraw, but it too is only a toy.
Calculation
is partner A’s pursuit (requests, pressing, trying to get a response) and partner B’s withdrawal (silence, leaving, refusing to discuss), both between 0 and 1:
is a smooth threshold function. is how sensitive A is to B’s withdrawal, how sensitive B is to A’s pursuit; and are each person’s baseline drive (unmet needs, outside stress); is “exhaustion” that builds slowly while conflict runs and fades slowly afterwards. Time is in minutes.
# The pursue-withdraw (demand-withdraw) loop as two coupled rate equations (a toy model).
# x = partner A's pursuit (requests, criticism, attempts to get a response), 0..1
# y = partner B's withdrawal (silence, leaving the room, "I don't want to talk about it"), 0..1
# tau dx/dt = -x + S(gA*y + uA - z) A pursues harder the more B withdraws
# tau dy/dt = -y + S(gB*x + uB - z) B withdraws more the harder A pursues
# S(v) = 1 / (1 + exp(-8 (v - 0.5))) a smooth threshold
# uA, uB: baseline drive (unmet need, outside stress). z: slow exhaustion that builds while the
# conflict runs and wears off afterwards, tau_z dz/dt = c (x + y)/2 - z (set c = 0 to switch it off).
# Time is in minutes; tau = 1 minute, tau_z = 30 minutes. All numbers illustrative.
import math
def S(v): return 1 / (1 + math.exp(-8 * (v - 0.5)))
def simulate(gA, gB, uA=0.15, uB=0.15, c=0.0, T=240.0, dt=0.01, pulse=(10.0, 12.0, 0.6), x=0.05, y=0.05):
z, tau, tauz, out = 0.0, 1.0, 30.0, []
for i in range(int(T / dt)):
t = i * dt
kick = pulse[2] if pulse[0] <= t < pulse[1] else 0.0 # a two-minute trigger for A
dx = (-x + S(gA * y + uA + kick - z)) / tau
dy = (-y + S(gB * x + uB - z)) / tau
dz = (c * (x + y) / 2 - z) / tauz
x, y, z = x + dx * dt, y + dy * dt, z + dz * dt
if i % 100 == 0: out.append((t, x, y))
return out
def equilibria(gA, gB, uA=0.15, uB=0.15):
# fixed points without exhaustion: x = S(gA*S(gB*x + uB) + uA); count sign changes on a fine grid
f = lambda x: S(gA * S(gB * x + uB) + uA) - x
xs = [i / 4000 for i in range(4001)]
return sum(1 for a, b in zip(xs, xs[1:]) if f(a) * f(b) < 0)
print("equal sensitivity g = gA = gB; a two-minute trigger at t = 10 min; no exhaustion")
print(" g | fixed points | pursuit / withdrawal 60 min after the trigger")
for g in (0.4, 0.6, 0.8, 1.0):
t, x, y = min(simulate(g, g), key=lambda r: abs(r[0] - 72))
t0, x0, _ = min(simulate(g, g, pulse=(0, 0, 0)), key=lambda r: abs(r[0] - 72))
note = ("escalates even without a trigger" if x0 > 0.5 else "trigger tips it; it stays escalated" if x > 0.5
else "back to calm")
print(f" {g:.1f} | {equilibria(g, g):12d} | {x:.2f} / {y:.2f} {note}")
print("the loop, not one partner: lowering EITHER sensitivity from 0.8 to 0.45")
for gA, gB in ((0.8, 0.8), (0.45, 0.8), (0.8, 0.45)):
t, x, y = min(simulate(gA, gB), key=lambda r: abs(r[0] - 72))
print(f" gA = {gA:.2f}, gB = {gB:.2f}: fixed points {equilibria(gA, gB)}, 60 min after trigger x = {x:.2f}, y = {y:.2f}")
base = simulate(0.8, 0.8, c=0.8, T=600.0, pulse=(0, 0, 0)); top = max(x for t, x, y in base if t > 100)
print(f"slow exhaustion (c = 0.8) at the original drive uA = uB = 0.15, no trigger: highest pursuit after 100 min"
f" {top:.2f}, {'no eruptions' if top < 0.5 else 'eruptions'}")
print("with slow exhaustion (c = 0.8) and a higher baseline drive (uA = uB = 0.35), g = 0.8, no trigger:")
traj = simulate(0.8, 0.8, uA=0.35, uB=0.35, c=0.8, T=600.0, pulse=(0, 0, 0))
up = [t for (t, x, _), (_, x2, _) in zip(traj, traj[1:]) if x < 0.5 <= x2]
hi = sum(1 for t, x, _ in traj if x > 0.5 and t > 100) / sum(1 for t, *_ in traj if t > 100)
print(f" escalations begin at t = {', '.join(f'{u:.0f}' for u in up)} min; "
f"period about {(up[-1] - up[1]) / (len(up) - 2):.0f} min; escalated {hi:.0%} of the time")
# equal sensitivity g = gA = gB; a two-minute trigger at t = 10 min; no exhaustion
# g | fixed points | pursuit / withdrawal 60 min after the trigger
# 0.4 | 1 | 0.07 / 0.07 back to calm
# 0.6 | 1 | 0.08 / 0.08 back to calm
# 0.8 | 3 | 0.97 / 0.97 trigger tips it; it stays escalated
# 1.0 | 1 | 0.99 / 0.99 escalates even without a trigger
# the loop, not one partner: lowering EITHER sensitivity from 0.8 to 0.45
# gA = 0.80, gB = 0.80: fixed points 3, 60 min after trigger x = 0.97, y = 0.97
# gA = 0.45, gB = 0.80: fixed points 1, 60 min after trigger x = 0.08, y = 0.09
# gA = 0.80, gB = 0.45: fixed points 1, 60 min after trigger x = 0.09, y = 0.08
# slow exhaustion (c = 0.8) at the original drive uA = uB = 0.15, no trigger: highest pursuit after 100 min 0.06, no eruptions
# with slow exhaustion (c = 0.8) and a higher baseline drive (uA = uB = 0.35), g = 0.8, no trigger:
# escalations begin at t = 1, 65, 123, 180, 238, 296, 353, 411, 468, 526, 583 min; period about 58 min; escalated 26% of the timeThe toy model shows several things.
First, at low sensitivity ( or ) the system returns to calm by itself after a trigger: there is only one equilibrium, and it is calm.
Second, at higher sensitivity () there are three equilibria: calm, escalated, and an unstable boundary between them. A brief trigger is enough to push the system across the boundary, after which the escalated state sustains itself even when the trigger is gone. This is what many couples describe as “how did such a small thing turn into this?”: what keeps the escalation going is not the small thing but the loop itself.
Third, at very high sensitivity () the calm state disappears and escalation happens without a trigger.
Fourth, the loop belongs to both people: starting from , lowering only A’s sensitivity or only B’s has exactly symmetric effects, and either removes the escalated state. In the model there is no answer to “who is to blame”, only the question “which part of the loop can loosen first”.
Fifth, with slow exhaustion added and both baseline drives raised from 0.15 to 0.35 (more outside stress, say), the system shows a limit cycle (with exhaustion alone and baseline drives still at 0.15 there are no eruptions): conflict escalates, exhaustion builds, conflict subsides, exhaustion fades, conflict escalates again, with a period of about an hour (the parameters are illustrative). This may correspond to what some couples describe as “a big fight every so often, then fine for a while”.
Note
This is not saying anyone’s sensitivity is “too high”. “Sensitivity” in the model is the strength of a person’s reaction to the other’s behaviour in this relationship and situation; it changes with stress, sleep, past hurts, the topic and power relations, and is not a fixed trait. Nor does the model include whether what each says is reasonable: if one partner’s demand is legitimate (sharing housework, stopping hurtful behaviour), “lowering the pursuer’s sensitivity” is not the answer.
Hypothesis · not established
Loop-gain hypothesis (not yet established). In a pursue–withdraw loop, the duration of escalation depends mainly on the product of the two partners’ sensitivities (the loop gain), not on either alone; so training only one partner to react less and training each to react half as much should have similar effects. Testable prediction: in a dyadic randomised trial, “train only the pursuer”, “train only the withdrawer” and “train both” should reduce escalation time by similar amounts (at the same total training dose). If training one partner alone is clearly more effective, the hypothesis needs revision.
Chapter summary
Demand–withdraw is one of the most often described patterns in couple conflict and is associated with lower relationship satisfaction; who pursues and who withdraws relates both to attachment strategies and to who wants change and whose issue it is. A two-variable toy model shows that when both partners’ sensitivities are high enough the loop has two stable states, and a small trigger can push it into self-sustaining escalation; with slow exhaustion and a higher baseline drive, eruptions recur periodically. Lowering either partner’s sensitivity has symmetric effects: the problem lies in the loop, not in one person. The next chapter turns to the marriage equations Gottman and Murray built from real conversations.
References
Fan, Y. (2026). Computational Attachment Theory and Couple Interaction Dynamics: From Anxious-Avoidant Coupled Oscillators and Gottman's Nonlinear Difference Equations to Updating Early Relational Priors [依恋理论的计算模型与伴侣互动动力学] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23754715 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).