我有这个功能
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。
当我使用:
optimize(
f = hazwil2,
interval = c(0.1,12),
flow = 100,
leng = 400
)我得到了diam的最大可能值(11.9),而psi2的值非常小。我的函数是单调的,所以psi2的最小化总是会导致最大可能的diam。我想我很难为我的optimize()函数设置约束。
发布于 2018-06-21 01:56:34
uniroot()找到曲线/函数超过零的位置。从PSI中减去2,以求最小允许直径。它在3.564横过,所以4是使psi低于2的最小整数。
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之间的任意决策。
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

https://stackoverflow.com/questions/50958860
复制相似问题