Xcosの各ブロック間を接続してデータを流す「黒いワイヤ」の見た目は細いです。しかしスカラー値だけでなく、ベクトルや行列を通過させることもできるのでした。「行列が流れてくる」のでそれら行列を操作するためのブロック群が存在。今回の行列(Matrix)パレットはそれらブロックどもを満載してます。お馴染みの線形代数?
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはWindows 11のパソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。
Scilab 2024.0.0
行列(Matrix)パレット
このパレットには20個以上のブロックが列挙されております。充実しているなあ、こんな感じ。
このパレットの練習初回の今回は、行列の形を変えたり、一部を取り出したりするための以下のブロックを練習してみたいと思います。
-
- MATDIAG、1次元ベクトルを対角行列に
- MATRESH、行列の形(行と列の数)をリシェイプする
- EXTRACT、行列要素の抽出
- EXTTRI、正方行列から、上三角行列、下三角行列、対角行列を「取り出す」
- MATTRAN、行列の転置
- SUBMAT、部分行列の抽出
今回練習のフローのテンプレ
今回対象のブロックどもは、時間経過には関わりなく数値で結果が確認できるものばかりです。Xcosなので「建前上」シミュレーション時間の設定などはあるのですが、動的な変化は無です。以下の「定型」にて動作を確認してます。
左の CONST_m ブロック内で入力となる行列を定義し、右のAFFICH_mブロックで通過してきた行列を捕捉し、数値として表示してます。上記では矢印一本で直結ですが、この矢印の途中に被テストブロックを配置すれば、それらの動作は一目瞭然だと。
なお、左のブロックはCONSTではなく、CONST_mが必須です。見た目は似てますが、CONSTブロックはスカラー専用。ベクトルや行列を入力したいときはCONST_mっす。
MATDIAG
1次元のベクトル要素を正方行列の対角要素に押し込めて、対角行列として出力してくれるブロックです。なお、入力は、1行に要素が並んでいる行ベクトルは処理してくれず、1列に要素が並んでいる列ベクトルだとうまく行きました。
MATRESH
行列を受け取ってその中に詰まっている要素どもを、行と列の数が異なる行列に詰め込み直してくれる「リシェイプ」処理です。こんな感じ。
上記では、入力の 3 x 3サイズの行列を、1 x 9 サイズの行列に変換してます。
EXTRACT
EXTTRI
こちらは抽出といっても、「上三角行列」「下三角行列」「対角行列」の形で取り出すものです。「要らないところ」はゼロ詰めっす。
SUBMAT
MATTRAN
今回の最後は「転置」transpose です。数学じゃ、チョンとお印を書けば転置ってことになりますが。
なお、MATTRANにはオプションがあります。ただし、このオプション、実数行列については効果ないようです。入力が複素行列のときだけその効果を発揮し、共役転置(エルミート転置、随伴行列)をとってくれるみたい。
しかし、行列関係のブロック多いな。なかなかパレットを舐めきれませぬ。