Solving for Equilibrium Price Level and Output
“The AS–AD model is the macroeconomist’s workhorse: simple enough to solve analytically, rich enough to address the central questions of stabilization policy.”
Cross-reference: Principles Ch. 7 (AS–AD derivation and shock analysis); Ch. 10 (Phillips curve, EAPC, NKPC); Ch. 30 (inflation and deflation) [P:Ch.7, P:Ch.10, P:Ch.30]
8.1 From Curves to Equations: The AD–AS System¶
Principles Chapter 7 presented the AS–AD framework graphically — a downward-sloping AD curve in space and an upward-sloping SRAS — with qualitative analysis of demand and supply shocks. This chapter makes that analysis algebraic. We write explicit equations for AD, SRAS, and LRAS; solve for the short-run and long-run equilibria in closed form; and derive exact formulas for the effects of shocks on output and the price level.
The payoff of the algebraic treatment is twofold. First, it produces precise multipliers for the price level and output analogous to the income multipliers of Chapter 7. Second, it derives the sacrifice ratio — the output cost per unit of inflation reduction — algebraically from the structure of the model, providing the benchmark against which the empirical estimates of Principles Ch. 10 and Ch. 28 are evaluated.
8.2 The Aggregate Demand Equation¶
The AD equation is derived from the IS–LM system by eliminating the interest rate. From Chapter 6:
This expresses equilibrium IS–LM output as a function of the price level (through the real money supply ). It is the AD equation.
Definition 8.1 (Aggregate Demand Equation). The AD equation expresses equilibrium output as a decreasing function of the price level:
where captures fiscal and autonomous demand components, and captures the monetary component. For a simpler linear approximation, log-linearize around a baseline price level :
where is the slope of the linearized AD curve.
What shifts AD?
A change in any variable other than that affects IS or LM shifts the AD curve:
Fiscal expansion (): raises by ; AD shifts right.
Monetary expansion (): raises at every ; AD shifts right.
Consumer confidence shock (): raises , shifts AD right.
The slope of the AD curve in space: (steep when is small — e.g., when is small or monetary policy is tight).
8.3 The Short-Run Aggregate Supply Equations¶
Principles Chapter 7 presented two microeconomic foundations for the upward-sloping SRAS: sticky wages and the Lucas imperfect-information model. We write both as explicit linear equations.
8.3.1 Sticky-Wage Model¶
When the nominal wage is fixed at (by contracts), a higher price level reduces the real wage , inducing firms to hire more labour and produce more. From the firm’s profit-maximization condition and inverting to get , then substituting into :
Linearizing around the flex-price equilibrium where (expected price):
This is the SRAS equation: output exceeds potential when the actual price level exceeds the price level expected when wages were set . Unexpected inflation erodes the real wage, stimulating production.
8.3.2 Lucas Imperfect-Information Supply Curve¶
Principles Chapter 16 derived the Lucas (1973) aggregate supply curve [P:Ch.16.1]:
where is the variance of relative price shocks and is the variance of aggregate nominal shocks. The parameter falls when aggregate nominal volatility rises: in high-inflation environments, firms attribute observed price increases to nominal shocks rather than real demand, reducing the output response. Both sticky-wage and Lucas supply functions take the same linear form .
Definition 8.2 (SRAS Equation). The short-run aggregate supply (SRAS) equation is:
where is potential output, is the actual price level, and is the price level expected when prices/wages were set.
Definition 8.3 (LRAS Equation). The long-run aggregate supply (LRAS) equation is:
a vertical line at potential output. In the long run (expectations adjust), and the SRAS collapses to the LRAS.
8.4 Short-Run Equilibrium: Solving the AD–SRAS System¶
Short-run equilibrium requires simultaneous clearing of goods and money markets (AD) and labour markets with sticky wages or imperfect information (SRAS). We have two equations in two unknowns :
Equating:
Solving for :
Substituting back to find :
Definition 8.4 (Output Multiplier in the AD–SRAS System). The effect of a rightward AD shift on equilibrium output:
This is always strictly less than 1. When AD shifts right, the price level rises along the upward-sloping SRAS; the higher price level partially crowds out the demand stimulus through the real-balance effect (which is built into the AD slope ). The larger is (steeper SRAS), the more of the AD shift goes into prices and the less into output.
Two limiting cases:
Perfectly flexible prices (, vertical SRAS): . AD shifts are entirely absorbed by price changes; output is unchanged at . This is the classical result.
Perfectly sticky prices (, horizontal SRAS): . AD shifts translate one-for-one into output changes; prices do not move. This is the extreme Keynesian result, coinciding with the Keynesian cross.
8.5 Shock Analysis: Analytical Comparative Statics¶
8.5.1 Demand Shock¶
A positive aggregate demand shock (e.g., fiscal expansion ) raises by :
Wait — let me re-express cleanly. From the formula:
Both output and the price level rise. The fraction going to output vs. prices is determined by and respectively.
8.5.2 Supply Shock¶
A negative supply shock (oil price increase) raises firms’ marginal costs, shifting SRAS left: in the SRAS equation. The comparative statics:
A supply shock generates stagflation: output falls while prices rise. This is the algebraic confirmation of the Principles Chapter 7 graphical result [P:Ch.7.4]. Note the supply shock moves output and prices in opposite directions from a demand shock — a key identifying feature that empirical researchers exploit.
The policy dilemma from a supply shock: The central bank faces a trade-off. It can:
Accommodate the supply shock (increase , shifting AD right): stabilizes output at but tolerates the higher price level.
Fight inflation (decrease , shifting AD left): stabilizes the price level but allows output to fall further.
This trade-off is captured by the divine coincidence breakdown of Principles Ch. 23 [P:Ch.23.2]: in the standard NK model without cost-push shocks, optimal policy achieves both stable inflation and a zero output gap simultaneously (divine coincidence). With supply shocks, this is impossible.
8.6 Long-Run Adjustment: The Price Adjustment Mechanism¶
In the short run, is predetermined. In the medium run, expectations adjust toward the realized price level. The adjustment mechanism:
Substituting the SRAS equilibrium condition :
In long-run equilibrium, , which requires — output equals potential. The long-run price level is then pinned by the AD equation:
The adjustment path following a demand shock: output initially jumps above , expectations gradually rise, SRAS shifts left, and output returns to at a permanently higher price level. This is the medium-run neutrality of aggregate demand shocks: real output returns to potential while the price level adjusts permanently. The speed of return is governed by — faster price adjustment means faster return to potential.
8.7 The Sacrifice Ratio: Algebraic Derivation¶
The sacrifice ratio measures the cumulative output loss required to reduce inflation by one percentage point. It is derived directly from the expectations-augmented Phillips curve [P:Ch.10.2].
The EAPC (in continuous time):
where is the unemployment rate, the natural rate, and a supply shock term. Using Okun’s Law [P:Ch.3.4]:
Definition 8.5 (Sacrifice Ratio). The sacrifice ratio is the cumulative output loss per unit of permanent inflation reduction:
Theorem 8.1 (Analytical Sacrifice Ratio from EAPC). Under adaptive expectations and a disinflationary policy that holds until the target inflation is reached, the sacrifice ratio is:
Proof. The EAPC gives . Integrating over the disinflation:
The sacrifice ratio is the negative of this: .
With –0.5 (EAPC coefficient, U.S. estimates) and (Okun coefficient):
This is the output loss (in percent-years of GDP) per percentage point of inflation reduction — consistent with Ball (1994)'s empirical estimates of –2.8 for fast disinflations and higher for slow ones [P:Ch.10.3].
The New Keynesian modification: Under rational expectations and the NKPC, the sacrifice ratio can be zero (costless credible disinflation) because forward-looking price-setters immediately revise inflation expectations downward upon a credible announcement. The hybrid NKPC (with backward-looking component ) gives a sacrifice ratio between 0 and .
8.8 The Dynamic Extension: Preview of the NK Three-Equation System¶
The static AD–SRAS framework is the limiting case of the dynamic New Keynesian model. This section makes the connection explicit, bridging to the derivations of Part VII.
In the static model, we have two equations in . The NK three-equation model [P:Ch.7.5] replaces these with three dynamic equations in :
Mapping static to dynamic: The static AD equation is the static (, finite) special case of the NK IS curve: , giving — a negative relationship between output gap and inflation, analogous to AD.
The static SRAS maps to the NKPC with and static expectations: , where .
The key difference: The NK model is forward-looking; the static model is static. In the NK model, the sacrifice ratio depends on the credibility of the disinflation (which determines whether responds to the announcement), while in the static model it is simply .
8.9 Worked Example: Demand Shock with Full Price Adjustment¶
Cross-reference: Principles Ch. 7.4 (demand and supply shock analysis) [P:Ch.7.4]
Setup: An economy at potential output and equilibrium price level experiences a positive demand shock from a fiscal expansion: (the AD curve shifts right by 80 units of output at any price level).
Parameters: (AD slope), (SRAS slope).
Short-run equilibrium:
So , . Output rises 64 (above potential by 64) and prices rise 32.
Long-run adjustment: In the long run, adjusts to . The SRAS shifts left until . The final price level is pinned by the new AD at :
Wait — let us recompute. The AD equation at : .
So in the long run, output returns to 1000 but prices rise from 100 to 260 — a 160-unit increase in the price level, compared to the short-run impact of only 32. The fiscal expansion has no permanent output effect but generates substantial permanent inflation.
⎕IO←0 ⋄ ⎕ML←1
⍝ 1. Setup Parameters
alpha_AD ← 0.5 ⋄ alpha ← 2 ⋄ Ybar ← 1000
Ybar_AD ← 1000 ⋄ Pe ← 100 ⋄ P0 ← 100
⍝ 2. Solve Baseline
Amat ← 2 2 ⍴ 1 alpha_AD 1 (-alpha)
bvec ← (Ybar_AD + alpha_AD×P0) (Ybar - alpha×Pe)
eq ← bvec ⌹ Amat
'Baseline Equilibrium [Y, P]:' (⍕ 2 ⍕ eq)
⍝ 3. Demand Shock (+80)
dYAD ← 80
bvec_new ← (Ybar_AD + dYAD + alpha_AD×P0) (Ybar - alpha×Pe)
eq_new ← bvec_new ⌹ Amat
'Short-Run Shock [Y, P]: ' (⍕ 2 ⍕ eq_new)
⍝ 4. Long-Run Equilibrium (Output returns to Ybar)
P_lr ← P0 + (Ybar_AD + dYAD - Ybar) ÷ alpha_AD
'Long-Run Price Level: ' (⍕ 2 ⍕ P_lr)
⍝ 5. Multipliers
dY_dYAD ← alpha ÷ alpha + alpha_AD
dP_dYAD ← ÷ alpha + alpha_AD
dP_dYAD_LR ← ÷ alpha_AD
labels ← 'Output (SR)' 'Price (SR)' 'Price (LR)'
m_values ← dY_dYAD dP_dYAD dP_dYAD_LR
'--- Multipliers ---'
↑ labels ,¨ ' : ' ,¨ ⍕¨ 2 ⍕¨ m_valuesimport numpy as np
def adas_equilibrium(alpha_AD, alpha, Ybar, Ybar_AD, Pe, P0):
"""Solve AD-SRAS for short-run (Y*, P*)."""
A = np.array([[1, alpha_AD], [1, -alpha]])
b = np.array([Ybar_AD + alpha_AD*P0, Ybar - alpha*Pe])
return np.linalg.solve(A, b)
# Baseline
sol0 = adas_equilibrium(0.5, 2, 1000, 1000, 100, 100)
print(f"Baseline: Y* = {sol0[0]:.1f}, P* = {sol0[1]:.1f}")
# After demand shock: Ybar_AD -> 1080
sol1 = adas_equilibrium(0.5, 2, 1000, 1080, 100, 100)
print(f"After shock (SR): Y* = {sol1[0]:.1f}, P* = {sol1[1]:.1f}")
# Long-run: Y = 1000, solve for P from new AD
P_lr = 100 + (1080 - 1000)/0.5
print(f"Long-run: Y* = 1000, P_LR = {P_lr:.1f}")
# Multipliers
alpha_AD, alpha = 0.5, 2
print(f"\nOutput multiplier (SR): {alpha/(alpha_AD+alpha):.3f}")
print(f"Price multiplier (SR): {1/(alpha_AD+alpha):.3f}")
print(f"Price multiplier (LR): {1/alpha_AD:.3f}")8.10 Programming Exercises¶
Exercise 8.1 (APL — Supply Shock Stagflation)¶
Extend the APL code from Section 8.9 to compute the short-run and long-run effects of a negative supply shock (SRAS shifts left by 60). Verify: (a) output falls and prices rise (stagflation); (b) the effects on output and prices from a supply shock have opposite signs to those from a demand shock; (c) the long-run price level increases less from a supply shock than from an equivalent demand shock (because the policy accommodation is partial).
Exercise 8.2 (Python — Phase Diagram)¶
import numpy as np; import matplotlib.pyplot as plt
alpha_AD, alpha, Ybar, P0, Pe = 0.5, 2, 1000, 100, 100
# AD and SRAS curves as functions of P
P_range = np.linspace(50, 300, 500)
Y_AD = lambda Ybar_AD, P: Ybar_AD - alpha_AD * (P - P0)
Y_SRAS = lambda Pe_, P: Ybar + alpha * (P - Pe_)
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# Left: baseline and shock
ax = axes[0]
Ybar_AD_vals = [1000, 1080]
colors = ['blue', 'red']
labels = ['Baseline AD', 'AD after demand shock']
for Yad, c, lab in zip(Ybar_AD_vals, colors, labels):
ax.plot(Y_AD(Yad, P_range), P_range, color=c, label=lab)
ax.plot(Y_SRAS(100, P_range), P_range, 'g-', label='SRAS (Pe=100)')
ax.plot(Y_SRAS(132, P_range), P_range, 'g--', label='SRAS after adjustment (Pe=132)')
ax.axvline(Ybar, color='k', linestyle=':', label='LRAS')
ax.set_xlim(900, 1150); ax.set_ylim(50, 300)
ax.set_xlabel('Y'); ax.set_ylabel('P')
ax.legend(fontsize=8); ax.set_title('Demand Shock: SR and LR')
# Right: sacrifice ratio as function of alpha (SRAS slope)
ax2 = axes[1]
alpha_vals = np.linspace(0.5, 5, 100)
psi = 2 # Okun coefficient
SR = psi / alpha_vals
ax2.plot(alpha_vals, SR)
ax2.axhline(2.0, linestyle='--', color='red', label='Empirical range bottom')
ax2.axhline(3.5, linestyle='--', color='orange', label='Empirical range top')
ax2.set_xlabel('α (SRAS slope / Phillips curve coefficient)')
ax2.set_ylabel('Sacrifice ratio SR = ψ/α')
ax2.set_title('Sacrifice Ratio vs. Price Flexibility')
ax2.legend()
plt.tight_layout(); plt.show()Exercise 8.3 (Julia — Sacrifice Ratio)¶
# Sacrifice ratio from EAPC with different expectations schemes
psi = 2.0 # Okun coefficient
alpha = 0.35 # EAPC slope
# Under adaptive expectations: SR = psi/alpha
SR_adaptive = psi / alpha
# Under hybrid NKPC with backward weight omega:
# SR = psi/alpha * (omega fraction)
# (forward-looking part reduces sacrifice ratio)
omega_vals = 0:0.1:1.0
SR_hybrid = psi ./ alpha .* omega_vals # linear interpolation
println("SR under adaptive expectations: $(round(SR_adaptive, digits=2))")
println("\nSR under hybrid NKPC:")
for (ω, sr) in zip(omega_vals, SR_hybrid)
println(" ω=$(round(ω,digits=1)): SR=$(round(sr,digits=2))")
end
println("\n(ω=0 means fully forward-looking → SR=0; ω=1 → fully adaptive → SR=$(round(SR_adaptive,digits=2)))")Exercise 8.4 (R — Policy Accommodation of Supply Shock)¶
alpha_AD <- 0.5; alpha <- 2; Ybar <- 1000; P0 <- 100; Pe <- 100
# Supply shock: Ybar falls by 60
delta_supply <- 60
Ybar_shocked <- Ybar - delta_supply
# No accommodation: AD unchanged
A <- matrix(c(1, 1, alpha_AD, -alpha), 2, 2)
b_no_acc <- c(1000 + alpha_AD*P0, Ybar_shocked - alpha*Pe)
eq_no_acc <- solve(A, b_no_acc)
# Full accommodation: AD expanded to keep Y = Ybar
# Need Ybar_AD such that SR equilibrium gives Y=Ybar
# From SR formula: Ybar = Ybar_AD_new - alpha/(alpha_AD+alpha)*delta_supply
Ybar_AD_accommodate <- Ybar + (alpha_AD+alpha)/alpha * delta_supply
b_acc <- c(Ybar_AD_accommodate + alpha_AD*P0, Ybar_shocked - alpha*Pe)
eq_acc <- solve(A, b_acc)
cat("Supply shock: no accommodation\n")
cat(sprintf(" Y* = %.1f, P* = %.1f\n", eq_no_acc[1], eq_no_acc[2]))
cat("Supply shock: full accommodation (Y = Ybar)\n")
cat(sprintf(" Y* = %.1f, P* = %.1f\n", eq_acc[1], eq_acc[2]))
cat("Trade-off: accommodation prevents output loss but accepts higher price level\n")Exercise 8.5 — AS–AD Matrix Generalization ()¶
Generalize the AD–SRAS system to include a third equation: the price-adjustment mechanism . Write the full three-dimensional system as an ODE where . Linearize around the long-run equilibrium and compute the eigenvalues. Show that one eigenvalue is zero (reflecting the long-run neutrality of the price level), one is negative (stable convergence), and the Jacobian structure implies that the economy always returns to potential after demand shocks.
Exercise 8.6 — Optimal Monetary Response to Supply Shock ()¶
Following a negative supply shock that reduces by , the central bank must choose how much to accommodate (expand ). Model the bank’s loss function as where is the price target. (a) Derive the optimal accommodation level as a function of , , and the model parameters. (b) Show that (pure inflation targeter) implies no accommodation (), while (pure output stabilizer) implies full accommodation. (c) For and the calibration from this chapter, compute numerically.
8.11 Chapter Summary¶
Key results:
The AD equation is derived from IS–LM by substituting money-market equilibrium; linearized around it gives .
The SRAS equation arises from either sticky wages or Lucas imperfect information; the LRAS equation is .
The AD–SRAS short-run equilibrium is a linear system with unique solution: ; .
Demand shocks raise both output and prices; supply shocks raise prices and lower output (stagflation). The sign of the output-price correlation distinguishes demand from supply shocks empirically.
The sacrifice ratio is the output cost (in percent-years) per point of inflation reduction under adaptive expectations; under the NKPC it approaches zero for fully credible disinflation.
In APL: the AD–SRAS system is the same
⌹pattern as IS–LM, with a matrix; the long-run price level requires only scalar arithmetic.
Connections forward: Chapter 9 derives the ELB analogue of these multipliers for the NK model. Part VII (Chapter 27–31) derives the AD–SRAS system from explicit household and firm optimization via log-linearization of the DSGE model.
Next: Chapter 9 — Tax and Government Spending Multipliers: Analytical Solutions with Behavioral Foundations