R语言中矩阵运算_第1页
R语言中矩阵运算_第2页
R语言中矩阵运算_第3页
R语言中矩阵运算_第4页
R语言中矩阵运算_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、array(1:20,dim=c(4,5),1,2,3,4,51,159132,2610143,3711154,4812161_3 用 matrix()函数构造矩阵函数 matrix)是构造矩阵(二维数组)的函数,其构造形式为matrix(data=NA,nrow=1,ncol=1,byrow=FALSEdimnames=NULL)其中 data 是一个向量数据,nrow 是矩阵的行数,ncol 是矩阵的列数.当 byrow=TRUE 时,生成矩阵的数据按行放置,缺省时相当于 byrow=t,数据按列放置.dimname。是数组维的名字,缺省时为空.A如构造一个 3x5 阶的矩阵A=matri

3、x(1:15,nrow=3,byrow=TRUE) A,1,2,3,4,51,123452,6789103,1112131415171819202.矩阵的四则运算可以对数组之间进行四则运算(+、一、*、/),这时进行的是数组对应元素的四则运算。一般情况下参加运算的矩阵或者数组的维数是相同的,但也可以计算不同维的,这是要将对应的元素补足。3.矩阵的矩阵运算3_1运算对于矢 I 阵 A,函数 t(A)表示矩阵 A 的转置,如: A=matrix(1:6,nrow=2); A;,1,2,31,1352,246 t(A);,1,21,122,343,563_2求方阵的行列式函数 det()是求矩阵行列

4、式的值,如 det(matrix(1:4,ncol=2);1-23_3向量的内积对于 n 维向量 x,可以看成 nxl 阶矩阵或 lxn 阶矩阵。若 x 与 y 是相同维数的向量,则 x%*%Y 表示 x 与 y 作内积.例如,x=1:5;丫=2*1:5Zx%*%y,11,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

5、与 x 作外积.如: x=1:5;y=2*1:5; crossprod(x);,11,55 crossprod(x,y);,11,110 tcrossprod(x);,1,2,3,4,51,123452,2468103,36912154,481216205,510152025tcrossprod(x,y);,1,2,3,4,51,2468102,481216203,6121824304,8162432405,10203040503_4向量的外积(叉积)设 x 和 y 是 n 维向量,则 x%o%y 表示 x 与 y 作外积.例如x%o%y;,1,2,3,4,51,2468102,4812162

6、03,6121824304,8162432405,1020304050outer()是更为强大的外积运算函数,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

7、)。最后我们通过运算知道 x%*%A%*%x 为二次型。例子: A=array(1:9,dim=(c(3,3) B=array(9:1,dim=(c(3,3)A%*%B;,1,2,31,9054182,11469243,1388430 crossprod(A,B)=t(A)%*%B;,1,2,31,TRUETRUETRUE2,TRUETRUETRUE3,TRUETRUETRUE tcrossprod(A,B)=A%*%t(B);,1,2,31,TRUETRUETRUE2,TRUETRUETRUE3,TRUETRUETRUE3_6生成对角阵和矩阵取对角运算函数 diag()依赖于它的变量,当 v

8、 是一个向量时,diag(v)表示以 v 的元素为对角线元素的对角阵.当 M 是一个矩阵时,则 diag(M)表示的是取 M 对角线上的元素的向量.如 v=c(1,4,5); diag(v);,1,2,31,1002,0403,005 M=array(1:9,dim=c(3,3); diag(M);11593_7解线性方程组和求矩阵的逆矩阵若求解线性方程组 Ax=b,其命令形式为 soke(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

9、,1,1); x=solve(A,b); x;1-1.000000e+001.000000e+003.806634e-16 solve(A);,2,31,-0.6666667-1.33333312,-0.66666673.666667-23,1.0000000-2.00000013_8求矩阵的特征值与特征向量函数 eigen(Sm)是求对称矩阵 Sm 的特征值与特征向量,其命令形式为:ev=eigen(Sm),则ev 存放着对称矩阵 Sm 特征值和特征向量, 是由列表形式给出的, 其中 ev$values 是 Sm 的特征值构成的向量,ev$vectors 是 Sm 的特征向量构成的矩阵.如

10、Sm=crossprod(A,A); ev=eigen(Sm); ev;$values,11303.195336180.765907390.03875643$vectors,1,2,31,-0.46466750.8332863550.29952952,-0.5537546-0.009499485-0.83262583,-0.6909703-0.5527599940.46585024.矩阵的分解4_1特征值分解.定义:对 N 阶方阵 A,x 为标量,v 是非零的 N 维列向量,且满足 Ax=xv,则称 x 为矩阵 A 的特征值,v 是相对应于 x 的特征向量。特征值的全体成为 A 的谱。(2).

11、在 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;$values15.8284271-2.00000000.1715729$vectors,1,2,31,-0.8597736-9.486833e-010.53848202,-0.43464986.474883e-17-0.78729383,-0.26808393.162278e-010.3003425(3).特征值分解的性质:我们知道当所求的的特征向量构成的矩

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

13、奇异值.svd(A)的返回值也是列表, $丫(勺$表示矩阵 A 的奇异值,即矩阵 D 的对角线上的元素.svd(A)$u 对应的是正交阵 U,svd(A)$v 对应的是正交阵 V 例如,A SVD=svd(A); SVD;$d1 17.41250520.87516140.1968665$u,1,2,31,-0.20933730.964385140.16167622,-0.50384850.03532145-0.86306963,-0.8380421-0.262132990.4785099$v,1,2,31,-0.4646675-0.8332863550.29952952,-0.55375460

14、.009499485-0.83262583,-0.69097030.5527599940.4658502attach(SVD);Thefollowingobject(s)aremaskedfromSVD(position3):d,u,v u%*%diag(d)%*%t(v);,1,2,31,1232,4563,7810 A;,1,2,31,1232,4563,78104_3qr分解设 A 为 m*n 矩阵, 如果存在 m*m 酉矩阵 Q(即 Q(H)Q=QQ(H)=I)和 m*n 阶梯形矩阵 R,使得 A=QR那么此分解称为 QR 分解。QR 分解在解决最小二乘问题、特征值计算等方面有着十分重

15、要的作用。 建立矩阵 A=(array(c(1:12),dim=c(4,3); A;,1,2,31,1592,26103,37114,4812 进行矩阵分解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.37816967.880925e-164,0.7302967-0.91247449.277920e-01$rank1 2$qraux11.1825741.1561351.373098$pivot1123attr(,class)1qr 提

16、取 Q,R 并验证分解的正确性。 Q=qr.Q(QR); R=qr.R(QR); Q%*%R;,1,2,31,1592,26103,37114,48124_4Schur分解引言:从特征值的分解中可以看出,特征值的分解是有条件的,如果特征向量不是线性无关的,那么对于一个矩阵来说便不能采用特征值分解的方法对矩阵进行分解。例如对于矩阵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,31,612192,-9-20-33

17、3,4915 det(A);1-1 W=eigen(A); W;$values11+0i1-0i-1+0i$vectors,1,2,31,-0.4082483-0i-0.4082483+0i-0.4740998+0i2,0.8164966+0i0.8164966+0i0.8127426+0i3,-0.4082483+0i-0.4082483-0i-0.3386427+0i attach(W);Thefollowingobject(s)aremaskedfromW(position3):values,vectorsdet(vectors);错误于 determinant.matrix(x,log

18、arithm=TRUE,):目前还不能算复数矩阵的行列式 det(Re(vectors);1-7.599489e-19solve(vectors),1,2,31,0.000000+78209959i0.00000+78209959i-9.26965+78209959i2,0.000000-78209959i0.00000-78209959i-9.10153-78209959i3,3.691206+0i11.07362+0i18.45603+0i很明显 vectors 不是一个可逆矩阵此时进行特征值分辨这种方法便不可行, 对于这种情况我们可以作 Schur 分解。描述:对于任意的方针 A,其 Schur 分解的形式为:A=USU(H),其中 U 是标准的正交矩阵(即满足UU(H)=I),S 为上三角矩阵,并且对角线上的元素为 A 的特征值。由于此函数在包 Matrix中,所以使用之前必须调入。并且注意

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论