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!")

你可能感兴趣的:(python数值优化计算)