Main Content

シンボリック式からの MATLAB Function ブロックの生成

matlabFunctionBlock を使用すると、MATLAB® Function ブロックを生成できます。生成されたブロックは Simulink® モデルで使用できます。これは、シミュレーションを実行するコンピューターに Symbolic Math Toolbox™ のライセンスがあるかどうかを問いません。

ブロックの生成と編集

r = sqrt(x^2 + y^2) というシンボリック式を含むモデルを作成したいとします。シンボリック式を MATLAB Function ブロックに変換する前に、事前に空のモデルを作成するか、または既存のモデルを開いておきます。

new_system('my_system')
open_system('my_system')

シンボリック式を作成し、それを matlabFunctionBlock コマンドに渡します。ブロック名も指定します。

syms x y
r = sqrt(x^2 + y^2);
matlabFunctionBlock('my_system/my_block', r)

既存ブロックの名前を使用する場合、matlabFunctionBlock コマンドは既存ブロックの定義を変換されたシンボリック式に置き換えます。

生成されたブロックを開いて編集できます。ブロックをダブルクリックして開きます。

function r = my_block(x,y)
%#codegen

% x = complex(x);  % required to enforce complex operations on x
% y = complex(y);  % required to enforce complex operations on y
r = sqrt(x.^2+y.^2);

ヒント

一部のシンボリック式は MATLAB 関数で表すことができません。matlabFunctionBlock はこれらのシンボリック式を変換できませんが、警告を表示します。これらの式によって未定義の関数呼び出しが行われる可能性があるため、常に変換結果をチェックし、結果として得られたブロックを含むシミュレーションを実行して結果を確認します。

入力端子の順序の制御

matlabFunctionBlock は、シンボリック式から入力変数および対応する入力端子をアルファベット順に生成します。入力変数の順序を変更するには、vars オプションを使用します。

syms x y
mu = sym('mu');
dydt = -x - mu*y*(x^2 - 1);
matlabFunctionBlock('my_system/my_block', dydt,'vars', [y mu x])

出力端子名の指定

既定の設定では、matlabFunctionBlock が生成する出力端子名は out に出力端子番号を付けたもので、たとえば out3 のようになります。output オプションを使うと、出力端子のカスタム名を使用できます。

syms x y
mu = sym('mu');
dydt = -x - mu*y*(x^2 - 1);
matlabFunctionBlock('my_system/my_block', dydt,'outputs',{'name1'})