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

coder.getArgTypes

テスト ファイルを実行して、関数の入力引数の型を判断する

説明

types = coder.getArgTypes(test_fcn,fcn) は、test_fcn の実行によって判断される coder.Type オブジェクトの cell 配列を返します。関数 test_fcn は指定されたエントリポイント MATLAB® 関数 fcn を呼び出さなければなりません。fcn への入力引数によって、戻り値の型が構築されます。

struct_of_types = coder.getArgTypes(test_fcn,{fcn_1,...,fcn_n}) は、test_fcn の実行によって判断される coder.Type オブジェクトの cell 配列を含む構造体を返します。関数 test_fcn は、指定されたエントリポイント関数 fcn_1fcn_n を使用して呼び出さなければなりません。これらの関数への入力引数によって、戻り値の型が構築されます。返される構造体は関数ごとに 1 つのフィールドを含んでいます。フィールド名は対応する関数の名前と同じです。

struct_of_types = coder.getArgTypes(test_fcn,fcn, 'uniform',struct_flag) は、エントリポイント関数が 1 つしかない場合でも、構造体を返します。uniform プロパティは、出力配列の型が cell 配列の構造体であるか (true)、cell 配列であるか (false) を定義します。

すべて折りたたむ

関数 my_fun を呼び出すテスト ファイル my_test を実行して、my_fun の入力パラメーターの型を取得します。これらの入力型を使用して、my_fun のコードを生成します。

ローカルの書き込み可能なフォルダーで MATLAB 関数 my_fun を作成し、それをファイル my_fun.m に保存します。

function y = my_fun(u,v) %#codegen
    y = u+v;
end

テスト関数 my_test を作成して、それをファイル my_test.m に保存します。

function y = my_test
    a = single(10);
    b = single(20);
    y = my_fun(a,b);
end

my_fun の入力型を取得するには、テスト関数を実行します。

types = coder.getArgTypes('my_test','my_fun')
types =

  1×2 cell array

    {1×1 coder.PrimitiveType}    {1×1 coder.PrimitiveType}

これらの入力型をサンプル入力として使用して、my_fun の MEX 関数を生成します。

codegen my_fun -args types

現在のフォルダーで、codegen は、single 型の入力を受け入れる MEX 関数 my_fun_mex を生成します。

MEX 関数をテストします。以下に例を示します。

 y = my_fun_mex(single(10),single(20))

関数 my_fun1my_fun2 を呼び出すテスト ファイル my_test2 を実行して、my_fun1my_fun2 の入力パラメーターの型を取得します。これらの入力型を使用して、my_fun1my_fun2 のコードを生成します。

ローカルの書き込み可能なフォルダーで MATLAB 関数 my_fun1 を作成します。それをファイル my_fun1.m に保存します。

function y = my_fun1(u) %#codegen
    y = u;

関数 my_fun2 を作成します。それをファイル my_fun2.m に保存します。

function y = my_fun2(u,v) %#codegen
    y = u + v;

テスト関数を作成します。

function [y1, y2] =  my_test2
    a = 10;
    b = single(20);
    y1 = my_fun1(a);
    y2 = my_fun2(a,b);
end

my_fun1my_fun2 の入力型を取得するには、テスト関数を実行します。

types = coder.getArgTypes('my_test2',{'my_fun1','my_fun2'})
types = 

  struct with fields:

    my_fun1: {[1×1 coder.PrimitiveType]}
    my_fun2: {[1×1 coder.PrimitiveType]  [1×1 coder.PrimitiveType]}

これらの入力型をサンプル入力として使用して、my_fun1my_fun2 の MEX 関数を生成します。

codegen my_fun1 -args types.my_fun1 my_fun2 -args types.my_fun2

現在のフォルダーで、codegen は MEX 関数 my_fun1_mex を生成します。この関数は、double 型の入力を受け入れる 2 つのエントリポイント my_fun1my_fun2 をもちます。

MEX 関数の各エントリ ポイントをテストします。以下に例を示します。

y1 = my_fun1_mex('my_fun1',10)
y2 = my_fun1_mex('my_fun2',10,20)

関数 my_fun を呼び出すテスト ファイル my_test を実行して、my_fun の入力パラメーターの型を取得します。これらの入力型を使用して、my_fun のコードを生成します。

ローカルの書き込み可能なフォルダーで MATLAB 関数 my_fun を作成し、それをファイル my_fun.m に保存します。

function y = my_fun(u,v) %#codegen
    y = u+v;
end

テスト関数 my_test を作成して、それをファイル my_test.m に保存します。

function y = my_test
    a = single(10);
    b = single(20);
    y = my_fun(a,b);
end

my_fun の入力型をフィールドをもつ構造体として取得するには、テスト関数を実行します。

types = coder.getArgTypes('my_test','my_fun','uniform',true)
types =

   struct with fields:

    my_fun: {[1×1 coder.PrimitiveType]  [1×1 coder.PrimitiveType]}

これらの入力型をサンプル入力として使用して、my_fun の MEX 関数を生成します。

codegen my_fun -args types.my_fun

現在のフォルダーで、codegen は、single 型の入力を受け入れる MEX 関数 my_fun_mex を生成します。

MEX 関数をテストします。以下に例を示します。

 y = my_fun_mex(single(10),single(20))

入力引数

すべて折りたたむ

入力型を判断するエントリポイント MATLAB 関数の名前またはハンドル。この関数をローカル関数にすることはできません。書き込み可能なフォルダーの MATLAB パス上に存在しなければなりません。

例: types = coder.getArgTypes('my_test','my_fun');

例: types = coder.getArgTypes(@my_test,@my_fun);

データ型: char | string | function_handle

入力型を判断する複数のエントリポイント MATLAB 関数の名前またはハンドルを指定するコンマ区切りのリスト。これらの関数をローカル関数にすることはできません。書き込み可能なフォルダーの MATLAB パス上に存在しなければなりません。エントリポイント関数の名前は一意でなければなりません。

例: types = coder.getArgTypes('my_test',{'my_fun1','my_fun2'});

例: types = coder.getArgTypes(@my_test,{@my_fun1,@my_fun2});

データ型: char | string | function_handle

テスト関数の名前またはハンドル、あるいはテスト スクリプトの名前。テスト関数またはテスト スクリプトは MATLAB パス上に存在しなければなりません。test_fcn は、指定されたエントリポイント関数を少なくとも 1 つ呼び出さなければなりません。これらの関数への入力引数によって、戻り値の型が構築されます。

例: types = coder.getArgTypes('my_test','my_fun');

データ型: char | string | function_handle

trueエントリポイント関数が 1 つしかない場合であっても、test_fcn の実行によって判断される coder.Type オブジェクトの cell 配列の構造体を返します。
falsetest_fcn の実行によって判断される coder.Type オブジェクトの cell 配列を返します。

例: coder.getArgTypes('my_test','my_fun','uniform',true);

データ型: logical

出力引数

すべて折りたたむ

テスト関数の実行によって判断される coder.Type オブジェクトの cell 配列。

関数 test_fcn の実行によって判断される coder.Type オブジェクトの cell 配列を含む構造体。この構造体は関数ごとに 1 つのフィールドを含んでいます。フィールド名は対応する関数の名前と同じです。

ヒント

  • coder.getArgTypes を使用する前に、MATLAB でテスト関数を実行して、期待する結果が得られることを確認します。

  • テスト関数が、ランタイム環境に適した入力データ型を使用して、指定されたエントリポイント関数を呼び出していることを確認します。テスト関数が指定された関数を呼び出していない場合、coder.getArgTypes はこの関数の入力型を判断できません。

  • coder.getArgTypes は、アプリケーションに理想的な型を計算できない場合があります。たとえば、サイズを無制限にすると適切な場合があるとします。関数 coder.getArgTypes は最大入力に基づく有限のサイズを返します。戻り値の型のサイズを調整するには、coder.resize を使用します。

  • 入力の組み合わせによっては、coder.getArgTypes は、有効な型を生成できない場合があります。たとえば、テスト関数が、最初に single 型の入力をもつエントリポイント関数を呼び出し、その後、double 型の入力をもつエントリポイント関数を呼び出すとします。この場合、両方の呼び出しを表現できる単一の型は存在しないため、coder.getArgTypes はエラーを生成します。

  • MATLAB 関数のコードを生成するときは、-args オプションを使用して戻り値の型を関数 codegen に渡し、戻り値の型をサンプル入力として使用します。

R2012a で導入