一、 实验目的与要求
1.熟练掌握QR分解Gram–Schmidt方法;
2.掌握Householder方法;
3.能够判断矩阵是否可逆,并求出其逆矩阵。
二、 问题
三、模型建立及求解
1、Gram–Schmidt
1.1向量投影
向量的投影包含了两层意思:①正交关系:矢量与投影的差称为误差,误差和投影正交;②最短距离:投影空间中所有矢量中,与原矢量距离最近的,就是原矢量在该空间的投影,且最短距离的平方就是最小平方误差。
如图2所示,已知向量a和b,将b投影到a上,投影为p,设p=ta,t为常量,b与p的差为e,e=b-p。根据上述的正交关系e与p正交,根据最短距离有:。
设,则
。令
,求得
。则
,
。当
为单位向量,即
时,有:
------(1.1.1)
------(1.1.2)
1.2 Gram–Schmidt正交化
Gram–Schmidt算法的目的是将给定的一组线性无关向量,转换为一组标准正交基。其主要思想为:每个新的矢量都减去它在已经正交化的矢量方向的投影,进而每次新增一个与所有已经正交化的矢量都正交的矢量。新的矢量只和之前的矢量有关,而与后面的矢量无关。每新增一个正交矢量,将其单位化,最终即可将一组线性无关向量转换成标准正交基。
如图3所示为将向量进行正交化过程。首先令
,第一个矢量保持方向不变,将
单位化得到
;然后根据2.1式(1.1.1)和(1.1.2),令
,可以保证
与
正交,将
单位化得到
。于是将向量
正交化得到了标准正交基
。
将向量的数目推广至n个,将正交化的过程为:
①令;
②正交化:根据公式计算
;
③检验线性相关:若,则
,
是
的线性组合,证明
线性相关,退出迭代;否则进行下一步;
④单位化:令;
⑤重复步骤②~④,直至遍历完所有向量。
若在第i次迭代未退出,可证明与
都是正交的:等式
两边左乘
,得:
(
为常数可提到后面)
两两正交且都为单位向量,所以
,且
,
,所以:
,即
。因此
,而
方向与
一致,故
与
都是正交的。通过上述过程可将n个线性无关的向量得到一组n维向量空间中的标准正交基。
1.3Gram–Schmidt算法QR分解
QR分解是将一个矩阵A分解成具有标准正交列向量的矩阵Q和上三角矩阵R(对角线元素不为0)的算法,即A=QR:
为A的列且线性独立,
为Q的列且两两正交,所以有:
------(1.3.3)
Q矩阵可逆且其逆矩阵为,由于A=QR,所以
。
矩阵Q的列由矩阵A的列
通过Gram–Schmidt正交化得到。对A进行QR分解:A=QR。设
为矩阵R的列,
为R矩阵第i行第j列元素,则有:
在Gram–Schmidt正交化步骤中,新的矢量只和之前的矢量有关,而与后面的矢量无关。即只与
和
有关,而与
无关,所以
,故R是上三角矩阵。
又而根据Gram–Schmidt正交化步骤, ,所以矩阵R对角线元素
。
根据式(1.3.3),,有:
所以:
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次循环,总复杂度为:
flops。
1.5稳定性分析
导入附件MatrixA.mat中的矩阵进行QR分解后进行稳定性分析,验证得到的Q矩阵是否正交,通过计算与前面列之间的正交性的偏差:
,当
,说明Q矩阵的列不是完全正交的。
将计算结果画图显示,如图3所示。可以观察到,当k<35时,偏差值都为0,而后偏差急剧上升。分析原因,可能是由于浮点数存储的舍入误差,而每新增的正交向量都与前面的向量有关,即误差会累积。随着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只是对计算顺序进行了变更,计算次数不变,故算法复杂度依然为 flops。
2.3稳定性分析
导入附件MatrixA.mat中的矩阵进行QR分解后进行稳定性分析,计算并画出折线图,如图4所示,可以看到偏差的数量级为
,相比于Gram-Schmidt方法 QR分解,稳定性有了极大提升。
分析该结果,Modified Gram-Schmidt 从开始就使所有的向量都参与计算,这样大部分的计算都在误差尚未积累到较大时就已经被执行。由于是按行计算R,MGS的计算量随循环次数逐步减少,因此前面积累的误差的影响就不会剧烈地扩散开,所以MGS可以使求得的矩阵Q的正交性更好,提高了稳定性。
3、Householder
3.1反射算子
设一个模为1的向量,令矩阵
,则H为反射矩阵,也称为反射算子。反射矩阵是对称且正交的矩阵:
定义一个以为法向量的超平面S:
。空间上任一向量x在S上的投影为:
x关于超平面S的对称点由其与反射算子的乘积给出:
3.2Householder算法QR分解
Householder算法实现QR分解的核心思想为,通过构造反射算子,逐列对原矩阵A进行Householder三角化,最终得到上三角矩阵R,而通过构造的反射算子计算出Q,实现QR分解。将一个3×3矩阵上三角化的过程下所示,、
为构造的反射算子。
通过构造反射算子,逐列对矩阵进行Householder三角化的原理为:例如给定一个m×n的矩阵,首先对A的第一列
进行上三角化时,需构造这样一个反射算子
,使得
,
除第一个元素外全为0。相当于
关于超平面
对称的向量
在一条坐标轴上,如图5所示。
实现了第一列的上三角化。
构造反射算子反射算子的过程为:对于第一列向量
,定义函数
,定义向量
和
:
为单位向量,反射算子
使用
构造:
。
验证满足将A第一列上三角化的需求:
将
映射为:
而v满足:,所以:
所以满足要求。
当上三角化至进行至第k步时,矩阵具有如图6所示结构,空白处即
和
第i,j个位置的元素值为0。这时要第k列上三角化,相当于构造一个反射矩阵
(
长度为m-k+1,
大小为(m-k+1)×(m-k+1)),对虚线包围区域的第一列上三角化,构造方式与上述矩阵A第一列类似。
得到后,利用
构造一个
如图7所示结构,
仍是一个对称正交矩阵,即
,
。所得矩阵
前k-1列不变,实现了对第k列的上三角化。
Householder算法实现过程如下所示:
至此,原矩阵A经过一系列变换得到上三角矩阵:
。Householder方法实现的QR分解是对矩阵A计算一个完整的QR因数分解
,而通常情况下不需计算矩阵
。
的值通过
计算得到:由于
都为对称正交矩阵,故
,令
,则:
,
所以。
3.3复杂度分析
循环至第k次时复杂度为:
计算乘积:
flops;
外积复杂度:
flops;
减法次数:
flops。
第k次循环总复杂度为:flops。算法总复杂度为:
flops
3.4稳定性分析
导入附件MatrixA.mat中的矩阵进行QR分解后进行稳定性分析,计算并画出折线图,如图8所示,可以看到偏差的数量级变成了
,相比于MGS,稳定性有了极大提升。
4、QR分解应用
4.1求解线性方程组
使用QR分解求解线性方程组Ax=b,A大小为n×n,为非奇异矩阵。首先将矩阵A进行QR分解,A=QR,线性方程组变成QRx=b,所以。由于R为上三角矩阵,通过回代即可算出x。
复杂度分析:其中QR分解复杂度为,矩阵乘法为
,回代为
,所以平均复杂度约为
flops。
导入实验1的A_b.mat文件,使用QR分解求解线性方程组。统计误差,与列主元消元法对比,如图9、图10所示。可以看到QR分解误差小于列主元消元法。
4.2求解逆矩阵
对于给定矩阵B,对其进行QR分解,若未能成功分解,即中途退出循环,证明B矩阵列向量线性相关,B为奇异矩阵;否则得到B=QR,求B的逆矩阵方法为:。
复杂度分析:其中QR分解复杂度为,求Q的转置为
,由于R为上三角矩阵,求其逆的为
,矩阵乘法为
,所以平均复杂度约为
flops。
导入附件matrixB.mat给出的矩阵B,成功对其进行QR分解,证明B可逆。使用QR分解方法求其逆矩阵,计算
与B相乘后每一列向量的二范数值,如图11所示,再验证对角线的元素值,如图12所示,可以看到所有的值都集中在1附近,正确求解出B的逆矩阵。