使用 lsqnonlin 绘制所有迭代期间的函数值演变

我正在lsqnonlin用作我的优化例程。我需要在每次迭代时绘制成本函数,同时显示所有先前的值。所以我想展示一些东西像这样

在此处输入图片说明

但是,使用lsqnonlin,我只能在当前迭代中绘制成本函数的值。使用这些选项:

options            = optimset('TolFun', 1e-5, 'TolX',1e-5, 'MaxFunEvals', 10000, 'PlotFcns', @optimplotfval,'Display','iter')

有没有办法设置选项,lsqnonlin以便我得到类似于上图所示的内容?

阿特鲁

如果您查看程序optimplotfval.m(在 MATLAB 的终端中输入,edit optimplotfval.m您将看到以下注释:

%   STOP = OPTIMPLOTFVAL(X,OPTIMVALUES,STATE) plots OPTIMVALUES.fval.  If
%   the function value is not scalar, a bar plot of the elements at the
%   current iteration is displayed.  If the OPTIMVALUES.fval field does not
%   exist, the OPTIMVALUES.residual field is used.

因此,例如,fminsearch您将获得目标/成本函数值与迭代次数的图,但在这种情况下,lsqnonlin您似乎在给定迭代中获得残差值的条形图。

解决方法是基于optimplotfval.m. 复制粘贴optimplotfval.m到另一个文件中,例如,my_opt_plot.m然后更改程序初始部分中的剩余选项:

stop = false;
switch state
    case 'iter'
        if isfield(optimValues,'fval')
            if isscalar(optimValues.fval)
                plotscalar(optimValues.iteration,optimValues.fval);
            else
                plotvector(optimValues.iteration,optimValues.fval);
            end 
        else
            % Plot the squared norm of residuals as a function of iteration number instead of bar plot of residual values at current iteration
            fval = norm(optimValues.residual)^2;
            % Call the scalar function instead
            plotscalar(optimValues.iteration,fval);    
end

您可以使用与调用相同的方式调用此新函数optimplotfval.m

options = optimoptions('lsqnonlin','Display','iter','PlotFcns',@my_opt_plot);
[x,resnorm,residual,exitflag,output] = lsqnonlin(@simple_fun,xc0,[],[],options);

在我的例子中 simple_fun 基于 MATLAB 文档条目中的一个示例lsqnonlin

function f = simple_fun(xc)
    x = [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];
    y = [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];

    f = xc(1)*exp(xc(2)*x)-y;   
end

如果将绘制的目标函数值与打印在屏幕上的目标函数值进行比较,它们确实匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab中的lsqnonlin优化错误

来自分类Dev

为什么lsqnonlin重塑其输入参数?

来自分类Dev

为什么lsqnonlin重塑其输入参数?

来自分类Dev

使用R绘制所有刻度线

来自分类Dev

使用pyevolve和matplotlib绘制最佳价值演变图

来自分类Dev

Haskell:使用函数值

来自分类Dev

使用更少的值将所有参数值加倍

来自分类常见问题

使用Maple编码:使用正割方法进行有公差的迭代。数值分析

来自分类Dev

如何列出Linux引导期间使用的所有文件

来自分类Dev

Tomcat在高负载期间未使用所有内核

来自分类Dev

在Excel中使用哪个函数根据另一个变量的值对一个变量的所有数值进行计数?

来自分类Dev

如何使用TFS API 2013获取所有迭代路径

来自分类Dev

使用python迭代QListView内部的所有项目

来自分类Dev

如何使用Google脚本迭代所有工作表?

来自分类Dev

Java:使用迭代器删除所有对象

来自分类Dev

使用列表迭代器获取所有值

来自分类Dev

在bash中使用所有参数的函数?

来自分类Dev

使用所有原始参数调用函数

来自分类Dev

避免对所有内容使用jquery函数

来自分类Dev

使用gnuplot同时绘制目录中的所有文件?

来自分类Dev

为什么不对所有可绘制对象使用nodpi?

来自分类Dev

如何使用所有xticks绘制熊猫多索引dataFrame

来自分类Dev

Python:使用熊猫导入csv。尝试绘制列,但出现一个错误,提示“没有要绘制的数值数据”

来自分类Dev

使用python(matplotlib,seaborn或plotly)将全球COVID-19演变绘制成线

来自分类Dev

是否有理由在迭代和绘制字典或数组时使用pyglet批处理?

来自分类Dev

迭代使用groupby apply函数

来自分类Dev

使用VBA的迭代SUMIF函数

来自分类Dev

使用正则表达式将所有JSON整数值括在双引号“”中

来自分类Dev

使用UIBezierPath绘制极函数

Related 相关文章

  1. 1

    Matlab中的lsqnonlin优化错误

  2. 2

    为什么lsqnonlin重塑其输入参数?

  3. 3

    为什么lsqnonlin重塑其输入参数?

  4. 4

    使用R绘制所有刻度线

  5. 5

    使用pyevolve和matplotlib绘制最佳价值演变图

  6. 6

    Haskell:使用函数值

  7. 7

    使用更少的值将所有参数值加倍

  8. 8

    使用Maple编码:使用正割方法进行有公差的迭代。数值分析

  9. 9

    如何列出Linux引导期间使用的所有文件

  10. 10

    Tomcat在高负载期间未使用所有内核

  11. 11

    在Excel中使用哪个函数根据另一个变量的值对一个变量的所有数值进行计数?

  12. 12

    如何使用TFS API 2013获取所有迭代路径

  13. 13

    使用python迭代QListView内部的所有项目

  14. 14

    如何使用Google脚本迭代所有工作表?

  15. 15

    Java:使用迭代器删除所有对象

  16. 16

    使用列表迭代器获取所有值

  17. 17

    在bash中使用所有参数的函数?

  18. 18

    使用所有原始参数调用函数

  19. 19

    避免对所有内容使用jquery函数

  20. 20

    使用gnuplot同时绘制目录中的所有文件?

  21. 21

    为什么不对所有可绘制对象使用nodpi?

  22. 22

    如何使用所有xticks绘制熊猫多索引dataFrame

  23. 23

    Python:使用熊猫导入csv。尝试绘制列,但出现一个错误,提示“没有要绘制的数值数据”

  24. 24

    使用python(matplotlib,seaborn或plotly)将全球COVID-19演变绘制成线

  25. 25

    是否有理由在迭代和绘制字典或数组时使用pyglet批处理?

  26. 26

    迭代使用groupby apply函数

  27. 27

    使用VBA的迭代SUMIF函数

  28. 28

    使用正则表达式将所有JSON整数值括在双引号“”中

  29. 29

    使用UIBezierPath绘制极函数

热门标签

归档