使用 LU 分解求解移位线性系统

计算科学 线性代数 线性求解器 稀疏矩阵
2021-12-16 13:13:21

我有兴趣解决一系列移位线性系统(A+σI)x=b对于不同的值σ. 矩阵A稀疏且不太大,因此我可以使用其 LU 分解。做这个的最好方式是什么?

这是为了计算频谱;σ大致是频率,因此它会在一段时间内平滑变化。我希望附近的解决方案σ会有些相似。我的第一个想法是使用像 GMRES 这样的迭代求解器,将 LU 因子作为预处理器,但我想知道是否有更好的方法。

3个回答

有一种称为自动多级子结构 (AMLS) 的方法,该方法最初是为振动分析中的类似问题而设计的,其中具有特定偏移的线性系统的解对应于频率响应问题,该频率是频率的平方根调动,转移。基本思想是使用嵌套剖析来生成分隔符和子结构树,并使用子结构的低频模式的扩展(可以很便宜地找到)作为减少全局模型的一种手段。它的设置成本与单个分解成正比,但成本会随着您想要解决的最高频率而增长。

原始论文在这里麦克斯韦方程的扩展在这里

免责声明:我曾经在发明AMLS的实验室工作

解决方案x(因此任何从它计算的简单响应)是一个分析函数σ,因此它可以很好地用有理函数局部逼近。响应在特征值处具有极点A,这就是需要有理插值的原因。以下插值技术应该可以很好地处理与响应中峰值数量大致相等的分解数量。

计算三个值的分解σ,即区间的端点和中点,然后计算感兴趣的响应及其前两个(或更多)导数σ. 请注意,给定分解,您可以通过多个反解轻松获得导数。

然后使用分段有理 Hermite 插值,首先是一个有理数,然后是两个有理数,每个子区间一个。假设感兴趣的响应衰减到零σ(如果不需要更改插值中的度数),d子区间端点处的导数允许通过一个度的商进行插值d1多项式除以一次d多项式。为了d=2,这精确地捕获了单个洛伦兹峰,对于d=4它捕获了两个的叠加。(如果这还不够,还可以考虑多点 Hermite 插值,更好地利用计算数据,但会增加编程工作量。)

通过在最后两个插值差异最大的点进行额外的精确计算来测试当前插值的准确性,在新点创建的两个区间中使用新的分解和新的合理拟合,以确定何时可以退出。

除非您的频谱非常复杂,否则您只需要很少的分解。

您可以使用直接求解A+σ0I作为前置条件A+σiI只要σi相当接近σ0. 如果光谱远离原点,这往往会很好地工作。您可以使用此答案中描述的一阶校正来稍微改进近似值如果光谱穿过两个位移之间的原点σ0σi,就像发生在亥姆霍兹身上一样,我不知道如何利用旧的因式分解。