.
...
ランダムウォークと擬似乱数生成樋口さぶろお
龍谷大学理工学部数理情報学科
計算科学☆演習
II L01(2013-04-10 Wed)
今日の目標
.
..
1 ランダムウォークとは何か説明できるようにな ろう
.
2
.. C
で擬似乱数を使えるようになろう.
http://hig3.net
樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 1 / 20
はじめに この授業どんなのり?
ここまで来たよ
1 ... はじめに
この授業どんなのり
?
2 ... ランダムウォーク ランダムウォーク 擬似乱数
擬似乱数の正しい
/
間違ったプログラムはじめに この授業どんなのり?
講義
+
演習の目標もう少し正確にはシラバスを見てね
.
確率的な現象を数式で解析できる確率的な現象をシミュレートするプログラムが作れ
,
その結果をコン ピュータで解析できるチームで協力して問題を解決できる
,
効率よく質問できる,
自分の学 習方法を改善できる樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 3 / 20
はじめに この授業どんなのり?
計算科学
II(
講義)
ののり 必ず計算科学演習II
と同時に履修してね.
成績計算注文の多い科目です…科目の成績
100
ピーナッツは10
ピーナッツ:
毎回授業でのquiz
10
ピーナッツ:
授業時間外の予習復習30
ピーナッツ:
プチテスト50
ピーナッツ:
ファイナルトライアル その他追加ピーナッツ.
その時に説明.
資料授業で配布
.
授業後に欲しい人はhttp://hig3.net
から各自ダウンロード
. 1-503
前のレターボックスに残ってることも.
欠席届ピーナッツ的に考慮されたい場合は
,
専用用紙に事情を説明する書 類を貼って,
授業前後各5
分に提出(
事前事後とも可.
ファイナルトライ アルが締切).
欠席に事前連絡は不要.
何回欠席しても期末試験受験資格 を失うことはありません.
はじめに この授業どんなのり?
計算科学演習
II
ののり 必ず計算科学II
と同時に履修してね.
成績計算注文の多い科目です…科目の成績
100
ピーナッツは20
ピーナッツ:
毎回の課題80
ピーナッツ:
プチテストx3=15,30,35
実習室に行ったら
, http://hig3.net →
計算科学☆演習II
へ.
別紙も 参照.
樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 5 / 20
はじめに この授業どんなのり?
1
週間のタイムライン.
..
1 水午前まで 予習復習問題
(e
ラーニングor
携帯) .
2
..
水3
計算科学II(7-002), quiz .
..
3 金朝まで 予習復習問題
(e
ラーニングor
携帯) .
..
4 金
2
計算科学演習II(1-619), quiz
返却.
5
..
金昼 休憩スペース(1-614) .
..
6 金
3
総合演習(1-619) .
..
7 金
4
オフィスアワー(1-619)
はじめに この授業どんなのり?
担当者ののり なまえ
:
樋口さぶろおへや
: 1-502
オフィスアワー
:
木6(1-539),
金4(1-619).
訪問歓迎な時間:
月火木 昼.
お弁当持参可.
お湯あげます.
Web
ページ: http://hig3.net
演習の指示や,
スケジュールもここ から.
樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 7 / 20
ランダムウォーク ランダムウォーク
ここまで来たよ
1 ... はじめに
この授業どんなのり
?
2 ... ランダムウォーク ランダムウォーク 擬似乱数
擬似乱数の正しい
/
間違ったプログラムランダムウォーク ランダムウォーク
C
言語で数列の計算現象の数学A
数列
{ X t } ,
時刻t = 0, 1, 2, . . ..
初項
X 0 = 0
漸化式
X t+1 = X t + R t+1 .
階差数列
R t+1 =
定数 ならX t は等差数列. C
言語で数列を書くと?
1
i n t x ;
2
i n t r ;
3
i n t t ;
4
x=
初 項;
5
f o r ( / ∗ t
こ こ 省 略∗ / ) {
6
p r i n t f ( ”%d\n ” , x ) ;
7
r =(
階 差 数 列 の 一 般 項R
t+1) ;
8
x=x+r ;
9
}
樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 9 / 20
ランダムウォーク ランダムウォーク
.
ランダムウォーク..
...
ランダムウォーク
⇔
階差数列R t+1 が
確率変数
つまり
R t+1 がランダム.
例えば,
こんな場合.
R t+1 確率
+1 p
− 1 q(= 1 − p)
等差数列vs
ランダムウォーク20 40 60 80 100 t
-6 -4 -2 2 4 6 x
ランダムウォーク ランダムウォーク
ランダムウォークってどんなところに出てくる
?
株価変動 ブラウン運動 ゲーム
数値積分
樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 11 / 20
ランダムウォーク 擬似乱数
ここまで来たよ
1 ... はじめに
この授業どんなのり
?
2 ... ランダムウォーク ランダムウォーク 擬似乱数
擬似乱数の正しい
/
間違ったプログラムランダムウォーク 擬似乱数
擬似乱数列の生成 乱数列
=
ランダムな数列R t+1 をC
言語でどう書く?
1
#i n c l u d e < s t d l i b . h>
2
3
/ ∗ 0
以 上RAND MAX
以 下 の 正 の 整 数 を ラ ン ダ ム に 選 ん で 返 す 関 数∗ /
4
i n t r a n d ( ) ;
5
6
/ ∗
そ の 初 期 化∗ /
7
v o i d s r a n d ( u n s i g n e d i n t s e e d ) ;
RAND MAX
はM PI
みたいな定数.
値は処理系による.
たとえば2 31 − 1.
得られる値は
, +1, − 1
だけでいいんだけどな〜偶数奇数でわけるのは「実は」危険
樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 13 / 20
ランダムウォーク 擬似乱数
この授業の約束
(+
世の中に近い習慣). rand()
を生で使わず, [0, 1)
一様 乱数を返すdouble getuniform()
にして使う.
1
/∗ [ 0 , 1 )
一 様 乱 数∗/
2
d o u b l e g e t u n i f o r m ( ) {
3
r e t u r n r a n d ( ) / ( 1 . 0 +RAND MAX ) ;
4
}
5
6
/ ∗ y
が[ 0 , 1 )
一 様 乱 数 な ら,
返 り 値 は 確 率1 / 4
で0 ,
確 率3 / 4
で1 ∗ /
7
i n t g e t r a n d o m ( d o u b l e y ) {
8
i f ( y< 0 . 2 5 ) {
9
r e t u r n 0 ;
10
} e l s e {
11
r e t u r n 1 ;
12
}
13
}
. getuniform()
の性質..
‘
値域’ 0 ≤ getuniform() < 1.
ランダムウォーク 擬似乱数
計算機の中はどうなってんの
?
擬似乱数列=‘
ほぼ’
ランダムな数列樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 15 / 20
ランダムウォーク 擬似乱数の正しい/間違ったプログラム
ここまで来たよ
1 ... はじめに
この授業どんなのり
?
2 ... ランダムウォーク ランダムウォーク 擬似乱数
擬似乱数の正しい
/
間違ったプログラムランダムウォーク 擬似乱数の正しい/間違ったプログラム
..
ソースコード1:乱数
1 /∗
2 r a n d 1 . c−− −1 o r +1 を 確 率1 / 4 , 3/4で 選 ぶ 乱 数 3 Time−stamp : ”2013−04−09 Tue 1 8 : 5 7 JST h i g ”
4 ∗/
5 # d e f i n e _ C R T _ S E C U R E _ N O _ W A R N I N G S // VC++2008用 お ま じ な い 6 # i n c l u d e < s t d i o . h >
7 # i n c l u d e < s t d l i b . h > /∗s r a n d ( ) , r a n d ( ) を 使 う の に 必 要 ∗/
8
9 /∗ 関 数 プ ロ ト タ イ プ 宣 言∗/
10 d o u b l e g e t u n i f o r m ();
11 int g e t r a n d o m ( d o u b l e y );
12
13 int m a i n (){
14 int s e e d ; /∗ 疑 似 乱 数 の シ ー ド ∗/
15 int t ; /∗ カ ウ ン タ ∗/
16 int t m a x = 1 0 0 ; /∗ 疑 似 乱 数 を 得 る 回 数 ∗/
17
18 s c a n f ( " % d " ,& s e e d );
19 s r a n d ( s e e d ); /∗ シ ー ド の 設 定 ∗/
20 for ( t =0; t < t m a x ; t + + ) {
21 /∗s r a n d ( s e e d ) ; ∗/ /∗ここに置くと? ∗/
22 p r i n t f ( " % f \ n " , g e t r a n d o m ( g e t u n i f o r m ( ) ) ;
23 }
24 r e t u r n 0;
25 }
26
27 /∗ ∗ [ 0 , 1 ) 一 様 疑 似 乱 数 を 返 す ∗/
28 d o u b l e g e t u n i f o r m (){
29 r e t u r n r a n d ( ) / ( R A N D _ M A X + 1 . 0 ) ;
30 }
31
32 /∗ ∗ −1 o r +1 を 確 率1 / 4 , 3/4 で 返 す 乱 数 ∗/
33 int g e t r a n d o m ( d o u b l e y ){
34 if ( y < 0 . 2 5 ){
35 r e t u r n -1;
36 } e l s e {
37 r e t u r n +1;
38 }
39 }
樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 17 / 20
ランダムウォーク 擬似乱数の正しい/間違ったプログラム
. Quiz(rand()
の振る舞い)..
...
次のプログラムで
, A
が出力される確率は?
1
i f ( g e t u n i f o r m ()== g e t u n i f o r m ( ) ) {
2
p r i n t f ( ”A\n ” ) ;
3
} e l s e {
4
p r i n t f ( ”B\n ” ) ;
5
}
.
1
.. 0 . ..
2
0
に近い. ..
3
1/2
.
4
.. 1/2
くらい. ..
5
1
に近い. ..
6
1
ランダムウォーク 擬似乱数の正しい/間違ったプログラム
. Quiz(rand()
の振る舞い)..
...
次のプログラムで
, A
が出力される確率は?
1
i f ( g e t u n i f o r m ( ) < 0 . 1 ) {
2
i f ( g e t u n i f o r m ( ) < 0 . 2 ) {
3
p r i n t f ( ”A \ n ” ) ;
4
}
5
}
.
1
.. 0 . ..
2
0.02 . ..
3
0.1 .
4
.. 0.2 . ..
5
0.3 . ..
6
1
樋口さぶろお (数理情報学科) L01ランダムウォークと擬似乱数生成 計算科学☆演習II(2013) 19 / 20
ランダムウォーク 擬似乱数の正しい/間違ったプログラム
. Quiz(疑似乱数の使いかた) ..
...
サンプルプログラムを参考に
,
引数y
として[0, 1)
一様乱数が与えられた とき,
下の確率で値を返すint getrandom(double y)
を書こう.
返り値 確率
− 1 1/3 0 1/2 +1 1/6
予習復習問題C-learning
は携帯を利用した学習システム.
ネットマン提供.
学生には
(
通信料以外)
かかりません. http://asp.c-learning.jp/s/
明日