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[сигма - b / (3*a) - (c / (3*a) - b^2 / (9*a^2)) / сигма; (c / (3*a) - b^2 / (9*a^2)) / (sym (2) *sigma) - b / (3*a) - сигма/2 - (sqrt (sym (3)) * (сигма + (c / (3*a) - b^2 / (9*a^2)) / сигма) *sym (1i))/2; (c / (3*a) - b^2 / (9*a^2)) / (sym (2) *sigma) - b / (3*a) - сигма/2 + (sqrt (sym (3)) * (сигма + (c / (3*a) - b^2 / (9*a^2)) / сигма) *sym (1i))/2]

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^2)) ^sym (1/3)

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

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

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