本博客所有内容是原创,未经书面许可,严禁任何形式的转载。
http://blog.csdn.net/u010255642
9)内积
使用crossprod函数求内积。
A.向量内积
设向量A=[x1,x2,...xn],B=[y1,y2,...yn],则矢量A和B的内积表示为:A·B=x1×y1+x2×y2+……+xn×yn。
> a<-c(1:3)
> b<-c(4:6)
> crossprod(a,b)
[,1]
[1,] 32
> a<-c(1:3)
B.矩阵内积
矩阵内积的计算方式相当于第一个参数的转置乘以第二个参数,这个乘法是矩阵乘法。
> b<-array(c(4:6),dim=c(1,3))
> a<-array(c(1:3),dim=c(1,3))
> a
[,1] [,2] [,3]
[1,] 1 2 3
> b
[,1] [,2] [,3]
[1,] 4 5 6
> crossprod(a,b)
[,1] [,2] [,3]
[1,] 4 5 6
[2,] 8 10 12
[3,] 12 15 18
> t(a) %*% b
[,1] [,2] [,3]
[1,] 4 5 6
[2,] 8 10 12
[3,] 12 15 18
>
>
C.对角矩阵
通过向量生成矩阵
> a
[1] 1 2 3 4 5 6 7 8
>
> diag(a)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 0 0 0 0 0 0 0
[2,] 0 2 0 0 0 0 0 0
[3,] 0 0 3 0 0 0 0 0
[4,] 0 0 0 4 0 0 0 0
[5,] 0 0 0 0 5 0 0 0
[6,] 0 0 0 0 0 6 0 0
[7,] 0 0 0 0 0 0 7 0
[8,] 0 0 0 0 0 0 0 8
>
取矩阵的对角线元素组成向量
> a<-array(c(1:16),dim=c(4,4))
> diag(a)
[1] 1 6 11 16
> a
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
>
10)求解线性方程组和逆矩阵
Solve函数求出a %*% x = b中的x向量值,即求解线性方程组,通常使用前2个参数,第一个是a,为系数矩阵 ,第二是b为常数项,当b缺失时,默认为单位矩阵。
ax=b=>ax=I=>a-1ax=a-1I=a-1 =>x=a-1
从上面推导可看出,不提供参数b就能求出a的逆。
求线性方程组的解
> b
[,1]
[1,] 8
[2,] 9
> a
[,1] [,2]
[1,] 1 3
[2,] 2 4
> solve(a,b)
[,1]
[1,] -2.5
[2,] 3.5
>
求矩阵的逆
> a
[,1] [,2]
[1,] 1 3
[2,] 2 4
> solve(a)
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
>
11)求矩阵的特征值
λ是A的特征值等价于说线性系统(A– λI) v = 0 (其中I是单位矩阵)有非零解v (一个特征向量),因此等价于说行列式:
函数:是一个关于λ的多项式,称为A的特征多项式。矩阵的特征值也就是其特征多项式的零点。求一个矩阵A的特征值可以通过求解方程来得到。
Eigen函数可以求特征值,其调用格式如下:
eigen(x, symmetric, only.values = FALSE)
x为需要求特征值的矩阵;symmetric是逻辑型表示是否是对称矩阵。
对称矩阵中的右上至左下方向元素以主对角线(左上至右下)为轴进行对称。若将其写作,则:
only.values 如果为TRUE,则只返回特征值,否则返回特征值和特征向量。
> a<-array(c(1:16),dim=c(4,4))
> eigen(a)
$values
[1] 3.620937e+01 -2.209373e+00 1.599839e-15 7.166935e-16
$vectors
[,1] [,2] [,3] [,4]
[1,] 0.4140028 0.82289268 -0.5477226 0.1125155
[2,] 0.4688206 0.42193991 0.7302967 0.2495210
[3,] 0.5236384 0.02098714 0.1825742 -0.8365883
[4,] 0.5784562 -0.37996563 -0.3651484 0.4745519
>
> eigen(a,only.values=FALSE)
$values
[1] 5.3722813 -0.3722813
$vectors
[,1] [,2]
[1,] -0.5657675 -0.9093767
[2,] -0.8245648 0.4159736
12)求矩阵的行列式值
> a<-array(c(1:4),dim=c(2,2))
> det(x)
[1] -2
>