Solution
Solution
import sympy
import matplotlib.pyplot as plt
import matplotlib.patches as patches
p = sympy.Symbol("p")
def supplyShift(demandEquation,supplyEquation1,supplyEquation2,priceStart,priceEnd):
prices = []
demandQ = []
supplyQ1 = []
supplyQ2 = []
for price in range(priceStart,priceEnd+1):
prices += [price]
demandQ += [demandEquation.subs(p,price)]
supplyQ1 += [supplyEquation1.subs(p,price)]
supplyQ2 += [supplyEquation2.subs(p,price)]
equilibriumP1 = sympy.solve(demandEquation-supplyEquation1)[0]
equilibriumQ1 = demandEquation.subs(p,equilibriumP1)
equilibriumP2 = sympy.solve(demandEquation-supplyEquation2)[0]
equilibriumQ2 = demandEquation.subs(p,equilibriumP2)
plt.plot(demandQ,prices)
plt.plot(supplyQ1,prices)
plt.plot(supplyQ2,prices)
plt.legend(["Old Demand","Old Supply","New Supply"])
plt.plot(equilibriumQ1,equilibriumP1, 'ro')
plt.plot(equilibriumQ2,equilibriumP2, 'ro')
plt.xlabel("Supply and Demand Quantity")
plt.ylabel("Price")
rect1 = patches.Rectangle((0,0),equilibriumQ1,equilibriumP1,linewidth=1,color="blue")
rect2 = patches.Rectangle((0,0),equilibriumQ2,equilibriumP2,linewidth=1,color="red")
currentAxis = plt.gca()
currentAxis.add_patch(rect1)
currentAxis.add_patch(rect2)
plt.show()
print("The old equilibrium price is "+str(equilibriumP1)+" and old equilibrium quantity is "+str(equilibriumQ1)+".")
print("The new equilibrium price is "+str(equilibriumP2)+" and new equilibrium quantity is "+str(equilibriumQ2)+".")
print("The price shifted "+str(equilibriumP2-equilibriumP1)+" and the quantity shifted "+str(equilibriumQ2-equilibriumQ1)+".")
print("")
print("The old revenue was "+str(equilibriumQ1*equilibriumP1))
print("The new revenue is "+str(equilibriumQ2*equilibriumP2))
print("The revenue shifted by " +str(equilibriumQ2*equilibriumP2-equilibriumQ1*equilibriumP1))
supplyShift(10-p,p,2*p,0,10)
Source Code