R与数学专题 |第二节:矩阵运算
上一期我们主要给大家介绍了R在数学方面的基本运算,主要包括加减乘除四则运算、复数计算、最小公倍数、阶乘、组合数、求解方程组等内容。
这一周将接着给大家介绍 R在矩阵运算的相关计算。通过对本文的学习,你将会掌握矩阵的创建,矩阵的基本运算,矩阵的分解;行列式的相关运算。
1. 矩阵相关运算
1.1 矩阵的创建
在R中,可以用matrix或者array函数创建矩阵 例如:
那么用matrix创建:
A=matrix(data=c(1:9),nrow=3,ncol=3,byrow=T)
那么创建后的矩阵为:
A
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
用array创建矩阵
A=array(data=c(1:9),dim=c(3,3))
A=t(A)## 矩阵转置A
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
1.2 矩阵的基本运算
1.2.1 矩阵的四则运算
1.2.2 矩阵的基本运算
A=matrix(c(1:9),nrow=3,ncol=3,byrow=T);
B=matrix(rep(c(1:3),each=3),nrow=3,ncol=3,byrow=T);
C=matrix(rep(c(1,2),each=3),nrow=3,ncol=2,byrow=T)
A-B
## [,1] [,2] [,3]
## [1,] 0 1 2
## [2,] 2 3 4
## [3,] 4 5 6
A+B
## [,1] [,2] [,3]
## [1,] 2 3 4
## [2,] 6 7 8
## [3,] 10 11 12
A/B
## [,1] [,2] [,3]
## [1,] 1.000000 2.000000 3
## [2,] 2.000000 2.500000 3
## [3,] 2.333333 2.666667 3
A*B## 点乘
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 8 10 12
## [3,] 21 24 27
A%*%C ## 矩阵乘法
## [,1] [,2]
## [1,] 9 11
## [2,] 21 26
## [3,] 33 41
2. 行列式的相关计算
A=matrix(rnorm(25),nrow=5,ncol=5)
A
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.6081452 1.5938368 0.3004225 -0.6038453 0.047709409
## [2,] -1.2454226 -1.8366554 -2.2259015 0.6817416 0.001494057
## [3,] -0.1471332 -0.8175191 -1.3834029 0.5050465 -0.362351728
## [4,] -1.3028862 0.3438052 -1.5679022 -0.3826032 1.230887754
## [5,] 0.7206467 -0.5123514 -0.7253012 -1.2935483 2.196657030
2.1 在R中,用det函数求行列式的值:
det(A)=-3.6456885
用solve求矩阵的逆矩阵:
solve(A)##求矩阵的逆函数
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.3545853 -0.7683905 0.9949822 0.08813530 0.1229659
## [2,] -0.2552427 -0.8515428 0.6631227 0.70394951 -0.2789463
## [3,] -0.2694251 0.2534121 -1.0436882 -0.06923898 -0.1276855
## [4,] -2.2121589 -1.4020892 0.1973650 1.82881935 -0.9432152
## [5,] -1.3348429 -0.6885104 -0.4001380 1.18935374 -0.2477576
2.2 矩阵的秩
用qr函数计算矩阵的秩: rank(A)=5
2.3矩阵的特征值与特征向量
在r中用函数eigen(A)来求矩阵的特征值和特征向量
A=matrix(diag(1,5,5)+1,nrow=5,ncol=5)
A
## [,1] [,2] [,3] [,4] [,5]
## [1,] 2 1 1 1 1
## [2,] 1 2 1 1 1
## [3,] 1 1 2 1 1
## [4,] 1 1 1 2 1
## [5,] 1 1 1 1 2
那么矩阵的特征值及对应的特征向量为:
eigen(A)
## $values
## [1] 6 1 1 1 1
##
## $vectors
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.4472136 0.000000e+00 0.000000e+00 0.7514692 -0.4850712
## [2,] -0.4472136 -8.326673e-17 1.821460e-16 0.2818009 0.8488747
## [3,] -0.4472136 -4.763110e-01 6.631701e-01 -0.3444234 -0.1212678
## [4,] -0.4472136 -3.361666e-01 -7.440824e-01 -0.3444234 -0.1212678
## [5,] -0.4472136 8.124776e-01 8.091236e-02 -0.3444234 -0.1212678
3 矩阵的分解
设A是一个方块矩阵:
A的LU分解是将它分解成如下形式:
其中L和U分别是下三角矩阵和上三角矩阵。
载入包Matrix
library(Matrix); A=matrix(rnorm(25),nrow=5,ncol=5,byrow=T) A
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.45437186 1.2750028 0.2519691 0.32299459 2.2641137
## [2,] -1.14597300 -0.4030461 1.5272998 -1.51029777 -1.4894753
## [3,] 0.07661848 0.6756246 -2.8083325 -0.22854021 0.9963908
## [4,] 0.55287355 0.8335718 0.1078641 -0.09829797 3.0160294
## [5,] -0.49131991 -0.7637156 -1.0482681 2.07081195 -1.3428043
LU分解用lu函数:
LU=lu(A)
U=expand(LU)$U
L=expand(LU)$L
P=expand(LU)$P
L
## 5 x 5 Matrix of class "dtrMatrix" (unitriangular)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.00000000 . . . .
## [2,] 0.05268149 1.00000000 . . .
## [3,] -0.78795048 0.98872128 1.00000000 . .
## [4,] -0.33782276 -0.54727183 -0.55525757 1.00000000 .
## [5,] 0.38014593 0.57339373 0.36096262 0.19242305 1.00000000
U
## 5 x 5 Matrix of class "dtrMatrix"
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.4543719 1.2750028 0.2519691 0.3229946 2.2641137
## [2,] . 0.6084556 -2.8216066 -0.2455560 0.8771139
## [3,] . . 4.5156214 -1.0130075 -0.5726870
## [4,] . . . 1.4830609 -0.4159042
## [5,] . . . . 1.9391523
要进行矩阵其他分解可以参考Matrix包的说明文档。
通过这周的学习,大家对矩阵的基本运算有了进一步的了解,这周的课程只是带领大家入门,如果要想对矩阵的操作进一步了解,只有通过自己的不断学习,不断积累才是唯一的方式。在下一周中,我们将给大家讲解R在线性代数方面的计算。
----------------------------------------------------------------------------------
数据和特征决定了效果上限,模型和算法决定了逼近这个上限的程度
----------------------------------------------------------------------------------

浙公网安备 33010602011771号