0

无聊时,我检查了重新分级 MARKOV 链的转移矩阵的平稳定理。所以我定义了一个简单的,例如:

>> T=[0.5 0.5 0; 0.5 0 0.5; 0.2 0.4 0.4];

平稳定理说,如果您将转移矩阵计算为非常高的幂,那么您将得到其主成分位于行的平稳矩阵。所以让我们试试:

>> T^1000
ans =

0.4211    0.3158    0.2632
0.4211    0.3158    0.2632
0.4211    0.3158    0.2632

到目前为止一切都很好。我们继续:

>> T^1000000000
ans =

0.4211    0.3158    0.2632
0.4211    0.3158    0.2632
0.4211    0.3158    0.2632

好的。让我们再取一个零:

>> T^10000000000

ans =

0.4210    0.3158    0.2632
0.4210    0.3158    0.2632
0.4210    0.3158    0.2632

???事情发生了变化......让我们尝试更多:

>> T^10000000000000000

ans =

1.0e-03 *

0.5387    0.4040    0.3367
0.5387    0.4040    0.3367
0.5387    0.4040    0.3367

这里发生了什么,即使行的总和也不再是 1

 >> T^10000000000000000000

 ans =

 0     0     0
 0     0     0
 0     0     0

Aaaand 没了。

我用 R2011a 试过这个。我想在后台有一些奇特的算法,它近似于矩阵的这种高功率。但这怎么会发生呢?哪种算法在此类计算上执行得如此之快,并在这种极端情况下做出这种行为不端?

4

2 回答 2

1

它可以使用特征分解,以便这样的速度是可能的

真正的计算负载是进行这种分解,然后通过计算特征值的幂,可以很容易地计算出幂。这也解释了为什么将计算划分为像 2 这样的较小幂需要更多时间。

于 2013-06-24T05:49:31.833 回答
1

一如大家所说,原因是浮点精度。解决方案?可变精度算术,在符号数学工具箱中,如果你有的话。只需使用 vpa 初始化矩阵,如下所示:

T=vpa([0.5 0.5 0; 0.5 0 0.5; 0.2 0.4 0.4],100);

给出正确的输出T^10000000000000000000

[0.42105263157894736842099364708441, 0.31578947368421052631574523531331, 0.26315789473684210526312102942776]
[0.42105263157894736842099364708441, 0.31578947368421052631574523531331, 0.26315789473684210526312102942776]
[0.42105263157894736842099364708441, 0.31578947368421052631574523531331, 0.26315789473684210526312102942776]
于 2013-06-24T09:47:52.313 回答