Shortest Distance to a Plane

The Problem

This example shows how to formulate a linear least squares problem using the problem-based approach.

The problem is to find the shortest distance from the origin (the point [0,0,0]) to the plane x1+2x2+4x3=7. In other words, this problem is to minimize f(x)=x12+x22+x32 subject to the constraint x1+2x2+4x3=7. The function f(x) is called the objective function and x1+2x2+4x3=7 is an equality constraint. More complicated problems might contain other equality constraints, inequality constraints, and upper or lower bound constraints.

Set Up the Problem

To formulate this problem using the problem-based approach, create an optimization problem object called pointtoplane.

pointtoplane = optimproblem;

Create a problem variable x as a continuous variable with three components.

x = optimvar('x',3);

Create the objective function and put it in the Objective property of pointtoplane.

obj = sum(x.^2);
pointtoplane.Objective = obj;

Create the linear constraint and put it in the problem.

v = [1,2,4];
pointtoplane.Constraints = dot(x,v) == 7;

The problem formulation is complete. To check for errors, review the problem.

showproblem(pointtoplane)
  OptimizationProblem : 

	minimize :
       x(1)^2 + x(2)^2 + x(3)^2

	subject to :
       x(1) + 2*x(2) + 4*x(3) == 7
     

The formulation is correct.

Solve the Problem

Solve the problem by calling solve.

[sol,fval,exitflag,output] = solve(pointtoplane);
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.
disp(sol.x)
    0.3333
    0.6667
    1.3333

Verify the Solution

To verify the solution, solve the problem analytically. Recall that for any nonzero t, the vector t*[1,2,4] = t*v is perpendicular to the plane x1+2x2+4x3=7. So the solution point xopt is t*v for the value of t that satisfies the equation dot(t*v,v) = 7.

t = 7/dot(v,v)
t = 0.3333
xopt = t*v
xopt = 1×3

    0.3333    0.6667    1.3333

Indeed, the vector xopt is equivalent to the point sol.x that solve finds.

Related Topics