exponenta event banner

решить

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

Поддержка ввода символьного вектора или строки удалена. Вместо этого используйте syms объявить переменные и заменить входные данные, такие как solve('2*x == 1','x') с solve(2*x == 1,x).

Описание

пример

S = solve(eqn,var) решает уравнение eqn для переменной var. Если не указать var, symvar функция определяет переменную для решения. Например, solve(x + 1 == 2, x) решает уравнение x + 1 = 2 для x.

пример

S = solve(eqn,var,Name,Value) использует дополнительные параметры, указанные одним или несколькими Name,Value аргументы пары.

пример

Y = solve(eqns,vars) решает систему уравнений eqns для переменных vars и возвращает структуру, содержащую решения. Если не указать vars, solve использование symvar для поиска переменных для решения. В этом случае количество переменных, которые symvar поиск равен числу уравнений eqns.

пример

Y = solve(eqns,vars,Name,Value) использует дополнительные параметры, указанные одним или несколькими Name,Value аргументы пары.

пример

[y1,...,yN] = solve(eqns,vars) решает систему уравнений eqns для переменных vars. Решения присваиваются переменным. y1,...,yN. Если переменные не указаны, solve использование symvar для поиска переменных для решения. В этом случае количество переменных, которые symvar поиск равен количеству выходных аргументов N.

[y1,...,yN] = solve(eqns,vars,Name,Value) использует дополнительные параметры, указанные одним или несколькими Name,Value аргументы пары.

пример

[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true) возвращает дополнительные аргументы parameters и conditions , которые определяют параметры в решении и условия в решении.

Примеры

свернуть все

Решите квадратичное уравнение без указания переменной для решения. solve выбирает x для возврата решения.

syms a b c x
eqn = a*x^2 + b*x + c == 0
eqn = ax2+bx+c=0a*x^2 + b*x + c == 0
S = solve(eqn)
S = 

(-b+b2-4ac2a-b-b2-4ac2a)[-(b + sqrt(b^2 - 4*a*c))/(2*a); -(b - sqrt(b^2 - 4*a*c))/(2*a)]

Укажите переменную для решения и решите квадратичное уравнение для a.

Sa = solve(eqn,a)
Sa = 

-c+bxx2-(c + b*x)/x^2

Решите полином пятой степени. У него есть пять решений.

syms x
eqn = x^5 == 3125;
S = solve(eqn,x)
S = 

(5-σ1-54-525-5i4-σ1-54+525-5i4σ1-54-525+5i4σ1-54+525+5i4)where  σ1=554[sym(5); - (5*sqrt(sym(5)))/4 - sym(5/4) - (5*sqrt(sym(2))*sqrt(5 - sqrt(sym(5)))*sym(1i))/4; - (5*sqrt(sym(5)))/4 - sym(5/4) + (5*sqrt(sym(2))*sqrt(5 - sqrt(sym(5)))*sym(1i))/4; (5*sqrt(sym(5)))/4 - sym(5/4) - (5*sqrt(sym(2))*sqrt(sqrt(sym(5)) + 5)*sym(1i))/4; (5*sqrt(sym(5)))/4 - sym(5/4) + (5*sqrt(sym(2))*sqrt(sqrt(sym(5)) + 5)*sym(1i))/4]

Возвращайте только реальные решения с помощью настройки 'Real' опция для true. Единственным реальным решением этого уравнения является 5.

S = solve(eqn,x,'Real',true)
S = 5sym(5)

Когда solve не может символически решить уравнение, он пытается найти числовое решение, используя vpasolve. vpasolve функция возвращает первое найденное решение.

Попробуйте решить следующее уравнение. solve возвращает числовое решение, поскольку не может найти символьное решение.

syms x
eqn = sin(x) == x^2 - 1;
S = solve(eqn,x)
Warning: Unable to solve symbolically. Returning a numeric solution using <a href="matlab:web(fullfile(docroot, 'symbolic/vpasolve.html'))">vpasolve</a>.
S = -0.63673265080528201088799090383828-vpa('0.63673265080528201088799090383828')

Постройте график левой и правой частей уравнения. Обратите внимание, что уравнение также имеет положительное решение.

fplot([lhs(eqn) rhs(eqn)], [-2 2])

Figure contains an axes. The axes contains 2 objects of type functionline.

Поиск другого решения путем непосредственного вызова числового решателя vpasolve и определение интервала.

V = vpasolve(eqn,x,[0 2])
V = 1.4096240040025962492355939705895vpa('1.4096240040025962492355939705895')

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

Решите систему уравнений, чтобы вернуть решения в структурном массиве.

syms u v
eqns = [2*u + v == 0, u - v == 1];
S = solve(eqns,[u v])
S = struct with fields:
    u: [1x1 sym]
    v: [1x1 sym]

Получите доступ к решениям, обратившись к элементам структуры.

S.u
ans = 

13sym(1/3)

S.v
ans = 

-23-sym(2/3)

Использование структурного массива позволяет удобно подставлять решения в другие выражения.

Используйте subs функция замены решений S в другие выражения.

expr1 = u^2;
e1 = subs(expr1,S)
e1 = 

19sym(1/9)

expr2 = 3*v + u;
e2 = subs(expr2,S)
e2 = 

-53-sym(5/3)

Если solve возвращает пустой объект, тогда решения не существуют.

eqns = [3*u+2, 3*u+1];
S = solve(eqns,u)
 
S =
 
Empty sym: 0-by-1
 

solve функция может решать неравенства и возвращать решения, которые удовлетворяют неравенствам. Устраните следующие неравенства.

x > 0

y > 0

x2 + y2 + xy < 1

Набор 'ReturnConditions' кому true для возврата любых параметров в решении и условий в решении.

syms x y
eqn1 = x > 0;
eqn2 = y > 0;
eqn3 = x^2 + y^2 + x*y < 1;
eqns = [eqn1 eqn2 eqn3];

S = solve(eqns,[x y],'ReturnConditions',true);
S.x
ans = 

u-3v22-v2sqrt(u - 3*v^2)/2 - v/2

S.y
ans = vv
S.parameters
ans = (uv)[u, v]
S.conditions
ans = 4v2<uu<40<v4*v^2 < u&u < 4&0 < v

Параметры u и v не существуют в рабочей области MATLAB ® и должны быть доступны с помощьюS.parameters.

Проверьте, есть ли значения u = 7/2 и v = 1/2 выполнить условие, используя subs и isAlways.

condWithValues = subs(S.conditions, S.parameters, [7/2,1/2]);
isAlways(condWithValues)
ans = logical
   1

isAlways возвращает логический 1 (true), указывая, что эти значения удовлетворяют условию. Заменить эти значения параметров на S.x и S.y чтобы найти решение для x и y.

xSol = subs(S.x, S.parameters, [7/2,1/2])
xSol = 

114-14sqrt(sym(11))/4 - sym(1/4)

ySol = subs(S.y, S.parameters, [7/2,1/2])
ySol = 

12sym(1/2)

Решите систему уравнений.

2u2+v2=0

u-v = 1

При решении нескольких переменных порядок, в котором задаются переменные, определяет порядок, в котором решатель возвращает решения. Назначение решений переменным solv и solu путем явного указания переменных. Решатель возвращает массив решений для каждой переменной.

syms u v
eqns = [2*u^2 + v^2 == 0, u - v == 1];
vars = [v u];
[solv, solu] = solve(eqns,vars)
solv = 

(-23-2i3-23+2i3)[- sym(2/3) - (sqrt(sym(2))*sym(1i))/3; - sym(2/3) + (sqrt(sym(2))*sym(1i))/3]

solu = 

(13-2i313+2i3)[sym(1/3) - (sqrt(sym(2))*sym(1i))/3; sym(1/3) + (sqrt(sym(2))*sym(1i))/3]

Записи с одинаковым индексом образуют пару решений.

solutions = [solv solu]
solutions = 

(-23-2i313-2i3-23+2i313+2i3)[- sym(2/3) - (sqrt(sym(2))*sym(1i))/3, sym(1/3) - (sqrt(sym(2))*sym(1i))/3; - sym(2/3) + (sqrt(sym(2))*sym(1i))/3, sym(1/3) + (sqrt(sym(2))*sym(1i))/3]

Возврат полного решения уравнения с параметрами и условиями решения путем задания 'ReturnConditions' как true.

Решите уравнение sin (x) = 0. Предоставление двух дополнительных выходных переменных для выходных аргументовparameters и conditions.

syms x
eqn = sin(x) == 0;
[solx,parameters,conditions] = solve(eqn,x,'ReturnConditions',true)
solx = πksym(pi)*k
parameters = kk
conditions = kZin(k, 'integer')

Решение ¼ k содержит параметр k, где k должно быть целым числом. Переменная k не существует в рабочей области MATLAB и должна быть доступна с помощью parameters.

Ограничьте решение 0 < x < 2δ. Найдите допустимое значение k для этого ограничения. Предположим условие ,conditionsи использовать solve чтобы найти k. Замените значение k, найденное в растворе, на x.

assume(conditions)
restriction = [solx > 0, solx < 2*pi];
solk = solve(restriction,parameters)
solk = 1sym(1)
valx = subs(solx,parameters,solk)
valx = πsym(pi)

Либо определите решение для x, выбрав значение k. Проверьте, удовлетворяет ли выбранное значение условию на k с помощью isAlways.

Проверьте, удовлетворяет ли k = 4 условию на k.

condk4 = subs(conditions,parameters,4);
isAlways(condk4)
ans = logical
   1

isAlways возвращает логический 1 (true), что означает, что 4 является допустимым значением для k. Заменить k на 4, чтобы получить раствор для x. Используйте vpa для получения числового приближения.

valx = subs(solx,parameters,4)
valx = 4π4*sym(pi)
vpa(valx)
ans = 12.566370614359172953850573533118vpa('12.566370614359172953850573533118')

Решите уравнение exp (log (x) log (3x)) = 4.

По умолчанию solve не применяет упрощения, недопустимые для всех значений x. В этом случае решатель не предполагает, что x является положительным вещественным числом, поэтому не применяет логарифмический журнал идентичности (3x) = log (3) + log (x). В результате,solve не может решить уравнение символически.

syms x
eqn = exp(log(x)*log(3*x)) == 4;
S = solve(eqn,x)
Warning: Unable to solve symbolically. Returning a numeric solution using <a href="matlab:web(fullfile(docroot, 'symbolic/vpasolve.html'))">vpasolve</a>.
S = -14.009379055223370038369334703094-2.9255310052111119036668717988769i- vpa('14.009379055223370038369334703094') - vpa('2.9255310052111119036668717988769i')

Набор 'IgnoreAnalyticConstraints' кому true для применения правил упрощения, которые могут позволить solve чтобы найти решение. Дополнительные сведения см. в разделе Алгоритмы.

S = solve(eqn,x,'IgnoreAnalyticConstraints',true)
S = 

(3e-log(256)+log(3)2233elog(256)+log(3)223)[(sqrt(sym(3))*exp((-sqrt(log(sym(256)) + log(sym(3))^2)/2)))/3; (sqrt(sym(3))*exp((sqrt(log(sym(256)) + log(sym(3))^2)/2)))/3]

solve применяет упрощения, позволяющие решателю найти решение. Математические правила, применяемые при выполнении упрощений, не всегда действительны в целом. В этом примере решатель применяет логарифмические тождества с предположением, что x является положительным вещественным числом. Поэтому решения, найденные в этом режиме, должны быть проверены.

sym и syms функции позволяют задавать допущения для символьных переменных.

Предположим, что переменная x является положительным.

syms x positive

При решении уравнения для переменной в предположениях решатель возвращает только решения, согласующиеся с допущениями. Решить это уравнение для x.

eqn = x^2 + 5*x - 6 == 0;
S = solve(eqn,x)
S = 1sym(1)

Разрешить решения, которые не удовлетворяют допущениям, путем установки 'IgnoreProperties' кому true.

S = solve(eqn,x,'IgnoreProperties',true)
S = 

(-61)[-sym(6); sym(1)]

Для дальнейших вычислений очистите предположение, установленное для переменной x путем его повторного создания с использованием syms.

syms x

При решении уравнения полинома решатель может использовать root для возврата решений. Решите полином третьей степени.

syms x a
eqn = x^3 + x^2 + a == 0;
solve(eqn, x)
ans = 

(root(z3+z2+a,z,1)root(z3+z2+a,z,2)root(z3+z2+a,z,3))[root(z^3 + z^2 + a, z, 1); root(z^3 + z^2 + a, z, 2); root(z^3 + z^2 + a, z, 3)]

Попробуйте получить явное решение для таких уравнений, вызвав решатель с 'MaxDegree'. Опция задает максимальную степень полиномов, для которых решатель пытается вернуть явные решения. Значение по умолчанию: 2. Увеличивая это значение, можно получить явные решения для полиномов более высокого порядка.

Решите те же уравнения для явных решений, увеличив значение 'MaxDegree' кому 3.

S = solve(eqn, x, 'MaxDegree', 3)
S = 

(19σ1+σ1-13-118σ1-σ12-13-319σ1-σ1i2-118σ1-σ12-13+319σ1-σ1i2)where  σ1=a2+1272-1729-a2-1271/3[1/(9*(sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3)) + (sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3) - sym(1/3); - 1/(18*(sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3)) - (sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3)/2 - sym(1/3) - (sqrt(sym(3))*(1/(9*(sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3)) - (sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3))*sym(1i))/2; - 1/(18*(sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3)) - (sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3)/2 - sym(1/3) + (sqrt(sym(3))*(1/(9*(sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3)) - (sqrt((a/2 + sym(1/27))^2 - sym(1/729)) - a/2 - sym(1/27))^sym(1/3))*sym(1i))/2]

Решите уравнение sin (x) + cos (2x) = 1.

Вместо возврата бесконечного набора периодических решений решатель выбирает три решения, которые он считает наиболее практичными.

syms x
eqn = sin(x) + cos(2*x) == 1;
S = solve(eqn,x)
S = 

(0π65π6)[sym(0); sym(pi)/6; (5*sym(pi))/6]

Выберите только одно решение с помощью параметра 'PrincipalValue' кому true.

S1 = solve(eqn,x,'PrincipalValue',true)
S1 = 0sym(0)

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

свернуть все

Решаемое уравнение, определяемое как символическое выражение или символическое уравнение. Оператор отношения == определяет символические уравнения. Если eqn является символическим выражением (без правой стороны), решатель предполагает, что правая сторона равна 0, и решает уравнение eqn == 0.

Переменная, для которой решается уравнение, заданное как символьная переменная. По умолчанию solve использует переменную, определенную symvar.

Система уравнений, обозначаемая как символические выражения или символические уравнения. Если какие-либо элементы eqns - символические выражения (без правой стороны), solve приравнивает элемент к 0.

Переменные, для которых решается уравнение или система уравнений, заданная как символьные переменные. По умолчанию solve использует переменные, определенные symvar.

Порядок, в котором задаются эти переменные, определяет порядок, в котором решатель возвращает решения.

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

Пример: 'Real',true указывает, что решатель возвращает реальные решения.

Флаг для возврата только реальных решений, указанный как разделенная запятыми пара, состоящая из 'Real' и одно из этих значений.

falseВерните все решения.
trueВозвращает только те решения, для которых каждое подэкспрессию исходного уравнения представляет вещественное число. Эта опция также предполагает, что все символические параметры уравнения представляют вещественные числа.

См. раздел Решение полиномных и возвращаемых реальных решений.

Флаг возврата параметров в решении и условий, при которых решение истинно, определяемый как разделенная запятыми пара, состоящая из 'ReturnConditions' и одно из этих значений.

falseНе возвращайте параметризованные решения и условия, в которых они находятся. solve функция заменяет параметры соответствующими значениями.
trueВерните параметры решения и условия, в которых оно находится. Для вызова с одной выходной переменной: solve возвращает структуру с полями parameters и conditions. Для нескольких выходных переменных: solve присваивает параметры и условия двум последним выходным переменным. Это поведение означает, что число выходных переменных должно быть равно числу переменных для решения для плюс двух.

См. раздел Устранение неравенства.

Пример: [v1, v2, params, conditions] = solve(sin(x) +y == 0,y^2 == 3,'ReturnConditions',true) возвращает параметры в params и условия в conditions.

Правила упрощения, применяемые к выражениям и уравнениям, указанным как разделенная запятыми пара, состоящая из 'IgnoreAnalyticConstraints' и одно из этих значений.

falseИспользуйте строгие правила упрощения.
trueПримените чисто алгебраические упрощения к выражениям и уравнениям. Настройка IgnoreAnalyticConstraints кому true может дать вам более простые решения, которые могут привести к результатам, которые обычно недействительны. Другими словами, эта опция применяет математические идентичности, которые удобны, но результаты могут иметь место не для всех возможных значений переменных. В некоторых случаях это также позволяет solve для решения уравнений и систем, которые не могут быть решены иначе.

См. раздел Сокращение результата с помощью правил упрощения.

Флаг возврата решений, несовместимых со свойствами переменных, указанный как пара, разделенная запятыми, состоящая из 'IgnoreProperties' и одно из этих значений.

falseНе включайте решения, несовместимые со свойствами переменных.
trueВключить решения, несовместимые со свойствами переменных.

См. раздел Игнорировать допущения для переменных.

Максимальная степень полиномиальных уравнений, для которых решатель использует явные формулы, заданные как положительное целое число меньше 5. Решатель не использует явные формулы, включающие радикалы при решении полиномиальных уравнений степени, превышающей заданное значение.

См. раздел Решение полиномиальных уравнений высокой степени.

Флаг возврата одного решения, указанный как пара, разделенная запятыми, состоящая из 'PrincipalValue' и одно из этих значений.

falseВерните все решения.
trueВерните только одно решение. Если уравнение или система уравнений не имеют решения, решатель возвращает пустой символический объект.

См. раздел Возврат одного решения.

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

свернуть все

Решения уравнения, возвращаемого в виде символьного массива. Размер символьного массива соответствует числу решений.

Решения системы уравнений, возвращаемые в виде структуры. Количество полей в структуре соответствует количеству независимых переменных в системе. Если 'ReturnConditions' имеет значение true, solve функция возвращает два дополнительных поля, которые содержат параметры в решении, и условия, при которых решение истинно.

Решения системы уравнений, возвращаемые как символические переменные. Количество выходных переменных или символьных массивов должно быть равно количеству независимых переменных в системе. Если явно указать независимые переменные vars, то решатель использует тот же порядок для возврата решений. Если не указать vars, панель инструментов сортирует независимые переменные в алфавитном порядке, а затем назначает решения для этих переменных выходным переменным.

Параметры в решении, возвращаемые как вектор сгенерированных параметров. Этот выходной аргумент возвращается только в том случае, если ReturnConditions является true. Если указан один выходной аргумент, parameters возвращается как поле структуры. Если предусмотрено несколько выходных аргументов, parameters возвращается в качестве выходного аргумента «» второй-последний «». Сгенерированные параметры не отображаются в рабочей области MATLAB ®. Доступ к ним должен осуществляться с помощьюparameters.

Пример: [solx, params, conditions] = solve(sin(x) == 0, 'ReturnConditions', true) возвращает параметр k в аргументе params.

Условия, при которых решения являются допустимыми, возвращаются как вектор символьных выражений. Этот выходной аргумент возвращается только в том случае, если ReturnConditions является true. Если указан один выходной аргумент, conditions возвращается как поле структуры. Если предусмотрено несколько выходных аргументов, conditions возвращается в качестве последнего выходного аргумента.

Пример: [solx, params, conditions] = solve(sin(x) == 0, 'ReturnConditions', true) возвращает условие in(k, 'integer') в conditions. Решение в solx действителен только при этом условии.

Совет

  • Если solve не может найти решение и ReturnConditions является false, solve функция внутри вызывает числовой решатель vpasolve пытается найти числовое решение. Для полиномиальных уравнений и систем без символьных параметров числовой решатель возвращает все решения. Для неполиномиальных уравнений и систем без символьных параметров числовой решатель возвращает только одно решение (если решение существует).

  • Если solve не может найти решение и ReturnConditions является true, solve возвращает пустое решение с предупреждением. Если решения отсутствуют, solve возвращает пустое решение без предупреждения.

  • Если решение содержит параметры и ReturnConditions является true, solve возвращает параметры в решении и условия, при которых решения являются истинными. Если ReturnConditions является false, solve функция либо выбирает значения параметров и возвращает соответствующие результаты, либо возвращает параметризованные решения без выбора конкретных значений. В последнем случае: solve также выдает предупреждение, указывающее значения параметров в возвращаемых решениях.

  • Если параметр не появляется ни в одном из условий, это означает, что параметр может принимать любое комплексное значение.

  • Выходные данные solve может содержать параметры из входных уравнений в дополнение к параметрам, введенным solve.

  • Параметры, вводимые solve не отображаются в рабочей области MATLAB. Доступ к ним должен осуществляться с помощью выходного аргумента, который их содержит. Либо используйте параметры в рабочей области MATLAB. syms для инициализации параметра. Например, если параметр имеет значение k, использовать syms k.

  • Имена переменных parameters и conditions не допускаются в качестве входных данных для solve.

  • Для решения дифференциальных уравнений используйте dsolve функция.

  • При решении системы уравнений всегда присваивайте результат выходным аргументам. Выходные аргументы позволяют получить доступ к значениям решений системы.

  • MaxDegree принимает только положительные целые числа, меньшие 5, потому что, в общем, нет явных выражений для корней многочленов степеней выше 4.

  • Выходные переменные y1,...,yN не указывайте переменные, для которых solve решает уравнения или системы. Если y1,...,yN являются переменными, которые появляются в eqns, то нет гарантии, что solve(eqns) назначит решения y1,...,yN с использованием правильного порядка. Таким образом, когда вы бежите [b,a] = solve(eqns), вы можете получить решения для a присвоен b и наоборот.

    Чтобы обеспечить порядок возвращаемых решений, укажите переменные. vars. Например, вызов [b,a] = solve(eqns,b,a) назначает решения для a кому a и решения для b кому b.

Алгоритмы

При использовании IgnoreAnalyticConstraintsрешатель применяет эти правила к выражениям с обеих сторон уравнения.

  • log (a) + log ( b) = log (a· b) для всех значений a и b. В частности, следующее равенство справедливо для всех значений a, b и c:

      (a· b) c = ac· bc.

  • log (ab ) = log (a) для всех значений a и b. В частности, следующее равенство справедливо для всех значений a, b и c:

      (ab)  c = ab· c.

  • Если f и g являются стандартными математическими функциями и f (g (x )) = x для всех малых положительных чисел,   предполагается, что f (g (x)) = x является действительным для всех комплексных значений x. В частности:

    • log (ex ) = x

    • asin (sin (x )) = x, acos (cos (x )) = x, atan ( tan (x)) = x

    • asinh (sinh (x )) = x, acosh (cosh (x )) = x, atanh (tanh  (x)) = x

    • Wk (x·  ex) = x для всех индексов ветви k функции Ламберта W.

  • Решатель может умножать обе стороны уравнения на любое выражение, кроме 0.

  • Решения полиномиальных уравнений должны быть полными.

Представлен до R2006a