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(+ 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, because(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*log (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); because(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; because(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', simplifier порицает формы выражения, где комплексные числа появляются в подвыражениях. Во вложенных подвыражениях глубже комплексное число появляется в выражении, наименьшее количество настройки, которую получает эта форма выражения.

Попытайтесь избежать мнимых условий в экспонентах установкой '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 (пи)/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) *sin (theta) ^sym (2) - rs*a^4*r*cos (theta) ^sym (2) + 2*a^2*r^4*cos (theta) ^sym (2) + a^2*r^4 - rs*a^2*r^3*cos (theta) ^sym (2) + rs*a^2*r^3*sin (theta) ^sym (2) - rs*a^2*r^3 + r^6 - rs*r^5)) / (a^2 + r^2 - rs*r)

Упростите определитель с помощью 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 содержит комплексные числа, simplifier порицает формы, где комплексные числа появляются в подвыражениях. В случае вложенных подвыражений глубже комплексное число появляется в выражении, наименьшее количество настройки, которую получает эта форма выражения.

Упрощение управляет в виде разделенной запятой пары, состоящей из '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:

      ) c = a c · b c.

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

      (a b) c = a b · c.

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

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

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

    • asinh (sinh (x)) = x, acosh (дубинка (x)) = x, atanh (tanh (x)) = x

    • Wk (x · e x) = x для всех индексов ветви k функции Ламберта В.

Ссылки

[1] Зи, сила тяжести А. Эйнштейна вкратце. Принстон: Издательство Принстонского университета, 2013.

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