eqnproblem

Создайте задачу уравнения

Описание

Использовать eqnproblem чтобы создать задачу уравнения.

пример

prob = eqnproblem создает задачу уравнения со свойствами по умолчанию.

пример

prob = eqnproblem(Name,Value) задает дополнительные опции, используя один или несколько аргументы пары "имя-значение". Для примера можно задать уравнения при построении задачи с помощью Equations имя.

Примеры

свернуть все

Решить нелинейную систему уравнений

exp(-exp(-(x1+x2)))=x2(1+x12)x1cos(x2)+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;

Смотрите Поддерживаемые Операции над Переменными Оптимизации и Выражениями и Преобразование Нелинейной Функции в Выражение Оптимизации.

Когда x является матрицей 2 на 2, уравнение

x3=[1234]

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

Сначала задайте переменную x как матричная переменная 2 на 2.

x = optimvar('x',2,2);

Определите уравнение, которое будет решаться в терминах x.

eqn = x^3 == [1 2;3 4];

Создайте задачу уравнения с этим уравнением.

prob = eqnproblem('Equations',eqn);

Решите задачу, начиная с точки [1 1;1 1].

x0.x = ones(2);
sol = 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: [2x2 double]

Исследуйте решение.

disp(sol.x)
   -0.1291    0.8602
    1.2903    1.1612

Отображение куба решения.

sol.x^3
ans = 2×2

    1.0000    2.0000
    3.0000    4.0000

Входные параметры

свернуть все

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: prob = eqnproblem('Equations',eqn)

Уравнения задачи, заданные как OptimizationEquality массив или структура с OptimizationEquality массивы как поля.

Пример: sum(x.^2,2) == 4

Метка задачи, заданная как строковый или символьный вектор. Программное обеспечение не использует Description для расчетов. Description является произвольной меткой, которую можно использовать по любой причине. Например, вы можете делиться, архивировать, или представлять модель или задачу, и хранить описательную информацию о модели или проблеме в Description.

Пример: "An iterative approach to the Traveling Salesman problem"

Типы данных: char | string

Выходные аргументы

свернуть все

Задача уравнения, возвращенная как EquationProblem объект. Как правило, чтобы завершить описание задачи, вы задаете prob.Equations и, для нелинейных уравнений, начальную точечную структуру. Решите полную задачу, позвонив solve.

Предупреждение

Основанный на проблеме подход не поддерживает комплексные числа в целевой функции, нелинейных равенствах и нелинейных неравенствах. Если при вычислении функции встретится комплексное число, даже как промежуточное значение, конечный результат может оказаться неправильным.

Введенный в R2019b