本記事ではMATLAB/Simlinkのブロックにて行列を定義した際の行列(Matrix)の連結と要素の抽出方法について解説します。
要素の抽出は、行列を使って連立方程式を立てた際に一部の式を取り出して計算したい場合などに有用です。
ブロックを使った行列の配置・計算方法について分からないかたは以下の記事を参考にしてみてください。
行列の連結
MATLAB/Simulinkのブロック上で行列を連結するには、[Matrix Concatenate]ブロックを使用します。
[Simulink ライブラリ ブラウザー]を開き、[Math Operations]の[Matrix Concatenate]を選択します。
以下の2つの行列を縦方向に連結してみます。
Constantブロック、Matrix Concatenate ブロックとDisplayブロックを下図のように接続します。
次に、Matrix Concatenate ブロックをダブルクリックし、[ブロックパラメーター]ウィンドウを開き、[連結の次元]に 1 を入力します。
[実行]ボタンを押下すると、以下のように2つの行列が縦に連結されます。
[ブロックパラメーター]ウィンドウの[連結の次元]で 2 を入力すると横に連結されるよ!
行列の要素の抽出
次に行列の要素を抽出する方法について見ていきましょう。
要素の抽出は専用のブロックはないため、[User-Defined Functions]の[MATLAB Function]ブロックを使用します。
次に、対象の行列、抜き出す要素の行(rows)と列(columns)を入力変数(引数)とし、元の行列から要素を抜き出した行列を出力変数(戻り値)とする関数を定義します。
[モデル ブラウザー]上にMATLAB Functionブロックをドラック&ドロップし、ダブルクリックして[エディター]を表示させ、以下のようにコードを書き換えます。function y = fcn(u, rows, columns)
y = u(rows, columns)
Constantブロック、MATLAB FunctionブロックとDisplayブロックを下図のように接続し、[実行]ボタンを押下すると下図のようになります。
上で記載したコード(関数)は、rowsで指定した行(本例では1~3行)とcolumnsで指定した列(本例では2, 3, 5列)がクロスした箇所の要素を出力するよ!
まとめ
本記事ではMATLAB/Simulinkにて行列を連結する方法や要素を抽出する方法について解説しました。
MATLAB/Simulinkは都度必要なことを覚えていってもよいですが、体系的に学ぶには書籍での学習が効率的です。以下の本は網羅的に書かれているので手元においておく辞書としても使うことができます。
また、本ブログではMATLAB/Simulinkに関連する記事をどんどん追加していく予定ですので、今後も読んで役に立てて頂ければ幸いです。