Решение параметрических уравнений в режиме ReturnConditions

Этот пример показывает, как решить параметризованные алгебраические уравнения с помощью Symbolic Math Toolbox.

Чтобы решить алгебраические уравнения символически, используйте solve функция. Функция solve может предоставить полную информацию обо всех решениях уравнения, даже если их бесконечно много, путем введения параметризации. Он также может предоставить информацию, при каких условиях эти решения действительны. Чтобы получить эту информацию, установите значение опции ReturnConditions равным true.

Решить уравнение sin(C*x) = 1. Задайте x как переменная, для которой необходимо решить. The solve указатели на функцию C как константа. Предоставьте три выходные переменные для решения, вновь сгенерированные параметры в решении и условия для решения.

syms C x
eq = sin(C*x) == 1;
[solx, params, conds] = solve(eq, x, 'ReturnConditions', true)
solx = 

π2+2πkC(sym (pi )/2 + 2 * sym (pi) * k )/C

params = kk
conds = kZC0in (k, 'integer') & C ~ = 0

Чтобы проверить решение, замените решение в уравнение с помощью subs. Для работы в соответствии с допущениями в conds в остальной части этого примера используйте assume. Протестируйте решение с помощью isAlways. The isAlways функция возвращает логический 1 (true) указывая, что решение всегда держится при заданных допущениях.

SolutionCorrect = subs(eq, x, solx)
SolutionCorrect = 

sin(π2+2πk)=1sin (sym (pi )/2 + 2 * sym (pi) * k) = = 1

assume(conds)
isAlways(SolutionCorrect)
ans = logical
   1

Чтобы получить одно решение из бесконечно многих решений, найдите значение параметров params путем решения условий conds для параметров; не задавать опцию ReturnConditions. Замените это значение k в решение с помощью subs для получения решения из набора решений.

k0 = solve(conds, params)
k0 = 0sym (0)
subs(solx, params, k0)
ans = 

π2Csym (pi )/( 2 * C)

Чтобы получить значение параметров, которое удовлетворяет определенному условию, добавьте условие ко входу к solve. Найдите значение параметра, больше 99/4 и замените, чтобы найти решение.

k1 = solve([conds, params > 99/4], params)
k1 = 26sym (26)
subs(solx, params, k1)
ans = 

105π2C(105 * sym (pi) )/( 2 * C)

Чтобы найти решение в заданном интервале, можно решить исходное уравнение с неравенствами, которые задают интервал.

[solx1, params1, conds1] = solve([eq, x > 2, x < 7], x, 'ReturnConditions', true)
solx1 = 

π+4πk2C(sym (pi) + 4 * sym (pi) * k )/( 2 * C)

params1 = kk
conds1 = 0<C4C<π+4πkπ+4πk<14CC<0π+4πk<4C14C<π+4πk(0 < C & 4 * C < sym (pi) + 4 * sym (pi) * k & sym (pi) + 4 * sym (pi) * k < 14 * C) | (C < 0 & sym (pi) + 4 * sym (pi) * k < 4 * C & 14 * C < sym (pi) + 4 * sym (

Также можно использовать существующее решение и ограничить его дополнительными условиями. Обратите внимание, что хотя условие изменяется, решение остается неизменным. The solve функция выражает solx и solx1 с различными параметризациями, хотя они и эквивалентны.

[~, ~, conds2] = solve(x == solx, x < 7, x > 2, x, 'ReturnConditions', true)
conds2 = 

4π<4k+1C4k+1C<14π4/sym (pi) < (4 * k + 1 )/C & (4 * k + 1 )/C < 14/sym (pi)

Получите те значения параметров, которые удовлетворяют новому условию, для конкретного значения константы C:

conds3 = subs(conds2, C, 5)
conds3 = 

4π<4k5+154k5+15<14π4/sym (pi) < (4 * k )/5 + sym (1/5) & (4 * k )/5 + sym (1/5) < 14/sym (pi)

solve(conds3, params)
ans = 

(2345)[sym (2); sym (3); sym (4); sym (5)]