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