Main Content

factor

説明

F = factor(x) は、ベクトル F 内の x のすべての既約因子を返します。x が整数の場合、factorx の素因数分解を返します。x がシンボリック式の場合は、factorx の因子である部分式を返します。

F = factor(x,vars) は因子の配列 F を返します。ここで、vars は対象となる変数を指定します。vars 内の変数を含まない因子はすべて、最初のエントリ F(1) に分離されます。他のエントリは、vars からの変数を 1 つ以上含む x の既約因子です。

F = factor(___,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションを使用します。この構文では、前の構文の入力引数のいずれも使用できます。

整数の因数分解

F = factor(823429252)
F =
           2           2          59         283       12329

flintmax よりも大きい整数を因数分解するには、sym を使用して整数をシンボリック オブジェクトに変換します。その後、引用符内に数値を入れて正確に表現します。

F = factor(sym('82342925225632328'))
F =
[ 2, 2, 2, 251, 401, 18311, 5584781]

負の整数を因数分解するには、sym を使用してシンボリック オブジェクトに変換します。

F = factor(sym(-92465))
F =
[ -1, 5, 18493]

大きな数の素因数分解

41758540882408627201 の素因数分解を行います。この整数は flintmax よりも大きいので、sym を使用してシンボリック オブジェクトに変換し、整数を引用符内に入れて正確に表現します。

n = sym('41758540882408627201');
factor(n)
ans =
[ 479001599, 87178291199]

シンボリックな分数の因数分解

sym を使用して分数 112/81 をシンボリック オブジェクトに変換し、因数分解します。

F = factor(sym(112/81))
F =
[ 2, 2, 2, 2, 7, 1/3, 1/3, 1/3, 1/3]

多項式の因数分解

多項式 x^6-1 を因数分解します。

syms x
F = factor(x^6-1)
F =
[ x - 1, x + 1, x^2 + x + 1, x^2 - x + 1]

多項式 y^6-x^6 を因数分解します。

syms y
F = factor(y^6-x^6)
F =
[ -1, x - y, x + y, x^2 + x*y + y^2, x^2 - x*y + y^2]

指定された変数を含む因子の分離

y^2*x^2 を因数分解して x を含む因子を求めます。

syms x y
F = factor(y^2*x^2,x)
F =
[ y^2, x, x]

factor は、x を含まないすべての因子を最初の要素にまとめます。F の残りの要素には、x を含む既約因子が含まれます。

多項式 y を因数分解してシンボリック変数 b および c を含む因子を求めます。

syms a b c d
y = -a*b^5*c*d*(a^2 - 1)*(a*d - b*c);
F = factor(y,[b c])
F =
[ -a*d*(a - 1)*(a + 1), b, b, b, b, b, c, a*d - b*c]

factor は、b または c を含まないすべての因子を F の最初の要素にまとめます。F の残りの要素には、b または c を含む y の既約因子が含まれます。

因数分解のモードの選択

引数 FactorMode を使用して、特定の因数分解モードを選択します。

因数分解のモードを指定しないで、ある式を因数分解します。既定では、factor は有理数の範囲の因数分解を行います。このモードでは、factor は有理数が厳密にシンボリック型を保持するようにします。

syms x
factor(x^3 + 2, x)
ans =
x^3 + 2

同じ式を因数分解しますが、今度は実数の範囲の因数分解を行います。このモードでは、式を実数係数を使用した 1 次と 2 次の既約多項式に因数分解します。また、すべての数値を浮動小数点数に変換します。

factor(x^3 + 2, x, 'FactorMode', 'real')
ans =
[ x + 1.2599210498948731647672106072782,...
  x^2 - 1.2599210498948731647672106072782*x + 1.5874010519681994747517056392723]

複素数の範囲の因数分解を使用して、この式を因数分解します。このモードでは、factor は 2 次多項式を複素係数をもつ 1 次式に簡約します。 このモードでは、すべての数値は浮動小数点数に変換されます。

factor(x^3 + 2, x, 'FactorMode', 'complex')
ans =
[ x + 1.2599210498948731647672106072782,...
  x - 0.62996052494743658238360530363911 + 1.0911236359717214035600726141898i,...
  x - 0.62996052494743658238360530363911 - 1.0911236359717214035600726141898i]

制約なしの因数分解モードを使用して、この式を因数分解します。このモードでは、2 次多項式を複素係数をもつ 1 次式に簡約して、式を 1 次式に因数分解します。このモードでは、有理数は厳密なシンボリック型が保持されます。

factor(x^3 + 2, x, 'FactorMode', 'full')
ans =
[ x + 2^(1/3),...
  x - 2^(1/3)*((3^(1/2)*1i)/2 + 1/2),...
  x + 2^(1/3)*((3^(1/2)*1i)/2 - 1/2)]

vpa を使用して、結果を浮動小数点数で近似します。式が変数 x 以外にシンボリック パラメーターを含まないので、結果は複素数の範囲の因数分解と同じになります。

vpa(ans)
ans =
[ x + 1.2599210498948731647672106072782,...
  x - 0.62996052494743658238360530363911 - 1.0911236359717214035600726141898i,...
  x - 0.62996052494743658238360530363911 + 1.0911236359717214035600726141898i]

RootOf を含む結果を近似する

制約なしの因数分解のモードでは、factorRootOf で表される多項式の根のシンボリックな和を返すこともあります。

次の式を因数分解します。

syms x
s = factor(x^3 + x - 3, x, 'FactorMode','full')
s =
[ x - root(z^3 + z - 3, z, 1),...
  x - root(z^3 + z - 3, z, 2),...
  x - root(z^3 + z - 3, z, 3)]

vpa を使用して、結果を浮動小数点数で近似します。

 vpa(s)
ans =
[ x - 1.2134116627622296341321313773815,...
  x + 0.60670583138111481706606568869074 + 1.450612249188441526515442203395i,...
  x + 0.60670583138111481706606568869074 - 1.450612249188441526515442203395i]

入力引数

すべて折りたたむ

因子への入力。数値あるいはシンボリック数、式または関数として指定します。

対象の変数。シンボリック変数またはシンボリック変数のベクトルとして指定します。vars で指定された変数を含まない因子は F の最初の要素内にまとめられます。F の残りの要素には、vars の変数を含む x の既約因子が含まれます。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は関係ありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: factor(x^3 - 2,x,'FactorMode','real')

因数分解のモード。'FactorMode' および次のいずれかの文字ベクトルから成るコンマ区切りペアで指定します。

'rational'有理数の範囲内の因数分解。
'real'実数の範囲内の因数分解。実数の範囲内の因数分解は、実数係数をもつ 1 次と 2 次の既約多項式への因数分解です。この因数分解のモードでは、浮動小数点の実数に変換できる入力係数が必要です。他のすべての入力 (たとえば、シンボリック係数や複素数係数を含む入力) は既約として扱われます。
'complex'複素数の範囲内の因数分解。複素数の範囲内の因数分解は、その係数が浮動小数点数である 1 次因数への因数分解です。このモードの因数分解は、入力係数が浮動小数点数に変換できる場合、つまり、根が数値で求められる場合のみ利用できます。シンボリック入力は既約として扱われます。
'full'制約なしの因数分解。制約なしの因数分解は、1 次因数へのシンボリックな因数分解です。結果は、べき乗根を使用した複数の因子または RootOf の範囲にある symsum として示されます。

出力引数

すべて折りたたむ

入力因子。シンボリック ベクトルとして返されます。

ヒント

  • flintmax よりも大きい整数を因数分解するには、整数を sym でラップします。その後、整数を引用符内に入れて正確に表現します (たとえば、sym('465971235659856452'))。

  • 負の整数を因数分解するには、整数を sym でラップします (たとえば、sym(-3))。

バージョン履歴

R2006a より前に導入