exponenta event banner

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

Что такое создание кода?

Генерация кода - это преобразование кода MATLAB ® в код C с помощью Coder™ MATLAB. Для создания кода требуется лицензия MATLAB Coder.

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

Пример см. в разделе Создание кода для lsqlin. Сведения о создании кода в других решателях оптимизации см. в разделах Генерация кода для fmincon, Генерация кода для quadprog, Генерация кода для lsqcurvefit или lsqnonlin или Генерация кода для fsolve.

Требования к созданию кода

  • lsqlin поддерживает генерацию кода с помощью codegen (Кодер MATLAB) или приложение Кодер MATLAB. Для создания кода необходимо иметь лицензию кодера MATLAB.

  • Целевое оборудование должно поддерживать стандартные вычисления с плавающей запятой с двойной точностью. Невозможно создать код для вычислений с одной точностью или фиксированной точкой.

  • Цели создания кода не используют те же библиотеки математических ядер, что и решатели 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).

См. также

| | | (кодер MATLAB)

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