Выберите Function to Rearrange Expression

Объедините условия тех же алгебраических структур

Symbolic Math Toolbox™ обеспечивает функцию combine для объединения подвыражений исходного выражения. Функция combine использует математические тождества для функций, которые вы задаете. Например, объедините тригонометрическое выражение.

syms x y
combine(2*sin(x)*cos(x),'sincos')
ans =
sin(2*x)

Если вы не задаете целевую функцию, combine использует тождества для степеней везде, где эти тождества допустимы:

  • a b  ac = a b + c

  • a c  bc = (ab) c

  • (a b) c = a bc

Например, по умолчанию функция комбинирует следующие квадратные корни.

combine(sqrt(2)*sqrt(x))
ans =
(2*x)^(1/2)

Функция не комбинирует эти квадратные корни, потому что идентичность не допустима для отрицательных величин переменных.

combine(sqrt(x)*sqrt(y))
ans =
x^(1/2)*y^(1/2)

Чтобы объединить эти квадратные корни, используйте опцию IgnoreAnalyticConstraints.

combine(sqrt(x)*sqrt(y),'IgnoreanalyticConstraints',true)
ans =
(x*y)^(1/2)

IgnoreAnalyticConstraints обеспечивает ярлык, разрешающий вам объединить выражения под обычно используемыми предположениями о значениях переменных. Также можно установить соответствующие предположения на переменных явным образом. Например, примите, что x и y являются положительными значениями.

assume([x,y],'positive')
combine(sqrt(x)*sqrt(y))
ans =
(x*y)^(1/2)

Для дальнейших вычислений очистите предположения на x и y путем воссоздания их использующий syms.

syms x y

Как целевые функции, combine принимает atan, exp, gamma, int, log, sincos и sinhcosh.

Расширьте выражения

Для элементарных выражений используйте функцию expand, чтобы преобразовать исходное выражение путем умножения сумм продуктов. Эта функция обеспечивает простой способ расширить полиномы.

expand((x - 1)*(x - 2)*(x - 3))
ans =
 x^3 - 6*x^2 + 11*x - 6
expand(x*(x*(x - 6) + 11) - 6)
ans =
x^3 - 6*x^2 + 11*x - 6

Функция также расширяет экспоненциальные и логарифмические выражения. Например, расширьте это выражение, содержащее экспоненциалы.

expand(exp(x + y)*(x + exp(x - y)))
ans =
exp(2*x) + x*exp(x)*exp(y)

Расширьте этот логарифм. Расширение логарифмов не допустимо для типичных комплексных чисел, но это допустимо для положительных значений.

syms a b c positive
expand(log(a*b*c))
ans =
log(a) + log(b) + log(c)

Для дальнейших вычислений очистите предположения.

syms a b c

Также используйте опцию IgnoreAnalyticConstraints при расширении логарифмов.

expand(log(a*b*c),'IgnoreAnalyticConstraints',true)
ans =
log(a) + log(b) + log(c)

expand также работает над тригонометрическими выражениями. Например, расширьте это выражение.

expand(cos(x + y))
ans =
cos(x)*cos(y) - sin(x)*sin(y)

expand использует математические тождества между функциями.

expand(sin(5*x))
ans =
sin(x) - 12*cos(x)^2*sin(x) + 16*cos(x)^4*sin(x)
expand(cos(3*acos(x)))
ans =
4*x^3 - 3*x

expand работает рекурсивно на все подвыражения.

expand((sin(3*x) + 1)*(cos(2*x) - 1))
ans =
2*sin(x) + 2*cos(x)^2 - 10*cos(x)^2*sin(x) + 8*cos(x)^4*sin(x) - 2

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

expand(exp(x + y)*(x + exp(x - y)),'ArithmeticOnly',true)
ans =
exp(x - y)*exp(x + y) + x*exp(x + y)
expand((sin(3*x) + 1)*(cos(2*x) - 1),'ArithmeticOnly',true)
ans =
cos(2*x) - sin(3*x) + cos(2*x)*sin(3*x) - 1

Факторные выражения

Чтобы возвратить все неприводимые факторы выражения, используйте функцию factor. Например, найдите все неприводимые полиномиальные факторы этого многочленного выражения. Результат показывает, что этот полином имеет три корня: x = 1, x = 2 и x = 3.

syms x
factor(x^3 - 6*x^2 + 11*x - 6)
ans =
[ x - 3, x - 1, x - 2]

Если многочленное выражение неприводимо, factor возвращает исходное выражение.

factor(x^3 - 6*x^2 + 11*x - 5)
ans =
x^3 - 6*x^2 + 11*x - 5

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

factor(x^6 + 1)
ans =
[ x^2 + 1, x^4 - x^2 + 1]

Используя другую факторизацию режимы позволяет вам учесть это выражение далее. Например, учтите то же выражение по комплексным числам.

factor(x^6 + 1,'FactorMode','complex')
ans =
[ x + 0.86602540378443864676372317075294 + 0.5i,...
  x + 0.86602540378443864676372317075294 - 0.5i,...
  x + 1.0i,...
  x - 1.0i,...
  x - 0.86602540378443864676372317075294 + 0.5i,...
  x - 0.86602540378443864676372317075294 - 0.5i]

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

factor((log(x)^2 - 1)/(cos(x)^2 - sin(x)^2))
ans =
[ log(x) - 1, log(x) + 1, 1/(cos(x) - sin(x)), 1/(cos(x) + sin(x))]

Используйте factor, чтобы учесть символьные целые числа и символьные рациональные числа.

factor(sym(902834092))
factor(1/sym(210))
ans =
[ 2, 2, 47, 379, 12671]
 
ans =
[ 1/2, 1/3, 1/5, 1/7]

factor также может учесть числа, больше, чем flintmax, что MATLAB® factor не может. Чтобы представлять большое количество точно, поместите номер в кавычки.

factor(sym('41758540882408627201'))
ans =
[ 479001599, 87178291199]

Извлеките подвыражения от выражения

Функция children возвращает подвыражения выражения.

Задайте выражение f с несколькими подвыражениями.

syms x y
f = exp(3*x)*y^3 + exp(2*x)*y^2 + exp(x)*y;

Извлеките подвыражения f при помощи children.

expr = children(f)
expr =
[ y^2*exp(2*x), y^3*exp(3*x), y*exp(x)]

Можно извлечь подвыражения низшего уровня путем вызова children неоднократно на результатах.

Извлеките подвыражения expr(1) путем вызова children неоднократно. Когда вход к children является вектором, вывод является массивом ячеек.

expr1 = children(expr(1))
expr2 = children(expr1)
expr1 =
[ y^2, exp(2*x)]
expr2 =
  1×2 cell array
    {1×2 sym}    {1×1 sym}

Доступ к содержимому массива ячеек expr2 с помощью фигурных скобок.

expr2{1}
expr2{2}
ans =
[ y, 2]
ans =
2*x

Соберите условия с теми же полномочиями

Если математическое выражение содержит условия с теми же степенями заданной переменной или выражения, функция collect реорганизовывает выражение путем группировки таких условий. При вызове collect задайте переменные, которые функция должна рассмотреть как неизвестные. Функция collect рассматривает исходное выражение как полином в заданных неизвестных и группирует коэффициенты с равными степенями. Сгруппируйте условия выражения с равными степенями x.

syms x y z
expr = x*y^4 + x*z + 2*x^3 + x^2*y*z +...
        3*x^3*y^4*z^2 + y*z^2 + 5*x*y*z;
collect(expr, x)
ans =
(3*y^4*z^2 + 2)*x^3 + y*z*x^2 + (y^4 + 5*z*y + z)*x + y*z^2

Сгруппируйте условия того же выражения с равными степенями y.

collect(expr, y)
ans =
(3*x^3*z^2 + x)*y^4 + (x^2*z + 5*x*z + z^2)*y + 2*x^3 + z*x

Сгруппируйте условия того же выражения с равными степенями z.

collect(expr, z)
ans =
(3*x^3*y^4 + y)*z^2 + (x + 5*x*y + x^2*y)*z + 2*x^3 + x*y^4

Если вы не задаете переменные, которые collect должен рассмотреть как неизвестные, функция использует symvar, чтобы определить переменную по умолчанию.

collect(expr)
ans =
(3*y^4*z^2 + 2)*x^3 + y*z*x^2 + (y^4 + 5*z*y + z)*x + y*z^2

Соберите условия выражения относительно нескольких неизвестных путем определения тех неизвестных как вектора.

collect(expr, [y,z])
ans =
3*x^3*y^4*z^2 + x*y^4 + y*z^2 + (x^2 + 5*x)*y*z + x*z + 2*x^3

Перепишите выражения с точки зрения других функций

Чтобы представить выражение с точки зрения конкретной функции, используйте rewrite. Эта функция использует математические тождества между функциями. Например, перепишите выражение, содержащее тригонометрические функции с точки зрения конкретной тригонометрической функции.

syms x
rewrite(sin(x),'tan')
ans =
(2*tan(x/2))/(tan(x/2)^2 + 1)
rewrite(cos(x),'tan')
ans =
-(tan(x/2)^2 - 1)/(tan(x/2)^2 + 1)
rewrite(sin(2*x) + cos(3*x)^2,'tan')
ans =
(tan((3*x)/2)^2 - 1)^2/(tan((3*x)/2)^2 + 1)^2 +...
(2*tan(x))/(tan(x)^2 + 1)

Используйте rewrite , чтобы выразить эти тригонометрические функции с точки зрения показательной функции.

rewrite(sin(x),'exp')
ans =
(exp(-x*1i)*1i)/2 - (exp(x*1i)*1i)/2
rewrite(cos(x),'exp')
ans =
exp(-x*1i)/2 + exp(x*1i)/2

Используйте rewrite , чтобы выразить эти гиперболические функции с точки зрения показательной функции.

rewrite(sinh(x),'exp')
ans =
exp(x)/2 - exp(-x)/2
rewrite(cosh(x),'exp')
ans =
exp(-x)/2 + exp(x)/2

rewrite также выражает обратные гиперболические функции с точки зрения логарифмов.

rewrite(asinh(x),'log')
ans =
log(x + (x^2 + 1)^(1/2))
rewrite(acosh(x),'log')
ans =
log(x + (x - 1)^(1/2)*(x + 1)^(1/2))

Вычислите разложения элементарной дроби выражений

 Функция partfrac возвращает рациональное выражение в форме суммы полинома и рациональных условий. В каждом рациональном термине степень числителя меньше, чем степень знаменателя. Для некоторых выражений partfrac возвращает явно более простые формы.

syms x
n = x^6 + 15*x^5 + 94*x^4 + 316*x^3 + 599*x^2 + 602*x + 247;
d = x^6 + 14*x^5 + 80*x^4 + 238*x^3 + 387*x^2 + 324*x + 108;
partfrac(n/d, x)
ans =
1/(x + 1) + 1/(x + 2)^2 + 1/(x + 3)^3 + 1

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

factor(d)
ans =
[ x + 1, x + 2, x + 2, x + 3, x + 3, x + 3]

Вычислите нормальные формы рациональных выражений

  Функция simplifyFraction представляет исходное рациональное выражение как один рациональный термин с расширенным числителем и знаменателем. Наибольший общий делитель числителя и знаменатель возвращенного выражения равняются 1. Эта функция более эффективна для упрощения частей, чем функция simplify.

syms x y
simplifyFraction((x^3 + 3*y^2)/(x^2 - y^2) + 3)
ans =
(x^3 + 3*x^2)/(x^2 - y^2)

simplifyFraction отменяет общие множители, которые появляются в числителе и знаменателе.

simplifyFraction(x^2/(x + y) - y^2/(x + y))
ans =
x - y

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

simplifyFraction((exp(2*x) - exp(2*y))/(exp(x) - exp(y)))
ans =
exp(x) + exp(y)

Представляйте полиномы Используя Горнера вложенные формы

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

syms x
horner(x^3 - 6*x^2 + 11*x - 6)
ans =
x*(x*(x - 6) + 11) - 6

Если полиномиальные коэффициенты являются числами с плавающей запятой, получившаяся форма Горнера представляет их как рациональные числа.

horner(1.1 + 2.2*x + 3.3*x^2)
ans =
x*((33*x)/10 + 11/5) + 11/10

Чтобы преобразовать коэффициенты в результате к числам с плавающей запятой, используйте vpa.

vpa(ans)
ans =
x*(3.3*x + 2.2) + 1.1