【问题标题】:Matlab equivelant with following input settings of Excel Solver具有以下 Excel Solver 输入设置的 Matlab 等效项
【发布时间】:2014-10-07 20:02:12
【问题描述】:

对于 Excel Solver 输入,我已设置

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

收件人:分钟

通过改变变量 $B$1

检查无约束变量非负:

求解方法:非线性

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

  1. 我只是在 objfun 中使用 Matlab 的 min 函数吗
    (如http://www.mathworks.com/help/optim/ug/fminunc-unconstrained-minimization.html 所述)
  2. fminunc(@objfun,x0)
    

如果 xo 与上述 Excel Solver 中的 $B$1 等价,是否可以工作?

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

这听起来对吗? 谢谢

【问题讨论】:

  • fminunc (mathworks.com.au/help/optim/ug/fminunc.html) 的文档说 x0 是对最小值的初始猜测。 objfun 被假定为接受一个输入的函数。如果您想对解决方案进行限制,请考虑fminconmathworks.com.au/help/optim/ug/fmincon.html
  • 谢谢,但令人困惑的部分是在 objfun 中设置什么:例如。 objfun=@(n) min(n) 对不起,这没有意义,所以这就是我问的原因
  • 根据您的参考,无论是否匿名,我都会使用 objfun=@(n) min(n) 。如果我错了,应该怎么设置?
  • onjfun=@(n) min(n) 是一个匿名函数,但如果n 是一个标量,它就不是很有用!您是否试图最小化数字数组中的最小值?

标签: excel matlab


【解决方案1】:

关于非负输出,这是一个约束,因此您不应该使用不受约束的求解器(即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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    相关资源
    最近更新 更多