exponenta event banner

Нелинейная система уравнений с ограничениями, основанная на проблемах

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

Ограничения привязки

Когда проблема имеет только связанные ограничения, процесс решения проблемы прост. Например, найти решение с положительными компонентами к системе уравнений

(x1 + 1) (10-x1) 1 + x221 + x22 + x2 = 0 (x2 + 2) (20-x2) 1 + x121 + x12 + x1 = 0,

просто создайте переменные оптимизации с более низкими границами 0. (Эти уравнения имеют четыре решения: где x1 = -1 или x1 = 10 и где x2 = -2 или x2 = 20.)

x = optimvar('x',2,"LowerBound",0);
expr1 = (x(1) + 1)*(10 - x(1))*((1 + x(2)^2))/(1 + x(2)^2 + x(2));
expr2 = (x(2) + 2)*(20 - x(2))*((1 + x(1)^2))/(1 + x(1)^2 + x(1));
eqn1 = expr1 == 0;
eqn2 = expr2 == 0;
prob = eqnproblem;
prob.Equations.eqn1 = eqn1;
prob.Equations.eqn2 = eqn2;
x0.x = [15,15];
[sol,fval,exitflag] = solve(prob,x0)
Equation problem has bound constraints. Reformulating as a least squares problem.

Solving problem using lsqnonlin.

Equation solved.

lsqnonlin completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.
sol = struct with fields:
    x: [2x1 double]

fval = struct with fields:
    eqn1: 0
    eqn2: 0

exitflag = 
    EquationSolved

Просмотрите решение.

sol.x
ans = 2×1

    10
    20

Общие ограничения

Когда задача имеет общие ограничения, сформулируйте задачу как задачу оптимизации, а не как задачу уравнения. Задайте уравнения в качестве ограничений равенства. Например, для решения предыдущих уравнений, зависящих от ограничения нелинейного неравенства x‖2≤10, удалите границы наx и сформулировать задачу как задачу оптимизации без объективной функции.

x.LowerBound = [];
circlecons = x(1)^2 + x(2)^2 <= 10;
prob2 = optimproblem;
prob2.Constraints.circlecons = circlecons;
prob2.Constraints.eqn1 = eqn1;
prob2.Constraints.eqn2 = eqn2;
[sol2,fval2,exitflag2] = solve(prob2,x0)
Solving problem using fmincon.

Local 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.
sol2 = struct with fields:
    x: [2x1 double]

fval2 = 0
exitflag2 = 
    OptimalSolution

Просмотрите решение.

sol2.x
ans = 2×1

   -1.0000
   -2.0000

Общие ограничения с использованием цели наименьших квадратов

Можно также сформулировать задачу, задав целевую функцию как сумму квадратов, а общие ограничения - как ограничение. Эта альтернативная формулировка дает математически эквивалентную задачу, но может привести к другому решению, поскольку изменение формулировки приводит решатель к различным итерациям.

prob3 = optimproblem;
prob3.Objective = expr1^2 + expr2^2;
prob3.Constraints.circlecons = circlecons;
[sol3,fval3,exitflag3] = solve(prob3,x0)
Solving problem using fmincon.

Local 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.
sol3 = struct with fields:
    x: [2x1 double]

fval3 = 8.0569e-16
exitflag3 = 
    OptimalSolution

Просмотрите решение.

sol3.x
ans = 2×1

   -1.0000
   -2.0000

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

Подробнее о решении уравнений с ограничениями

Как правило, solve пытается решить нелинейную систему уравнений путем минимизации суммы квадратов составляющих уравнений. Другими словами, если LHS(i) - левое выражение для уравнения i, и RHS(i) является правым выражением, то solve попытки минимизировать sum((LHS RHS).^2).

Напротив, при попытке удовлетворить нелинейным выражениям ограничений solve как правило, использует fminconи пытается удовлетворить ограничения, используя различные стратегии.

В обоих случаях решатель может не решить уравнения. Стратегии, с помощью которых можно попытаться найти решение при сбое решателя, см. в разделе Решение не может решить уравнение.

См. также

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