Генерация кода в линейных методах наименьших квадратов: фон

Что такое генерация кода?

Генерация кода является преобразованием MATLAB® код для Кода С с использованием MATLAB Coder™. Для генерации кода требуется лицензия MATLAB Coder.

Как правило, генерация кода используется для развертывания кода на оборудовании, которое не работает под управлением MATLAB. Например, можно развернуть код на роботе, используя lsqlin для оптимизации движения или планирования.

Для получения примера смотрите Сгенерировать код для lsqlin. Для генерации кода в других решателях оптимизации смотрите Generate Code for fmincon, Generate Code for quadprog, Generate Code for lsqcurvefit или lsqnonlin или Generate Code for 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 функция.

  • The 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).

См. также

| | | (MATLAB CODER)

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте