プログラミング雑感  新JavaScript入門  JavaScript,Neo-Generation  掲示板  表紙
10. 因数分解(2)  12. 因数分解(4) 
プログラミング雑感
Written 5/30/02
11. 因数分解(3)
今回は3・4次の多項式を因数分解することを考えます。
3次多項式の因数分解
3次の多項式が因数分解できるとしたら、まず1次と2次の積になります。
  a0 + a1x + a2x2 + a3x3 = (b0 + b1x)(c0 + c1x + c2x2)
 
右辺を展開して、xの各次の係数を比較すると、
  a0 = b0c0
  a1 = b0c1 + b1c0
  a2 = b0c2 + b1c1
  a3 = b1c2
 
前と同じように最初と最後の式から b0, c0, b1, c2 が決まるので、2番目と3番目の式を満たす c1 があるかどうか調べればよいです。 因数分解できたら、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次)
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
 
4次多項式の因数分解(2次×2次)
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
 
と b1 と c1 の連立方程式になり、 判別式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次以降はちょっと苦しいです。 次のページでは別のアルゴリズムで最終決着する予定です。
first, prev, next, exit