2.5.4 矩阵运算
1.转置运算 t()
A<-matrix(1:6, nrow = 2);A
t(A)
2.求方阵的行列式 det()
B<-matrix(1:4,ncol=2);B
det(B)
3.向量的内积 %*%
例如:
x<-1:5;x
y<-21:5;y
x%%y
1.内积
crossprod()是内积运算函数(表示交叉乘积)
表示t(x)%*%y
内积为crossprod(x,x)
crossprod(x,y)
2.外积
tcrossprod(x,y)是外积函数,x与y的外积.
表示x%*%t(y)
4.向量的外积(叉积)
x,y是n维向量,则x %o% y表示x与y作外积
x<-1:5;y<-2*1:5
x%o%y
outer()是外积运算函数,outer(x,y)计算向量x与y的外积,等价于x%o%y
outer()一般格式如下:
outer(X, Y, FUN = "*", ...)
x,y矩阵或向量,fun是做外积运算函数,缺省值为乘法运算.
outer()在绘制三维曲面非诚使用,它可以生成一个X,Y的网格
具体看3.3.1
5.矩阵的乘法
矩阵A,B有相同的维数,则A*B表示矩阵中对应的元素的乘积
A%%B表示通常意义下的两个矩阵的乘积
例:
A<-array(1:9,dim = (c(3,3)))
B<-array(9:1,dim = (c(3,3)))
C<-A%*%B;C
又上可以知道二次型-表示----x%%A%%x
6.生成对角阵和矩阵去对角运算
diag(v)依赖于变量
v-向量。diag(v)表示以v的元素为对角线元素的对角阵
M-矩阵.diag(v)表示以取M矩阵对角线上的元素向量
例:
v<-c(1,4,5);v
diag(v)
获取以v为对角元素的矩阵
M<-array(1:9,dim=c(3,3));M
diag(M)
获取矩阵M的对角元素
7.解线性方程组和求矩阵的逆矩阵
求Ax=b,其命令形式为solve(A,b),求矩阵A的逆
例如:
A<-t(array(c(1:8,10),dim=c(3,3)))
b<-c(1,1,1)
x<-solve(A,b);x
B<-solve(A);B
8,求矩阵特征值和特征向量
函数eigen(Sm)是求矩阵对称矩阵Sm的特征值和特征向量
结果有列表的形式保存
A<-t(array(c(1:8,10),dim=c(3,3)))
Sm<-crossprod(A,A)
ev<-eigen(Sm);ev
9.矩阵的奇异值分解
函数svd(A)是对矩阵A作奇异值分解,即A = UDV T ,其中U,V正交矩阵
D为对角阵,也就是矩阵A的奇异值。
svd(A)的返回值也是列表。
svd(A)$d表示矩阵A的奇异值,即矩阵D的对角线上的元素
svd(A)$u对应的是正交矩阵U,
svd(A)$v对应的是正交矩阵V
例如:
svdA<-svd(A);svdA
attach(svdA)
A1<-svdA$u
A2<-diag(svdA$d)
A3<-svdA$v
A1 %% A2 %% A3
10.求矩阵的行列式的值
det(A)是求矩阵A的行列式值
det(A)
11.最小拟合与QRs分解
函数lsfit()的返回值是最小二乘拟合的结果
命令如下:lsfit.sol<-lsfit(X,y)
最小二乘拟合结果,其中y是观测向量,X是社即矩阵。
x<-c(0.0,0.2,0.4,0.6,0.8)
y<-c(0.9,1.9,2.8,3.3,4.2)
lsfit.sol<-lsfit(x,y);lsfit.sol
coefficient是拟合系数,#residuals是拟合残差
ls.diag()给出拟合的进一步统计数据信息
最小二乘拟全密切关系的函数是QR分解函数qr()
还有相关函数看qr()文档、
x<-c(0.0,0.2,0.4,0.6,0.8)
X<-matrix(c(rep(1,5),x),ncol = 2);X
Xplus<-qr(X);Xplus
QR分解函数qr()输入的设计矩阵需要加1为元素的列,其返回值为列表.
$qr矩阵的上三角阵是QR分解中得到的R矩阵,下三角矩阵是QR分解的得到的正交阵Q的部分信息
$qraux--Q的附加信息
注意:这两个结果与函数lsfit()得到的结果相同。
可用QR分解的到的结果计算最小二乘的系数
b<-qr.coef(Xplus,y);b
注意:与函数lsfit()得到的结果相同。
为什么使用这种方法计算?
因为用QR分解在计算最小二乘拟合时,其计算误差比一般方法要小
通过QR分解得到最小二乘的拟合值和残差值
fit<-qr.fitted(Xplus,y);fit
res<-qr.resid(Xplus,y);res