partfrac

Разложение элементарной дроби

Синтаксис

partfrac(expr,var)
partfrac(expr,var,Name,Value)

Описание

пример

partfrac(expr,var) находит разложение элементарной дроби expr относительно var. Если вы не задаете var, то partfrac использует переменную, определенную symvar.

пример

partfrac(expr,var,Name,Value) находит разложение элементарной дроби с помощью дополнительных опций, заданных одним или несколькими аргументами пары Name,Value.

Примеры

Разложение элементарной дроби символьных выражений

Найдите разложение элементарной дроби одномерных и многомерных выражений.

Во-первых, найдите разложение элементарной дроби одномерных выражений. Для выражений с одной переменной можно не использовать определение переменной.

syms x
partfrac(x^2/(x^3 - 3*x + 2))
ans =
5/(9*(x - 1)) + 1/(3*(x - 1)^2) + 4/(9*(x + 2))

Найдите разложение элементарной дроби многомерного выражения относительно конкретной переменной.

syms a b
partfrac(a^2/(a^2 - b^2),a)
ans =
b/(2*(a - b)) - b/(2*(a + b)) + 1
partfrac(a^2/(a^2 - b^2),b)
ans =
a/(2*(a + b)) + a/(2*(a - b))

Если вы не задаете переменную, то partfrac вычисляет разложение элементарной дроби относительно переменной, определенной symvar.

symvar(a^2/(a^2 - b^2),1)
partfrac(a^2/(a^2 - b^2))
ans =
b
 
ans =
a/(2*(a + b)) + a/(2*(a - b))

Режимы факторизации

Выберите конкретный режим факторизации при помощи входа FactorMode.

Найдите разложение элементарной дроби, не задавая режим факторизации. По умолчанию partfrac использует факторизацию по рациональным числам. В этом режиме partfrac сохраняет числа в их точной символьной форме.

syms x
f = 1/(x^3 + 2);
partfrac(f,x)
ans =
1/(x^3 + 2)

Повторите разложение с числовой факторизацией по вещественным числам. В этом режиме partfrac включает знаменатель в линейные и квадратичные неприводимые полиномы с действительными коэффициентами. Этот режим преобразовывает все числовые значения в числа с плавающей запятой.

partfrac(f,x,'FactorMode','real')
ans =
0.2099868416491455274612017678797/(x + 1.2599210498948731647672106072782) -...
(0.2099868416491455274612017678797*x - 0.52913368398939982491723521309077)/(x^2 -...
1.2599210498948731647672106072782*x + 1.5874010519681994747517056392723)

Повторите разложение с факторизацией по комплексным числам. В этом режиме partfrac уменьшает квадратичные полиномы в знаменателе к линейным выражениям с комплексными коэффициентами. Этот режим преобразовывает все числа в плавающую точку.

partfrac(f,x,'FactorMode','complex')
ans =
0.2099868416491455274612017678797/(x + 1.2599210498948731647672106072782) +...
(- 0.10499342082457276373060088393985 - 0.18185393932862023392667876903163i)/...
(x - 0.62996052494743658238360530363911 - 1.0911236359717214035600726141898i) +...
(- 0.10499342082457276373060088393985 + 0.18185393932862023392667876903163i)/...
(x - 0.62996052494743658238360530363911 + 1.0911236359717214035600726141898i)

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

pfFull = partfrac(f,x,'FactorMode','full')
pfFull =
2^(1/3)/(6*(x + 2^(1/3))) +...
(2^(1/3)*((3^(1/2)*1i)/2 - 1/2))/(6*(x + 2^(1/3)*((3^(1/2)*1i)/2 - 1/2))) -...
(2^(1/3)*((3^(1/2)*1i)/2 + 1/2))/(6*(x - 2^(1/3)*((3^(1/2)*1i)/2 + 1/2)))

Аппроксимируйте результат с числами с плавающей запятой при помощи vpa. Поскольку выражение не содержит символьных параметров помимо переменной x, результат эквивалентен в комплексном режиме факторизации.

vpa(pfFull)
ans =
0.2099868416491455274612017678797/(x + 1.2599210498948731647672106072782) +...
(- 0.10499342082457276373060088393985 - 0.18185393932862023392667876903163i)/...
(x - 0.62996052494743658238360530363911 - 1.0911236359717214035600726141898i) +...
(- 0.10499342082457276373060088393985 + 0.18185393932862023392667876903163i)/...
(x - 0.62996052494743658238360530363911 + 1.0911236359717214035600726141898i)

В комплексном режиме, факторы partfrac только те выражения в знаменателе, коэффициенты которого могут быть преобразованы в числа с плавающей запятой. Покажите это, заменив 2 в f с символьной переменной и найдите разложение элементарной дроби в комплексном режиме. partfrac возвращает неизменное выражение.

syms a
f = subs(f,2,a);
partfrac(f,x,'FactorMode','complex')
ans =
1/(x^3 + a)

Когда вы используете полный режим факторизации, выражения факторов partfrac в знаменателе символически. Таким образом partfrac в полном режиме факторизации учитывает выражение.

partfrac(1/(x^3 + a), x, 'FactorMode', 'full')
ans =
1/(3*(-a)^(2/3)*(x - (-a)^(1/3))) -...
((3^(1/2)*1i)/2 + 1/2)/(3*(-a)^(2/3)*(x + (-a)^(1/3)*((3^(1/2)*1i)/2 + 1/2))) +...
((3^(1/2)*1i)/2 - 1/2)/(3*(-a)^(2/3)*(x - (-a)^(1/3)*((3^(1/2)*1i)/2 - 1/2)))

Полный режим факторизации возвращает root

В полном режиме факторизации partfrac представляет коэффициенты с помощью root, когда не математически возможно найти коэффициенты как точные символьные числа. Покажите это поведение.

syms x
s = partfrac(1/(x^3 + x - 3), x, 'FactorMode','full')
s =
symsum(-((6*root(z^3 + z - 3, z, k)^2)/247 +...
         (27*root(z^3 + z - 3, z, k))/247 +...
          4/247)/(root(z^3 + z - 3, z, k) - x), k, 1, 3)

Аппроксимируйте результат с числами с плавающей запятой при помощи vpa.

vpa(s)
ans =
0.1846004942289254798185772017286/(x - 1.2134116627622296341321313773815) +...
(- 0.092300247114462739909288600864302 + 0.11581130283490645120989658654914i)/...
(x + 0.60670583138111481706606568869074 - 1.450612249188441526515442203395i) +...
(- 0.092300247114462739909288600864302 - 0.11581130283490645120989658654914i)/...
(x + 0.60670583138111481706606568869074 + 1.450612249188441526515442203395i)

Числители и знаменатели разложения элементарной дроби

Возвратите вектор числителей и вектор знаменателей разложения элементарной дроби.

Во-первых, найдите разложение элементарной дроби выражения.

syms x
P = partfrac(x^2/(x^3 - 3*x + 2), x)
P =
5/(9*(x - 1)) + 1/(3*(x - 1)^2) + 4/(9*(x + 2))

Разложение элементарной дроби является суммой частей. Используйте функцию children, чтобы возвратить вектор, содержащий условия той суммы. Затем используйте numden, чтобы извлечь числители и знаменатели условий.

[N,D] = numden(children(P))
N =
[ 5, 1, 4]
 
D =
[ 9*x - 9, 3*(x - 1)^2, 9*x + 18]

Восстановите разложение элементарной дроби от векторов числителей и знаменателей.

P1 = sum(N./D)
P1 =
1/(3*(x - 1)^2) + 5/(9*x - 9) + 4/(9*x + 18)

Проверьте, что восстановленное выражение, P1, эквивалентно исходному разложению элементарной дроби, P.

isAlways(P1 == P)
ans =
  logical
     1

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

свернуть все

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

Переменная интереса, заданного как символьная переменная.

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: partfrac(1/(x^3 - 2),x,'FactorMode','real')

Режим Factorization, заданный как пара, разделенная запятой, состоящая из 'FactorMode' и один из этих векторов символов.

'rational'Факторизация по рациональным числам.
'real'Факторизация в линейные и квадратичные полиномы с действительными коэффициентами. Коэффициенты входа должны быть конвертируемыми к действительным числам с плавающей запятой.
'complex'Факторизация в линейные полиномы, коэффициенты которых являются числами с плавающей запятой. Коэффициенты входа должны быть конвертируемыми к числам с плавающей запятой.
'full'Факторизация в линейные полиномы с точными символьными коэффициентами. Если partfrac не может вычислить коэффициенты как точные символьные числа, то partfrac представляет коэффициенты при помощи symsum, передвигающегося на root.

Больше о

свернуть все

Разложение элементарной дроби

Разложение элементарной дроби является операцией на рациональных выражениях.

f(x)=g(x)+p(x)q(x),

Где знаменатель выражения может быть записан как q(x)=q1(x)q2(x), разложение элементарной дроби является выражением этой формы.

f(x)=g(x)+jpj(x)qj(x)

Здесь, знаменатели qj(x) неприводимые полиномы или степени неприводимых полиномов. Числители pj(x)полиномы меньших степеней, чем соответствующие знаменатели qj(x).

Разложение элементарной дроби может упростить интегрирование путем интеграции каждого срока возвращенного выражения отдельно.

Представленный в R2015a