我正在尝试编写一个包含很多if语句的程序。但是,我无法理解这个错误来自何处。任何帮助,将不胜感激。
以下是我目前拥有的if块:
'unknown'
不断出现的错误是:
if (i == 1 .AND. j==1) then
E = E + A(i+1,j) + A(i,j+1) + A(L,j) + A(i,L)
else if (i == 1 .AND. j==L) then
E = E + A(i,j-1) + A(i+1,j) + A(i,1) + A(L,j)
else if (i == L .AND. j == 1) then
E = E + A(i,j+1) + A(i-1,j) + A(1,j) + A(i,L)
else if (i == L .AND. j == L) then
E = E + A(i,j-1) + A(i-1,j) + A(1,j) + A(i,1)
else if (i == 1 .AND. 1 < j < L) then
E = E + A(i+1,j) + A(i,j+1) + A(i,j-1) + A(L,j)
else if (i == L .AND. 1 < j < L) then
E = E + A(i-1,j) + A(i,j+1) + A(i,j-1) + A(1,j)
else if (1 < i < L .AND. j == 1) then
E = E + A(i-1,j) + A(i+1,j) + A(i,j+1) + A(i,L)
else if (1 < i < L .AND. j == L) then
E = E + A(i-1,j) + A(i+1,j) + A(i,j-1) + A(i,1)
else
E = E + A(i-1,j) + A(i+1,j) + A(i,j-1) + A(i,j+1)
end if
答案 0 :(得分:1)
您不能使用1 < i < L
之类的表达式来确定i
是否在1到L的范围内。
您需要使用两个不等式测试的交集。使用像
else if (1 < i .AND. i < L .AND. j == L) then
答案 1 :(得分:0)
@VladimirF好吧,正如我提到的,它看起来像是插值......
@Ianbush也提到了一些好处。也许......它是一些更流畅的/插补器?
更顺畅的例子:
L = UBOUND(OldThing, 1) !assumes it is square!
ALLOCATE(newthing(0:L+1, 0:L+1) )
DO I = 1, L
DO J = 1, L
NewThing(I,j) = OldThing(I,j)
ENDDO
ENDDO
! Probably a derivative to extrapolate the outliers is better...
! Kindergarten example below is for simplicity.
DO I= 1, L
NewThing(0,(I))= OldThing(1,I)
NewThing(0,(I))= OldThing(1,I)
NewThing(0,(I))= OldThing(1,I)
NewThing(0,(I))= OldThing(1,I)
ENDDO
NewThing(0 , 0) = OldThing(1,1)
NewThing(0, L+1) = OldThing(1,L)
NewThing(L+1, 0) = OldThing(L,1)
NewThing(L+1,L+1) = OldThing(L,L)
!then one is always within the bounds... And the normal case is executed.
E = E + NewThing(I-1,j) + NewThing(i+1,j) + NewThing(i,j-1) + NewThing(i,j+1)
可能需要返回NewThing(1:L,1:L)
答案 2 :(得分:-1)
使用SELECTED CASE或WHERE和ELSEWHERE,这会更容易一些。或者让我构建并在其中输入j测试。
如果没有看到剩下的代码,我只能猜测这可能与某些插值类似......
如果数组是从(0:n + 1)开始的,那么可以在单个数学语句行上执行此操作。