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