对于Excel Solver输入,我已设置
设置对象单元格:$ A $ 1(即可能是18)
收件人:Min
通过更改变量$ B $ 1
检查无约束变量非负数:
求解方法:非线性
我这里不是数学专家,但我想弄清楚我应该使用哪种无约束最小化函数?看起来像fminunc问题是:
将
fminunc(@objfun,x0)
如果上面的Excel解算器中的xo等价于$ B $ 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)