罗兰在MATLAB的艺术

把想法变成MATLAB

帮助——我为优化得到错误的答案!

多长时间我听到这个! ? !原来有一堆理由你可能不会得到答案你期望在执行一个优化的任务。这些可能包括答案不是唯一的,不是全球使用的优化方法,因此返回一个局部最优解,问题,如上所述,不是你真正想要解决的问题。让我告诉你更多关于最近的情况。

内容

我们听到

我们听到从用户fmincon,从优化工具箱,得到错误的答案的问题myOptFun。事实上,在初始点优化卡住。

这个函数

让我们快速查看功能。用户告诉我们,这是一个简单的抛物面的革命。我将计算z值在网格和显示表面。

[xx, yy] = meshgrid (2: .1:2);zz = xx。^ 2 + yy。^ 2;surfc (yy, xx zz)阴影插值函数colorbar视图(-37.5,50)

运行示例

首先,我做一些家务。

选择= optimset (“显示”,“最后一次”);警告optim: fmincon: SwitchingToMediumScale

接下来,我将运行这个示例使用用户的目标函数。

磅= (5;5);乌兰巴托= (5;5);x0 = (1, 1);[x fval exitflag输出羔羊毕业生赫斯]=fmincon (@myOptFun x0,[][],[],[],磅,乌兰巴托,[],选择);
优化终止:一阶最优测量不到选项。TolFun和最大约束违反小于options.TolCon。没有活跃的不平等。

根据用户,最佳答案是0,可以发现(0,0)。相反,我们发现。

x
x = 1 1
fval
fval = 2

为什么优化没有找到零?

混乱的根源myOptFun。现在让我给你的代码。

类型myOptFun
函数f = myOptFun (X)公式= ' X。* X + y。* y ';公式= strrep(公式、“x”num2str (x (1)));公式= strrep(公式、“y”num2str (X (2)));f = eval(公式);

它的使用num2str具体来说。文档中说的一样,默认格式num2str% 11.4克的这意味着我计算结果4有效数字。调用num2str (1),结果是1也是如此num2str e-5 (1 + 1)。换句话说的准确性不能将客户的目标函数比1的军医。然而,默认的公差TolFunTolX是1 e-6。更重要的是DiffMinChange(“最小有限差分的变量变化衍生品”)是1 e-8。当第一个有限差分计算完成,客户的目标函数的近似的一阶导数为零fmincon停止。

如何修复优化

我有几个选项来获得一个“更好”的结果。我可以

  • 增加目标函数的准确性
  • 调整相关的公差是容纳更大的分辨率目标函数
  • 提供准确的一阶导数(TolFunTolX仍需小于1的军医)。

改变目标函数

让我们尝试相同的优化目标函数修改。

[xFixed fvalFixed exitflag输出羔羊毕业生赫斯]=fmincon (@myOptFunFixed x0,[][],[],[],磅,乌兰巴托,[],选择);
优化终止:一阶最优测量不到选项。TolFun和最大约束违反小于options.TolCon。没有活跃的不平等。
xFixed
xFixed = 1.0 e - 015 * 0.4441 - -0.2220
fvalFixed
fvalFixed = 2.4652 e - 031

你碰过类似的问题吗?

如果你有碰过类似的问题,这将是伟大的如果你能分享它在这里




使用MATLAB®7.6发表

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。