ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

matlabFunctionBlock

MATLAB 関数ブロックへのシンボリック式の変換

説明

matlabFunctionBlock(block,f) は、f を MATLAB® 関数ブロックに変換し、Simulink® モデルで使用できるようにします。ここで、f はシンボリック式、シンボリック関数、またはシンボリックな式か関数のベクトルになります。

block は、作成または変更するブロックの名前を指定します。

matlabFunctionBlock(block,f1,...,fN) は、シンボリック式または関数 f1,...,fNN 個の出力をもつ MATLAB 関数ブロックに変換します。f1,...,fN の各要素は、シンボリック式、シンボリック関数、またはシンボリックな式か関数のベクトルになります。

matlabFunctionBlock(___,Name,Value) は、1 つ以上の Name,Value の引数のペアで指定した追加オプションを使用して、シンボリック式、シンボリック関数またはシンボリック式またはシンボリック関数からなるベクトルを MATLAB 関数ブロックに変換します。前の構文で使用した入力引数の後に Name,Value を指定できます。

すべて折りたたむ

新しいモデルを作成し、シンボリック式を MATLAB 関数ブロックへ変換します。Comments オプションを指定して、ブロック内にコメントを含めます。

新しいモデルを作成して開きます。

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

シンボリック式を作成します。

syms x y z
f = x^2 + y^2 + z^2;

matlabFunctionBlock を使用して、シンボリック式を含むブロック my_block を作成します。matlabFunctionBlock は既存のブロックを上書きします。生成されたブロックをダブルクリックして開き、ブロックを定義する関数を編集します。

matlabFunctionBlock('my_system/my_block',f)
function f = my_block(x,y,z)
%#codegen

%    This function was generated by the Symbolic Math Toolbox version 7.3.
%    01-Jan-2017 00:00:00

f = x.^2+y.^2+z.^2;

コメント Version 1.1 をブロックに含めます。

matlabFunctionBlock('my_system/my_block',f,'Comments','Version: 1.1')
function f = my_block(x,y,z)
...
%Version: 1.1
f = x.^2+y.^2+z.^2;

my_system を保存して閉じます。

save_system('my_system')
close_system('my_system')

新しいモデルを作成し、シンボリック関数を MATLAB 関数ブロックへ変換します。

新しい空のモデルを作成して開きます。

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

シンボリック関数を作成します。

syms x y z
f(x, y, z) = x^2 + y^2 + z^2;

f を MATLAB 関数ブロックに変換します。ブロックをダブルクリックして、関数を確認します。

matlabFunctionBlock('my_system/my_block',f)
function f = my_block(x,y,z)
%#codegen
f = x.^2+y.^2+z.^2;

複数のシンボリック式を、複数の出力端子をもつ MATLAB 関数ブロックに変換します。

新しい空のモデルを作成して開きます。

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

3 つのシンボリック式を作成します。

syms x y z
f = x^2;
g = y^2;
h = z^2;

それらを MATLAB 関数ブロックに変換します。matlabFunctionBlock は 3 つの出力端子をもつブロックを作成します。ブロックをダブルクリックして、関数を確認します。

matlabFunctionBlock('my_system/my_block',f,g,h)
function [f,g,h] = my_block(x,y,z)
%#codegen
f = x.^2;
if nargout > 1
    g = y.^2;
end
if nargout > 2
    h = z.^2;
end

生成された MATLAB 関数ブロックを定義する関数の名前を指定します。

新しい空のモデルを作成して開きます。

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

シンボリック式を作成します。

syms x y z
f = x^2 + y^2 + z^2;

ブロックを作成し、関数名を my_function に設定します。ブロックをダブルクリックして、関数を確認します。

matlabFunctionBlock('my_system/my_block',f,...
                    'FunctionName', 'my_function')
function f = my_function(x,y,z)
%#codegen
f = x.^2+y.^2+z.^2;

シンボリック式を MATLAB 関数ブロックに変換するときに、matlabFunctionBlock は既定でコードを最適化します。この方法は、以降のこのファイルを使用した計算の簡素化および高速化に役立ちます。ただし、一部のシンボリック式やシンボリック関数では、そこからの最適化コードの生成に非常に時間がかかることがあります。コードの最適化を無効にするには、Optimize を使用します。

新しい空のモデルを作成して開きます。

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

シンボリック式を作成します。

syms x
r = x^2*(x^2 + 1);

matlabFunctionBlock を使用して、シンボリック式を含むブロック my_block を作成します。ブロックをダブルクリックし、ブロックを定義する関数を確認します。既定では、matlabFunctionBlock は最適化されたコードを含むファイルを生成します。

matlabFunctionBlock('my_system/my_block',r)
function r = my_block(x)
%#codegen
t2 = x.^2;
r = t2.*(t2+1.0);

Optimize の値を false に設定することによって、コードの最適化を無効にします。

matlabFunctionBlock('my_system/my_block',r,...
                    'Optimize',false)
function r = my_block(x)
%#codegen
r = x.^2.*(x.^2+1.0);

生成されたブロックの入力端子を形成する入力変数の順番を指定します。

新しい空のモデルを作成して開きます。

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

シンボリック式を作成します。

syms x y z
f = x^2 + y^2 + z^2;

この式を MATLAB 関数ブロックに変換します。既定では、matlabFunctionBlock はシンボリック式を変換するときに入力引数をアルファベット順に使用します。

matlabFunctionBlock('my_system/my_block',f)
function f = my_block(x,y,z)
%#codegen
f = x.^2+y.^2+z.^2;

引数 Vars を使用して入力端子の順番を指定します。

matlabFunctionBlock('my_system/my_block',f,...
                    'Vars', [y z x])
function f = my_block(y,z,x)
%#codegen
f = x.^2+y.^2+z.^2;

ブロックを作成するときに、出力変数および対応する端子の名前を変更します。

新しい空のモデルを作成して開きます。

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

シンボリック式を作成します。

syms x y z
f = x^2 + y^2 + z^2;

この式を MATLAB 関数ブロックに変換し、出力変数と出力端子の名前を指定します。ブロックをダブルクリックし、ブロックを定義する関数を確認します。

matlabFunctionBlock('my_system/my_block',f,f + 1,f + 2,...
                    'Outputs', {'name1','name2','name3'})
function [name1,name2,name3] = my_block(x,y,z)
%#codegen
t2 = x.^2;
t3 = y.^2;
t4 = z.^2;
name1 = t2+t3+t4;
if nargout > 1
    name2 = t2+t3+t4+1.0;
end
if nargout > 2
    name3 = t2+t3+t4+2.0;
end

いくつかの名前と値のペアの引数を同時に使用して matlabFunctionBlock を呼び出します。

新しい空のモデルを作成して開きます。

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

シンボリック式を作成します。

syms x y z
f = x^2 + y^2 + z^2;

名前と値のペアの引数を使用して matlabFunctionBlock を呼び出し、関数名、入力端子の順および出力端子の名前を指定します。ブロックをダブルクリックし、ブロックを定義する関数を確認します。

matlabFunctionBlock('my_system/my_block',f,f + 1,f + 2,...
                    'FunctionName', 'my_function','Vars',[y z x],...
                    'Outputs',{'name1','name2','name3'})
function [name1,name2,name3] = my_function(y,z,x)
%#codegen
t2 = x.^2;
t3 = y.^2;
t4 = z.^2;
name1 = t2+t3+t4;
if nargout > 1
    name2 = t2+t3+t4+1.0;
end
if nargout > 2
    name3 = t2+t3+t4+2.0;
end

入力引数

すべて折りたたむ

作成または変更するブロック。文字ベクトルとして指定します。

MATLAB 関数ブロックに変換されるシンボリック入力。シンボリック式、シンボリック関数、シンボリック ベクトルまたはシンボリック行列として指定します。

N 出力の MATLAB 関数ブロックに変換されるシンボリック入力。コンマで区切られたいくつかのシンボリック式、シンボリック関数、シンボリック ベクトルまたはシンボリック行列として指定します。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: matlabFunctionBlock('my_system/my_block',f,'FunctionName','myfun')

ファイル ヘッダーに含めるコメント。文字ベクトル、文字ベクトルの cell 配列、または string ベクトルとして指定します。

関数名。文字ベクトルとして指定します。既定では、matlabFunction(block,…)block を関数名として使用します。

生成された関数の関数名の指定を参照してください。

コードの最適化を回避するフラグ。false または true で指定します。

ファイルへの書き込みの際に、matlabFunctionBlockt0t1 といった名前の中間変数を使用してコードを最適化します。

コードの最適化の無効化を参照してください。

入力変数と生成されたブロックの対応する入力端子の順番。文字ベクトル、シンボリック変数から成るベクトル、または文字ベクトル、シンボリック変数またはシンボリック変数から成るベクトルの 1 次元 cell 配列として指定します。

指定された入力端子の数は、f 内の自由変数の数以上でなければなりません。Vars で指定される入力端子および Outputs で指定される出力端子には、同じ名前を使用しないでください。

既定では、シンボリック式を変換するときの順序は、アルファベット順です。シンボリック関数を変換するときは、入力引数は他の変数の前に表示され、その他の変数はアルファベット順に並べ替えられます。

生成されたブロックの入力端子の指定を参照してください。

出力端子名。文字ベクトルの 1 次元 cell 配列として指定します。出力端子名を指定しない場合、matlabFunctionBlock では語 out とそれに続く出力端子番号から構成される名前 (out3 など) を使用します。

Vars で指定される入力端子および Outputs で指定される出力端子には、同じ名前を使用しないでください。出力端子の指定を参照してください。

R2009a で導入