1program sample
2 implicit none
3
4 integer, parameter :: n = 5
5 integer :: i, j
6 real(8) :: a(n, n), b(n), x(n)
7 real(8) :: inner
8
9 x = (/1.0_8, 0.5_8, 0.0_8, 0.5_8, 1.0_8/)
10
11 a = reshape( &
12 & (/-2.0, 1.0, 0.0, 0.0, 0.0, &
13 & 1.0, -2.0, 1.0, 0.0, 0.0, &
14 & 0.0, 1.0, -2.0, 1.0, 0.0, &
15 & 0.0, 0.0, 1.0, -2.0, 1.0, &
16 & 1.0, 0.0, 0.0, 1.0, -2.0/), &
17 & (/n, n/))
18
19 ! 配列aの形状およびサイズを表示
20 write(*, *) 'shape of a = ', shape(a)
21 write(*, *) 'size of a = ', size(a)
22
23 ! 初期化
24 do i = 1, n
25 b(i) = 0.0_8
26 enddo
27
28 ! 行列aとベクトルxの積をbに代入: b_{i} = a_{i,j} * x_{j}
29 do j = 1, n
30 do i = 1, n
31 b(i) = b(i) + a(i, j) * x(j)
32 enddo
33 enddo
34
35 write(*, *) 'b = ', b
36
37 ! 組み込み関数を使用して同じ計算を行う
38 b = matmul(a, x)
39
40 write(*, *) 'b = ', b
41
42 ! ベクトル同士の内積を計算
43 inner = 0.0_8
44 do i = 1, n
45 inner = inner + b(i) * x(i)
46 enddo
47
48 write(*, *) 'inner product 1 = ', inner
49
50 ! 組み込み関数を使用して同じ計算を行う
51 inner = dot_product(b, x)
52
53 write(*, *) 'inner product 2 = ', inner
54
55 stop
56endprogram sample