Recursion 递归隐函数

Recursion 递归隐函数,recursion,julia,Recursion,Julia,我想解一个递归方程组。为此,值Vm被定义为类似于Vm==gVm的方程的解,其中g是一个已知函数。我如何以这种方式定义函数 具体而言,考虑系统: 在朱莉娅,我有: T=4; beta=.95; alpha=.3; gamma=.3; zeta=.3; V(m) = m<T ? alpha+beta*V(m+1)+beta*(Z(m+1,1)+Z(m+1,2)+Z(m+1,3)+Z(m+1,4)) : 0. U(f) = f<T ? gamma+beta*U(f+1)+beta*(Z

我想解一个递归方程组。为此,值Vm被定义为类似于Vm==gVm的方程的解,其中g是一个已知函数。我如何以这种方式定义函数

具体而言,考虑系统:

在朱莉娅,我有:

T=4;
beta=.95;
alpha=.3;
gamma=.3;
zeta=.3;

V(m) = m<T ? alpha+beta*V(m+1)+beta*(Z(m+1,1)+Z(m+1,2)+Z(m+1,3)+Z(m+1,4)) : 0.

U(f) = f<T ? gamma+beta*U(f+1)+beta*(Z(1,f+1)+Z(2,f+1)+Z(3,f+1)+Z(4,f+1)) : 0.

Z(m,f) = m<T && f<T ? zeta+beta*(Z(m+1,f+1)+V(m+1)+U(f+1)) : 0.

请注意,例如在计算V2时,rhs也包含V2。所以V2是方程的解。在这样的设置下,如何计算V、U和Z的值?

这似乎不是Julia特有的。在任何其他编程语言中,您将如何解决这个问题?这样定义,您的函数是相互递归的。当函数调用图是一棵树时,递归是很好的——如果不是,就像臭名昭著的斐波那契例子那样,复杂度可能会变成指数级。这可以通过在Julia中使用Memoize(Memoize包)来解决。然而,正如您所注意到的,您的示例甚至比这更糟糕:定义是循环的,例如,Z3,1依赖于Z3,1。你有一个由24个方程和24个未知数组成的线性系统,你可以用矩阵的形式写出来,然后用\.FYI:I呈现你的LaTeX代码。如果你不喜欢,请随意。@StefanKarpinski我可以用Mathematica来做,因为我知道如何将线性方程的解分配给变量,例如:do[Z[m,f]=Z[m,f]/.NSolve[Z[m,f]==\[Zeta]+\[Beta]Z[m+1,f+1]+V[m+1]+U[f+1],Z[m,f],Reals]//首先;打印[{m,f}],{m,T-1,1,-1},{f,T-1,1,-1}]。我不知道如何在朱莉娅身上做到这一点。我转向朱莉娅寻求提高速度。