exponenta event banner

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