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