simplify

Алгебраическое упрощение

Описание

пример

S = simplify(expr) выполняет алгебраическое упрощение expr. Если expr является символьным вектором или матрицей, эта функция упрощает каждый элемент expr.

пример

S = simplify(expr,Name,Value) выполняет алгебраическое упрощение expr использование дополнительных опций, заданных одним или несколькими Name,Value аргументы в виде пар.

Примеры

свернуть все

Упростите эти символические выражения:

syms x a b c
S = simplify(sin(x)^2 + cos(x)^2)
S = 1sym (1)
S = simplify(exp(c*log(sqrt(a+b))))
S = a+bc/2(a + b) ^ (c/2)

Функции simplify для этой символьной матрицы. Когда входной параметр является вектором или матрицей, simplify пытается найти более простую форму каждого элемента вектора или матрицы.

syms x
M = [(x^2 + 5*x + 6)/(x + 2), sin(x)*sin(2*x) + cos(x)*cos(2*x);
		(exp(-x*1i)*1i)/2 - (exp(x*1i)*1i)/2, sqrt(16)];
S = simplify(M)
S = 

(x+3cos(x)sin(x)4)[x + 3, cos (x); sin (x), sym (4)]

Упростите символическое выражение, которое содержит логарифмы и степени. По умолчанию simplify не объединяет степени и логарифмы, потому что их объединение недопустимо для типичных комплексных чисел.

syms x
expr = (log(x^2 + 2*x + 1) - log(x + 1))*sqrt(x^2);
S = simplify(expr)
S = -log(x+1)-log(x+12)x2- (журнал (x + 1) - журнал (x + 1) ^ 2) * sqrt (x ^ 2)

Чтобы применить правила упрощения, которые позволяют simplify функция для объединения степеней и логарифмов, установка 'IgnoreAnalyticConstraints' на true:

S = simplify(expr,'IgnoreAnalyticConstraints',true)
S = xlog(x+1)x * журнал (x + 1)

Упростите это выражение:

syms x
expr = ((exp(-x*1i)*1i) - (exp(x*1i)*1i))/(exp(-x*1i) + exp(x*1i));
S = simplify(expr)
S = 

-e2xii-ie2xi+1- (exp ((2 * x * sym (1i))) * sym (1i) - sym (1i) )/( exp (2 * x * sym (1i)) + 1)

По умолчанию simplify использование одного внутреннего шага упрощения. Можно получить различные, часто более короткие, результаты упрощения путем увеличения количества шагов упрощения:

S10 = simplify(expr,'Steps',10)
S10 = 

2ie2xi+1-i2i/( exp (2 * x * sym (1i)) + 1) - sym (1i)

S30 = simplify(expr,'Steps',30)
S30 = 

cos(x)-sin(x)iicos(x)-i((cos (x) - sin (x) * sym (1i)) * sym (1i) )/cos (x) - sym (1i)

S50 = simplify(expr,'Steps',50)
S50 = tan(x)tan(x)

Если вы не можете вернуть требуемый результат, попробуйте альтернативные функции упрощения. См. «Выбор функции для перестройки выражения».

Получите эквивалентные результаты для символьного выражения путем установки значения 'All' на true.

syms x
expr = cos(x)^2 - sin(x)^2;
S = simplify(expr,'All',true)
S = 

(cos(2x)cos(x)2-sin(x)2)[cos (2 * x); cos (x) ^ 2 - sin (x) ^ 2]

Увеличьте количество шагов упрощения до 10. Найдите другие эквивалентные результаты для того же выражения.

S = simplify(expr,'Steps',10,'All',true)
S = 

(cos(2x)1-2sin(x)22cos(x)2-1cos(x)2-sin(x)2cot(2x)sin(2x)e-2xi2+e2xi2)[cos (2 * x); 1 - 2 * sin (x) ^ 2; 2 * cos (x) ^ 2 - 1; cos (x) ^ 2 - sin (x) ^ 2; кроватка (2 * x) * sin (2 * x); exp ((-2 * x * sym (1i)) )/2 + exp (2 * x * sym (1i) )/2]

Попытка разделить действительные и мнимые части выражения путем установки значения 'Criterion' на 'preferReal'.

syms x
f = (exp(x + exp(-x*1i)/2 - exp(x*1i)/2)*1i)/2 -...
    (exp(-x - exp(-x*1i)/2 + exp(x*1i)/2)*1i)/2;
S = simplify(f,'Criterion','preferReal','Steps',100)
S = sin(sin(x))cosh(x)+cos(sin(x))sinh(x)isin(sin(x))*cosh(x) + cos(sin(x))*sinh(x)*sym(1i)

Если 'Criterion' не установлено в 'preferReal', затем simplify возвращает более короткий результат, но действительная и мнимая части не разделены.

S = simplify(f,'Steps',100)
S = sin(sin(x)+xi)sin(sin(x) + x*sym(1i))

Когда вы задаете 'Criterion' на 'preferReal', упрощатель лишает формы выражения, где комплексные числа появляются внутри подэкспрессий. В вложенных подэкспрессиях, чем глубже комплексное число появляется внутри выражения, тем наименьший выбор получает эта форма выражения.

Попытайтесь избежать мнимых членов в экспонентах путем установки 'Criterion' на 'preferReal'.

Покажите это поведение путем упрощения комплексного символьного выражения с настройкой и без 'Criterion' на 'preferReal'. Когда 'Criterion' установлено в 'preferReal', затем simplify помещает мнимый термин вне экспоненты.

expr = sym(1i)^(1i+1);
withoutPreferReal = simplify(expr,'Steps',100)
withoutPreferReal = 

-112+12i(-sym (1)) ^ (sym (1/2) + sym (1/2) * sym (1i))

withPreferReal = simplify(expr,'Criterion','preferReal','Steps',100)
withPreferReal = 

e-π2iexp ((-sym (pi )/2)) * sym (1i)

Упростите выражения, содержащие символические модули той же размерности, используя simplify.

u = symunit;
expr = 300*u.cm + 40*u.inch + 2*u.m;
S = simplify(expr)
S = 

30085cm"centimeter - a physical unit of length."sym (3008/5) * symunit ('cm')

simplify автоматически выбирает модуль для перезаписи. Чтобы выбрать конкретный модуль, используйте rewrite.

В большинстве случаев, чтобы упростить символическое выражение с помощью Symbolic Math Toolbox™, нужно использовать только simplify функция. Но для некоторых больших и сложных выражений можно получить более быстрый и простой результат при помощи expand функцию перед применением simplify.

Например, этот рабочий процесс дает лучшие результаты при поиске определяющего матрицы, которая представляет метрику Керра [1]. Объявите параметры метрики Керра.

syms theta real;
syms r rs a real positive;

Задайте матрицу, которая представляет метрику Керра.

rho = sqrt(r^2 + a^2*cos(theta)^2);
delta  = r^2 + a^2 - r*rs;
g(1,1) = - (1 - r*rs/rho^2);
g(1,4) = - (rs*a*r*sin(theta)^2)/rho^2;
g(4,1) = - (rs*a*r*sin(theta)^2)/rho^2;
g(2,2) = rho^2/delta;
g(3,3) = rho^2;
g(4,4) = (r^2 + a^2 + rs*a^2*r*sin(theta)^2/rho^2)*sin(theta)^2;

Оцените определяющего метрики Керра.

det_g = det(g)
det_g = 

-sin(θ)2a6cos(θ)4+a4r2cos(θ)4+2a4r2cos(θ)2+rsa4rcos(θ)2sin(θ)2-rsa4rcos(θ)2+2a2r4cos(θ)2+a2r4-rsa2r3cos(θ)2+rsa2r3sin(θ)2-rsa2r3+r6-rsr5a2+r2-rsr- (sin (theta) ^ sym (2) * (a ^ 6 * cos (theta) ^ sym (4) + a ^ 4 * r ^ 2 * cos (theta) ^ sym (4) + 2 * a ^ 4 * r ^ 2 * cos (theta) ^ sym (2) + rs * a ^ 4 * r * cos (theta) ^ sym (2)

Упростите определяющего, используя simplify функция.

D = simplify(det_g)
D = -sin(θ)2a2cos(θ)2+r2-a2sin(θ)2+a2+r2-sin (theta) ^ sym (2) * (a ^ 2 * cos (theta) ^ sym (2) + r ^ 2) * (- a ^ 2 * sin (theta) ^ sym (2) + a ^ 2 + r ^ 2)

Вместо этого выровняйте выражение с помощью expand функцию, а затем применить simplify функция. Результат проще с этим дополнительным шагом.

D = simplify(expand(det_g))
D = -sin(θ)2-a2sin(θ)2+a2+r22-sin (theta) ^ sym (2) * (- a ^ 2 * sin (theta) ^ sym (2) + a ^ 2 + r ^ 2) ^ 2

Входные параметры

свернуть все

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Seconds',60 ограничивает процесс упрощения до 60 секунд.

Опция для возврата эквивалентных результатов, заданная как разделенная разделенными запятой парами, состоящая из 'All' и любое из двух логических значений. Когда вы используете эту опцию, входной параметр expr должно быть скаляром.

falseИспользуйте опцию по умолчанию, чтобы вернуть только конечный результат упрощения.
trueВозвращает вектор-столбец эквивалентных результатов для входа выражения. Вы можете использовать эту опцию наряду с 'Steps' опция для получения альтернативных выражений в процессе упрощения.

Критерий упрощения, заданный как разделенная разделенными запятой парами, состоящая из 'Criterion' и один из этих векторов символов.

'default'Используйте критерий упрощения по умолчанию (внутренний).
'preferReal'Предпочтение формам S содержащие действительные значения по формам, содержащим комплексные числа. Если какая-либо форма S содержит комплексные числа, упрощатель обезопасивает формы, в которых комплексные числа появляются внутри подэкспрессий. В случае вложенных подэкспрессий, чем глубже комплексное число появляется внутри выражения, тем наименьший выбор получает эта форма выражения.

Правила упрощения, заданные как разделенная разделенными запятой парами, состоящая из 'IgnoreAnalyticConstraints' и одно из этих значений.

falseИспользуйте строгие правила упрощения. simplify всегда возвращает результаты, которые аналитически эквивалентны начальному выражению.
trueПримените чисто алгебраические упрощения к выражениям. Настройка IgnoreAnalyticConstraints на true может дать вам более простые решения, которые могут привести к результатам, обычно не действительным. Другими словами, эта опция применяет математические тождества, которые удобны, но результаты могут не удерживаться для всех возможных значений переменных. В некоторых случаях результаты могут быть не эквивалентны исходному выражению.

Предел времени для процесса упрощения, заданный как разделенная разделенными запятой парами, состоящая из 'Seconds' и положительное значение, которое обозначает максимальное время в секундах.

Количество шагов упрощения, заданное как разделенная разделенными запятой парами, состоящая из 'Steps' и положительное значение, которое обозначает максимальное количество внутренних шагов упрощения. Обратите внимание, что увеличение количества шагов упрощения может замедлить ваши расчеты.

simplify(expr,'Steps',n) эквивалентно simplify(expr,n), где n количество шагов упрощения.

Совет

  • Упрощение математического выражения не является четко определенным предметом. Нет универсального представления о том, какая форма выражения является самой простой. Форма математического выражения, которое является самым простым для одной задачи, может быть сложной или даже непригодной для другой задачи.

Алгоритмы

Когда вы используете IgnoreAnalyticConstraints, затем simplify следовать этим правилам:

  • Журнал (a) + журнал ( b) = журнал (a· b) для всех значений a и b. В частности, следующее равенство справедливо для всех значений a, b и c:

      (a · b)c = ac· bc.

  • журнал (ab) = b· журнал (a) для всех значений a и b. В частности, следующее равенство справедливо для всех значений a, b и c:

      (ab)c = ab·c.

  • Если f и g являются стандартными математическими функциями и f (g (x )) = x для всех малых положительных чисел, f (g (x )) = x принимается допустимым для всех комплексных чисел x. В частности:

    • журнал (ex) = x

    • asin (sin (x )) = x, acos (cos (x )) = x, atan ( tan (x)) = x

    • asinh (sinh (x )) = x, acosh (cosh (x )) = x, atanh (tanh  (x)) = x

    • W k (x· ex) = x для всех индексов ветви k функции Lambert W.

Ссылки

[1] Zee, A. Einstein Gravity in a Nutshell. Princeton: Princeton University Press, 2013.

Представлено до R2006a