首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >约束条件下R中函数的优化

约束条件下R中函数的优化
EN

Stack Overflow用户
提问于 2018-06-21 00:43:21
回答 1查看 346关注 0票数 0

我有这个功能

代码语言:javascript
运行
复制
hazwil2 <- function(diam, flow, leng){
  psi2=((1/(2.31*100))*1050*((flow/140)^1.852)*leng*diam^-4.87)
  return(psi2)
}

我试图通过改变diam的值来使用optimize()来最小化psi2。我不是在寻找绝对最小值,而是寻找将psi2保持在2以下的最小值。另外,我应该指出,diam是管道的直径,所以它只能是一个离散值,2、3、4、5或6。

当我使用:

代码语言:javascript
运行
复制
optimize(
  f = hazwil2,
  interval = c(0.1,12),
  flow = 100,
  leng = 400
)

我得到了diam的最大可能值(11.9),而psi2的值非常小。我的函数是单调的,所以psi2的最小化总是会导致最大可能的diam。我想我很难为我的optimize()函数设置约束。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 01:56:34

uniroot()找到曲线/函数超过零的位置。从PSI中减去2,以求最小允许直径。它在3.564横过,所以4是使psi低于2的最小整数。

代码语言:javascript
运行
复制
intercept   <- 2L
uniroot(
  function(x) hazwil2(x, 100, 400) - intercept ,
  interval = c(3, 4)
)

curve(expr=hazwil2(x, 100, 400), from=2.5, to=5)
abline(a=intercept, b=0, col="blue")

curve()图影响了搜索直径在3到4之间的任意决策。

代码语言:javascript
运行
复制
Result of `uniroot()`:
$`root`
[1] 3.564091

$f.root
[1] -5.618425e-05

$iter
[1] 6

$init.it
[1] NA

$estim.prec
[1] 6.103516e-05

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50958860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档