求解李雅普诺夫方程的库

计算科学 矩阵 矩阵方程
2021-11-30 04:03:20

以下矩阵方程 in对于给定的矩阵在我的工作中作为协方差矩阵的表征出现。我了解到这个方程被称为李雅普诺夫方程,特别是在连续时间控制理论中,并且有各种众所周知的算法可以利用这个线性方程的特殊性质来求解它。

BΣ+ΣBT+C=0
Σ BC

通过谷歌搜索,我还了解到存在 Matlab 和 Fortran 实现。我找到了 SLICOT 和 RECSY。但是,由于许可问题,对 SLICOT 源的访问已停止。

我的大部分工作都是在 R 中实现的,由于我一直无法找到求解器的 R 接口,所以我考虑自己编写一个。那么我的问题是,如果 SLICOT 是最好的 Fortran(或 C)库,并实现了 Lyapunov 方程的求解器?我也对可以处理大型稀疏矩阵的实现感兴趣。 B

3个回答

SLICOT 是用于解决密集问题的工具。

对于大型但稀疏的系统,有 MATLAB 的lyapack工具箱。

lyapack 中的算法基于迭代计算低秩因子,因此接近,其中是 Lyapunov 方程的对称(正或负)定解。仅计算与稀疏系数相结合的因子使得这种方法对于大规模方程是可行的。ZnZnHZnΣΣ

德国马格德堡的马普研究所正在进行关于稀疏李雅普诺夫方程的生动研究。然而,宣布即将发布 lyapack 的继任者 - MESS - 已经有好几年了。不过,值得不时查看 MESS 的网页和特约作者的出版物。

免责声明:我的论文导师是 SLICOT 和 lyapack 的主要贡献者,我经常与 MESS 的开发人员联系。

您可以使用此连接到 MATLAB

你的矩阵不是太大:手工编码算法不应该导致太多的时间损失,也许它会运行 1 小时。根据各种因素,它可能会或可能不会太长。

但是,自己编写代码可能并不容易。我不认为我可以,过去几个月我一直在处理这个问题。但是 SLICOT 算法本身就在这里

SLICOT 的算法并没有那么复杂,它是 Schur 形式的简化 + 一些反向替换。您可以查看 Bartels-Stewart 论文http://dl.acm.org/citation.cfm?id=361582,该论文具有合理的可读性并解释了其工作原理。这篇论文是关于非对称情况的,但不难让它适应对称情况——你只需要一个 Schur 形式而不是两个。

如果它已经有 Schur 表单的例程,你也可以自己在 R 中编写代码(我会检查自己,但由于他们不幸的命名选择,从谷歌获得关于 R 的有意义的结果总是一团糟)。

这可以解决密集的情况。大而稀疏的一个更具技术性。