前回に続き、行列パレットの練習。「ざっと」一通り撫でるために1パレットあたり2回を目標としておるのですが、3回目です。今回でも舐めきれませぬ。行列パレットはブロック多過ぎ。まあ今回くらいで切り上げて次のパレットへ行くかと。だんだん面倒な奴らも登場してきたのでこの辺が潮時か?メンドイところをスキップするつもりだな、自分。
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはWindows 11のパソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。
Scilab 2024.0.0
今回練習するブロックども
今回は以下の6個のブロックを練習してみます。
-
- MATDET、Matrix Determinant、正方行列の行列式を求める
- MATEIG、 Matrix Eigenvalues、固有値、固有ベクトルを求める
- MATINV、Matrix Inverse、逆行列を求める
- SQRT、行列の各要素の平方根を個別に求める
- MATZCONJ、Conjugate of Matrix’s Elements、行列の各要素の複素共役
- MATZREIM、複素行列の各要素の実部、虚部の分離または結合
前半3つは行列全体を扱うもの、後半3つは行列の各要素を処理するものです。練習に使用したフローの全体が以下に。
MATDET、Determinant(行列式)
まあね、以下の例くらいの2x2の小さな整数の行列であれば、お惚け老人でも計算できないことはないです。4引く6でマイナス2とくらぁ。でもお惚け老人が計算できそうな行列式など奇跡に近いっす。そういうときはこのブロックでお願い。多分頑張って計算してくれるのだと思います。
MATEIG、 Eigenvalues(固有値、固有ベクトル)
続いては皆大好き Eigenvalue(固有値)です。以下の設定のようにオプションがあり、「固有値のみ」求めるオプション1と、固有値+固有ベクトル(のどれか)を求めるオプション2があります。
以下の例ではオプション2で固有値と固有ベクトルの両方を求めてます(デフォルトの小数点以下1桁表示だと何だか分からないので2桁にしてあります。)オプション2を指定すると出力ポートは「2つ」になります。上の方が固有値、下の方が固有ベクトルです。ただし形式的には入力の行列と同サイズの行列に「詰めた」形での出力となるようです。「基本は列ベクトル」なので、縦方向に読み、以下図に書き入れたように固有値λ1、λ2、固有ベクトルV1、V2が読み取れます。なお、固有ベクトルは同じスパンの上のベクトルであれば「なんでも良い」のでEIGブロックの内部で良きに計らってくれた値での出力であるようです。Maximaなどだとx=1に固定した場合のyの値を返してくれるみたい。まあ同じスパンに乗って位相ならOKっと。
MATINV、Inverse(逆行列)
泣く子も黙る(黙らないか)、逆行列を求めるブロックです。これまた自分で求めようなどと考えるとメンドクセー奴ですが、INVにお任せ。
SQRT(各要素の平方根)
SQRTは行列の各要素の平方根をとって、同じ形の行列に結果を詰めて返してくれるものです。こんな感じ。ここでも結果は小数点以下2桁出力。
MATZCONJ(複素共役)とMATZREIM(実部、虚部の分離または結合)
以前に「転置」のブロックをやったときに、複素数の場合、転置のついでに複素共役をとるというオプションがありました。今回のMATZCONJは、複素共役はとってくれますが、転置はしないブロックです。MATZCONJかけたあとMATZREIMで実部、虚部を分離しているのは、行列表示のブロックが複素数での表記に対応していないらしいためです。分離すれば以下のように表示をしてくれました。
オプションによっては実部、虚部をあわせて複素数にする逆変換もできるみたいです。知らんけど。
なんとか直に処理できるブロックはやったね。あとはメンドクセー奴らだ。どうする?