QR分解是常用的三种矩阵分解方法之一,QR分解经常用来解线性最小二乘法问题,有如下定义:
1).若n阶实非奇异矩阵A可以分解为正交矩阵Q与实非奇异上三角矩阵R的乘积,即A=QR,则称该分解式为矩阵A的QR分解;
2).进而A是m*n列满秩矩阵,若A=QR,其中Q是m*n矩阵, Q'Q=I(称Q为列正交矩阵), R为非奇异上三角矩阵,也称为矩阵A的QR分解。
这个例子将一个列满秩的矩阵进行QR分解,同时又通过QR分解结果还原矩阵,主要是涉及到对于QR分解的学习。
本例中的数据temp.csv如下:
A,B,C,D
71,74,92,79
77,73,62,70
80,84,95,88
78,83,82,88
75,82,96,77
66,84,70,79
70,83,66,70
78,84,70,29
72,87,78,49
79,85,79,80
R中QR分解的代码:
inputdata <- read.csv("temp.csv", sep = ",", header = T)
inputdata <- as.matrix(inputdata)
qrresult <- NULL
#能进行QR分解的矩阵必须列列满秩或行满秩(转置为列满秩)
if (rankMatrix(inputdata) == min(dim(inputdata)))
{
qrresult <- qr(inputdata) #进行qr分解
}else{
stop("Don't meet the needs of QR")
}
Qreslt <- qr.Q(qrresult) #获取QR分解的Q
Rreslt <- qr.R(qrresult) #获取QR分解的R
Xreslt <- qr.X(qrresult) #通过QR分解获取原矩阵
QR分解结果:
qr对象(包含了Q和R的信息):qrresult,通过qr对象求取的Q矩阵(正交矩阵):Qresult,通过qr对象求取的R矩阵(上三角矩阵):Rresult,以及通过Qresult和Rresult还原的原矩阵。
参考:
[1]李建东.矩阵QR分解的三种方法.吕梁高等专科学校学报,2009:25(1).