Генерация кода является преобразованием MATLAB® код к коду С с помощью MATLAB Coder™. Генерация кода требует лицензии MATLAB Coder.
Как правило, вы используете генерацию кода, чтобы развернуть код по оборудованию, которое не запускает MATLAB. Например, можно развернуть код по роботу, с помощью lsqlin
для оптимизации перемещения или планирования.
Для примера смотрите, Генерируют Код для lsqlin. Для генерации кода в других решателях оптимизации смотрите, Генерируют Код для fmincon, Генерируют Код для quadprog, Генерируют Код для lsqcurvefit или lsqnonlin, или Генерируют Код для fsolve.
lsqlin
генерация кода поддержек, использующая любого codegen
(MATLAB Coder) функция или приложение MATLAB Coder. У вас должна быть лицензия MATLAB Coder, чтобы сгенерировать код.
Целевой компьютер должен поддержать стандартные расчеты с плавающей точкой с двойной точностью. Вы не можете сгенерировать код для расчетов или фиксированной точки с одинарной точностью.
Цели генерации кода не пользуются теми же математическими библиотеками ядра как решатели MATLAB. Поэтому решения генерации кода могут варьироваться из решений для решателя, особенно для плохо обусловленных проблем.
При решении неограниченных и недоопределенных задач в MATLAB, lsqlin
вызовы mldivide
, который возвращает основное решение. В генерации кода возвращенное решение имеет минимальную норму, которая обычно отличается.
lsqlin
не поддерживает problem
аргумент для генерации кода.
[x,fval] = lsqlin(problem) % Not supported
Все lsqlin
введите матрицы, такие как A
, Aeq
, lb
, и ub
должно быть полным, не разреженным. Можно преобразовать разреженные матрицы в полный при помощи full
функция.
lb
и ub
аргументы должны иметь то же количество записей как количество столбцов в C
или должен быть пустой []
.
Для усовершенствованной оптимизации кода, включающей встраиваемые процессоры, вам также нужен Embedded Coder® лицензия.
Необходимо включать опции для lsqlin
и задайте их использование optimoptions
. Опции должны включать Algorithm
опция, набор к 'active-set'
.
options = optimoptions('lsqlin','Algorithm','active-set'); [x,fval,exitflag] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options);
Генерация кода поддерживает эти опции:
Algorithm
— Должен быть 'active-set'
ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
Сгенерированный код ограничил проверку ошибок на опции. Рекомендуемый способ обновить опцию состоит в том, чтобы использовать optimoptions
, не запись через точку.
opts = optimoptions('lsqlin','Algorithm','active-set'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Не загружайте опции из файла. Выполнение так может заставить генерацию кода перестать работать. Вместо этого создайте опции в своем коде.
Если вы задаете опцию, которая не поддерживается, опция обычно игнорируется во время генерации кода. Для надежных результатов задайте только поддерживаемые опции.
По умолчанию сгенерированный код для использования вне среды MATLAB пользуется библиотеками линейной алгебры, которые не многопоточны. Поэтому этот код может запуститься значительно медленнее, чем код в среде MATLAB.
Если ваш целевой компьютер имеет несколько ядер, можно достигнуть лучшей эффективности при помощи пользовательских многопоточных библиотек LAPACK и BLAS. Чтобы включить эти библиотеки в ваш сгенерированный код, смотрите, Ускоряют Линейную алгебру в Сгенерированном Автономном Коде при помощи Вызовов LAPACK (MATLAB Coder).
codegen
(MATLAB Coder) | optimoptions
| lsqlin
| quadprog