我是fortran 95的新手,我正试图抓住嵌套循环。下面是一个带嵌套循环的小代码。内循环是割线方法,它计算函数“Z + X1 ** 2-612”的根,并通过迭代将其保存为X0。 ISTEP是多少次迭代。这个循环本身就有效。现在我想为各种“Z”重复这个循环。例如,从300到360,增量为10.
如果我运行此代码,Z将在300到360之间变化,但我不断得到X0为300(即312的平方根)。
是否有人有嵌套循环的经验(不一定使用割线方法,因为这个内循环有效),这可以告诉我为什么我打印300到360井,但X0好像Z从不改变300?我浏览了论坛,发现了一些类似的问题,这些问题的变量声明放错了,但这似乎不是我的问题。
下面是我的代码,希望有人可以帮助我。我开始学习编程有点老了,但我猜测永远不会太晚!
PROGRAM DOLOOP2
IMPLICIT NONE
INTEGER :: ISTEP,Z
REAL :: A,B,DL,DX,X0,X1,D,X2
DL = 1.0E-06
A = 10 !LOWER GUESS
B = 20 !UPPER GUESS
DX = (B-A)/10.0 !STEPSIZE
X0 = (A+B)/2.0
ISTEP = 0 !first iteration
X1 = X0+DX
do Z=300,360,10
DO WHILE (ABS(DX).GT.DL)
D = (Z+X1**2-612)-(Z+X0**2-612)
X2 = X1-(Z+X1**2-612)*(X1-X0)/D
X0 = X1
X1 = X2
DX = X1-X0
ISTEP = ISTEP+1
END DO
print *,'temperature=',Z,', Xzero= ',X0,'iterations=',ISTEP
END DO
END PROGRAM DOLOOP2
答案 0 :(得分:1)
在重做循环之前,是否需要对内循环进行一些初始化?即,在第二循环之前重新定位在第一循环内。例如,第一次执行内部循环将改变dx
的值,这将影响该循环的第二次执行。