import numpy as np
A = np.zeros((100, 100))
for i in range(100): #generate A
for j in range(100):
if (i == j):
A[i, j] = 2
if (abs(i - j) == 1):
A[i, j] = A[j, i] = -1
b = np.ones((100, 1)) #generate b
print("QR x:")
Q=np.zeros_like(A) #Q.shape=A.shape
w = 0
for a in A.T:
u = np.copy(a)
for i in range(0, w):
u -= np.dot(np.dot(Q[:, i].T, a), Q[:, i])
ex = u / np.linalg.norm(u)
Q[:, w] = ex
w+= 1
R = np.dot(Q.T, A) # A=Q*R
N=np.dot(Q.T,b)
x2=np.linalg.solve(R,N) # Rx=Q.T*b
print(x2) #solve x
print("done QR!")
python實現QR法解線性方程組
QR(正交三角)分解法是目前求一般矩陣全部特徵值的最有效並廣泛應用的方法,一般矩陣先經過正交相似變化成爲Hessenberg矩陣,然後再應用QR方法求特徵值和特徵向量。它是將矩陣分解成一個正規正交矩陣Q與上三角形矩陣R,所以稱爲QR分解法,與此正規正交矩陣的通用符號Q有關。測試所用b爲全1矩陣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.