partfrac
部分分数分解
説明
例
シンボリック式の部分分数分解
一変数式および多変数式の部分分数分解を求めます。
最初に、一変数式の部分分数分解を求めます。変数が 1 つしかない式の場合、変数の指定は省略できます。
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
は分母を、実数係数をもつ 1 次と 2 次の既約多項式に因数分解します。 このモードでは、すべての数値は浮動小数点数に変換されます。
partfrac(f,x,'FactorMode','real')
ans = 0.2099868416491455274612017678797/(x + 1.2599210498948731647672106072782) -... (0.2099868416491455274612017678797*x - 0.52913368398939982491723521309077)/(x^2 -... 1.2599210498948731647672106072782*x + 1.5874010519681994747517056392723)
複素数の範囲の因数分解で分解を繰り返します。このモードでは、partfrac
は、分母の 2 次多項式を複素係数をもつ 1 次式へ簡約します。このモードはすべての数値を浮動小数点数に変換します。
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
は、 2 次多項式を複素係数をもつ 1 次式に分解して、分母を 1 次式に因数分解します。このモードでは、数値は厳密なシンボリック型に保たれます。
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
は、その係数が浮動小数点数に変換できる分母内の式のみ因数分解します。これを示すため、f
の 2
をシンボリック変数に置き換えて部分分数分解を複素数の状態で求めます。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
を使用して、各項の分子と分母を抽出します。
C = children(P); C = [C{:}]; [N,D] = numden(C)
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
入力引数
詳細
バージョン履歴
R2015a で導入