chap05/sample7.f90

サンプルコードのダウンロード

 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