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 = (a b) 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
принимает atan
exp
\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