一言メモ復習(2)

一言メモの復習です。
まだ10月の一言メモを始めた頃のメモ達です。

「MATLAB、for文の代わりに行列演算できないかを意識する。」 (2009/10/30 13:31)

MATLABとは、行列演算ができるプログラミング言語です。
この言語のポイントは、for文を使わずに全く同様の処理ができる場合があるということ。

りんご、100円、3個。
みかん、30円、5個。
もも、200円、1個。

合計金額Tを求めようと思います。
値段を、配列P[3]=(100,30,200)と定義。
個数を、配列N[3]=(3,5,1)と定義します。

C言語なんかだと。

T = 0;for( i=0; i<3; i++ ){    T += P[i]*N[i];}

なんてやっちゃう所ですが。

MATLABだと、

T = P*N';

って具合ですね。
つまり、これはベクトルの内積を取れば済むという話なのです。

ベクトル演算を多用するプログラムでは、コードが非常にシンプルにまとまります。
MATLAB凄い。

「モンテカルロ法による円周率導出。乱数を発生させて、円の内側にプロットされる確率を利用する。」 (2009/10/30 13:32)

モンテカルロ法とは、乱数を使う数値計算手法の総称を言います。
その中で、円周率の導出法を知って、感動しての一言メモ投稿でした。
たぶん有名だけど。

座標平面上に、(0,0)-(1,0)-(1,1)-(0,1)という正方形を考えます。
それから、原点を中心とする単位円も考えます。
正方形の中に円の1/4が入っている形です。

0から1の範囲で、2つの乱数を取りだします。
取りだした乱数は、必ず正方形の中です。
円の中に入っているかは、乱数次第です。

点が円の中に入っている確率は、円の面積と正方形の面積の比によります。
逆に。
モンテカルロ法によってランダムにいっぱい取りだした点から、円の中に入っている確率が分かります。

すると、円の面積と正方形の面積の比が分かります。
正方形の面積が分かっているから円の面積が分かって、つまり円周率が分かります。

確率の定義」に、確率の定義の揺れというのを書きました。
これを逆手にとった手法であります。
つまり、ラプラスの古典的定義と、頻度による定義が等しくなるように、円周率を定めるという発想。

「特異行列に微小な値を与えれば正則行列になるが、それでは意味がない?行列式でなく、行列条件数の大小で判断すべき?」 (2009/10/30 13:53)

これは、「?」付きの一言メモ。
数値解析によって連立方程式を解きたくなったとします。
連立方程式を行列形式にしてみたら、行列式が0で逆行列が存在しない。

この時点で厳密な解が得られないのは明らかなのですが、数値解析は元々厳密な解を期待しません。
連立方程式から作った行列、係数行列と言いますが、これの値を微小に変化させたらどうなりますか?
元の連立方程式とは、ほとんど変わらないのに、行列式は0でなくなって逆行列が得られます。

つまり、解が得られます!

これって正しいのか?
厳密解が得られない情報不足の連立方程式から、何故か解が得られてしまった。
たぶん、これは正しくないです。

そこで、数値解析の世界では、行列式ではなく、行列条件数というものを考えるようです。
さっきの解が得られてしまった係数行列の行列条件数を求めると、ごく小さな値が得られます。
行列条件数が小さい時は、行列式が0であるのと同様に、解が得られないと考えた方が良い。

と思う。
ここは、あくまで「?」付き。

また気が向いたら、復習します。
おやすみなさい。

コメント

タイトルとURLをコピーしました