solve

Уравнения и системный решатель

Поддержка вектора символов или строки входов была удалена. Вместо этого используйте 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 - syrt (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. The 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')

При решении для нескольких переменных может быть удобнее хранить выходы в массиве структур, чем в отдельных переменных. The 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-сым (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-сым (5/3)

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

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

The 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 (sym (

Верните полное решение уравнения с параметрами и условиями решения путем определения '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 является положительным вещественным числом, поэтому не применяет логарифмический тождества log(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 (журнал (sym (256))) + журнал (sym (3)) ^ 2 )/2) )/3; (sqrt (sym (3)) * exp ((sqrt (журнал (sym (256))) + журнал (sym (3)) ^ 2 )/2) )/3]

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

The 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)[-сим (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))[корень (z ^ 3 + z ^ 2 + a, z, 1); корень (z ^ 3 + z ^ 2 + a, z, 2); корень (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 (

Решите уравнение 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решатель применяет эти правила к выражениям с обеих сторон уравнения.

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

      (a · b)c = ac· bc.

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

      (ab)c = ab·c.

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

    • журнал (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

    • W k (x· ex) = x для всех индексов ветви k функции Lambert W.

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

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

Представлено до R2006a
Для просмотра документации необходимо авторизоваться на сайте