| 1 | == 数値計算法 第2週 == |
| 2 | |
| 3 | モンテカルロ法はサンプル数nに対してsqrt(n)程度で制度が上がる。 → サンプル数を100増やして1/10の改善 |
| 4 | |
| 5 | * MATLABが遅い原因は |
| 6 | * メモリはどれくらい必要なのか |
| 7 | |
| 8 | 実験によると、モンテカルロ法のオーダはO(n)とみられる。 |
| 9 | |
| 10 | * MATLABでは配列を宣言しなくても使える |
| 11 | * 遅くなる原因のひとつ |
| 12 | * 0で埋まってる配列を作ってメモリを確保する方法がある |
| 13 | |
| 14 | {{{ |
| 15 | x = zeros(1,n); % 1行n列のゼロ行列を生成 |
| 16 | }}} |
| 17 | {{{ |
| 18 | x = rand(1,n); % for-loop無しで乱数を生成。x,yどちらも一気に代入すると値の順序が異なっているためアレ |
| 19 | }}} |
| 20 | |
| 21 | {{{#!comment |
| 22 | LINQ星人のお出ましじゃあ |
| 23 | }}} |
| 24 | |
| 25 | ベクトルや行列の要素ごとに計算 |
| 26 | {{{ |
| 27 | r = x.^2 + y.^2; % x,yの各要素を2乗してrに入れる |
| 28 | }}} |
| 29 | rがベクトルであるとき、t = (r <= 1) は、rの要素ごとを調べて1以下ならtに代入している(のでかならずしもベクトルrの大きさと一致しない) |
| 30 | |
| 31 | 工夫次第でfor文を完全に除去できる場合もある。 |
| 32 | |
| 33 | MATLABでの関数の作り方 |
| 34 | {{{ |
| 35 | function [a,b,c] = function_name(x,y) % ファイルに関数を分離するときは、先頭にこの行を付ける |
| 36 | |
| 37 | ただし、 |
| 38 | a,b,c ... 出力する変数のリスト |
| 39 | x,y ... 入力する変数のリスト |
| 40 | |
| 41 | 呼び出し方: |
| 42 | [a,b,c] = function_name(x,y); |
| 43 | }}} |
| 44 | |
| 45 | * function_name.m として保存 |
| 46 | * 呼び出すときには".m"を除いた関数名を用いる |
| 47 | * 関数内の変数はローカル |