我尝试通过 Arnoldi-Decomposition 进入 GMRES。据我了解,我在 python 中实现了 Arnoldi-Decomposition。
import numpy as np
n = 5
A = np.random.rand(n,n)
v = np.random.rand(n)
M = np.zeros_like(A)
M[:,0] = v
for i in range(1,5):
M[:,i] = np.matmul(A,M[:,i-1])
d = np.linalg.matrix_rank(M)
V = np.zeros((n,d))
H = np.zeros((d,d))
V[:,0] = v / np.linalg.norm(v)
for j in range(d-1):
vj = V[:,j]
Avj = np.matmul(A, vj)
H[:j+1,j] = np.matmul(Avj, V[:,:j+1])
w = Avj - np.matmul(V[:,:j+1] ,H[:j+1,j])
H[j+1,j] = np.linalg.norm(w)
V[:,j+1] = w/ H[j+1,j]
我预计结果会像,即得到一个阿诺尔迪分解。但是当我对结果进行反查时,它似乎偏离了一次迭代:
>>np.matmul(A,V)
array([[ 1.74946273, 0.34244799, -0.03368428, -0.52017016, -0.36756412],
[ 1.01841093, 0.09805327, -0.02055688, -0.82253407, -0.37112225],
[ 0.81156945, 0.3374741 , -0.11957267, 0.17757239, 0.23021054],
[ 0.99533205, -0.32793397, -0.12764172, 0.09559959, 0.14891387],
[ 1.35827635, -0.02004282, 0.24724491, -0.07114606, 0.32279871]])
>>np.matmul(V,H)
array([[ 1.74946273, 0.34244799, -0.03368428, -0.52017016, 0. ],
[ 1.01841093, 0.09805327, -0.02055688, -0.82253407, 0. ],
[ 0.81156945, 0.3374741 , -0.11957267, 0.17757239, 0. ],
[ 0.99533205, -0.32793397, -0.12764172, 0.09559959, 0. ],
[ 1.35827635, -0.02004282, 0.24724491, -0.07114606, 0. ]])
所以似乎是这样. 在我的讲义中,我发现这种关系没有证据。那么,有人可以给我证明吗?