我正在使用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。我试了很多东西,但我失败了。知道怎么做吗?
答案 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