似乎a^Inf
(无穷大力量的矩阵)会返回错误的答案:
>> a=[1/2 1/4 1/4; 1/4 1/2 1/4; 1/4 1/4 1/2 ];
>> a^1e99
ans =
0.3333 0.3333 0.3333
0.3333 0.3333 0.3333
0.3333 0.3333 0.3333
>> a^Inf
ans =
0 0 0
0 0 0
0 0 0
这里发生了什么?
答案 0 :(得分:11)
计算非整数指数的矩阵幂的方式中的数值精度问题。
来自mpower
文档,
如果Z = X^y
是标量且X
是正方形,则{p>y
y
为X
幂。如果y
是一个大于1的整数,通过重复计算功率 现蕾。对于y
的其他值,计算涉及 特征值和特征向量。
a^inf
inf
可能被视为非整数,因此应用了method based on eigenvalues and eigenvectors。即,结果计算为
[S,D] = eig(a);
result = S * D^inf * inv(S);
(很可能实际上没有计算逆矩阵,但方法与此相当)。
对于a
,我们会
>> a = [1/2 1/4 1/4; 1/4 1/2 1/4; 1/4 1/4 1/2];
>> [S,D] = eig(a)
>> format long
>> D
D =
0.250000000000000 0 0
0 0.250000000000000 0
0 0 1.000000000000000
看起来很无辜。但是等等:
>> D(3,3)-1
ans =
-3.330669073875470e-16
由于D
的所有条目的绝对值严格小于1
,D^inf
全部为零:
>> D^inf
ans =
0 0 0
0 0 0
0 0 0
然后S * D^inf * inv(S)
也是如此,它解释了a^inf
的结果。
a^1e99
指数1e99
超过了可以精确表示为双精度浮点数的最大整数(is 2^53
),但它仍然表示为整数:
>> mod(1e99,1)
ans =
0
因此a^1e99
通过重复平方的方法计算。使用此方法,结果中的所有条目都接近0.3333
:
>> a^10
ans =
0.333333969116211 0.333333015441895 0.333333015441895
0.333333015441895 0.333333969116211 0.333333015441895
0.333333015441895 0.333333015441895 0.333333969116211
>> a^100
ans =
0.333333333333333 0.333333333333333 0.333333333333333
0.333333333333333 0.333333333333333 0.333333333333333
0.333333333333333 0.333333333333333 0.333333333333333