Main Content

外部関数呼び出しでの coder.const の使用

coder.const を使用して、関数呼び出しを生成コードの定数に畳み込むことができます。コード ジェネレーターは関数呼び出しを評価し、その評価の結果で置き換えます。関数呼び出しを外部化する場合、関数呼び出しはコード ジェネレーターではなく MATLAB® によって評価されます。外部関数呼び出しで coder.const を使用することで、以下を実行できます。

  • コード生成時間を削減する (特に、計算量の多い式の定数畳み込みの場合)。

  • coder.const が定数畳み込みを実行できない場合に、定数畳み込みを強制的に実行する。

個々の関数呼び出しを外部化するには、feval を使用します。特定の関数の呼び出しをすべて外部化するには、coder.extrinsic を使用します。

coder.constfeval の使用によるコード生成時間の削減

計算量の多い式 besselj(3, zTable) を定数に畳み込む以下の関数について考えます。

function j = fcn(z)
zTable = coder.const(0:0.01:100);
jTable = coder.const(besselj(3,zTable));
j = interp1(zTable,jTable,z);
end

fcn のコード生成を迅速化するには、feval を使用して MATLAB で besselj(3, zTable) を評価します。

function j = fcn(z)
zTable = coder.const(0:0.01:100);
jTable = coder.const(feval('besselj',3,zTable));
j = interp1(zTable,jTable,z);
end

coder.constfeval の使用による定数畳み込みの強制

関数呼び出し rand(1,100) を定数に畳み込む以下の関数について考えます。

function yi = fcn(xi)
y = coder.const(rand(1,100));
yi = interp1(y,xi);
end

コード生成はエラーで終了します。

codegen fcn -args {0} -config:lib -report
???coder.const への入力は定数に省略できません。

rand(1,100) の定数畳み込込みを適切に実行するには、feval を使用して MATLAB で評価します。

function yi = fcn(xi)
y = coder.const(feval('rand',1,100));
yi = interp1(y,xi);
end

参考

|

関連するトピック