eqnproblem

Создайте проблему уравнения

Описание

пример

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

пример

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

Примеры

свернуть все

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

exp(-exp(-(x1+x2)))=x2(1+x12)x1потому что(x2)+x2sin(x1)=12

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

x = optimvar('x',2);

Создайте левую сторону первого уравнения. Поскольку эта сторона не является полиномиальной или рациональной функцией, обработайте это выражение в выражение оптимизации при помощи fcn2optimexpr.

ls1 = fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2)))),x);

Создайте первое уравнение.

eq1 = ls1 == x(2)*(1 + x(1)^2);

Точно так же создайте левую сторону второго уравнения при помощи fcn2optimexpr.

ls2 = fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin(x(1)),x);

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

eq2 = ls2 == 1/2;

Создайте проблему уравнения и поместите уравнения в проблему.

prob = eqnproblem;
prob.Equations.eq1 = eq1;
prob.Equations.eq2 = eq2;

Рассмотрите проблему.

show(prob)
  EquationProblem : 

	Solve for:
       x


 eq1:
       arg_LHS == (x(2) .* (1 + x(1).^2))

       where:

         anonymousFunction1 = @(x)exp(-exp(-(x(1)+x(2))));
         arg_LHS = anonymousFunction1(x);

 eq2:
       arg_LHS == 0.5

       where:

         anonymousFunction2 = @(x)x(1)*cos(x(2))+x(2)*sin(x(1));
         arg_LHS = anonymousFunction2(x);

Решите задачу, начинающую с точки [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

Когда 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.

<stopping criteria details>
sol = struct with fields:
    x: [2×2 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