◮ R语言笔记(四): 向量、数组、矩阵与数据框 + 利用矩阵求解二维线性方程组

版权声明:转载请注明出处 https://blog.csdn.net/qq_42292831/article/details/83025156

在笔记一中已经提到了向量,这篇文章主要介绍R语言中的四中常用的结构:

向量:*传送门*

数组

矩阵

数据框

然后在介绍如何利用矩阵求解二维线性方程组。

****************************************************************************************************************************************

一:数组(*数组可以理解是一个向量按照给定的维度进行拆分

数组即是二维向量,矩阵是一种特殊的二维数组
将一个向量转化为一个二位数组(添加指定维度即可)

> x = c(1,2,3,4,5,6);dim(x)<-c(2,3)  #两行三列

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

二:矩阵(矩阵matrix)

将两个向量合成矩阵(按照行合并rbind()+按照列c合并cbind())

> x1 = c(1,2,3,4,5)
> x2 = c(6,7,8,9,0)

> rbind(x1,x2)    #行式合并
   [,1] [,2] [,3] [,4] [,5]
x1    1    2    3    4    5
x2    6    7    8    9    0

> cbind(x1,x2)    #column列式合并
     x1 x2
[1,]  1  6
[2,]  2  7
[3,]  3  8
[4,]  4  9
[5,]  5  0

将一个向量生成矩阵(matrix(x,nrow=?,ncol=?,byrow=T/F))

> a = c(1:12)

> matrix(a,ncol=3,nrow=4,byrow=F)    #column列 row行
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12


# 默认是按照列来存储
# 使用byrow=T即可按照行来排列

对矩阵的操作(转置t()、加减+/-、相乘%*%)

  *注意矩阵的相乘!

> a = c(1:12)
> matrix(a,ncol=3,nrow=4)
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12

> a = matrix(a,ncol=3,nrow=4)

> t(a)    #矩阵的转置
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12

> t(a)+t(a)    #矩阵的相加
     [,1] [,2] [,3] [,4]
[1,]    2    4    6    8
[2,]   10   12   14   16
[3,]   18   20   22   24

> t(a)-t(a)    #矩阵的相减
     [,1] [,2] [,3] [,4]
[1,]    0    0    0    0
[2,]    0    0    0    0
[3,]    0    0    0    0


#############################


> a*a    #矩阵相乘不是这样求的!!!
     [,1] [,2] [,3]
[1,]    1   25   81
[2,]    4   36  100
[3,]    9   49  121
[4,]   16   64  144

> a%*%a    #矩阵相乘正确表示法-1
Error in a %*% a : 非整合参数

> a%*%t(a)    #矩阵相乘正确表示法-2
     [,1] [,2] [,3] [,4]
[1,]  107  122  137  152
[2,]  122  140  158  176
[3,]  137  158  179  200
[4,]  152  176  200  224

对矩阵的求逆solve()

> a = matrix(rnorm(16),4,4)    #产生16个标准正态函数随机数形成矩阵
> a
           [,1]        [,2]       [,3]       [,4]
[1,] -0.7916955 -0.12091979  0.8894439 -0.9282618
[2,] -1.0293705 -0.03193216  1.2088014 -0.8579586
[3,]  0.5910502 -0.13763924 -2.0954597  1.2839705
[4,] -1.2613026  1.68569169  1.1454875  0.7667483

> solve(a)    #矩阵求逆
           [,1]      [,2]       [,3]        [,4]
[1,]  0.1013944 -1.414402 -0.8201621 -0.08648724
[2,]  4.4811933 -4.612241 -0.3206119  0.80112951
[3,] -3.2370056  2.449358 -0.5650455 -0.23193872
[4,] -4.8491425  4.154059  0.1998474 -0.25283530

三:数据框 data.frame()

数据框其实跟矩阵差不多,都是二维表单,但是矩阵中每一个数据都是数值型的,
而数据框中每一列的类型可以是不同的

用法:

x1 = c(1,2,3,4,5,6,7)
x2 = c(5,8,9,5,4,7,6)

x = data.frame(x1,x2)

x = data.frame('重量'=x1,'运费'=x2)




###################################



> x1 = c("aaa","bbb","ty","ju","hh","df","wq")    #这里双引号可以,单引号也可以
> x2 = c(1:7)

> cbind(x1,x2)    #列合成矩阵--->>>注意下面输出数据中的引号
     x1    x2 
[1,] "aaa" "1"
[2,] "bbb" "2"
[3,] "ty"  "3"
[4,] "ju"  "4"
[5,] "hh"  "5"
[6,] "df"  "6"
[7,] "wq"  "7"

> data.frame('重量'=x1,'运费'=x2)    #数据框
  重量 运费
1  aaa    1
2  bbb    2
3   ty    3
4   ju    4
5   hh    5
6   df    6
7   wq    7

四:利用矩阵求解二维线性方程组(使用solve(a,b)函数)

*solve()在上面也用于矩阵的求逆

现在要求解一个四元线性方程组,可以使用4*4型矩阵进行该四个方程的存储:

> a = matrix(rnorm(16),4,4)    #产生16个标准正态函数随机数形成矩阵
> a
           [,1]        [,2]       [,3]       [,4]
[1,] -0.7916955 -0.12091979  0.8894439 -0.9282618
[2,] -1.0293705 -0.03193216  1.2088014 -0.8579586
[3,]  0.5910502 -0.13763924 -2.0954597  1.2839705
[4,] -1.2613026  1.68569169  1.1454875  0.7667483

b = 1,2,3,4

> solve(a,b)
[1] -5.5338453 -2.5006061 -0.9611801  3.0471763

★这里solve()函数的参数的含义:

 *以第一行为例:(-0.7916955*x1) + (-0.12091979*x2) + (0.8894439*x3) +  (-0.9282618*x4) = 1

 *最后显示的结果是x1,x2,x3,x4的值。

****************************************************************************************************************************************

             最快的脚步不是跨越,而是继续,最慢的步伐不是小步,而是徘徊。
 

****************************************************************************************************************************************

猜你喜欢

转载自blog.csdn.net/qq_42292831/article/details/83025156