到平面的最短距离
问题
此示例说明如何使用基于问题的方法来表示线性最小二乘问题。
问题是找出从原点(点 [0,0,0])到平面 的最短距离。换句话说,此问题就是在约束 下最小化 。函数 f(x) 称为目标函数, 是等式约束。更复杂的问题可能包含其他等式约束、不等式约束以及上界或下界约束。
设置问题
为了使用基于问题的方法来表示此问题,请创建一个名为 pointtoplane 的优化问题对象。
pointtoplane = optimproblem;
创建一个问题变量 x 作为一个具有三个分量的连续变量。
x = optimvar('x',3);创建目标函数,并将其放入 pointtoplane 的 Objective 属性中。
obj = sum(x.^2); pointtoplane.Objective = obj;
创建线性约束并将其放入问题中。
v = [1,2,4]; pointtoplane.Constraints = dot(x,v) == 7;
问题表示已完成。要检查错误,请审核问题。
show(pointtoplane)
OptimizationProblem :
Solve for:
x
minimize :
sum(x.^2)
subject to :
x(1) + 2*x(2) + 4*x(3) == 7
公式是正确的。
求解问题
通过调用 solve 求解问题。
[sol,fval,exitflag,output] = solve(pointtoplane);
Solving problem using lsqlin. Minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. <stopping criteria details>
disp(sol.x)
0.3333
0.6667
1.3333
验证解
要验证解,请通过解析法求解问题。前面提到,对于任何非零的 t,向量 t*[1,2,4] = t*v 垂直于平面 。因此满足方程 dot(t*v,v) = 7 的 t 的值的解点 xopt 是 t*v。
t = 7/dot(v,v)
t = 0.3333
xopt = t*v
xopt = 1×3
0.3333 0.6667 1.3333
实际上,向量 xopt 等效于 solve 找到的点 sol.x。