1、目录:1_矩阵的申城2_矩阵的四则运算3_矩阵的矩阵运算4_矩阵的分解1_1 将向量定义成数组向量只有定义了维数向量(dim 属性)才能被看做是数组,比如z A=matrix(1:15,nrow=3,ncol=5) A,1 ,2 ,3 ,4 ,51, 1 4 7 10 132, 2 5 8 11 143, 3 6 9 12 152_矩阵的四则运算可以对数组直接进行四则运算(加减乘除) ,这时进行的数组对应元素的四则运算。一般情况下参加运算的矩阵或者数组的维数是相通的,但也可以计算不同维的,这时要将对应的元素补足。3_1 转置运算对于矩阵 A,函数 t(A)表示矩阵 A 的转置,如: A A,1
2、 ,2 ,3 ,4 ,51, 1 4 7 10 132, 2 5 8 11 143, 3 6 9 12 15 t(A),1 ,2 ,31, 1 2 32, 4 5 63, 7 8 94, 10 11 125, 13 14 153_2 求方阵的行列式函数 det()是求矩阵行列式的值,如det(matrix(1:4,nrowx=1:5; Y=2*1:5x%*%y,11,110函数 crossprod()是内积运算函数(表示交叉乘积) ,crossprod(x,y) 计算向量 x 与 y 的内积,即 t(x) %*% y。crossprod(x)表示 x 与 x 的内积.类似地,tcrosspro
3、d(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 102, 4 8 12 16 203, 6 12 18 24 304
4、, 8 16 24 32 405, 10 20 30 40 504.向量的外积(叉积)设 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,fun=”*”)其中 x, y 矩阵(或向量),fun 是作外积运算函数,缺
5、省值为乘法运算。函数 outer()在绘制三维曲面时非常有用,它可生成一个 x 和 y 的网格。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 69 243, 138 84 30 crossprod(A,B)=t(A)%*%
6、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 TRUE6.生成对角阵和矩阵取对角运算函数 diag()依赖于它的变量,当 v 是一个向量时,diag(v)表示以 v 的元素为对角线元素的对角阵.当 M 是一个矩阵时,则 diag(M)表示的是取 M 对角线上的元素的向量.如 v=c(1,4,5); diag(v);,1 ,2 ,31, 1 0 02, 0 4
7、03, 0 0 5 M=array(1:9,dim=c(3,3); diag(M);1 1 5 97.解线性方程组和求矩阵的逆矩阵若求解线性方程组 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.806634e-16 solve(A);,1 ,2 ,31, -0.6666667 -1.333333
8、 12, -0.6666667 3.666667 -23, 1.0000000 -2.000000 18.求矩阵的特征值与特征向量函数 eigen(Sm)是求对称矩阵 Sm 的特征值与特征向量,其命令形式为:ev=eigen(Sm),则 ev 存放着对称矩阵 Sm 特征值和特征向量,是由列表形式给出的,其中 ev$values 是 Sm的特征值构成的向量,ev$vectors 是 Sm 的特征向量构成的矩阵.如 Sm=crossprod(A,A); ev=eigen(Sm); ev;$values1 303.19533618 0.76590739 0.03875643$vectors,1 ,2
9、 ,31, -0.4646675 0.833286355 0.29952952, -0.5537546 -0.009499485 -0.83262583, -0.6909703 -0.552759994 0.4658502(补充:函数 eigen(Sm) 计算矩阵 A 的特征值和特征向量,函数的结果包括两个成分,特征值和特征向量,表达式 ev A=array(c(1,1,1,4,2,1,1,9,3),dim A,1 ,2 ,31, 1 4 12, 1 2 93, 1 1 3 det(A)1 20 D=eigen(A) D$values1 6.861946+0.000000i -0.430973
10、+1.651934i -0.430973-1.651934i$vectors,1 ,2 ,31, 0.5688541+0i 0.8556153+0.0000000i 0.8556153+0.0000000i2, 0.7483780+0i -0.2834343+0.3928919i -0.2834343-0.3928919i3, 0.3410799+0i -0.0906251-0.1581472i -0.0906251+0.1581472i(3) ,特征值分解的性质:我们知道当所求的特征向量构成的矩阵可逆时,会满足,J 的对角线即为上述 Values 的值,我们验证一下:1XA solve(D$
11、vectors)%*%A%*%D$vectors,1 ,2 ,31,6.861946e+00+0.000000e+00i 0.000000e+00+4.440892e-16i 0.000000e+00-4.440892e-16i2, -7.771561e-16-3.386180e-15i -4.309729e-01+1.651934e+00i 2.775558e-16-3.330669e-16i3, -3.330669e-16+2.720046e-15i 2.775558e-16+5.828671e-16i -4.309729e-01-1.651934e+00i计算的精度还是比较高的。4_2
12、矩阵的奇异值分解函数 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 A,1 ,2 ,31, 1 2 32, 4 5 63, 7 8 10 SVD SVD$d1 17.4125052 0.8751614 0.1968665$u,1 ,2 ,31, -0.2093373 0.96438514 0.16167
13、622, -0.5038485 0.03532145 -0.86306963, -0.8380421 -0.26213299 0.4785099$v,1 ,2 ,31, -0.4646675 -0.833286355 0.29952952, -0.5537546 0.009499485 -0.83262583, -0.6909703 0.552759994 0.4658502 attach(SVD) d1 17.4125052 0.8751614 0.1968665 u,1 ,2 ,31, -0.2093373 0.96438514 0.16167622, -0.5038485 0.03532
14、145 -0.86306963, -0.8380421 -0.26213299 0.4785099 v,1 ,2 ,31, -0.4646675 -0.833286355 0.29952952, -0.5537546 0.009499485 -0.83262583, -0.6909703 0.552759994 0.4658502 u%*%diag(d)%*%t(v) #diag(d)表示由 d 向量为对角线生成的矩阵,1 ,2 ,31, 1 2 32, 4 5 63, 7 8 104_3 qr 分解设 A 为 m*n 矩阵,如果存在 m*m 矩阵酉矩阵 Q(方阵 U 的共轭转置乘以 U 等于
15、单位阵,则 U 是酉矩阵。即酉矩阵的逆矩阵与其共轭转置矩阵相等。 )和 m*n 阶阶梯形矩阵 R,使得 A=QR,那么次分解成为 QR 分解,QR 分解在解决最小二乘问题,特征值计算等方面有着十分重要的作用。#建立矩阵 A A,1 ,2 ,31, 1 5 92, 2 6 103, 3 7 114, 4 8 12 QR QR$qr,1 ,2 ,31, -5.4772256 -12.7801930 -2.008316e+012, 0.3651484 -3.2659863 -6.531973e+003, 0.5477226 -0.3781696 1.601186e-154, 0.7302967 -0
16、.9124744 -5.547002e-01$rank1 2$qraux1 1.182574 1.156135 1.832050$pivot1 1 2 3attr(,“class“)1 “qr“ #提取 Q,R 并验证分解的正确性 Q=qr.Q(QR) R=qr.R(QR) Q,1 ,2 ,31, -0.1825742 -8.164966e-01 -0.40008742, -0.3651484 -4.082483e-01 0.25463293, -0.5477226 -1.665335e-16 0.69099654, -0.7302967 4.082483e-01 -0.5455419 R,1
17、 ,2 ,31, -5.477226 -12.780193 -2.008316e+012, 0.000000 -3.265986 -6.531973e+003, 0.000000 0.000000 1.601186e-15 Q%*%R,1 ,2 ,31, 1 5 92, 2 6 103, 3 7 114, 4 8 12 4_4Schur 分解引言从特征值的分解中可以看出,特征值的分解是有条件的,如果特征向量不是线性无关的,那么对于一个矩阵来说便不能采用特征值分解的方法对矩阵进行分解。例如对于矩阵 A=t(array(c(6,12,19,-9,-20,-33,4,9,15),dim A,1 ,2
18、 ,31, 6 12 192, -9 -20 -333, 4 9 15 det(A)1 -1 W=eigen(A) W$values1 1 -1 1$vectors,1 ,2 ,31, 0.4082483 -0.4740998 -0.40824832, -0.8164966 0.8127426 0.81649663, 0.4082483 -0.3386427 -0.4082483 attach(W) vectors,1 ,2 ,31, 0.4082483 -0.4740998 -0.40824832, -0.8164966 0.8127426 0.81649663, 0.4082483 -0.
19、3386427 -0.4082483 det(vectors)1 -7.022867e-10 det(Re(vectors)1 -7.022867e-10 solve(vectors),1 ,2 ,31, 7.874296e+07 7.874296e+07 7.874296e+072, 3.691206e+00 1.107362e+01 1.845603e+013, 7.874295e+07 7.874295e+07 7.874295e+07很显然 vectors 不是一个可逆矩阵此时进行特征值分解这种方法是不可行的,对于这种情况我们可以做 Schur 分解。Schur 分解描述对于任意的方阵 A,其 schur 分解的形式为,A=USU(H) ,其中 U 是标准的正交矩阵(即满足 UU(H)=I) ,S 为上三角矩阵,并且对角线上的元素为 A 的特征值。由于此函数在包 Matrix 中,所以使用前必须调入。并且注意 matrix 和 Matrix 和区别。