このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
matlabFunctionBlock
MATLAB Function ブロックへのシンボリック式の変換
構文
説明
matlabFunctionBlock(___,
は、前の構文の入力引数の組み合わせのいずれかとともに 1 つ以上の名前と値の引数で指定された追加オプションを使用して、シンボリック式、シンボリック関数、またはシンボリック式か関数のベクトルを MATLAB Function ブロックに変換します。Name,Value
)
例
MATLAB Function ブロックへのシンボリック式の変換
新しいモデルを作成し、シンボリック式を MATLAB Function ブロックへ変換します。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 Function ブロックへのシンボリック関数の変換
新しいモデルを作成し、シンボリック関数を MATLAB Function ブロックへ変換します。
新しい空のモデルを作成して開きます。
new_system('my_system') open_system('my_system')
シンボリック関数を作成します。
syms x y z f(x,y,z) = x^2 + y^2 + z^2;
f
を MATLAB Function ブロックに変換します。ブロックをダブルクリックして、関数を確認します。
matlabFunctionBlock('my_system/my_block',f)
function f = my_block(x,y,z) %#codegen f = x.^2+y.^2+z.^2;
出力が複数のブロックの作成
複数のシンボリック式を、複数の出力端子をもつ MATLAB Function ブロックに変換します。
新しい空のモデルを作成して開きます。
new_system('my_system') open_system('my_system')
3 つのシンボリック式を作成します。
syms x y z f = x^2; g = y^2; h = z^2;
それらを MATLAB Function ブロックに変換します。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 Function ブロックを定義する関数の名前を指定します。
新しい空のモデルを作成して開きます。
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 Function ブロックに変換するときに、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 Function ブロックに変換します。既定では、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')
シンボリック変数 u
およびシンボリック変数 x
の 3 行 1 列のベクトルを作成します。次のコマンドは、MATLAB ワークスペースにシンボリック変数 x1
、x2
、x3
も自動的に生成します。
syms u syms x [3 1] whos
Name Size Bytes Class Attributes u 1x1 8 sym x 3x1 8 sym x1 1x1 8 sym x2 1x1 8 sym x3 1x1 8 sym
シンボリック変数 u
および x
を使用するシンボリック式を作成します。
A = [0 1 0; 0 0 1; -1 -1 -2]; b = [0; 0; 3]; xdot = A*x+b*u
xdot = x2 x3 3*u - x1 - x2 - 2*x3
この式 xdot
を MATLAB Function ブロックに変換します。xdot
の要素には変数 u
と、自動生成された変数 x1
、x2
、x3
が含まれているため、u
と x
を使用する代わりに、これらの変数に関して Vars
引数を明示的に指定します。
matlabFunctionBlock('my_system/my_block',xdot,'Vars',{u,x1,x2,x3})
function xdot = my_block(u,x1,x2,x3) %#codegen xdot = [x2;x3;u.*3.0-x1-x2-x3.*2.0];
出力端子の指定
ブロックを作成するときに、出力変数および対応する端子の名前を変更します。
新しい空のモデルを作成して開きます。
new_system('my_system') open_system('my_system')
シンボリック式を作成します。
syms x y z f = x^2 + y^2 + z^2;
この式を MATLAB Function ブロックに変換し、出力変数と出力端子の名前を指定します。ブロックをダブルクリックし、ブロックを定義する関数を確認します。
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 Function ブロックで複素数入力を指定します。
新しい空のモデルを作成して開きます。
new_system('my_system') open_system('my_system')
入力の平方根を求めるシンボリック関数を作成します。
syms x
f = sqrt(x);
f
を MATLAB Function ブロックに変換します。
matlabFunctionBlock('my_system/my_block',f,'FunctionName','sqrt_block')
平方根関数は入力 x
が負の場合に複素数の結果を生成するため、生成されたブロックで複素数の入力を手動で指定する必要があります。そうしないと、Function ブロックを負の入力で実行するときにエラーが発生する可能性があります。
ブロックをダブルクリックし、ブロックを定義する関数を確認します。行 x = complex(x);
を追加し、複素数の入力を指定します。R2023a 以降では、matlabFunctionBlock
によって提供されるこの行をコメント解除できます。生成された関数ブロックは、複素数の入力を受け入れ、複素数出力を返すようになりました。
function f = sqrt_block(x) %#codegen x = complex(x); % required to enforce complex operations on x f = sqrt(x); end
別の方法として、[Simulink]、[Math Operations] ライブラリから Complex to Real-Imag (Simulink) ブロックと Real-Imag to Complex (Simulink) ブロックを挿入することもできます。これらのブロックを追加して、x
に入力される入力信号を複素信号に変換します。
入力引数
block
— 作成または変更するブロック
文字ベクトル
作成または変更するブロック。文字ベクトルとして指定します。
f
— MATLAB Function ブロックに変換されるシンボリック入力
シンボリック式 | シンボリック関数 | シンボリック ベクトル | シンボリック行列
MATLAB Function ブロックに変換されるシンボリック入力。シンボリック式、シンボリック関数、シンボリック ベクトルまたはシンボリック行列として指定します。
f1,...,fN
— N
個の出力の MATLAB Function ブロックに変換されるシンボリック入力
複数のシンボリック式 | 複数のシンボリック関数 | 複数のシンボリック ベクトル | 複数のシンボリック行列
N
個の出力の MATLAB Function ブロックに変換されるシンボリック入力。コンマで区切られた複数のシンボリック式、複数のシンボリック関数、複数のシンボリック ベクトルまたは複数のシンボリック行列として指定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は関係ありません。
R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name
を引用符で囲みます。
例: matlabFunctionBlock('my_system/my_block',f,'FunctionName','myfun')
Comments
— ファイル ヘッダーに含めるコメント
文字ベクトル | 文字ベクトルの cell 配列 | string ベクトル
ファイル ヘッダーに含めるコメント。文字ベクトル、文字ベクトルの cell 配列、または string ベクトルとして指定します。
FunctionName
— 関数名
入力引数 block
と一致 (既定値) | 文字ベクトル
関数名。文字ベクトルとして指定します。既定では、matlabFunction(block,…)
は block
を関数名として使用します。
生成された関数の関数名の指定を参照してください。
Optimize
— コードの最適化のフラグ
true
(既定値) | false
コードの最適化のフラグ。true
または false
として指定します。
ファイルへの書き込みの際に、matlabFunctionBlock
は t0
、t1
といった名前の中間変数を使用してコードを最適化します。
コードの最適化の無効化を参照してください。
Vars
— 入力変数と生成されたブロックの対応する入力端子の順番
文字ベクトル | シンボリック変数のベクトル | 文字ベクトルの 1 次元 cell 配列 | シンボリック変数の 1 次元 cell 配列 | シンボリック変数からなるベクトルの 1 次元 cell 配列
入力変数と生成されたブロックの対応する入力端子の順番。文字ベクトル、シンボリック変数から成るベクトル、または文字ベクトル、シンボリック変数またはシンボリック変数から成るベクトルの 1 次元 cell 配列として指定します。
指定された入力端子の数は、f
内の自由変数の数以上でなければなりません。Vars
で指定される入力端子および Outputs
で指定される出力端子には、同じ名前を使用しないでください。
既定では、シンボリック式を変換するときの順序は、アルファベット順です。シンボリック関数を変換するときは、入力引数は他の変数の前に配置され、その他の変数はアルファベット順に並べ替えられます。
生成されたブロックの入力端子の指定を参照してください。
Outputs
— 出力端子名
out
とそれに続く出力端子番号 (既定値) | 文字ベクトルの 1 次元 cell 配列
出力端子名。文字ベクトルの 1 次元 cell 配列として指定します。出力端子名を指定しない場合、matlabFunctionBlock
では語 out
とそれに続く出力端子番号から構成される名前 (out3
など) を使用します。
Vars
で指定される入力端子および Outputs
で指定される出力端子には、同じ名前を使用しないでください。出力端子の指定を参照してください。
制限
simplify
やsolve
といった、double
データ型を扱い、対応する MATLAB 関数をもたないいくつかのシンボリック関数は、生成された MATLAB Function ブロックにシンボリック関数として保持されます。これらの関数で構成される変換後の関数ブロックは、Simulink モデルで使用できません。double
データ型を使用する独自の関数を作成して、これらのシンボリック関数を置き換える必要があります。Simulink モデルで使用できないシンボリック関数の詳細については、MathWorks テクニカルサポートにお問い合わせください。
バージョン履歴
R2009a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)