在循环

时间:2015-04-27 00:21:55

标签: fortran fortran90

我正在使用Fortran 90.我需要计算一个递归,如xn = 6 *(xn-1)+ 7 *(xn-2),其中(xn-1)是n-1步, (xn-2)是n-2步。因此,如果我们设置x1 = 2且x0 = 1,我们得到x2 = 6 * x1 + 7 * x0,依此类推每个n。

所以我写了

x0 = 1.
x1 = 2.
do i = 1,20
   xn = 6.*x1 + 7.*x0
   x1 = xn
   x0 = x1
end do

但是这段代码正在替换x0和x1代替xn,我需要在每一步中将x1替换为xn,将x0替换为x1。我试了很多东西,但我失败了。知道怎么做吗?

2 个答案:

答案 0 :(得分:3)

虽然答案已经添加到这个问题中,但让我回答一个更常见的问题。考虑迭代中的下一个值取决于n先前值的问题。在本案中n = 2。解决此问题的一般策略是构造另一个大小为n的1-d数组,并将所有初始值x(1),x(2),..,x(n)保存在此数组中。然后在每次迭代中,我们使用这些值来计算下一个值x(n+1)并使用x(1) by x(2), x(2) by x(3),...,x(n) by x(n+1)更新数组,并再次使用这些值来计算x的下一个值,依此类推。必须使用这种策略的一个特定示例是时间延迟系统的集成。

答案 1 :(得分:2)

@ parthian-shot在评论中给出了正确答案。但这留下了标记为无人回答的问题,所以我在这里重复一遍:

您要将xn的值分配给x1,然后将x1的值(现在与xn相同)分配给x0 。你只需要翻转它:

do i = 1,20
   xn = 6.*x1 + 7.*x0
   x0 = x1
   x1 = xn
end do