外部関数呼び出しでの 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
???coder.const への入力は定数に省略できません。
rand(1,100)
の定数畳み込込みを適切に実行するには、feval
を使用して MATLAB で評価します。
function yi = fcn(xi) y = coder.const(feval('rand',1,100)); yi = interp1(y,xi); end