aW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAppbXBvcnQgbnVtcHkgYXMgbnAKCiMg6K6+572u5Lit5paH5a2X5L2TCnBsdC5yY1BhcmFtc1snZm9udC5zYW5zLXNlcmlmJ10gPSBbJ1NpbUhlaScsICdBcmlhbCBVbmljb2RlIE1TJywgJ0RlamFWdSBTYW5zJ10KcGx0LnJjUGFyYW1zWydheGVzLnVuaWNvZGVfbWludXMnXSA9IEZhbHNlCgojIOWIm+W7uuWbvuW9ogpmaWcsIGF4ID0gcGx0LnN1YnBsb3RzKGZpZ3NpemU9KDEyLCA4KSkKCiMg55Sf5oiQ5pWw5o2uIC0g5qih5ouf5YW45Z6L5oiQ5pys5puy57q/ClEgPSBucC5saW5zcGFjZSgwLjEsIDEyLCAxMDApICAjIOS6p+mHjwoKIyDmiJDmnKzlh73mlbDvvJpUQyA9IFFeMyAtIDZRXjIgKyAxNVEgKyAxMAojIOi+uemZheaIkOacrCBNQyA9IGRUQy9kUSA9IDNRXjIgLSAxMlEgKyAxNQpNQyA9IDMgKiBRKioyIC0gMTIgKiBRICsgMTUKCiMg5bmz5Z2H5oiQ5pysIEFDID0gVEMvUSA9IFFeMiAtIDZRICsgMTUgKyAxMC9RCkFDID0gUSoqMiAtIDYgKiBRICsgMTUgKyAxMCAvIFEKCiMg6L656ZmF5pS255uKIE1S77yI5YGH6K6+5a6M5YWo56ue5LqJ5biC5Zy677yM5Lu35qC85Li65bi45pWw77yJClAgPSAxMiAgIyDnu5nlrprluILlnLrku7fmoLwKTVIgPSBucC5mdWxsX2xpa2UoUSwgUCkgICMgTVIgPSBBUiA9IFAKCiMg5om+5YiwQUPmnIDkvY7ngrkKQUNfbWluX2lkeCA9IG5wLmFyZ21pbihBQykKQUNfbWluX1EgPSBRW0FDX21pbl9pZHhdCkFDX21pbl9jb3N0ID0gQUNbQUNfbWluX2lkeF0KCiMg5om+5YiwTVI9TUPnmoTmnIDkvJjkuqfph4/ngrkKb3B0aW1hbF9pZHggPSBucC5hcmdtaW4obnAuYWJzKE1DIC0gTVIpKQpvcHRpbWFsX1EgPSBRW29wdGltYWxfaWR4XQpvcHRpbWFsX2Nvc3QgPSBNQ1tvcHRpbWFsX2lkeF0KCiMg57uY5Yi25puy57q/CmF4LnBsb3QoUSwgTUMsICdyLScsIGxpbmV3aWR0aD0yLjUsIGxhYmVsPSfovrnpmYXmiJDmnKwgKE1DKScsIGFscGhhPTAuOCkKYXgucGxvdChRLCBBQywgJ2ItJywgbGluZXdpZHRoPTIuNSwgbGFiZWw9J+W5s+Wdh+aIkOacrCAoQUMpJywgYWxwaGE9MC44KQpheC5wbG90KFEsIE1SLCAnZy0nLCBsaW5ld2lkdGg9Mi41LCBsYWJlbD0n6L656ZmF5pS255uKIChNUiknLCBhbHBoYT0wLjgpCgojIOagh+azqEFD5pyA5L2O54K5CmF4LnBsb3QoQUNfbWluX1EsIEFDX21pbl9jb3N0LCAnYm8nLCBtYXJrZXJzaXplPTEwLCBsYWJlbD0nQUPmnIDkvY7ngrknKQpheC5hbm5vdGF0ZShmJ0FD5pyA5L2O54K5XG5NQyA9IEFDXG5RPXtBQ19taW5fUTouMWZ9LCBBQz17QUNfbWluX2Nvc3Q6LjFmfScsIAogICAgICAgICAgICB4eT0oQUNfbWluX1EsIEFDX21pbl9jb3N0KSwgeHl0ZXh0PShBQ19taW5fUS0yLjUsIEFDX21pbl9jb3N0KzUpLAogICAgICAgICAgICBhcnJvd3Byb3BzPWRpY3QoYXJyb3dzdHlsZT0nLSZndDsnLCBjb2xvcj0nYmx1ZScsIGx3PTEuNSksCiAgICAgICAgICAgIGZvbnRzaXplPTEwLCBjb2xvcj0nYmx1ZScsIGZvbnR3ZWlnaHQ9J2JvbGQnLAogICAgICAgICAgICBiYm94PWRpY3QoYm94c3R5bGU9JnF1b3Q7cm91bmQscGFkPTAuNSZxdW90OywgZmFjZWNvbG9yPSZxdW90OyNFNkYzRkYmcXVvdDssIGFscGhhPTAuOCkpCgojIOagh+azqOacgOS8mOS6p+mHj+eCuSAoTVIgPSBNQykKYXgucGxvdChvcHRpbWFsX1EsIG9wdGltYWxfY29zdCwgJ3JvJywgbWFya2Vyc2l6ZT0xMCwgbGFiZWw9J+acgOS8mOS6p+mHj+eCuScpCmF4LmFubm90YXRlKGYn5pyA5LyY5Lqn6YePXG5NUiA9IE1DXG5RPXtvcHRpbWFsX1E6LjFmfSwgUD17UDouMWZ9JywgCiAgICAgICAgICAgIHh5PShvcHRpbWFsX1EsIG9wdGltYWxfY29zdCksIHh5dGV4dD0ob3B0aW1hbF9RKzEuNSwgb3B0aW1hbF9jb3N0KzgpLAogICAgICAgICAgICBhcnJvd3Byb3BzPWRpY3QoYXJyb3dzdHlsZT0nLSZndDsnLCBjb2xvcj0ncmVkJywgbHc9MS41KSwKICAgICAgICAgICAgZm9udHNpemU9MTAsIGNvbG9yPSdyZWQnLCBmb250d2VpZ2h0PSdib2xkJywKICAgICAgICAgICAgYmJveD1kaWN0KGJveHN0eWxlPSZxdW90O3JvdW5kLHBhZD0wLjUmcXVvdDssIGZhY2Vjb2xvcj0mcXVvdDsjRkZFNkU2JnF1b3Q7LCBhbHBoYT0wLjgpKQoKIyDmt7vliqDlnoLnm7Tnur/ov57mjqXkuKTkuKrlhbPplK7ngrkKYXguYXh2bGluZSh4PUFDX21pbl9RLCB5bWluPTAsIHltYXg9KEFDX21pbl9jb3N0KzUpLzMwLCBjb2xvcj0nYicsIGxpbmVzdHlsZT0nLS0nLCBhbHBoYT0wLjUpCmF4LmF4dmxpbmUoeD1vcHRpbWFsX1EsIHltaW49MCwgeW1heD0ob3B0aW1hbF9jb3N0KzgpLzMwLCBjb2xvcj0ncicsIGxpbmVzdHlsZT0nLS0nLCBhbHBoYT0wLjUpCgojIOagh+azqOaIkOacrOacgOWwj+WMluWMuuWfnwpheC5maWxsX2JldHdlZW4oUSwgQUMsIGFscGhhPTAuMSwgY29sb3I9J2JsdWUnLCBsYWJlbD0n5bmz5Z2H5oiQ5pys5Yy65Z+fJykKYXguZmlsbF9iZXR3ZWVuKFEsIE1DLCBhbHBoYT0wLjEsIGNvbG9yPSdyZWQnLCBsYWJlbD0n6L656ZmF5oiQ5pys5Yy65Z+fJykKCiMg6K6+572u5Z2Q5qCH6L205qCH562+5ZKM5qCH6aKYCmF4LnNldF94bGFiZWwoJ+S6p+mHjyAoUSknLCBmb250c2l6ZT0xMywgZm9udHdlaWdodD0nYm9sZCcpCmF4LnNldF95bGFiZWwoJ+aIkOacrC/mlLbnm4onLCBmb250c2l6ZT0xMywgZm9udHdlaWdodD0nYm9sZCcpCmF4LnNldF90aXRsZSgn5oiQ5pys5puy57q/54m55b6B5LiO5pyA5LyY5Lqn6YeP5Yaz5a6aXG4oTUPkuI5BQ+WcqEFD5pyA5L2O54K555u45Lqk77yM5pyA5LyY5Lqn6YeP5ZyoTVI9TUPlpIQpJywgCiAgICAgICAgICAgICBmb250c2l6ZT0xNiwgZm9udHdlaWdodD0nYm9sZCcsIHBhZD0yMCkKCiMg5re75Yqg5Zu+5L6LCmF4LmxlZ2VuZChsb2M9J3VwcGVyIHJpZ2h0JywgZm9udHNpemU9MTEsIGZyYW1lb249VHJ1ZSwgc2hhZG93PVRydWUpCgojIOa3u+WKoOe9keagvApheC5ncmlkKFRydWUsIGFscGhhPTAuMywgbGluZXN0eWxlPSctLScpCgojIOiuvue9ruWdkOagh+i9tOiMg+WbtApheC5zZXRfeGxpbSgwLCAxMikKYXguc2V0X3lsaW0oMCwgMzUpCgojIOa3u+WKoOaVsOWtpuWFrOW8j+ahhgpmaWcudGV4dCgwLjUsIDAuMDIsIAogICAgICAgICAn5qC45b+D5YWs5byP5LiO5YWz57O777yaXG4nCiAgICAgICAgIHInJmJ1bGw7IOi+uemZheaIkOacrCBNQyA9ICRcZnJhY3tkVEN9e2RRfSQgPSDkuqfph4/lop7liqDkuIDljZXkvY3lr7zoh7TnmoTmiJDmnKzlop7liqAnICdcbicKICAgICAgICAgcicmYnVsbDsg5bmz5Z2H5oiQ5pysIEFDID0gJFxmcmFje1RDfXtRfSQgPSDmgLvmiJDmnKzkuI7mgLvkuqfph4/kuYvmr5QnICdcbicKICAgICAgICAgcicmYnVsbDsg5YWz6ZSu5YWz57O777yaTUPkuI5BQ+WcqEFD5pyA5L2O54K555u45Lqk77yITUPmm7Lnur/lv4XnhLbnqb/ov4dBQ+absue6v+acgOS9jueCue+8iScgJ1xuJwogICAgICAgICByJyZidWxsOyDmnIDkvJjkuqfph4/mnaHku7bvvJpNUiA9IE1D77yI6L656ZmF5pS255uK562J5LqO6L656ZmF5oiQ5pys77yJJywKICAgICAgICAgaGE9J2NlbnRlcicsIGZvbnRzaXplPTExLCBjb2xvcj0nYmxhY2snLAogICAgICAgICBiYm94PWRpY3QoYm94c3R5bGU9JnF1b3Q7cm91bmQscGFkPTAuOCZxdW90OywgZmFjZWNvbG9yPSZxdW90OyNGOUY5RjkmcXVvdDssIGFscGhhPTAuOSwgCiAgICAgICAgICAgICAgICAgICBlZGdlY29sb3I9JnF1b3Q7Z3JheSZxdW90OywgbGluZXdpZHRoPTEuNSkpCgojIOWcqOWbvuS4rea3u+WKoOWFs+mUruWFs+ezu+eahOivtOaYjgpheC50ZXh0KDEsIDMwLCByJyRNQyAmbHQ7IEFDIFxSaWdodGFycm93IEFDXGRvd25hcnJvdyQnLCBmb250c2l6ZT0xMSwgCiAgICAgICAgYmJveD1kaWN0KGJveHN0eWxlPSZxdW90O3JvdW5kJnF1b3Q7LCBmYWNlY29sb3I9JnF1b3Q7I0ZGRTZFNiZxdW90OywgYWxwaGE9MC44KSkKYXgudGV4dCgxLCAyNywgcickTUMgJmd0OyBBQyBcUmlnaHRhcnJvdyBBQ1x1cGFycm93JCcsIGZvbnRzaXplPTExLAogICAgICAgIGJib3g9ZGljdChib3hzdHlsZT0mcXVvdDtyb3VuZCZxdW90OywgZmFjZWNvbG9yPSZxdW90OyNGRkU2RTYmcXVvdDssIGFscGhhPTAuOCkpCmF4LnRleHQoOSwgMTUsIHInJE1SID0gUCQgKOWujOWFqOernuS6iSknLCBmb250c2l6ZT0xMSwgc3R5bGU9J2l0YWxpYycsCiAgICAgICAgYmJveD1kaWN0KGJveHN0eWxlPSZxdW90O3JvdW5kJnF1b3Q7LCBmYWNlY29sb3I9JnF1b3Q7I0U2RjNFNiZxdW90OywgYWxwaGE9MC44KSkKCnBsdC50aWdodF9sYXlvdXQocmVjdD1bMCwgMC4xNSwgMSwgMV0pCnBsdC5zaG93KCkK
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
# 创建图形
fig, ax = plt.subplots(figsize=(12, 8))
# 生成数据 - 模拟典型成本曲线
Q = np.linspace(0.1, 12, 100) # 产量
# 成本函数:TC = Q^3 - 6Q^2 + 15Q + 10
# 边际成本 MC = dTC/dQ = 3Q^2 - 12Q + 15
MC = 3 * Q**2 - 12 * Q + 15
# 平均成本 AC = TC/Q = Q^2 - 6Q + 15 + 10/Q
AC = Q**2 - 6 * Q + 15 + 10 / Q
# 边际收益 MR(假设完全竞争市场,价格为常数)
P = 12 # 给定市场价格
MR = np.full_like(Q, P) # MR = AR = P
# 找到AC最低点
AC_min_idx = np.argmin(AC)
AC_min_Q = Q[AC_min_idx]
AC_min_cost = AC[AC_min_idx]
# 找到MR=MC的最优产量点
optimal_idx = np.argmin(np.abs(MC - MR))
optimal_Q = Q[optimal_idx]
optimal_cost = MC[optimal_idx]
# 绘制曲线
ax.plot(Q, MC, 'r-', linewidth=2.5, label='边际成本 (MC)', alpha=0.8)
ax.plot(Q, AC, 'b-', linewidth=2.5, label='平均成本 (AC)', alpha=0.8)
ax.plot(Q, MR, 'g-', linewidth=2.5, label='边际收益 (MR)', alpha=0.8)
# 标注AC最低点
ax.plot(AC_min_Q, AC_min_cost, 'bo', markersize=10, label='AC最低点')
ax.annotate(f'AC最低点\nMC = AC\nQ={AC_min_Q:.1f}, AC={AC_min_cost:.1f}',
xy=(AC_min_Q, AC_min_cost), xytext=(AC_min_Q-2.5, AC_min_cost+5),
arrowprops=dict(arrowstyle='->', color='blue', lw=1.5),
fontsize=10, color='blue', fontweight='bold',
bbox=dict(boxstyle="round,pad=0.5", facecolor="#E6F3FF", alpha=0.8))
# 标注最优产量点 (MR = MC)
ax.plot(optimal_Q, optimal_cost, 'ro', markersize=10, label='最优产量点')
ax.annotate(f'最优产量\nMR = MC\nQ={optimal_Q:.1f}, P={P:.1f}',
xy=(optimal_Q, optimal_cost), xytext=(optimal_Q+1.5, optimal_cost+8),
arrowprops=dict(arrowstyle='->', color='red', lw=1.5),
fontsize=10, color='red', fontweight='bold',
bbox=dict(boxstyle="round,pad=0.5", facecolor="#FFE6E6", alpha=0.8))
# 添加垂直线连接两个关键点
ax.axvline(x=AC_min_Q, ymin=0, ymax=(AC_min_cost+5)/30, color='b', linestyle='--', alpha=0.5)
ax.axvline(x=optimal_Q, ymin=0, ymax=(optimal_cost+8)/30, color='r', linestyle='--', alpha=0.5)
# 标注成本最小化区域
ax.fill_between(Q, AC, alpha=0.1, color='blue', label='平均成本区域')
ax.fill_between(Q, MC, alpha=0.1, color='red', label='边际成本区域')
# 设置坐标轴标签和标题
ax.set_xlabel('产量 (Q)', fontsize=13, fontweight='bold')
ax.set_ylabel('成本/收益', fontsize=13, fontweight='bold')
ax.set_title('成本曲线特征与最优产量决定\n(MC与AC在AC最低点相交,最优产量在MR=MC处)',
fontsize=16, fontweight='bold', pad=20)
# 添加图例
ax.legend(loc='upper right', fontsize=11, frameon=True, shadow=True)
# 添加网格
ax.grid(True, alpha=0.3, linestyle='--')
# 设置坐标轴范围
ax.set_xlim(0, 12)
ax.set_ylim(0, 35)
# 添加数学公式框
fig.text(0.5, 0.02,
'核心公式与关系:\n'
r'• 边际成本 MC = $\frac{dTC}{dQ}$ = 产量增加一单位导致的成本增加' '\n'
r'• 平均成本 AC = $\frac{TC}{Q}$ = 总成本与总产量之比' '\n'
r'• 关键关系:MC与AC在AC最低点相交(MC曲线必然穿过AC曲线最低点)' '\n'
r'• 最优产量条件:MR = MC(边际收益等于边际成本)',
ha='center', fontsize=11, color='black',
bbox=dict(boxstyle="round,pad=0.8", facecolor="#F9F9F9", alpha=0.9,
edgecolor="gray", linewidth=1.5))
# 在图中添加关键关系的说明
ax.text(1, 30, r'$MC < AC \Rightarrow AC\downarrow$', fontsize=11,
bbox=dict(boxstyle="round", facecolor="#FFE6E6", alpha=0.8))
ax.text(1, 27, r'$MC > AC \Rightarrow AC\uparrow$', fontsize=11,
bbox=dict(boxstyle="round", facecolor="#FFE6E6", alpha=0.8))
ax.text(9, 15, r'$MR = P$ (完全竞争)', fontsize=11, style='italic',
bbox=dict(boxstyle="round", facecolor="#E6F3E6", alpha=0.8))
plt.tight_layout(rect=[0, 0.15, 1, 1])
plt.show()