wiki:GB12301/2013-04-23

Version 1 (modified by chris, 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"を除いた関数名を用いる
  • 関数内の変数はローカル