11. 因数分解(3)
3次の多項式が因数分解できるとしたら、まず1次と2次の積になります。
a0 + a1x + a2x2 + a3x3 = (b0 + b1x)(c0 + c1x + c2x2)
右辺を展開して、xの各次の係数を比較すると、
a0 = b0c0
a1 = b0c1 + b1c0
a2 = b0c2 + b1c1
a3 = b1c2
前と同じように最初と最後の式から
b
0, c
0, b
1, c
2
が決まるので、2番目と3番目の式を満たす c
1
があるかどうか調べればよいです。
因数分解できたら、2次を1次同士の積に分解することを考えます。
例えば、次の多項式を考えます。
-6 + x + 4x2 + x3
このとき例えば、
b0 = 1, c0 = -6
b1 = -1, c2 = -1
とすると、
c1 = -5
-c1 = 5
となり、両方を満たすのは、
c1 = -5
ですから、結局、
-6 + x + 4x2 + x3 = (1 - x)(-6 - 5x -x2)
となります。
解があるのは、
b0(a2 - b0c2) = b1(a1 - b1c0)
を満たすときです。
ごく簡単なので、さっそくプログラムにしましょう。
テキストボックスに3次以下の多項式を入れてボタンを押すと、因数分解されます。
ソースは次にあります。
polynomial3.js (ファイルに保存にしてください)
使い方はソースを参照してください。
4次の多項式が因数分解には、1次と3次の積と2次と2次の積がありますが、
1次と3次の方が簡単です。
a0 + a1x + a2x2 + a3x3 + a4x4 = (b0 + b1x)(c0 + c1x + c2x2 + c3x3)
右辺を展開して、xの各次の係数を比較すると、
a0 = b0c0
a1 = b0c1 + b1c0
a2 = b0c2 + b1c1
a3 = b0c3 + b1c2
a4 = b1c3
3番目の式以外ですべての未知数が定まるので、
これを3番目に放り込んだ式が成り立てばよいです。
a2b0b1 = b02a3 - b03c3 + b12a1 - b13c0
2次と2次の積になる場合はだいぶめんどうです。
a0 + a1x + a2x2 + a3x3 + a4x4 = (b0 + b1x + b2x2)(c0 + c1x + c2x2)
右辺を展開して、xの各次の係数を比較すると、
a0 = b0c0
a1 = b0c1 + b1c0
a2 = b0c2 + b1c1 + b2c0
a3 = b1c2 + b2c1
a4 = b2c2
2番目と4番目の式は、
c0b1 + b0c1 = a1
c2b1 + b2c1 = a3
と b
1 と c
1 の連立方程式になり、
判別式Dで場合分けされます。
D = c0b2 - b0c2
D ≠ 0なら次のように解け、
b1 = (b2a1 - b0a3) / D
c1 = (-c2a1 + c0a3) / D
これを3番目の式に放り込んで成り立てばよいです。
D = 0なら、
b0a3 = b2a1 => 不定
b0a3 ≠ b2a1 => 解なし
不定のとき、3番目の式に代入して、
c0b12 - a1b1 + b0(a2 - b2c0 - b0c2) = 0
この左辺が因数分解できれば解けます。
テキストボックスに4次以下の多項式を入れてボタンを押すと、因数分解されます。
ソースは次です。
polynomial4.js (ファイルに保存にしてください)
ここまでちからまかせにやってきましたが、5次以降はちょっと苦しいです。
次のページでは別のアルゴリズムで最終決着する予定です。