python實現QR法解線性方程組

QR(正交三角)分解法是目前求一般矩陣全部特徵值的最有效並廣泛應用的方法,一般矩陣先經過正交相似變化成爲Hessenberg矩陣,然後再應用QR方法求特徵值和特徵向量。它是將矩陣分解成一個正規正交矩陣Q與上三角形矩陣R,所以稱爲QR分解法,與此正規正交矩陣的通用符號Q有關。測試所用b爲全1矩陣。
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!")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章