Arte SheetsLearn. Try. Understand.

Financial

Price Elasticity of Demand (Midpoint / Arc formula) & revenue impact check

Calculate symmetric Arc Price Elasticity ((Q2-Q1)/AvgQ) / ((P2-P1)/AvgP) to classify Elastic vs Inelastic demand and revenue change.

Why point elasticity changes when you reverse P1 and P2—and Midpoint Arc fixes it!

Percentage changes measured relative to the starting value differ when you reverse the starting and ending observations. The midpoint method instead uses the average of each pair, giving the same arc elasticity in either direction.

For prices 100 and 120 and quantities 1000 and 700, the midpoint calculation gives (-300/850)/(20/110) = -1.9412. Revenues at those two observations are 100000 and 84000. These two observations alone do not establish that the price change caused the quantity change.

Pricing ExperimentArc Elasticity EdDemand RegimeRevenue Impact (P2*Q2 - P1*Q1)
$100 -> $120, Qty 1,000 -> 700-1.9412 (|Ed| > 1)Elastic-$16,000 ($100k -> $84k)
$100 -> $120, Qty 1,000 -> 950-0.2821 (|Ed| < 1)Inelastic+$14,000 ($100k -> $114k!)
$120 -> $100, Qty 700 -> 1,000-1.9412 (Exact same!)Symmetric!+$16,000

Symmetric Midpoint (Arc) Price Elasticity of Demand formula

Dividing by midpoint averages (D2+C2)/2 and (B2+A2)/2 guarantees identical elasticity whether testing a price hike or a discount.

=IF(OR(COUNT(A2:D2)<>4,A2<=0,B2<=0,C2<0,D2<0,C2+D2=0,A2=B2),"Invalid inputs",ROUND(((D2-C2)/((D2+C2)/2))/((B2-A2)/((B2+A2)/2)),4))

Classify Elastic (|Ed| > 1), Unit Elastic (|Ed| = 1), or Inelastic (|Ed| < 1)

The labels use the magnitude of the arc elasticity. The usual price/revenue interpretation assumes a downward-sloping demand relationship with other factors unchanged. Compute actual endpoint revenue directly; do not treat a two-point estimate as a forecast. Values within 1e-10 of magnitude 1 are classified as Unit Elastic.

=IF(OR(COUNT(A2:D2)<>4,A2<=0,B2<=0,C2<0,D2<0,C2+D2=0,A2=B2),"Invalid inputs",LET(elasticity,ABS(((D2-C2)/((D2+C2)/2))/((B2-A2)/((B2+A2)/2))),IF(ABS(elasticity-1)<0.0000000001,"Unit Elastic",IF(elasticity>1,"Elastic","Inelastic"))))

Try the example

Use the original values or change them to test your understanding.

Further reading