最近,我深入研究了一组不知何故古老的 Fortran 代码,并试图完全理解它们。这些代码中有很大一部分是在许多状态变量维度上的多层循环,旨在找到策略函数(不动点)。没关系,但真正让我恼火的是网格节点索引的凌乱表达。例如,
do z=1,notimes
do i=1,weignosims
do t=1,nt
! main body of operations
! nodes index below
node = (i-1)*(nt+ntr) + t ! To keep track of an individual's life
index = (begnosims -1)*notimes + weignosims*(z-1) + i ! To keep track of which individual in which economy
enddo
enddo
endo
似乎作者希望将所有索引堆叠到一个数组中并跟踪它们中的每一个。但是,它自然是一个多重数组。这样的表达既令人困惑又容易出错。此外,在后面的情况下,作者还编写了类似asset(index,age)甚至定义三维数组来表示 1 个状态/节点。所以他为什么费心用上面的方式写
我想知道的是仅仅是编程风格还是这种风格可以获得一些好处(至少对于Fortran而言)?如果第二个原因成立,那么当我切换到一些更现代的科学计算语言(如 Julia)时,我可以有一些替代方法来“跟踪节点”吗?