線性代數 15 矩陣的QR分解

2021-09-24 04:22:46 字數 3058 閱讀 5248

實現qr分解

矩陣的qr分解和lu分解的目的都是為了便於矩陣計算。

a =q

ra=qr

a=qr

這一過程將矩陣分解為q

qq和r

rr兩部分,其中q

qq是標準正交矩陣,r

rr是乙個上三角矩陣。

矩陣的qrqr

qr分解能夠簡化計算可以以線性系統的計算為例,

a x=

b⟹(q

r)x=

bax=b\longrightarrow (qr)x=b

ax=b⟹(

qr)x

=bq −1

qrx=

q−1b

⟹rx=

qtbq^qrx=q^b\longrightarrow rx=q^tb

q−1qrx

=q−1

b⟹rx

=qtb

q

tq^t

qt是非常好計算的,r

rr是乙個上三角矩陣(相當於gauss-jordan消元法的前向過程結束),從下往上推就可以很快計算出線性系統的結果。

因為涉及到求取標準正交矩陣q

qq的過程,所以矩陣a

aa可以進行qrqr

qr分解的條件是a

aa的各個列向量是線性無關的。因為只有滿足這一點才能進行gram-schmidt過程。

a =q

r,其中

a=(a

1⃗,a

2⃗,.

..,a

n⃗)a=qr,其中a=(\vec,\vec,...,\vec)

a=qr,其

中a=(

a1​​

,a2​

​,..

.,an

​​)對矩陣a

aa的各列執行gram-schmidt過程,得到正交向量p1⃗

,p2⃗

,...

,pn⃗

\vec,\vec,...,\vec

p1​​,p

2​​,

...,

pn​​

,歸一化後得到標準正交向量q1⃗

,q2⃗

,...

,qn⃗

\vec,\vec,...,\vec

q1​​,q

2​​,

...,

qn​​。p1

⃗=a1

⃗\vec=\vec

p1​​=a

1​​p2⃗

=a2⃗

−a2⃗

⋅p1⃗

∣∣p1

⃗∣∣2

⋅p1⃗

\vec=\vec-\frac\cdot \vec}||^2}\cdot\vec

p2​​=a

2​​−

∣∣p1

​​∣∣

2a2​

​⋅p1

​​​⋅

p1​​

得到上三角矩陣r

rr的過程如下,以a

aa矩陣前3個列向量為例,

求取r

rr的過程是使用已經求取的標準正交基反推原來的列向量。每乙個係數都是可以找到規律的。故矩陣的qrqr

qr分解實際上將矩陣a分解為如下形式,

可以對該矩陣再進行推導,

上面的推導過程很複雜,但是在實際的計算過程中根本不需要求取r

rr中的每個值,而是只需通過gram-schmidt過程得到a

aa的標準正交矩陣q

qq,很快速的求取出r

rr,通過如下形式,

a =q

r⟹q−

1a=r

a=qr\longrightarrow q^a=r

a=qr⟹q

−1a=

r由正交矩陣性質可得,

r =q

−1a⟹

r=qt

ar=q^a\longrightarrow r=q^ta

r=q−1a

⟹r=q

ta

def

qr(a)

:"""

:param a: 乙個矩陣物件,本節a是方陣,實際上一般矩陣也可以qr分解,只是本次不涉及

"""assert a.row_num(

)== a.col_num(),

"a must be square"

basis =

[a.col_vector(i)

for i in

range

(a.col_num())

] p = gram_schmidt_process(basis)

# 這裡轉置是因為在自定義的matrix類中,是通過行向量建立矩陣的

q = matrix(

[v/v.norm(

)for v in p]

).t(

)

r = q.t.dot(a)

return q, r

if __name__ ==

"__main__"

: a = matrix([[

1,1,

2],[

1,1,

0],[

1,0,

0]])

q, r = qr(a)

print

(q.dot(r)

)

線性代數與分解

例項 include include using namespace std 如果您的矩陣是正定的,上面的 說明乙個很好的選擇是llt或ldlt分解。具體例項如下 只有您知道要允許解決方案有效的誤差範圍。因此,如果您願意,eigen允許您自己進行此計算.特徵值和特徵向量的計算不一定會收斂,但這種收斂...

MIT線性代數 4 矩陣A的LU分解

乘以逆矩陣得到單位陣需要反著乘。第二行是第一行兩邊同時轉置的結果,得到的結論是a轉置的逆是a的逆的轉置。l是lower也就是下三角矩陣,u是upper也就是上三角矩陣。先是由e初等矩陣消元從a變化到u。l與e是什麼關係呢?答案是互為逆矩陣。2.2a ldu 有時候我們也可以把主元單獨分離出來,得到d...

矩陣 Matrices 線性代數

矩陣 在數學中,矩陣 matrix 是乙個按照長方陣列排列的複數或實數集合 矩陣相加 通常的矩陣加法被定義在兩個相同大小的矩陣 矩陣乘法 矩陣和向量的乘法 如圖 m n 的矩陣乘以 n 1 的向量,得到的是 m 1 的向量 矩陣乘法 m n 矩陣乘以 n o 矩陣,變成 m o 矩陣。矩陣乘法的性質...