RS符号風アプリ:評価点 \( \alpha_i = i \)・送信曲線・ラグランジュ補間

真の送信多項式 \( f(x) \) の曲線(次数 \( < k \))
送信語の点 \( c_i = f(\alpha_i) \) 受信語の点 \( y_i \)(正しい位置) 受信語の点 \( y_i \)(誤り位置:学習用にハイライト)
赤い輪 ◎ が付いた点が「選択された \( k \) 個の評価点 \( (\alpha_i, y_i) \)」
選択された \( k \) 点から補間した次数 \( < k \) の多項式 \( g(x) \)

Reed–Solomon符号風モデルとラグランジュ補間

1. パラメータと送信多項式(次数 \( < k \))

一般の \([n,k]\) RS 符号では、有限体 \(\mathbb{F}_q\) 上で互いに異なる評価点 \(\alpha_1,\alpha_2,\dots,\alpha_n\) を固定し、長さ \(k\) のメッセージ

\[ m = (m_0, m_1, \dots, m_{k-1}) \in \mathbb{F}_q^k \]

を係数とする「次数高々 \(k-1\)」の多項式

\[ f(x) = m_0 + m_1 x + \cdots + m_{k-1} x^{k-1} \]

を作ります。ここで \(\deg f \le k-1\)、すなわち「送信された曲線は \(k\) 次未満の多項式曲線」です。

2. 評価点 \( \alpha_i \) と送信語 \( c_i = f(\alpha_i) \)

評価点で多項式を評価すると、コード語(送信語)

\[ c = (c_1, \dots, c_n), \qquad c_i = f(\alpha_i) \]

を得ます。これは「評価点 \(\alpha_i\) における評価値 \(f(\alpha_i)\) を並べたもの」です。 このアプリでは、有限体の代わりに実数上で

\[ \alpha_i = i \quad (i = 1,\dots,n) \]

とおき、実数係数の多項式 \(f(x)\) を用いて“RS符号風”の状況を可視化しています。 青い点が送信値 \(c_i = f(\alpha_i)\) です。

3. 受信語 \( y_i \) と誤り \( e_i \)

送信途中で誤りが入ると、受信側では

\[ y_i = c_i + e_i = f(\alpha_i) + e_i \]

のように、誤りベクトル \(e = (e_1,\dots,e_n)\) が加わった受信語 \(y = (y_1,\dots,y_n)\) を観測します。 RS 符号の最小距離は \(d_{\min} = n - k + 1\) で、訂正能力は

\[ t = \left\lfloor \frac{d_{\min} - 1}{2} \right\rfloor \]

と与えられ、理論的には \(t\) 個までの誤りを訂正できます。このアプリでは 「常に \(e = t\) 個」の誤りを入れた例を表示しています。

4. k 個の評価点から次数 \( < k \) の多項式が一意に定まる

評価点 \(\alpha_i\) が互いに異なるとき、 任意の \(k\) 個のペア \((\alpha_{i_1}, v_{i_1}),\dots,(\alpha_{i_k}, v_{i_k})\) に対して、 \[ g(x) = a_0 + a_1 x + \cdots + a_{k-1} x^{k-1} \] という形の多項式で \[ g(\alpha_{i_j}) = v_{i_j} \quad (j = 1,\dots,k) \] を満たすものは「ちょうど 1 つ」だけ存在します。

つまり「次数 \( < k \) の多項式は、k 個の評価点での値を指定すると一意に決まる」ので、 \(k\) 個の正しい評価点 \((\alpha_i, f(\alpha_i))\) が分かれば、 元の送信多項式 \(f(x)\) を完全に復元でき、その結果、すべての \(f(\alpha_i)\) が分かります。

5. ラグランジュ補間多項式(ラグランジュ曲線)

実際に多項式 \(g(x)\) を構成する方法の 1 つが「ラグランジュ補間多項式」です。 \(k\) 個の評価点 \((\alpha_{i_1}, v_{i_1}),\dots,(\alpha_{i_k}, v_{i_k})\) に対して、ラグランジュ基底多項式

\[ L_j(x) = \prod_{\substack{m=1 \\ m \ne j}}^{k} \frac{x - \alpha_{i_m}}{\alpha_{i_j} - \alpha_{i_m}} \quad (j = 1,\dots,k) \]

を定義すると、

\[ g(x) = \sum_{j=1}^{k} v_{i_j} \, L_j(x) \]

が、すべての評価点を通る次数高々 \(k-1\) の多項式になります。 このアプリで描いている緑の曲線 \(g(x)\) は、 「選択した \(k\) 個の評価点を通る唯一の次数 \(< k\) の多項式」という意味で、 ラグランジュ補間多項式と同じ役割を果たしています (実装上は線形方程式を解いていますが、理論的にはラグランジュ公式と同値です)。

6. このアプリで確認できること

このアプリでは、常に訂正能力と同じ個数 \(e = t\) の誤りを入れた受信語を表示しています。

エラーのない点だけを \(k\) 個選べば、補間多項式 \(g(x)\) は真の送信多項式 \(f(x)\) と一致し、 送信語全体を正しく復元できます。
一方、選んだ \(k\) 個の中に誤り位置が混ざると、\(g(x)\) は \(f(x)\) からずれてしまい、 青い送信点を通らない別の曲線になります。これが「誤り訂正限界 \(t\)」の直感的なイメージです。