R语言的线性优化(一元、多元、约束条件)

R语言的线性优化(一元、多元、约束条件)

一元函数优化求解

R做一元函数优化求解得函数是optimize或者optimise
在这里插入图片描述
以函数 ln ⁡ x − x 2 为例 \text{以函数} \ln x-x^2\text{为例} 以函数lnxx2为例,现在分别在[1,4]上这个函数的最大值,最小值

f<-function(x) log(x)-x^2;f#定义函数f
curve(f,xlim=c(1,4))#画出f在1,4上的函数图像
optimise(f,interval = c(1,4),tol=0.0001)#默认求最小值
optimise(f,interval = c(1,4),tol=0.0001,maximum = T)#添加参数求最大值

在这里插入图片描述
可以看出这个函数在我定义区间上的最大值和最小值,和此时x的取值
如果你想用ggplot绘制函数,可以这样:

a <- seq(1,4,0.001);b <- log(a)-a^2;c <- data.frame(a,b);c
ggplot(c,aes(a,b))+geom_point(size=0.5)+
  labs(x=quote(x),y=quote(lnx-x^2))+
  theme_economist()

在这里插入图片描述

多元函数优化求解

多元函数优化求解得命令是optim,其基本用法是:
在这里插入图片描述
求解函数 f ( x , y ) = ( x 2 + y − 11 ) 2 + ( x + y 2 − 7 ) 2 的极值 \text{求解函数}f\left( x,y \right) =\left( x^2+y-11 \right) ^2+\left( x+y^2-7 \right) ^2\text{的极值} 求解函数f(x,y)=(x2+y11)2+(x+y27)2的极值

x1 <- x2 <- seq(-10,10,length=100)
fr2 <- function(x){
  x1=x[1]
  x2=x[2]
  (x1^2+x2-11)^2+(x1+x2^2-7)^2
}
persp(x1,x2,z,box=T,border=T,theta=45,phi=35,col="purple")#画三维图
optim(c(-5,5),fr2)

在这里插入图片描述

在这里插入图片描述

带约束条件的函数优化

求解函数 f ( x , y ) = ( x 1 2 + x 2 − 11 ) 2 − ( x 1 + x 2 2 − 7 ) 2 , x 1 > 0 , x 2 > 0 的极值 \text{求解函数}f\left( x,y \right) =\left( {x_1}^2+x_2-11 \right) ^2-\left( x_1+{x_2}^2-7 \right) ^2\text{,}x_1>0,x_2>0\text{的极值} 求解函数f(x,y)=(x12+x211)2(x1+x227)2x1>0,x2>0的极值
这里要用到constrOptim函数:
在这里插入图片描述

x1 <- x2 <- seq(-10,10,length=100)
fr2 <- function(x){
  x1=x[1]
  x2=x[2]
  (x1^2+x2-11)^2+(x1+x2^2-7)^2
}
ui<-matrix(c(1,0,0,1),nc=2);ui
ci <- c(0,0)
constrOptim(c(0.2,0.5),grad=NULL,fr2,ui=ui,ci=ci)

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值