解法并不单一,下列方法带有璇子个人的偏好,因此仅供参考。如有错误,欢迎在评论区斧正!
2.1 建立一个R 文件,在文件中输入变量 x=(1,2,3)^T, y=(4,5,6)^T,并作以下运算。
(1)计算z=2x+y+e,其中e=(1,1,1)^T;
(2)计算x 与y 的内积;
(3)计算x 与y 的外积。
变量输入:
x <- c(1,2,3)
y <- c(4,5,6)
e <- rep(1,3)
计算:
(1)z <- 2*x+y+e
(2)z1 <- x%*%y
(3)z2 <- x%o%y 或 outer(x,y,FUN = "*") #两种方法都可
结果:
> z
[1] 7 10 13
> z1 注:1*4+2*5+3*6
[,1]
[1,] 32
> z2 注:x向量元素逐个与y相乘形成矩阵
[,1] [,2] [,3]
[1,] 4 5 6
[2,] 8 10 12
[3,] 12 15 18
2.2 将1,2,…,20 构成两个4×5 阶的矩阵,其中矩阵A 是按列输入,矩阵B 是按行输入,并作
如下运算。
(1)C=A+B
(2)D=AB‘
(3)E=(eij)n×n,其中eij =aij.bij
(4)F 是由A 的前3 行和前3 列构成的矩阵
(5)G 是由矩阵B 的各列构成的矩阵,但不含B 的第3 列。
变量输入:
A <- matrix(c(1:20),4,5,byrow = F)
B <- matrix(c(1:20),4,5,byrow = T)
计算:
(1)c <- A+B
(2)D <- A%*%t(B) #内积
(3)E <- A*B
(4)F <- A[c(1:3),c(1:3)]
(5)G <- B[,-3]
结果:
> c
[,1] [,2] [,3] [,4] [,5]
[1,] 2 7 12 17 22
[2,] 8 13 18 23 28
[3,] 14 19 24 29 34
[4,] 20 25 30 35 40
> D
[,1] [,2] [,3] [,4]
[1,] 175 400 625 850
[2,] 190 440 690 940
[3,] 205 480 755 1030
[4,] 220 520 820 1120
> E
[,1] [,2] [,3] [,4] [,5]
[1,] 1 10 27 52 85
[2,] 12 42 80 126 180
[3,] 33 84 143 210 285
[4,] 64 136 216 304 400
> F
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
> G
[,1] [,2] [,3] [,4]
[1,] 1 2 4 5
[2,] 6 7 9 10
[3,] 11 12 14 15
[4,] 16 17 19 20
2.3 构造一个向量x,向量是由5 个1,3 个2,4 个3 和2 个4 构成,注意用到rep()函数。
数据生成:
x <- c(rep(1,5),rep(2,3),rep(3,4),rep(4,2))
> x
[1] 1 1 1 1 1 2 2 2 3 3 3 3 4 4
2.4 生成一个5 阶的Hilbert 矩阵,
H=(hij)n×n,
h
i
j
=
1
i
+
j
−
1
hij =\frac{1}{i+j-1}
hij=i+j−11, i,j=1,2,…,n.
利用Matrix包生成Hilbert矩阵:
> install.packages("Matrix")
> library(Matrix)
> H <- Hilbert(5) #该矩阵也可利用循环语句得到,此处略
(1)计算Hilbert 矩阵H 的行列式
(2)求H 的逆矩阵
(3)求H 的特征值和特征向量
(1)det(H)
(2)solve(H)
(3)eigen(H)
结果:
> det(H)
> [1] 3.749295e-12
>
> solve(H)
5 x 5 Matrix of class "dpoMatrix"
[,1] [,2] [,3] [,4] [,5]
[1,] 25 -300 1050 -1400 630
[2,] -300 4800 -18900 26880 -12600
[3,] 1050 -18900 79380 -117600 56700
[4,] -1400 26880 -117600 179200 -88200
[5,] 630 -12600 56700 -88200 44100
> eigen(H)
eigen() decomposition
$values
[1] 1.567051e+00 2.085342e-01 1.140749e-02 3.058980e-04
[5] 3.287929e-06
$vectors
[,1] [,2] [,3] [,4]
[1,] -0.7678547 0.6018715 -0.2142136 0.04716181
[2,] -0.4457911 -0.2759134 0.7241021 -0.43266733
[3,] -0.3215783 -0.4248766 0.1204533 0.66735044
[4,] -0.2534389 -0.4439030 -0.3095740 0.23302452
[5,] -0.2098226 -0.4290134 -0.5651934 -0.55759995
[,5]
[1,] 0.006173863
[2,] -0.116692747
[3,] 0.506163658
[4,] -0.767191193
[5,] 0.376245545
2.5 已知有5 名学生的数据,如表2-4 所示,用数据框的形式读入数据。
变量取值:
SID <- c(1:5)
NAME <- c('张三','李四','王五','赵六','丁一')
SEX <- c('女','男','女','男','女')
AGE <- c(14,15,16,14,15)
HEIGHT <- c(156,165,157,162,159)
WEIGHT <- c(42.0,49.0,41.5,52.0,45.5)
数据框生成:
> chart <- data.frame(SID,NAME,SEX,AGE,HEIGHT,WEIGHT)
> chart
SID NAME SEX AGE HEIGHT WEIGHT
1 1 张三 女 14 156 42.0
2 2 李四 男 15 165 49.0
3 3 王五 女 16 157 41.5
4 4 赵六 男 14 162 52.0
5 5 丁一 女 15 159 45.5
2.6 将习题2.5 中的数据表2-4 的数据写成一个纯文本文件,用函数read.table()读该文件,然后再用函数write.csv()写成一个能用excel 表能打开的文件,并用excel 表打开。
①读取文本文件:
> setwd("~/RData")
> read.table('24.txt',header = T)
SID NAME SEX AGE HEIGHT WEIGHT
1 1 张三 女 14 156 42.0
2 2 李四 男 15 165 49.0
3 3 王五 女 16 157 41.5
4 4 赵六 男 14 162 52.0
5 5 丁一 女 15 159 45.5
②书写文件并用excel打开
> m <- read.table('24.txt',header = T)
> write.csv(m,file = "mydata.csv",row.names = F)
在Rstudio右下的file处可见新生成的文件
用excel打开mydata.csv: