Этот пример показывает, как сформулировать проблему линейного метода наименьших квадратов с помощью основанного на проблеме подхода.
Проблема состоит в том, чтобы найти кратчайшее расстояние от источника (точка [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;
Проблемная формулировка завершена. Чтобы проверить ошибки, рассмотрите проблему.
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
перпендикулярен плоскости . Так точка решения 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
.