反转具有小网格大小的转移矩阵

计算科学 线性代数 Python scipy
2021-12-10 16:48:55

时间是连续的时间。我有一个 3D 状态空间,以及所有这些的转换率。

使用转换率,我可以计算与马尔科夫过程相关的生成矩阵。AA满足对生成器矩阵的所有要求:

  1. A_ii < 0对于所有 i和 A_ij >=0j
  2. 此外,行总和为零。

我想计算由下式g给出的隐含平稳分布

dot(A.T,  g) = z
sum(g) = 1

其中z是一个零向量。为了确保第二个条件,我设置z_i = 1了一些i, A_ii = 1,A_ij = 0全部j != i

现在,我的问题是我并不总是能 invert A,尽管它满足了生成矩阵的所有条件。Python只是给了我

scipy.sparse.linalg.dsolve.linsolve.MatrixRankWarning: Matrix is exactly singular

我有一个嫌疑人:我的网格大小。我们称其为状态空间的三个维度之一u对于一个固定的u.min(), u.max(),如果我增加了足够的网格大小,我通常可以反转A. 对于数量级:如果跨网格点的转换率在100 左右,则反相A失败。当它仅在 附近时10,它可以工作。

现在,我不能总是在问题上抛出更多的网格点。另外,我不确定为什么网格大小在哪里很重要背后的根本问题。任何人都可以阐明这里发生的事情,以及是否有其他的前进方式?

1个回答

事实证明,存在一些浮点错误。解决这个问题的关键在于,平稳分布对收敛速度是不变的。

所以我只是重新调整A2 = A/xx > 0. 取决于浮点错误的方式,x是高于或低于1A2然后可以毫无问题地进行反转。