Выберите 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)

Функция не комбинирует квадратные корни sqrt(x)*sqrt(y) потому что идентичность не допустима для отрицательных величин переменных.

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 принимает atanexp\Gamma, intжурнал, 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

Найдите неприводимые полиномиальные факторы выражения x^6 + 1. По умолчанию, 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