Main Content

使用 lsqlin 求解器优化实时编辑器任务

此示例显示如何使用优化实时编辑器任务来求解约束最小二乘问题。

本例中的问题是找到平面 x1 + 2x2 + 4x3 = 7 上最接近原点的点。求解这个问题最简单的方法是最小化平面上某个点 x = (x1,x2,x3) 到原点的距离的平方,这与最小化实际距离返回相同的最优点。因为从任意点 (x1,x2,x3) 到原点的距离平方是 x12+x22+x32,所以您可以按如下方式描述该问题:

minxf(x)=x12+x22+x32,

需满足以下约束

x1 + 2 x2 + 4 x3 = 7.(1)

函数 f(x) 是目标函数,而 x1 + 2x2 + 4x3 = 7等式约束。更复杂的问题可能包含其他等式约束、不等式约束以及上界或下界约束。

设置并使用优化求解问题

使用优化实时编辑器任务中的 lsqlin求解器设置问题。

  1. 通过单击主页选项卡上文件部分中的新建实时脚本按钮来创建一个新的实时脚本。

    New Live Script button

  2. 插入优化实时编辑器任务。点击插入选项卡,然后在代码部分中选择任务 > 优化

    Optimize task in Live Editor: Choose between problem-based (recommended) and solver-based

  3. 单击Solver-based按钮。优化任务打开。

  4. 在任务的指定问题类型部分中,选择目标 > 最小二乘约束 > 线性等式

    该任务选择 lsqlin 作为推荐的求解器。

  5. 要将数据 Cd 放入 MATLAB® 工作区,请单击插入选项卡上的分节符按钮。在新的部分中,输入以下代码。

    C = eye(3);
    d = zeros(3,1);
  6. 设置线性等式约束矩阵和向量。

    Aeq = [1 2 4];
    beq = 7;
  7. Ctrl+Enter 键运行该节。这会将变量放入工作区。

  8. 在任务的选择问题数据部分中,将条目设置为其相应的值。

    Variables C, d, Aeq, and beq are selected, and x0 is not

  9. Ctrl+Enter 键运行求解器。查看退出消息。

    Exit message reports minimum found satisfying constraints

  10. 要找到解,请查看任务的顶部。

    Returned variables are solution and objectiveValue

    求解器将变量 solutionobjectiveValue 返回到 MATLAB 工作区。

  11. 在任务下方插入分节符。将这些行放在新的部分中。

    disp(solution)
    disp(objectiveValue)
  12. Ctrl+Enter 键运行该节。

    solution = [1/3, 2/3, 4/3]. objective = 7/3.

另请参阅

|

相关主题