假设我有原始的大型稀疏线性系统:。现在,我没有因为A太大而不能分解或进行任何形式的分解,但是假设我有一个带有迭代求解的解决方案。
现在,我希望对A的对角线应用小秩更新(更改一些对角线条目):(其中是对角矩阵,其中对角线中大多数为0,一些非零值。如果我有我将可以利用伍德伯里公式对逆进行更新。但是,我没有此功能。除了重新解决整个系统,我还能做些什么吗?是否可以通过某种方式想出一个容易\容易反转的前置条件,例如,所以如果我拥有,我将要做的就是套用 迭代方法会收敛几次/几次迭代?
假设我有原始的大型稀疏线性系统:。现在,我没有因为A太大而不能分解或进行任何形式的分解,但是假设我有一个带有迭代求解的解决方案。
现在,我希望对A的对角线应用小秩更新(更改一些对角线条目):(其中是对角矩阵,其中对角线中大多数为0,一些非零值。如果我有我将可以利用伍德伯里公式对逆进行更新。但是,我没有此功能。除了重新解决整个系统,我还能做些什么吗?是否可以通过某种方式想出一个容易\容易反转的前置条件,例如,所以如果我拥有,我将要做的就是套用 迭代方法会收敛几次/几次迭代?
Answers:
保存在两个矩阵的列中 和 所有向量 在先前的迭代中将矩阵应用于哪个矩阵以及结果 。
对于每个新系统 (要么 ,这是特例 ),近似解决超定线性系统 例如,通过选择行的子集(可能是全部)并使用密集最小二乘法。请注意,只有需要组装;所以这是一个快速的操作!
放 。这是一个很好的初始近似值,可用来开始迭代求解。如果必须处理其他系统,请在此新迭代中使用矩阵向量乘积来扩展矩阵 和 在结果子系统上。
如果矩阵 和 不适合主存储器,存储 在磁盘上,并预先选择行的子集。这使您可以保持核心的相关部分 和 需要形成最小二乘方系统,下一个 可以通过一次计算 很少使用核心内存。
选择行的方式应使其大致对应于整个问题的粗略离散化。比预期的矩阵向量乘以的总数多五倍的行应该足够了。
编辑:为什么这个工作?通过构造,矩阵 和 被关联 。如果子空间由 包含精确的解向量 (一种罕见但简单的情况),然后 具有形式 对于一些 。代入方程式定义 给出等式 。因此,在这种情况下,以上过程作为起点,这是确切的解决方案。
总的来说,不能指望 放在...的列空间中 ,但生成的起点将是此Cloumn空间中最接近的点 ,以所选行确定的指标为准。因此,这可能是一个合理的近似值。随着更多系统的处理,列空间会增加,并且近似值可能会改善很多,因此人们可以希望收敛的迭代次数越来越少。
Edit2:关于生成的子空间:如果一个人使用Krylov方法求解每个系统,则用于获取第二个系统的起点的向量跨越了第一个右侧的Krylov子空间。因此,只要此Krylov子空间包含的向量接近您的第二个系统的解,就可以很好地近似。一般而言,向量可用于获取st系统跨越一个空间,该空间包含第一个的Krylov子空间 右手边。