主要内容

代码生成粉刺背景

什么是代码生成?

代码是MATLAB的转换®使用代码的代码Matlab Coder™。代码需要一个Matlab编码器执照。

通常,您使用代码生成将代码部署到没有运行MATLAB的硬件上。例如,您可以使用粉刺优化运动或计划。

例如,请参见为fmincon生成代码。对于其他优化求解器中的代码生成,请参阅为fsolve生成代码为QuadProg生成代码, 或者为lsqcurvefit或lsqnonlin生成代码

代码生成的需求

  • 粉刺万博1manbetx支持使用代码生成使用Codegen.(MATLAB编码器)函数或Matlab编码器应用程序。你必须有一个Matlab编码器生成代码的许可证。

  • 目标硬件必须支持标准的双精度浮点计算。万博1manbetx您无法生成单精度或固定点计算的代码。

  • 代码生成目标不使用与MATLAB求解器相同的数学内核库。因此,代码生成解决方案可能因求解器解决方案而异,特别是万博 尤文图斯对于条件差的问题。

  • 一代代码必须是MATLAB代码。特别是,您无法使用自定义黑盒功能作为目标函数粉刺。您可以使用coder.ceval评估在C或C ++中编码的自定义功能。但是,必须在MATLAB函数中调用自定义函数。

  • 粉刺不支持万博1manbetx问题代码生成的参数。

    [x,fval] = fmincon(问题)% 不支持万博1manbetx
  • 您必须使用函数句柄,而不是字符串或字符名称指定目标函数和任何非线性约束函数。

    x = fmincon(@ fun,x0,a,b,aeq,beq,lb,Ub,@ nonlcon)% 万博1manbetx支持的%不支持:F万博1manbetxmincon('有趣',......)或fmincon(“乐趣”,......)
  • 所有粉刺输入矩阵如一种AEQ.,UB.必须充实,不能稀疏。您可以将稀疏矩阵转换为完整的满的功能。

  • UB.参数必须具有相同数量的条目X0.论证或必须是空的[]

  • 对于涉及嵌入式处理器的高级代码优化,您还需要嵌入式编码器®执照。

  • 您必须包含选项粉刺并使用优化选择。选项必须包括算法选项,设置为'SQP''SQP-Legacy'

    选择= optimoptions (“fmincon”'算法''SQP');[x,fval,exitflag] = fmincon(乐趣,x0,a,b,aeq,beq,lb,Ub,nonlcon,选项);
  • 代码生成支持这些选项:万博1manbetx

    • 算法- 必须是'SQP''SQP-Legacy'

    • 约束特许

    • FiniteDifferenceStepSize

    • finitedifferenceType.

    • MaxFunctionEvaluations.

    • 最大

    • Objectivelimit.

    • 最优法

    • ScaleProblem.

    • specifyConstraintGRadient.

    • specifyobjectivegradient.

    • StepTolerance.

    • 典型的

  • 生成的代码有限错误检查选项。建议更新选项的方法是使用优化选择,不是点表示法。

    opts = Optimoptions(“fmincon”'算法''SQP');选择= optimoptions(选择,'maxtations',1E4);% 受到推崇的opts.maxIterations = 1E4;% 不建议
  • 不要从文件加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。

  • 通常,如果指定不支持的选项,则在代码生成期间忽略该选项。万博1manbetx但是,如果通过使用点表示法指定绘图函数或输出功能,则代码生成可以发出错误。有关可靠性,请仅指定支持的选项。万博1manbetx

  • 因为不支持输出函数和绘图函数,万博1manbetx粉刺不返回出口标志-1。

  • 代码生成的粉刺不包含最好的返回字段输出结构体。

生成的代码不多

缺省情况下,MATLAB环境外部使用的生成代码使用不多线程的线性代数库。因此,此代码可以在MATLAB环境中的代码中运行显着慢。

如果您的目标硬件有多个核心,则可以使用自定义多线程LAPACK和BLAS库来实现更好的性能。要在生成的代码中纳入这些库,请参阅通过使用LAPACK调用加速独立代码中的线性代数(MATLAB编码器)

也可以看看

||(MATLAB编码器)

相关的话题