В этом примере показано, как сформулировать линейную задачу наименьших квадратов с использованием подхода, основанного на задачах.
Проблема заключается в нахождении кратчайшего расстояния от начала координат (точка [0,0,0]) к плоскости 4x3 = 7. Другими словами, эта проблема заключается в 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 перпендикулярна плоскости 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 находит.