Matlab profiler:optimoptions()与lsqnonlin()大致相同

时间:2017-09-10 02:26:21

标签: matlab least-squares

我正在运行调用lsqnonlin()1000次的代码。我分析了代码,发现optimoptions()占用了大约40%的时间。相反,我设置了opt1 = optimotpions()一次并将opt1作为参数传递给运行lsqnonlin()的函数,我看到了性能改进。

什么是优化()那么长?

1 个答案:

答案 0 :(得分:0)

好的,我们来看看内部optimoptions函数的作用:

open optimoptions

似乎函数的核心部分由以下行表示:

options = optim.options.createSolverOptions(solverName, varargin{:});

让我们看一下createSolverOptions函数:

open optim.options.createSolverOptions

宾果!代码中的注释揭示了optimoptions如果在循环中多次调用可能会对整体性能产生巨大影响的原因:

  

我们在这里检查是否安装了Global Optimization Toolbox。此外,我们假设在调用此函数之间不会删除这些工具箱文件。

     

请注意,我们不会在此处执行许可检查,以查看用户是否可以创建一组全局优化工具箱选项。为确保许可证检查正确,我们必须在每次调用此函数时检查许可证。如果在紧密循环中多次调用optimoptions,这将非常昂贵。

     

因此,我们依赖许可证管理器在用户安装了Global Optimization Toolbox但没有可用许可证的情况下抛出错误。

通过代码中包含的许可证检查,选项对象创建过程大大减慢。最重要的是,optimoptions函数及其子函数包含try-catch块中的大量regex块,for loops提取和转换,以及其他很好的代码片段。对性能不太友好。