實現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
1p2⃗
=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 矩陣。矩陣乘法的性質...