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
быстрее, оцените besselj(3, zTable)
в MATLAB при помощи 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
с coder.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
??? The input to coder.const cannot be reduced to a constant.
К успешно постоянному сгибу rand(1,100)
оцените его в MATLAB при помощи feval
.
function yi = fcn(xi) y = coder.const(feval('rand',1,100)); yi = interp1(y,xi); end