You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:24:08