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を完全に取り除いて手動で終了できることを理解するのに時間がかかりません。ベクトルの長さや、整列が必要かどうかによって異なります。いくつかの並列世界では、temp配列を関数として使用することができます。単純なシリアル実装の場合、tempは概念的に把握しやすいかもしれません。また、配列を長くすることについても言及しました。これは実際には各端をつかんで足を離してベクトルをアコーディングすることです。これを拡張することは、上記のインプリメンテーションのように、X、X '、およびTempがすべてインデックス値に整列しているインデックスを追跡するためのあごひげがあることを意味します。 fortranは任意の#:AnyOther#から行くことができるので、これはあなたがそのようにしたいときの完璧な例です。
エンドポイントでは、非中心の式を使用できます。 https://en.wikipedia.org/wiki/Finite_difference_coefficient#Forward_and_backward_finite_difference中間ケースの数式を得ることはおそらく可能ですが、それは髪の分割である可能性があります。 –