凯恩斯革命与宏观经济学:从IS-LM模型到Python代码模拟 简介这份PPT课件聚焦凯恩斯革命与宏观经济学的诞生面向经济学专业学生、考研备考者及对经济思想史感兴趣的读者帮助梳理凯恩斯理论体系的来龙去脉与核心命题。资源包内含1个ppt文件约165KB以幻灯片形式呈现便于课堂讲解与自学翻阅。内容从凯恩斯的人物生平切入涵盖其家庭背景、求学经历与丰富履历进而展开《就业、利息和货币通论》的结构与内容重点讲解有效需求原理、消费倾向、边际消费倾向与乘数、资本边际效率、流动性偏好等关键概念并结合1929至1933年大萧条背景说明凯恩斯革命对古典学派与萨伊定律的挑战以及政府财政干预政策的理论依据。目前已有72人学习适合作为宏观经济学入门与思想史专题的辅助材料。1. 从一份课件标题说起宏观经济学到底在讲什么如果你在搜索引擎里敲下“第五章凯恩斯革命与宏观经济学.ppt”大概率不是想研究课件排版而是想搞清楚一件事凯恩斯到底革了谁的命这套理论凭什么能成为宏观经济学的地基。我见过太多人翻完课件还是一头雾水因为大部分材料只告诉你“有效需求不足”这个结论却不讲它怎么从假设推到政策更不讲这套逻辑在今天的数据里怎么验证。这篇笔记就按我自己的理解路径来拆先把这个标题背后的理论骨架立住再落到可复现的推演步骤最后说清楚哪些地方容易翻车。适合正在啃宏观教材的学生、需要快速补理论框架的从业者以及想把经济逻辑写进代码做模拟的人。2. 凯恩斯革命的核心命题从萨伊定律到有效需求2.1 古典框架为什么解释不了大萧条古典经济学有一个隐含前提供给自动创造需求。这个命题在微观层面看起来无懈可击——你生产了东西卖掉之后拿到钱钱最终会花出去买别的东西。但1929年之后的情况是工厂停工、工人失业、商品堆在仓库里卖不掉价格下降并没有让市场自动出清。问题出在古典框架假设利率和工资可以灵活调整而现实中工资有粘性、利率有流动性陷阱价格信号传导不下去。凯恩斯抓住的就是这个断裂点总量层面的需求不会自动等于总量层面的供给缺口可以长期存在。2.2 有效需求原理的推演链条凯恩斯的逻辑链条可以拆成四步。第一步总需求由消费和投资构成消费取决于收入投资取决于预期回报率和利率。第二步由于边际消费倾向递减收入增加时消费增加得越来越少剩下的部分变成储蓄。第三步储蓄不会自动转化为投资因为投资决策取决于企业家对未来的信心而信心是波动的。第四步当投资不足以吸收全部储蓄时总需求低于总供给产出和就业就停在低于充分就业的水平上。这个链条的关键在于它把“需求不足”从一个短期摩擦变成了可以持续存在的均衡状态。2.3 用一张表对比古典与凯恩斯的核心分歧维度古典框架凯恩斯框架供给与需求供给创造需求需求决定产出工资与价格灵活调整市场出清存在粘性调整缓慢储蓄与投资利率自动调节使两者相等储蓄与投资决策相互独立政策取向自由放任市场自愈政府干预填补需求缺口长期均衡自动趋向充分就业可能长期停留在低产出均衡这张表不是让你背的是让你在遇到具体问题时能快速定位如果某个模型假设价格完全灵活那它大概率是古典思路如果模型里出现了粘性工资或流动性陷阱那就是凯恩斯的地盘。2.4 乘数效应一个可以手算的数值例子乘数效应是凯恩斯框架里最容易被讲糊的部分。我一般会用一个最简单的数值例子来验证理解假设边际消费倾向是0.8政府增加100亿支出。第一轮这100亿变成收入其中80亿被消费掉。第二轮这80亿又变成收入其中64亿被消费。以此类推总需求的增加量是100 80 64 …这是一个等比数列公比是0.8求和结果是100 / (1 - 0.8) 500亿。乘数就是5。这个计算看起来简单但它背后的含义是初始支出的变化会被消费链条放大。如果边际消费倾向变成0.6乘数就降到2.5。所以乘数的大小完全取决于消费倾向而消费倾向又取决于收入分配和信心。# 乘数效应数值模拟 # 参数说明 # mpc: 边际消费倾向取值范围0到1 # initial_spending: 初始政府支出或投资增量 # rounds: 模拟轮数轮数越多越接近理论极限 def multiplier_effect(mpc, initial_spending, rounds50): total 0 current initial_spending for i in range(rounds): total current current current * mpc # 每一轮消费掉mpc比例剩余变成储蓄漏出 theoretical initial_spending / (1 - mpc) # 理论乘数公式 return total, theoretical # 测试不同边际消费倾向下的乘数 for mpc in [0.5, 0.6, 0.8, 0.9]: total, theory multiplier_effect(mpc, 100) print(fMPC{mpc}, 模拟总需求{total:.2f}, 理论值{theory:.2f}, 乘数{theory/100:.2f})这段代码的逻辑很直白每一轮把上一轮的收入乘以边际消费倾向累加起来就是总需求增量。参数mpc越接近1乘数越大但现实中mpc不可能等于1因为总有一部分收入会被储蓄或税收拿走。rounds设成50是为了让模拟值收敛到理论值你可以改成10看看误差有多大。这个模型没有考虑税收、进口和价格变化所以它只是一个教学工具不是政策评估模型。3. 把IS-LM模型跑起来从方程组到可复现的数值解3.1 IS曲线和LM曲线的方程形式IS-LM模型是凯恩斯框架的标准化表达。IS曲线代表产品市场均衡方程是Y C(Y - T) I(r) G其中Y是产出T是税收r是利率G是政府支出。LM曲线代表货币市场均衡方程是M/P L(Y, r)其中M是货币供给P是价格水平L是货币需求函数。这两个方程联立解出来的Y和r就是同时满足两个市场均衡的组合。我一般会把消费函数设成C a b(Y - T)投资函数设成I c - dr货币需求设成L eY - f*r。这样整个模型就是两个线性方程可以直接用代数解出来。3.2 用Python求解均衡产出和利率import numpy as np # IS-LM模型参数设定 # a: 自发消费b: 边际消费倾向 # c: 自发投资d: 投资对利率的敏感度 # e: 货币需求对收入的敏感度f: 货币需求对利率的敏感度 # G: 政府支出T: 税收M: 名义货币供给P: 价格水平 a, b 100, 0.8 c, d 200, 50 e, f 0.5, 100 G, T 300, 200 M, P 1000, 1.0 # IS曲线Y a b(Y-T) c - d*r G # 整理得Y(1-b) a - b*T c G - d*r # Y (a - b*T c G - d*r) / (1-b) # LM曲线M/P e*Y - f*r # r (e*Y - M/P) / f # 联立求解 # 将LM的r代入IS # Y (a - b*T c G - d*((e*Y - M/P)/f)) / (1-b) # 解出Y numerator a - b*T c G (d*M)/(f*P) denominator (1 - b) (d*e)/f Y_eq numerator / denominator r_eq (e*Y_eq - M/P) / f print(f均衡产出 Y {Y_eq:.2f}) print(f均衡利率 r {r_eq:.4f}) # 验证检查IS和LM是否同时成立 IS_check a b*(Y_eq - T) c - d*r_eq G LM_check e*Y_eq - f*r_eq print(fIS验证应等于Y: {IS_check:.2f}) print(fLM验证应等于M/P: {LM_check:.2f})这段代码的核心是把两个方程联立后解出Y和r。参数b越大IS曲线越平坦财政政策的乘数效应越强。参数d越大投资对利率越敏感IS曲线也越平坦。参数f越大货币需求对利率越敏感LM曲线越平坦货币政策的效果越弱。你可以改这些参数看均衡值怎么变这比死记曲线斜率有用得多。3.3 财政政策和货币政策的模拟对比有了上面的求解框架就可以做政策模拟了。假设政府支出从300增加到400其他参数不变重新求解。再假设货币供给从1000增加到1200其他参数不变重新求解。把两组结果放在一起对比就能看到财政政策和货币政策在IS-LM框架下的不同传导机制。财政政策直接移动IS曲线货币政策移动LM曲线。在正常情况下两者都能提高产出但对利率的影响方向相反。财政扩张推高利率产生挤出效应货币扩张压低利率刺激投资。def solve_islm(a, b, c, d, e, f, G, T, M, P): numerator a - b*T c G (d*M)/(f*P) denominator (1 - b) (d*e)/f Y numerator / denominator r (e*Y - M/P) / f return Y, r # 基准情形 Y0, r0 solve_islm(100, 0.8, 200, 50, 0.5, 100, 300, 200, 1000, 1.0) # 财政扩张G从300到400 Y1, r1 solve_islm(100, 0.8, 200, 50, 0.5, 100, 400, 200, 1000, 1.0) # 货币扩张M从1000到1200 Y2, r2 solve_islm(100, 0.8, 200, 50, 0.5, 100, 300, 200, 1200, 1.0) print(f基准Y{Y0:.2f}, r{r0:.4f}) print(f财政扩张Y{Y1:.2f}, r{r1:.4f}, 产出变化{Y1-Y0:.2f}, 利率变化{r1-r0:.4f}) print(f货币扩张Y{Y2:.2f}, r{r2:.4f}, 产出变化{Y2-Y0:.2f}, 利率变化{r2-r0:.4f})跑完这段代码你会发现财政扩张的产出增量被利率上升部分抵消了这就是挤出效应。货币扩张的产出增量取决于投资对利率的敏感度dd越大效果越明显。如果d等于0货币政策完全无效这就是流动性陷阱的极端情况。这些结论不是背出来的是算出来的。3.4 参数敏感度分析哪些参数最影响结论IS-LM模型的结论对参数很敏感。我一般会做一组敏感度测试看b、d、e、f这四个参数各自变化时均衡产出怎么变。b是边际消费倾向它决定财政乘数的上限。d是投资对利率的敏感度它决定挤出效应的大小。e是货币需求对收入的敏感度它决定LM曲线的斜率。f是货币需求对利率的敏感度它决定LM曲线在什么情况下会变成水平线。把这四个参数分别调大调小观察Y和r的变化幅度就能知道哪些假设最关键。这种分析比单纯背“IS变陡、LM变平”之类的口诀有用得多因为你能看到具体数值。4. 避坑与常见问题学凯恩斯框架时最容易翻车的五个地方4.1 把短期分析当成长期结论现象很多人学完IS-LM之后认为政府增加支出就一定能提高产出而且乘数越大越好。原因IS-LM是一个短期模型它假设价格水平不变、资本存量不变、技术不变。在长期价格会调整资本会积累潜在产出会变化。解决每次用IS-LM得出结论时先问自己“这是短期还是长期”。如果是长期问题需要切换到增长模型或AS-AD框架。我一般会在笔记里标注每个模型的适用时间范围避免混用。4.2 混淆乘数效应和挤出效应现象算出来财政扩张的产出增量小于初始支出增量就以为乘数效应不存在。原因乘数效应和挤出效应是同时起作用的。乘数效应放大初始支出挤出效应通过利率上升减少私人投资。净效果取决于两个力量的相对大小。解决把两个效应分开算。先假设利率不变算纯乘数效果再算利率上升导致的投资减少量两者相减就是净效果。这样就不会把两个概念搅在一起。4.3 忽略预期的作用现象模型里投资只取决于当期利率但现实中投资取决于对未来回报的预期。原因凯恩斯本人非常强调预期和信心但IS-LM的线性版本把预期简化掉了。解决在做政策分析时额外考虑预期渠道。比如政府宣布未来会增加税收来偿还债务那么即使当期支出增加企业也可能因为预期未来税负加重而减少投资。这种预期效应在线性模型里看不到但在现实中很重要。4.4 把LM曲线当成永远向上倾斜现象默认LM曲线总是向右上方倾斜忽略了流动性陷阱和古典区域。原因LM曲线的斜率取决于货币需求对利率的敏感度f。当f趋于无穷大时LM曲线水平这就是流动性陷阱当f趋于0时LM曲线垂直这就是古典区域。解决在分析之前先判断经济处于哪个区域。如果利率已经很低、货币需求对利率极度敏感那么LM曲线接近水平货币政策效果很弱财政政策效果很强。这个判断比直接套公式重要。4.5 用静态模型分析动态问题现象用IS-LM分析通胀、债务积累、汇率变动等动态问题。原因IS-LM是静态均衡模型它没有明确的时间维度。解决动态问题需要动态模型比如引入预期、价格调整方程或跨期优化。如果非要用IS-LM至少要做比较静态分析明确“从哪个均衡到哪个均衡”而不是把均衡点当成终点。5. 从课件到代码把凯恩斯框架变成可验证的模拟工具5.1 构建一个可扩展的宏观模拟脚本前面几章的代码都是片段实际用的时候我一般会写成一个可扩展的脚本。核心思路是把参数、求解、可视化分开。参数放在一个字典里求解函数接受参数返回结果可视化函数负责画图。这样改参数不用动逻辑加新政策不用重写求解器。下面是一个简化版的框架你可以直接拿去改。import numpy as np import matplotlib.pyplot as plt class ISLMModel: def __init__(self, params): # params是一个字典包含a,b,c,d,e,f,G,T,M,P self.p params def solve(self): p self.p numerator p[a] - p[b]*p[T] p[c] p[G] (p[d]*p[M])/(p[f]*p[P]) denominator (1 - p[b]) (p[d]*p[e])/p[f] Y numerator / denominator r (p[e]*Y - p[M]/p[P]) / p[f] return Y, r def plot_curves(self, Y_rangeNone): p self.p if Y_range is None: Y_range np.linspace(0, 3000, 100) # IS曲线r (a - b*T c G - (1-b)*Y) / d r_IS (p[a] - p[b]*p[T] p[c] p[G] - (1-p[b])*Y_range) / p[d] # LM曲线r (e*Y - M/P) / f r_LM (p[e]*Y_range - p[M]/p[P]) / p[f] plt.plot(Y_range, r_IS, labelIS) plt.plot(Y_range, r_LM, labelLM) Y_eq, r_eq self.solve() plt.scatter([Y_eq], [r_eq], colorred, zorder5) plt.xlabel(产出 Y) plt.ylabel(利率 r) plt.legend() plt.title(IS-LM 均衡) plt.show() # 使用示例 params {a:100, b:0.8, c:200, d:50, e:0.5, f:100, G:300, T:200, M:1000, P:1.0} model ISLMModel(params) Y, r model.solve() print(f均衡产出{Y:.2f}, 均衡利率{r:.4f}) model.plot_curves()这个类的设计要点是参数和逻辑分离solve方法只负责计算plot_curves只负责画图。如果你想加一个政策冲击只需要改params字典里的G或M重新调用solve就行。如果你想加一个AD-AS模块可以在这个类外面再包一层。这种结构比把所有代码堆在一个函数里好维护得多。5.2 用模拟结果验证理论预测有了这个工具就可以做验证了。比如理论说财政扩张会推高利率你可以把G从300调到400看r是不是上升。理论说货币扩张会降低利率你可以把M从1000调到1200看r是不是下降。理论说d越大挤出效应越强你可以把d从50调到100看财政扩张的产出增量是不是变小。这种验证比背书有用因为你能看到具体数字怎么变。如果某个结果和理论预测相反那要么是参数设错了要么是理论假设不适用无论哪种情况都值得深挖。5.3 从IS-LM到AD-AS的扩展路径IS-LM是短期模型价格不变。如果要分析价格和产出的同时决定需要引入AD-AS框架。扩展路径是把IS-LM解出来的Y作为总需求然后加一个总供给方程比如菲利普斯曲线或生产函数联立求解价格和产出。这一步的难点在于总供给方程的设定不同学派有不同的假设。凯恩斯主义通常假设短期总供给曲线向上倾斜因为工资和价格有粘性。新古典则假设总供给曲线垂直因为价格完全灵活。你可以在这个脚本基础上加一个AS模块看不同假设下政策效果怎么变。5.4 一个我常用的检查习惯每次跑完模拟我都会做三件事。第一检查均衡解是否满足两个市场的均衡条件也就是把Y和r代回IS和LM方程看两边是否相等。第二检查参数是否在合理范围内比如边际消费倾向b必须在0到1之间货币需求对利率的敏感度f必须大于0。第三检查结果是否符合直觉如果财政扩张导致产出下降那要么是参数设错了要么是模型有特殊设定。这个习惯帮我抓过不少低级错误比如把符号写反、把参数单位搞混。希望帮到你。本文还有配套的精品资源点击获取