ホーナー法と組立除法について考える。 〜みんなの「なぜ?」を大切に〜

代数

みなさんは「組立除法」は好きですか?

組立除法は因数分解などで役に立ちますね。通常の筆算を行わず、計算を行う回数が少ないことがメリットであるわけです。

好きと答えたみなさんの中で、なぜ組立除法で商や余りが求められるのか正しく説明できる方はどれくらいいるでしょうか?原理を理解して使っていますか?

 

私は組立除法があまり好きではありませんでした。

高校時代に「なんだか上手く計算できてしまう便利な道具」として組立除法を教わったので、どこか腑に落ちず、納得して使えずにいました。

本記事では、私と同様に「なぜ?」と気になってしまい、その恩恵を受けることができていないみなさんが、私と一緒に少しでも組立除法を受け入れられるようになることを目指します。

(筆算による説明は行いません。)

 

考察の出発点となる問題

突然ですが

\(x^5+4x^4+4x^3+3x^2+2x+6\) を因数分解せよ。

という問題にはどのようにアプローチしますか?(特に断りがなければ因数分解は有理数の範囲です。)

奇数次ですから、\(=0\) とした方程式は少なくともひとつの実数解を持ちます。その実数解の中に有理数解があるであろうという見立てのもと「代入して \(=0\) となる有理数 \(\alpha\)」を探します。そんな有理数 \(\alpha\) が見つかれば、\((x-\alpha)\) で割ることで次数を着実に減らし、因数分解を進めることができます。

この多項式は整数係数ですから、その有理数 \(\alpha\) の候補は \(\pm 1\), \(\pm 2\), \(\pm 3\), \(\pm 6\) であって、これらを順に代入して確認してゆくわけですね。ただし今回は \(x^5\) がありますから、\(\pm 3\) あたりから嫌な気持ちになりますし、\(\pm 6\) をやる必要性が生じた瞬間にペンを机に一度置くことでしょう。

ここで、組立除法を使える人は \((x+3)\) などで割った余りを組立除法によって確認できるわけです。

我々は、この「組立除法」が与えられたアルゴリズムとしてではなく、理解し納得したアルゴリズムとして扱えるようになることを目指します。一旦、組立除法に関する中途半端な知識は捨て去って、真っ新な気持ちで受け入れる体制を整えてから考察を進めましょう。

 

組立除法が誕生するまで

剰余定理からわかること

まず、
$$
P(x)=x^5+4x^4+4x^3+3x^2+2x+6
$$とおきます。このとき、\(P(x)\) を \((x-\alpha)\) で割った余りは、剰余定理より
\begin{align}
P(\alpha)=\alpha^5+4\alpha^4+4\alpha^3+3\alpha^2+2\alpha+6\tag{1}
\end{align}となります。

数学的には正しいです。ただ、問題は実際に計算する手間を如何に省くかですよね。例えば、\(\alpha=3\) あたりでイメージしていただくと

  • \(\alpha^5\) を計算するとき、\(\alpha^4\) を利用できれば \(\alpha\) をかけるだけで良いですね。
  • その \(\alpha^4\) を計算するとき、\(\alpha^3\) を利用できれば \(\alpha\) をかけるだけで良いですね。
  • その \(\alpha^3\) を計算するとき、\(\alpha^2\) を利用できれば \(\alpha\) をかけるだけで良いですね。
  • その \(\alpha^2\) を計算するとき、\(\alpha\) を利用できれば \(\alpha\) をかけるだけで良いですね。

つまり、\(\alpha\) をかける計算の回数を少なくしたいのです。それを念頭に置いて \(P(\alpha)\) に式変形を施してゆきましょう。

部分的に \(\alpha\) で括ってゆくと
\begin{align}
P(\alpha)
&=\alpha^5+4\alpha^4+4\alpha^3+3\alpha^2+2\alpha+6\\
&=(\alpha^4+4\alpha^3+4\alpha^2+3\alpha+2)\alpha+6\\
&=((\alpha^3+4\alpha^2+4\alpha+3)\alpha+2)\alpha+6\\
&=(((\alpha^2+4\alpha+4)\alpha+3)\alpha+2)\alpha+6\\
&=(((\alpha+4)\alpha+4)\alpha+3)\alpha+2)\alpha+6\tag{2}
\end{align}となります。

例えばプログラミングなどで用いる場合は式(1)の方が何をしているかは伝わりやすいです。ただ、次数が大きくなればなるほど式(2)の方が計算回数が少なく処理時間が少なく済みます。

ホーナー法による多項式の計算

ここでは一般に
$$
P(x)=ax^5+bx^4+cx^3+dx^2+ex+f
$$とします。代入したときのかけ算の計算回数を少なくするために、式(2)と同様に
\begin{align}
P(x)=(((ax+b)x+c)x+d)x+e)x+f\tag{3}
\end{align}と変形して計算する方法をホーナー法Horner法)といいます。

今回の場合、かけ算の計算回数は \(5+4+3+2+1=\dfrac{5\times6}{2}=15\) 回から \(5\) 回に減っていますね。(一般に次数 \(n\) の場合、\(\dfrac{n(n+1)}{2}\) 回から \(n\) 回に減ります。)

具体的に \(P(3)\) の計算を、式(3)を見つめながら順を追って見てゆきましょう。

  1. スタートは最高次の係数 \(a\) とする。
  2. それに \(x\) をかけて \(b\) を足す。
  3. それに \(x\) をかけて \(c\) を足す。
  4. それに \(x\) をかけて \(d\) を足す。
  5. それに \(x\) をかけて \(e\) を足す。
  6. それに \(x\) をかけて \(f\) を足す。

いかがでしょうか。係数の情報さえ記憶しておけば同様の操作を繰り返すだけですよね。ホーナー法は、ただ計算回数を減らすだけでなく、そのアルゴリズムも単純化されるのです。

\(P(\alpha)\) の計算は \(\alpha\) と各係数 \(a\), \(b\), \(c\), \(d\), \(e\), \(f\) のみで構成されていたので、それらを用いた可能な限りシンプルな記述方法を考え、代入計算に活かしたいと思います。

組立除法の誕生!

度々登場している
$$
P(x)=x^5+4x^4+4x^3+3x^2+2x+6
$$について考えましょう。

係数は全て正なので、有理数 \(\alpha\) として \(1\), \(2\), \(3\), \(6\) はあり得ないですね。そこで、\(\alpha=-1\) となるかどうかを丁寧に見てゆきましょう。

  1. まず、係数と \(\alpha\) の候補の \(-1\) を並べて書き、係数の下にスペースを空けて線を引きます。各係数には足し算を行うので、足す数◯を書くスペースを空けておくのです。(“\(-1\)” を書く位置は好みで変えて構いません。)
    .
  2. 次に、最高次の係数 \(1\) をそのまま下に書き写します
    .
  3. 線の下に書いた \(1\) に \(-1\) をかけた積を右斜め上に書き、縦に和を計算して線の下に書きます。(これを繰り返す。)
    .
  4. 線の下に書いた \(3\) に \(-1\) をかけた積を右斜め上に書き、縦に和を計算して線の下に書きます
    .
  5. 線の下に書いた \(1\) に \(-1\) をかけた積を右斜め上に書き、縦に和を計算して線の下に書きます
    .
  6. 線の下に書いた \(2\) に \(-1\) をかけた積を右斜め上に書き、縦に和を計算して線の下に書きます
    .
  7. 線の下に書いた \(0\) に \(-1\) をかけた積を右斜め上に書き、縦に和を計算して線の下に書きます
    .
  8. 右端まで到達したら、最後に線の下に書いた数が求めたかった代入した値です。今回は \(6\) であって \(0\) でないので \((x+1)\) では割り切れないということですね。
    .

同様に、\(-2\), \(-3\) について計算してみると次のようになります。

 

これより、\(P(-3)=0\) であるので、因数定理より \(P(x)\) は \((x+3)\) で割り切れるというわけです。

以上の計算を、その記述方法から組立除法と呼びます。

 

最後に

今回は、組立除法は筆算を簡単化したものだと知っているが腑に落ちない納得いかない、という方に向けて、筆算を用いない方法で組立除法を導き出しました。ホーナー法を経由した方法では多項式に値を代入した結果がわかり、剰余定理から余りが求まります。今回の説明では「商」は表立って出てきません。

本記事では触れませんでしたが、組立除法における商の解釈を与えてくれる筆算に由来する方法を軽視しているわけではありません。その考え方を軸に、本記事の方法で理解を補強することができたら良いなと考えています。

理解することが難しい事柄にぶつかったとき、異なる方向からの説明を受け入れることで元の解説も合点がいくようになることがありますよね。

 

それではみなさん、良いお年をお迎えください。

AkiyaMath

コメント

タイトルとURLをコピーしました