在文献《Randomized LU Decomposition》中的算法4.1,如下图:
首先,把输入矩阵A投影到一个随机矩阵G上,得到了矩阵Y,这个矩阵可以反映出输入矩阵A 值域的很大一部分;
然后,对矩阵Y应用RRLU分解,得到基底Lk和Uk,并对输入矩阵A进行再次投影,得到矩阵B;
之后,再对矩阵B进行列选主元的LU分解从而得到新基底Lb和Ub;
最后,得到L=LkLb,U=Ub。
在实现上述算法的过程中,需要考虑步骤3中RRLU分解是如何实现的,于是我们根据本篇文章的引用文献找到了如下文章,并进行了研读。
RRLU分解:全称rank-revealing LU factorizations, 实现该算法用到的内容有:
- 计算矩阵体积(volume)
上图定义3.1给出了矩阵体积的定义也就是所有奇异值的乘积。
接着,文章又给出了矩阵的局部最大体积的定义:从原矩阵A中选取k列(或者是k行)构成子矩阵B,并且使得矩阵B的体积最大。
具体原文定义,如下图:
在实际操作中,为了增加可操作性,避免陷入无穷循环,上图不等式(3.2)常常被换成不等式(3.3)
注意到在用不等式(3.3)时,对应矩阵B的体积不再单单是依赖于局部,还依赖于系数mju的选取,因此这里矩阵B的体积(vol(B))又被称为局部mju最大体积。如下图:
根据该文献的思路,找矩阵A的RRLU分解,就是找两个置换矩阵,一个可以取上述矩阵B(也就是矩阵体积是局部mju最大的矩阵),之后在此基础上根据局部mju最大选出k行。为实现上述取矩阵子集的思想,作者利用了高斯消去法。
RRLU算法: