matlab中inf值可以换成0吗_为什么matlab中的^ Inf返回0矩阵?

当计算非整数指数的矩阵幂时,由于数值精度问题,D矩阵的所有条目的绝对值小于1,导致D^Inf返回全零矩阵。即使指数1e99非常大,重复平方的方法仍使结果接近0.3333,不产生溢出。
摘要由CSDN通过智能技术生成

简短的回答

计算非整数指数的矩阵幂的方式中的数值精度问题.

答案很长

Z = X^y is X to the y power if y is a scalar and X is square. If y

is an integer greater than one, the power is computed by repeated

squaring. For other values of y the calculation involves

eigenvalues and eigenvectors.

一^ INF

[S,D] = eig(a);

result = S * D^inf * inv(S);

(很可能逆矩阵实际上并未计算,但该方法与此相当).

对于你,我们得到

>> 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)也是如此,它解释了^ inf的结果.

一^ 1e99

指数1e99超过了可以精确表示为双精度浮点数(is 2 ^ 53)的最大整数,但它仍然表示为整数:

>> mod(1e99,1)

ans =

0

因此,通过重复平方的方法计算^ 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值