数値解析において、エストリンのスキーム(ジェラルド・エストリンにちなんで名付けられた)は、エストリン法としても知られ、多項式の数値評価のためのアルゴリズムです。
多項式を評価するためのHorner 法は、この目的に最もよく使用されるアルゴリズムの 1 つであり、Estrin 法とは異なり、任意の多項式を評価するために必要な乗算と加算の回数を最小限に抑えるという意味で最適です。最新のプロセッサでは、互いの結果に依存しない命令は並列で実行できます。Horner 法には、それぞれが前の命令に依存する一連の乗算と加算が含まれているため、並列で実行できません。Estrin 法は、このシリアル化を克服しながらも、最適にかなり近い方法の 1 つです。
アルゴリズムの説明
エストリンの方式は再帰的に動作し、xのn次多項式(n ≥ 2)を、 ⌈ n /2⌉の独立した演算(x 2を計算するために1つ追加)を使用してx 2の⌊ n /2 ⌋次多項式に変換します。
任意の多項式P ( x ) = C 0 + C 1 x + C 2 x 2 + C 3 x 3 + ⋯ + C n x nが与えられた場合、隣接する項を ( A + Bx )の形式の部分式にグループ化し、それをx 2の多項式として書き直すことができます。P ( x ) = ( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 + ( C 4 + C 5 x ) x 4 + ⋯ = Q ( x 2 )。
これらの各部分式とx 2 は並列に計算できます。また、一部のアーキテクチャではネイティブの乗算累積命令を使用して評価することもできます。これは、Horner 法と共通する利点です。
このグループ化を繰り返すと、 x 4の多項式が得られます: P ( x ) = Q ( x 2 ) = (( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 ) + (( C 4 + C 5 x ) + ( C 6 + C 7 x ) x 2 ) x 4 + ⋯ = R ( x 4 )。
これを⌊ log 2 n ⌋ +1 回繰り返すと、多項式の並列評価のためのエストリンのスキームに到達します。
- 0 ≤ i ≤ ⌊ n /2 ⌋のすべての値について、 D i = C 2 i + C 2 i +1 xを計算します。( nが偶数の場合、C n +1 = 0 となり、D n /2 = C nとなります。)
- n ≤ 1の場合 、計算は完了し、D 0が最終的な答えになります。
- それ以外の場合は、y = x 2を計算します( D iの計算と並行して)。
- エストリンの方式を使用して、Q ( y ) = D 0 + D 1 y + D 2 y 2 + ⋯ + D ⌊ n /2 ⌋ y ⌊ n /2 ⌋を評価します。
これは、1 行目で合計n 回の乗算累積演算 (Horner 法と同じ) を実行し、3 行目で追加の⌊ log 2 n ⌋ の二乗を実行します。これらの追加の二乗と引き換えに、スキームの各レベルのすべての演算は独立しており、並列に計算できます。最長の依存パスは、⌊ log 2 n ⌋ +1 演算の長さです。
例
P n ( x ) を次の形式のn次多項式とします: P n ( x ) = C 0 + C 1 x + C 2 x 2 + C 3 x 3 + ⋯ + C n x n
Estrin の方式で記述すると次のようになります。
- P 3 ( x ) = ( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2
- P 4 ( x ) = ( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 + C 4 x 4
- P 5 ( x ) = ( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 + ( C 4 + C 5 x ) x 4
- P 6 ( x ) = ( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 + (( C 4 + C 5 x ) + C 6 x 2 ) x 4
- P 7 ( x ) = ( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 + (( C 4 + C 5 x ) + ( C 6 + C 7 x ) x 2 ) x 4
- P 8 ( x ) = ( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 + (( C 4 + C 5 x ) + ( C 6 + C 7 x ) x 2 ) x 4 + C 8 x 8
- P 9 ( x ) = ( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 + (( C 4 + C 5 x ) + ( C 6 + C 7 x ) x 2 ) x 4 + ( C 8 + C 9 x ) x 8
- …
P 15 ( x ) の評価を詳しく考えてみましょう。
- 入力: x、C 0、C 1、C 2、C 3、C 4、C 5 、C 6 、 C 7、C 8、C 9 、 C 10、C 11、C 12、C 13 、 C 14、C 15
- ステップ 1: x 2、C 0 + C 1 x、C 2 + C 3 x、C 4 + C 5 x、C 6 + C 7 x、C 8 + C 9 x、C 10 + C 11 x、C 12 + C 13 x、C 14 + C 15 x
- ステップ 2: x 4、( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2、( C 4 + C 5 x ) + ( C 6 + C 7 x ) x 2、( C 8 + C 9 x ) + ( C 10 + C 11 x ) x 2、( C 12 + C 13 x ) + ( C 14 + C 15 x ) x 2
- ステップ 3: x 8、(( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 ) + (( C 4 + C 5 x ) + ( C 6 + C 7 x ) x 2 ) x 4、(( C 8 + C 9 x ) + ( C 10 + C 11 x ) x 2 ) + (( C 12 + C 13 x ) + ( C 14 + C 15 x ) x 2 ) x 4
- ステップ 4: ((( C 0 + C 1 x ) + ( C 2 + C 3 x ) x 2 ) + (( C 4 + C 5 x ) + ( C 6 + C 7 x ) x 2 ) x 4 ) + ((( C 8 + C 9 x ) + ( C 10 + C 11 x ) x 2 ) + (( C 12 + C 13 x ) + ( C 14 + C 15 x ) x 2 ) x 4 ) x 8
参考文献
- Estrin, Gerald (1960 年 5 月)。「コンピュータ システムの構成 - 固定構造と可変構造のコンピュータ」(PDF)。Proc . Western Joint Comput. Conf。サンフランシスコ: 33–40。doi :10.1145/ 1460361.1460365。S2CID 16384320 。
- Muller, Jean-Michel (2005).初等関数: アルゴリズムと実装(第 2 版). Birkhäuser. p. 58. ISBN 0-8176-4372-9。
さらに読む
- fast_polynomial、改良されたスキームを使用する Sage ライブラリ (拡張概要)。
