主要内容

优化实时编辑器任务fmincon解算器

这个例子展示了如何使用优化Live Editor任务与fmincon在线性和非线性约束和边界条件下最小化二次方程的求解器。

考虑寻找[x1x2),解决了

最小值 x f x x 1 2 + x 2 2

受约束

0.5 x 1 (绑定) x 1 x 2 + 1 0 (线性不等式) x 1 2 x 2 2 + 1 0 9 x 1 2 x 2 2 + 9 0 x 1 2 + x 2 0 x 2 2 + x 1 0 (非线性不等式)

的起点x0这个问题是x1= 3,x2= 1。

开始优化实时编辑器任务

控件创建一个新的活动脚本新的生活的脚本按钮文件上节首页选项卡。

新增实时脚本按钮

插入一个优化住编辑任务。单击插入然后,在代码部分中,选择任务>优化

插入优化实时编辑器任务

优化活动任务的视图

为了以后在输入问题数据时使用,请选择插入> Section Break.新的部分出现在任务的上面和下面。

输入问题数据

  1. 从任务的顶部开始,输入问题类型和约束类型。单击目标>二次按钮,约束>下界线性不等式,非线性按钮。任务显示推荐的求解器为fmincon

  2. 目标函数

    目标函数非常简单,可以用匿名函数表示。将光标定位到任务上方的部分并输入以下代码。

    有趣= @ (x)和(x ^ 2);
  3. 下界

    这个问题包含下界x1≥0.5.将这个界限表示为一个变量.当光标位于定义目标函数的行尾时,按下输入,并输入以下代码指定下界。

    lb = [0.5 -Inf];
  4. 初始点

    当光标位于定义下界的行尾时,按下输入,输入以下代码设置初始点。

    x0 = (3,1);
  5. 线性约束条件

    当光标位于定义起始点的行尾时,按下输入,并输入以下代码设置线性约束。

    一个= [1];b = 1;
  6. 运行部分

    顶部部分现在包括5个参数。

    定义初始参数的五行代码

    接下来,您需要运行该部分,将参数作为变量放置到工作区中。为此,单击该区域最左边的区域,该区域包含一个斜条纹条。单击此区域后,条形图变为实条形图,表明变量现在位于工作区中。(注:您也可以按按Ctrl + Enter运行该部分。)

  7. 问题数据

    将变量输入选择问题数据任务的一部分。要指定目标函数,请选择目标函数>函数句柄并选择有趣的

  8. 设定起始点x0

  9. 选择下界>来自工作区并选择

  10. 设置线性不等式约束变量一个b线性不等式区域。

  11. 现在指定非线性不等式约束。在选择问题数据部分中,选择非线性>局部函数,然后单击按钮。该函数出现在任务下面的新部分中。编辑生成的代码以包含以下未注释的行。

    函数测查[c] = constraintFcn (x)%您可以包含或不包含注释代码行。%确保只保留这些未注释的行:C = [-x(1)^2 -x(2)^2 + 1;x(1)^2 - x(2)^2 + 9;x - x (1) ^ 2 + (2);x - x (2) ^ 2 + (1)];测查= [];结束
  12. 选择问题数据部分中,选择constraintFcn函数。

  13. 监测进展

    显示进度部分的任务,选择>每次迭代这样你就可以监控求解器的进程。选择客观价值的阴谋。

    你的设置看起来像这样:

    fmincon求解器,目标函数处理fun,初始点x0,下界lb,线性不等式约束A和b,非线性局部函数约束tfcn,显示每次迭代,绘制目标值

运行求解器并检查结果

要运行求解器,请单击选项按钮在任务窗口的右上方,然后选择运行部分

解算器运行;键盘则是按ctrl+enter

绘图显示在单独的图形窗口和任务输出区域中。

图显示12次迭代和最终函数值2

要查看解决方案变量的返回位置,请查看任务的顶部。

使用fmincon求解器最小化乐趣

最后一个点及其相关的目标函数值出现在解决方案objectiveValue工作区中的变量。通过在任务下面的实时编辑器部分输入这段代码来查看这些值。

解决方案,objectiveValue

新闻按Ctrl + Enter管理这个部门。

[1 1], objective - value = 2

另请参阅

|

相关的话题