Matlab等效于Excel Solver的以下输入设置

时间:2014-10-07 03:11:03

标签: excel matlab

对于Excel Solver输入,我已设置

设置对象单元格:$ A $ 1(即可能是18)

收件人:Min

通过更改变量$ B $ 1

检查无约束变量非负数:

求解方法:非线性

我这里不是数学专家,但我想弄清楚我应该使用哪种无约束最小化函数?看起来像fminunc问题是:

  1. 我只是在objfun中使用Matlab min函数 (如http://www.mathworks.com/help/optim/ug/fminunc-unconstrained-minimization.html
  2. 所述
  3. fminunc(@objfun,x0)
    
  4. 如果上面的Excel解算器中的xo等价于$ B $ 1,则工作?

    我认为不需要任何额外的选项来获得所需的结果。至少我没有看到任何控制负输出的选项。

    这听起来不错吗? 谢谢

1 个答案:

答案 0 :(得分:0)

关于非负输出,这是一个约束,因此你不应该使用无约束求解器(即fminunc),而应该使用一个可以处理约束的算法(即使用fmincon):

您的约束是下限,因此您使用此fmincon形式:

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

您对下限是lb参数感兴趣,因此您可以这样调用fmincon

x = fmincon(fun, x0, [], [], [], [], 0, Inf)
在Excel中调用求解程序之前,

x0应等于单元格$B$1中的值。

对于目标函数 使用Matlab中的min函数fmincon会固有地尝试并最小化您的目标函数,这与在Excel解算器中勾选最小框相同。您的目标函数是单元格$A$1中的函数,但在这种情况下是x的函数,而不是$B$1

让我们说在单元格$A$1中你试图最小化函数=$B$1^2 + 10,然后在Matlab中你需要像这样定义你的函数(使用匿名函数是最简单的,你可以使用函数。相反,如果函数更复杂,则为m文件):

fun = @(x)(x.^2 + 10)