Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Fortran 90数组子集_Arrays_Fortran - Fatal编程技术网

Arrays Fortran 90数组子集

Arrays Fortran 90数组子集,arrays,fortran,Arrays,Fortran,我试图阅读一些Fortran代码,但对于像这样的数组子集操作,有一些东西我无法理解 假设n=3 还有阵列 INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12) REAL(KIND=dp) :: P(n+1),P0(n) 这条线到底是干什么的 DO i=1,n-1 ….. P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1) …. END DO 它是嵌套循环吗?如P的j从3到i+2,以及P的k从1到i 提前

我试图阅读一些Fortran代码,但对于像这样的数组子集操作,有一些东西我无法理解

假设
n=3

还有阵列

INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12)
REAL(KIND=dp)   :: P(n+1),P0(n)
这条线到底是干什么的

DO i=1,n-1
  …..
  P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1)
  ….
END DO
它是嵌套循环吗?如
P
j
3
i+2
,以及
P
k
1
i

提前谢谢。

接电话

P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1)
并将
i
替换为
1
(它在
do
循环中获取的第一个值)

在lhs上,从元素3到元素3有一个数组
p
切片(或部分),因此在本例中只有一个元素,但仍然是一个数组切片而不是标量。通过将
1
乘以数组
P0
的(相同大小)切片,然后除以2来更新

在下一次迭代中更有趣,i==2和

P(3:4) = P(3:4) - 2*P0(1:2) / 3
其中,数组切片现在每个为2个元素。数组切片上的操作应用于每个数组中相应的元素,因此此语句与这两个语句大致等效

P(3) = P(3) - 2*P0(1) / 3
P(4) = P(4) - 2*P0(2) / 3
最好用Fortran术语将其视为数组部分上的操作,而不是嵌套循环的某种语法糖

P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1)
并将
i
替换为
1
(它在
do
循环中获取的第一个值)

在lhs上,从元素3到元素3有一个数组
p
切片(或部分),因此在本例中只有一个元素,但仍然是一个数组切片而不是标量。通过将
1
乘以数组
P0
的(相同大小)切片,然后除以2来更新

在下一次迭代中更有趣,i==2和

P(3:4) = P(3:4) - 2*P0(1:2) / 3
其中,数组切片现在每个为2个元素。数组切片上的操作应用于每个数组中相应的元素,因此此语句与这两个语句大致等效

P(3) = P(3) - 2*P0(1) / 3
P(4) = P(4) - 2*P0(2) / 3
最好用Fortran术语将其视为数组部分上的操作,而不是嵌套循环的某种语法糖