LoginSignup
7
14

More than 5 years have passed since last update.

Fortranで乱数を生成する

Last updated at Posted at 2016-06-05

乱数を生成

Fortranには簡易的な乱数を生成するための組み込み手続きがあります。

rnd.f90
double precision :: rnd !スカラ,または配列
call random_number(rnd)

random_numberは、0~1の範囲の乱数を生成します。rndには、実数のスカラー、または配列を指定します。

しかし、このままだと実行する度に毎回同じ乱数の値の組み合わせが生成されます。これは、乱数生成に使われる初期値が、実行の度にリセットされるからです。

乱数生成の初期値を変更する

この初期値の設定には、以下の組み込み手続きを使います。

call random_seed(size,put,get)
!size:初期値のサイズを取得
!put :初期値を入力
!get :初期値の取得

この初期値には配列が用いられ、そのサイズはコンパイラに依存します。(参照:乱数発生の組み込み手続)

実行するたびに、異なる乱数を生成

乱数生成の初期値を、時間によって変更することで、簡易的な乱数を生成します。

rnd.f90
double precision,intent(out) :: rnd
integer :: seedsize, i
integer, allocatable :: seed(:)

call random_seed(size=seedsize) !初期値のサイズを取得
allocate(seed(seedsize)) !配列の割り当て
do i = 1, seedsize
    call system_clock(count=seed(i)) !時間を取得
end do
call random_seed(put=seed(:)) !初期値を与える

do i = 1,10
    call random_number(rnd)
    write(*,*) rnd
end do

call random_number(rnd)を行う前に、seedを一度だけ与えておくことで、実行ごとに異なる乱数を呼び出すことができました。

以下の記事を参考にしました。
fortran での擬似乱数生成

7
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
14