R语言中矩阵运算.doc

上传人:11****ws 文档编号:3737498 上传时间:2019-07-10 格式:DOC 页数:9 大小:33.21KB
下载 相关 举报
R语言中矩阵运算.doc_第1页
第1页 / 共9页
R语言中矩阵运算.doc_第2页
第2页 / 共9页
R语言中矩阵运算.doc_第3页
第3页 / 共9页
R语言中矩阵运算.doc_第4页
第4页 / 共9页
R语言中矩阵运算.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、R 语言中矩阵运算目录:矩阵的生成,矩阵的四则运算,矩阵的矩阵运算,矩阵的分解。1.矩阵的生成1_1 将向量定义成数组向量只有定义了维数向量(dim 属性)后才能被看作是数组.比如: z=1:12; dim(z)=c(3,4);AA z;,1 ,2 ,3 ,41, 1 4 7 102, 2 5 8 113, 3 6 9 12注意:生成矩阵是按列排列的。1_2 用 array ( )函数构造多维数组用法为:array(data=NA,dim=length(data),dimnames=NULL)参数描述:data:是一个向量数据。dim:是数组各维的长度,缺省时为原向量的长度。dimname:是

2、数组维的名字,缺省时为空。例子: x=array(1:20,dim=c(4,5) x,1 ,2 ,3 ,4 ,51, 1 5 9 13 172, 2 6 10 14 183, 3 7 11 15 194, 4 8 12 16 201_3 用 matrix()函数构造矩阵函数 matrix)是构造矩阵(二维数组)的函数,其构造形式为matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)其中 data 是一个向量数据,nrow 是矩阵的行数,ncol 是矩阵的列数.当 byrow=TRUE时,生成矩阵的数据按行放置,缺省时相当于 byrow=

3、t,数据按列放置.dimname 。是数组维的名字,缺省时为空.A如构造一个 3x5 阶的矩阵 A=matrix(1:15,nrow=3,byrow=TRUE) A,1 ,2 ,3 ,4 ,51, 1 2 3 4 52, 6 7 8 9 103, 11 12 13 14 152.矩阵的四则运算可以对数组之间进行四则运算(+、一、*、/),这时进行的是数组对应元素的四则运算。一般情况下参加运算的矩阵或者数组的维数是相同的,但也可以计算不同维的,这是要将对应的元素补足。3.矩阵的矩阵运算3_1 运算对于矩阵 A,函数 t(A)表示矩阵 A 的转置,如: A=matrix(1:6,nrow=2);

4、A;,1 ,2 ,31, 1 3 52, 2 4 6 t(A);,1 ,21, 1 22, 3 43, 5 63_2 求方阵的行列式函数 det()是求矩阵行列式的值,如 det(matrix(1:4,ncol=2);1 -23_3 向量的内积对于 n 维向量 x,可以看成 nxl 阶矩阵或 lxn 阶矩阵。若 x 与 y 是相同维数的向量,则 x%*%Y 表示 x 与 y 作内积.例如,x=1:5; Y=2*1:5Zx%*%y,11,110函数 crossprod()是内积运算函数(表示交叉乘积) ,crossprod(x,y)计算向量 x 与 y 的内积,即 t(x) %*% y。cros

5、sprod(x)表示 x 与 x 的内积.类似地,tcrossprod(x,y)表示x%*%t(Y) ,即 x 与 y 的外积,也称为叉积。tcrossprod(x)表示 x 与 x 作外积.如: x=1:5; y=2*1:5; crossprod(x);,11, 55 crossprod(x,y);,11, 110 tcrossprod(x);,1 ,2 ,3 ,4 ,51, 1 2 3 4 52, 2 4 6 8 103, 3 6 9 12 154, 4 8 12 16 205, 5 10 15 20 25 tcrossprod(x,y);,1 ,2 ,3 ,4 ,51, 2 4 6 8

6、102, 4 8 12 16 203, 6 12 18 24 304, 8 16 24 32 405, 10 20 30 40 503_4 向量的外积(叉积)设 x 和 y 是 n 维向量,则 x%o%y 表示 x 与 y 作外积.例如 x%o%y;,1 ,2 ,3 ,4 ,51, 2 4 6 8 102, 4 8 12 16 203, 6 12 18 24 304, 8 16 24 32 405, 10 20 30 40 50outer()是更为强大的外积运算函数,outer(x,y)计算向量二与 y 的外积,它等价于 x %o%y函数。outer() 的一般调用格式为outer(x,y ,

7、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 ,31, 90 54 182, 114

8、 69 243, 138 84 30 crossprod(A,B)=t(A)%*%B;,1 ,2 ,31, TRUE TRUE TRUE2, TRUE TRUE TRUE3, TRUE TRUE TRUE tcrossprod(A,B)=A%*%t(B);,1 ,2 ,31, TRUE TRUE TRUE2, TRUE TRUE TRUE3, TRUE TRUE TRUE3_6 生成对角阵和矩阵取对角运算函数 diag()依赖于它的变量,当 v 是一个向量时,diag(v)表示以 v 的元素为对角线元素的对角阵.当 M 是一个矩阵时,则 diag(M)表示的是取 M 对角线上的元素的向量 .如

9、 v=c(1,4,5); diag(v);,1 ,2 ,31, 1 0 02, 0 4 03, 0 0 5 M=array(1:9,dim=c(3,3); diag(M);1 1 5 93_7 解线性方程组和求矩阵的逆矩阵若求解线性方程组 Ax=b,其命令形式为 solve(A,b),求矩阵 A 的逆,其命令形式为solve(A).设矩阵 A=t(array(c(1:8,10),dim=c(3,3),b 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.80663

10、4e-16 solve(A);,1 ,2 ,31, -0.6666667 -1.333333 12, -0.6666667 3.666667 -23, 1.0000000 -2.000000 13_8 求矩阵的特征值与特征向量函数 eigen(Sm)是求对称矩阵 Sm 的特征值与特征向量,其命令形式为:ev=eigen(Sm), 则ev 存放着对称矩阵 Sm 特征值和特征向量,是由列表形式给出的,其中 ev$values 是 Sm 的特征值构成的向量,ev$vectors 是 Sm 的特征向量构成的矩阵.如 Sm=crossprod(A,A); ev=eigen(Sm); ev;$values

11、1 303.19533618 0.76590739 0.03875643$vectors,1 ,2 ,31, -0.4646675 0.833286355 0.29952952, -0.5537546 -0.009499485 -0.83262583, -0.6909703 -0.552759994 0.46585024.矩阵的分解4_1 特征值分解(1).定义:对 N 阶方阵 A,x 为标量,v 是非零的 N 维列向量,且满足 Ax=xv ,则称 x 为矩阵 A的特征值,v 是相对应于 x 的特征向量。特征值的全体成为 A 的谱。(2).在 r 中的实现:在 r 中利用函数 eigen(A)

12、来求矩阵的特征值和特征向量,具体的调用格式为:以矩阵 A 为例说明此问题 A=array(c(1,1,1,4,2,1,9,3,1),dim=c(3,3); D=eigen(A); D;$values1 5.8284271 -2.0000000 0.1715729$vectors,1 ,2 ,31, -0.8597736 -9.486833e-01 0.53848202, -0.4346498 6.474883e-17 -0.78729383, -0.2680839 3.162278e-01 0.3003425(3).特征值分解的性质:我们知道当所求的的特征向量构成的矩阵可逆时会满足solve(

13、vectors)%*%A%*%vectors=diag(values),下面进行验证。 solve(vectors)%*%A%*%vectors;,1 ,2 ,31, 5.828427e+00 8.339683e-16 -1.285213e-152, 1.211325e-15 -2.000000e+00 2.704000e-163, -3.471971e-16 -1.607126e-16 1.715729e-01结果的精度还是比较高的。4_2 矩阵的奇异值分解函数 svd(A)是对矩阵 A 作奇异值分解,即 A =U%*%D%*%t(V),其中 U, V 是正交阵,D为对角阵,也就是矩阵 A

14、的奇异值.svd(A)的返回值也是列表,svd(A)$d 表示矩阵 A 的奇异值,即矩阵 D 的对角线上的元素 .svd(A)$u 对应的是正交阵 U, svd(A) $v 对应的是正交阵 V.例如, A SVD=svd(A); SVD;$d1 17.4125052 0.8751614 0.1968665$u,1 ,2 ,31, -0.2093373 0.96438514 0.16167622, -0.5038485 0.03532145 -0.86306963, -0.8380421 -0.26213299 0.4785099$v,1 ,2 ,31, -0.4646675 -0.833286

15、355 0.29952952, -0.5537546 0.009499485 -0.83262583, -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 ,31, 1 2 32, 4 5 63, 7 8 10 A;,1 ,2 ,31, 1 2 32, 4 5 63, 7 8 104_3 qr 分解设 A 为 m*n 矩阵,如果存在 m*m 酉矩阵 Q(即 Q(H)Q=QQ(H)

16、=I)和 m*n 阶梯形矩阵R,使得 A=QR,那么此分解称为 QR 分解。QR 分解在解决最小二乘问题、特征值计算等方面有着十分重要的作用。#建立矩阵 A=(array(c(1:12),dim=c(4,3); A;,1 ,2 ,31, 1 5 92, 2 6 103, 3 7 114, 4 8 12#进行矩阵分解 QR=qr(A);QR$qr,1 ,2 ,31, -5.4772256 -12.7801930 -2.008316e+012, 0.3651484 -3.2659863 -6.531973e+003, 0.5477226 -0.3781696 7.880925e-164, 0.73

17、02967 -0.9124744 9.277920e-01$rank1 2$qraux1 1.182574 1.156135 1.373098$pivot1 1 2 3attr(,“class“)1 “qr“#提取 Q,R 并验证分解的正确性。 Q=qr.Q(QR); R=qr.R(QR); Q%*%R;,1 ,2 ,31, 1 5 92, 2 6 103, 3 7 114, 4 8 124_4 Schur 分解引言:从特征值的分解中可以看出,特征值的分解是有条件的,如果特征向量不是线性无关的,那么对于一个矩阵来说便不能采用特征值分解的方法对矩阵进行分解。例如对于矩阵A=t(array(c(6

18、,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 ,31, 6 12 192, -9 -20 -333, 4 9 15 det(A);1 -1 W=eigen(A); W;$values1 1+0i 1-0i -1+0i$vectors,1 ,2 ,31, -0.4082483-0i -0.4082483+0i -0.4740998+0i2, 0.8164966+0i 0.8164966+0i 0.8127426+0i3, -0.408

19、2483+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 ,31, 0.000000+78209959i 0.00000+78209959i -9.26965+7820

20、9959i2, 0.000000-78209959i 0.00000-78209959i -9.10153-78209959i3, 3.691206+ 0i 11.07362+ 0i 18.45603+ 0i很明显 vectors 不是一个可逆矩阵此时进行特征值分辨这种方法便不可行,对于这种情况我们可以作 Schur 分解。描述:对于任意的方针 A,其 Schur 分解的形式为:A=USU(H) ,其中 U 是标准的正交矩阵(即满足 UU(H)=I) ,S 为上三角矩阵,并且对角线上的元素为 A 的特征值。由于此函数在包 Matrix 中,所以使用之前必须调入。并且注意 matrix 和 Ma

21、trix 的区别。例子: 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 ,31, 6 12 192, -9 -20 -333, 4 9 15 library(Matrix); Sch=Schur(A, vectors=TRUE); Q=SchQ; Q=as.matrix(Q) attach(Sch);错误于 attach(Sch) : attach只适用于串列,数据框和环境 Q%*%T%*%t(Q)3 x 3 Matrix of class “

22、dgeMatrix“,1 ,2 ,31, 6 12 192, -9 -20 -333, 4 9 154_5 Cholesky 分解(柯利分解)描述:正定矩阵:设 A 是 n 阶实系数矩阵, 如果对任何非零向量 X=(x1,.xn) 都有t(X)AX0,就称 A 正定(Positive Definite)。正定矩阵在相合变换下可化为标准型, 即单位矩阵。Cholesky 分解:对任意的正定矩阵 A,存在上三角矩阵 R,使 A=t(R)%*%R,则称为 A 的 Cholesky 分解(柯利分解) 。例子: #输入矩阵 m=matrix(c(5,1,1,3),ncol=2 ); m;,1 ,21, 5 12, 1 3 #矩阵分解 CH=chol(m); #验证结果 t(CH)%*%CH;,1 ,21, 5 12, 1 3

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。