【问题标题】:How do I use fminsearch to solve this 4-variable objective function (matlab)?如何使用 fminsearch 求解这个 4 变量目标函数(matlab)?
【发布时间】:2014-07-09 18:36:16
【问题描述】:

我有一个目标函数,它有 4 个变量要求解,因此输出最小,但我无法理解使用函数“fminsearch”求解多个变量所需的语法。这是我的目标函数:

function f4 = v4_objfunc(w_x,w_y,s_x,s_y)

f4 = 6*(w_x)^2 + 6*(w_y)^2 + 12*(s_x)^2 + 12*(s_y)^2 - 330*w_x - 228*w_y - 990*s_x -            
684*s_y - 6*w_x*s_x - 6*w_y*s_y + 86564;

end

这就是我保存的“.m”函数文件。如何使用 fminsearch 获取“w_x”、“w_y”、“s_x”、“s_y”的值,这将导致最小的结果?如果有帮助的话,未知数对应于 x 和 y 值(对于坐标),它们只需要在 0-100 之间进行检查(对于所有 4 个)。

我使用过Matlab提供的函数页面,但只了解如何使用fminsearch进行单变量函数。

【问题讨论】:

    标签: matlab fminsearch


    【解决方案1】:

    只需使用一个向量来存储您的四个标量(我还删除了一堆或多余的括号):

    function f4 = v4_objfunc(x)
    w_x = x(1);
    w_y = x(2);
    s_x = x(3);
    s_y = x(4);
    f4 = 6*(w_x^2+w_y^2) + 12*(s_x^2+s_y^2) - 6*(w_x*s_x+w_y*s_y) ...
         - 330*w_x - 228*w_y - 990*s_x - 684*s_y + 86564;
    

    或者直接用匿名函数:

    v4_objfunc = @(x)6*(x(1)^2+x(2)^2)+12*(x(3)^2+x(4)^2)-6*(x(1)*x(3)+x(2)*x(4)) ...
                     -330*x(1)-228*x(2)-990*x(3)-684*x(4)+86564;
    
    x0 = ones(4,1);
    [x,fval] = fminsearch(v4_objfunc,x0)
    w_x = x(1);
    w_y = x(2);
    s_x = x(3);
    s_y = x(4);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多