Генерация кода - это преобразование кода MATLAB ® в код C с помощью Coder™ MATLAB. Для создания кода требуется лицензия MATLAB Coder.
Как правило, генерация кода используется для развертывания кода на оборудовании, на котором не работает MATLAB. Например, можно развернуть код на роботе, используя lsqnonlin для оптимизации движения или планирования.
Пример см. в разделе Создание кода для lsqcurvefit или lsqnonlin. Сведения о создании кода в других решателях оптимизации см. в разделах Генерация кода для fmincon, Генерация кода для quadprog, Генерация кода для lsqlin или Генерация кода для fsolve.
lsqcurvefit и lsqnonlin поддержка генерации кода с помощью codegen (Кодер MATLAB) или приложение Кодер MATLAB. Для создания кода необходимо иметь лицензию кодера MATLAB.
Целевое оборудование должно поддерживать стандартные вычисления с плавающей запятой с двойной точностью. Невозможно создать код для вычислений с одной точностью или фиксированной точкой.
Цели создания кода не используют те же библиотеки математических ядер, что и решатели MATLAB. Поэтому решения для генерации кода могут отличаться от решений для решающих устройств, особенно для плохо оговоренных задач.
Весь код для генерации должен быть кодом MATLAB. В частности, нельзя использовать пользовательскую функцию черного ящика в качестве целевой функции для lsqcurvefit или lsqnonlin. Вы можете использовать coder.ceval для вычисления пользовательской функции, кодированной в C или C++. Однако пользовательская функция должна вызываться в функции MATLAB.
lsqcurvefit и lsqnonlin не поддерживать problem аргумент для создания кода.
[x,fval] = lsqnonlin(problem) % Not supportedНеобходимо указать целевую функцию с помощью дескрипторов функций, а не строк или имен символов.
x = lsqnonlin(@fun,x0,lb,ub,options) % Supported % Not supported: lsqnonlin('fun',...) or lsqnonlin("fun",...)
Все входные матрицы lb и ub должно быть полным, а не разреженным. Можно преобразовать разреженные матрицы в полные с помощью full функция.
lb и ub аргументы должны иметь то же количество записей, что и x0 аргумент или должен быть пустым [].
Для оптимизации кода с использованием встраиваемых процессоров также требуется лицензия Embedded Coder ®.
Необходимо включить параметры для lsqcurvefit или lsqnonlin и укажите их с помощью optimoptions. Опции должны включать Algorithm опция, значение 'levenberg-marquardt'.
options = optimoptions('lsqnonlin','Algorithm','levenberg-marquardt'); [x,fval,exitflag] = lsqnonlin(fun,x0,lb,ub,options);
Создание кода поддерживает следующие опции:
Algorithm - Должно быть 'levenberg-marquardt'
FiniteDifferenceStepSize
FiniteDifferenceType
FunctionTolerance
MaxFunctionEvaluations
MaxIterations
SpecifyObjectiveGradient
StepTolerance
TypicalX
В созданном коде ограничена проверка параметров на наличие ошибок. Рекомендуемый способ обновления опции - использовать optimoptions, не точечная нотация.
opts = optimoptions('lsqnonlin','Algorithm','levenberg-marquardt'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Не загружать параметры из файла. Это может привести к сбою при создании кода. Вместо этого создайте параметры в коде.
Обычно при указании неподдерживаемого параметра этот параметр игнорируется при создании кода. Однако если функция графика или функция вывода задаются с помощью точечной нотации, создание кода может привести к ошибке. Для обеспечения надежности укажите только поддерживаемые параметры.
Поскольку функции вывода и функции печати не поддерживаются, решатели не возвращают флаг выхода -1.
По умолчанию созданный код для использования вне среды MATLAB использует библиотеки линейной алгебры, которые не являются многопоточными. Поэтому этот код может работать значительно медленнее, чем код в среде MATLAB.
Если целевое оборудование имеет несколько ядер, можно повысить производительность с помощью пользовательских многопоточных библиотек LAPACK и BLAS. Чтобы включить эти библиотеки в созданный код, см. раздел Ускорение линейной алгебры в сгенерированном автономном коде с помощью вызовов LAPACK (MATLAB Coder).
lsqcurvefit | lsqnonlin | optimoptions | codegen (кодер MATLAB)