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在线性代数方面的计算。

posted @ 2015-06-03 15:58  payton数据之旅  阅读(500)  评论(0)    收藏  举报