主要内容

非线性方程求解中的代码生成:背景

什么是代码生成?

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

通常,您使用代码生成来部署未运行MATLAB的硬件上的代码。例如,您可以在机器人上部署代码,使用FSOLVE.优化运动或计划。

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

代码生成的要求

  • FSOLVE.金宝app支持使用代码生成使用Codegen.(MATLAB编码器)功能或者Matlab编码器应用程序。你必须有一个Matlab编码器生成代码的许可证。

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

  • 代码生成目标不使用与Matlab求解器相同的数学内核库。因此,代码生成解决方案可以因求解解决方案而异,特别是对金宝搏官方网站于条件不良问题。

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

  • FSOLVE.不支持金宝app问题代码生成的参数。

    [x,fval] = fsolve(问题)% 不支持金宝app
  • 您必须使用函数句柄,而不是字符串或字符名称指定目标函数。

    x = fsolve(@ fun,x0,选项)% 金宝app支持的%不支持:f金宝appsolve('有趣',...)或fsolve(“有趣”,......)
  • 对于涉及嵌入式处理器的高级代码优化,您还需要嵌入式编码器®执照。

  • 您必须包含选项FSOLVE.并使用它指定它们优化选择。选项必须包括算法选项,设置为'levenberg-marquardt'

    选项= Optimoptions('fsolve''算法''levenberg-marquardt');[x,fval,ExitFlag] = FSOLVE(有趣,X0,选项);
  • 代码生成支持这些选项:金宝app

    • 算法- 必须是'levenberg-marquardt'

    • finitedifferencestepsize.

    • finitedifferenceType.

    • functiontolerance.

    • MaxFunctionEvaluations.

    • 最大

    • specifyobjectivegradient.

    • StepTolerance.

    • 典型的

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

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

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

  • 由于不支持输出函数和绘图功能,因此解码器不会返回出口标志-1。金宝app

生成的代码不多

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

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

也可以看看

||(MATLAB编码器)

相关话题