多項式の因数分解や整数の素因数分解を実行する関数。書式
factor(n)
で用いる。引数 n は有理式や有理数でもよい。
(%i1) factor(936);
3 2
(%o1) 2 3 13
(%i2) factor((x^2-y^2)/(z^2-4));
(y - x) (y + x)
(%o2) - ---------------
(z - 2) (z + 2)
なお、変数 factorflag を true に設定すれば(デフォルトは false)係数も素因数分解される。
(%i3) factor(4*x^2-4);
(%o3) 4 (x - 1) (x + 1)
(%i3) factorflag: true;
(%o3) TRUE
(%i4) factor(4*x^2-4);
2
(%o4) 2 (x - 1) (x + 1)
一時的に変数 factorflag の true/false を変更するには、
factor(式), factorflag:true;
のように実行すればよい。block 関数を用いて、
block([factorflag: ture], factor(式));
でもよい。
(%i5) block([factorflag :ture], factor(4 * x^2 - 4));
2 2
(%o5) 2 (x - 1)
(%i6) block([factorflag: false], factor(4 * x^2 - 4));
2
(%o6) 4 (x - 1)
多変数の場合、リスト変数 dontfactor に「因数分解を実行しない変数」を代入しておくと、それらの変数のみ因数分解されなくなる(デフォルトは空 dontfactor: [])。
(%i7) factor((x^2 - 1) * (y^2 - 1));
(%o7) (x - 1) (x + 1) (y - 1) (y + 1)
(%i8) dontfactor:[x];
(%o8) [x]
(%i9) factor((x^2 - 1) * (y^2 - 1));
2
(%o9) (x - 1) (y - 1) (y + 1)
この場合も前述と同様カンマ書式や block 関数を用いれば、dontfactor を一時的に設定することが出来る。
(%i10) factor((x^2 - 4) * (y^2 - 9)), dontfactor: [x];
2
(%o10) (x - 4) (y - 3) (y + 3)
(%i11) factor((x^2 - 4) * (y^2 - 9)), dontfactor: [y];
2
(%o11) (x - 2) (x + 2) (y - 9)
(%i12) factor((x^2 - 4) * (y^2 - 9)), dontfactor: [];
(%o12) (x - 2) (x + 2) (y - 3) (y + 3)
関数 factor には最小分解体を指定した因数分解機能もある。例えば、多項式 X^4+1 は有理数係数の範囲では因数分解出来ないが、sqrt(-1) や sqrt(2) を添加した体上では、それぞれ (X^2 - sqrt(-1)) * (X^2 + sqrt(-1))、(X^2 - sqrt(2) * X + 1) * (X^2 + sqrt(2) * X + 1) と因数分解出来る。このような因数分解を実現する機能で、書式
factor(因数分解したい式, 最小分解体の定義多項式)
で使用する。
(%i13) factor(X^4 + 1);
4
(%o13) X + 1
(%i14) factor(X^4 + 1, a^2 + 1);
2 2
(%o14) (X - a) (X + a)
(%i15) factor(X^4 + 1, b^2 - 2);
2 2
(%o15) (X - b X + 1) (X + b X + 1)
なお、sqrt(-1) を添加した場合(すなわち複素数体)の因数分解用には関数 gfactor が用意されている。
(%i16) gfactor(x^4 + 1);
2 2
(%o16) (x - %i) (x + %i)