matlab如何快速运行此代码?

0x9*_*x90 3 matlab matrix

我在matlab中有这个代码

b = 0.25*ones(4)
a = [0 1 1 1 ; 1/3 0 0 0 ; 1/3 0 0 0; 1/3 0 0 0] 

m = .85*a + .15*b

v = [1/4 1/4 1/4 1/4]

m^1e308*v'
Run Code Online (Sandbox Code Playgroud)
  1. matlab如何m^1e308*v'快速运行?它应该1e300多次显示矩阵时间,但它可能会做一些其他的计算,它是什么?
  2. 为什么m^1e309*v'给出:

    ans =

       NaN
       NaN
       NaN
       NaN
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如何m^inf在不使用符号变量的情况下看到什么?

Oli*_*rth 8

matlab如何m^1e308*v'快速运行?

我无法告诉你Matlab的内部结构在做什么,但请注意,一般来说,A^n可以及时完成O(log n),而不是O(n)时间.

例如,A^16 = (((A^2)^2)^2)^2.

您还可以使用特征分解将其转换为标量A = U*V*U'幂,即,如果,那么幂是U * V^N * U',V对角矩阵在哪里.

为什么m^1e309*v'要给NaN

双精度无法代表1e309.

如何m^inf在不使用符号变量的情况下看到什么?

使用上述的特征分解.如果任何特征值小于1,它们将变为0,如果它们中的任何一个大于1,它们将变为无穷大.