代码是
import sympy as sm
import numpy as np
k=sm.Symbol('k')
p=np.matrix([[1./2,1./4,1./4],[1./2,0,1./2],[1./4,0,3./4]])
sm.limit(p**k,k,sm.oo)
它表示'TypeError:exponent必须是整数'。但是,如果我将矩阵更改为这样的常量
sm.limit(2**k,k,sm.oo)
,它可以打印正确的答案。那么我该如何处理这个问题呢?谢谢你的帮助!
答案 0 :(得分:1)
使用SymPy矩阵:
In [5]: p = sm.Matrix(p)
然后符号的指数将起作用:
In [6]: p**k
Out[6]:
⎡ k k k k
⎢ 0.216542364659101⋅-0.154508497187474 + 0.419821271704536⋅0.404508497187474 + 0.363636363636364⋅1.0 - 0.350372906022699⋅-0.154508497187474 + 0.259463815113608⋅0.40450849718747
⎢
⎢ k k k k
⎢- 0.507064433090879⋅-0.154508497187474 + 0.143428069454515⋅0.404508497187474 + 0.363636363636364⋅1.0 0.820447487227238⋅-0.154508497187474 + 0.0886434218636708⋅0.404508497187474
⎢
⎢ k k k k
⎣- 0.0598508375909206⋅-0.154508497187474 - 0.303785526045443⋅0.404508497187474 + 0.363636363636364⋅1.0 0.0968406894772593⋅-0.154508497187474 - 0.18774978038635⋅0.404508497187474
k k k k k ⎤
4 + 0.0909090909090909⋅1.0 0.133830541363598⋅-0.154508497187474 - 0.679285086818143⋅0.404508497187474 + 0.545454545454545⋅1.0 ⎥
⎥
k k k k k ⎥
+ 0.0909090909090909⋅1.0 - 0.31338305413636⋅-0.154508497187474 - 0.232071491318186⋅0.404508497187474 + 0.545454545454545⋅1.0 ⎥
⎥
k k k k k⎥
+ 0.0909090909090909⋅1.0 - 0.0369898518863388⋅-0.154508497187474 + 0.491535306431793⋅0.404508497187474 + 0.545454545454545⋅1.0 ⎦
此时,您可以将限制应用于单个组件:
In [9]: (p**k).applyfunc(lambda x: limit(x, k, sm.oo))
Out[9]:
⎡∞ ∞ ∞⎤
⎢ ⎥
⎢∞ ∞ ∞⎥
⎢ ⎥
⎣∞ ∞ ∞⎦
这可能是浮点近似错误或错误。尝试另一种方式:
In [15]: p**10000000000000
Out[15]:
⎡0.363636363636364 0.0909090909090909 0.545454545454545⎤
⎢ ⎥
⎢0.363636363636364 0.0909090909090909 0.545454545454545⎥
⎢ ⎥
⎣0.363636363636364 0.0909090909090909 0.545454545454546⎦
我强烈建议避免使用浮点运算,更好地定义一个SymPy数字矩阵:
In [19]: p = Matrix([[sm.S.One/2, sm.S.One/4, sm.S.One/4], [sm.S.One/2, 0, sm.S.One/2], [sm.S.One/4, 0, sm.S.One*3/4]])
In [20]: p
Out[20]:
⎡1/2 1/4 1/4⎤
⎢ ⎥
⎢1/2 0 1/2⎥
⎢ ⎥
⎣1/4 0 3/4⎦
现在,如果您尝试简化(p k)**,您将获得矩阵幂的闭合表达式:
In [27]: simplify(p**k)
Out[27]:
⎡ -k ⎛ 6⋅k 6⋅k 3⋅k k 3⋅k k 3⋅k k 3⋅k k k k⎞ -k ⎛ 6⋅k 6⋅k 3⋅k
⎢64 ⋅⎝- 36⋅2 ⋅√5 + 120⋅2 - 55⋅2 ⋅(1 + √5) + 33⋅2 ⋅√5⋅(1 + √5) - 120⋅2 ⋅(-√5 + 1) + 58⋅2 ⋅√5⋅(-√5 + 1) - 220⋅64 + 88⋅√5⋅64 ⎠ 64 ⋅⎝- 42⋅2 ⋅√5 + 30⋅2 - 44⋅2 ⋅
⎢───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ───────────────────────────────────────
⎢ 11⋅(-25 + 13⋅√5)
⎢
⎢ ⎛ 3⋅k k 3⋅k k k k⎞
⎢ -k ⎜ 3⋅k k 3⋅k k 161301⋅2 ⋅(-√5 + 1) 72136⋅2 ⋅√5⋅(-√5 + 1) 408950⋅64 182888⋅√5⋅64 ⎟
⎢ 2⋅64 ⋅⎜- 23184⋅2 ⋅√5⋅(1 + √5) + 51841⋅2 ⋅(1 + √5) - ────────────────────── + ──────────────────────── - ────────── + ─────────────⎟ -k ⎛ 6⋅k 6⋅k 3⋅k
⎢ ⎝ 11 11 11 11 ⎠ 64 ⋅⎝- 42⋅2 ⋅√5 + 30⋅2 - 242⋅2
⎢ ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ───────────────────────────────────────
⎢ -204475 + 91444⋅√5
⎢
⎢ ⎛ 6⋅k 6⋅k k k⎞
⎢ -k ⎜ 100⋅2 52⋅2 ⋅√5 k k 41⋅√5⋅(-8⋅√5 + 8) 89⋅(-8⋅√5 + 8) ⎟
⎢ 64 ⋅⎜- ──────── + ────────── - √5⋅(8 + 8⋅√5) + (8 + 8⋅√5) - ────────────────── + ───────────────⎟ -k ⎛ 6⋅k 6⋅k 3⋅k
⎢ ⎝ 11 11 11 11 ⎠ -64 ⋅⎝- 42⋅2 ⋅√5 + 30⋅2 - 33⋅2
⎢ ──────────────────────────────────────────────────────────────────────────────────────────────────── ───────────────────────────────────────
⎣ -25 + 13⋅√5
k 3⋅k k 3⋅k k 3⋅k k k k⎞ -k ⎛ 3⋅k k 3⋅k k 3⋅k k 3⋅k
√5⋅(1 + √5) + 110⋅2 ⋅(1 + √5) - 85⋅2 ⋅(-√5 + 1) + 31⋅2 ⋅√5⋅(-√5 + 1) - 55⋅64 + 55⋅√5⋅64 ⎠ 64 ⋅⎝- 2⋅2 ⋅√5⋅(1 + √5) - 3⋅2 ⋅(1 + √5) - 3⋅2 ⋅(-√5 + 1) + 2⋅2 ⋅√5⋅(
──────────────────────────────────────────────────────────────────────────────────────────────────── ────────────────────────────────────────────────────────────────────────────────
11⋅(-25 + 13⋅√5) 11
k 3⋅k k 3⋅k k 3⋅k k k k⎞ -k ⎛ 6⋅k k k k
⋅(1 + √5) + 110⋅2 ⋅√5⋅(1 + √5) - 8⋅2 ⋅(-√5 + 1) + 20⋅2 ⋅√5⋅(-√5 + 1) - 55⋅64 + 55⋅√5⋅64 ⎠ 64 ⋅⎝30⋅2 - 15⋅(8 + 8⋅√5) + √5⋅(8 + 8⋅√5) - 15⋅(-8⋅√5 + 8) - √5⋅(-
──────────────────────────────────────────────────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────────────────────
11⋅(-25 + 13⋅√5) 55
k 3⋅k k 3⋅k k 3⋅k k k k⎞ -6⋅k ⎛ 6⋅k k k k
⋅(1 + √5) + 11⋅2 ⋅√5⋅(1 + √5) - 24⋅2 ⋅√5⋅(-√5 + 1) + 58⋅2 ⋅(-√5 + 1) - 55⋅64 + 55⋅√5⋅64 ⎠ 2 ⋅⎝60⋅2 + 25⋅(8 + 8⋅√5) + 13⋅√5⋅(8 + 8⋅√5) - 13⋅√5⋅(-8⋅√5 + 8) + 25
───────────────────────────────────────────────────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────────────────────────
11⋅(-13⋅√5 + 25) 110
k k⎞⎤
-√5 + 1) + 6⋅64 ⎠⎥
──────────────────⎥
⎥
⎥
⎥
⎥
k⎞ ⎥
8⋅√5 + 8) ⎠ ⎥
─────────── ⎥
⎥
⎥
⎥
⎥
k⎞ ⎥
⋅(-8⋅√5 + 8) ⎠ ⎥
────────────── ⎥
⎦
不幸的是,SymPy中存在一些不允许计算此限制的错误。不知道这个表达式对你有用。