exponenta event banner

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

Проблема

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

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

Связанные темы