线性代数:矩阵的QR分解


对于一个矩阵,如果它的列向量之间线性无关,那么它就可以分解成A=Q⋅RA = Q \cdot RA=QR
QQQ是一个标准正交矩阵
RRR是一个上三角形式的矩阵
矩阵AAAA=Q⋅RA = Q \cdot RA=QR这种形式的分解称为 QR分解QR分解QR分解

获取一个列向量之间线性无关的矩阵AAA的标准正交矩阵QQQ,实际上就是对矩阵AAA的列向量执行Gram-Schmidt过程,因为矩阵AAA的列向量之间线性无关,所以可以把它们当成空间的一组基来处理。

QR分解实际上是Gram-Schmidt过程的逆过程:

Gram-Schmidt过程是给定空间的一组基求取空间的正交基的过程:
如果已知一组基:v⃗1,v⃗2,⋯ ,v⃗n\vec v_1 , \vec v_2 , \cdots , \vec v_nv1,v2,,vn,相应的求出这组基所代表的nnn维空间的一组正交基的过程就是:
p⃗1=v⃗1\vec p_1 = \vec v_1p1=v1
p⃗2=v⃗2−p⃗1⋅v⃗2∥p⃗1∥⋅p⃗1\vec p_2 = \vec v_2 - \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot {\vec p_1}p2=v2p1p1v2p1
p⃗3=v⃗3−p⃗1⋅v⃗3∥p⃗1∥⋅p⃗1−p⃗2⋅v⃗3∥p⃗2∥⋅p⃗2\vec p_3 = \vec v_3 - \frac {\vec p_1 \cdot \vec v_3}{\|{\vec p_1}\|} \cdot {\vec p_1} - \frac {\vec p_2 \cdot \vec v_3}{\|{\vec p_2}\|} \cdot {\vec p_2}p3=v3p1p1v3p1p2p2v3p2
p⃗4=v⃗4−p⃗1⋅v⃗4∥p⃗1∥⋅p⃗1−p⃗2⋅v⃗4∥p⃗2∥⋅p⃗2−p⃗3⋅v⃗4∥p⃗3∥⋅p⃗3\vec p_4 = \vec v_4 - \frac {\vec p_1 \cdot \vec v_4}{\|{\vec p_1}\|} \cdot {\vec p_1} - \frac {\vec p_2 \cdot \vec v_4}{\|{\vec p_2}\|} \cdot {\vec p_2} - \frac {\vec p_3 \cdot \vec v_4}{\|{\vec p_3}\|} \cdot {\vec p_3}p4=v4p1p1v4p1p2p2v4p2p3p3v4p3

p⃗n=v⃗n−p⃗1⋅v⃗n∥p⃗1∥⋅p⃗1−p⃗2⋅v⃗n∥p⃗2∥⋅p⃗2−p⃗3⋅v⃗n∥p⃗3∥⋅p⃗3−⋯−p⃗n−1⋅v⃗n∥p⃗n−1∥⋅p⃗n−1\vec p_n = \vec v_n - \frac {\vec p_1 \cdot \vec v_n}{\|{\vec p_1}\|} \cdot {\vec p_1} - \frac {\vec p_2 \cdot \vec v_n}{\|{\vec p_2}\|} \cdot {\vec p_2} - \frac {\vec p_3 \cdot \vec v_n}{\|{\vec p_3}\|} \cdot {\vec p_3} - \cdots - \frac {\vec p_{n-1} \cdot \vec v_n}{\|{\vec p_{n-1}}\|} \cdot {\vec p_{n-1}}pn=vnp1p1vnp1p2p2vnp2p3p3vnp3pn1pn1vnpn1

对于矩阵AAA通过Gram-Schmidt过程,就可以将列向量v⃗1,v⃗2,⋯ ,v⃗n\vec v_1 , \vec v_2 , \cdots , \vec v_nv1,v2,,vn处理成一组正交向量组p⃗1,p⃗2,⋯ ,p⃗n\vec p_1 , \vec p_2 , \cdots , \vec p_np1,p2,,pn;
继续将正交向量组的向量进行规范化u^=u⃗∥u⃗∥\hat u = \frac {\vec u}{\|\vec u\|}u^=uu处理,最后就得到了矩阵的列向量的标准正交向量组q⃗1,q⃗2,⋯ ,q⃗n\vec q_1 , \vec q_2 , \cdots , \vec q_nq1,q2,,qn
将这组标准正交向量组按列向量的方式排列就得到了标准正交矩阵Q=( ∣    ∣    ∣    ⋯   ∣q⃗1,q⃗2,q⃗3,⋯ ,q⃗n ∣    ∣    ∣    ⋯   ∣)Q= \left (\begin{array}{c}\ | \ \ \ \ |\ \ \ \ |\ \ \ \ \cdots \ \ \ | \\ \vec q_1,\vec q_2,\vec q_3,\cdots ,\vec q_n \\ \ | \ \ \ \ |\ \ \ \ |\ \ \ \ \cdots \ \ \ |\end{array} \right )Q=                q1,q2,q3,,qn                

从Gram-Schmidt的逆过程推导矩阵的QR分解

在整个Gram-Schmidt过程中,每一步获取一个正交向量p⃗i\vec p_ipi的时候,p⃗i\vec p_ipi可以和最后得到的q⃗i\vec q_iqi存在联系p⃗i=∥p⃗i∥⋅q⃗i\vec p_i = \|\vec p_i\| \cdot \vec q_ipi=piqi,进而矩阵AAA中原先的每个列向量v⃗i\vec v_ivi就可以和q⃗i\vec q_iqi建立联系:
A=QRA = Q RA=QR
p⃗1=v⃗1=∥p⃗1∥⋅q⃗1=r11⋅q⃗1\vec p_1 = \vec v_1 = \|\vec p_1\| \cdot \vec q_1 = r_{11} \cdot \vec q_1p1=v1=p1q1=r11q1 ,其中∥p⃗1∥\|\vec p_1\|p1本身是个标量,这里就用r11r_{11}r11代替;
∴v⃗1=r11⋅q⃗1\therefore \vec v_1 = r_{11} \cdot \vec q_1v1=r11q1 ←\leftarrow
p⃗2=v⃗2−p⃗1⋅v⃗2∥p⃗1∥⋅p⃗1=∥p⃗2∥⋅q⃗2\vec p_2 = \vec v_2 - \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot {\vec p_1}= \|\vec p_2\| \cdot \vec q_2p2=v2p1p1v2p1=p2q2
∴v⃗2=∥p⃗2∥⋅q⃗2+p⃗1⋅v⃗2∥p⃗1∥⋅p⃗1\therefore \vec v_2 = \|\vec p_2\| \cdot \vec q_2 + \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot {\vec p_1}v2=p2q2+p1p1v2p1,这里p⃗1\vec p_1p1用$ |\vec p_1| \cdot \vec q_1 $代入得下式
∴v⃗2=∥p⃗2∥⋅q⃗2+p⃗1⋅v⃗2∥p⃗1∥⋅∥p⃗1∥⋅q⃗1\therefore \vec v_2 = \|\vec p_2\| \cdot \vec q_2 + \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot { \|\vec p_1\| \cdot \vec q_1}v2=p2q2+p1p1v2p1q1
∴v⃗2=r21q⃗1+r22q⃗2\therefore \vec v_2 =r_{21} \vec q_1 + r_{22} \vec q_2v2=r21q1+r22q2,上式的∥p⃗2∥\| \vec p_2 \|p2p⃗1⋅v⃗2∥p⃗1∥⋅∥p⃗1∥\frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot { \|\vec p_1\|}p1p1v2p1 都是标量,用 r22,r21r_{22},r_{21}r22,r21 代替,简化表示出v⃗2\vec v_2v2q⃗1,q⃗2\vec q_1,\vec q_2q1q2的关系;←\leftarrow
p⃗3=v⃗3−p⃗1⋅v⃗3∥p⃗1∥⋅p⃗1−p⃗2⋅v⃗3∥p⃗2∥⋅p⃗2=∥p⃗3∥⋅q⃗3\vec p_3 = \vec v_3 - \frac {\vec p_1 \cdot \vec v_3}{\|{\vec p_1}\|} \cdot {\vec p_1} - \frac {\vec p_2 \cdot \vec v_3}{\|{\vec p_2}\|} \cdot {\vec p_2} = \|\vec p_3\| \cdot \vec q_3p3=v3p1p1v3p1p2p2v3p2=p3q3
∴v⃗3=∥p⃗3∥⋅q⃗3+p⃗2⋅v⃗3∥p⃗2∥⋅p⃗2+p⃗1⋅v⃗3∥p⃗1∥⋅p⃗1\therefore \vec v_3 = \|\vec p_3\| \cdot \vec q_3 + \frac {\vec p_2 \cdot \vec v_3}{\|{\vec p_2}\|} \cdot {\vec p_2} + \frac {\vec p_1 \cdot \vec v_3}{\|{\vec p_1}\|} \cdot {\vec p_1}v3=p3q3+p2p2v3p2+p1p1v3p1
∴v⃗3=r31⋅q⃗1+r32⋅q⃗2+r33⋅q⃗3\therefore \vec v_3 = r_{31}\cdot \vec q_1 + r_{32} \cdot \vec q_2 + r_{33} \cdot \vec q_3v3=r31q1+r32q2+r33q3 ←\leftarrow
⋯\cdots
持续执行上过程,就能反推得到矩阵AAA中原先的每个列向量v⃗i\vec v_iviq⃗i\vec q_iqi的关系:
v⃗1=r11⋅q⃗1\vec v_1 = r_{11} \cdot \vec q_1v1=r11q1
v⃗2=r21q⃗1+r22q⃗2\vec v_2 = r_{21} \vec q_1 + r_{22} \vec q_2v2=r21q1+r22q2
v⃗3=r31⋅q⃗1+r32⋅q⃗2+r33⋅q⃗3\vec v_3 = r_{31}\cdot \vec q_1 + r_{32} \cdot \vec q_2 + r_{33} \cdot \vec q_3v3=r31q1+r32q2+r33q3
v⃗4=r41⋅q⃗1+r42⋅q⃗2+r43⋅q⃗3+r44⋅q⃗4\vec v_4 = r_{41}\cdot \vec q_1 + r_{42} \cdot \vec q_2 + r_{43} \cdot \vec q_3 + r_{44} \cdot \vec q_4v4=r41q1+r42q2+r43q3+r44q4
$\cdots $
v⃗n=rn1⋅q⃗1+rn2⋅q⃗2+rn3⋅q⃗3+⋯+rnn⋅q⃗n\vec v_n = r_{n1}\cdot \vec q_1 + r_{n2} \cdot \vec q_2 + r_{n3} \cdot \vec q_3 +\cdots + r_{nn} \cdot \vec q_nvn=rn1q1+rn2q2+rn3q3++rnnqn

从而,对于矩阵AAA的一组列向量v⃗1,v⃗2,⋯ ,v⃗n\vec v_1 , \vec v_2 , \cdots , \vec v_nv1,v2,,vn,就可以由rij,q⃗ir_{ij} , \vec q_irij,qi进行表示,重新排列成矩阵:
A=(  r11⋅q⃗1,  r21q⃗1+r22q⃗2, ⋯ ,rn1⋅q⃗1+rn2⋅q⃗2+rn3⋅q⃗3+⋯+rnn⋅q⃗n)A= \left (\begin{array}{c} \ \ r_{11} \cdot \vec q_1 ,\ \ r_{21} \vec q_1 + r_{22} \vec q_2 ,\ \cdots \ , r_{n1}\cdot \vec q_1 + r_{n2} \cdot \vec q_2 + r_{n3} \cdot \vec q_3 +\cdots + r_{nn} \cdot \vec q_n \end{array} \right )A=(  r11q1,  r21q1+r22q2,  ,rn1q1+rn2q2+rn3q3++rnnqn)

这个新组成的矩阵A,提出其中的q⃗i\vec q_iqi向量,进而就表示成矩阵的QRQRQR分解形式:
A=(q⃗1   ,q⃗2   ,⋯ ,q⃗n)⋅[r11r21r31⋯rn10r22r32⋯rn200r33⋯rn3000⋯rnn]=Q⋅RA= \left (\begin{array}{c} \vec q_1 \ \ \ , \vec q_2\ \ \ ,\cdots , \vec q_n \end{array} \right ) \cdot \begin{bmatrix} r_{11}&r_{21}&r_{31}&\cdots&r_{n1} \\ 0&r_{22}&r_{32}&\cdots&r_{n2} \\ 0&0&r_{33}&\cdots&r_{n3} \\ 0&0&0&\cdots&r_{nn} \end{bmatrix} = Q \cdot RA=(q1   ,q2   ,,qn)r11000r21r2200r31r32r330rn1rn2rn3rnn=QR
Q=(q⃗1   ,q⃗2   ,⋯ ,q⃗n)Q = \left (\begin{array} {c} \vec q_1 \ \ \ , \vec q_2\ \ \ ,\cdots , \vec q_n \end{array} \right )Q=(q1   ,q2   ,,qn)

R=[r11r21r31⋯rn10r22r32⋯rn200r33⋯rn3000⋯rnn]R = \begin{bmatrix} r_{11}&r_{21}&r_{31}&\cdots&r_{n1} \\ 0&r_{22}&r_{32}&\cdots&r_{n2} \\ 0&0&r_{33}&\cdots&r_{n3} \\ 0&0&0&\cdots&r_{nn} \end{bmatrix}R=r11000r21r2200r31r32r330rn1rn2rn3rnn


获取矩阵的QQQ矩阵和RRR矩阵

通过上面的推导过程可知Gram-Schmidt过程得到了矩阵AAA的Q矩阵,再逆推导就能得到R矩阵。
但是对于一个列向量之间线性无关的矩阵AAA,它能够进行QR分解,其实就有:
A=QR=Q−1⋅A=Q−1Q⋅R=RA = QR = Q^{-1} \cdot A = Q^{-1} Q \cdot R = RA=QR=Q1A=Q1QR=R
∵QT⋅Q=I→Q1=QT\because Q^T \cdot Q= I \to Q^{1} = Q^{T}QTQ=IQ1=QT,Q是标准正交矩阵,所以根本不需要通过计算来求矩阵Q的逆
R=Q−1A=QT⋅AR = Q^{-1} A = Q^{T} \cdot AR=Q1A=QTA

所以QR分解一个矩阵AAA,其实只需要进行一边正向Gram-Schmidt过程求出矩阵AAA的列向量的标准正交向量组;


QR分解的应用

主要还是用于加速线性系统的求解

对于Ax=bAx=bAx=b, A=QRA=QRA=QR,
(QR)x=b(QR)x = b(QR)x=b
Q−1(QR)x=Q−1bQ^{-1}(QR)x = Q^{-1}bQ1(QR)x=Q1b
Rx=QTbRx = Q^{T}bRx=QTb

求解过程中,只需要求解出矩阵A的Q矩阵,同时R矩阵又是一个上三角矩阵,从而降低了求解的时间复杂度。

### QR分解的概念与实现方法 QR分解是一种将矩阵分解为正交矩阵和上三角矩阵乘积的形式。具体而言,任意一个实数方阵 \( A \) 可以被分解为 \( A = QR \),其中 \( Q \) 是一个正交矩阵(满足 \( Q^TQ = I \)),\( R \) 是一个上三角矩阵[^2]。 #### QR分解的数学定义 对于一个 \( m \times n \) 的矩阵 \( A \),QR分解的目标是找到两个矩阵 \( Q \) 和 \( R \),使得: \[ A = QR \] - \( Q \) 是一个 \( m \times n \) 的矩阵,其列向量是标准正交的。 - \( R \) 是一个 \( n \times n \) 的上三角矩阵。 #### QR分解的实现方法 QR分解可以通过多种算法实现,常见的包括 Gram-Schmidt 正交化、Householder 变换和 Givens 旋转等方法[^2]。 1. **Gram-Schmidt 正交化** Gram-Schmidt 方法通过逐步构造正交基来实现 QR 分解。假设矩阵 \( A \) 的列向量为 \( a_1, a_2, \dots, a_n \),则可以按照以下步骤进行: - 初始化 \( q_1 = \frac{a_1}{\|a_1\|} \)。 - 对于每个后续向量 \( a_k \),从 \( a_k \) 中减去它在之前所有正交向量上的投影,得到新的正交向量 \( b_k \),然后将其标准化为 \( q_k = \frac{b_k}{\|b_k\|} \)。 - 构造矩阵 \( Q \) 的列向量为 \( q_1, q_2, \dots, q_n \),并计算 \( R \) 为 \( R = Q^T A \)。 下面是一个基于 Gram-Schmidt 正交化的 Python 实现示例: ```python import numpy as np def gram_schmidt_qr(A): m, n = A.shape Q = np.zeros((m, n)) R = np.zeros((n, n)) for j in range(n): v = A[:, j] for i in range(j): R[i, j] = np.dot(Q[:, i].T, A[:, j]) v = v - R[i, j] * Q[:, i] R[j, j] = np.linalg.norm(v) Q[:, j] = v / R[j, j] return Q, R # 示例矩阵 A = np.array([[12, 9, -4], [7, 4, 5], [6, -3, 21], [6, 15, 8]], dtype=float) Q, R = gram_schmidt_qr(A) print("Q:\n", Q) print("R:\n", R) ``` 2. **Householder 变换** Householder 方法通过构造一系列反射矩阵来实现 QR 分解。这种方法通常比 Gram-Schmidt 更数值稳定。每次反射会将矩阵的一列消去到只剩下一个非零元素,从而逐步形成上三角矩阵 \( R \)。 3. **Givens 旋转** Givens 方法通过构造一系列平面旋转矩阵来实现 QR 分解。每次旋转会将矩阵的一个元素变为零,从而逐步形成上三角矩阵 \( R \)。 #### 数值稳定性与应用 在实际应用中,QR 分解常用于求解线性方程组、最小二乘问题以及特征值计算等问题。由于 Gram-Schmidt 方法可能存在数值不稳定性,因此在需要高精度的情况下,通常推荐使用 Householder 或 Givens 方法[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倪桦

有帮助的话请杯咖啡吧,谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值