Кратчайшее расстояние до плоскости

Проблема

Этот пример показов, как сформулировать задачу линейного метода наименьших квадратов с помощью подхода , основанного на проблеме.

Задача состоит в том, чтобы найти кратчайшее расстояние от источника (точки [0,0,0]) к плоскости x1+2x2+4x3=7. Другими словами, эта проблема состоит в том, чтобы минимизировать f(x)=x12+x22+x32 удовлетворяющее ограничению x1+2x2+4x3=7. Функция f (x) называется целевой функцией иx1+2x2+4x3=7 является ограничением равенства. Более сложные задачи могут содержать другие ограничения равенства, ограничения неравенства и верхних или нижних границ ограничений.

Настройка задачи

Чтобы сформулировать эту задачу с помощью основанного на проблеме подхода, создайте объект задачи оптимизации, называемый pointtoplane.

pointtoplane = optimproblem;

Создайте переменные задачи x как непрерывная переменная с тремя компонентами.

x = optimvar('x',3);

Создайте целевую функцию и поместите ее в Objective свойство pointtoplane.

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.
disp(sol.x)
    0.3333
    0.6667
    1.3333

Проверьте решение

Чтобы проверить решение, решите проблему аналитически. Напомним, что для любого ненулевого t, векторная t*[1,2,4] = t*v перпендикулярно плоскости x1+2x2+4x3=7. Итак, точка решения xopt является t*v для значения t который удовлетворяет уравнению 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

Действительно, вектор xopt эквивалентно точечной sol.x что solve находит.

Похожие темы