数学之路(2)-数据分析-R基础(16)

来源:互联网 发布:金山软件 雪球 编辑:程序博客网 时间:2024/05/09 13:36

本博客所有内容是原创,未经书面许可,严禁任何形式的转载。

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 (一个特征向量),因此等价于说行列式:

\det(A - \lambda I) = 0 \!\

函数:p_A(\lambda) = \det(A - \lambda I) \!\ 是一个关于λ多项式,称为A特征多项式。矩阵的特征值也就是其特征多项式的零点。求一个矩阵A的特征值可以通过求解方程 p_A(\lambda) = 0 来得到。


Eigen函数可以求特征值,其调用格式如下:

eigen(x, symmetric, only.values = FALSE)

x为需要求特征值的矩阵;symmetric是逻辑型表示是否是对称矩阵。

对称矩阵是一个方形矩阵,其转置矩阵和自身相等。

A = A^{\textrm{T}} , \,\!

对称矩阵中的右上至左下方向元素以主对角线(左上至右下)为轴进行对称。若将其写作A = (a_{ij}),则:

a_{ij} = a_{ji} \,\!

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


原创粉丝点击