本文主要是介绍R语言的线性优化(一元、多元、约束条件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
R语言的线性优化(一元、多元、约束条件)
- 一元函数优化求解
- 多元函数优化求解
- 带约束条件的函数优化
一元函数优化求解
R做一元函数优化求解得函数是optimize或者optimise
以函数 ln x − x 2 为例 \text{以函数} \ln x-x^2\text{为例} 以函数lnx−x2为例,现在分别在[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+y−11)2+(x+y2−7)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+x2−11)2−(x1+x22−7)2,x1>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)
这篇关于R语言的线性优化(一元、多元、约束条件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!