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

Julia中使用SymPy求解一般均衡问题的索引操作与方程组求解疑问

问题解决

1. 索引变量赋值/传入表达式的方法

SymPy中的IndexedBase是符号索引容器,属于不可变符号对象,不支持[]=直接赋值操作,正确的实现方式是使用符号替换(subs)机制,或是直接按索引生成对应表达式数组:

外生变量校准实现

using SymPy

# 设定经济体商品数量N
N = 3
n = symbols("n", integer=true)

# 定义外生符号变量
α = IndexedBase("α")
@syms γ

# 因为N为确定值,直接展开求和比使用SymPy.Sum更便于后续计算
α_sum = sum(α[i] for i in 1:N)
equation_1 = Eq(α_sum + γ, 1)

# 构造校准值替换字典
alpha3 = [1,2,3]
calib_subs = Dict(α[i] => alpha3[i] for i in 1:N)

# 代入校准值得到结果
calibrated_eq1 = subs(equation_1, calib_subs)
# 输出结果为 6 + γ = 1,符合预期逻辑

一阶条件表达式传入

对于供需函数这类已推导好的表达式,直接按索引生成表达式数组即可,不需要对IndexedBase对象赋值:

# 定义符号变量
P = IndexedBase("P") # 待求解价格向量
z = IndexedBase("z")
s = IndexedBase("s")
Y = IndexedBase("Y")

# 直接生成各索引对应的供需表达式
S = [s[i] * P[i] for i in 1:N]
D = [z[i] / P[i] for i in 1:N]

2. 带索引内生变量的方程组求解

需要先生成所有索引对应的方程,再将所有待求解的价格变量收集为列表传入求解函数即可:

# 生成所有商品的市场出清方程
market_clear_eqs = [Eq(S[i] - D[i], 0) for i in 1:N]
# 生成总收入约束方程
total_constraint = Eq(sum(P[i] * Y[i] for i in 1:N), 0)
# 合并为完整方程组
eq_system = vcat(market_clear_eqs, total_constraint)

# 收集所有待求解的价格变量
solve_vars = [P[i] for i in 1:N]

# 求解方程组(多变量方程组使用solve更适配,solveset主要用于单变量解集求解)
solution = solve(eq_system, solve_vars)

如果后续需要做外生冲击分析,只需要修改校准替换字典中对应外生变量的取值,代入求解结果即可得到新的均衡值。


内容的提问来源于stack exchange,提问作者Fam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:15:04