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.4069e-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