相当于Matlab中的Excel求解器?

时间:2013-07-01 20:01:24

标签: matlab

编辑:我编辑了我的问题更具体,因为霍克勒的评论帮助我开始。

我在excel中有数据,我用它来进行优化分析。在excel中,使用求解器很简单:我可以选择带公式的单元格,然后选择需要更改的单元格并添加约束,然后最小化。但是,当谈到Matlab的优化过程时,我迷失了方向。文档似乎只提供了分析简单单行函数的优化问题示例,如f(x)= - (x1)(x2)(x3)。我无法弄清楚如何在我自己的案例中应用这些例子。

我想要最大化的功能相对复杂。作为输入,它采用了许多标量变量以及包含计算中使用的数据的多个结构。

我的问题是我试图通过改变三个标量变量来最大化函数的值,同时保持其他输入变量不变(因为它们是数据)。更具体地说,我的功能类似于:

function x = NameOfFunction (w1, w2, w3, a, b, c, Structure1, Structure2, Structure3)

我想通过仅更改变量w1,w2和w3来最大化x。换句话说,我想让Matlab告诉我最大化x的w1,w2和w3的值,同时保留所有其他变量。非常感谢任何见解。

1 个答案:

答案 0 :(得分:5)

没有约束

您可能最终会在MATLAB中找到fminconfminunc的解决方案。例如,使用fminunc因为它的语法不那么混乱,您可以先在一个名为“NameOfFunction.m”的单独文件中定义成本函数:

function cost = NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3)
% Your code goes here, just remember that you return a scalar-valued cost from
% this function.

请注意,fminunc及类似内容会尝试最小化此费用函数。如果您需要最大化它,那么最后将最终成本乘以-1。接下来,在主文件中创建函数句柄:

h = @(w)NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3);

其中w是您要优化的变量的向量:

w = [w1, w2, w3];

这基本上掩盖了你的所有输入的功能,只是你想要优化的功能w,就fminunc而言。这样,您就可以将参数abcStructureStructure2Structure3传递给费用函数{{1没有NameOfFunction触摸它们。现在,您可以通过对向量fminunc

的初始猜测来调用句柄上的fminunc
w

并且w0 = [w1_init, w2_init, w3_init]; [w, fval] = fminunc(h, w0); 应该找到fminunc向量的最佳值,以便最小化(注意,它会找到最小值)您的成本函数。

有约束

在这种情况下,您最有可能使用w。如果您的约束是在您正在优化的每个参数的上限和下限的形式,那么将它们放入向量中:

fmincon

使用ub = [w1_upper, w2_upper, w3_upper]; lb = [w1_lower, w2_lower, w3_lower]; 调用与之前相同的句柄:

fmincon

上面的四个[w, fval] = fmincon(h, w0, [], [], [], [], lb, ub); 只是您未使用的参数的占位符。 []也可以处理更复杂的约束;查看文档(在本讨论开始时链接)以获取更多详细信息。