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

Проблема

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

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

Проблемная формулировка завершена. Чтобы проверить ошибки, рассмотрите проблему.

showproblem(pointtoplane)
  OptimizationProblem : 

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

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

Формулировка правильна.

Решите проблему

Решите проблему путем вызова 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

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

Чтобы проверить решение, решите проблему аналитически. Вспомните, что для любого ненулевого 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.

Похожие темы