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.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
??? 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