Use coder.const with Extrinsic Function Calls

You can use coder.const to fold a function call into a constant in the generated code. The code generator evaluates the function call and replaces it with the result of the evaluation. If you make the function call extrinsic, the function call is evaluated by MATLAB® instead of by the code generator. Use coder.const with an extrinsic function call to:

• Reduce code generation time, especially for constant-folding of computationally intensive expressions.

• Force constant-folding when coder.const is unable to constant-fold.

To make an individual function call extrinsic, use feval. To make all calls to a particular function extrinsic, use coder.extrinsic.

Reduce Code Generation Time by Using coder.const with feval

Consider this function that folds a computationally intensive expression besselj(3, zTable) into a constant:

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

To make code generation of fcn faster, evaluate besselj(3, zTable) in MATLAB by using feval.

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

Force Constant-Folding by Using coder.const with feval

Consider this function that folds the function call rand(1,100) into a constant.

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

Code generation ends with an error.

codegen fcn -args {0} -config:lib -report
??? The input to coder.const cannot be reduced to a constant.

To successfully constant-fold rand(1,100), evaluate it in MATLAB by using feval.

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