????????在多元分析中,數據通常以矩陣的形式出現,下面結合R語言介紹基本的矩陣運算。主要包括:創建矩陣向量,矩陣加減、乘積,矩陣的逆,行列式的值,特征值與特征向量,QR分解,奇異值分解,取矩陣的上下三角元素,向量化算子等。
1.創建一個向量(隨機變量、一維數組)
用函數c()來創建一個向量
#創建向量
x1=c(171,175,159,155,152,158,154,164,168,166,159,164)
x2=c(57,64,41,38,35,44,41,51,57,49,47,46)length(x1)#返回向量長度
length(x2)mode(x1)#返回向量的數據類型
2.創建一個矩陣(二維數組)
1)合并命令
可以用rbind()、cbind()將兩個或兩個以上的向量或矩陣合并起來,rbind()表示按行合并,cbind()按列合并。
#創建矩陣
rbind(x1,x2)#按行合并
cbind(x1,x2)#按列合并
2)生成矩陣
matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
#data為必要的矩陣元素,nrow為行數,ncol為列數,這倆乘積應為矩陣元素個數
#byrow控制排列元素是否按行進行
#dimnames給定行和列的名稱
matrix(x1,nrow=3,ncol=4)#生成矩陣,matrix(x1,nrow=4,ncol=3)
3.矩陣轉置
A為m*n矩陣,A'為其轉置矩陣,求A’在R中可用函數t()或transpose()
#矩陣轉置
A=matrix(1:12,nrow=3,ncol=4)
t(A)#用函數t()或transpose()轉置
4.矩陣相加減?
#矩陣相加減
A=B=matrix(1:12,nrow=3,ncol=4)
A+B
5.矩陣相乘
A為m*n矩陣,B為n*k矩陣,在R 中求AB可用符號“%*%”?
#矩陣相乘
A=matrix(1:12,nrow=3,ncol=4)
B=matrix(1:12,nrow=4,ncol=3)
A%*%B
6.矩陣對角元素相關運算??
#矩陣對角元素相關運算
A=matrix(1:16,nrow=4,ncol = 4)
diag(A)#產生以這個向量為對角元素的對角矩陣
#對一個正整數k應用diag()函數將產生k維單位矩陣
diag(diag(A))
diag(3)
7.矩陣求逆
矩陣求逆可用函數solve(),應用solve(A,b)運算結果可解線性方程組Ax=b,
若b缺省,則系統默認為單位矩陣,因此可用其進行矩陣求逆
#矩陣求逆
A=matrix(rnorm(16),4,4);A
solve(A)
#矩陣求逆可用函數solve(),應用solve(A,b)運算結果可解線性方程組Ax=b,
#若b缺省,則系統默認為單位矩陣,因此可用其進行矩陣求逆
8.矩陣的特征值與特征向量
矩陣A的譜分解為A=U^U',其中^是由A的特征值組成的對角矩陣,
U的列為A的特征值對應的特征向量,可以用函數eigen()得到U和A
eigen(x,symmetric,only.values=FALSE,EISPACK = FALSE)
其中x為矩陣,symmetric項指定矩陣x是否為對稱矩陣,不指定則系統自動檢測
#矩陣特征值與特征向量
A=diag(4)+1
A
A.e=eigen(A,symmetric = T)
A.e
#矩陣A的譜分解為A=U^U',其中^是由A的特征值組成的對角矩陣,
#U的列為A的特征值對應的特征向量,可以用函數eigen()得到U和A
#eigen(x,symmetric,only.values=FALSE,EISPACK = FALSE)
#其中x為矩陣,symmetric項指定矩陣x是否為對稱矩陣,不指定則系統自動檢測
A.e$vectors%*%diag(A.e$values)%*%t(A.e$vectors)
9.矩陣的Choleskey分解
對于正定矩陣A,可對其進行Choleskey分解,A=P'P,P為上三角矩陣
在R中可以用chol()函數進行Choleskey分解
#矩陣的Choleskey分解
#對于正定矩陣A,可對其進行Choleskey分解,A=P'P,P為上三角矩陣
#在R中可以用chol()函數進行Choleskey分解
A.e=chol(A)
A.e
t(A.e)%*%A.e
10.矩陣奇異值分解
A為m*n矩陣,rank(A)=r,可以分解為A=UDV',其中U'U=V'V=I
在R中可以用函數svd()進行奇異值分解
#矩陣奇異值分解
#A為m*n矩陣,rank(A)=r,可以分解為A=UDV',其中U'U=V'V=I
#在R中可以用函數svd()進行奇異值分解
A=matrix(1:18,3,6)
A
A.s=svd(A)
A.s
A.s$u%*%diag(A.s$d)%*%t(A.s$v)
11.矩陣QR分解
A為m*n矩陣時可以進行QR分解,A=QR
其中Q'Q=I,在R中可以用函數qr()進行QR分解
#矩陣QR分解
#A為m*n矩陣時可以進行QR分解,A=QR
#其中Q'Q=I,在R中可以用函數qr()進行QR分解
A=matrix(1:16,4,4)
qr(A)
12.矩陣kronecker積
n*m矩陣A與h*k矩陣B的kronecker積為一個nh*mk維矩陣
在R中,kronecker積可以用函數kronecker()來計算
#矩陣kronecker積
#n*m矩陣A與h*k矩陣B的kronecker積為一個nh*mk維矩陣
#在R中,kronecker積可以用函數kronecker()來計算
A=matrix(1:4,2,2)
A
B=matrix(rep(1,4),2,2)
B
kronecker(A,B)
13.矩陣的維數
函數dim()將返回一個矩陣的維數
nrow()返回行數,ncol()返回列數
#矩陣的維數
#函數dim()將返回一個矩陣的維數
#nrow()返回行數,ncol()返回列數
A=matrix(1:12,3,4)
A
dim(A)
nrow(A)
ncol(A)
14.矩陣的行和、列和、行平均數與列平均
#矩陣的行和、列和、行平均數與列平均
rowSums(A)
rowMeans(A)
colSums(A)
colMeans(A)
#還可以用apply()函數實現:apply(X,MARGIN,FUN,......)
#x為矩陣,MARGIN指定對行還是對列操作,1表示行運算,2為對列運算
#FUN用來指定運算函數,“...”用來指定FUN中需要的其他參數
apply(A,1,sum)
apply(A,1,mean)
apply(A,2,sum)
apply(A,2,mean)A=matrix(rnorm(100),20,5)
apply(A,2,var)#計算每一列的方差
apply(A,2,function(x,a)x*a,a=2)