MATLAB Coder アプリを使用したエントリポイントの入力の型の定義
MATLAB® Coder™ アプリを使用して、MATLAB エントリポイント関数の入力引数の型を定義できます。アプリを使用して、入力の型の定義の表示、サイズ制約の設定、出力引数の数の制御、定数の入力変数の定義も可能です。代わりに、コマンド ラインまたは MATLAB コードで -args
を指定して codegen
コマンドを使用するか、arguments
ブロックまたは assert
ステートメントを使用して入力の型を指定することもできます。入力の型のこれらの指定方法の概要については、エントリポイント関数の入力の型の指定を参照してください。
入力の型の定義
MATLAB Coder アプリで入力の型を定義するには、MATLAB Coder プロジェクトに 1 つ以上のエントリ ポイントを追加します。エントリ ポイントを追加すると、エントリポイントの入力が赤で強調表示されます。これは、入力の型が未定義であることを示します。
エントリポイント関数の入力の詳細を表示するには、関数シグネチャの左にある矢印 をクリックして [エントリ ポイント] ペインを展開します。入力の型が完全に定義されていない場合、展開ビューにエラーが表示されます。
たとえば、次のイメージは、エントリポイント関数 foo
のシグネチャを示しています。この関数には、3 つの未定義の入力引数 a
、b
、c
と 3 つの出力引数 x
、y
、z
があります。
入力の型の自動定義
入力の型を自動で定義するには、次のいずれかの方法を使用します。
テスト ベンチを使用します。エントリポイント関数を実行するスクリプト ("テスト ベンチ" とも呼ばれる) を記述すると、そのスクリプトを使用して入力の型を自動で定義できます。[入力の型を自動的に定義] パラメーターを
[スクリプトの使い方]
に設定し、テスト ベンチの名前を入力します。入力の型がアプリで自動的に定義されます。コマンド ラインでエントリポイント関数を呼び出します。[入力の型を自動的に定義] パラメーターを
[コマンド ウィンドウの使い方]
に設定します。[開始] をクリックし、コマンド ラインでエントリポイント関数を呼び出します。
入力の型の手動定義
入力の型を手動で定義するには、次のいずれかの方法を使用します。
変数のクラス、サイズ、およびその他のプロパティを手動で定義します。[エントリ ポイント] ペインの各入力変数について、[クリックしてデータ型を定義してください] をクリックします。変数クラス定義をクリックし、クラスの名前を選択または入力します。変数のサイズを編集するには、各次元をクリックしてサイズを入力します。ツールヒントの [サイズ] セクションで、各次元を固定サイズ、可変サイズ、または制限なしとして定義できます。ほとんどのデータ型については、サイズの右にある列をポイントして [型のプロパティを編集] をクリックすると追加のプロパティを設定できます。構造体、ユーザー作成クラス、cell 配列などの集約型の場合は、すべてのフィールド、プロパティ、および要素の型も定義する必要があります。
値の例を使用して入力の型を定義します。変数のサイズの右側をポイントし、[モードおよびアクション] ボタン をクリックします。[アクション] セクションで [コード例から型を派生] をクリックし、目的の型の例を返す MATLAB コードを入力します。あるいは、変数クラス定義をクリックし、[例の値から派生] を選択します。その後、目的の型の例を返す MATLAB コードを入力します。
関数の引数の検証または前提条件を使用した入力の型の定義
エントリポイント関数で arguments
ブロックまたは assert
ステートメントを使用して入力の型を定義している場合、既定では、それらの定義がアプリで使用されます。それらの定義をオーバーライドするには、[関数定義から入力の型を取得] チェック ボックスをオフにします。たとえば、次のイメージでは、エントリポイント関数 bar
の arguments
ブロックまたは assert
ステートメントを使用して、入力引数 d
が 10 行 10 列の double の配列としてアプリで定義されています。
複数の入力変数の型の定義
すべてのエントリポイント関数または特定のエントリポイント関数について、未定義の入力変数を double のスカラーまたは single のスカラーのいずれかとして定義するようにアプリに指示できます。
この割り当てをすべてのエントリポイント関数の未定義の入力変数に対して実行するには、[エントリ ポイント] ペインの右側にある [アクション] ボタン をクリックします。[未定義の型を次のように定義] をクリックし、[double のスカラー] または [single のスカラー] をクリックします。
この割り当てを特定のエントリポイント関数に対して実行するには、エントリポイント関数のシグネチャの右にある [アクション] ボタン をクリックします。[未定義の型を次のように定義] をクリックし、[double のスカラー] または [single のスカラー] をクリックします。
入力の型の定義の表示
[エントリ ポイント] ペインを展開して、エントリポイントの入力変数の定義を表示できます。エントリポイントの入力変数の名前が表示され、変数の型が定義されていれば、変数のクラス、サイズ、およびその他の詳細が表示されます。構造体、cell 配列、クラスなどの複合型の場合は、各変数の表示を展開して、個々のフィールド、要素、プロパティの名前、クラス、およびその他の詳細を確認できます。
たとえば、次のイメージは、エントリポイント関数 foo
の [エントリ ポイント] ペインを示しています。関数 foo
には 3 つの入力引数があり、1 つの出力を返します。
入力引数
a
は 1 行 1 列の固定サイズの構造体配列です。構造体には 3 つのフィールドがあります。フィールドf1
は制限なしの string、フィールドf2
は 1 行 12 列の可変長の文字ベクトル、フィールドf3
は固定サイズの double のスカラーです。入力引数
b
は 10 行 5 列の可変サイズの double の配列です。入力引数
c
は 2 行 3 列の同種 cell 配列です。cell 配列の各要素に double のスカラーが格納されます。
次の表に、[エントリ ポイント] ペインに表示される一部のシンボルの定義を示します。
インジケーター | 説明 |
---|---|
変数にフィールド、要素、プロパティがあり、矢印をクリックすることで確認できます。 | |
{:} | 同種 cell 配列 (すべての要素のプロパティは同じになります)。 |
{n,m} | 異種混合 cell 配列の要素 {n,m} 。 |
:n | 上限が n の可変サイズの次元。 |
:Inf | 制限なしの可変サイズの次元。 |
サイズ制約の設定
MATLAB Coder プロジェクト内のエントリポイントの入力引数について、一定のサイズのしきい値を満たす場合に、それらの次元を可変サイズまたは制限なしにすることができます。これらの制約は、既定では手動で定義する変数にのみ適用されますが、自動で定義する入力変数に適用するように選択することもできます。
可変サイズの制約を設定するには、[エントリ ポイント] ペインの右側にある [アクション] ボタン をクリックし、[サイズの制約] を選択します。[入力の型のサイズ制約の設定] ダイアログ ボックスで制約を選択します。
次元を上限のある可変サイズにするには、[サイズが少なくとも次の場合に次元を可変サイズにする] チェック ボックスをオンにし、しきい値を指定します。入力の型の次元のサイズがしきい値以上の場合、アプリはこの次元を上限が次元のサイズと等しい可変サイズにします。
次元を制限なしにするには、[サイズが少なくとも次の場合に次元を無制限にする] チェック ボックスをオンにし、しきい値を指定します。入力の次元のサイズがしきい値以上の場合、アプリはこの次元を無制限にします。
選択した制約を自動定義と手動定義の両方の入力の型に適用するには、[入力の型を自動的に定義するときにサイズ制約を適用] チェック ボックスをオンにします。
現在の型の定義にルールを適用するには、[OK] をクリックします。型の定義を手動で変更する場合、ルールを再度適用しない限り、新しい定義にルールは反映されません。
定数の入力変数の定義
入力変数を定数として定義できます。定数値を生成するには、MATLAB コードを使用するか、既存の MAT ファイルから定数を読み込みます。[エントリ ポイント] ペインで変数をポイントし、[モードおよびアクション] ボタン をクリックします。[モード] セクションで [定数の使用] を選択します。
MATLAB コマンドを使用して値を生成するには、[MATLAB コードの使用] を選択します。目的の値を出力する MATLAB コマンドを入力します。
MAT ファイルから値を読み込むには、[MAT ファイルからの読み込み] を選択します。MAT ファイルの名前を選択または入力し、値を使用する変数の名前を選択します。
コード ジェネレーターでは、コード生成時に定数値を評価して定数の入力変数を定義します。そのため、コード生成後に MAT ファイルでソース変数の値を変更した場合や MATLAB コマンドの結果が変わった場合、生成コード内の定数の変数の値は更新されません。
たとえば、次のイメージは、3 つの定数の入力引数をもつ関数 foo
の [エントリ ポイント] ペインを示しています。
入力引数
a
は MATLAB コマンド5
の値になります。入力引数
b
はファイルmyWorkspace.mat
の変数myVar
の値になります。入力引数
c
は MATLAB コマンドbar(f)*g
の値になります。
エントリポイント関数の出力の型をエントリポイント関数の入力の型として使用
複数のエントリポイント関数のコードを生成する場合、1 つのエントリポイント関数の出力を別のエントリポイント関数への入力として使用できます。
別のエントリポイント関数の出力を使用して定義する変数の右にある [モードおよびアクション] ボタン をクリックします。[モード] セクションで [出力の使用] を選択します。入力値を出力する関数の名前を [関数名] ボックスに入力し、出力変数の名前を [出力名] ボックスに入力します。あるいは、[関数名] ボックスと [出力名] ボックスを展開し、関数と出力変数を選択します。
入力値の型を出力する coder.OutputType
の呼び出しによってクラス定義が取り込まれます。入力としてのエントリポイント関数出力の受け渡しを参照してください。
たとえば、次のイメージは、エントリポイント関数 foo
と bar
の [エントリ ポイント] ペインを示しています。関数 foo
の入力引数 a
は、関数 bar
の最初の出力と同じ型になります。
参考
MATLAB Coder | arguments
| assert
| codegen
| coder.OutputType