目次:1_矩阵的生成2_矩阵的四则运算3_矩阵的矩阵运算4_矩阵的解析 1_1将向量界说成数组 向量只有界说了维数向量(dim属性)后才气被看作是数组.好比:> z=1:12;> dim(z)=c(3,4);> z; [,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12 留意:生成矩阵是按列分列的。1_2用array ( )函数结构多维数组 用法为:array(data=NA,dim=length(data),dimnames=NULL) 参数描写:data:是一个向量数据。 dim:是数组各维的长度,缺省时为原向量的长度。 dimname:是数组维的名字,缺省时为空。 例子:> x=array(1:20,dim=c(4,5))> x [,1] [,2] [,3] [,4] [,5][1,] 1 5 9 13 17[2,] 2 6 10 14 18[3,] 3 7 11 15 19[4,] 4 8 12 16 201_3用matrix()函数结构矩阵 函数matrix)是结构矩阵(二维数组)的函数,其结构形式为 matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL) 个中data是一个向量数据,nro、是矩阵的行数,ncol是矩阵的列数.当byrow=TRUE时,生成矩阵的数据按行安排,缺省时相当于byrow=FALSE,数据按列安排.dimname。是数组维的名字,缺省时为空. 如结构一个3×5阶的矩阵> A=matrix(1:15,nrow=3,byrow=TRUE)> A [,1] [,2] [,3] [,4] [,5][1,] 1 2 3 4 5[2,] 6 7 8 9 10[3,] 11 12 13 14 152_矩阵的四则运算 可以对数组之间举办四则运算(+、一、*、/),这时举办的是数组对应元素的四则运算。一般环境下介入运算的矩阵可能数组的维数是沟通的,但也可以计较差异维的,这是要将对应的元素补足。3_1 转置运算 对付矩阵A,函数t(A)暗示矩阵A的转置,如:> A=matrix(1:6,nrow=2);> A; [,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6> t(A); [,1] [,2][1,] 1 2[2,] 3 4[3,] 5 6
3_2 求方阵的队列式 函数det()是求矩阵队列式的值,如> det(matrix(1:4,ncol=2));[1] -2
3_3 向量的内积 对付n维向量x,可以当作nxl阶矩阵或lxn阶矩阵。若x与y是沟通维数的向量,则x%*%Y暗示x与y作内积.譬喻,>x=1:5; Y=2*1:5>x%*%y [,1][1,]110 函数crossprod()是内积运算函数(暗示交错乘积),crossprod(x,y)计较向量x与y的内积,即t(x) %*% y’。crossprod(x)暗示x与x的内积. 雷同地,tcrossprod(x,y)暗示’x%*%t(Y)’,即x与y的外积,也称为叉积。tcrossprod(x)暗示x与x作外积.如:> x=1:5; y=2*1:5;> crossprod(x); [,1][1,] 55> crossprod(x,y); [,1][1,] 110> tcrossprod(x); [,1] [,2] [,3] [,4] [,5][1,] 1 2 3 4 5[2,] 2 4 6 8 10[3,] 3 6 9 12 15[4,] 4 8 12 16 20[5,] 5 10 15 20 25> tcrossprod(x,y); [,1] [,2] [,3] [,4] [,5][1,] 2 4 6 8 10[2,] 4 8 12 16 20[3,] 6 12 18 24 30[4,] 8 16 24 32 40[5,] 10 20 30 40 50
3_4 向量的外积(叉积)设x和y是n维向量,则x%o%y暗示x与y作外积.譬喻> x%o%y; [,1] [,2] [,3] [,4] [,5][1,] 2 4 6 8 10[2,] 4 8 12 16 20[3,] 6 12 18 24 30[4,] 8 16 24 32 40[5,] 10 20 30 40 50 outer()是更为强大的外积运算函数,outer(x,y)计较向量二与y的外积,它等价于x %o%y函数。outer()的一般挪用名目为 outer(x,y,fun=”*”) 个中x, y矩阵(或向量),fun是作外积运算函数,缺省值为乘法运算。函数outer()在绘制三维曲面时很是有用,它可生成一个x和y的网格。3_5 矩阵的乘法 设A和B为两个矩阵,凡是意义下的矩阵乘法是通过A%*%B来完成,crossprod(A,B)暗示的是t(A)%*%B,而tcrossprod(A,B)暗示的是A%*%t(B)。最后我们通过运算知道x%*%A%*%x为二次型。例子:> A=array(1:9,dim=(c(3,3)))> B=array(9:1,dim=(c(3,3)))> A%*%B; [,1] [,2] [,3][1,] 90 54 18[2,] 114 69 24[3,] 138 84 30> crossprod(A,B)==t(A)%*%B; [,1] [,2] [,3][1,] TRUE TRUE TRUE[2,] TRUE TRUE TRUE[3,] TRUE TRUE TRUE> tcrossprod(A,B)==A%*%t(B); [,1] [,2] [,3][1,] TRUE TRUE TRUE[2,] TRUE TRUE TRUE[3,] TRUE TRUE TRUE3_6 生成对角阵和矩阵取对角运算 函数diag()依赖于它的变量,当v是一个向量时,diag(v)暗示以v的元素为对角线元素的对角阵.当M是一个矩阵时,则diag(M)暗示的是取M对角线上的元素的向量.如> v=c(1,4,5);> diag(v); [,1] [,2] [,3][1,] 1 0 0[2,] 0 4 0[3,] 0 0 5> M=array(1:9,dim=c(3,3));> diag(M);[1] 1 5 9
3_7 解线性方程组和求矩阵的逆矩阵 若求解线性方程组Ax=b,其呼吁形式为solve(A,b),求矩阵A的逆,其呼吁形式为solve(A).设矩阵A=t(array(c(1:8,10),dim=c(3,3))),b<-c(1,1,1),则解方程组Ax=b的解x和求矩阵A的逆矩阵的呼吁如下:> A=t(array(c(1:8,10),dim=c(3,3)));> b=c(1,1,1);> x=solve(A,b);> x;[1] -1.000000e+00 1.000000e+00 3.806634e-16> solve(A); [,1] [,2] [,3][1,] -0.6666667 -1.333333 1[2,] -0.6666667 3.666667 -2[3,] 1.0000000 -2.000000 1
3_8 求矩阵的特征值与特征向量 函数eigen(Sm)是求对称矩阵Sm的特征值与特征向量,其呼吁形式为:ev=eigen(Sm),则ev存放着对称矩阵Sm特征值和特征向量,是由列表形式给出的,个中ev$values是Sm的特征值组成的向量,ev$vectors是Sm的特征向量组成的矩阵.如> Sm=crossprod(A,A);> ev=eigen(Sm);> ev;$values[1] 303.19533618 0.76590739 0.03875643$vectors [,1] [,2] [,3][1,] -0.4646675 0.833286355 0.2995295[2,] -0.5537546 -0.009499485 -0.8326258[3,] -0.6909703 -0.552759994 0.46585024_1 特征值解析(1).界说: 对N阶方阵A,x为标量,v长短零的N维列向量,且满意Ax=xv ,则称x为矩阵A的特征值,v 是相对应于x 的特征向量。特征值的全体成为A的谱。(2).在r中的实现:在r中操作函数eigen(A)来求矩阵的特征值和特征向量,详细的挪用名目为:以矩阵A为例说明此问题> A=array(c(1,1,1,4,2,1,9,3,1),dim=c(3,3));> D=eigen(A);> D;$values[1] 5.8284271 -2.0000000 0.1715729$vectors [,1] [,2] [,3][1,] -0.8597736 -9.486833e-01 0.5384820[2,] -0.4346498 6.474883e-17 -0.7872938[3,] -0.2680839 3.162278e-01 0.3003425(3).特征值解析的性质:我们知道当所求的的特征向量组成的矩阵可逆时会满意solve(vectors)%*%A%*%vectors=diag(values),下面举办验证。> solve(vectors)%*%A%*%vectors; [,1] [,2] [,3][1,] 5.828427e+00 8.339683e-16 -1.285213e-15[2,] 1.211325e-15 -2.000000e+00 2.704000e-16[3,] -3.471971e-16 -1.607126e-16 1.715729e-01功效的精度照旧较量高的。4_2 矩阵的奇异值解析 函数svd(A)是对矩阵A作奇异值解析,即A =U%*%D%*%t(V),个中U, V是正交阵,D为对角阵,也就是矩阵A的奇异值.svd(A)的返回值也是列表,svd(A)$d暗示矩阵A的奇异值,即矩阵D的对角线上的元素.svd(A)$u对应的是正交阵U, svd(A) $v对应的是正交阵V.譬喻,> A<-t(array(c(1:8,10),dim=c(3,3)))> SVD=svd(A);> SVD;$d[1] 17.4125052 0.8751614 0.1968665$u [,1] [,2] [,3][1,] -0.2093373 0.96438514 0.1616762[2,] -0.5038485 0.03532145 -0.8630696[3,] -0.8380421 -0.26213299 0.4785099$v [,1] [,2] [,3][1,] -0.4646675 -0.833286355 0.2995295[2,] -0.5537546 0.009499485 -0.8326258[3,] -0.6909703 0.552759994 0.4658502> attach(SVD);The following object(s) are masked from ‘SVD (position 3)’: d, u, v> u%*%diag(d)%*%t(v); [,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6[3,] 7 8 10> A; [,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6[3,] 7 8 104_3 qr解析 设A为m*n矩阵,假如存在m*m酉矩阵Q(即Q(H)Q=QQ(H)=I)和m*n路线形矩阵R,使得A=QR,那么此解析称为QR解析。QR解析在办理最小二乘问题、特征值计较等方面有着十分重要的浸染。#成立矩阵> A=(array(c(1:12),dim=c(4,3)));> A; [,1] [,2] [,3][1,] 1 5 9[2,] 2 6 10[3,] 3 7 11[4,] 4 8 12#举办矩阵解析> QR=qr(A);QR$qr [,1] [,2] [,3][1,] -5.4772256 -12.7801930 -2.008316e+01[2,] 0.3651484 -3.2659863 -6.531973e+00[3,] 0.5477226 -0.3781696 7.880925e-16[4,] 0.7302967 -0.9124744 9.277920e-01$rank[1] 2$qraux[1] 1.182574 1.156135 1.373098$pivot[1] 1 2 3attr(,”class”)[1] “qr”#提取Q,R并验证解析的正确性。> Q=qr.Q(QR);> R=qr.R(QR);> Q%*%R; [,1] [,2] [,3][1,] 1 5 9[2,] 2 6 10[3,] 3 7 11[4,] 4 8 124_4 Schur解析引言: 从特征值的解析中可以看出,特征值的解析是有条件的,假如特征向量不是线性无关的,那么对付一个矩阵来说便不能回收特征值解析的要领对矩阵举办解析。譬喻对付矩阵A=t(array(c(6,12,19,-9,-20,-33,4,9,15),dim=c(3,3))举办特征值解析有:> A=t(array(c(6,12,19,-9,-20,-33,4,9,15),dim=c(3,3)));> A; [,1] [,2] [,3][1,] 6 12 19[2,] -9 -20 -33[3,] 4 9 15> det(A);[1] -1> W=eigen(A);> W;$values[1] 1+0i 1-0i -1+0i$vectors [,1] [,2] [,3][1,] -0.4082483-0i -0.4082483+0i -0.4740998+0i[2,] 0.8164966+0i 0.8164966+0i 0.8127426+0i[3,] -0.4082483+0i -0.4082483-0i -0.3386427+0i> attach(W);The following object(s) are masked from ‘W (position 3)’: values, vectors> det(vectors);错误于determinant.matrix(x, logarithm = TRUE, …) : 今朝还不能算复数矩阵的队列式> det(Re(vectors));[1] -7.599489e-19> solve(vectors) [,1] [,2] [,3][1,] 0.000000+78209959i 0.00000+78209959i -9.26965+78209959i[2,] 0.000000-78209959i 0.00000-78209959i -9.10153-78209959i[3,] 3.691206+ 0i 11.07362+ 0i 18.45603+ 0i 很明明vectors不是一个可逆矩阵此时举办特征值判别这种要领便不行行,对付这种环境我们可以作Schur解析。描写: 对付任意的目的A,其Schur解析的形式为:A=USU(H),个中U是尺度的正交矩阵(即满意UU(H)=I),S为上三角矩阵,而且对角线上的元素为A的特征值。由于此函数在包Matrix中,所以利用之前必需调入。而且留意matrix和Matrix的区别。
例子:> A=Matrix(c(6,12,19,-9,-20,-33,4,9,15),ncol=3,byrow=TRUE);> A;3 x 3 Matrix of class “dgeMatrix” [,1] [,2] [,3][1,] 6 12 19[2,] -9 -20 -33[3,] 4 9 15> library(Matrix);> Sch=Schur(A, vectors=TRUE);> Q=Sch@Q;> Q=as.matrix(Q)> attach(Sch);错误于attach(Sch) : ‘attach’只合用于串列,数据框和情况> Q%*%T%*%t(Q)3 x 3 Matrix of class “dgeMatrix” [,1] [,2] [,3][1,] 6 12 19[2,] -9 -20 -33[3,] 4 9 154_5 Cholesky解析(柯利解析)描写:
正定矩阵:设A是n阶实系数矩阵, 假如对任何非零向量 X=(x1,…xn) 都有t(X)AX>0,就称A正定(Positive Definite)。正定矩阵在相合调动下可化为尺度型, 即单元矩阵。 Cholesky解析: 对任意的正定矩阵A,存在上三角矩阵R,使A=t(R)%*%R,则称为A的Cholesky解析(柯利解析)。
例子:> #输入矩阵> m=matrix(c(5,1,1,3),ncol=2 );> m; [,1] [,2][1,] 5 1[2,] 1 3> #矩阵解析> CH=chol(m);> #验证功效> t(CH)%*%CH; [,1] [,2][1,] 5 1[2,] 1 3
R语言中矩阵运算
最后更新 2017-12-04 08:00 星期一 所属:
其他教程 浏览:776