fminunc得到一阶最优迭代0 0,不找到最佳
11视图(30天)
显示旧的评论
答案(3)
约翰D 'Errico
2020年8月11日
编辑:约翰D 'Errico
2020年8月11日
首先,这似乎是一个参数的优化。不要使用fminunc。相反,我们fminbnd。它将更健壮。甚至可能更有效率。
第二几乎总是当有人说你所拥有的,这意味着函数编码错误。在执行一个optiimization之前,测试是否对不同的输入目标函数的变化。响应你的响应你会看到如果一个函数是常数。
例如,看看会发生什么在这里:
> > testfun = @ (x) 1;
> > testfun (1)
ans =
1
> > testfun(π)
ans =
1
什么我送进testfun,我得到1。
现在,当我尝试fminunc这里发生了什么?
> > fminunc (testfunπ)
最初的点是一个局部最小值。
优化因为完成初始点的梯度的大小
是不到最优公差的值。
<停止标准详细信息>
ans =
3.1416
我得到了完全相同的结果。
首先,确认如果你发送不同parametrs输入函数,得到不同的东西。
接下来,验证您的函数是可微的。fminunc需要这个。如果你做一些内部轮输入或输出,然后fminunc不能使用。再次,应该足够了:一个例子
> > testfun = @ (x)轮(x);
> > fminunc (testfun, 1.1)
最初的点是一个局部最小值。
优化因为完成初始点的梯度的大小
是不到最优公差的值。
<停止标准详细信息>
ans =
1.1
所以对于任何x vicinty的整数,你得到相同的整数。没有变化。至于fminunc concerrned,这是一个常数的函数,它将立即终止。
testfun (5: .1:1.4)
ans =
1 1 1 1 1 1 1 1 1 1
为什么要尝试优化的东西不会改变?
的几率就好,如果你认为你的函数应该产生一些不恒定的响应,然后在代码中有一个bug。当然我们不能诊断代码,如果没有看到,我的MATLAB水晶球总是出毛病。:)