总结R语言中矩阵运算的函数Word文件下载.docx

上传人:b****6 文档编号:21699752 上传时间:2023-01-31 格式:DOCX 页数:26 大小:19.68KB
下载 相关 举报
总结R语言中矩阵运算的函数Word文件下载.docx_第1页
第1页 / 共26页
总结R语言中矩阵运算的函数Word文件下载.docx_第2页
第2页 / 共26页
总结R语言中矩阵运算的函数Word文件下载.docx_第3页
第3页 / 共26页
总结R语言中矩阵运算的函数Word文件下载.docx_第4页
第4页 / 共26页
总结R语言中矩阵运算的函数Word文件下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

总结R语言中矩阵运算的函数Word文件下载.docx

《总结R语言中矩阵运算的函数Word文件下载.docx》由会员分享,可在线阅读,更多相关《总结R语言中矩阵运算的函数Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。

总结R语言中矩阵运算的函数Word文件下载.docx

c1"

"

c2"

c3"

c4"

colname

12,nrow=3,ncol=4,dimnames=list(rowname,colname))

c1c2c3c4

r114710

r225811

3矩阵转置

A为m×

n矩阵,求A'

在R中可用函数t(),例如:

A=matrix(1:

A

t(A)

[4,]101112

若将函数t()作用于一个向量x,则R默认x为列向量,返回结果为一个行向量,例如:

[1]12345678910

t(x)

[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10]

[1,]12345678910

class(x)

integer"

class(t(x))

matrix"

若想得到一个列向量,可用t(t(x)),例如:

t(t(x))

[,1]

[1,]1

[2,]2

[3,]3

[4,]4

[5,]5

[6,]6

[7,]7

[8,]8

[9,]9

[10,]10

y=t(t(x))

t(t(y))

4矩阵相加减

在R中对同行同列矩阵相加减,可用符号:

“+”、“-”,例如:

A=B=matrix(1:

A+B

[1,]281420

[2,]4101622

[3,]6121824

A-B

[1,]0000

[2,]0000

[3,]0000

5数与矩阵相乘

n矩阵,c>

0,在R中求cA可用符号:

“*”,例如:

c=2

c*A

6矩阵相乘

n矩阵,B为n×

k矩阵,在R中求AB可用符号:

“%*%”,例如:

B=matrix(1:

A%*%B

[1,]70158246

[2,]80184288

[3,]90210330

若A为n×

m矩阵,要得到A'

B,可用函数crossprod(),该函数计算结果与t(A)%*%B相同,但是效率更高。

t(A)%*%B

[1,]3070110

[2,]70174278

[3,]110278446

crossprod(A,B)

矩阵Hadamard积:

若A={aij}m×

n,B={bij}m×

n,则矩阵的Hadamard积定义为:

A⊙B={aijbij}m×

n,R中Hadamard积可以直接运用运算符“*”例如:

16,4,4)

[1,]15913

[2,]261014

[3,]371115

[4,]481216

B=A

A*B

[1,]12581169

[2,]436100196

[3,]949121225

[4,]1664144256

R中这两个运算符的区别区加以注意。

7矩阵对角元素相关运算

例如要取一个方阵的对角元素,

16,nrow=4,ncol=4)

diag(A)

[1]161116

对一个向量应用diag()函数将产生以这个向量为对角元素的对角矩阵,例如:

diag(diag(A))

[1,]1000

[2,]0600

[3,]00110

[4,]00016

对一个正整数z应用diag()函数将产生以z维单位矩阵,例如:

diag(3)

[1,]100

[2,]010

[3,]001

8矩阵求逆

矩阵求逆可用函数solve(),应用solve(a,b)运算结果是解线性方程组ax=b,若b缺省,则系统默认为单位矩阵,因此可用其进行矩阵求逆,例如:

a=matrix(rnorm(16),4,4)

a

[1,]

[2,]

[3,]

[4,]

solve(a)

[1,]0.

[2,]-0.

[3,]-1.

solve(a)%*%a

[1,]+00

[2,]+00

[3,]+00

[4,]+00

9矩阵的特征值与特征向量

矩阵A的谱分解为A=UΛU'

其中Λ是由A的特征值组成的对角矩阵,U的列为A的特征值对应的特征向量,在R中可以用函数eigen()函数得到U和Λ,

args(eigen)

function(x,symmetric,=FALSE,EISPACK=FALSE)

其中:

x为矩阵,symmetric项指定矩阵x是否为对称矩阵,若不指定,系统将自动检测x是否为对称矩阵。

A=diag(4)+1

[1,]2111

[2,]1211

[3,]1121

[4,]1112

=eigen(A,symmetric=T)

$values

[1]5111

$vectors

$vectors%*%diag$values)%*%t$vectors)

t$vectors)%*%$vectors

10矩阵的Choleskey分解

对于正定矩阵A,可对其进行Choleskey分解,即:

A=P'

P,其中P为上三角矩阵,在R中可以用函数chol()进行Choleskey分解,例如:

chol(A)

t(chol(A))%*%chol(A)

crossprod(chol(A),chol(A))

若矩阵为对称正定矩阵,可以利用Choleskey分解求行列式的值,如:

prod(diag(chol(A))^2)

[1]5

det(A)

若矩阵为对称正定矩阵,可以利用Choleskey分解求矩阵的逆,这时用函数chol2inv(),这种用法更有效。

如:

chol2inv(chol(A))

solve(A)

11矩阵奇异值分解

n矩阵,rank(A)=r,可以分解为:

A=UDV'

其中U'

U=V'

V=I。

在R中可以用函数scd()进行奇异值分解,例如:

18,3,6)

[,1][,2][,3][,4][,5][,6]

[1,]147101316

[2,]258111417

[3,]369121518

svd(A)

$d

[1]+01+00

$u

[3,]-0.

$v

[1,]-0.

[2,]-0.0.

[3,]-0.-0.

[4,]-0.

[5,]-0.0.

[6,]-0.-0.

=svd(A)

$u%*%diag$d)%*%t$v)

t$u)%*%$u

[3,]+00

t$v)%*%$v

12矩阵QR分解

n矩阵可以进行QR分解,A=QR,其中:

Q'

Q=I,在R中可以用函数qr()进行QR分解,例如:

qr(A)

$qr

[1,]+01+01

[2,]+00+00

$rank

[1]2

$qraux

[1]+00+00+00

$pivot

[1]1234

attr(,"

class"

qr"

rank项返回矩阵的秩,qr项包含了矩阵Q和R的信息,要得到矩阵Q和R,可以用函数()和()作用qr()的返回结果,例如:

(qr(A))

[4,]+00

[2,]0.

[3,]-0.

(qr(A))%*%(qr(A))

t(qr(A)))%*%(qr(A))

13矩阵广义逆(Moore-Penrose)

m矩阵A+称为m×

n矩阵A的Moore-Penrose逆,如果它满足下列条件:

①AA+A=A;

②A+AA+=A+;

③(AA+)H=AA+;

④(A+A)H=A+A

在R的MASS包中的函数ginv()可计算矩阵A的Moore-Penrose逆,例如:

library(“MASS”)

ginv(A)

验证性质1:

A%*%ginv(A)%*%A

验证性质2:

ginv(A)%*%A%*%ginv(A)

验证性质3:

t(A%*%ginv(A))

A%*%ginv(A)

验证性质4:

t(ginv(A)%*%A)

ginv(A)%*%A

14矩阵Kronecker积

m矩阵A与h×

k矩阵B的kronecker积为一个nh×

mk维矩阵,

在R中kronecker积可以用函数kronecker()来计算,例如:

4,2,2)

B=matrix(rep(1,4),2,2)

[,1][,2]

[1,]13

[2,]24

B

[1,]11

[2,]11

kronecker(A,B)

[1,]1133

[2,]1133

[3,]2244

[4,]2244

15矩阵的维数

在R中很容易得到一个矩阵的维数,函数dim()将返回一个矩阵的维数,nrow()返回行数,ncol()返回列数,例如:

12,3,4)

nrow(A)

[1]3

ncol(A)

[1]4

16矩阵的行和、列和、行平均与列平均

在R中很容易求得一个矩阵的各行的和、平均数与列的和、平均数,例如:

rowSums(A)

[1]222630

rowMeans(A)

[1]

colSums(A)

[1]6152433

colMeans(A)

[1]25811

上述关于矩阵行和列的操作,还可以使用apply()函数实现。

args(apply)

function(X,MARGIN,FUN,...)

x为矩阵,MARGIN用来指定是对行运算还是对列运算,MARGIN=1表示对行运算,MARGIN=2表示对列运算,FUN用来指定运算函数,...用来给定FUN中需要的其它的参数,例如:

apply(A,1,sum)

apply(A,1,mean)

apply(A,2,sum)

apply(A,2,mean)

apply()函数功能强大,我们可以对矩阵的行或者列进行其它运算,例如:

计算每一列的方差

A=matrix(rnorm(100),20,5)

apply(A,2,var)

apply(A,2,function(x,a)x*a,a=2)

注意:

apply(A,2,function(x,a)x*a,a=2)与A*2效果相同,此处旨在说明如何应用alpply函数。

17矩阵X'

X的逆

在统计计算中,我们常常需要计算这样矩阵的逆,如OLS估计中求系数矩阵。

R中的包“strucchange”提供了有效的计算方法。

args(solveCrossprod)

function(X,method=c("

"

chol"

solve"

))

method指定求逆方法,选用“qr”效率最高,选用“chol”精度最高,选用“slove”与slove(crossprod(x,x))效果相同,例如:

A=matrix(rnorm(16),4,4)

solveCrossprod(A,method="

solve(crossprod(A,A))

18取矩阵的上、下三角部分

在R中,我们可以很方便的取到一个矩阵的上、下三角部分的元素,函数()和函数()提供了有效的方法。

args

function(x,diag=FALSE)

函数将返回一个逻辑值矩阵,其中下三角部分为真,上三角部分为假,选项diag为真时包含对角元素,为假时不包含对角元素。

()的效果与之孑然相反。

(A)

[1,]FALSEFALSEFALSEFALSE

[2,]TRUEFALSEFALSEFALSE

[3,]TRUETRUEFALSEFALSE

[4,]TRUETRUETRUEFALSE

(A,diag=T)

[1,]TRUEFALSEFALSEFALSE

[2,]TRUETRUEFALSEFALSE

[3,]TRUETRUETRUEFALSE

[4,]TRUETRUETRUETRUE

[1,]FALSETRUETRUETRUE

[2,]FALSEFALSETRUETRUE

[3,]FALSEFALSEFALSETRUE

[4,]FALSEFALSEFALSEFALSE

[1,]TRUETRUETRUETRUE

[2,]FALSETRUETRUETRUE

[3,]FALSEFALSETRUETRUE

[4,]FALSEFALSEFALSETRUE

A[(A)]=0

[2,]061014

[3,]001115

[2,]2600

[3,]37110

19backsolve&

fowardsolve函数

这两个函数用于解特殊线性方程组,其特殊之处在于系数矩阵为上或下三角。

args(backsolve)

function(r,x,k=ncol

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1