subexpr

Переписать символьное выражение в терминах общих подэкспрессий

Описание

пример

[r,sigma] = subexpr(expr) переписывает символическое выражение expr в терминах общей подэкспрессии, подстановки этой общей подэкспрессии символьной переменной sigma. Входное выражение expr не может содержать переменную sigma.

пример

[r,var] = subexpr(expr,'var') подставляет общую подэкспрессию на var. Входное выражение expr не может содержать символьную переменную var.

пример

[r,var] = subexpr(expr,var) эквивалентно [r,var] = subexpr(expr,'var'), за исключением того, что символическая переменная var должен уже существовать в MATLAB® рабочей области.

Этот синтаксис перезаписывает значение переменной var с общей подэкспрессией, найденной в expr. Чтобы избежать перезаписи значения varиспользуйте другое имя переменной в качестве второго выходного аргумента. Для примера используйте [r,var1] = subexpr(expr,var).

Примеры

свернуть все

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

syms a b c d x
solutions = solve(a*x^3 + b*x^2 + c*x + d == 0, x, 'MaxDegree', 3);

Эти длинные выражения имеют общие подэкспрессии. Чтобы сократить выражения, сокращаем общую подэкспрессию при помощи subexpr. Если вы не задаете переменную, которую нужно использовать для сокращений, в качестве второго входного параметра subexpr, затем subexpr использует переменную sigma.

[r, sigma] = subexpr(solutions)
r = 

(σ-b3a-σ2σσ22σ-b3a-σ2-σ1σ22σ-b3a-σ2+σ1)where  σ1=3σ+σ2σi2  σ2=c3a-b29a2[sigma - b/( 3 * a) - (c/( 3 * a) - b ^ 2/( 9 * a ^ 2) )/sigma; (c/( 3 * a) - b ^ 2/( 9 * a ^ 2) )/( sym (2) * sigma) - b/( 3 * a) - sigma/2 - (sqrt (sym (3)) * (sigma + (c/( 3 * a) - b ^ 2/( 9 * a ^ 2) )/sigma) * sym (1i) (c/( 3 * a) - b ^ 2/( 9 * a ^ 2) )/( sym (2) * sigma) - b/( 3 * a) - sigma/2 + (sqrt (sym (3)) * (sigma + (c/( 3 * a) - b ^ 2/( 9 * a ^ 2) )/sigma) * sym (1i)

sigma = 

d2a+b327a3-bc6a22+c3a-b29a23-b327a3-d2a+bc6a21/3(sqrt ((d/( 2 * a) + b ^ 3/( 27 * a ^ 3) - (b * c )/( 6 * a ^ 2)) ^ 2 + (c/( 3 * a) - b ^ 2/( 9 * a ^ 2) ^ 3) - b ^ 3/( 27 * a ^ 3) - d/( 2 * a) + (b * c )/( 6 * a

Решить квадратичное уравнение.

syms a b c x
solutions = solve(a*x^2 + b*x + c == 0, x)
solutions = 

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

Использование syms для создания символьной переменной s, а затем замените общие подэкспрессии в результате на эту переменную.

syms s
[abbrSolutions,s] = subexpr(solutions,s)
abbrSolutions = 

(-b+s2a-b-s2a)[- (b + s )/( 2 * a); - (b - s )/( 2 * a)]

s = b2-4acsqrt (b ^ 2 - 4 * a * c)

Кроме того, используйте 's' для задания переменного сокращения.

[abbrSolutions,s] = subexpr(solutions,'s')
abbrSolutions = 

(-b+s2a-b-s2a)[- (b + s )/( 2 * a); - (b - s )/( 2 * a)]

s = b2-4acsqrt (b ^ 2 - 4 * a * c)

Оба синтаксиса перезаписывают значение переменной s с общей подэкспрессией. Поэтому вы не можете, например, заменить s с некоторым значением.

subs(abbrSolutions,s,0)
ans = 

(-b+s2a-b-s2a)[- (b + s )/( 2 * a); - (b - s )/( 2 * a)]

Чтобы избежать перезаписи значения переменной sиспользуйте другое имя переменной для второго выходного аргумента.

syms s
[abbrSolutions,t] = subexpr(solutions,'s')
abbrSolutions = 

(-b+s2a-b-s2a)[- (b + s )/( 2 * a); - (b - s )/( 2 * a)]

t = b2-4acsqrt (b ^ 2 - 4 * a * c)
subs(abbrSolutions,s,0)
ans = 

(-b2a-b2a)[-b/( 2 * a); -b/( 2 * a)]

Входные параметры

свернуть все

Длинное выражение, содержащее общие подэкспрессии, заданное как символьное выражение или функция.

Переменная, используемая для подстановки общих подэкспрессий, заданная как вектор символов или символьная переменная.

subexpr выдает ошибку, если входное выражение expr уже содержит var.

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

свернуть все

Выражение с общими подэкспрессиями, замененными сокращениями, возвращается как символьное выражение или функция.

Переменная, используемая для сокращений, возвращенная как символьная переменная.

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