外部関数呼び出しでの coder.const の使用
coder.const を使用して、関数呼び出しを生成コードの定数に畳み込むことができます。コード ジェネレーターは関数呼び出しを評価し、その評価の結果で置き換えます。関数呼び出しを外部化する場合、関数呼び出しはコード ジェネレーターではなく MATLAB® によって評価されます。外部関数呼び出しで coder.const を使用することで、以下を実行できます。
コード生成時間を削減する (特に、計算量の多い式の定数畳み込みの場合)。
coder.constが定数畳み込みを実行できない場合に、定数畳み込みを強制的に実行する。
個々の関数呼び出しを外部化するには、feval を使用します。特定の関数の呼び出しをすべて外部化するには、coder.extrinsic を使用します。
coder.const と feval の使用によるコード生成時間の削減
計算量の多い式 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.const と feval の使用による定数畳み込みの強制
関数呼び出し 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
式を定数に省略できません。
rand(1,100) の定数畳み込込みを適切に実行するには、feval を使用して MATLAB で評価します。
function yi = fcn(xi) y = coder.const(feval('rand',1,100)); yi = interp1(y,xi); end