如何使用fminsearch来解决这个4变量目标函数(matlab)?

时间:2014-07-09 18:36:17

标签: matlab fminsearch

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

1 个答案:

答案 0 :(得分: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);