SCORE(1,1), SCORE(1,2), SCORE(1,3), SCORE(1,4),
SCORE(2,1), SCORE(2,2), SCORE(2,3), SCORE(2,4),
SCORE(3,1), SCORE(3,2), SCORE(3,3), SCORE(3,4)
先變動第一個註標,再變動第二個的,稱為依行 (columnwise)
次序。即先處理第一行的各
項資料,再處理第二行,依此次序,直到最後一行。
再以上述 SCORE(3,4) 為例, 其處理次序如下,
SCORE(1,1), SCORE(2,1), SCORE(3,1),
SCORE(1,2), SCORE(2,2), SCORE(3,2),
SCORE(1,3), SCORE(2,3), SCORE(3,3),
SCORE(1,4), SCORE(2,4), SCORE(3,4)
假如沒有規定次序,例如在輸出/輸入串列中
使用陣列名稱
, 依照 FORTRAN
慣例,
二維陣列依行次序處理
。
使用 DO 迴圈
INTEGER
LEVEL, LIMIT
PARAMETER
(LEVEL = 4, LIMIT = 50)
REAL
SCORE(LEVEL, LIMIT)
INTEGER
I, J
DO
20 I = 1, LEVEL
DO
10 J = 1, LIMIT
READ
*, SCORE(I, J)
10
CONTINUE
20
CONTINUE
INTEGER
SCORE(3,4)
READ
*, SCORE
使用隱式 DO 迴圈
READ
*,
((
SCORE(I,J), J = 1, LIMIT
)
, I=1, LEVEL
)
TEMPS
(source)
上一章談到副程式可以使用一維陣列做為引數,同樣可以使用多維陣列做為引數。
同樣實際引數和形式引數,都必須有陣列宣告。
8.3 例題 :
Pollution report:
POLLUT
(source)
Oceanographic data analysis:
OCEAN
(source)
8.4 矩陣
含有 m 列和 n 行數值的二維陣列, 稱為
m x n 矩陣
(matrix)。
兩個矩陣 A 和 B
相等
,寫成 A = B, 假如
A 的列數和 B 的列數相同, 而且A 的行數也和 B 的行數相同。
A 的每一項和 B 相對應的每一項相等。
矩陣加減,純量相乘
假設 A
ij
和 B
ij
分別為
m
x
n
矩陣 A 和 B 的第
i
列和第
j
行的項目, 則
A + B
的第
i
列和第
j
行的項目為
A
ij
+ B
ij
。
同樣地,
A - B
的第
i
列和第
j
行的項目為
A
ij
- B
ij
。
純量 c 和
m
x
n
矩陣 A 相乘, 其乘積矩陣
cA
的第
i
列和第
j
行的項目為
cA
ij
。
以下是處理矩陣相加的 FORTRAN 副程式,
略為修改即可處理矩陣相減和純量相乘。
SUBROUTINE
MATSUM(A, B, C, LIMIT, M, N)
INTEGER
LIMIT, M, N, I, J
REAL
A(LIMIT, LIMIT), B(LIMIT, LIMIT), C(LIMIT, LIMIT)
DO
20 I = 1, M
DO
10 J = 1, N
C(I,J) = A(I,J) + B(I,J)
10
CONTINUE
20
CONTINUE
假設 A 為
m
x
n
矩陣, B 為
n
x
p
矩陣。 注意 A 的行數必須 等於 B 的列數。 則
乘積 AB
為一
m
x
p
矩陣, 其第
i
列和第
j
行的項目為
A
i1
B
1j
+ A
i2
B
2j
+ ... + A
in
B
nj
以下是處理矩陣相乘的 FORTRAN 副程式。
SUBROUTINE
MATMUL(A, B, C, LIMIT, M, N, P)
INTEGER
LIMIT, M, N, P, I, J, K
REAL
A(LIMIT, LIMIT), B(LIMIT, LIMIT), C(LIMIT, LIMIT)
DO
30 I = 1, M
DO
20 J = 1, N
C(I,J) = 0.0
DO
10 K = 1, P
C(I,J) = C(I,J) + A(I,K) * B(K,J)
10
CONTINUE
20
CONTINUE
30
CONTINUE
FORTRAN 90
特色
處理矩陣可用下列預先界定的函數:
MAXVAL(A)
MINVAL(A)
MAXLOC(A)
MINLOC(A)
PRODUCT(A)
SIZE(A)