2.5.4 矩阵运算

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

你可能感兴趣的:(2.5.4 矩阵运算)