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 - 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])

Найдите другое решение путем прямого вызова числового решателя 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 возвращает логическую единицу (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 возвращает логическую единицу (true), подразумевать, что 4 допустимое значение для k. Замена k с 4, чтобы получить решение для x. Используйте vpa получить числовое приближение.

valx = subs(solx,parameters,4)
valx = 4π4*sym (пи)
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 положительное вещественное число. Поэтому решения, найденные в этом режиме, должны быть проверены.

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))[корень (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 (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 (пи)/6; (5*sym (пи))/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:

      ) c = a c · b c.

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

      (a b) c = a b · c.

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

    • журнал (e x) = x

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

    • asinh (sinh (x)) = x, acosh (дубинка (x)) = x, atanh (tanh (x)) = x

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

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

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

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