8.一元函数极值
f<-function(x) x^3-2*x-5 # 定义函数
optimize(f,lower=0,upper=2) # 返回值 : 极小值点和目标函数
f<-function(x,a) (x-a)^2 # 定义含有参数的函数
optimize(f,interval=c(0,1),a=1/3) # 在函数中输入附加参数
9.多元函数极值 (1)
obj <-function (x){ # 定义函数
F<-c(10*(x[2]-x[1]^2),1-x[1]) # 视为向量 sum (F^2) } # 向量对应分量平方后求和 nlm(obj,c(-1.2,1))
(2)
fn<-function(x){ # 定义目标函数
F<-c(10*(x[2]-x[1]^2), 1-x[1]) t(F)%*%F } # 向量的内积
gr <- function(x){ # 定义梯度函数 F<-c(10*(x[2]-x[1]^2), 1-x[1])
J<-matrix(c(-20*x[1],10,-1,0),2,2,byrow=T) #Jacobi 矩阵 2*t(J)%*%F } # 梯度
optim(c(-1.2,1), fn, gr, method=\
最优点 (par) 、最优函数值 (value)
10.梯形求积分公式
(1)求积分程序: (trape.R)
trape<-function(fun, a, b, tol=1e-6){ # 精度为 10 -6
N <- 1; h <- b-a ; T <- h/2 * (fun(a) + fun(b)) # 梯形面积 repeat{h <- h/2; x<-a+(2*1:N-1)*h; I <-T/2 + h*sum(fun(x)) if(abs(I-T) < tol) break; N <- 2 * N; T = I }; I}
(2)
source(\调用函数 f<-function(x) exp(-x^2) trape(f,-1,1)
(3)常用求积分函数
f<-function(x)exp(-x^2) # 定义函数 integrate(f,0,1) integrate(f,0,10) integrate(f,0,100)
integrate(f,0,10000) # 当积分上限很大时,结果出现问题 integrate(f,0,Inf) # 积分上限为无穷大
ft<-function(t) exp(-(t/(1-t))^2)/(1-t)^2 # 对上述积分的被积函数 e 2 作变量代换 t=x/(1+x) 后的函数
integrate(ft,0,1) # 与上述计算结果相同,且精度较高
第二部分、教材例题:
1.随机抽样
(1)等可能的不放回的随机抽样:
> sample(x, n) 其中x为要抽取的向量, n为样本容量
(2)等可能的有放回的随机抽样:
> sample(x, n, replace=TRUE)
其中选项replace=TRUE表示有放回的, 此选项省略或replace=FALSE表示抽样是不放回的
sample(c(\sample(1:6, 10, replace=T)
(3)不等可能的随机抽样:
> sample(x, n, replace=TRUE, prob=y)
其中选项prob=y用于指定x中元素出现的概率, 向量y与x等长度 sample(c(\成功\失败\sample(c(1,0), 10, replace=T, prob=c(0.9,0.1))
2.排列组合与概率的计算 1/prod(52:49) 1/choose(52,4)
3.概率分布
qnorm(0.025) #显著性水平为5%的正态分布的双侧临界值 qnorm(0.975)
1 - pchisq(3.84, 1) #计算假设检验的p值
2*pt(-2.43, df = 13) #容量为14的双边t检验的p值
4. limite.central( )的定义
limite.central <- function (r=runif, distpar=c(0,1), m=.5,
s=1/sqrt(12),
n=c(1,3,10,30), N=1000) { for (i in n) {
if (length(distpar)==2){
x <- matrix(r(i*N, distpar[1],distpar[2]),nc=i) }
else {
x <- matrix(r(i*N, distpar), nc=i) }
x <- (apply(x, 1, sum) - i*m )/(sqrt(i)*s)
hist(x,col=\ ylim=c(0,max(.4, density(x)$y))) lines(density(x), col=\
curve(dnorm(x), col=\ if( N>100 ) {
rug(sample(x,100)) }
else { rug(x) } } }
5.直方图
x=runif(100,min=0,max=1) hist(x)