总结和更正
#-------------------第一套--------------------------#
###第一题######
## 编写函数计算h(x,n)=1+x+x^2
#####第一题############
fun1 = function(x,n){
s = 0 # 定义一个变量接受求和
for (i in 0:n) {
s = s + x^i
}
message('前n项目和为:',s) # 打印结果
}
fun1(2,4) # 调用函数
######第二题###############
## 编写函数计算15,21,39,45,17的乘积,分别用for循环和while循环
######第二题###############
data1 = c(15,21,39,45,17) #定义数据
## for 循环
fun2 = function(data1){
m = 1 # 这里设为1来装连乘
for (i in 1:length(data1)) {
m = m*data1[i]
}
message('最后乘积为:',m) # 打印结果
}
fun2(data1)
###########分割线###############################
## while 仅此条件不同而已
fun3 = function(data1){
m = 1
i = 1 # 这里需要先定义i
while (i<=length(data1)) {
m = m * data1[i]
i =i + 1 # 需要更新变量
}
message('最后乘积为:',m)
}
#######第三题#########
#用循环函数求出1-20之间能被4整除的数的和,并输出结果。
n = 20 # 20结尾的数
s = 0
a = c()# 定义空列装符合条件的值
for (i in 1:n){
if(i %% 4 == 0){
a = c(a,i)
}
}
print(sum(a))
########第四题#########
# x向量的值为100个5以内(包括5)的随机整数,
# 产生一个长度与x相等的y向量,对于x中值为3的元素,
# y的对应元素赋值为0,其余赋值为1。计算y中有多少1。
set.seed(0)
x = round(runif(100,0,5.1)) # 产生100个0-5的整数
y = c(1:length(x)) # 产生空向量
x
y[which(x!=3)]=1
y
y[which(x==3)]=0
y
############第五题############
## (1)读入文件5.txt中的数据,建立y关于x1 x2 x3 x4的线性回归方程。
# 读取数据
data5 = read.csv('./5.txt',sep = '\t',header = TRUE)
# 建立模型
ress = lm(y~x1+x2+x3+x4,data = data5)
summary(ress)
## (2)采用逐步回归法建立y关于x1 x2 x3 x4的线性回归方程,并对方程和回归系数进行显著性检验。
data5.lm1 = step(ress,direction = 'both')
data5.lm1
data5.lm2 = step(ress,direction = 'backward')
data5.lm2
data5.lm3 = step(ress,direction = 'forward')
data5.lm3
#############第六题############
# 使用while循环求1+2+3+…+100的和
# for循环
s = 0
for (i in 1:100) {
s = s + i
}
print(s)
# while循环
i = 1
s = 0
while(i<=100){
s = s + i
i = i + 1
}
print(s)
#############第七题############
fun7 = function(score){
if(score>=90){
print('等级A')
} else if(score>=80){
print('等级B')
} else if(score>=70){
print('等级C')
} else if(score>=60){
print('等级D')
} else{
print('等级E')
}
}
fun7(23)
######第八题######
fun8 <- function(x,u,sigma) {
y = 1/(sqrt(2*pi)*sigma)*exp(-(x-u)^2/(2*sigma^2))
return(y)
}
fun8(1,0,1)
# 校验
dnorm(1,0,1)
#####第九题######
# 用内置函数计算得到
fun99 = function(x){
sin(x)
}
# 计算2-3的积分
integrate(fun99,2,3)
# 先定义一个函数用于判断随机抽取的点在积分区域内或者外
fun9 = function(a){# a是一个矩阵
a[2]-sin(a[1]) # y-y_count 第一个y是随机产生的y,y_count是x计算得到的
}
n = 100000 # 抽取10万次
x = runif(n,2,3)
y = runif(n,0,sin(2))
A = cbind(x,y)
b = apply(A, 1,fun9)
mean(b<=0)*(3-2)*(sin(2)-0)# 通过比例计算积分区域面积
# 第九题补充 计算误差
i = 1
list_a = c()
while (i<=1000) {
fun9 = function(a){# a是一个矩阵
a[2]-sin(a[1]) # y-y_count 第一个y是随机产生的y,y_count是x计算得到的
}
n = 1000 # 抽取10万次
x = runif(n,2,3)
y = runif(n,0,sin(2))
A = cbind(x,y)
b = apply(A, 1,fun9)
squre = mean(b<=0)*(3-2)*(sin(2)-0)# 通过比例计算积分区域面积
error_9 = 0.5738426-squre
list_a = c(list_a,error_9)
i = i + 1
# print(mean(list_a))
}
aa = c(1:1000)
plot(aa,list_a)
# 法2
n = 100000
x = runif(n,2,3)
mean(sin(x))*(3-2)
#######第十题######
data=c(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
fun6 = function(data,alph,u){
x_bar = mean(data)
t_value = (x_bar-u)/(sd(data)/sqrt(length(data)))
print(t_value)
if(abs(t_value)>= qt(1-alph/2,length(data)-1)){
print('拒绝原假设')
}else{
print('接受原假设')
}
# dnorm为概率密度函数,返回给定x下的概率值。dnorm(z)等价于f(x=z)
# pnorm为概率分布函数。pnorm(z)等价于P[x<=z]
# qnorm为pnorm的逆运算,返回给定P下的z。
# rnorm生成符合正太分布的随机数。
}
fun6(data,alph = 0.05,u = 0.5)
1、编写函数计算 h ( x , n ) = 1 + x + x ∧ 2 + ⋯ ⋯ + x ∧ n h(x, n)=1+x+x^{\wedge} 2+\cdots \cdots+x^{\wedge} n h(x,n)=1+x+x∧2+⋯⋯+x∧n
#####第一题############
fun1 = function(x,n){
s = 0
for (i in 0:n) {
s = s + x^i
}
message('前n项目和为:',s)
}
fun1(2,4) # 调用函数
2、编写函数计算15,21,39,45,17的乘积,分别用for循环和while循环
######第二题###############
data1 = c(15,21,39,45,17)
## for 循环
fun2 = function(data1){
m = 1 # 这里设为1来装连乘
for (i in 1:length(data1)) {
m = m*data1[i]
}
message('最后乘积为:',m)
}
fun2(data1)
###########分割线###############################
## while 仅此条件不同而已
fun3 = function(data1){
m = 1
i = 1
while (i<=length(data1)) {
m = m * data1[i]
i =i + 1 # 需要更新变量
}
message('最后乘积为:',m)
}
3、用循环函数求出1-20之间能被4整除的数的和,并输出结果。
n = 20
s = 0
a = c() # 用来装能被4整除的数
for (i in 1:n) {
if(i %% 4 == 0)
a = c(a,i)
}
print(sum(a))
4、x向量的值为100个5以内(包括5)的随机整数,产生一个长度与x相等的y向量,对于x中值为3的元素,y的对应元素赋值为0,其余赋值为1。计算y中有多少1。
###########第四题###########
# 考察which函数使用
# 第一步产生x向量的值为100个5以内(包括5)的随机整数
x = round(runif(100,0,5.1))
y = c() # 产生空向量
x[which(x!=3)]=1 # x其余赋值为1
x[which(x==3)]=0# x中值为3的元素,y的对应元素赋值为0
x
# 注意这里的顺序一定不能乱
message("有",sum(x))
5、
(1)读入文件5.txt中的数据,建立y关于x1 x2 x3 x4的线性回归方程。
(2)采用逐步回归法建立y关于x1 x2 x3 x4的线性回归方程,并对方程和回归系数进行显著性检验。
############第五题############
## (1)读入文件5.txt中的数据,建立y关于x1 x2 x3 x4的线性回归方程。
# 读取数据
data5 = read.csv('./5.txt',sep = '\t',header = TRUE)
# 建立模型
ress = lm(y~x1+x2+x3+x4,data = data5)
summary(ress)
## (2)采用逐步回归法建立y关于x1 x2 x3 x4的线性回归方程,并对方程和回归系数进行显著性检验。
data5.lm1 = step(ress,direction = 'both')
data5.lm1
data5.lm2 = step(ress,direction = 'backward')
data5.lm2
data5.lm3 = step(ress,direction = 'forward')
data5.lm3
6、使用while循环求1+2+3+…+100的和。
i = 1
s = 0
while (i<=100) {
s = i + s
i = i+1 # 更新变量
}
print(s)
7、编写函数,对任一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下:
90-100为A; 80-89为B; 70-79为C; 60-69为D; 0-59为E;
#########第七题###############
#########第七题###############
# print('请输入一个0-100的数,enter两次结束')
# A = scan() # enter两次结束
fun4 = function(A){
if(90<=A) {
print("等级A")
} else if (80<=A) {
print("等级B")
}else if (70<=A) {
print("等级C")
}else if (60<=A) {
print("等级D")
}else {
print("等级E")
}
}
fun4(60)
8、编写函数出任意给定x的值,计算正态分布密度函数N()的值。
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 ( − ∞ < x < + ∞ ) f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{(x-\mu)^{2}}{2 \sigma^{2}}} \quad(-\infty<x<+\infty) f(x)=2πσ1e−2σ2(x−μ)2(−∞<x<+∞)
##########第八题##################
fun5 = function(x,u,sigma){
y = 1/(sqrt(2*pi)*sigma)*(exp(-(x-u)^2/(2*sigma^2)))
return(y)
}
fun5(1,0,1)
# 校验
dnorm(1,0,1)
9、用蒙特卡洛法计算 的值。
∫
2
3
sin
x
d
x
\int_{2}^{3} \sin x d x
∫23sinxdx
###########第九题################
# 基于蒙特卡洛求定积分的两种方法
# 法1
decisionCondition = function(a){
a[2]-sin(a[1])
}
# 用于判断在面积内的函数
n = 100000
x = runif(n,2,3)
y = runif(n,0,sin(2)) # 看图像改数据
A = cbind(x,y)
A
b = apply(A, 1, decisionCondition)
# length(which(b<0))
mean(b<=0)*1*sin(2) # 注意这里,将算出来的面积乘上总面积得到积分区域面积
# 法2
n=10000
x = runif(n,2,3)
mean(sin(x))*1 # 乘以(b-a)
10、给定一组数,检验其均值等于某一常数(t检验)
μ0 = 0.5
H
0
:
μ
=
μ
0
vs
H
1
:
μ
≠
μ
0
H_{0}: \mu=\mu_{0} \text { vs } H_{1}: \mu \neq \mu_{0}
H0:μ=μ0 vs H1:μ=μ0
检验统计量为:
t
=
x
ˉ
−
μ
0
s
/
n
t=\frac{\bar{x}-\mu_{0}}{s / \sqrt{n}}
t=s/nxˉ−μ0
拒绝域为
∣
t
∣
>
t
c
(
n
−
1
)
|t|>t_{c}(n-1)
∣t∣>tc(n−1) 。
X
=
c
(
0.497
,
0.506
,
0.524
,
0.518
,
0.498
,
0.511
,
0.520
,
0.515
,
0.512
)
\mathrm{X}=\mathrm{c}(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
X=c(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
μ
0
=
0.5
\mu_{0}=0.5
μ0=0.5
##########第十题########
data=c(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
fun6 = function(data,alph,u){
x_bar = mean(data)
t_value = (x_bar-u)/(sd(data)/sqrt(length(data)))
if(abs(t_value)>= qt(1-alph/2,length(data)-1)){
print('拒绝原假设')
}else{
print('接受原假设')
}
# dnorm为概率密度函数,返回给定x下的概率值。dnorm(z)等价于f(x=z)
# pnorm为概率分布函数。pnorm(z)等价于P[x<=z]
# qnorm为pnorm的逆运算,返回给定P下的z。
# rnorm生成符合正太分布的随机数。
}
fun6(data,0.975,0.5)