3 求矩阵行列式值:det( )
A<-matrix(c(1:8,0),nrow=3,ncol=3);A det(A)
[1] 27 ###结果
4 生成对角阵和对角运算
diag( ): v是一个向量时,diag(v)表示以v的元素为对角线的对角阵,M是一个矩阵时,diag(M)表示取M的对角线上的元素构成的向量 v<-c(1,4,5) diag(v)
M<-array(1:9,dim=c(3,3));M diag(M)
5矩阵范数norm( ):
norm(x, type = c(\
参数x为矩阵,type为字符串,表示计算范数的类型,\范数,\范数,
\为无穷大范数,等。 A<-matrix(c(1,3,2,4),ncol=2) norm(A)
[1] 6 ###结果
二 求解线性方程组
solve(a, b, tol, LINPACK = FALSE, ...)
参数a为方阵,b为向量或矩阵,默认值为单位矩阵,tol为精度要求,当小于精度时,认为矩阵a的各列线性相关,LINPACK为逻辑变量,判断是否使用LINPACK
包,默认值为FALSE.
例 求解线性方程组 AX=b,
,
A<- matrix(c(1:8,0),nrow=3,byrow=TRUE);b<-c(1,1,1)
x<-solve(A,b);x
三 非线性方程求根:uniroot( ) uniroot(f, interval, ...,
lower = min(interval), upper = max(interval), f.lower = f(lower, ...), f.upper = f(upper, ...),
extendInt = c(\ tol = .Machine$double.eps^0.25, maxiter = 1000, trace = 0)
参数f为需求根的函数,interval为包含方程根的初始区间,lower和upper分别为搜索区间的左右端点,默认值分别为interval的最小和最大,分别为左右端点的函数值,默认值由函数计算得到,tol为精度要求,maxiter最大迭代次数,默认值为1000。
例 求解非线性方程:x3-x-1=0 的根,初始区间为[1,2]. f<-function(x) x^3-x-1
uniroot(f,c(1,2)) ####等价:uniroot(f,lower=1,upper=2)
21
polyroot( )函数专为求多项式根: 格式:polyroot( z )
参数z为n维向量,是n-1阶多项式的系数: P(x)=z1+z2x+…+znxn-1
例:求多项式x3-x-1=0的全部根。 polyroot( c(-1,-1,0,1))
[1] -0.662359+0.5622795i -0.662359-0.5622795i 1.324718+0.0000000i ##结果
四. 求函数极值
1求一元函数极值 optimize( )或optimise( ) 格式:
optimize(f = , interval = , ..., lower = min(interval), upper = max(interval), maximum = FALSE, tol = .Machine$double.eps^0.25)
optimise(f = , interval = , ..., lower = min(interval), upper = max(interval), maximum = FALSE, tol = .Machine$double.eps^0.25)
参数f为求极值的函数,interval为向量,表示初始区间,…提供目标函数f的附加参数,lower 和upper分别表示搜索极值的左右端点,默认值由参数interval提供,maximum为逻辑变量,取值为FALSE(默认值)表示求极小, 为TRUE表示求极大,tol为精度要求。返回值为列表,有极小点(minimum)和目标函数值(objective)。
3
例 求一元函数f(x)=x-2x-3在区间[0,2]上的极小点。 f<-function(x) x^3-2*x-3 optimize(f,lower=0,upper=2)
$minimum ###结果 [1] 0.8164968 $objective [1] -4.088662
目标函数有附加参数: f(x)=(x-a)^2 , a=1/3. f<-function(x,a) (x-a)^2
optimize(f, interval=c(0,1), a=1/3) $minimum ###结果 [1] 0.3333333 $objective [1] 0
2求多元函数极值:nlm( ) 格式:
nlm(f, p, ..., hessian = FALSE, typsize = rep(1, length(p)), fscale = 1, print.level = 0, ndigit = 12, gradtol = 1e-6, stepmax = max(1000 * sqrt(sum((p/typsize)^2)), 1000),
22
steptol = 1e-6, iterlim = 100, check.analyticals = TRUE)
参数f为求极值的目标函数,p为初始参数,…提供目标函数f的附加参数,hessian为逻辑变量,取值为FALSE, 当取TRUE时f中包含梯度,steptol表示步长的
精度要求,iterlim最大迭代次数,默认值100。
函数返回值是一个列表,包含minimum极小值,estimate极小点的估计值,code编码,值为1或2时,表示当前点为最优点,值为3,4,5时表示当前点可能不是最优点,iterations迭代次数。
例 求min f(x)=100(x2-x12)2+(1-x1)2极小点,取初始点x(0)=(-1.2,1)T 解:
obj<-function(x) 100*(x[2]-x[1]^2)^2+(1-x[1])^2 nlm(obj,c(-1.2,1))
$minimum
[1] 3.973766e-12 $estimate
[1] 0.999998 0.999996 $gradient
[1] -6.539281e-07 3.335999e-07 $code [1] 1
$iterations [1] 23
四 数值积分
格式:integrate(f, lower, upper, ..., subdivisions = 100,
rel.tol = .Machine$double.eps^0.25, abs.tol = rel.tol, stop.on.error = TRUE, keep.xy = FALSE, aux = NULL)
参数f为被积函数,lower和 upper分别为积分的下限和上限,积分限可以为Inf(表示),…为被积函数的附加参数,subdivisions表示子区间的最大数目,rel.tol为所需的相对精度,abs.tol为所需的绝对精度,其它参数使用默认值。 例 求积分,积分区间[0,1] 解 f<-function(x) exp(-x^2) integrate(f,0,1)
0.74 68241 with absolute error < 8.3e-15 ###结果
23