主要内容

代码生成的fmincon背景

代码生成是什么?

代码生成是MATLAB的转换®代码用C代码MATLAB编码器™。代码生成需要MATLAB编码器许可证。

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

例如,看到的为fmincon生成代码。在解决其他优化代码生成,明白了为fsolve生成代码,为quadprog生成代码,或为lsqcurvefit或lsqnonlin生成代码

代码生成的需求

  • fmincon金宝app支持使用生成代码codegen(MATLAB编码器)函数或MATLAB编码器应用程序,你必须有一个MATLAB编码器许可来生成代码。

  • 目标硬件必须支持标准的双精度浮点计算。金宝app你不能为单精度或定点计算生成代码。

  • 代码生成目标不使用MATLAB解决数学内核库一样。因此,代码生成解决方案可以解决不同的解决方案,特别是对金宝搏官方网站条件不佳的问题。

  • 所有代码必须MATLAB生成的代码。特别是,您不能使用一个定制的黑盒函数作为目标函数fmincon。您可以使用coder.ceval评估一个自定义函数在C或c++代码。然而,自定义函数必须在调用MATLAB函数。

  • fmincon不支持金宝app问题理由代码生成。

    [x, fval] = fmincon(问题)%不支持金宝app
  • 您必须指定目标函数和非线性约束函数通过函数处理,而不是字符串或字符的名字。

    x = fmincon (Aeq @fun x0, A, b,说真的,磅,乌兰巴托,@nonlcon)%的金宝app支持%不支持:f金宝appmincon(‘有趣的’,…)或fmincon(“有趣”,…)
  • 所有fmincon输入矩阵等一个,Aeq,,乌兰巴托必须完整,而不是稀疏。稀疏矩阵转换为可以充分利用完整的函数。

  • 乌兰巴托参数必须有相同数量的条目的x0参数或必须是空的[]

  • 如果你的目标硬件不支持无限边界,使用金宝appoptim.coder.infbound

  • 对于高级代码优化包括嵌入式处理器,您还需要嵌入式编码器®许可证。

  • 你必须包括选项fmincon并指定使用optimoptions。必须包括的选项算法选项,设置为“sqp”“sqp-legacy”

    选择= optimoptions (“fmincon”,“算法”,“sqp”);[x, fval exitflag] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项);
  • 代码生成支持这些选项:金宝app

    • 算法——必须“sqp”“sqp-legacy”

    • ConstraintTolerance

    • FiniteDifferenceStepSize

    • FiniteDifferenceType

    • MaxFunctionEvaluations

    • MaxIterations

    • ObjectiveLimit

    • OptimalityTolerance

    • ScaleProblem

    • SpecifyConstraintGradient

    • SpecifyObjectiveGradient

    • StepTolerance

    • TypicalX

  • 生成的代码错误检查选项有限。推荐的方式来更新一个选项是使用optimoptions,而不是点符号。

    选择= optimoptions (“fmincon”,“算法”,“sqp”);选择= optimoptions(选择,“MaxIterations”1 e4);%推荐选择。MaxIterations = 1 e4;%不推荐
  • 不从文件加载选项。这样做会导致代码生成失败。相反,在代码中创建选项。

  • 通常,如果您指定一个选项不支持,在代码生成选项是默默地忽略。金宝app然而,如果你指定一个情节或输出函数通过使用点符号,代码生成可以发出一个错误。对于可靠性、指定仅支持选项。金宝app

  • 因为输出函数和情节功能不支持,金宝appfmincon不返回退出标志1。

  • 代码生成的fmincon不包含bestfeasible在返回输出结构。

生成的代码不是多线程

默认情况下,生成的代码用于在MATLAB环境使用线性代数库不是多线程。因此,这段代码可以在MATLAB环境中运行显著低于代码。

如果你的目标硬件有多个核心,可以取得更好的性能通过使用定制的多线程LAPACK和bla库。将这些库在生成的代码中,看到的加快生成独立的代码通过使用线性代数LAPACK调用(MATLAB编码器)

另请参阅

|(MATLAB编码器)||

相关的话题