高次多項式の根を求める


前回のプログラムは、2次方程式の根を計算しました。今度は3次以上の多項式の根を計算します。このためにはいろいろな方法がありますが、今回はニュートン法という方法を使います。まずニュートン法について簡単に説明しましょう。
ニュートン法では、ある値 x(1) から出発して、数列 x(2), x(3), x(4), .... と次第に f(x) の根に近づいていくような数列 x(i) ( i = 1,2,3,...) を計算していきます。この様子を図で見てみましょう。

いま、f(x) が x の多項式であるとして、y = f(x) のグラフが次の青線の部分のようになっているとします。

ここでは、x(1) = 1 とします。このとき、x=x(1) における f(x) の接線(下の赤線の部分)を考えます。

接線の方程式は、傾きが で点 を通ることから

で与えられることがわかります。次に、上の接線と x 軸との交点、つまり接線の根を計算するために、y = 0 とおいて x について解けば

となります。これを x(2) とします。下の図からわかるように、x(2) は x(1) に比べて確かに f(x) の根に近づいています。

次に、今度は x(2) を先ほどの x(1) と同じようにし、x = x(2) での f(x) の接線を考え、その接線(下の図の緑の線)の根を x(3) とおきます。先ほどと同様にして、x(3) は x(2) より

で計算されます。x(3) は x(2) よりさらに、f(x) の根に近づいています。

このようにして、x = x(i) での f(x) の接線の根を x(i+1)とすることで、x(1),x(2),x(3),...,x(i),... は f(x) の根に近づいていく数列になります。k が十分大きければ、x(k) は根に十分近い値となるはずです。以上をまとめると、ニュートン法による f(x) の根の計算は次のようになります。

以上をもとに

の根を計算するプログラムを作ってみます。この場合は

であることに注意してください。

サンプルプログラム4

プログラムの解説をします。

プログラムを実行してみましょう。

上のように根が計算されました。正確な根の値は

なので、ニュートン法で計算された根は表示されているところまで正しい根になっています。
ところで、上の多項式は3次多項式なので全部で根を3つもっているはずです。他の2つの根はどうしたのでしょうか?実は他の2つの根は複素根となっているので、上の方法では計算することができません。多項式の全ての根を計算する方法もありますが、また別の機会に紹介することにします。