在关于逆数论变换的上一章中,我们断言本原 k 次单位根 ω 的范德蒙德矩阵 V(ω) 的逆矩阵同样是一个范德蒙德矩阵,由 k1V(ω−1) 给出。现在我们来证明这个事实。
对数学不太感兴趣的读者可以跳过本章,这不会有任何影响。只要接受我们提出的逆矩阵是有效的,就不需要为了理解 INTT 而阅读本章。
范德蒙德矩阵的定义是每一行都是一个等比数列的矩阵。
- 第一行是 ω0 的等比数列,从 (ω0)0 到 (ω)k−1。
- 第二行是 ω1 的等比数列,从 (ω1)0 到 (ω1)k−1。
- 以此类推,直到最后一行,即 ωk−1 的等比数列,从 (ωk−1)0 到 (ωk−1)k−1。
V(ω)=(ω0)0(ω1)0(ω2)0⋮(ωk−1)0(ω0)1(ω1)1(ω2)1⋮(ωk−1)1(ω0)2(ω1)2(ω2)2⋮(ωk−1)2⋯⋯⋯⋱⋯(ω0)k−1(ω1)k−1(ω2)k−1⋮(ωk−1)k−1.
因此,V(ω) 的第 i 行、第 j 列的每个元素由下式给出:
考虑一个次数至多为 k−1 的多项式 f(x),其表达式为:
f(x)=a0+a1x+a2x2+⋯+ak−1xk−1
设 S 为由本原 k 次单位根生成的 k 次单位根集合:
S={ω0,ω1,ω2,⋯ωk−1}
f(x) 在集合 S 上的求值向量,
y=f(ω0)f(ω1)f(ω2)⋮f(ωk−1)
可以通过将系数向量 a 乘以 V(ω) 来获得:
\mathbf{y}= V(\omega) \cdot \mathbf{a}\
f(ω0)f(ω1)f(ω2)⋮f(ωk−1)=(ω0)0(ω1)0(ω2)0⋮(ωk−1)0(ω0)1(ω1)1(ω2)1⋮(ωk−1)1(ω0)2(ω1)2(ω2)2⋮(ωk−1)2⋯⋯⋯⋱⋯(ω0)k−1(ω1)k−1(ω2)k−1⋮(ωk−1)k−1a0a1a2⋮ak−1
其中 a0,a1,...,ak−1 是多项式 f(x) 的系数。
等式左边的每一行都是范德蒙德矩阵的第 i 行与向量 a 的内积。例如,第 i 个元素 f(ωi) 为:
f(ωi)=⟨[(ωi)0,(ωi)1,…,(ωi)k−1],a⟩=(ωi)0a0+(ωi)1a1+…+(ωi)k−1ak−1=ωi0a0()+ωi1a1()+…+ωi(k−1)ak−1
因此,这些求值可以写成:
f(ωi)=j=0∑k−1ωijaj
其中 i∈{0,1,2,...,k−1}。
关于索引的注记:在上面的等式中,我们有两个索引。索引 i 表示我们正在处理哪个求值,它可以取值 0,1,2,…,k−1。这意味着上面的公式不仅代表一个等式,而是代表 k 个等式,每个 i 值对应一个。例如,上面的记法是以下形式的简写:
f(ω0)f(ω1)⋮f(ωk−1)=j=0∑k−1ω0jaj=j=0∑k−1ω1jaj=j=0∑k−1ω(k−1)jaj
ωij 和 aj 中的索引 j 是一个求和索引,因此被求和“消耗”掉了。因为它被求和消耗了,所以它不会出现在等式的左边。索引 i 和 j 的选择是任意的;我们本可以使用 m,n,p,q 或任何其他字母。一般来说,对于向量索引,通常使用字母表中间的字母。
现在我们想找到反向的对应关系,以便从向量 y 中求得向量 a。换句话说,我们想计算 a=V−1(ω)⋅y,其中 V−1(ω) 是 V(ω) 的逆矩阵。
我们的断言是,范德蒙德矩阵 V(ω) 的逆矩阵同样是一个范德蒙德矩阵,由 k1V(ω−1) 给出。
为了更清楚起见,我们的断言是:
V−1(ω)=k1V(ω−1)
其中 ω 是一个本原 k 次单位根。
如果该断言正确,向量 a 可以按如下方式计算:
a=k1V(ω−1)⋅y
a0a1⋮ai⋮ak−1=k1(ω0)0(ω−1)0⋮(ω−i)0⋮(ω−(k−1))0(ω0)1(ω−1)1⋮(ω−i)1⋮(ω−(k−1))1⋯⋯⋱⋯⋱⋯(ω0)k−1(ω−1)k−1⋮(ω−i)k−1⋮(ω−(k−1))k−1f(ω0)f(ω1)⋮f(ωk−1)
分量 ai 是 k1V(ω−1) 的第 i 行与向量 y 之间的内积:
ai=k1[(ω−i)0(ω−i)1⋯(ω−i)k−1]⋅f(ω0)f(ω1)⋮f(ωk−1)=k1(ω−i)0f(ω0)+k1(ω−i)1f(ω1)+…+k1(ω−i)k−1f(ωk−1)=k1ω−i0f(ω0)()+k1ω−i1f(ω1)()+…+k1ω−i(k−1)f(ωk−1)
这个运算可以写成如下的求和:
ai=m=0∑k−1k1ω−imf(ωm)
其中 i∈{0,1,2,...,k−1}。
出于教学原因,我们将用两种不同的方法来证明我们的断言——范德蒙德矩阵 V(ω) 的逆矩阵是另一个范德蒙德矩阵,由 k1V(ω−1) 给出。
首先,我们将证明 V(ω) 和 k1V(ω−1) 的矩阵乘法结果为单位矩阵 I,也就是说:
V(ω)⋅k1V(ω−1)=I
然后,我们将证明,如果我们首先将 V(ω) 乘以 a 得到 y,然后再将 k1V(ω−1) 乘以 V(ω)a,我们就能恢复出 a。
这两个证明本质上是一样的,只是用了两种不同的表达方式。
V(ω)⋅k1V(ω−1)=I 的证明
我们将证明 V(ω) 与 k1V(ω−1) 的矩阵乘法结果为单位矩阵。
该证明依赖于单位根的正交性(orthogonality property),其表示为一个求和公式。因此,我们首先将矩阵乘法写成求和的形式,以便能够使用这一正交性。
索引记法下的乘法 V(ω)⋅k1V(ω−1)
回顾一下,V(ω) 中第 i 行、第 m 列的矩阵元素由下式给出:
注:这里的行号和列号是从 0 开始计算的,而不是 1。
例如,V(ω) 中第 1 行、第 2 列的元素是 (ω1)2, 如下方用红色高亮标出的位置:
V(ω)=(ω0)0(ω1)0(ω2)0⋮(ωk−1)0(ω0)1(ω1)1(ω2)1⋮(ωk−1)1(ω0)2(ω1)2(ω2)2⋮(ωk−1)2⋯⋯⋯⋱⋯(ω0)k−1(ω1)k−1(ω2)k−1⋮(ωk−1)k−1
同样,k1V(ω−1) 中第 m 行、第 j 列的矩阵元素由下式给出:
k1ω−mj
例如,k1V(ω−1) 中第 2 行、第 0 列的元素是 (ω−2)0,如下方高亮标出的位置:
k1V(ω−1)=k1(ω0)0(ω−1)0(ω−2)0⋮(ω−(k−1))0(ω0)1(ω−1)1(ω−2)1⋮(ω−(k−1))1(ω0)2(ω−1)2(ω−2)2⋮(ω−(k−1))2⋯⋯⋯⋱⋯(ω0)k−1(ω−1)k−1(ω−2)k−1⋮(ω−(k−1))k−1
因此,当这两个矩阵 V(ω) 和 k1V(ω−1) 相乘时,所得矩阵中第 i 行、第 j 列的元素,是通过将 V(ω) 的第 i 行(红色)与 k1V(ω−1) 的第 j 列(蓝色)相乘得到的:
V(ω)⋅k1V(ω−1)=(ω0)0(ω1)0⋮(ωi)0⋮(ωk−1)0(ω0)1(ω1)1⋮(ωi)1⋮(ωk−1)1(ω0)2(ω1)2⋮(ωi)2⋮(ωk−1)2⋯⋯⋱⋯⋱⋯(ω0)k−1(ω1)k−1⋮(ωi)k−1⋮(ωk−1)k−1k1(ω0)0(ω−1)0(ω−2)0⋮(ω−(k−1))0(ω0)1(ω−1)1(ω−2)1⋮(ω−(k−1))1⋯(ω0)j⋯(ω−1)j⋯(ω−2)j⋮⋯(ω−(k−1))j⋯⋯⋯⋱⋯(ω0)k−1(ω−1)k−1(ω−2)k−1⋮(ω−(k−1))k−1
我们将矩阵 V(ω)⋅k1V(ω−1) 的每个元素记为 Mij,那么它由下式给出:
Mij =(ωi)0(ω0)j +(ωi)1(ω−1)j +⋯ +(ωi)k−1(ω−(k−1))j=ωi0ω0j +ωi1ω−1j +⋯ +ωi(k−1)ω−(k−1)j=m=0∑k−1 ωimk1ω−mj=k1m=0∑k−1(ωm)i−j
现在我们需要证明元素 Mij 等于单位矩阵中的元素。为此,我们将使用单位根的正交性。
回顾:单位根的正交性
在关于单位根正交性的章节中,我们展示了:
m=0∑k−1(ωm)i−j=⎩⎨⎧k,0,if i≡j(modk),otherwise.
简言之,上面的公式给出了两种情况下的求和结果:(1) 当 i≡j 时,以及 (2) 当 i≡j 时。我们将在下面使用这两种情况。
情况 1:当 i≡j 时
我们想计算
Mij=k1m=0∑k−1(ωm)i−j
在 i≡j 时的值。单位根的正交性指出,当 i≡j 时,
m=0∑k−1(ωm)i−j=k
将此结果应用于 Mij,我们有:
Mij=k1m=0∑k−1(ωm)i−j=k1k=1
因此,对于对角线项(如 M00,M11,M22,...,M(k−1)(k−1)),我们有:
Mij=1when i=j
情况 2:当 i≡j 时
现在我们想计算
Mij=k1m=0∑k−1(ωm)i−j
在 i≡j 时的值。单位根的正交性指出,当 i≡j 时,
m=0∑k−1(ωm)i−j=0
将此结果应用于 Mij,我们得到:
Mij=k1m=0∑k−1(ωm)i−j=k10=0
因此,对于任何非对角线项(如 M10,M01,M12,…),我们有 Mij=0。
矩阵 M
综合考虑上面的情况 (1) 和 (2),我们得到矩阵 M=(Mij) 为:
M=10⋮001⋮0⋯⋯⋱⋯00⋮1
这恰好是单位矩阵 I。因此,矩阵 V(ω) 和 k1V(ω−1) 互为逆矩阵,因为:
V(ω)⋅(k1V(ω−1))=M=I
k1V(ω−1) 与向量 y 的矩阵乘法将恢复出向量 a
证明 k1V(ω−1) 是 V(ω) 的逆矩阵的另一种方法,是证明它能够反转后者的操作。
也就是说,如果我们首先对 a 应用 V(ω) 得到 y,
y=V(ω)⋅a
然后再对 y 应用 k1V(ω−1),我们将恢复出 a:
a=k1V(ω−1)⋅y
这正是我们将要证明的。
第一次变换:y=V(ω)⋅a
第一次变换通过以下矩阵运算,将系数向量 a 转换为求值向量 y:
f(ω0)f(ω1)f(ω2)⋮f(ωk−1)=(ω0)0(ω1)0(ω2)0⋮(ωk−1)0(ω0)1(ω1)1(ω2)1⋮(ωk−1)1(ω0)2(ω1)2(ω2)2⋮(ωk−1)2⋯⋯⋯⋱⋯(ω0)k−1(ω1)k−1(ω2)k−1⋮(ωk−1)k−1a0a1a2⋮ak−1
正如我们已经看到的,这个矩阵运算可以使用索引写为:
f(ωi)=j=0∑k−1ωijaj
第二次变换:a~=k1V(ω−1)y
现在我们对向量 y 进行第二次变换,得到一个向量 a~:
a~0a~1a~2⋮a~k−1=k1(ω0)0(ω−1)0(ω−2)0⋮(ω−(k−1))0(ω0)1(ω−1)1(ω−2)1⋮(ω−(k−1))1(ω0)2(ω−1)2(ω−2)2⋮(ω−(k−1))2⋯⋯⋯⋱⋯(ω0)k−1(ω−1)k−1(ω−2)k−1⋮(ω−(k−1))k−1f(ω0)f(ω1)f(ω2)⋮f(ωk−1)
如果我们能证明 a=a~,那么第二次变换就是第一次变换的逆运算。
上面的矩阵运算可以写成索引形式:
a~j=m=0∑k−1k1ω−jmf(ωm)
现在代入 f(ωi) 的表达式。回顾一下
f(ωi)=j=0∑k−1ωijaj
其中 i 只是一个可以替换为 m 或任何其他字母的索引。因此,将 a~j 结果中的 f(ωm) 替换后,我们得到:
a~j=m=0∑k−1k1ω−jmf(ωm)=m=0∑k−1k1ω−jm(i=0∑k−1ωmiai)
将其重写为双重求和的形式:
a~j=i=0∑k−1m=0∑k−1k1ω−jmωmiai=i=0∑k−1k1(m=0∑k−1ωm(i−j))ai
括号中的项恰好是正交关系式:
m=0∑k−1(ωm)i−j=⎩⎨⎧k,0,if i≡j(modk),otherwise.
为了继续证明,我们可以像之前一样分别研究情况 (1) i=j 和情况 (2) i=j,但这次我们将采用不同的方法。我们将引入一个叫做克罗内克 δ 函数(Kronecker delta)的符号。
克罗内克 δ 函数 δij 是一个带有 2 个索引(在本例中为 i 和 j)的符号,当 i=j 时它的值为 1,否则为 0:
δij={10if i=jif i=j
克罗内克 δ 函数可以被理解为单位矩阵中的元素。
使用克罗内克 δ 函数,我们可以将正交性写为:
m=0∑k−1(ωm)i−j=kδij
在 a~j 的表达式中使用克罗内克 δ 函数,我们有:
a~j=i=0∑k−1k1(m=0∑k−1ωm(i−j))ai=i=0∑k−1k1(kδij)ai=i=0∑k−1k1(kδij)ai=i=0∑k−1δijai
展开求和式,上面的表达式可以写成:
a~j=δ0ja0+δ1ja1+δ2ja2+...+δ(k−1)jak−1
根据克罗内克 δ 函数的性质,求和中只有一个项是非零的。例如,对于 j=2,只有 δ22 是非零的。因此,我们得到:
a~2=δ02a0+δ12a1+δ22a2+⋯+δ(k−1)2ak−1=δ02a0+δ12a1+δ22a2+⋯+δ(k−1)2ak−1=a2
这对于任意 j 都成立,因此我们得出:
a~j=aj
对于任意 j 均成立。
这表明变换 k1V(ω−1) 是变换 V(ω) 的逆变换。
本文是我们 ZK Book 中关于数论变换系列文章的一部分