並且他實際上在SQR有隱藏一個小技巧會跟你動手計算有不一樣的方法
for i in range(n):
for j in range(i):
R[j,i]=Q[:,j].T*A[:,i] ##不同之處,這是動手計算的方法
Q[:,i]-=R[j,i]*Q[:,j] ***********
if la.norm(Q[:,i])>tol:
R[i,i]=la.norm(Q[:,i])
Q[:,i]=Q[:,i]/R[i,i]
return Q,R
for i in range(n):
for j in range(i):
R[j,i]=Q[:,j].T*Q[:,i]這是老師的方法
Q[:,i]-=R[j,i]*Q[:,j] *********
if la.norm(Q[:,i])>tol:
R[i,i]=la.norm(Q[:,i])
Q[:,i]=Q[:,i]/R[i,i]
return Q,R
為何兩者結論相同,Q[:,i]-=R[j,i]*Q[:,j] =A[:,i] -\sum (R[1,i]*Q[:,1]+R[2,i]*Q[:,2]+......R[j,i]*Q[:,j])
下一次的迴圈 j+1
R[j+1,i]=Q[:,j+1].T*Q[:,i]=Q[:,j+1].T*[A[:,i] -\sum (R[1,i]*Q[:,1]+R[2,i]*Q[:,2]+......R[j,i]*Q[:,j])]
藉由前面得到的都是orthogonal set 所以會等於
Q[:,j+1].T*[A[:,i] over
for i in range(n):
for j in range(i):
R[j,i]=Q[:,j].T*A[:,i] ##不同之處,這是動手計算的方法
Q[:,i]-=R[j,i]*Q[:,j] ***********
if la.norm(Q[:,i])>tol:
R[i,i]=la.norm(Q[:,i])
Q[:,i]=Q[:,i]/R[i,i]
return Q,R
for i in range(n):
for j in range(i):
R[j,i]=Q[:,j].T*Q[:,i]這是老師的方法
Q[:,i]-=R[j,i]*Q[:,j] *********
if la.norm(Q[:,i])>tol:
R[i,i]=la.norm(Q[:,i])
Q[:,i]=Q[:,i]/R[i,i]
return Q,R
為何兩者結論相同,Q[:,i]-=R[j,i]*Q[:,j] =A[:,i] -\sum (R[1,i]*Q[:,1]+R[2,i]*Q[:,2]+......R[j,i]*Q[:,j])
下一次的迴圈 j+1
R[j+1,i]=Q[:,j+1].T*Q[:,i]=Q[:,j+1].T*[A[:,i] -\sum (R[1,i]*Q[:,1]+R[2,i]*Q[:,2]+......R[j,i]*Q[:,j])]
藉由前面得到的都是orthogonal set 所以會等於
Q[:,j+1].T*[A[:,i] over