Python求解供需模型均衡价格出现IndentationError错误原因咨询
代码错误分析及修复
1. IndentationError 报错原因
你的代码中excess_demand = lambda W: ...及后续的optimize.brentq等行存在多余的前置缩进。Python语法要求顶级代码(没有被包裹在函数、循环、条件判断等代码块中的代码)必须顶格写,你这部分代码参考了示例中main函数内部的缩进格式,但没有把代码放在函数内,因此触发了缩进错误。
修复方式:删除这几行前方的所有多余空格,和前面的a= np.linspace(0.2,2.0, num=1000)、z = 0.5行保持左对齐。
2. 其他需要修正的问题
- 缺少
scipy.optimize导入:你直接调用了optimize.brentq,但没有导入对应的模块,需要在代码开头加上from scipy import optimize,否则会触发NameError。 - lambda参数和实际使用变量不匹配:你定义的匿名函数接收的参数是
W,但函数内部计算供需时用的变量是P,变量名不统一会导致运行时找不到变量P,需要把lambda的参数改为P,或者把函数内部的P全部替换为W,保持一致。 - 没有遍历所有a的取值:你定义的
a是长度为1000的数组,直接代入P**a会得到数组结果,无法代入标量方程求解,需要加循环遍历每一个a的取值,逐个计算对应的均衡价格。 - 代码笔误:你报错的代码行中出现了未定义的变量
b,属于输入笔误,要改回你定义的参数a。
修正后可运行代码示例
import numpy as np from scipy import optimize # 生成1000个[0.2,2.0]区间的a样本 a_list = np.linspace(0.2, 2.0, num=1000) z = 0.5 # 存储所有均衡价格结果 eq_prices = [] for a in a_list: # 定义当前a对应的超额需求函数,参数为价格P excess_demand = lambda P: 1/(z * P**2 + P) - (P**a + P + 1) # 数值求解均衡价格 P, res = optimize.brentq(excess_demand, 1e-8, 1000.0, full_output=True) assert res.converged == True eq_prices.append(P) # 示例输出前10组结果 print("a值\t\t均衡价格P") for a, p in zip(a_list[:10], eq_prices[:10]): print(f"{a:.4f}\t\t{p:.6f}")
内容的提问来源于stack exchange,提问作者Maeva
相关产品推荐
相关产品推荐

