Version 1 (modified by 11 years ago) (diff) | ,
---|
数値計算法 第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どちらも一気に代入すると値の順序が異なっているためアレ
ベクトルや行列の要素ごとに計算
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"を除いた関数名を用いる
- 関数内の変数はローカル