下一节:直接线性求解器简述 上一级:矩阵向量与矩阵矩阵乘法 上一节:CDS矩阵-向量乘积

结构化矩阵的快速矩阵-向量乘法

实践中经常出现依赖于O(n)参数的稠密矩阵。这些矩阵的例子包括

范德蒙矩阵:

V = \begin{bmatrix} 1 & 1 & \ldots & 1 \\ x_1 & x_2 & \ldots & x_n \\ x_1^2 & x_2^2 & \ldots & x_n^2 \\ \vdots & \vdots & \ddots & \vdots \\ x_1^{n-1} & x_2^{n-1} & \ldots & x_n^{n-1} \end{bmatrix},

托普利茨矩阵:

T = \begin{bmatrix} t_0 & t_{-1} & \ldots & t_{2-n} & t_{1-n} \\ t_1 & t_0 & t_{-1} & \ldots & t_{2-n} \\ \vdots & t_1 & t_0 & \ddots & \vdots \\ t_{n-2} & \vdots & \ddots & \ddots & t_{-1} \\ t_{n-1} & t_{n-2} & \ldots & t_1 & t_0 \end{bmatrix},

汉克尔矩阵: H = (H_{ij})=(c_{i+j}),

柯西矩阵: C = (C_{ij})=(\frac{1}{x_i-y_j}), 以及其他矩阵[257]。

这些矩阵及其逆矩阵可以以O(n\log^k n)时间复杂度与向量相乘,其中0 \leq k \leq 2,而不是O(n^2)O(n^3)时间,具体取决于结构。这对于使用迭代求解器处理这些矩阵特别有用。迭代求解器在求解形如(A+B)x=b的系统时也很有用,其中AB都是结构化的但属于不同的结构类别,或者如果A是结构化的而B是带状或稀疏的等。迭代方法在求解块系统时也很有用,当块是结构化矩阵但属于不同的结构类别,某些块也可能是稀疏的。例如,乘积

\begin{bmatrix}A & B \\C & 0 \end{bmatrix}\begin{bmatrix}x \\ y \end{bmatrix} =\begin{bmatrix}Ax+By \\ Cx \end{bmatrix},
其中A是对角的,BC是托普利茨矩阵,可以在O(n\log n)时间内形成。

范德蒙矩阵及其逆矩阵可以以O(n\log^2 n)时间复杂度与向量相乘[196,195]。类似范德蒙矩阵及其逆矩阵也是如此,其中“-like”矩阵的定义见第§10.3.4节。托普利茨矩阵及其类似矩阵的矩阵-向量乘法使用快速傅里叶变换(FFT)需要O(n\log n)时间[198]。柯西矩阵-向量乘积Cz相当于在n个不同点x_1,x_2,\ldots,x_n上评估函数

\Phi(w)=\sum_{i=1}^n \frac{-z_i}{y_i-w}
可以通过使用快速多极方法在O(n)时间内完成[76,205]。

本节的其余部分展示了如何为托普利茨矩阵实现O(n\log n)的矩阵-向量乘法[198]。对于其他类别的结构化矩阵,我们参考[196]和[195]。

循环矩阵是一种特殊的托普利茨矩阵,形式为

C_n = \begin{bmatrix} a_0 & a_{-1} & \ldots &a_{2-n}& a_{1-n} \\ a_1 & a_0 & a_{-1} & \ldots & a_{2-n} \\ \vdots & a_1 & a_0 & \ddots & \vdots \\ a_{n-2} & \vdots & \ddots & \ddots & a_{-1} \\ a_{n-1} & a_{n-2} & \ldots & a_1 & a_0 \end{bmatrix},
其性质为a_{-k}=a_{n-k},对于1\le k \le n-1。循环矩阵通过FFT对角化,即
C_n=F_n^* \cdot \mathrm{diag}(F_n a) \cdot F_n,
其中a=[a_0,a_1,\ldots,a_n]F_n是傅里叶矩阵 F_n(j,k) = \frac{1}{\sqrt{n}} e^{-(j-1)(k-1)2 \pi \sqrt{-1}/n}。众所周知,F_n是酉矩阵,乘积F_n x可以在O(n\log n)时间内形成[453]。乘积y=C_n x也可以通过以下四个步骤在O(n\log n)时间内形成:

(1) f =F_nx,
(2) g =F_na,
(3) z^T=[f_1g_1,f_2g_2,\ldots,f_n g_n],
(4) y=F_n^*z.

现在,如果T_n是一个托普利茨矩阵

T = \begin{bmatrix} t_0 & t_{-1} & \ldots & t_{2-n} & t_{1-n} \\ t_1 & t_0 & t_{-1} & \ldots & t_{2-n} \\ \vdots & t_1 & t_0 & \ddots & \vdots \\ t_{n-2} & \vdots & \ddots & \ddots & t_{-1} \\ t_{n-1} & t_{n-2} & \ldots & t_1 & t_0 \end{bmatrix},
那么乘积T_nx可以通过首先将T_n嵌入到一个2n\times 2n循环矩阵C_{2n}中,在O(n\log n)时间内计算,因为
C_{2n} \cdot\begin{bmatrix}y\\ 0\end{bmatrix}\equiv \begin{bmatrix}T_n & B_n \\ B_n & T_n\end{bmatrix}\cdot\begin{bmatrix}y\\ 0\end{bmatrix}= \begin{bmatrix}T_ny\\ B_n y\end{bmatrix}
并且
B_n = \begin{bmatrix}0 & t_{n-1} & \ldots & t_2 & t_1 \\ t_{1-n} & 0 & t_{n-1} & \ldots & t_2 \\ \vdots & t_{1-n} & 0 & \ddots & \vdots \\ t_{-2} & \vdots & \ddots & \ddots & t_{n-1} \\ t_{-1} & t_{-2} & \ldots & t_{1-n} & 0 \end{bmatrix}.



下一节:直接线性求解器简述 上一级:矩阵向量与矩阵矩阵乘法 上一节:CDS矩阵-向量乘积
Susan Blackford 2000-11-20