exponenta event banner

Использовать 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

См. также

|

Связанные темы