高次方程式、それが目的ではないとき

学生向け(WolframAlphaがなかった頃の話です。)

高次方程式を数値的に解く簡単な方法を教えてください

と訊かれました。低級言語で実装すれば数値計算の勉強になります。答えが欲しいだけなら、Mathematicaのような高級言語を使いましょう。次のように、簡単に解けます。

例:

In[3]:= With[{f = Sum[Random[Integer, {0, 9}] x^i, {i, 1, 8}] - 10},
          {f, NSolve[f == 0, x] // TableForm}]

                        3      4      5      6
Out[3]= {-10 + 2 x + 5 x  + 4 x  + 4 x  + 4 x , x -> -1.43626             }

                                                x -> -0.586233 - 1.04486 I

                                                x -> -0.586233 + 1.04486 I

                                                x -> 0.380996 - 1.13446 I

                                                x -> 0.380996 + 1.13446 I

                                                x -> 0.846732

計算機プログラムの構造と解釈Mathematicaは高いので、Maximaのようなフリー・ソフトウェアで試すとよいかもしれません。高次方程式は次のように説きます。

allroots(-10+5*x+9*x^2+4*x^3+4*x^4+6*x^5+9*x^6+3*x^8);

もう少しアルゴリズムを楽しみたいのなら、Schemeを使うのはどうでしょうか。Mathematicaのような高級言語とJavaのような低級言語の間に位置するLispの方言です(この文脈では)。Structure and Interpretation of Computer Programsに解説があります(オンライン版日本語訳