Создайте задачу уравнения
Использовать eqnproblem
чтобы создать задачу уравнения.
Совет
Полный рабочий процесс смотрите в Основанный на проблеме Рабочий процесс для Решения Уравнений.
задает дополнительные опции, используя один или несколько аргументы пары "имя-значение". Для примера можно задать уравнения при построении задачи с помощью prob
= eqnproblem(Name,Value
)Equations
имя.
Решить нелинейную систему уравнений
используя основанный на проблеме подход, сначала определите 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, уравнение
является системой полиномиальных уравнений. Вот, средства использование матричного умножения. Вы можете легко сформулировать и решить эту систему, используя основанный на проблеме подход.
Сначала задайте переменную 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)
'Equations'
- Уравнения задачи[]
(по умолчанию) | OptimizationEquality
массив | структура с OptimizationEquality
массивы как поляУравнения задачи, заданные как OptimizationEquality
массив или структура с OptimizationEquality
массивы как поля.
Пример: sum(x.^2,2) == 4
'Description'
- Метка задачи''
(по умолчанию) | строку | вектор символовМетка задачи, заданная как строковый или символьный вектор. Программное обеспечение не использует Description
для расчетов. Description
является произвольной меткой, которую можно использовать по любой причине. Например, вы можете делиться, архивировать, или представлять модель или задачу, и хранить описательную информацию о модели или проблеме в Description
.
Пример: "An iterative approach to the Traveling Salesman problem"
Типы данных: char
| string
prob
- Задача уравненияEquationProblem
объектЗадача уравнения, возвращенная как EquationProblem
объект. Как правило, чтобы завершить описание задачи, вы задаете prob.Equations
и, для нелинейных уравнений, начальную точечную структуру. Решите полную задачу, позвонив solve
.
Предупреждение
Основанный на проблеме подход не поддерживает комплексные числа в целевой функции, нелинейных равенствах и нелинейных неравенствах. Если при вычислении функции встретится комплексное число, даже как промежуточное значение, конечный результат может оказаться неправильным.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.