数学とコンピュータ科学において、ホーナー法(またはホーナーのスキーム)は多項式評価のためのアルゴリズムである。これはウィリアム・ジョージ・ホーナーにちなんで名付けられたが、実際にはもっと古く、ホーナーはジョセフ=ルイ・ラグランジュに帰属させており、数百年前に中国とペルシャの数学者によって発見されていた。[ 1 ]コンピュータの導入後、このアルゴリズムは多項式を効率的に計算するための基礎となった。
このアルゴリズムはホーナーの規則に基づいており、多項式は入れ子の形式で記述されます。
これにより、 n次の多項式をわずかで評価することが可能になります。乗算と加算。これは最適です。なぜなら、xと係数a 0、...、a nの両方が入力として与えられた場合、より少ない算術演算で次数nの多項式を評価することは不可能だからです。 [ 2 ]
ホーナーの方法とホーナー・ルフィニ法は、 1819年にホーナーによって提唱された、多項式の根を近似する方法のことである。これはニュートン・ラフソン法の変形であり、ホーナーの法則を適用することで手計算の効率を高めたものである。1970年頃にコンピュータが普及するまで広く用いられていた。
多項式が与えられた場合どこは定数係数であり、問題は特定の値における多項式の評価である。の
このため、新しい定数列が以下のように再帰的に定義される。
それからの値は。
これが機能する理由を確認するために、多項式を次の形式で記述できます。
したがって、反復的に置換することで表現に、
同様に、以下のことが示せる。
多項式の除算結果を決定するための便利な手順を提案する と(これは)分割の残余である。は、 それから(つまり、残りは) そしての係数。
評価するのために。
合成除法は以下のように使用します。
3行目のエントリは、最初の2行のエントリの合計です。2行目の各エントリは、x値(この例では3 ) の 3 行目のエントリをすぐ左に配置します。1 行目のエントリは評価する多項式の係数です。次に、残りの除算では5 .
しかし、多項式の剰余定理により、剰余は。 したがって、。
この例では、私たちはそれがわかる3行目の項目です。したがって、合成除法(実際にはホーナーの発表の10年前にルフィーニによって発明され発表されたもの)の方が使いやすく、ホーナーの方法と同等であることが示せます。
多項式の剰余定理の結果として、3行目の要素は2次多項式の係数、すなわち商である。除算で残りは5.これにより、ホーナー法は多項式の長除法に役立つ。
分けるによる:
商は。
させてそして。 分けるによるホーナーの方法を用いる。
3行目は、最初の2行の合計をで割ったものです。2.2行目の各項目は、1左から3行目のエントリ。答えは
次数を単項式形式で評価する多項式は最大で追加と乗算は、べき乗が繰り返し乗算によって計算され、各単項式が個別に評価される場合、コストは削減できます。追加と乗算は、反復によって。
数値データが桁数(またはビット数)で表される場合、単純なアルゴリズムでは、おおよそビット数の倍評価された多項式は近似値を持つ、また保管する必要もあるそれ自体。対照的に、ホーナーの方法では、追加と乗算、そしてストレージ要件はわずかビット数の倍あるいは、ホーナー法は以下のように計算できる。融合乗算加算。ホーナー法は最初の評価にも拡張できる。多項式の導関数加算と乗算。[ 3 ]
ホーナーの方法が最適です。任意の多項式を評価するアルゴリズムは、少なくとも同数の演算を使用する必要があるという意味で最適です。アレクサンダー・オストロフスキーは1954年に、必要な加算の回数が最小であることを証明しました。[ 4 ]ビクター・パンは1966年に、乗算の回数が最小であることを証明しました。[ 5 ]
しかし、ホーナー法は行列多項式の評価には最適ではない(は行列ですが、係数はスカラーです。スカラー乗算と行列乗算を別々に数えると、前者は後者よりも安価です。
これは、多項式が単項式形式で評価され、表現の事前処理が許可されていないことを前提としており、多項式が一度だけ評価される場合は理にかなっています。しかし、事前処理が許可され、多項式が何度も評価される場合は、より高速なアルゴリズムが可能になります。それらは、多項式の表現の変換を伴います。一般に、次数-多項式は、⌊ n /2 ⌋ +2 回の乗算のみを使用して評価できます。追加事項。[ 6 ]
ホーナーのルールの欠点は、すべての演算が順次依存しているため、現代のコンピュータにおける命令レベルの並列処理を利用できないことです。多項式評価の効率が重要なほとんどのアプリケーションでは、多くの低次多項式が同時に評価されるため(コンピュータグラフィックスでは各ピクセルまたはポリゴンごと、数値シミュレーションでは各グリッドマスごと)、単一の多項式評価内で並列処理を見つける必要はありません。
しかし、非常に高次の単一の多項式を評価する場合は、次のように分割すると便利な場合があります。
より一般的には、総和はk個の部分に分割できる。 内部の総和は、ホーナー法の別々の並列インスタンスを使用して評価できます。これは、基本的なホーナー法よりも若干多くの演算を必要としますが、ほとんどの演算をkウェイSIMD で実行できます。現代のコンパイラは、有利な場合は一般的にこのように多項式を評価しますが、浮動小数点演算の場合は、(安全でない)再結合演算を有効にする必要があります。このように多項式を分解するもう 1 つの用途は、命令レベルの並列性を活用するために、内部の総和のステップを交互に計算することです。
ホーナー法は、ハードウェア乗算器のないマイクロコントローラ上でバイナリ数の乗算と除算を行うための、高速でコード効率の良い方法です。乗算されるバイナリ数の 1 つは、自明な多項式で表され、ここで (上記の表記法を使用)、 そして。次に、x(またはxのべき乗)が繰り返し因数分解されます。この2進数体系(基数2)では、そのため、2のべき乗が繰り返し因数分解されます。
例えば、2つの数(0.15625)とmの積を求めるには:
2つの2進数dとmの積を求めるには:
一般に、ビット値を持つバイナリ数の場合(製品は このアルゴリズムの段階では、係数がゼロの項は削除され、1に等しいバイナリ係数のみがカウントされるため、因数分解された方程式に ゼロによる乗算や除算が生じるという問題は発生しません。
分母はすべて1に等しい(または項が存在しない)ので、これは次のように簡略化されます。 または同等に(上記で説明した「方法」と一致するように)
2進数(基数2)の数学では、2のべき乗による乗算は単なるレジスタシフト操作です。したがって、2を乗算することは、基数2では算術シフトによって計算されます。係数(2 −1 )は右算術シフト、(0)は演算なし(2 0 = 1は乗法単位元であるため)、(2 1 )は左算術シフトになります。これで、乗算積は、算術シフト操作、加算、減算のみを使用して迅速に計算できます。
この方法は、単一命令のシフト加算累積をサポートするプロセッサでは特に高速です。C言語の浮動小数点ライブラリと比較すると、ホーナーの方法では精度が若干低下しますが、名目上は13倍高速(「標準符号付き桁」(CSD)形式を使用する場合は16倍高速)で、コード領域はわずか20%しか使用しません。[ 7 ]
ホーナー法は、異なる位取り記数法間の変換に使用できます。この場合、x は数体系の基数であり、a i係数は与えられた数の基数x表現の桁です。また、 x が行列の場合にも使用できます。この場合、計算効率の向上はさらに大きくなります。ただし、このような場合には、より高速な方法が知られています。[ 8 ]
長除法アルゴリズムとニュートン法を組み合わせることで、多項式の実根を近似することが可能です。アルゴリズムは次のように動作します。多項式が与えられた場合、学位ゼロ付き最初に推測するそのため次に、以下の2つの手順を繰り返します。
これらの 2 つの手順は、多項式のすべての実数零点が見つかるまで繰り返されます。近似零点の精度が十分でない場合は、得られた値をニュートン法の初期推定値として使用できますが、簡約多項式ではなく完全な多項式を使用します。[ 9 ]

多項式を考える これは以下のように展開できます
上記から、この多項式の最大の根は7であることがわかっているので、初期値として8を推測できます。ニュートン法を用いると、7の最初の零点は右図の黒線で示されているように見つかります。次にで割る取得する 右の図に赤で示されている。ニュートン法を用いて、初期推定値7でこの多項式の最大の零点を求める。元の多項式の2番目に大きい零点に対応するこの多項式の最大の零点は3で見つかり、赤丸で囲まれている。5次多項式は、取得する これは黄色で示されています。この多項式の零点は、ニュートン法を用いて再び2で求められ、黄色で囲まれています。次にホーナー法を用いて、 これは緑色で示されており、 −3 に零点があることがわかります。この多項式はさらに簡略化され、 これは青色で示されており、 -5 の零点が得られます。元の多項式の最終的な根は、ニュートン法の初期推定値として最終的な零点を使用するか、または、 そして、線形方程式を解きます。ご覧のとおり、期待される根である−8、−5、−3、2、3、および 7 が見つかりました。
ホーナー法は分割差を計算するように修正できる。与えられた多項式(前述のとおり) 以下のように進めてください[ 10 ]
完成時には、 この分割差の計算は、評価するよりも丸め誤差 が少ない。そして別々に、特に。
ホーナーの論文「連続近似による全次数数値方程式の新しい解法」[ 12 ]は、 1819年7月1日のロンドン王立協会の会合で発表され、1823年に続編が発表された。 [ 12 ] 1819年のロンドン王立協会の哲学的トランザクション第2部に掲載されたホーナーの論文は、1820年4月のマンスリー・レビュー:または文学ジャーナルの書評で、ある評論家から温かく広く歓迎された。これに対し、チャールズ・バベッジの技術論文はこの書評で簡潔に却下されている。1821年9月のマンスリー・レビューの書評の一連の論評は、数値方程式の直接的かつ一般的な実用的解法を発見した最初の人物はホルドレッドであると結論付けている。フラー[ 13 ]は、ホーナーの1819年の論文の方法は、後に「ホーナーの方法」として知られるようになった方法とは異なり、したがってこの方法の優先権はホルドレッド(1820)に与えられるべきであることを示した。
ホーナーは、同時代のイギリス人とは異なり、大陸ヨーロッパの文学、特にアーボガストの著作から影響を受けた。また、ジョン・ボニーキャッスルの代数学に関する著書を綿密に読んだことでも知られているが、パオロ・ルフィーニの著作は無視した。
ホーナーはこの方法を普及させ、実用化した功績があるとされているが、実際にはホーナー以前から知られていた方法である。時系列を逆にすると、ホーナーの方法はすでに以下の目的で知られていた。
秦九韶は、著書『書書九章』 ( 1247年)の中で、11世紀の宋代の数学者、賈賢の先行研究に基づいた、多項式方程式を解くためのホーナー型の手法を紹介しています。例えば、ある手法は特に双五次方程式に適しており、秦九韶は当時の中国の事例研究の慣習に従って、その例を挙げています。三上義雄は『中国と日本の数学の発展』(ライプツィヒ、1913年)の中で次のように書いています。
「… ホーナーの輝かしい製法が、ヨーロッパよりも少なくとも6世紀近くも早く中国で使用されていたという事実を否定できる人がいるだろうか …もちろん、我々はホーナーの発明を中国起源に帰するつもりは全くないが、時間の経過を考えると、ヨーロッパ人が直接的または間接的に中国の製法を知っていた可能性は全くあり得ないとは言えない。」[ 20 ]
ウルリッヒ・リブレヒトは次のように結論づけた。「この手順が中国の発明であることは明らかである …この方法はインドでは知られていなかった。」彼は、フィボナッチはおそらくアラブ人からそれを学んだのだろうが、アラブ人はおそらく中国人からそれを借用したのだろうと述べた。[ 21 ]同様の方法で平方根と立方根を抽出することは、劉慧が『九章算書』のIV.16と22の問題に関連して既に論じており、 7世紀の王孝通は、彼の著書『九谷算経』で説明されている近似法によって読者が3次方程式を解くことができると想定している。
{{cite book}}ISBN /日付の不一致(ヘルプ){{cite book}}ISBN /日付の不一致(ヘルプ){{cite book}}: CS1メンテナンス: 場所の発行元が見つかりません (リンク)