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

Проблема

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

Проблема состоит в том, чтобы найти кратчайшее расстояние от источника (точка [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 находит.

Похожие темы