对于上下文: Gelfand 的光谱半径公式是其中是任何定义明确的算子范数。
我天真地编写了一个函数来计算个术语
from numpy import linalg as la
def kth_term(matrix, k):
matrix = la.matrix_power(matrix, k)
f_norm = la.norm(matrix, 'fro')
a = f_norm**(1.0/k)
return a
它似乎收敛到一个点,然后偏离轨道。
例如,使用矩阵
出现在关于光谱半径的维基百科文章中:
k=1: 15.362291495737216
k=2: 12.328294348193777
k=3: 11.532450663575863
k=4: 11.151002985846981
k=5: 10.921242234560514
k=6: 10.766714723560009
k=7: 10.655756642574673
k=8: 10.572406231885966
k=9: 10.507628501663131
k=10: 10.455910429510872
k=11: 10.41370221340334
k=12: 10.378620929581876
k=13: 10.349011593187207
k=14: 10.323691295053795
k=15: 10.301793374505857
k=16: 10.282669031598717
k=17: 10.265823265946006
k=18: 10.250872030293372
k=19: 10.237512882117132
k=20: 8.999022729694703
k=21: 8.267420074010055
k=22: 7.497283519619893
k=23: 6.853431593167068
k=24: 5.895962973131352
k=25: 5.867018843533908
一切都很好,此时它停止收敛到正确答案(即)。这可能是什么原因?只有三个函数调用,所以很明显,当我计算矩阵幂、Frobenius 范数或其根(或这些东西的某种组合)时,错误正在蔓延。