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

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

Связанные ограничения

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

(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

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

Когда ваша проблема будет иметь общие ограничения, сформулируйте проблему как задачу оптимизации, не проблему уравнения. Установите уравнения как ограничения равенства. Например, чтобы решить предыдущие уравнения подвергают нелинейному ограничению неравенства x210, удалите границы на 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 = 4.8067e-13
exitflag3 = 
    OptimalSolution

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

sol3.x
ans = 2×1

   -1.0000
   -2.0000

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

Больше о решении уравнений с ограничениями

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

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

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

Смотрите также

Похожие темы