SUBROUTINE Diff(X, N, XPrime)
INTEGER , INTENT(IN ) :: N
REAL, DIMENSION(N), INTENT(IN ) :: X
REAL, DIMENSION(N), INTENT(INOUT) :: XPrime
enter code here
REAL, DIMENSION(-1:N+2) :: Temp
INTEGER :: I
!Use temp for X
Temp(1:N) = X
!... Temp(O) = X(1) - (X(2) - X(1) )
!... Temp(N+1) = X(N) + (X(N) - X(N-1))
!Your code here
!output XPrime from 1:N
END SUBROUTINE Diff
矢量的中间很容易,只是末端需要一些特别的东西。
对于 X' 可能是 Temp(0 :N+1)。
对于 X'' 可能是 Temp(-1:N+2)。
当然,很快就会意识到您可以完全摆脱 Temp 并手动完成任务。这取决于你的向量有多长,以及你是否需要一些对齐。在某些并行世界中,您可能希望将临时数组作为一个函数,对于简单的串行实现,临时可能在概念上更容易掌握。您还提到了延长数组,这实际上是通过抓住每一端并将您的爪子进一步分开来使向量手风琴。扩展它意味着你有下巴来跟踪索引,在上面的实施中,X、X' 和 Temp 都在索引值中对齐。由于 fortran 可以从 any#:AnyOther# 开始,这是您何时可能想要这样做的完美示例。