1

我有一个目标函数,它有 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 用于单变量函数。

4

1 回答 1

2

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

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);
于 2014-07-09T19:48:47.223 回答