|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码是关于幂法的计算
- def mifa(A):
- import numpy as np
-
- v0=u0=np.ones((3,1))
- m0=np.max(v0)
- v=A*u0
- m=np.max(v)
- u=v/m
- i=1
-
- while abs(m-m0)>=0.00001:
- u0=u
-
- m0=m
- print(m0)
- v=A*u0
- m=np.max(v)
- u=v/m
- i+=1
-
- print("在第"+str(i)+"次迭代后获得最大特征值:"+str(m))
-
-
-
-
- import numpy as np
- A=np.matrix([[12,6,-6],[6,16,2],[-6,2,16]])
- mifa(A)
-
复制代码
可以看出让它在进行循环 达到一定的误差才可以跳出,但是计算结果总是在16次迭代停止并跳出,- 24.0
- 20.0
- 19.4
- 19.381443298969074
- 19.495744680851065
- 19.643784786641927
- 19.800728905086782
- 19.95880194789526
- 20.114273458980524
- 20.26453383864906
- 20.407507789000007
- 20.541581011888532
- 20.66560913148607
- 21.24014861493221
- 21.544003739648907
- 在第16次迭代后获得最大特征值:21.544003744145076
复制代码
此时明显未达到精度,但是它的前面的计算都是正确的,为什么到这一步就算不下去了呢
达到精度了,打印出来就知道了
- import numpy as np
- def mifa(A):
- v0 = u0 = np.ones((3, 1))
- m0 = np.max(v0)
- v = A * u0
- m = np.max(v)
- u = v / m
- i = 1
- while abs(m - m0) >= 0.00001:
- u0 = u
- m0 = m
- # print(m0)
- v = A * u0
- m = np.max(v)
- print("{: >.10f} {: >.10f}".format(m0, m))
- u = v / m
- i += 1
- print("在第" + str(i) + "次迭代后获得最大特征值:" + str(m))
- A = np.matrix([[12, 6, -6], [6, 16, 2], [-6, 2, 16]])
- mifa(A)
复制代码
- F:\Python\Test>python test.py
- 24.0000000000 20.0000000000
- 20.0000000000 19.4000000000
- 19.4000000000 19.3814432990
- 19.3814432990 19.4957446809
- 19.4957446809 19.6437847866
- 19.6437847866 19.8007289051
- 19.8007289051 19.9588019479
- 19.9588019479 20.1142734590
- 20.1142734590 20.2645338386
- 20.2645338386 20.4075077890
- 20.4075077890 20.5415810119
- 20.5415810119 20.6656091315
- 20.6656091315 21.2401486149
- 21.2401486149 21.5440037396
- 21.5440037396 21.5440037441
- 在第16次迭代后获得最大特征值:21.544003744145076
- F:\Python\Test>
复制代码
|
|