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