NaLab01:行列の表現

投稿者: | 2018-04-25

今日のゼミでは行列の表現の方法の解説,それを用いた演習課題を提示した.

行列の計算機上での表現方法

行列はに2次元で,ベクトルは1次元である.C言語の環境で20行10列の行列を表現するには,基本的に二次元配列を使って

のように表現する.さらに,m行n列の一般化した行列ならば,

と表現したい.
しかし,C言語の環境では,動的に行数列数を与えて配列宣言をすることは難しい.
そこで,1次元配列を用いて,行数列数を動的に与える方法で配列を宣言する.

とすれば,20行10列の縦長の行列を一次元配列で表現できる.
では,どのようにすれば要素を指定できるだろうか.

プログラム上ではm=20 , n=10は固定とすると,これを利用して,i行j列の要素a[i][j]を指定するには,

とすれば,i行j列目をaijという変数に代入することができるし,各要素の指定方法もa[i + m*j]で,二次元上のa[i][j]の場所にあるとされるものを指定できる.
次のようにしても指定できる.

縦もしくは横の長さを固定長にして考えることで実現できる方法である.数値計算の分野では慣例的に使用される行列の表現方法で,これを後々使って,行列の圧縮保存の方法なども学習する.

行列のノルム

ベクトルの大きさをノルムといって表現することがある.(一般的には要素の二乗和の平方根を取って,ユークリッドノルムと呼ぶことが多い.)
行列にもノルムがあり,今回は1ノルムと無限大ノルムを使って,行列のノルムを計算する課題が出た.ここで前述した,慣例的な行列表現について慣れてもらいたい狙いだ.

1ノルム:行列の各列ごとに,成分の絶対値の総和を計算し,そのうち最大のもの.

無限大ノルム:行列の各行ごとに,成分の絶対値の総和を計算し,そのうち最大のもの.

これらを計算し,傾向を探るという課題である.

なお,行列についてはmallocを利用して20000×10000の行列を100パターン,10000×20000の行列を100パターン生成して,それぞれの1ノルムと無限大ノルムを計算していく.行列の生成にはrandom関数を使用して,乱数の種を変化させながら異なる行列を生成して計算していく.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です