exponenta event banner

Выберите функцию для изменения порядка выражения

Объединить термины тех же алгебраических структур

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

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

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

  • ab ac = ab + c

  • ac bc = (a b) c

  • (ab) c = abc

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

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 принимает 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

Найти неприводимые полиномиальные факторы выражения 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