利用Julia中的辛方法求解一般均衡问题
我试图用朱莉娅的Symphy软件包解决一个经济问题。在这个经济问题中,我有外生变量和内生变量,我正在对它们进行索引。我有两个问题:利用Julia中的辛方法求解一般均衡问题,julia,sympy,Julia,Sympy,我试图用朱莉娅的Symphy软件包解决一个经济问题。在这个经济问题中,我有外生变量和内生变量,我正在对它们进行索引。我有两个问题: 如何访问要传递的索引变量:校准值(到外部变量,在其他环境中校准)或公式(到内生变量,由代理使用铅笔和纸的最大化问题的一阶条件确定)。这也将允许我研究当我干扰外生变量时的平衡行为。首先,考虑我尝试通过外生变量的校准值。 方程式_1表示α加γ和1之和。因此,我想根据另一个向量alpha3将值传递给α向量,该向量带有校准参数 # Suposse alpha3 = [1,2
# Suposse
alpha3 = [1,2,3]
for n in 1:N
α[n]= alpha3[n]
end
MethodError: no method matching setindex!(::Sym, ::Int64, ::Int64)
一旦系统解决了,我肯定会做这一步。现在,我想传递公式或表达式作为价格的函数。价格是内生的未知变量。(如前所述,表达式是用纸和铅笔计算的)
< >我可以在<代码> s[n] < /代码>和<代码> d[n] < /代码>上编写公式,考虑第二个问题:
P[n]
)为未知变量?我将忽略不解决我的系统的可能性。假设我的系统有一个单一解或无限解(流形)。让我们假设我的方程比变量多:非常感谢Symphy的
索引数据库
功能没有任何直接支持。因此,语法alpha[n]
不可用。您可以直接调用方法\uuu getitem\uu
,如
alpha.__getitem__[n]
我没有看到相应的\uuuuu setitem\uuuuu
文档,所以我不确定
α[n]= alpha3[n]
在sympy中是有效的。但若有其他赋值方法,您可能只调用它,而不是使用[
进行赋值
关于方程的最后一个问题,我不确定,但您可能会找到IndexedBase对象的大小,并使用它来循环
如果可能的话,尽可能使用本机朱丽亚构造。对于这个例子,您可能只考虑变量数组。最近更改的<代码> @ Syss< /Cord:Me宏使这很容易生成。
例如,我认为以下内容主要重复了您正在尝试的操作:@syms n::integer, N::integer
#exogenous variables
N = 3
@syms α[1:3] # hard code 3 here or use `α =[Sym("αᵢ$i") for i ∈ 1:N]`
@syms γ
α2 = sum(α[i] for i ∈ 1:N)
equation_1 = Eq(α2 + γ, 1)
alpha3 = [1,2,3]
for n in 1:N
α[n]= alpha3[n]
end
@syms P[1:3], z[1:3], s[1:3], γ[1:3], S[1:3], D[1:3]
Eq_n = [Eq(S[n], D[n]) for n ∈ 1:N]
Eq0 = Eq(sum(P .* Y), 0)
eq_system = [Eq_n,Eq0]
solveset(eq_system,P[n])
我从你的答案中吸取了一些教训,但当我运行solveset函数时,它给出了一个错误。首先,eq_系统看起来很奇怪,但我设法使用vcat函数连接。但是当我执行solveset函数时,错误是:ArgumentError:无效索引:n类型SYM我认为它与nonlinsolve一起工作得更好。我刚刚测试了它重新。
alpha.__getitem__[n]
α[n]= alpha3[n]
@syms n::integer, N::integer
#exogenous variables
N = 3
@syms α[1:3] # hard code 3 here or use `α =[Sym("αᵢ$i") for i ∈ 1:N]`
@syms γ
α2 = sum(α[i] for i ∈ 1:N)
equation_1 = Eq(α2 + γ, 1)
alpha3 = [1,2,3]
for n in 1:N
α[n]= alpha3[n]
end
@syms P[1:3], z[1:3], s[1:3], γ[1:3], S[1:3], D[1:3]
Eq_n = [Eq(S[n], D[n]) for n ∈ 1:N]
Eq0 = Eq(sum(P .* Y), 0)
eq_system = [Eq_n,Eq0]
solveset(eq_system,P[n])