Для решения нелинейной системы уравнений
+ x2sin (x1) = 12
используя проблемный подход, сначала определите x как двухэлементная переменная оптимизации.
x = optimvar('x',2);Создайте первое уравнение как выражение равенства оптимизации.
eq1 = exp(-exp(-(x(1) + x(2)))) == x(2)*(1 + x(1)^2);
Аналогично, создайте второе уравнение как выражение равенства оптимизации.
eq2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) == 1/2;
Создайте задачу уравнения и поместите ее в задачу.
prob = eqnproblem; prob.Equations.eq1 = eq1; prob.Equations.eq2 = eq2;
Просмотрите проблему.
show(prob)
EquationProblem :
Solve for:
x
eq1:
exp(-exp(-(x(1) + x(2)))) == (x(2) .* (1 + x(1).^2))
eq2:
((x(1) .* cos(x(2))) + (x(2) .* sin(x(1)))) == 0.5
Решение проблемы начиная с точки [0,0]. Для подхода, основанного на проблемах, укажите начальную точку как структуру, а имена переменных - как поля структуры. Для этой задачи существует только одна переменная, x.
x0.x = [0 0]; [sol,fval,exitflag] = solve(prob,x0)
Solving problem using fsolve. Equation solved. fsolve 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:
eq1: -2.4070e-07
eq2: -3.8255e-08
exitflag =
EquationSolved
Просмотрите точку решения.
disp(sol.x)
0.3532
0.6061
fcn2optimexprЕсли функции уравнений не состоят из элементарных функций, необходимо преобразовать функции в выражения оптимизации с помощью fcn2optimexpr. Для настоящего примера:
ls1 = fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2)))),x); eq1 = ls1 == x(2)*(1 + x(1)^2); ls2 = fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin(x(1)),x); eq2 = ls2 == 1/2;
См. раздел Поддерживаемые операции с переменными и выражениями оптимизации и преобразование нелинейной функции в выражение оптимизации.