В этом примере показано, как сформулировать проблему линейного метода наименьших квадратов с помощью подхода, основанного на проблеме.
Проблема состоит в том, чтобы найти кратчайшее расстояние от источника (точка [0,0,0]
) к плоскости . Другими словами, эта проблема состоит в том, чтобы минимизировать подвергните ограничению . Функция f (x) называется целевой функцией и ограничение равенства. Более сложные проблемы могут содержать другие ограничения равенства, ограничения неравенства и верхние или нижние границы ограничений.
Чтобы сформулировать эту проблему с помощью подхода, основанного на проблеме, создайте объект задачи оптимизации, названный 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
перпендикулярно плоскости . Так точка решения 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
находит.