最优化方法实验三--矩阵QR分解

 实验目的与要求

1.熟练掌握QR分解Gram–Schmidt方法;

2.掌握Householder

3.能够判断矩阵是否可逆,并求出其逆矩阵

 问题

模型建立求解

1、Gram–Schmidt

1.1向量投影

向量的投影包含了两层意思:①正交关系:矢量与投影的差称为误差,误差和投影正交;②最短距离:投影空间中所有矢量中,与原矢量距离最近的,就是原矢量在该空间的投影,且最短距离的平方就是最小平方误差。

如图2所示,已知向量ab,将b投影到a上,投影为p,设p=ta,t为常量,bp的差为e,e=b-p。根据上述的正交关系ep正交,根据最短距离有:\hat{t}=\min_{t}\left \| b-p \right \|_{2}^{2}=\min_{t}\left \| b-ta \right \|_{2}^{2}

f(t)=\left \| b-ta \right \|_{2}^{2}=\left \langle b-ta,b-ta \right \rangle=t^{2}a^{T}a-2ta^{T}b-b^{T}b,则\triangledown f(t)=2ta^{T}a-2a^{T}b\triangledown f(t)=0,求得\hat{t}=\frac{a^{T}b}{a^{T}a}=\frac{a^{T}b}{\left \| a \right \|_{2}^{2}}。则p=ta=\frac{a^{T}b}{\left \| a \right \|_{2}^{2}}ae=b-p=b-\frac{a^{T}b}{\left \| a \right \|_{2}^{2}}a。当a为单位向量,即\left \| a \right \|_{2}^{2}=1时,有:

                        p=ta=(a^{T}b)a                    ------(1.1.1)

                        e-b-p=b-(a^{T}b)a        ------(1.1.2)

1.2 Gram–Schmidt正交化

Gram–Schmidt算法的目的是将给定的一组线性无关向量,转换为一组标准正交基。其主要思想为:每个新的矢量都减去它在已经正交化的矢量方向的投影,进而每次新增一个与所有已经正交化的矢量都正交的矢量。新的矢量只和之前的矢量有关,而与后面的矢量无关。每新增一个正交矢量,将其单位化,最终即可将一组线性无关向量转换成标准正交基。

如图3所示为将向量a_{1},a_{2}进行正交化过程。首先令\tilde{q_{1}}=a_{1},第一个矢量保持方向不变,将\tilde{q_{1}}单位化得到q_{1};然后根据2.1式(1.1.1)和(1.1.2),令\tilde{q_{2}}=a_{2}-(q_{1}^{T}a_{2})q_{1},可以保证\tilde{q_{2}}q_{1}正交,将\tilde{q_{2}}单位化得到q_{2}。于是将向量a_{1},a_{2}正交化得到了标准正交基q_{1},q_{2}

将向量的数目推广至n个,将a_{1},a_{2},...,a_{n}正交化的过程为:

①令q_{1}=\frac{a_{1}}{\left \| a_{1} \right \|_{2}}

②正交化:根据公式\tilde{q_{i}}=a_{i}-(q_{1}^{T}a_{i})q_{1}-...-(q_{i-1}^{T}a_{i})q_{i-1},i=2,3,...,n计算\tilde{q_{i}}

③检验线性相关:若\tilde{q_{1}}=0,则a_{i}=(q_{1}^{T}a_{i})q_{1}+...+(q_{i-1}^{T}a_{i})q_{i-1}a_{i}q_{1},...,q_{i-1}的线性组合,证明a_{i},q_{1},...,q_{i-1}线性相关,退出迭代;否则进行下一步;

④单位化:令q_{i}=\frac{\tilde{q_{i}}}{\left \| \tilde{q_{i}} \right \|_{2}}

⑤重复步骤②~④,直至遍历完所有向量。

若在第i次迭代未退出,可证明q_{i}q_{1},...,q_{i-1}都是正交的:等式\tilde{q_{i}}=a_{i}-(q_{1}^{T}a_{i})q_{1}-...-(q_{i-1}^{T}a_{i})q_{i-1}两边左乘q_{j}^{T},1\leqslant j\leqslant i-1,得:

q_{j}^{T}\tilde{q_{i}}=q_{j}^{T}a_{i}-q_{j}^{T}(q_{1}^{T}a_{i})q_{1}-...-q_{j}^{T}(q_{i-1}^{T}a_{i})q_{i-1}   (q_{1}^{T}a_{i},...,q_{i-1}^{T}a_{i}为常数可提到后面)

         =q_{j}^{T}a_{i}-(q_{j}^{T}q_{1})(q_{1}^{T}a_{i})-...-(q_{j}^{T}q_{i-1})(q_{i-1}^{T}a_{i})

q_{1},...,q_{i-1}两两正交且都为单位向量,所以q_{j}^{T}q_{k}=0,k=1,2,...,i-1,且k\neq j
q_{j}^{T}q_{j}=1,所以:q_{j}^{T}a_{i}-(q_{j}^{T}q_{1})(q_{1}^{T}a_{i})-...-(q_{j}^{T}q_{i-1})(q_{i-1}^{T}a_{i})=q_{j}^{T}a_{i}-q_{j}^{T}a_{i}=0,即q_{j}^{T}\tilde{q_{i}}=0。因此q_{1}\perp \tilde{q_{i}},...,q_{i-1}\perp \tilde{q_{i}},而q_{i}=\frac{\tilde{q_{i}}}{\left \| \tilde{q_{i}} \right \|_{2}}方向与\tilde{q_{i}}一致,故q_{i}q_{1},...,q_{i-1}都是正交的。通过上述过程可将n个线性无关的向量得到一组n维向量空间中的标准正交基。

1.3Gram–Schmidt算法QR分解

QR分解是将一个矩阵A分解成具有标准正交列向量的矩阵Q和上三角矩阵R(对角线元素不为0)的算法,即A=QR:

               A=\left [ a_{1},a_{2},..., a_{n}\right ]=\left [ q_{1},q_{2},..., q_{n}\right ]\begin{bmatrix} R_{11} &R_{12} & \cdots &R_{1n} \\ 0 &R_{22} & \cdots &R_{2n} \\ \vdots & \vdots &\ddots &\vdots \\ 0 &0 & \cdots &R_{nn} \end{bmatrix}

a_{1},a_{2},..., a_{n}为A的列且线性独立,q_{1},q_{2},..., q_{n}为Q的列且两两正交,所以有:

  Q^{T}Q=\begin{bmatrix} q_{1}^{T}q_{1} & q_{1}^{T}q_{2} & \cdots &q_{1}^{T}q_{n} \\ q_{2}^{T}q_{1} & q_{2}^{T}q_{2} & \cdots &q_{2}^{T}q_{n} \\ \vdots & \vdots & \ddots & \vdots \\ q_{n}^{T}q_{1} & q_{n}^{T}q_{2} & \cdots &q_{n}^{T}q_{n} \end{bmatrix}=\begin{bmatrix} 1 & 0 &\cdots & 0\\ 0 & 1 & \cdots & 0\\ \vdots & \vdots &\ddots &\vdots \\ 0 & 0&\cdots & 1 \end{bmatrix}=I  ------(1.3.3)

Q矩阵可逆且其逆矩阵为Q^{T},由于A=QR,所以R=Q^{-1}A=Q^{T}A

矩阵Q的列q_{1},q_{2},..., q_{n}由矩阵A的列a_{1},a_{2},..., a_{n}通过Gram–Schmidt正交化得到。对A进行QR分解:A=QR。设r_{1},...,r_{n}为矩阵R的列,R_{ij}为R矩阵第i行第j列元素,则有:

                            a_{i}=Qr_{i}=R_{i1}q_{1}+R_{i2}q_{2}+...+R_{in}q_{n}

                            q_{i}=\frac{a_{i}-R_{i1}q_{1}-...-R_{ii-1}q_{i-1}-R_{ii+1}q_{i+1}-...-R_{in}q_{n}}{R_{ii}}

在Gram–Schmidt正交化步骤中,新的矢量只和之前的矢量有关,而与后面的矢量无关。即q_{i}只与q_{1},...,q_{i-1}a_{i}有关,而与q_{i+1},...,q_{n}无关,所以R_{ii+1}=...=R_{in}=0,故R是上三角矩阵。

又而根据Gram–Schmidt正交化步骤,q_{i}=\frac{a_{i}-(q_{1}^{T}a_{i})q_{1}-...-(q_{i-1}^{T}a_{i})q_{i-1}}{\left \| \tilde{q_{i}} \right \|_{2}} ,所以矩阵R对角线元素R_{ii}=\left \| \tilde{q_{i}} \right \|_{2}

根据式(1.3.3),Q^{-1}=Q^{T},有:

 R=Q^{-1}A=Q^{T}A=\begin{bmatrix} q_{1}^{T}\\ q_{12}^{T}\\ \vdots \\ q_{n}^{T} \end{bmatrix}\begin{bmatrix} a_{1} & a_{2} & \cdots & a_{n} \end{bmatrix} =\begin{bmatrix} q_{1}^{T}a_{1} & q_{1}^{T}a_{2} & \cdots & q_{1}^{T}a_{n}\\ q_{2}^{T}a_{1} & q_{2}^{T}a_{2} & \cdots & q_{2}^{T}a_{n}\\ \vdots & \vdots & \ddots & \vdots \\ q_{n}^{T}a_{1} & q_{n}^{T}a_{2} & \cdots & q_{n}^{T}a_{n} \end{bmatrix}

所以:R=\begin{bmatrix} \left \| \tilde{q_{1}} \right \|_{2} & q_{1}^{T}a_{2} & \cdots &q_{1}^{T}a_{n} \\ 0 & \left \| \tilde{q_{2}} \right \|_{2} & \cdots & q_{2}^{T}a_{n}\\ \vdots & \vdots & \ddots &\vdots \\ 0& 0 & \cdots & \left \| \tilde{q_{n}} \right \|_{2} \end{bmatrix}

Gram–Schmidt算法实现矩阵A的QR分解为基于正交化定义的方法,实现核心类似数学归纳法,通过第k步的结果推导到第k+1步,逐列计算Q和R的元素,步骤如下:

1.4复杂度分析

设矩阵A大小为m×n,在第k次循环中,计算上三角非对角线元素的次数为k-1,每次内积的复杂度为2m-1 flops,总的复杂度为(k-1)(2m-1)flops;正交化复杂度为2(k-1)m flops;计算对角线元素和单位化的复杂度为3m flops。总计为(4m-1)(k-1)+3m flops。总共n次循环,总复杂度为:

\sum_{k=1}^{n}((4m-1)(k-1)+3m)=(4m-1)(n-1)/2+3mn\approx 2mn^{2}flops。

1.5稳定性分析

导入附件MatrixA.mat中的矩阵进行QR分解后进行稳定性分析,验证得到的Q矩阵是否正交,通过计算q_{k}(k=2,3,..,n)与前面列之间的正交性的偏差:e_{k}=max(q_{i}^{T}q_{k}),i=1,2,...,k-1,当e_{k}\neq 0,说明Q矩阵的列不是完全正交的。

将计算结果画图显示,如图3所示。可以观察到,当k<35时,偏差值都为0,而后偏差急剧上升。分析原因,可能是由于浮点数存储的舍入误差,而每新增的正交向量都与前面的向量有关,即误差会累积。随着k增大超出一定范围后,误差累积量增加,导致e_{k}波动性增大,Q矩阵逐渐失去正交性,稳定性降低。

由于Gram–Schmidt稳定性较低,下面将引入Gram–Schmidt的改进算法Modified Gram–Schmidt。

2、Modified Gram-Schmidt

2.1Modified Gram-Schmidt算法思想

由上述Gram-Schmidt算法的QR分解稳定性分析中可知,QR分解是逐列分解的,新向量只与前面的向量有关,与之后的向量无关。计算过程中由于浮点数计算精度问题会带来误差,而后面的向量只有在其被计算的时候才可见,这时误差可能已经积累到一定程度,故越往后计算误差越大,当矩阵维数较高的时候具有较差的稳定性。

故想减小误差积累,提高稳定性,计算当前向量时同时考虑之后的向量。Modified Gram-Schmidt 的核心思想为:先选定一个向量作为第一个基准,然后将其余所有向量都投影到该基准的正交空间中,在该正交空间中,对剩下的向量重复前面的工作,最后所有的向量两两正交。实现步骤如下:

2.2复杂度分析

本质上Modified Gram-Schmidt 与Gran-Schmidt 是等价的,MGS只是对计算顺序进行了变更,计算次数不变,故算法复杂度依然为2mn^{2} flops。

2.3稳定性分析

导入附件MatrixA.mat中的矩阵进行QR分解后进行稳定性分析,计算e_{k}并画出折线图,如图4所示,可以看到偏差的数量级为10^{-7},相比于Gram-Schmidt方法 QR分解,稳定性有了极大提升。

分析该结果,Modified Gram-Schmidt 从开始就使所有的向量都参与计算,这样大部分的计算都在误差尚未积累到较大时就已经被执行。由于是按行计算R,MGS的计算量随循环次数逐步减少,因此前面积累的误差的影响就不会剧烈地扩散开,所以MGS可以使求得的矩阵Q的正交性更好,提高了稳定性。

3、Householder

3.1反射算子

设一个模为1的向量\omega,令矩阵H=I-2\omega \omega ^{T},则H为反射矩阵,也称为反射算子。反射矩阵是对称且正交的矩阵:

                    H^{T}=(I-2\omega \omega ^{T})^{T}=I-2\omega \omega ^{T}=H

                    HH^{T}=(I-2\omega \omega ^{T})(I-2\omega \omega ^{T})^{T}=I-4\omega \omega ^{T}+4\omega(\omega ^{T}\omega ) \omega ^{T}

                                =I-4\omega \omega ^{T}+4\omega \omega ^{T}=I

定义一个以\omega为法向量的超平面S:S=\left \{ u|\omega ^{T}u=0 \right \}。空间上任一向量x在S上的投影为:

                   y=x-(\omega ^{T}x)\omega =x-\omega(\omega ^{T}x)=(I-\omega\omega^{T})x

x关于超平面S的对称点由其与反射算子的乘积给出:

z=y+(y-x)=x-(\omega ^{T}x)\omega +x-(\omega ^{T}x)\omega -x=x-2(\omega ^{T}x)\omega=(I-2\omega\omega ^{T})x=Hx

3.2Householder算法QR分解

Householder算法实现QR分解的核心思想为,通过构造反射算子,逐列对原矩阵A进行Householder三角化,最终得到上三角矩阵R,而通过构造的反射算子计算出Q,实现QR分解。将一个3×3矩阵上三角化的过程下所示,H_{1}H_{2}为构造的反射算子。

                   A=\begin{bmatrix} X & X &X \\ X &X & X\\ X & X & X \end{bmatrix}\rightarrow A_{1}=H_{1}A=\begin{bmatrix} X & X &X \\ 0 &X &X \\ 0& X & X \end{bmatrix}

                       \rightarrow A_{2}=H_{2}A_{1}=H_{2}H_{1}A_{1}=\begin{bmatrix} X& X& X\\ 0 & X & X\\ 0 &0 & X \end{bmatrix}

通过构造反射算子,逐列对矩阵进行Householder三角化的原理为:例如给定一个m×n的矩阵A=\begin{bmatrix} a_{1} & a_{2} &\cdots & a_{n} \end{bmatrix},首先对A的第一列a_{1}进行上三角化时,需构造这样一个反射算子H_{1}=I-2\omega _{1}\omega _{1}^{T},使得a_{1}^{'}=H_{1}a_{1}a_{1}^{'}除第一个元素外全为0。相当于a_{1}关于超平面S=\left \{ u|\omega _{1}^{T}u=0 \right \}对称的向量a_{1}^{'}在一条坐标轴上,如图5所示。

A_{1}=H_{1}A=\begin{bmatrix} H_{1}a_{1} & H_{1}a_{2}& \cdots & H_{1}a_{n} \end{bmatrix}

      = \begin{bmatrix} a_{1}^{'}& H_{1}a_{2}& \cdots & H_{1}a_{n} \end{bmatrix} =\begin{bmatrix} X & X & \cdots & X\\ 0 & X & \cdots & X\\ \vdots & \vdots & \ddots &\vdots \\ 0& X & \cdots & X \end{bmatrix}

实现了第一列的上三角化。

构造反射算子反射算子H_{1}的过程为:对于第一列向量a_{1}=\begin{bmatrix} A_{11} & A_{21}&\cdots & A_{m1} \end{bmatrix}^{T},定义函数sign(x)=\left\{\begin{matrix} 1,x>0\\ -1,x<0 \end{matrix}\right.,定义向量\omegav

                            v=\begin{bmatrix} A_{11}+sign(A_{11})\left \| A_{11} \right \|_{2}\\ A_{21}\\ \vdots \\ A_{m1} \end{bmatrix},\omega _{1}=\frac{v}{\left \| v \right \|_{2}}

\omega _{1}为单位向量,反射算子H_{1}使用\omega _{1}构造:H_{1}=I-2\omega _{1}\omega _{1}^{T}

验证H_{1}满足将A第一列上三角化的需求:H_{1}a_{1}映射为:

         H_{1}a_{1}=a_{1}-2\omega _{1}\omega _{1}^{T}a_{1}=a_{1}-2\frac{vv^{T}a_{1}}{\left \| v \right \|_{2}^{2}}=a_{1}-2\frac{(v^{T}a_{1})v}{\left \| v \right \|_{2}^{2}}=a_{1}-2\frac{(a_{1}^{T}v)v}{\left \| v \right \|_{2}^{2}}

而v满足:\left \| v \right \|_{2}^{2}=v^{T}v=2(\left \| a_{1} \right \|_{2}^{2}+\left | A_{11}\left \| a_{1} \right \|_{2} \right |)=2a_{1}^{T}(a_{1}+sign(A_{11})\left \| a_{1} \right \|_{2}e_{1})=2a_{1}^{T}v,所以:

                                 H_{1}a_{1}=a_{1}-v=\begin{bmatrix} -sign(A_{11})\left \| a_{1} \right \|_{2}\\ 0\\ \vdots \\ 0 \end{bmatrix}

所以H_{1}满足要求。

当上三角化至进行至第k步时,矩阵A_{k-1}具有如图6所示结构,空白处即i>jj<k第i,j个位置的元素值为0。这时要第k列上三角化,相当于构造一个反射矩阵H_{k}^{'}=I-2\omega _{k}\omega _{k}^{T}\omega _{k}长度为m-k+1,H_{k}^{'}大小为(m-k+1)×(m-k+1)),对虚线包围区域的第一列上三角化,构造方式与上述矩阵A第一列类似。

得到H_{k}^{'}后,利用H_{k}^{'}构造一个H_{k}如图7所示结构,H_{k}仍是一个对称正交矩阵,即H_{k}^{T}=H_{k}H_{k}^{T}=H_{k}^{-1}。所得矩阵A_{k}=H_{k}A_{k-1}前k-1列不变,实现了对第k列的上三角化。

     

Householder算法实现过程如下所示:

至此,原矩阵A经过一系列变换得到上三角矩阵\begin{bmatrix} R\\ 0 \end{bmatrix}H_{n}...H_{2}H_{1}A=\begin{bmatrix} R\\ 0 \end{bmatrix}。Householder方法实现的QR分解是对矩阵A计算一个完整的QR因数分解A=\begin{bmatrix} Q& \tilde{Q} \end{bmatrix}\begin{bmatrix} R\\ 0 \end{bmatrix},而通常情况下不需计算矩阵\begin{bmatrix} Q & \tilde{Q} \end{bmatrix}

\begin{bmatrix} Q & \tilde{Q} \end{bmatrix}的值通过H_{1},H_{2},...,H_{n}计算得到:由于H_{1},H_{2},...,H_{n}都为对称正交矩阵,故H_{i}^{T}=H_{i},H_{i}^{T}H_{i}=I,i=1,2,...,n,令H=H_{n}...H_{2}H_{1},则:

H^{T}H=(H_{n}...H_{2}H_{1})^{T}(H_{n}...H_{2}H_{1})=H_{1}^{T}H_{2}^{T}...H_{n}^{T}H_{n}...H_{2}H_{1}=I

H^{-1}=H^{T}=H_{1}^{T}H_{2}^{T}...H_{n}^{T}=H_{1}H_{2}...H_{n}A=H^{-1}\begin{bmatrix} R\\ 0 \end{bmatrix}      

所以\begin{bmatrix} Q & \tilde{Q} \end{bmatrix}=H_{1}H_{2}...H_{n}

3.3复杂度分析

循环至第k次时复杂度为:

计算\omega _{k}^{T}A_{k-1}\left [ k:m,k \right ]乘积:(2(m-k+1)-1)(n-k+1)flops;

\omega _{k}外积复杂度:(m-k+1)(n-k+1)flops;

A_{k-1}\left [ k:m,k \right ]减法次数:(m-k+1)(n-k+1)flops。

第k次循环总复杂度为:4(m-k+1)(n-k+1)flops。算法总复杂度为:

                \sum_{k=1}^{n}4(m-k+1)(n-k+2)\approx 2mn^{2}-\frac{2}{3}n^{3}flops

3.4稳定性分析

导入附件MatrixA.mat中的矩阵进行QR分解后进行稳定性分析,计算e_{k}并画出折线图,如图8所示,可以看到偏差的数量级变成了10^{-16},相比于MGS,稳定性有了极大提升。

4、QR分解应用

4.1求解线性方程组

使用QR分解求解线性方程组Ax=b,A大小为n×n,为非奇异矩阵。首先将矩阵A进行QR分解,A=QR,线性方程组变成QRx=b,所以Rx=Q^{-1}B=Q^{T}b。由于R为上三角矩阵,通过回代即可算出x。

复杂度分析:其中QR分解复杂度为2n^{3},矩阵乘法为2n^{2},回代为n^{2},所以平均复杂度约为2n^{3}+3n^{2}flops。

导入实验1的A_b.mat文件,使用QR分解求解线性方程组。统计误差,与列主元消元法对比,如图9、图10所示。可以看到QR分解误差小于列主元消元法。

4.2求解逆矩阵

对于给定矩阵B,对其进行QR分解,若未能成功分解,即中途退出循环,证明B矩阵列向量线性相关,B为奇异矩阵;否则得到B=QR,求B的逆矩阵方法为:B^{-1}=(QR)^{-1}=R^{-1}Q^{-1}=R^{-1}Q^{T}

复杂度分析:其中QR分解复杂度为2n^{3},求Q的转置为n^{2},由于R为上三角矩阵,求其逆的为\frac{n^{3}}{2}+\frac{n^{2}}{2},矩阵乘法为2n^{2},所以平均复杂度约为\frac{5}{2}n^{3}+\frac{7}{2}n^{2}flops。

导入附件matrixB.mat给出的矩阵B,成功对其进行QR分解,证明B可逆。使用QR分解方法求其逆矩阵B^{-1},计算B^{-1}与B相乘后每一列向量的二范数值,如图11所示,再验证对角线的元素值,如图12所示,可以看到所有的值都集中在1附近,正确求解出B的逆矩阵。

  • 34
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值